From ed4d3d79d8f5185c39803053a7cf429c0f21d92c Mon Sep 17 00:00:00 2001 From: Aere Network Date: Wed, 14 Oct 2026 12:42:19 +0300 Subject: [PATCH] exposure-report: the quantum exposure report for Bitcoin and Ethereum addresses (three declared modes, two labels, named evidence, AIP-23 compliance envelope); README: the dependency exception and the measured test rows --- CITATIONS-UNRESOLVED.md | 11 +- README.md | 9 +- exposure-report/README.md | 541 ++ exposure-report/adaptoare.mjs | 631 ++ exposure-report/bitcoin.mjs | 473 + exposure-report/clasifica.mjs | 440 + exposure-report/ethereum.mjs | 236 + exposure-report/fixturi/alese.json | 109 + exposure-report/fixturi/bitcoind.json | 1248 +++ exposure-report/fixturi/electrum.json | 231 + exposure-report/fixturi/esplora.json | 12104 ++++++++++++++++++++++++ exposure-report/fixturi/eth-rpc.json | 1927 ++++ exposure-report/fixturi/vectori.txt | 16 + exposure-report/limbaj.mjs | 31 + exposure-report/machete.mjs | 105 + exposure-report/noble.mjs | 35 + exposure-report/package.json | 15 + exposure-report/paza-retea.mjs | 262 + exposure-report/proba-expunere.mjs | 1762 ++++ exposure-report/raport.mjs | 277 + 20 files changed, 20458 insertions(+), 5 deletions(-) create mode 100644 exposure-report/README.md create mode 100644 exposure-report/adaptoare.mjs create mode 100644 exposure-report/bitcoin.mjs create mode 100644 exposure-report/clasifica.mjs create mode 100644 exposure-report/ethereum.mjs create mode 100644 exposure-report/fixturi/alese.json create mode 100644 exposure-report/fixturi/bitcoind.json create mode 100644 exposure-report/fixturi/electrum.json create mode 100644 exposure-report/fixturi/esplora.json create mode 100644 exposure-report/fixturi/eth-rpc.json create mode 100644 exposure-report/fixturi/vectori.txt create mode 100644 exposure-report/limbaj.mjs create mode 100644 exposure-report/machete.mjs create mode 100644 exposure-report/noble.mjs create mode 100644 exposure-report/package.json create mode 100644 exposure-report/paza-retea.mjs create mode 100644 exposure-report/proba-expunere.mjs create mode 100644 exposure-report/raport.mjs diff --git a/CITATIONS-UNRESOLVED.md b/CITATIONS-UNRESOLVED.md index 5ee96dd..811e67a 100644 --- a/CITATIONS-UNRESOLVED.md +++ b/CITATIONS-UNRESOLVED.md @@ -1,7 +1,7 @@ # Citations in this repository that you cannot open This file is generated by the publication stager of this repository (scripts/legaturi-declaratie.cjs in the Aere working -tree) and enforced by legaturi.cjs. It is the complete list, measured on 2026-10-12, of every path cited in this +tree) and enforced by legaturi.cjs. It is the complete list, measured on 2026-10-14, of every path cited in this repository that does not resolve to a published file. A citation is a promise that a claim is checkable. Where the target is not published, or names a file the reader creates @@ -12,9 +12,16 @@ wrote it. Paths that DO resolve are written relative to a side-by-side checkout of the Aere repositories, so they begin with a repository name, for example `aere-contracts/contracts/pqc/AereCryptoRegistry.sol`. -Unresolvable distinct paths in this repository: **4**. +Unresolvable distinct paths in this repository: **11**. +- `addresses.txt` cited in: aere-quantum/exposure-report/README.md +- `antete.mjs` cited in: aere-quantum/exposure-report/README.md +- `btc/antete.mjs` cited in: aere-quantum/exposure-report/README.md - `data/audit.log` cited in: aere-quantum/pq-kms/README.md - `data/root-check.json` cited in: aere-quantum/pq-kms/README.md +- `plic-aip23.json` cited in: aere-quantum/exposure-report/README.md - `proba-client-real.mjs` cited in: aere-quantum/readiness/README.md +- `raport.json` cited in: aere-quantum/exposure-report/README.md +- `raport.md` cited in: aere-quantum/exposure-report/README.md +- `verify.mjs` cited in: aere-quantum/exposure-report/README.md - `wallet.json` cited in: aere-quantum/agents/x402/README.md diff --git a/README.md b/README.md index 8e50847..64f9fb8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ # Aere Quantum Self-hosted post-quantum infrastructure from Aere Network. Each component is a few files with **no dependencies**: Node.js 24 -and the OpenSSL 3.5 it ships with (`node:crypto`), nothing from a package registry. The two exceptions need `ethers`: the -notarization command of the verification layer, and the agents' x402 wallet (EIP-712 and secp256k1). +and the OpenSSL 3.5 it ships with (`node:crypto`), nothing from a package registry. The exceptions: `ethers` for the +notarization command of the verification layer and for the agents' x402 wallet (EIP-712 and secp256k1); `@noble/hashes` and +`@noble/curves` 1.x for the exposure report (keccak-256, RIPEMD-160, secp256k1 public-key recovery). | component | what it does | |---|---| @@ -23,6 +24,7 @@ notarization command of the verification layer, and the agents' x402 wallet (EIP | [`conformance/`](conformance/) | a conformance suite for the AIP-23 proof kinds: one verdict form over the verifiers published here (four levels: integrity, authenticity, anchoring, finality; each passed, failed or not measured, with the named rule), 181 rules of eleven verifiers read from their code (the presentation verifier of identity/ and the device verifier of device-identity/ among them since 2026-10-05), 422 vectors derived from the producers and from evidence recorded on testnet 28001 (each invalid one is one operation away from one that is not, or one change at its producer, and must be refused for exactly its named rules), and a runner that scores any implementation given as a command, in any language; a second implementation in Python covers 6 of the 181 rules. Not a certification and not an audit | | [`identity/`](identity/) | post-quantum credentials: an issuer signs claims (hybrid Ed25519 + ML-DSA-65, both required), the holder shows only the claims it picks (selective disclosure in the manner of SD-JWT, RFC 9901, in a format of its own), bound to the verifier's audience and nonce; delegation to a phone, an agent or a ten-minute session key that can only narrow; revocation and an issuer status list in the manner of W3C Bitstring Status List; all checked offline from the files; and compliance without surveillance: a verifier's policy (issuers, required claims) judged on a presentation, recorded as an AIP-23 envelope that carries no personal data; and the Travel Rule between VASPs, the IVMS101 data sealed for the receiving VASP with a hybrid X25519 + ML-KEM-768 key encapsulation, signed, bound to the transfer and acknowledged; and the same credentials as standard SD-JWT (IETF RFC 9901): issued with the issuer's Ed25519 key (EdDSA) or its ML-DSA-65 key, presented with a key binding JWT, and verified against the RFC's own example vectors (`identity-cli.mjs verify-sdjwt`, behind Aere Cloud's POST /v1/identity/sd-jwt/verify) | | [`device-identity/`](device-identity/) | what a machine is, as a chain of signed statements checked offline: the manufacturer's credential for the device key (the manufacturer and the owners sign hybrid, Ed25519 + ML-DSA-65, both required; the device key is ML-DSA-65), a firmware release with a floor and retractions (a rolled-back or retracted firmware is refused), ownership by transfers each signed by the owner before, the current owner's authorization, a status registry in which the manufacturer's retirement is final and an owner's lasts as long as its ownership (after a sale the records of the previous owner are named and not applied: a seller could date one before the sale after it; a retirement by an owner that survives a sale needs a witness of time that is not built), and the device's fresh attestation to the verifier's nonce, with an AIP-23 envelope that can be notarized and read back under a post-quantum certified anchor; one verifier makes every check it can reach, names every rule that refused and says VALID, PARTIAL (what it was not handed, or could not read) or INVALID. The device key is a software key: no TPM, secure element or TEE is used or checked, and the README says what that leaves open | +| [`exposure-report/`](exposure-report/) | classifies Bitcoin and Ethereum addresses by whether their public key is already readable from chain data, in three declared modes (offline, by address or script type only; through your own Electrum server, Esplora index, Bitcoin Core or Ethereum JSON-RPC, one declared target; through a third-party provider only with written consent, recorded in the report), with exactly two labels ("exposed (on-chain evidence)", "no on-chain evidence of exposure") and "unmeasured" when the reading did not happen, the evidence named for each address, and a dated report (JSON, Markdown, an AIP-23 `compliance` envelope that binds the JSON). It records what was readable on the date of the report: it does not protect, move or recover any coins, it does not change what a spend reveals, and it says nothing about the future. The one component with npm dependencies (`@noble/hashes`, `@noble/curves` 1.x: `npm install --ignore-scripts` in its directory) | Each component's README says what it is **not** and what is **not measured**. No third party has reviewed any of them. @@ -51,6 +53,7 @@ test, counts as a failure of the control. Results measured on 2026-09-29 (Node.j | ai-trust | 16/16 with the AIP-23 verifier, measured 2026-10-05 (`AERE_VERIFY_PROOF=... node proba-lant-de-incredere.mjs`: the whole chain on a committed fixture, then thirteen bundles broken on purpose, each refused for its named reason, among them an agent with a classical key and an audit head signed with one); without the verifier it exits 2 | 11/11 (`node proba-lant-de-incredere.mjs --control-negativ`) | | conformance | 11/11 on 2026-10-05 with the AIP-23 verifier, Python 3 and testnet 28001 read (`AERE_VERIFY_PROOF=... node proba-conformance.mjs --online`: the rules and the vectors are what the code derives, every rule has a vector, every invalid vector is one operation from its base or one declared change at its producer, the published verifiers pass 422/422, an independent Python implementation passes the 62 it claims and the other 360 are reported not covered, 70,358 malformed inputs and 183 malformed envelope files each get a verdict); without `--online` the nine chain vectors are reported unmeasured and the exit code is 2 | 181/181 rules (`node proba-conformance.mjs --control-negativ --online`: each rule planted out of its verifier in a copy; the vectors that expect it, and only they, must fail), then 76/76 conditions of the device verifier's compound checks, each planted out alone (exactly the vectors written for it must fail), then six controls of the instruments | | device-identity | 175/175 with the AIP-23 verifier, measured 2026-10-05 (`AERE_VERIFY_PROOF=... node proba-device.mjs`: twenty-two bundles that must be VALID; thirty-three with something not brought, not read or not readable, each PARTIAL for its named causes; one hundred and six attack rows, each refused for exactly its named rules, among them a clone with another key, a rolled-back firmware, a previous owner that still signs, an owner's retirement written under no ownership head, a replayed attestation, an attestation dated ahead of the verifier's clock, a manufacturer the verifier does not trust, a retirement, a classical key under the ML-DSA-65 name, a signature in another base64 text; 804 damaged bundles each given a verdict; the command line through files only; the evidence recorded on testnet 28001 judged again offline); without the verifier 174 run, one is reported as skipped and the exit code is 2; the chain as witness 10/10 on testnet 28001 on 2026-10-05, before the repairs of that day (`proba-device-ancora-testnet.mjs`, needs a funded testnet key and the AIP-23 verifier; not run again since: the bundles and readings it recorded give the same verdicts under the verifier of now) | 139/139 (`node control-negativ-device.mjs`: the untouched copy green; each of the 47 rules taken out of a copy, the rows that expect it, and only they, go red; 91 more plantings, most of them one condition of a compound check taken out alone, each with its rows) | +| exposure-report | 164 passed and 1 `NEMASURAT` of 165 rows in the AERE development tree on 2026-10-14 (`node proba-expunere.mjs`: codec checks with real public vectors, mode 1 and mode 2 through four mock targets that serve recorded responses, the network guard's proof that in modes 1 and 2 nothing leaves the machine, the language gate, the AIP-23 `compliance` envelopes judged by the reference verifier; the `NEMASURAT` row is mode 3 against a real provider, which would send addresses to a third party); in this copy, after `npm install --ignore-scripts` in its directory: 153 passed, 0 red, 0 broken, 12 `NEMASURAT` with the reason (the rows compared with the AIP-23 verifier, the anchor verifier's RLP encoder and MPT walker and the shield's header pins, none of which is in this repository: with `AERE_PROOF_PROTOCOL_VERIFY`, `AERE_VERIFY_PROOF` and `AERE_EXPUNERE_PINI` naming them the rows run, 162 passed and 3 `NEMASURAT`; the scan of the directory for names from the AERE host inventory; the git-ignore row outside a git tree); the exit code is 0 unless a row is red or broken | inside the test, 2026-10-14: each rule has its reverse planting in a copy of the tool (a foreign provider planted on each network path is caught, a label planted in the language gate is refused, each classification rule taken out turns its row red, a `@noble/curves` 2.x planted first is passed over and alone is named as missing), and the recorded fixtures are judged against their declared date | Code comments, most function and variable names (also many exported between the files of a component), test names and control messages are in Romanian, and so are the two command words of the KMS HSM tool (explained in its README). Error codes, error @@ -59,4 +62,4 @@ interface, command line and data (`definePolicy`, `verifyLedger`, `approve`, ... ## Licence -MIT, see [LICENSE](LICENSE). Files: 682 (pq-gateway 6, pq-kms 10, pq-pki 6, crypto-inventory 42, verify-layer 12, proof-kinds 3, control-plane 19, agents 39, identity 15, proof-of-ai 3, ai-trust 6, verifiable-data 7, market-settlement 9, payments 8, conformance 479, device-identity 11, readiness 4). +MIT, see [LICENSE](LICENSE). Files: 700 (pq-gateway 6, pq-kms 10, pq-pki 6, crypto-inventory 42, verify-layer 12, proof-kinds 3, control-plane 19, agents 39, identity 15, proof-of-ai 3, ai-trust 6, verifiable-data 7, market-settlement 9, payments 8, conformance 479, device-identity 11, exposure-report 18, readiness 4). diff --git a/exposure-report/README.md b/exposure-report/README.md new file mode 100644 index 0000000..1d42968 --- /dev/null +++ b/exposure-report/README.md @@ -0,0 +1,541 @@ +# Quantum exposure report + +A command-line tool that classifies a list of Bitcoin and Ethereum addresses by whether their public key is already readable +from chain data, in one of three declared modes, and writes a dated report: a JSON, a Markdown for people, and an AERE Proof +Protocol (AIP-23) `compliance` envelope that binds the JSON, so that anyone can check later which report was issued. + +It records what was readable on the date of the report. It does not protect, move or recover any coins, it does not change +what a spend reveals once a quantum computer exists, and it says nothing about the future. + +``` +node raport.mjs --mod 1 --adrese addresses.txt --iesire out/ +node raport.mjs --mod 2 --adrese addresses.txt --electrum 127.0.0.1:50001 --iesire out/ +node raport.mjs --mod 2 --adrese addresses.txt --esplora http://127.0.0.1:3000 --iesire out/ +node raport.mjs --mod 2 --adrese addresses.txt --bitcoind http://127.0.0.1:8332 --txids ids.txt --iesire out/ +node raport.mjs --mod 2 --adrese addresses.txt --eth-rpc http://127.0.0.1:8545 --eth-blocks 20000000..20000500 --iesire out/ +node raport.mjs --mod 3 --adrese addresses.txt --esplora https://example-provider.invalid --consimtamant-tert "written consent" --iesire out/ +``` + +`addresses.txt` holds one entry per line: a Bitcoin address (base58check, bech32 or bech32m, checked), `script:`, `p2pk:`, or an Ethereum address (mixed case is checked as EIP-55). + +Requirements: Node.js 24 and two packages declared in `package.json`, `@noble/hashes` (keccak-256, RIPEMD-160) and +`@noble/curves` (secp256k1 public-key recovery): run `npm install --ignore-scripts --no-audit --no-fund` in this directory. The +loader (`noble.mjs`) also accepts the packages from a parent `node_modules`, from a directory named by `AERE_EXPUNERE_NODE_MODULES` +(the test sets it to this directory's `node_modules` for the copies it runs), or from the AERE anchor verifier's `node_modules` +when this directory lives in the AERE development tree, and uses a candidate only when it has the exports the tool calls: a +`@noble/curves` 2.x found first (it has no `ProjectivePoint` and no `CURVE`) is passed over for the next one. Without a usable +version the tool and the test stop with exit code 2 and name the missing package and what was found; they do not crash inside +an import. For Bitcoin Core, credentials come from `AERE_BITCOIND_COOKIE` (path of +the node's cookie file) or `AERE_BITCOIND_AUTH` (`user:password`); no value of either is ever printed. + +## The three modes + +| mode | reads | opens connections to | sees spends | +|---|---|---|---| +| 1, offline | nothing but the address | nobody | no | +| 2, your own node or index | your Electrum server, Esplora index, Bitcoin Core or Ethereum JSON-RPC, through one adapter | that one declared target | Electrum and Esplora: yes, as served by them, on the chain they serve (its genesis block, checked against the address's network, and on Bitcoin mainnet its block at a checkpoint height, checked against the checkpoint) and up to the tip they serve (read before the history; both named in every verdict), for the address and for its sibling scripts (below); Bitcoin Core: only the transactions named in `--txids` (it keeps no address index), read once for the whole report, and judged per address, on the chain the node serves (its genesis block and its block at a checkpoint height, read once and judged as for Electrum and Esplora). Since no answer of the node shows that list to be the whole history of an address (an output funded and spent by transactions not given is invisible to it), an address read through Bitcoin Core is `exposed` or `unmeasured`, never `no on-chain evidence of exposure`; the reason names the case: no list, a list none of whose confirmed transactions touches the address (a touch only in the node's mempool is not one, and is named), an output of the address the node no longer holds as unspent and whose spending transaction is not in the list, or a list that the tool cannot check is complete; Ethereum: the blocks of the `--eth-blocks` window | +| 3, a third-party provider | the same adapters | that provider, only with `--consimtamant-tert ""`; the addresses are sent to it; a target that resolves to a private or loopback address is refused | as in mode 2 | + +Mode 1 classifies by script or address type only. Mode 2 is what a custodian runs against its own infrastructure. Mode 3 exists +for a requester without a node and is refused without the explicit consent flag; the consent text is recorded in the report. + +## The two labels, and what each verdict carries + +Every address receives exactly one of two labels, or the state `unmeasured` with a named reason: + +- `exposed (on-chain evidence)`: a public key, or the script holding the keys, is readable from chain data the report names. +- `no on-chain evidence of exposure`: nothing read in this mode shows the key. It says nothing about disclosure off chain, + about data this mode cannot read, or about the future. + +Each verdict lists what was seen and what was not seen, in a fixed vocabulary, for example: + +- `P2PK output: the public key is the script` +- `P2TR output: the output key (the tweaked public key) is the script` +- `public key revealed in the scriptSig (HASH160 equals the address hash), in the spend (input 0, height H)` +- `P2SH redeem script (HASH160 equals the address hash): 2-of-3 multisig, 3 public keys revealed, in the spend ...` +- `the script commits to HASH160 of a key, and 1 public key(s) with that hash are pushed in the same input` (P2PKH-shaped + redeem or witness scripts, hash-locked contracts) +- `public key recovered from the signature of transaction in block H; keccak256 of that key gives this address` +- `EIP-7702 delegation designator in the account code ...: the chain sets this code only after an authorization signed with + this account's own key was included`, and, when found in the window, `authorization signed by this account in transaction + ...: the authority recovered from the authorization's signature is this address` +- not seen in mode 1: `spends from this address (mode 1 reads no chain data; a single spend would reveal the key or the script)` +- in every Electrum or Esplora verdict: `history served up to height H (tip header time T)` and `chain served: Bitcoin mainnet + (genesis block 000000000019d6...; at height 969696 the block 000...9f0b, the checkpoint this tool holds; the tip header states + a target within its proof-of-work limit; whether it is the chain with the most work is not verified)`; in every Bitcoin Core + verdict the same chain line, without the tip; in every Ethereum verdict: `head block N served by the endpoint (block time T)`, + and the account's nonce and code `at head block N, proven under its state root (eth_getProof)` +- `the same HASH160 of the key under another script type, P2WPKH bc1q...: public key revealed in the witness ...`, or, beside + "no on-chain evidence", `sibling scripts of the same HASH160 read through the same target: ...; no spend there reveals the key` + +Every "revealed" statement is computed by the tool from the bytes the target served, never copied from an index's label: + +- a public key is a 33-byte (02/03), 65-byte (04) or hybrid 65-byte (06/07, the parity of y in the prefix, accepted by consensus) + push that decodes as a point on secp256k1, and it counts when its HASH160 equals the address hash (any push of the scriptSig, + any element of the witness: a legacy scriptSig need not end with the key), or equals a 20-byte hash the revealed script commits + to; a push whose HASH160 equals the hash but that does not decode as a key is named, and gives `unmeasured`; +- a redeem or witness script counts when its HASH160 (P2SH) or SHA-256 (P2WSH) equals the hash in the output; +- inside a revealed script of no standard form, a key counts only when it is a valid point AND the operand of a signature check + (`OP_CHECKSIG`, `OP_CHECKSIGVERIFY`, `OP_CHECKSIGADD`, or the key run of an `OP_CHECKMULTISIG`); a push that only has the shape + of a key is reported as such and gives `unmeasured`, not `exposed`; +- every Bitcoin transaction must hash to its id: Electrum and Bitcoin Core from its raw bytes (or, for a Bitcoin Core node that + serves no `hex`, re-serialized from its decoded form), Esplora re-serialized from the fields the index serves. The id does not + cover the witness: a key or a script found there counts by its own hash equality with the address, which no served byte can + fake; +- an Ethereum key is recovered from a transaction or authorization signature and must hash to the address, and the transaction + that carries it (the one sent, or the type-4 transaction that carries the authorization) must hash to the hash the endpoint + gives, re-derived from its served fields. + +For Ethereum, the nonce and the code of an account are read only at the head block the verdict names, from an account proof +(`eth_getProof`) under the state root of that block, and the code must hash to the code hash proven (below, "The head of an +Ethereum endpoint"); nothing is read at `latest`. A nonce above zero with no transaction or authorization found in the searched +blocks gives `unmeasured`, with the advice to widen `--eth-blocks`; a window that would read no block (it starts after the head) +is refused. Every Ethereum verdict names the head block the endpoint served and its time. + +What gets NO label at all, `exposed` or not, and is `unmeasured` with its reason (README sections below): + +- a Bitcoin target (Electrum, Esplora, Bitcoin Core) that serves ANOTHER CHAIN than the address's network: its genesis block is + not one of that network (a `p2pk:` or `script:` line names no network and is read on Bitcoin mainnet only), or the tip header it + serves (Electrum, Esplora) states a proof-of-work target above the limit of the chain its genesis block names (a signet or + regtest header served under the mainnet genesis block), or, under the mainnet genesis block, its block at the checkpoint height + (below) is not the checkpoint, which is what a chain that split from Bitcoin (Bitcoin Cash, Bitcoin SV, eCash) serves: `the + target serves another chain`; and a target under the mainnet genesis block whose chain ends below the lowest checkpoint, where + such a chain cannot be told apart; +- a target that serves blocks AFTER the report date: the header time of its tip, the time of an Ethereum head, or the block time + of a transaction given to Bitcoin Core is more than 2 hours after the reference instant (below), and, for Bitcoin Core, whose + scan reads the node's unspent set at the time of the run, a report dated a day that ended more than 2 hours before the run: + `the target serves blocks after the report date`. A transaction given to Bitcoin Core, on the node's active chain, served + without its block time, cannot be placed against the date and leaves every address unmeasured too. + +What never becomes `no on-chain evidence of exposure`, and is `unmeasured` with its reason instead: + +- an empty, erroneous, truncated or inconsistent answer (a transaction that does not hash to its id, fewer transactions than the + target counts, an index that counts more spent outputs, or more outputs to the script, than the pages it served carry, a count + of an Esplora index that is not a count: null, a string, a negative or a missing value, which is never read as zero, a + transaction in the history of a script that neither pays nor spends it, an identifier that is not one: a transaction id or a + block hash that is not 64 hex digits, which is quoted as the target's text); +- anything read through Bitcoin Core that is not `exposed`. In order: without `--txids`, or with a `--txids` list none of whose + CONFIRMED transactions touches the address (the scan sees only unspent outputs, so a spent output is invisible there; a list + given for other addresses says nothing about this one, and a transaction the node holds only in its mempool says nothing about + the address's history on chain); with an incomplete list (an output of the address read from the given transactions that the + node's scan no longer finds unspent, and that none of them spends, was spent by a transaction not given, where the key may be + revealed); and otherwise because the tool cannot check that the list is the address's whole history: the label "no on-chain + evidence" would rest on the requester's list, not on a measurement. Read the address through an index that serves its history + (Electrum, Esplora) to measure it; +- a revealing spend that the target holds only in its mempool (public, but not on chain yet), or a spend its index counts in the + mempool and its pages did not carry; for a P2TR, P2PK or bare-multisig script that already has an output on chain, a pending + spend does not take that evidence away, and the label stays `exposed`. For Bitcoin Core, "on chain" means a block of the + node's ACTIVE chain: a transaction it serves with a block hash and `confirmations` 0 (a block off its active chain, which its + transaction index still names) is treated like one in its mempool, and the reason names it; +- a P2TR, P2PK or bare-multisig output that the target holds only in its mempool (its key is public there, not yet on chain), or + that an Esplora index COUNTS in its mempool (`mempool_stats.funded_txo_count`) above the unconfirmed outputs its page carried; + and an Esplora index that counts more transactions of the script in its mempool (`mempool_stats.tx_count`) than its page + carried, or that serves no `mempool_stats` counts that are counts (none of these comparisons can then be made), unless the key + is already on chain (the answer is incomplete, and what it did not serve may show the key); +- a target BEHIND the chain: the header time of the tip it serves is more than 2 hours before the reference instant (below), or + its tip could not be read; an Ethereum endpoint whose head time is more than 30 minutes before it, that reports through + `eth_syncing` that it is syncing, or whose head was not read; an Ethereum account whose state at that head was not proven (no + `eth_getProof` at the head number, a proof that does not lead to the head block's state root, a code that does not hash to the + code hash proven); and a sibling script (below) that could not be measured; +- a spend whose revealed script form this tool does not classify, and a spend SEEN of a hash-type output in which the tool reads + no key or script: a valid spend reveals the preimage of the hash, so such a spend holds it in a form this tool does not read. + "Seen" means that the input spends an output paying the address (its funding was read), or that a push or a script in it hashes + to the address, even when the funding was not served: a segwit spend served without its witness (the transaction id does not + cover the witness) still carries the redeem script that hashes to a P2SH-P2WPKH address. + +## The chain and the tip of the target + +An Electrum or Esplora adapter first reads which CHAIN the target serves: Electrum `server.features` (its `genesis_hash`), Esplora +`/block-height/0`. The genesis block must be one of the networks of the address: base58check `1...` / `3...` and bech32 `bc1` are +Bitcoin mainnet; base58check `m...` / `n...` / `2...` are testnet3, testnet4, signet or regtest, bech32 `tb1` the first three, and +`bcrt1` regtest; a `p2pk:` or `script:` line names no network and is read on mainnet only. The five genesis hashes are in +`bitcoin.mjs` (`RETELE_BTC`, from Bitcoin Core's chain parameters; the test recomputes each from the fields of its genesis header), +with each chain's proof-of-work limit. Every Electrum or Esplora verdict names the chain served, as its second evidence line +(and every Bitcoin Core verdict as its first): `chain served: Bitcoin mainnet (genesis block 000000000019d6...; at height 969696 +the block ..., the checkpoint this tool holds; ...)`. + +A chain that split from Bitcoin after its genesis block shares that block and the proof-of-work limit: Bitcoin Cash split at +height 478559, and Bitcoin SV and eCash split later from Bitcoin Cash; their Electrum and Esplora servers are public and answer +with the mainnet genesis hash, and their tips state mainnet-range targets. So on Bitcoin mainnet the adapter also reads the block +the target serves at a CHECKPOINT height (Electrum `blockchain.block.header`, whose 80 bytes must be a header; Esplora +`/block-height/:h`; Bitcoin Core `getblockhash`), and its hash must be the checkpoint's: otherwise the address is `unmeasured`, +`the target serves another chain: one that shares the genesis block of Bitcoin mainnet and split from it before height H`, and the +chain line no longer says "Bitcoin mainnet". The checkpoints are in `bitcoin.mjs` (`RETELE_BTC.mainnet.puncte`): blocks 967680 and +969696, the two pins of the shield's Bitcoin header follower (`btc/antete.mjs`, `PUNCTE_PINATE`), whose hash and 80 header bytes +were read from two public block explorers of different operators on 2026-10-11 and agreed; that agreement is their whole +provenance, and the test requires the tool's table to equal those pins and each header to hash to its hash and meet its proof of +work. The adapter uses the highest checkpoint at or below the end of the target's chain (its tip height; for Bitcoin Core +`getblockcount`). What this does NOT tell apart: a chain that split from Bitcoin AFTER the checkpoint used (none is known on +2026-10-12); and a target whose chain ends below the lowest checkpoint (967680) cannot be checked at all, so it is `unmeasured`. +The test networks hold no checkpoint: a chain that shares one of their genesis blocks (every custom signet shares the default +signet's) is not told apart from it. None of this shows the chain to be the one with the most work. + +It then reads the target's tip BEFORE the history: Electrum `blockchain.headers.subscribe` (its height and its 80-byte header); +Esplora `/blocks/tip/height`, the hash of the block at that height (`/block-height/:h`) and that block's header +(`/block/:hash/header`), which must hash to that hash. A header counts only when its hash meets the proof of work its own `bits` +field states (every block header does), and its `bits` must state a target within the proof-of-work limit of the chain the genesis +block names: a signet or regtest header (easy targets) served under the mainnet genesis block is not a mainnet header, and the +address is `unmeasured`, `the target serves another chain`. This does not show the header to be on the chain with the most work: +a target that serves the mainnet genesis block and headers mined at mainnet's minimum difficulty would pass, which this report +does not verify (Limits). Every transaction confirmed at or below that height is in the history served after it, and every +verdict says `history served up to height H (tip header time T)`. Each Esplora path is a separate HTTP request: behind a load +balancer the genesis block, the checkpoint block, the tip and the history may come from different machines, and no answer shows +it; this is NOT measured, and the test does not exercise it. + +`no on-chain evidence of exposure` is given only when T is at most **2 hours** before the reference instant: the end of the +report's date, or the moment of the run when that comes first (a report dated today is judged against the clock of the machine +that runs it; a wrong clock moves the reference). Otherwise the address is `unmeasured`, `target behind the chain: tip H at T`. +Why 2 hours: blocks arrive every 10 minutes on average, and under the exponential model of block arrivals a gap of more than two +hours has a probability of about e^-12 per block (about once in three years; a model, not a measured frequency); a header's time +is set by its miner and only has to exceed the median of the 11 previous blocks, so the tip of a target that has caught up can +carry a time up to about an hour old. Two hours keep such a target measurable, and leave a target about 12 or more blocks behind +unmeasured. A target behind by less than that is not detected; the verdict names H and T so that the reader can see it. A target +that serves a recent tip and an old history is serving a chain that is not the canonical one, which this report does not verify +(Limits). An `exposed` verdict does not depend on how far behind the tip is: the evidence it names is on chain whatever came after. +Bitcoin Core verdicts name no tip: through Bitcoin Core an address is never `no on-chain evidence of exposure` (its verdicts rest on +the transaction ids the requester gives, each hashed to its id). Bitcoin Core is asked which chain it serves, once per report +(`getblockhash 0`, `getblockcount`, `getblockhash` at the checkpoint height), and judged by its genesis block and its checkpoint +block as above; it serves no tip header here, so the proof-of-work limit is not judged for it. + +## The head of an Ethereum endpoint + +The Ethereum adapter reads `eth_syncing` and the HEAD block (the block at the number `eth_blockNumber` gave, without its +transactions) before the account. Every Ethereum verdict names it: `head block N served by the endpoint (block time T)`. +`no on-chain evidence of exposure` is given only when the endpoint does not report that it is syncing (`eth_syncing` false) and +T is at most **30 minutes** before the reference instant; otherwise `unmeasured`, `endpoint behind the chain`, with the head or +the sync status named. Why 30 minutes: a block every 12-second slot, so an endpoint that has caught up serves a head seconds old; +the margin leaves room for a skewed clock and a run of missed slots, and leaves an endpoint about 150 or more blocks behind +unmeasured. An endpoint behind by less than that is not detected; the verdict names the head so that the reader can see it. A +nonce of 0 read at an old head says nothing about the transactions sent after it, which is the reason for the rule. + +The account is read AT that head and nowhere else: `eth_getProof(address, [], N)` at the head number N, an account proof that is +walked from the `stateRoot` of the head block just read, every node looked up by its own keccak hash (`ethereum.mjs` +`contDinDovada`; the walker follows the published one beside the AERE anchor verifier, and the test runs both on the same proofs), +which gives the nonce and the code hash (or shows the account absent: nonce 0, no code); then `eth_getCode` at N, which must hash +to that code hash. Behind a load balancer, a machine that does not hold block N answers with an error (`header not found`), and a +proof of any other state does not lead to that state root: the account is then `unmeasured`, named, never labelled from a nonce +or a code read at `latest` from another machine; and a state reached after the head (an EIP-7702 designator set later, say) +cannot be credited to block N. An endpoint that does not serve `eth_getProof` (or no longer keeps the state of block N) leaves the +account `unmeasured`, named: that is the price of this binding. What the proof binds: the nonce and the code to the state root of +the block whose number and time the verdict names. What it does NOT bind, and is NOT measured: that block itself to the chain +Ethereum agreed on. Its number, time and state root are the endpoint's answer, and this tool checks neither the block's hash, nor +its parent, nor the attestations of the validators (no light client is run here); an endpoint that serves a block of its own +making, with a state of its own making, is not detected. The blocks of the `--eth-blocks` window are separate requests, each +checked only through the transactions it carries (each hashed to its served hash, each key recovered). + +## The date of the report + +`--data YYYY-MM-DD` is the day the report records (default: the UTC day of the run), and the reference instant is the end of that +day, or the moment of the run when that comes first. A day after the UTC day of the run is refused (exit 1, nothing written: no +report and no envelope dated in the future). A day in the past is accepted, and no verdict, `exposed` or not, may rest on what the +target served after it: the header time of an Electrum or Esplora tip, the time of an Ethereum head and the block time of every +transaction given to Bitcoin Core must be at most 2 hours after the reference instant (mainnet nodes refuse a header more than 2 +hours ahead of their own clock, so a target that serves the chain passes this for a report dated the day it is run). Bitcoin Core's +scan reads the node's unspent set at the time of the run, so a Bitcoin Core report dated a day that ended more than 2 hours before +the run is unmeasured on every address. Otherwise the address is `unmeasured`, `the target serves blocks after the report date`. + +## The same key under another script type + +One key stands behind several scripts that the same 20-byte HASH160 determines: P2PKH, P2WPKH and P2SH-P2WPKH (whose redeem script +is `0x0014 || hash`). A spend from any of them reveals the same key. In modes 2 and 3 the tool reads these SIBLING scripts too: +for a P2PKH or P2WPKH input the other two forms of its hash (the key itself is not known from a hash, so nothing else is derived). +A `p2pk:` input gives the key itself, so more is derived from it (12 siblings): the three forms of HASH160 of the key as given; the +same point in each of its other encodings (compressed 02/03, uncompressed 04, hybrid 06/07, each accepted by consensus in a +signature check) under P2PK and under the three forms of its own HASH160; and the P2TR output of the key used as an internal key +with no script tree (BIP-86: Q = P + t*G, t a hash of P; the test checks the derivation on the BIP-86 test vector). Electrum and +Esplora read each sibling by its script, through the same target (mode 3 therefore sends the siblings to the provider too); +Bitcoin Core judges each sibling on the given transactions, with no scan of its own (an unspent P2PK or P2TR output of a sibling +that no given transaction carries is not seen: that can leave the input `unmeasured` where a scan would show it `exposed`, never +`no on-chain evidence`, which Bitcoin Core never gives). A sibling that shows the key on chain makes the input `exposed`, with the +sibling and its relation named (`the same HASH160 of the key under another script type, ...`, `the same key in its uncompressed +encoding, under P2PKH ...`, `a P2TR output with no script tree (BIP-86) whose internal key is this key, ...`). A BIP-86 output +shows its output key, this key tweaked, not this key itself: the verdict says so in its "not seen" column (whoever recovers the +private key of the output key controls that output, and the private key of this key follows from it for anyone who also knows this +key). A sibling that cannot be measured leaves the input `unmeasured`; beside `no on-chain evidence of exposure` the siblings read +are listed. What cannot be derived from an input is named in its "not seen" column (project document, N8): for a P2PKH or P2WPKH +input, a P2PK or bare-multisig output holding the key itself, a P2TR output or script, a P2SH or P2WSH script holding the key and +the key in its other encoding (another HASH160); for a `p2pk:` input, only what depends on something the input does not give: a +P2TR output whose key commits to a script tree, a P2SH or P2WSH script holding the key, a bare-multisig output holding it (the few +forms that commit to this key alone, such as a 1-of-1 multisig or a P2WSH of ` OP_CHECKSIG`, are not searched either); and, for +a P2SH, P2WSH or P2TR input, the keys inside it under any other type. Each such verdict also names the other chains that may share +the key (an EVM chain where the same address is the same account, a Bitcoin fork, a test network) and says which one chain was read. + +## What a chain cannot show: the declarations + +The report asks three questions and records the answers as declarations by the requester, never as measurements, and no answer +changes a label: + +1. whether an extended public key (xpub / ypub / zpub) of a wallet holding any of the addresses was ever given to a third party + (a service, a companion application, a co-signer, a backup); +2. whether any of the keys signed anything off chain: Bitcoin signed messages (BIP-137, BIP-322), PSBTs sent to others, + Ethereum EIP-191 or EIP-712 signatures (permits, exchange orders, sign-in messages), or a transaction that was broadcast and + never confirmed (replaced by fee, dropped from mempools): it disclosed the key exactly as a confirmed spend would, and once it + is gone no chain shows it; +3. whether the same key, or the same address, signed on another chain: another EVM chain where the address is the same account + (a layer 2, a sidechain, a test network), a Bitcoin fork that shares the history before its split, a test network, or a chain + of another kind using the same secp256k1 key. The report read one chain, named in each verdict. + +`--xpub-partajat da|nu|necunoscut`, `--semnaturi-offchain da|nu|necunoscut` and `--alte-lanturi da|nu|necunoscut` give the +answers; without them the report says the question was asked and not answered. + +## Deadlines cited + +The report cites, for the classical algorithms behind every address (ECDSA and Schnorr on secp256k1), the deadlines of NIST IR +8547 (initial public draft, document date 2024-11-12: deprecated after 2030, disallowed after 2035) and of the EU coordinated +implementation roadmap (2025-06-23: inventory by 2026-12-31, high-risk use cases by 2030-12-31, medium-risk by 2035-12-31), +and, with `--cnsa`, CNSA 2.0 as a secondary-source citation. Each regime is listed with its document, version or status, source +and the date it was read. The values come from one place, the compliance-report module of the control plane; this tool does not +keep its own copy. + +## Output + +`raport.json` (the report), `raport.md` (the same for people) and `plic-aip23.json`: an AIP-23 `compliance` envelope whose +`evidenceHash` is the SHA-256 of the canonical JSON of `raport.json` (keys sorted recursively, no spaces), with `subject` (a label +derived from the address list, or `--subiect`), `policy` (the report format version) and `result` (the summary line). The +envelope is checked by the published AIP-23 reference verifier (form and integrity levels; the finality level applies once the +envelope is notarized). The report contains the addresses and nothing about who holds them. + +Exit codes: 0 report written and every address classified; 2 report written with some addresses unmeasured, or the tool could +not run (a missing dependency, named); 1 refused (bad input, no consent in mode 3, a private target in mode 3, a data-source flag +in mode 1, a transaction id given with `--txids` that the node does not serve, whose bytes do not hash to it, or whose block hash +is not one, an `--eth-blocks` window that starts after the head, a `--data` day after the UTC day of the run, or a report whose own +text would contain a word the language gate forbids), and then nothing is written. The language gate judges the tool's text; what the requester gave verbatim (the +`--subiect` label, the consent text, the address lines, the target's host) is recorded as given, and so is what the target served +(an error body, an error message, a server version string, an identifier or a quantity that is not one, and the WHOLE message of +a TLS error, which carries the names of the target's certificate), which the report quotes as `[served: ...]`; a message cut to its length limit inside such a quote keeps the quote closed. A value that the tool converts +(an Ethereum quantity, a signature field) is checked for its form first, so that a conversion error never carries the served text +into the report, and the delegate of an EIP-7702 authorization is written from the bytes the authority signed. The gate's words +(listed in `limbaj.mjs`, the one file that names them) are bounded by letters and digits only, so a hyphen or a space before or +after a word does not shield it, and its compounds are caught written with a hyphen, a space or nothing; the tool's own negations +("it does not protect") stay clean. Error +messages mask every long hexadecimal string, except the transaction id a refusal names, which is the requester's own input. + +## Proof that nothing leaves the machine + +`paza-retea.mjs` is a connection counter loaded into the report process before the tool (`node --import paza-retea.mjs +raport.mjs ...`). It journals, and in blocking mode refuses before any packet leaves: + +- every TCP connection opened through `net.Socket` (net, tls, http, https, http2, fetch, WebSocket), its arguments read the way + Node.js reads them; when the caller supplies its own `lookup`, the address that lookup returned is journaled too; +- every connection of `net.Socket` to a path (a named pipe, a Unix socket, an HTTP `socketPath`, or a string given to + `socket.connect` that is not a port, which Node.js opens as a pipe), judged on the path AS THE SYSTEM OPENS IT, not on the + string given: on Windows the path is normalized first (`\\.\pipe\..\UNC\host\pipe\x` is opened as `\\.\UNC\host\pipe\x`, over + SMB), and only the local pipe namespace passes, `\\.\pipe\` or `\\?\pipe\` with a name that holds no backslash. + Every other form is judged like a host: a UNC name, an NT path such as `\??\UNC\host\...`, a GLOBALROOT device path, a drive or a + relative path (which may be a network mount). This is a list of what passes, not of what is forbidden; +- every UDP send, its arguments read the way Node.js reads them (a connected socket sends to its remote address, and an offset or + a length is not a port; a port may be a numeric string; no address means the loopback), and every multicast membership change + (`addMembership` and the rest, which make the system send an IGMP or MLD report); +- every DNS function of `dns`, `dns.promises`, `dns.Resolver` and `dns.promises.Resolver` that may send a query (all but + `getServers`, the result-order pair, `cancel` and `setLocalAddress`), so that a query function added by a later Node.js is + judged too (Node 24 has `resolveTlsa`, which a fixed list had missed). Only `lookup` passes, for a declared target name or an IP + literal (`getaddrinfo` sends nothing for a literal); `resolve*`, `reverse`, `lookupService` and every other query go to a DNS + server whatever host they name, and are refused. `setServers`, which decides where every later query goes, is journaled and + refused, on the module, on `dns.promises` and on the base prototype the `Resolver` instances share; +- every call of `process.binding` (the door to the internal TCP, UDP and DNS handles, which do not go through `net.Socket`), every + native addon load (`process.dlopen`), every worker thread (`worker_threads.Worker` is replaced by a constructor function, so the + original is not reachable as its prototype), and every child process: the `child_process` functions, the `ChildProcess` class + itself (where every asynchronous form ends) and `process.execve`. + +What it does not see is said here, not measured as zero: in journal mode, the connections made through a handle taken from +`process.binding` or by a native addon (only the call or the load is journaled), those of a child process started with its own +environment (the guard reaches child Node.js processes through `NODE_OPTIONS`, so only when they inherit it; the start is +journaled), those of programs other than Node.js started as children, and those of the program `process.execve` puts in place +of the process on POSIX (the call is journaled); in both modes any file opened on a path the system resolves over a network (a +UNC path, a network mount), whatever opens it (`fs`, `import`, `node:sqlite`: none is wrapped), WHERE a declared target name +resolves (the system's answer, or the caller's own `lookup`, whose answer is journaled for TCP and not judged), `internalBinding` +(not reachable without `--expose-internals`), `node:quic` where a build offers it (the Node.js 24.14 measured here has no such +module, with or without `--experimental-quic`), code written on purpose to reach the original functions by some other way than +the ones named above (the guard measures the ordinary calls of the tool and of its libraries; it is not a sandbox), and anything +outside the Node.js process. In blocking mode each of those starts (and every multicast membership change and `setServers`) is +refused, so none of them runs. Workers are started with the guard preloaded +(`--require` in their `execArgv`), so in journal mode their connections are in the journal. The tool itself uses none of these +paths: its sources import no child_process, worker_threads or native module and call no process.binding or lookupService, which +the test checks. + +The test (`proba-expunere.mjs`) runs every mode under it: mode 1 shows zero connections and zero DNS queries; mode 2 shows exactly +as many connections as the mock target accepted, all to the declared host and port. Its negative control plants, in a copy of the +tool, one exemplar of each path above and requires, in blocking mode, the journal to name each and the guard to refuse each: the +network paths toward a documentation address (198.51.100.9) or names under `.invalid`, `lookupService` on 127.0.0.1 (a literal is +a real query there), the named pipe toward 127.0.0.1 as its server, and the paths that carry no address (`process.binding`, +`process.dlopen`, a worker, the worker taken by reflection, which must not start, a child process through a function and through +the class, `process.execve`). Three more controls count what ARRIVES at a listener of the test, and each has inverse plantings +in a copy of the guard itself: the pipe forms that name a server through `..`, through the NT prefix `\??\`, through +`GLOBALROOT\Device\Mup` or through a string given to `socket.connect` reach a pipe the test listens on (over SMB on loopback) +when let through, and in blocking mode only the local form arrives (the guard judging the raw string, or reading the string as a +port with `localhost` declared, lets them arrive); the DNS queries of mode 2's configuration (a reverse, a TXT, a TLSA and an A +query naming the declared literal or name, and every `setServers`) reach nothing, with the process's DNS servers moved, before +the guard loads, to a UDP listener of the test on 127.0.0.2, so that nothing leaves the machine even if the guard let them +through (the old rule for a declared literal, and a fixed list of function names, each let datagrams arrive); and the UDP sends +to the declared target, in the three argument forms of `send` and through `sendto`, arrive while a send to another port and a multicast membership on the +loopback interface are refused (the old reading of the arguments, and an unwrapped membership, turn it red). In journal mode, +where a planted call really runs, it plants only local ones (a worker's and a child's connection to 127.0.0.1, a connected UDP +socket, a connection with its own lookup) and requires each in the journal. The tool run without the guard produces no journal, +and the test treats that as unmeasured, not as zero; the planted copy is never run without the guard, since its paths would send +real packets. The pipe control needs the SMB client of Windows (loopback only) and is not measured on other systems. + +## Test + +``` +node proba-expunere.mjs +``` + +Codec checks with real public vectors (BIP-173/350 test vectors, the EIP-155 example, every mainnet transaction in the fixtures +re-serialized byte for byte and hashed to its id, every transaction of a recorded Ethereum block with its sender key recovered +and its hash re-derived, the EIP-7702 authorization of that block with its authority recovered, transactions of types 0x1 and +0x3 signed with a test key and recovered); mode 1 and mode 2 through four mock targets (Electrum, Esplora, Bitcoin Core, Ethereum +JSON-RPC) that serve responses recorded from a public index on the date written in `fixturi/*.json`; and negative controls: a +planted foreign provider on each network path is caught, an empty or error answer and a mute target give `unmeasured`, Bitcoin +Core without `--txids`, with only the funding transactions of a spent address, with a list that touches only one of the +addresses, with a list that touches an address only through a transaction in the node's mempool, or with the funding of an +output still unspent, gives `unmeasured` (never "no on-chain evidence") with the reason of each case, a revealing spend that +Bitcoin Core names in a block off its active chain gives `unmeasured` (`exposed` once on the active chain), a transaction id the node does not +serve and a decoded transaction with one value changed are refused (the decoded form is re-serialized and must hash to its id), +an Esplora transaction whose id or one value was changed gives `unmeasured`, a planted spend on a synthetic address moves the +label to `exposed` (also through a P2PKH-shaped redeem script and a witness script, through a second Esplora page, through a +hybrid key and a scriptSig that does not end with the key), a spend seen with no preimage the tool can read gives `unmeasured` +(also a P2SH-P2WPKH spend served without its witness and without its funding, seen through its redeem script), a +spend seen only in the mempool gives `unmeasured` while a P2TR output already on chain stays `exposed` beside a pending +script-path spend, a P2TR output only in the mempool gives `unmeasured`, a replaced spend is named among the declarations, a +33-byte push in a non-standard witness script that is not the operand of a signature check gives `unmeasured` (the same key under +`OP_CHECKSIG` gives `exposed`), an EIP-7702 designator gives `exposed`, an authorization in a type-4 transaction whose hash was +changed is not used as evidence, an `--eth-blocks` window after the head is refused, a forbidden label planted in a copy is +refused by the language gate while a `--subiect` or an error body served by the target holding such a word is recorded as given, +and so is, quoted, such a word served in place of an identifier (an Electrum `tx_hash`, an Esplora `txid`, a `scantxoutset` +output, an Ethereum transaction hash), of a quantity (`eth_chainId`, a signature field) or after the 20 bytes of an EIP-7702 +delegate, and inside a served message cut at its length limit (a Bitcoin Core block hash that is not one refuses the answer +instead), mode 3 without consent and mode 3 toward a private target are refused with nothing sent, a report or envelope changed after +signing is refused, a mock started detached by a parent that exits stops by itself, and a `@noble/curves` 2.x found first is +passed over (exit 0 with 1.x beside it, exit 2 named without); a target whose tip is the real header of block 969686 +(2026-10-03) gives `unmeasured` ("target behind the chain") where the recorded tip gives `no on-chain evidence`, and a tip header +changed by one byte, or one that does not hash to the block hash the index gives, is not a tip; a key revealed only at a sibling +script (a P2WPKH spend, for its P2PKH address and for the `p2pk:` line of the key) gives `exposed` with the sibling named, through +Electrum and Esplora, and every `no on-chain evidence` names the siblings read, the N8 line and the other chains; the third +question is asked; a TLS listener of the test whose certificate names a forbidden word gives a written report (`unmeasured`, the +message quoted), not a refusal; an Esplora index that counts a mempool spend its page does not carry, beside another mempool +transaction of the address that the page does carry, gives `unmeasured`. Since round 7: the five genesis hashes are recomputed +from their headers and must equal the tool's table, and the BIP-86 derivation must give the BIP-86 test vector; a target serving +the regtest genesis block and a fresh regtest tip gives `unmeasured` ("serves another chain") for a mainnet address and measures a +`bcrt1` address; a signet tip (mined once, see the test) under the mainnet genesis block gives `unmeasured` ("above the limit of +Bitcoin mainnet") for a P2PKH address and a `p2pk:` line, while under the signet genesis block a `tb1` address is measured and the +`p2pk:` line is `unmeasured` ("mainnet only"); every verdict on the fixtures names the chain; an Ethereum endpoint whose head is +block 18,000,000 (2023-09-07) or that reports `eth_syncing` gives `unmeasured` ("endpoint behind the chain") where the recorded head +gives `no on-chain evidence` naming the head; `--data 2030-01-01` is refused in modes 1 and 2, and `--data 2012-01-01` gives +`unmeasured` ("serves blocks after the report date") on every address through Electrum, Esplora, Ethereum and Bitcoin Core with +and without `--txids`; through Bitcoin Core, a revealing spend in a block timed 400 days ahead, or served without its block time, +gives `unmeasured` (`exposed` with a past block time); a `p2pk:` line whose key is shown only in its other encoding (a spent P2PKH +of the uncompressed form, a P2PK output of the compressed form) or by its BIP-86 output gives `exposed` with the sibling named, +through Electrum and Esplora, and one with no history gives `no on-chain evidence` with its 12 siblings listed and an N8 line that +names only what cannot be derived; an Esplora index that counts a mempool output of a P2TR with no output on chain, or a mempool +transaction of a P2PKH, that its page does not carry gives `unmeasured`. Since round 8: the tool's checkpoints equal the pins of +`btc/antete.mjs` and their headers hash to their hashes, and the checkpoint chosen is the highest at or below the tip; the trie +builder of the test gives the known roots of the Ethereum trie test vectors (the empty trie, "dogs", "puppy"), and the tool's +proof walker agrees with the published one on every proof of the fixture and on an absence; an Ethereum mock that answers as a load +balancer with a machine behind (`header not found` at the head, nonce 0 at `latest`) gives `unmeasured` for an account that the +old reading labelled "no on-chain evidence", a state after the head at `latest` (an EIP-7702 designator) does not label the account +at the head, and a code that does not hash to the proven code hash, a proof of another state and an endpoint without `eth_getProof` +give `unmeasured`, while the real designator still gives `exposed`; a target of a chain that split from Bitcoin (the mainnet genesis +block, a real mainnet tip, another block at the checkpoint height) gives `unmeasured` ("serves another chain: ... split from it +before height 969696") through Electrum, Esplora and Bitcoin Core, and a chain ending below the lowest checkpoint gives `unmeasured`; +Bitcoin Core on regtest gives `unmeasured` for a `p2pk:` line it would otherwise label `exposed` from its scan; an Esplora count that +is null, a missing or negative `mempool_stats`, an index that counts more outputs than its pages carry, and a transaction in a +script's history that neither pays nor spends it (Esplora and Electrum) each give `unmeasured`. For each defect the test exists to catch (an empty answer +labelled "no on-chain evidence", Bitcoin Core without `--txids`, with an incomplete list, with a list that does not touch the +address, that touches it only in the mempool, or that cannot be shown complete, labelled "no on-chain evidence", a pending spend +that removes the evidence of a P2TR output, a spend seen labelled "no on-chain evidence" (also one seen only through its hash), a +P2TR output only in the mempool labelled "no output exists yet", an Esplora or type-4 transaction cited by an id it does not hash +to, a served error body or identifier refused by the language gate, a guard that judges a pipe on its raw string, that lets a +declared literal be queried, that wraps a fixed list of DNS names, that reads a datagram's offset as its port, a mock that +outlives its parent, a loader that crashes on the wrong `@noble/curves`; since round 6, a tip left unjudged, sibling scripts not read, a TLS message +left unquoted, the mempool rule that looked only for an empty page; since round 7, a genesis block not compared with the address's +network, a tip header's proof-of-work limit not judged, an Ethereum head time or sync status not judged, a report date not judged +or a future one not refused, a Bitcoin Core block time ignored or missing, the other encodings and the BIP-86 output of a `p2pk:` +key not derived, the mempool output and transaction counts not compared; since round 8, an Ethereum account read at `latest`, its +proven values replaced by the fields served beside the proof, its code not hashed to the proven code hash, a checkpoint not +compared, a chain below the lowest checkpoint let through, Bitcoin Core's chain not judged, an Esplora count read as Number(x), an +unread `mempool_stats` ignored, the outputs counted on chain not compared, a transaction that does not touch the script accepted), +the test plants the defect in a copy of the tool (or of +the guard) and requires its own check to turn red on it. Where one rule backs up another (Bitcoin Core never gives "no on-chain +evidence"), the planting of an earlier rule removes the backstop too, so that each rule is shown to hold the label by itself. +Every check has three states (green, red, broken); a control that cannot plant is a failure; an exception inside the test is a +failure (exit 1), never "unmeasured". The copies are siblings of this directory (`.expunere-planta-*`, ignored by git), and the +test's working directory is `expunere-proba--*` in the system's temporary directory; a run that is killed leaves both, and +the next run deletes those whose process (the pid in the name) is gone, never those of a run still alive. Working directories of +the form used before 2026-10-12 (`expunere-proba-*` without a pid) cannot be judged: the run names them and leaves them. A pid +reused by another process keeps its orphan until that process ends. Not measured by the test: mode 3 +against a real provider, and the adapters against real servers (the Bitcoin Core responses in the fixtures are shaped after the +RPC documentation, not recorded from a node). The sibling scripts of the recorded vectors were not recorded: the mocks answer a +script they do not hold as an index answers a script never used (an empty history), so the test's `no on-chain evidence` on the +never-spent P2PKH vector rests on the recorded history of the address itself and on empty, unrecorded answers for its siblings. +The tip was not recorded with the fixtures either: the mocks serve the real header of block 971000 (2026-10-11T22:53:11Z), taken +from the header chain the C6 Bitcoin P2P follower validated that evening (provenance in each fixture's `_sursa.nota`), and the +test dates its reports 2026-10-11, so that the reference instant (the end of that day) is fixed and the tip is within its margin. +Nor were the genesis answers (`server.features`, `/block-height/0`: the mainnet genesis hash, a constant of the chain that the test +recomputes) or the Ethereum head and `eth_syncing` (`false`, and for the head block only its number and the EARLIEST time it can +carry, derived from the recorded block 517 blocks before it; provenance in `_sursa.nota`). Reports through Bitcoin Core are dated +the day of the run, since its scan reads the node at the time of the run. The Esplora load-balancer case above is not measured. +Since round 8 the fixtures also answer the checkpoint blocks (Electrum `blockchain.block.header`, Esplora `/block-height/:h`, +Bitcoin Core `getblockhash`) and the chain of the Bitcoin Core node (`getblockhash 0`, `getblockcount` 971000): none was recorded; +the checkpoint answers are the pins of `btc/antete.mjs`. The fork of the test serves, at the checkpoint height, the real header of +another mainnet block (969686), not a header of Bitcoin Cash: no such header can be produced offline, and what the guard compares +is the hash at that height. The Ethereum STATE of the fixtures is SYNTHETIC: a Merkle-Patricia trie of the four recorded accounts +(balance 0, empty storage), built from the code and the transaction count recorded at `latest`, whose root is given as the state +root of the head block (which was not recorded either); the test checks the builder against the Ethereum trie test vectors and +the walker against the published one, so a real `eth_getProof` answer of a public endpoint is NOT measured here. + +The fixtures keep every path and field the adapters read on the recorded answers; the paths no adapter requests (Esplora +`/tx/:id`, `/tx/:id/hex`, `/utxo`) and, in the Esplora transaction pages, the fields the adapter never reads (`*_asm`, +`scriptpubkey_type`, `scriptpubkey_address`) were removed to keep them small, as written in each file's `_sursa.nota`. The Bitcoin +Core fixture keeps the node's verbose form with `hex` for every transaction (what the adapter parses and hashes to the id), and +the decoded `vin` / `vout`, which the adapter reads only when a node serves no `hex`, for the transactions of the three roles on +which the test exercises that path; its `confirmations` are derived from the recorded heights (the adapter does not read them). + +The real vectors (`fixturi/vectori.txt`, provenance in `fixturi/alese.json`) are historical or ownerless addresses where a +never-spent address was needed (the block-1 coinbase key, the P2PKH form of the block-11 coinbase key, a provably unspendable +and never-funded P2TR address, the BIP-350 example address whose output key is the generator point, the addresses of the +private keys 3 and 7, the burn address 0x...dEaD), and otherwise addresses with no remaining balance on the recording date. + +Reviewed on 2026-10-14 (round 9, the hostile review of the round-8 form as left on disk; the round-8 agent was stopped by the +account's weekly limit before its report): `node proba-expunere.mjs` exit 0, 164 green, 0 red, 0 broken, 1 unmeasured (mode 3 +against a real provider, by design), 123 s; the round-7 reviewer's attack harness replayed against this code: R1 (an Ethereum +balancer with one machine behind) not reproduced (0 of 40 "no on-chain evidence" with a random balancer, `unmeasured` on each +route), R3, R4, R5 (Esplora counts) not reproduced, R8 (a key spent before the split) `exposed` on the fork as it must be; R8b +still prints "no on-chain evidence" in THAT harness only because its mock answers `/block-height/969696` and +`blockchain.block.header(969696)` with the tool's own checkpoint block (recorded in the fixtures): it models an index that serves +Bitcoin's headers and checkpoint with a foreign history, which is the lying index named under Limits (the history is not checked +against the headers with Merkle proofs), not an honest fork, whose block at that height is its own (case m.2, `unmeasured`) or whose +chain ends below 967680 (m.3, `unmeasured`). + +## Outside the AERE development tree + +The tool and its test look for what they need in two layouts: the AERE development tree (`tools/aere-quantum-shield/expunere/` +beside `cloud-gateway/` and `verificator-falcon/`) and the public copy (`exposure-report/` beside `readiness/`, `control-plane/` +and `proof-kinds/` in the `aere-quantum` repository). Each file is found by its place, or named by an environment variable: + +| file | what it is | development tree | public copy | variable | +|---|---|---|---|---| +| `adrese-private.mjs` | the private-address guard of mode 3 (required) | `cloud-gateway/` | `readiness/` | `AERE_EXPUNERE_ADRESE_PRIVATE` | +| `raport-conformitate.mjs` | the compliance-report module: deadlines, canonical hashing (required) | `cloud-gateway/control-plane/` | `control-plane/` | `AERE_EXPUNERE_TERMENE` | +| `proof-kinds.mjs` | the AIP-23 envelope builder (required) | `tools/proof-kinds/` | `proof-kinds/` | `AERE_EXPUNERE_PROOF_KINDS` | +| `verify.mjs` | the AIP-23 reference verifier (the test compares with it) | `tools/aere-proof-protocol/` | not in the copy | `AERE_PROOF_PROTOCOL_VERIFY` | +| `verify-proof.mjs`, `mpt.mjs` | the anchor verifier's RLP encoder and account-proof walker (the test compares with them) | `verificator-falcon/` | not in the copy | `AERE_VERIFY_PROOF` (`mpt.mjs` beside it) | +| `antete.mjs` | the shield's Bitcoin header pins (the test compares the checkpoints with them) | `tools/aere-quantum-shield/btc/` | not in the copy | `AERE_EXPUNERE_PINI` | +| `node_modules/` | the two npm packages, for a copy of the tool that has none (the test's copies) | the anchor verifier's | this directory's, after `npm install` | `AERE_EXPUNERE_NODE_MODULES` | + +The two npm packages are resolved as described at the top (`npm install --ignore-scripts --no-audit --no-fund` in this directory). +In a copy without the three "compared with" neighbours the test still runs; the rows that need them (the compliance envelopes +judged by the reference verifier, the RLP encoder, the MPT walker, the checkpoint pins) and the scan of this directory for names +from the AERE host inventory are reported as `NEMASURAT` with the reason, not as passed; the exit code stays 0, as it does for every +`NEMASURAT` row (it is 1 only when a row is red or broken). The git-ignore row is `NEMASURAT` outside a git tree. Measured on +2026-10-14 in the public copy after `npm install`: 153 rows passed, 0 red, 0 broken, 12 `NEMASURAT` (the ten rows above, the +scan and the git-ignore row); in the AERE development tree: 164 passed, 1 `NEMASURAT` (mode 3 against a real provider). Nothing in the public copy reads anything from the AERE development tree. + +## Files + +`raport.mjs` (the command line), `clasifica.mjs` (the classification and its vocabulary), `limbaj.mjs` (the two labels and the +language gate), `bitcoin.mjs` (addresses, scripts, transactions, evidence from inputs, block headers, the networks and the +mainnet checkpoints), `ethereum.mjs` (EIP-55, RLP, signing hashes, key recovery, EIP-7702 authorizations, the account-proof walker +and, for the test, a trie builder), `adaptoare.mjs` (the four adapters), `noble.mjs` (the dependency loader), +`paza-retea.mjs` (the connection counter), `machete.mjs` (mock targets for the test), `fixturi/` (recorded responses and the +real vectors), `proba-expunere.mjs` (the test), `package.json`. diff --git a/exposure-report/adaptoare.mjs b/exposure-report/adaptoare.mjs new file mode 100644 index 0000000..beae783 --- /dev/null +++ b/exposure-report/adaptoare.mjs @@ -0,0 +1,631 @@ +// adaptoare.mjs (quantum exposure report, C12): the four ADAPTERS that bring observations about an address from a data source the +// client names (mode 2: the client's own node or index; mode 3: a third-party provider, only with written consent). Each adapter opens +// connections ONLY to the declared target, returns an observation object for clasifica.mjs, and turns every failure (no answer, an +// error, a malformed or truncated answer) into a NAMED reason (`error` / `partial`), never into "nothing was found". +// +// electrum the Electrum server protocol (JSON-RPC lines over TCP or TLS): server.version, server.features (its genesis_hash names +// the chain the server serves), blockchain.headers.subscribe (the tip), blockchain.block.header at a checkpoint height +// (mainnet: bitcoin.mjs punctDeControl), blockchain.scripthash.get_history, blockchain.transaction.get (raw hex). Every +// transaction is parsed from its raw bytes and must hash to its id, and must pay or spend the script whose history it is in. +// esplora the HTTP API of an Esplora-style index: /block-height/0 (the genesis block: the chain it serves), the tip (below), +// /block-height/:h at a checkpoint height, /address/:a, /address/:a/txs (+ /txs/chain/:last for the rest), +// /scripthash/:h/txs for scripts without an address. Evidence is computed from the hex fields, not from the labels; every +// transaction is re-serialized from the fields served and must hash to the id the index gives, and must pay or spend the +// script. The index's counts (chain_stats, mempool_stats) are read only as counts, never as Number(x) of whatever was +// served. Each path is a separate HTTP request: behind a load balancer the tip and the history may come from different +// machines, which no answer shows (README, NOT measured). +// bitcoind Bitcoin Core JSON-RPC: the chain the node serves, read once per report (lantulCore: getblockhash 0, getblockcount, +// getblockhash at a checkpoint height), scantxoutset (unspent outputs of the script) and, for the transaction ids the client gives +// (--txids, read with txindex=1), getrawtransaction verbose, read ONCE for the whole report (tranzactiiCore) and shared +// by every address; each must hash to its id (from `hex`, or re-serialized from the decoded form when a node serves no +// `hex`), and an id the node does not serve refuses the report before any address is measured, naming the id. +// Bitcoin Core keeps no address index: without ids, or for an address that none of the given CONFIRMED transactions +// touches (a touch only in the node's mempool is not one), spends are not searched and the report says so, per address; +// with ids, an output of the address that the scan no longer finds unspent and that no given transaction spends was +// spent by a transaction NOT given, and the report says that too (spentNotRead). And since no answer of the node shows +// the list to be the address's whole history, an address read through this adapter is never "no on-chain evidence of +// exposure": it is "exposed" or "unmeasured" (historyFromRequesterList, clasifica.mjs). +// eth-rpc Ethereum JSON-RPC: eth_chainId, eth_blockNumber, eth_syncing and the HEAD block (eth_getBlockByNumber at that number, +// without transactions: its time and its state root), then the ACCOUNT AT THAT HEAD: eth_getProof at the head number, every +// node of the proof checked by its hash from that state root (its nonce and its code hash), and eth_getCode at the same +// number, which must hash to the code hash proven (stareLaCap); nothing is read at 'latest'. Then eth_getBlockByNumber with +// transactions over a window of blocks to FIND a transaction sent by the address; the sender's key is re-derived from its +// signature here. The head is judged against the report date (see clasifica.mjs); the head block itself is the endpoint's +// answer, not checked against the consensus of the chain (README, NOT measured). +// Electrum and Esplora read the CHAIN the target serves (its genesis block, and on mainnet its block at a checkpoint height) and its TIP +// before the history (its height and its 80-byte header; clasifica.mjs judges the chain against the address's network and the checkpoint, +// the header against that chain's proof-of-work limit, and the header time against the report date), and every Bitcoin adapter reads the +// SIBLING scripts of a P2PKH / P2WPKH / P2PK input (the same HASH160 as P2PKH, P2WPKH and P2SH-P2WPKH; for a P2PK input also its other +// encodings and its BIP-86 P2TR output: bitcoin.mjs scripturiSurori), Electrum and Esplora from the target by script, Bitcoin Core in the +// given transactions. Bitcoin Core is asked which chain it serves (its genesis block and its block at a checkpoint height; no tip header, +// so the proof-of-work limit is not judged there); its scan reads the node's unspent set as of the run, and the block time of each given +// transaction is kept, so that clasifica.mjs can judge both against the report date. +// The whole message of a TLS error is the target's text (it names the target's certificate) and is quoted as served. +// In mode 3 the target's name is resolved first, every resolved address must be public (adrese-private.mjs), and the connection is +// made to the verified address (lookupFixat), with no redirect followed. +import net from 'node:net'; +import tls from 'node:tls'; +import http from 'node:http'; +import https from 'node:https'; +import dns from 'node:dns'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath, pathToFileURL } from 'node:url'; +// adrese-private.mjs, the private-address guard shared with the readiness scanner: cloud-gateway/ in the AERE development tree, +// readiness/ in the public copy (AERE_EXPUNERE_ADRESE_PRIVATE names another file); without it the tool does not start +const ADRESE_PRIVATE = [process.env.AERE_EXPUNERE_ADRESE_PRIVATE, '../../../cloud-gateway/adrese-private.mjs', '../readiness/adrese-private.mjs'].filter(Boolean).map((p) => path.resolve(path.dirname(fileURLToPath(import.meta.url)), p)).find((p) => fs.existsSync(p)); +if (!ADRESE_PRIVATE) throw new Error('adaptoare.mjs: adrese-private.mjs (the private-address guard) is not beside this tool: cloud-gateway/ in the development tree, readiness/ in the public copy, or AERE_EXPUNERE_ADRESE_PRIVATE'); +const { ipPrivat, lookupFixat } = await import(pathToFileURL(ADRESE_PRIVATE).href); +import * as B from './bitcoin.mjs'; +import * as E from './ethereum.mjs'; + +/** a refusal of the input, named. `citate`: hex strings that are the requester's OWN input or public chain data computed from it (a + * transaction id given with --txids), which the command line may print in full; every other long hex run in a message is masked */ +export class Refuz extends Error { constructor(motiv, detaliu, citate = []) { super(detaliu ? motiv + ': ' + detaliu : motiv); this.motiv = motiv; this.citate = citate.map((x) => String(x).toLowerCase()); } } +export const CAP_TRANZACTII = 2000; // a history larger than this is reported as not measured, not truncated in silence +const timeoutMs = () => Math.max(1000, Number(process.env.AERE_EXPUNERE_TIMEOUT_MS || 20000)); +/** a message cut to 200 characters, every long hex run masked; a cut that falls inside a [served: ...] quote closes the quote, so that what + * the target served never reaches the report unquoted (the language gate would then judge it as the tool's own text) */ +const taie = (s) => { let x = String(s ?? '').replace(/[0-9a-fA-F]{40,}/g, ''); if (x.length > 200) { x = x.slice(0, 200); const i = x.lastIndexOf('[served: '); if (i >= 0 && x.indexOf(']', i) < 0) x += ']'; } return x; }; +/** text the TARGET served (an error body, an error message, a version string, an identifier that is not one), quoted as such: + * `[served: ...]`. The language gate of raport.mjs judges the tool's text and leaves these quotes out, the way it leaves out what the + * requester gave verbatim */ +export const servit = (s) => '[served: ' + taie(s).replace(/[[\]]/g, '') + ']'; +/** an identifier the target serves (a transaction id, a block hash) is used in the report only in its own form, 64 hex digits (an + * Ethereum hash with its 0x); anything else is the target's text and is quoted */ +const ID_BTC = /^[0-9a-f]{64}$/; +const HASH_ETH = /^0x[0-9a-fA-F]{64}$/; +const idSauCitat = (x, re) => (typeof x === 'string' && re.test(x) ? x : servit(x)); +/** a JSON-RPC quantity (0x + hex digits) as a BigInt, or null: never a conversion error whose message would carry the served text */ +const cantitate = (x) => (typeof x === 'string' && /^0x[0-9a-fA-F]{1,64}$/.test(x) ? BigInt(x) : null); +/** 2^53 - 1, the largest integer a JavaScript Number holds exactly: a block number above it is not used as a number */ +const NUMAR_EXACT = 9007199254740991n; +/** an error of the TLS layer: Node.js ERR_TLS_* / ERR_SSL_*, an OpenSSL error (it carries `library`), or a certificate verification code. + * Its message is built from what the TARGET presented (ERR_TLS_CERT_ALTNAME_INVALID names every name of its certificate), so it is the + * target's text and is quoted WHOLE as served; the code, Node's own, stays outside the quote */ +const CODURI_X509 = new Set(['UNABLE_TO_GET_ISSUER_CERT', 'UNABLE_TO_GET_CRL', 'UNABLE_TO_DECRYPT_CERT_SIGNATURE', 'UNABLE_TO_DECRYPT_CRL_SIGNATURE', 'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY', 'CERT_SIGNATURE_FAILURE', 'CRL_SIGNATURE_FAILURE', 'CERT_NOT_YET_VALID', 'CERT_HAS_EXPIRED', 'CRL_NOT_YET_VALID', 'CRL_HAS_EXPIRED', 'ERROR_IN_CERT_NOT_BEFORE_FIELD', 'ERROR_IN_CERT_NOT_AFTER_FIELD', 'ERROR_IN_CRL_LAST_UPDATE_FIELD', 'ERROR_IN_CRL_NEXT_UPDATE_FIELD', 'OUT_OF_MEM', 'DEPTH_ZERO_SELF_SIGNED_CERT', 'SELF_SIGNED_CERT_IN_CHAIN', 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY', 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', 'CERT_CHAIN_TOO_LONG', 'CERT_REVOKED', 'INVALID_CA', 'PATH_LENGTH_EXCEEDED', 'INVALID_PURPOSE', 'CERT_UNTRUSTED', 'CERT_REJECTED', 'HOSTNAME_MISMATCH']); +const eroareTls = (e) => !!e && typeof e.code === 'string' && (/^ERR_(TLS|SSL)_/.test(e.code) || CODURI_X509.has(e.code) || e.library !== undefined); +const mesajConexiune = (e) => (eroareTls(e) ? e.code + ' ' + servit(e.message) : e.code ? e.code + ' ' + e.message : e.message); +/** the 80-byte header of a target's tip -> { height, time, hash, bits }, or { partial } naming what is wrong (bitcoin.mjs antetBloc); the + * bits are judged in clasifica.mjs against the proof-of-work limit of the chain the target serves */ +function varfDinAntet(height, hexAntet, ceServeste) { + const a = B.antetBloc(hexAntet); + if (a.eroare) return { partial: `the header ${ceServeste} for its tip (height ${height}) is not a block header: ${a.eroare}` }; + return { height, time: a.time, hash: a.hash, bits: a.bits }; +} + +// ---------------------------------------------------------------- targets +/** "host:port", "tcp://host:port", "tls://host:port" (also ssl://) -> { scheme, host, port } */ +export function tintaElectrum(s) { + const m = /^(?:(tcp|tls|ssl):\/\/)?\[?([^\]\/:]+|\[[^\]]+\])\]?:(\d{1,5})$/.exec(String(s || '').trim()); + if (!m) throw new Refuz('target', 'the Electrum target must be host:port, tcp://host:port or tls://host:port'); + return { scheme: m[1] === 'ssl' ? 'tls' : (m[1] || 'tcp'), host: m[2].replace(/^\[|\]$/g, ''), port: Number(m[3]) }; +} +export function tintaHttp(s) { + let u; try { u = new URL(String(s || '').trim()); } catch { throw new Refuz('target', 'the target must be an http:// or https:// URL'); } + if (u.protocol !== 'http:' && u.protocol !== 'https:') throw new Refuz('target', 'the target must be an http:// or https:// URL'); + // an IPv6 literal comes back from URL.hostname with its brackets; net.isIP and the resolver want it bare + return { url: u, host: u.hostname.replace(/^\[|\]$/g, ''), port: Number(u.port) || (u.protocol === 'https:' ? 443 : 80), base: u.href.replace(/\/+$/, '') }; +} +/** mode 3: resolve and REFUSE any target that is not public; returns the lookup to pin the connection to the verified address */ +export async function rezolvaPublic(host) { + const ip4 = net.isIP(host); + let adrese; + if (ip4) adrese = [{ address: host, family: ip4 }]; + else { try { adrese = await dns.promises.lookup(host, { all: true }); } catch (e) { throw new Refuz('target-unresolved', `the third-party target ${host} does not resolve (${taie(e.code || e.message)})`); } } + if (!adrese.length) throw new Refuz('target-unresolved', `the third-party target ${host} resolves to nothing`); + for (const a of adrese) if (ipPrivat(a.address)) throw new Refuz('target-private', `the third-party target ${host} resolves to a non-public address; a third-party provider must be a public service (mode 3 refuses private, loopback, link-local and reserved addresses)`); + return { adresa: adrese[0], lookup: lookupFixat(adrese[0]) }; +} + +// ---------------------------------------------------------------- HTTP (JSON), no redirects, one declared target +export function httpCerere({ url, method = 'GET', body = null, headers = {}, lookup = undefined, auth = null }) { + return new Promise((resolve, reject) => { + const u = new URL(url); const mod = u.protocol === 'https:' ? https : http; + const h = { 'user-agent': 'aere-quantum-exposure-report/1', accept: 'application/json', ...headers }; + if (body !== null) h['content-type'] = 'application/json'; + if (auth) h.authorization = 'Basic ' + Buffer.from(auth, 'utf8').toString('base64'); + const req = mod.request(u, { method, headers: h, ...(lookup ? { lookup } : {}), timeout: timeoutMs() }, (res) => { + const parts = []; res.on('data', (d) => parts.push(d)); res.on('end', () => resolve({ status: res.statusCode, text: Buffer.concat(parts).toString('utf8') })); + }); + req.on('timeout', () => { req.destroy(new Error('timeout after ' + timeoutMs() + ' ms')); }); + req.on('error', (e) => reject(new Error(taie(mesajConexiune(e))))); + if (body !== null) req.write(typeof body === 'string' ? body : JSON.stringify(body)); + req.end(); + }); +} +async function jsonRpc(url, method, params, o) { + const r = await httpCerere({ url, method: 'POST', body: { jsonrpc: '2.0', id: 1, method, params }, lookup: o.lookup, auth: o.auth }); + if (!r.text.trim()) throw new Error(`${method}: empty body (HTTP ${r.status})`); + let j; try { j = JSON.parse(r.text); } catch { throw new Error(`${method}: the body is not JSON (HTTP ${r.status})`); } + if (j && j.error) throw new Error(`${method}: endpoint error ${servit(String(j.error.code ?? '') + ' ' + String(j.error.message ?? ''))}`); + if (!j || !Object.hasOwn(j, 'result')) throw new Error(`${method}: no result in the answer (HTTP ${r.status})`); + return j.result; +} + +/** a count an index serves: a JSON integer, 0 or more, or null (never Number(x), which reads null, '' and [] as 0) */ +const numarator = (x) => (Number.isSafeInteger(x) && x >= 0 ? x : null); +/** + * the ids of the transactions of a history served for script `t` that neither pay it nor spend it: an index answers the history of a + * script with the transactions that touch it, so one that does not is not part of that history. A spend is recognised by its funding + * (an output of the same history), by the prevout an index serves with it, or by a push or a script in it that hashes to the address + * (bitcoin.mjs dovezileIntrarii), so a spend served without its funding still counts as touching + */ +export function neatinse(t, txs) { + const iesiri = new Set(); + for (const tx of txs) tx.vout.forEach((o, i) => { if (B.platesteTinta(t, o.scriptPubKey)) iesiri.add(tx.txid + ':' + i); }); + return txs.filter((tx) => !tx.vout.some((o) => B.platesteTinta(t, o.scriptPubKey)) && !tx.vin.some((v) => iesiri.has(v.txid + ':' + v.vout) || v.prevoutPaysTarget === true || B.dovezileIntrarii(t, v, false).length > 0)).map((tx) => tx.txid); +} + +// ---------------------------------------------------------------- evidence from a list of parsed transactions +/** txs: [{ txid, height, unconfirmed, vin: [{txid, vout, scriptSig, witness}], vout: [{scriptPubKey}] }] -> the observation for clasifica.mjs. + * Only CONFIRMED transactions become on-chain evidence; the ones the target holds unconfirmed (its mempool) are counted, and a revealing + * spend among them is flagged (`unconfirmedRevealing`) so that the classification can say "public, but not on chain yet". */ +export function observatieDinTranzactii(t, txs, extra = {}) { + const conf = txs.filter((x) => !x.unconfirmed), neconf = txs.filter((x) => x.unconfirmed); + const outputs = [], outSet = new Set(); + for (const tx of conf) tx.vout.forEach((o, i) => { if (B.platesteTinta(t, o.scriptPubKey)) { outputs.push({ txid: tx.txid, vout: i, height: tx.height, block: tx.block || null }); outSet.add(tx.txid + ':' + i); } }); + const judeca = (tx, lista) => tx.vin.forEach((vin, i) => { + const spendsTarget = outSet.has(vin.txid + ':' + vin.vout) || vin.prevoutPaysTarget === true; + const findings = B.dovezileIntrarii(t, vin, spendsTarget); + if (findings.length || spendsTarget) lista.push({ txid: tx.txid, index: i, height: tx.height, block: tx.block || null, findings, spendsTarget, spends: vin.txid + ':' + vin.vout }); + }); + const inputs = []; for (const tx of conf) judeca(tx, inputs); + const neconfInputs = []; for (const tx of neconf) judeca(tx, neconfInputs); + // an output to this script that the target holds only in its mempool: for a key-in-output type (P2TR, P2PK, bare multisig) the key is + // public there, but not on chain yet + let neconfOutputs = 0; for (const tx of neconf) for (const o of tx.vout) if (B.platesteTinta(t, o.scriptPubKey)) neconfOutputs++; + return { outputs, inputs, spentOutputs: inputs.filter((i) => i.spendsTarget).length, txCount: conf.length, unconfirmedCount: neconf.length, + unconfirmedRevealing: neconfInputs.some((i) => i.findings.some((f) => B.DOVEZI_REVELATOARE.has(f.what))), unconfirmedOutputs: neconfOutputs, unconfirmedInputs: neconfInputs.length, + // the unconfirmed inputs that SPEND an output of this script (its funding read, or the prevout an index serves pays it) + unconfirmedSpends: neconfInputs.filter((i) => i.spendsTarget).length, ...extra }; +} + +// ---------------------------------------------------------------- Electrum +function electrumClient(tinta, o) { + return new Promise((resolve, reject) => { + const opts = { host: tinta.host, port: tinta.port, ...(o.lookup ? { lookup: o.lookup } : {}) }; + const sock = tinta.scheme === 'tls' ? tls.connect({ ...opts, servername: net.isIP(tinta.host) ? undefined : tinta.host }) : net.connect(opts); + const pending = new Map(); let id = 0; let buf = ''; let done = false; + const fail = (e) => { if (done) return; done = true; for (const p of pending.values()) p.reject(e); pending.clear(); reject(e); }; + sock.setTimeout(timeoutMs(), () => { sock.destroy(new Error('timeout after ' + timeoutMs() + ' ms')); }); + sock.on('error', (e) => fail(new Error(taie(mesajConexiune(e))))); + sock.on('close', () => fail(new Error('the target closed the connection'))); + sock.on('data', (d) => { + buf += d.toString('utf8'); let i; + while ((i = buf.indexOf('\n')) >= 0) { + const line = buf.slice(0, i); buf = buf.slice(i + 1); if (!line.trim()) continue; + let j; try { j = JSON.parse(line); } catch { fail(new Error('a line from the target is not JSON')); return; } + const p = pending.get(j.id); if (!p) continue; pending.delete(j.id); + if (j.error) p.reject(new Error(`${p.method}: server error ${servit(String(j.error.code ?? '') + ' ' + String(j.error.message ?? ''))}`)); else if (!Object.hasOwn(j, 'result')) p.reject(new Error(`${p.method}: no result`)); else p.resolve(j.result); + } + }); + const call = (method, params) => new Promise((res, rej) => { if (done) return rej(new Error('connection closed')); const k = ++id; pending.set(k, { resolve: res, reject: rej, method }); sock.write(JSON.stringify({ jsonrpc: '2.0', id: k, method, params }) + '\n'); }); + const onConnect = () => { done = false; resolve({ call, close: () => { done = true; sock.destroy(); } }); }; + sock.once(tinta.scheme === 'tls' ? 'secureConnect' : 'connect', onConnect); + }); +} +/** the history of one script through an open Electrum connection -> { txs, gol } or { partial } / { error } naming what is wrong */ +async function istoricElectrum(cl, t, cerere) { + const sh = B.scripthash(t.scriptPubKey); + const hist = await cl.call('blockchain.scripthash.get_history', [sh]); cerere(); + if (!Array.isArray(hist)) return { error: 'get_history did not return a list' }; + if (hist.length > CAP_TRANZACTII) return { partial: `a history of ${hist.length} transactions exceeds the cap of ${CAP_TRANZACTII}` }; + const txs = []; + for (const h of hist) { + if (!h || typeof h.tx_hash !== 'string') return { partial: 'a history entry has no tx_hash' }; + // the id is used in the report (and in the next request) only as an id: 64 hex digits; anything else is the target's text, quoted + if (!ID_BTC.test(h.tx_hash)) return { partial: `a history entry has a tx_hash that is not a transaction id (64 lowercase hex digits): ${servit(h.tx_hash)}` }; + if (!Number.isInteger(h.height)) return { partial: `the history entry of ${h.tx_hash} has a height that is not an integer: ${servit(JSON.stringify(h.height))}` }; + const raw = await cl.call('blockchain.transaction.get', [h.tx_hash, false]); cerere(); + if (typeof raw !== 'string' || !raw) return { partial: `transaction ${h.tx_hash} was served empty` }; + let tx; try { tx = B.parseTx(Buffer.from(raw, 'hex')); } catch (e) { return { partial: `transaction ${h.tx_hash} does not parse (${e.message})` }; } + if (tx.txid !== h.tx_hash) return { partial: `the bytes served for ${h.tx_hash} hash to ${tx.txid}` }; + // Electrum: height 0 = in the mempool, -1 = in the mempool with an unconfirmed parent; neither is on chain + txs.push({ ...tx, height: h.height > 0 ? h.height : null, unconfirmed: !(h.height > 0) }); + } + const straine = neatinse(t, txs); + if (straine.length) return { partial: `the history served for this script holds ${straine.length} transaction(s) that neither pay it nor spend it (the first: ${straine[0]}); an index serves, for a script, the transactions that touch it` }; + return { txs, gol: hist.length === 0 }; +} +export async function electrum(t, o) { + const tinta = tintaElectrum(o.target); let cl; let cereri = 0; + const cerere = () => { cereri++; }; + try { + cl = await electrumClient(tinta, o); + const ver = await cl.call('server.version', ['aere-quantum-exposure-report 1', '1.4']); cereri++; + // the CHAIN the target serves: server.features names its genesis block (protocol 1.4, genesis_hash); clasifica.mjs compares it with + // the address's network before any label + const fe = await cl.call('server.features', []); cereri++; + const geneza = fe && typeof fe === 'object' ? fe.genesis_hash : undefined; + if (typeof geneza !== 'string' || !ID_BTC.test(geneza)) return { partial: `server.features served no genesis block hash (64 lowercase hex digits): ${servit(JSON.stringify(fe && typeof fe === 'object' ? (geneza ?? null) : fe))}`, requests: cereri }; + const chain = { geneza, retea: B.reteaDinGeneza(geneza) }; + // the TIP of the target, read BEFORE the history (blockchain.headers.subscribe, protocol 1.4: { height, hex }): every transaction + // confirmed at or below that height is in the history served after it, so the verdict can say up to where the history goes + const v = await cl.call('blockchain.headers.subscribe', []); cereri++; + if (!v || typeof v !== 'object' || !Number.isInteger(v.height) || v.height < 0) return { partial: `blockchain.headers.subscribe served no tip height: ${servit(JSON.stringify(v))}`, requests: cereri }; + const tip = varfDinAntet(v.height, v.hex, 'the target serves'); + if (tip.partial) return { partial: tip.partial, requests: cereri }; + // the CHECKPOINT (bitcoin.mjs punctDeControl): on a network that holds one, the header the target serves at the highest checkpoint + // height at or below its tip (blockchain.block.header, protocol 1.4), whose hash clasifica.mjs compares with the checkpoint: a chain + // that shares the genesis block and split later serves another block there + const pc = B.punctDeControl(chain.retea, v.height); + if (pc && pc.sub !== undefined) chain.control = { sub: pc.sub, inaltime: v.height }; + else if (pc) { + const hx = await cl.call('blockchain.block.header', [pc.height]); cereri++; + const a = B.antetBloc(typeof hx === 'string' ? hx : ''); + if (a.eroare) return { partial: `the header the target serves for height ${pc.height} (a checkpoint height) is not a block header: ${a.eroare}`, requests: cereri }; + chain.control = { height: pc.height, asteptat: pc.hash, servit: a.hash }; + } + const h = await istoricElectrum(cl, t, cerere); + if (!h.txs) return { ...h, requests: cereri }; + const obs = observatieDinTranzactii(t, h.txs, { tip, server: servit((Array.isArray(ver) ? String(ver[0]) : String(ver)).slice(0, 60)), chain, note: h.gol ? 'the target served an empty history for this script: either it was never used on chain or the target does not index it' : null }); + // the SIBLING scripts of the same HASH160 (bitcoin.mjs scripturiSurori), through the same connection: a key revealed by a spend there + // is the same key. A sibling that cannot be read is named as such (the classification does not give "no on-chain evidence" past it) + obs.siblings = []; + for (const s of B.scripturiSurori(t)) { + const st = B.tintaSora(s, t.network); + let so; try { const hs = await istoricElectrum(cl, st, cerere); so = hs.txs ? observatieDinTranzactii(st, hs.txs) : hs; } catch (e) { so = { error: 'Electrum target ' + tinta.host + ':' + tinta.port + ': ' + taie(e.message) }; } + obs.siblings.push({ type: s.type, relatie: s.relatie, codificare: s.codificare, input: s.input, t: st, obs: so }); + } + obs.requests = cereri; + return obs; + } catch (e) { return { error: 'Electrum target ' + tinta.host + ':' + tinta.port + ': ' + taie(e.message), requests: cereri }; } + finally { if (cl) cl.close(); } +} + +// ---------------------------------------------------------------- Esplora +/** the id of a transaction as an Esplora index serves it (/address/:a/txs): version, vin (txid, vout, scriptsig, sequence; a coinbase + * input carries the null outpoint), vout (value in satoshi, scriptpubkey), locktime, serialized without the witness (the id does not cover + * it) -> { txid } or { eroare } when a field is missing or not of its type */ +export function idDinCampuriEsplora(x) { + try { + const u32 = (v, nume) => { if (!Number.isInteger(v) || v < 0 || v > 0xffffffff) throw new Error(nume + ' is not a 32-bit unsigned integer'); return v; }; + if (!x || !Number.isInteger(x.version)) throw new Error('no version'); + if (!Array.isArray(x.vin) || !x.vin.length || !Array.isArray(x.vout)) throw new Error('no vin / vout'); + const vin = x.vin.map((v) => { if (!/^[0-9a-f]{64}$/.test(String(v.txid))) throw new Error('an input has no previous transaction id'); return { txid: v.txid, vout: u32(v.vout, 'vout'), scriptSig: B.dinHex(v.scriptsig || ''), sequence: u32(v.sequence, 'sequence'), witness: [] }; }); + const vout = x.vout.map((v) => { if (!Number.isSafeInteger(v.value) || v.value < 0) throw new Error('an output value is not an amount in satoshi'); return { value: BigInt(v.value), scriptPubKey: B.dinHex(v.scriptpubkey || '') }; }); + return { txid: B.parseTx(B.serializeTx({ version: x.version, locktime: u32(x.locktime, 'locktime'), vin, vout })).txid }; + } catch (e) { return { eroare: taie(e.message).slice(0, 80) }; } +} +export async function esplora(t, o) { + const tinta = tintaHttp(o.target); let cereri = 0; + const get = async (p) => { cereri++; const r = await httpCerere({ url: tinta.base + p, lookup: o.lookup }); if (r.status !== 200) throw new Error(`${p}: HTTP ${r.status} ${servit(r.text.slice(0, 60))}`); if (!r.text.trim()) throw new Error(`${p}: empty body`); try { return JSON.parse(r.text); } catch { throw new Error(`${p}: not JSON`); } }; + const getText = async (p) => { cereri++; const r = await httpCerere({ url: tinta.base + p, lookup: o.lookup, headers: { accept: 'text/plain' } }); if (r.status !== 200) throw new Error(`${p}: HTTP ${r.status} ${servit(r.text.slice(0, 60))}`); return r.text.trim(); }; + try { + // the CHAIN the index serves: the hash of its block at height 0, its genesis block; clasifica.mjs compares it with the address's + // network before any label + const geneza = await getText('/block-height/0'); + if (!ID_BTC.test(geneza)) return { partial: `/block-height/0 served no genesis block hash (64 lowercase hex digits): ${servit(geneza)}`, requests: cereri }; + const chain = { geneza, retea: B.reteaDinGeneza(geneza) }; + // the TIP of the index, read BEFORE the history: its height, the hash of the block at that height, and that block's 80-byte header, + // which must hash to that hash (every transaction confirmed at or below that height is in the history served after it) + const hTxt = await getText('/blocks/tip/height'); + if (!/^\d{1,9}$/.test(hTxt)) return { partial: `/blocks/tip/height served no height: ${servit(hTxt)}`, requests: cereri }; + const inaltime = Number(hTxt); + const hashVarf = await getText('/block-height/' + inaltime); + if (!ID_BTC.test(hashVarf)) return { partial: `/block-height/${inaltime} served no block hash (64 lowercase hex digits): ${servit(hashVarf)}`, requests: cereri }; + const tip = varfDinAntet(inaltime, await getText('/block/' + hashVarf + '/header'), `served for the block ${hashVarf}`); + if (tip.partial) return { partial: tip.partial, requests: cereri }; + if (tip.hash !== hashVarf) return { partial: `the header served for the tip block ${hashVarf} (height ${inaltime}) hashes to ${tip.hash}`, requests: cereri }; + // the CHECKPOINT (bitcoin.mjs punctDeControl): the hash of the block the index serves at the highest checkpoint height at or below + // its tip, which clasifica.mjs compares with the checkpoint + const pc = B.punctDeControl(chain.retea, inaltime); + if (pc && pc.sub !== undefined) chain.control = { sub: pc.sub, inaltime }; + else if (pc) { + const hc = await getText('/block-height/' + pc.height); + if (!ID_BTC.test(hc)) return { partial: `/block-height/${pc.height} (a checkpoint height) served no block hash (64 lowercase hex digits): ${servit(hc)}`, requests: cereri }; + chain.control = { height: pc.height, asteptat: pc.hash, servit: hc }; + } + const obs = await istoricEsplora(t, get); + if (obs.partial || obs.error) return { ...obs, requests: cereri }; + obs.tip = tip; obs.chain = chain; + // the SIBLING scripts of the same key, read by their script (/scripthash/), never by the name the report gives them + obs.siblings = []; + for (const s of B.scripturiSurori(t)) { + const st = B.tintaSora(s, t.network); + let so; try { so = await istoricEsplora(st, get); } catch (e) { so = { error: 'Esplora target ' + tinta.host + ': ' + taie(e.message) }; } + obs.siblings.push({ type: s.type, relatie: s.relatie, codificare: s.codificare, input: s.input, t: st, obs: so }); + } + obs.requests = cereri; + return obs; + } catch (e) { return { error: 'Esplora target ' + tinta.host + ': ' + taie(e.message), requests: cereri }; } +} +/** the history of one script through an Esplora index (`get`: one JSON request, errors thrown) -> an observation, or { partial } / { error } */ +async function istoricEsplora(t, get) { + const hasAddr = t.form === 'base58check' || t.form === 'bech32' || t.form === 'bech32m'; + // Esplora names a script without an address by the sha256 of the scriptPubKey as plain hex (NOT byte-reversed as in the + // Electrum protocol; measured 2026-10-11: the reversed form answers an empty list for a script with a history) + const baza = hasAddr ? '/address/' + t.input : '/scripthash/' + B.hex(B.sha256(t.scriptPubKey)); + const stats = await get(baza); + const cs = stats && typeof stats === 'object' && stats.chain_stats && typeof stats.chain_stats === 'object' ? stats.chain_stats : null; + if (!cs) return { error: baza.split('/')[1] + ' did not return chain_stats' }; + // the index's counts are read only as COUNTS (a JSON integer, 0 or more): null, a string, an empty list, a negative or a missing value is + // not a count of zero (Number(null) and Number('') are 0), and an answer that carries one is named and not used + const total = numarator(cs.tx_count), finantate = numarator(cs.funded_txo_count), cheltuite = numarator(cs.spent_txo_count); + if (total === null || finantate === null || cheltuite === null) return { partial: `the target served chain_stats counts that are not counts (tx_count, funded_txo_count and spent_txo_count must each be an integer, 0 or more): ${servit(JSON.stringify({ tx_count: cs.tx_count ?? null, funded_txo_count: cs.funded_txo_count ?? null, spent_txo_count: cs.spent_txo_count ?? null }))}` }; + // the mempool counts are used only when all three are counts; otherwise the comparisons below cannot be made, and that is carried to + // the classification (mempoolNecitit), which then gives no "no on-chain evidence" + const memBrut = stats.mempool_stats; + const mem = memBrut && typeof memBrut === 'object' && [memBrut.tx_count, memBrut.funded_txo_count, memBrut.spent_txo_count].every((x) => numarator(x) !== null) ? memBrut : null; + if (total > CAP_TRANZACTII) return { partial: `a history of ${total} transactions exceeds the cap of ${CAP_TRANZACTII}` }; + // the first page carries the target's mempool transactions (status.confirmed false) before the confirmed ones; they are kept apart: + // never on-chain evidence, but a revealing spend among them is flagged by observatieDinTranzactii (same treatment as Electrum height 0) + const neconf = []; + // an id that is not 64 hex digits is the target's text, quoted, and the page is not used + const confirmate = (l) => { if (!Array.isArray(l)) throw new Error('the transaction list is not a list'); const rau = l.find((x) => !x || !ID_BTC.test(String(x.txid))); if (rau !== undefined) throw new Error(`a transaction in the list has an id that is not a transaction id (64 lowercase hex digits): ${servit(rau && rau.txid)}`); neconf.push(...l.filter((x) => x.status && !x.status.confirmed)); return l.filter((x) => x.status && x.status.confirmed); }; + const pagina = confirmate(await get(baza + '/txs')); + let ultim = pagina.length ? pagina[pagina.length - 1].txid : null; + while (pagina.length < total && ultim) { + const next = confirmate(await get(baza + '/txs/chain/' + ultim)); + if (!next.length) break; + pagina.push(...next); ultim = next[next.length - 1].txid; + } + if (pagina.length !== total) return { partial: `the target served ${pagina.length} confirmed transactions of the ${total} it counts for this script` }; + // an index serves each transaction as FIELDS, not bytes: they are re-serialized here (version, inputs, outputs, locktime: exactly what + // the id covers; the witness is not under the id) and must hash to the id the index gives, or nothing from that page is used + for (const x of [...pagina, ...neconf]) { const id = idDinCampuriEsplora(x); if (id.eroare) return { partial: `transaction ${x.txid} as served cannot be re-serialized from its fields (${id.eroare})` }; if (id.txid !== x.txid) return { partial: `transaction ${x.txid} as served does not hash to its id: its fields re-serialized hash to ${id.txid}` }; } + const tx = (x, unconfirmed) => ({ + txid: x.txid, height: unconfirmed ? null : x.status.block_height, unconfirmed, + vin: (x.vin || []).map((v) => ({ txid: v.txid, vout: v.vout, scriptSig: B.dinHex(v.scriptsig || ''), witness: (v.witness || []).map((w) => B.dinHex(w)), prevoutPaysTarget: !!(v.prevout && v.prevout.scriptpubkey && B.platesteTinta(t, B.dinHex(v.prevout.scriptpubkey))) })), + vout: (x.vout || []).map((v) => ({ scriptPubKey: B.dinHex(v.scriptpubkey || '') })), + }); + const txs = [...pagina.map((x) => tx(x, false)), ...neconf.map((x) => tx(x, true))]; + const straine = neatinse(t, txs); + if (straine.length) return { partial: `the history served for this script holds ${straine.length} transaction(s) that neither pay it nor spend it (the first: ${straine[0]}); an index serves, for a script, the transactions that touch it` }; + const obs = observatieDinTranzactii(t, txs, { note: pagina.length === 0 ? 'the target served no confirmed transaction for this script: either it was never used on chain or the target does not index it' : null }); + // the index's own counts on chain: OUTPUTS to this script (compared in clasifica.mjs with the outputs read from the pages: an index that + // counts more holds an output it did not serve) and SPENT outputs (compared with the spends read from the pages) + obs.fundedOutputsServed = finantate; + obs.spentOutputsServed = cheltuite; + // its mempool counts. A spend counted there is a broadcast spend (it reveals the key even if it never confirms): the count is compared + // with the unconfirmed inputs the page carried that SPEND this script; when it counts more, a spend was not served (gone between the + // two requests, or left off), whatever other mempool transactions of the address the page carried. OUTPUTS to this script (a P2TR, + // P2PK or bare-multisig output carries its key, which is public there even unconfirmed) are compared with the unconfirmed outputs the + // page carried, and TRANSACTIONS of this script with the unconfirmed transactions the page carried (the first page carries up to 50 of + // them); a count above what was served means the index holds something it did not serve + if (mem) { + obs.mempoolSpendsCounted = mem.spent_txo_count; obs.mempoolSpendNotServed = obs.mempoolSpendsCounted > obs.unconfirmedSpends; + obs.mempoolOutputsCounted = mem.funded_txo_count; obs.mempoolOutputNotServed = obs.mempoolOutputsCounted > obs.unconfirmedOutputs; + obs.mempoolTxsCounted = mem.tx_count; obs.mempoolTxNotServed = obs.mempoolTxsCounted > obs.unconfirmedCount; + } else obs.mempoolNecitit = memBrut === undefined ? 'absent' : servit(JSON.stringify(memBrut)); + return obs; +} + +// ---------------------------------------------------------------- Bitcoin Core +function authBitcoind() { + if (process.env.AERE_BITCOIND_COOKIE) { try { return fs.readFileSync(process.env.AERE_BITCOIND_COOKIE, 'utf8').trim(); } catch { throw new Refuz('bitcoind-cookie', 'the cookie file named by AERE_BITCOIND_COOKIE cannot be read'); } } + return process.env.AERE_BITCOIND_AUTH ? String(process.env.AERE_BITCOIND_AUTH).trim() : null; +} +/** the decoded form of getrawtransaction verbose (version, vin with txid / vout or coinbase, scriptSig.hex, sequence, txinwitness; vout + * with value in BTC and scriptPubKey.hex; locktime) -> the parsed form that bitcoin.mjs serializeTx takes; a missing field throws */ +function dinFormaDecodata(v) { + const intreg = (x, nume) => { if (!Number.isInteger(x) || x < 0 || x > 0xffffffff) throw new Error(nume + ' is not a 32-bit unsigned integer'); return x; }; + const satoshi = (x) => { const s = typeof x === 'number' ? x.toFixed(8) : String(x); if (!/^\d+(\.\d{1,8})?$/.test(s)) throw new Error('an output value is not an amount'); const [i, f = ''] = s.split('.'); return BigInt(i) * 100000000n + BigInt((f + '00000000').slice(0, 8)); }; + if (!Array.isArray(v.vin) || !v.vin.length || !Array.isArray(v.vout)) throw new Error('no vin / vout'); + if (!Number.isInteger(v.version)) throw new Error('no version'); + const martor = (i) => (i.txinwitness || []).map((w) => B.dinHex(w)); + const intrare = (i) => { + if (typeof i.coinbase === 'string') return { txid: '00'.repeat(32), vout: 0xffffffff, scriptSig: B.dinHex(i.coinbase), sequence: intreg(i.sequence, 'sequence'), witness: martor(i) }; + if (!/^[0-9a-f]{64}$/.test(String(i.txid))) throw new Error('an input has no previous transaction id'); + return { txid: i.txid, vout: intreg(i.vout, 'vout'), scriptSig: B.dinHex(i.scriptSig ? i.scriptSig.hex : ''), sequence: intreg(i.sequence, 'sequence'), witness: martor(i) }; + }; + return { version: v.version, locktime: intreg(v.locktime, 'locktime'), vin: v.vin.map(intrare), vout: v.vout.map((o) => ({ value: satoshi(o.value), scriptPubKey: B.dinHex(o.scriptPubKey ? o.scriptPubKey.hex : '') })) }; +} +/** + * read the --txids ONCE for the whole report (getrawtransaction verbose): -> Map txid -> { tx (parsed), block, unconfirmed }, plus the + * request count. An id the node does not serve is a REFUSAL of the input (named), before any address is measured: the list is the + * client's and a wrong id in it cannot be attributed to any address; a transport failure is thrown as a plain Error (every address is + * then unmeasured with that reason). + */ +export async function tranzactiiCore(target, txids, o = {}) { + const tinta = tintaHttp(target); const auth = authBitcoind(); let cereri = 0; + const cache = new Map(); + for (const id of txids) { + if (cache.has(id)) continue; + cereri++; + let v; + try { v = await jsonRpc(tinta.base, 'getrawtransaction', [id, true], { lookup: o.lookup, auth }); } + catch (e) { if (/endpoint error/.test(String(e.message))) throw new Refuz('txids', `transaction ${id} given with --txids is not served by the node (${taie(e.message)}); nothing was measured`, [id]); throw new Error('Bitcoin Core target ' + tinta.host + ': ' + taie(e.message)); } + if (!v || typeof v !== 'object') throw new Refuz('txids', `getrawtransaction ${id} returned nothing; nothing was measured`, [id]); + let tx; + if (typeof v.hex === 'string' && v.hex) { try { tx = B.parseTx(Buffer.from(v.hex, 'hex')); } catch (e) { throw new Refuz('txids', `transaction ${id} does not parse (${taie(e.message)})`, [id]); } if (tx.txid !== id) throw new Refuz('txids', `the bytes served for ${id} hash to ${tx.txid}`, [id, tx.txid]); } + else { + // a node that serves the decoded form only: the transaction is re-serialized from it and must hash to the id given, exactly as + // the raw bytes must on every other path (a field changed by the node, or a form this rebuild does not read, is a refusal) + try { tx = B.parseTx(B.serializeTx(dinFormaDecodata(v))); } catch (e) { throw new Refuz('txids', `transaction ${id} was served without its hex and its decoded form cannot be re-serialized (${taie(e.message)}); nothing was measured`, [id]); } + if (tx.txid !== id) throw new Refuz('txids', `transaction ${id} was served without its hex, and its decoded form re-serialized hashes to ${tx.txid}; nothing was measured`, [id, tx.txid]); + } + // a verbose transaction without a blockhash is in the node's mempool, not on chain; the block hash (stable) names the position, + // `confirmations` changes at every block and is not used. A blockhash that is not 64 hex digits is not a position: the answer is refused + if (v.blockhash !== undefined && v.blockhash !== null && !ID_BTC.test(String(v.blockhash))) throw new Refuz('txids', `getrawtransaction ${id} served a blockhash that is not a block hash (64 lowercase hex digits): ${servit(v.blockhash)}; nothing was measured`, [id]); + // ON CHAIN = in a block of the node's ACTIVE chain: Bitcoin Core (rpc/rawtransaction.cpp, TxToJSON) writes `confirmations` >= 1 for a + // block of the active chain and 0 for a block off it (a stale block the txindex still names); a transaction with a blockhash and no + // confirmation is not on chain, exactly like one in the mempool (`offChain` names the difference). `confirmations` is read as this test + // only; the position written is the block hash + const peLant = typeof v.blockhash === 'string' && Number.isInteger(v.confirmations) && v.confirmations >= 1; + // the block time (Bitcoin Core `blocktime`, the header time of its block) of a transaction on the active chain: clasifica.mjs judges it + // against the report date; one on the active chain served without it cannot be placed there (named) + const blocktime = peLant && Number.isInteger(v.blocktime) && v.blocktime >= 0 && v.blocktime <= 0xffffffff ? v.blocktime : null; + cache.set(id, { tx, block: peLant ? v.blockhash : null, height: peLant && Number.isInteger(v.height) ? v.height : null, unconfirmed: !peLant, offChain: typeof v.blockhash === 'string' && !peLant, blocktime, faraTimp: peLant && blocktime === null }); + } + return { cache, requests: cereri }; +} +/** + * the CHAIN a Bitcoin Core node serves, read ONCE for the whole report: getblockhash 0 (its genesis block), getblockcount (the height of + * its active chain) and, on a network that holds checkpoints (bitcoin.mjs punctDeControl), getblockhash at the highest checkpoint height at + * or below it -> { chain, requests } or { partial, requests } naming what is wrong; a transport failure or an RPC error is thrown as a + * plain Error. clasifica.mjs judges it as it judges the chain of an Electrum or Esplora target (no tip header is read here, so the + * proof-of-work limit is not judged for Bitcoin Core) + */ +export async function lantulCore(target, o = {}) { + const tinta = tintaHttp(target); const auth = authBitcoind(); let cereri = 0; + const rpc = async (m, p) => { cereri++; return jsonRpc(tinta.base, m, p, { lookup: o.lookup, auth }); }; + const geneza = await rpc('getblockhash', [0]); + if (typeof geneza !== 'string' || !ID_BTC.test(geneza)) return { partial: `getblockhash 0 served no genesis block hash (64 lowercase hex digits): ${servit(JSON.stringify(geneza))}`, requests: cereri }; + const inaltime = await rpc('getblockcount', []); + if (!Number.isSafeInteger(inaltime) || inaltime < 0) return { partial: `getblockcount served no height: ${servit(JSON.stringify(inaltime))}`, requests: cereri }; + const chain = { geneza, retea: B.reteaDinGeneza(geneza), height: inaltime }; + const pc = B.punctDeControl(chain.retea, inaltime); + if (pc && pc.sub !== undefined) chain.control = { sub: pc.sub, inaltime }; + else if (pc) { + const hc = await rpc('getblockhash', [pc.height]); + if (typeof hc !== 'string' || !ID_BTC.test(hc)) return { partial: `getblockhash ${pc.height} (a checkpoint height) served no block hash (64 lowercase hex digits): ${servit(JSON.stringify(hc))}`, requests: cereri }; + chain.control = { height: pc.height, asteptat: pc.hash, servit: hc }; + } + return { chain, requests: cereri }; +} +export async function bitcoind(t, o) { + const tinta = tintaHttp(o.target); let cereri = 0; const auth = authBitcoind(); + const rpc = async (m, p) => { cereri++; return jsonRpc(tinta.base, m, p, { lookup: o.lookup, auth }); }; + // the chain the node serves (lantulCore, read once by raport.mjs): without it no address is measured through this node + if (!o.lantCore) return { error: 'Bitcoin Core target ' + tinta.host + ': the chain the node serves could not be read: ' + taie(o.lantCoreError || 'not read') }; + if (o.txidsError) return { error: 'Bitcoin Core target ' + tinta.host + ': the transactions given with --txids could not be read: ' + taie(o.txidsError) }; + try { + const hasAddr = t.form === 'base58check' || t.form === 'bech32' || t.form === 'bech32m'; + const desc = hasAddr ? `addr(${t.input})` : `raw(${B.hex(t.scriptPubKey)})`; + const scan = await rpc('scantxoutset', ['start', [{ desc, range: 0 }]]); + if (!scan || scan.success !== true || !Array.isArray(scan.unspents)) return { error: 'scantxoutset did not succeed' }; + const unspent = scan.unspents.filter((u) => { try { return B.platesteTinta(t, B.dinHex(u.scriptPubKey)); } catch { return false; } }); + // an unspent output is named in the report by its txid:vout; a txid that is not 64 hex digits or a vout that is not an index is the + // node's text, quoted, and the scan is not used + const uRau = unspent.find((u) => !ID_BTC.test(String(u.txid)) || !Number.isInteger(u.vout) || u.vout < 0); + if (uRau) return { partial: `scantxoutset served an unspent output whose txid or vout is not a transaction id (64 lowercase hex digits) and an index: ${servit(String(uRau.txid) + ':' + String(uRau.vout))}`, requests: cereri }; + const cache = o.cacheTxids instanceof Map ? o.cacheTxids : new Map(); + const txs = [...cache.values()].map((c) => ({ ...c.tx, height: c.height, block: c.block, unconfirmed: c.unconfirmed })); + const obs = observatieDinTranzactii(t, txs, { requests: cereri }); + // the given list speaks about THIS address only when one of its CONFIRMED transactions touches it: an output to it, an input spending + // it or revealing its key or script (counted before the scan's own outputs are added below). A transaction the node holds only in its + // mempool is not on chain, and says nothing about the address's history on chain: a list that touches the address only there leaves + // its spends exactly as unread as no list at all (the mempool touch is named in the reason) + const nTxids = (o.txids && o.txids.length) || 0; + const atinsa = obs.outputs.length > 0 || obs.inputs.length > 0; + obs.mempoolTouches = (obs.unconfirmedOutputs || 0) + (obs.unconfirmedInputs || 0); + // given transactions that name a block off the node's active chain (confirmations 0): not on chain, and named as such in the reasons + obs.offChainBlocks = [...cache.values()].filter((c) => c.offChain).length; + // the NEWEST chain time this adapter read, judged against the report date in clasifica.mjs: the scan reads the node's unspent set as of + // this run, so the time of the run; and the block time of each given transaction on the active chain, when it is later. A given + // transaction on the active chain served without a block time cannot be placed against the date, and is named + obs.timpMaxim = { time: Math.floor(Date.now() / 1000), ce: "scantxoutset reads the node's unspent set at the time of this run," }; + for (const [id, c] of cache) if (!c.unconfirmed && c.blocktime !== null && c.blocktime > obs.timpMaxim.time) obs.timpMaxim = { time: c.blocktime, ce: `the block of transaction ${id} given with --txids carries the time` }; + const faraTimp = [...cache.entries()].find(([, c]) => c.faraTimp); if (faraTimp) obs.blocktimeLipsa = faraTimp[0]; + // what the scan says about the outputs read from the given transactions: an output absent from the node's unspent set was SPENT; + // when no given transaction spends it, the spending transaction (where a key may be revealed) was not given + const unspentSet = new Set(unspent.map((u) => u.txid + ':' + u.vout)); + const spentRead = new Set(obs.inputs.filter((i) => i.spendsTarget).map((i) => i.spends)); + obs.spentAbsent = obs.outputs.filter((x) => !unspentSet.has(x.txid + ':' + x.vout)).length; + obs.spentNotRead = obs.outputs.filter((x) => !unspentSet.has(x.txid + ':' + x.vout) && !spentRead.has(x.txid + ':' + x.vout)).length; + // unspent outputs the scan found that are not in the given transactions still count as outputs on chain + for (const u of unspent) if (!obs.outputs.some((x) => x.txid === u.txid && x.vout === u.vout)) obs.outputs.push({ txid: u.txid, vout: u.vout, height: Number.isInteger(u.height) ? u.height : null, block: null }); + obs.unspentFound = unspent.length; + // the scan sees only UNSPENT outputs: without --txids, or when none of the given transactions touches this address, spends (what + // reveals a key) cannot be enumerated for it, and the classification says so, per ADDRESS (a list given for other addresses says + // nothing about this one) + obs.txidsGiven = nTxids; + obs.spendsNotEnumerable = nTxids === 0 || !atinsa; + // Bitcoin Core keeps no address index: whatever the list, the history of this address read here is the list the requester gave, which + // no answer of the node shows to be complete (an output funded and spent by transactions not given is invisible to it). The + // classification therefore never gives "no on-chain evidence of exposure" through this adapter (clasifica.mjs) + obs.historyFromRequesterList = true; + obs.note = obs.spendsNotEnumerable ? null : `Bitcoin Core keeps no address index: only the ${nTxids} transaction id(s) given with --txids were read for spends`; + // the SIBLING scripts: only a SPEND reveals a hash-type key, and Bitcoin Core shows spends only in the given transactions, so each + // sibling is judged on those, with no request. The key-in-output siblings of a P2PK input (its other encodings under P2PK, its BIP-86 + // P2TR output) are judged on the given transactions too: an unspent output of theirs that no given transaction carries is not scanned, + // which can leave the input unmeasured where a scan would show it exposed, never "no on-chain evidence" (through Bitcoin Core an + // address never gets that label) + obs.siblings = B.scripturiSurori(t).map((s) => { const st = B.tintaSora(s, t.network); return { type: s.type, relatie: s.relatie, codificare: s.codificare, input: s.input, t: st, obs: { ...observatieDinTranzactii(st, txs), historyFromRequesterList: true, txidsGiven: nTxids } }; }); + obs.chain = o.lantCore; + return obs; + } catch (e) { return { error: 'Bitcoin Core target ' + tinta.host + ': ' + taie(e.message), requests: cereri }; } +} + +// ---------------------------------------------------------------- Ethereum JSON-RPC +export function fereastraBlocuri(spec, varf) { + const s = String(spec || '64'); + const m = /^(\d+)\.\.(\d+)$/.exec(s); + if (m) { const a = Number(m[1]), b = Number(m[2]); if (a > b) throw new Refuz('eth-blocks', '--eth-blocks a..b needs a <= b'); if (a > varf) throw new Refuz('eth-blocks', `--eth-blocks ${a}..${b} starts after the head block ${varf} reported by the endpoint: no block would be read`); return [a, Math.min(b, varf)]; } + if (/^\d+$/.test(s)) { const n = Number(s); if (n < 1 || n > 100000) throw new Refuz('eth-blocks', '--eth-blocks N needs 1 <= N <= 100000'); return [Math.max(0, varf - n + 1), varf]; } + throw new Refuz('eth-blocks', '--eth-blocks is N (the last N blocks) or a..b'); +} +/** + * THE ACCOUNT AT THE HEAD (EIP-1186): its nonce and its code hash come from eth_getProof AT THE HEAD NUMBER, every node of the proof + * looked up by its keccak hash from the state root of the head block (ethereum.mjs contDinDovada), and its code from eth_getCode at the + * same number, which must hash to the code hash proven (an account whose proven code hash is that of empty code has no code, and no code + * is asked for). Behind a load balancer, a machine that does not hold that block answers with an error, and a proof of any other state + * does not lead to that root: either way the account is not measured, instead of a nonce or a code read at 'latest' from another machine + * being written as the state of this head. An endpoint that does not serve eth_getProof leaves the account unmeasured, named. + * -> { code, nonce (a quantity), absent } or { partial } / { error } + */ +async function stareLaCap(rpc, adresa, laCap, radacina, varf) { + let dovada; + try { dovada = await rpc('eth_getProof', [adresa, [], laCap]); } + catch (e) { return { partial: `the endpoint did not serve the account proof (eth_getProof) at its head block ${varf}: ${taie(e.message)}; this tool reads the nonce and the code of an account only from a proof under the state root of the head block it judges` }; } + const cont = E.contDinDovada(radacina, adresa, dovada); + if (cont.eroare) return { partial: `the account proof served at the head block ${varf} does not lead to the state root of that block: ${cont.eroare}` }; + let code = '0x'; + if (cont.codeHash !== E.HASH_COD_GOL) { + code = await rpc('eth_getCode', [adresa, laCap]); + if (typeof code !== 'string' || !/^0x(?:[0-9a-fA-F]{2})*$/.test(code)) return { error: `eth_getCode did not return bytes: ${servit(JSON.stringify(typeof code === 'string' ? code.slice(0, 40) : code))}` }; + if (E.keccak(Buffer.from(code.slice(2), 'hex')).toString('hex') !== cont.codeHash) return { partial: `the code served at the head block ${varf} does not hash to the code hash proven under the state root of that block` }; + } + return { code, nonce: '0x' + cont.nonce.toString(16), absent: cont.absent }; +} +export async function ethRpc(a, o) { + const tinta = tintaHttp(o.target); let cereri = 0; + const rpc = async (m, p) => { cereri++; return jsonRpc(tinta.base, m, p, { lookup: o.lookup }); }; + try { + const chainId = await rpc('eth_chainId', []); + const varfHex = await rpc('eth_blockNumber', []); + // quantities are read only in their own form (0x + hex digits): a conversion error would carry the served text into the report + if (cantitate(chainId) === null || cantitate(varfHex) === null || cantitate(varfHex) > NUMAR_EXACT) return { error: `eth_chainId / eth_blockNumber did not return quantities: ${servit(JSON.stringify([chainId, varfHex]))}` }; + const varf = Number(cantitate(varfHex)); + // the HEAD the endpoint serves, judged in clasifica.mjs against the report date: eth_syncing (false, or a sync status, in which the + // node itself says that it is behind) and the block at the head number, read without its transactions, for its time + const sinc = await rpc('eth_syncing', []); + if (sinc !== false && (sinc === null || typeof sinc !== 'object' || Array.isArray(sinc))) return { error: `eth_syncing did not return false or a sync status: ${servit(JSON.stringify(sinc))}`, requests: cereri }; + const numar = (x) => (cantitate(x) === null || cantitate(x) > NUMAR_EXACT ? null : Number(cantitate(x))); + const syncing = sinc === false ? null : { currentBlock: numar(sinc.currentBlock), highestBlock: numar(sinc.highestBlock) }; + const laCap = '0x' + varf.toString(16); + const cap = await rpc('eth_getBlockByNumber', [laCap, false]); + const timpCap = cap && typeof cap === 'object' ? cantitate(cap.timestamp) : null; + // the STATE ROOT of the head block: the account below is read from a proof under it, so the state judged is the state of this head + const radacina = cap && typeof cap === 'object' && typeof cap.stateRoot === 'string' && HASH_ETH.test(cap.stateRoot) ? cap.stateRoot.toLowerCase() : null; + if (!cap || typeof cap !== 'object' || cantitate(cap.number) !== BigInt(varf) || timpCap === null || timpCap > 0xffffffffn || radacina === null) return { partial: `the endpoint did not serve its head block ${varf} with that number, a time and a state root: ${servit(JSON.stringify(cap && typeof cap === 'object' ? { number: cap.number ?? null, timestamp: cap.timestamp ?? null, stateRoot: cap.stateRoot ?? null } : cap))}`, requests: cereri }; + // THE ACCOUNT AT THAT HEAD (stareLaCap, above): its nonce and its code, proven under the state root just read + const st = await stareLaCap(rpc, a.address, laCap, radacina, varf); + if (st.partial || st.error) return { ...st, requests: cereri }; + const { code, nonce } = st; + if (typeof code !== 'string' || !/^0x(?:[0-9a-fA-F]{2})*$/.test(code) || cantitate(nonce) === null) return { error: `the code and the nonce of the account are not bytes and a quantity: ${servit(JSON.stringify([typeof code === 'string' ? code.slice(0, 40) : code, nonce]))}`, requests: cereri }; + const obs = { chainId: Number(cantitate(chainId)), blockNumber: varf, head: { number: varf, time: Number(timpCap) }, stateRoot: radacina, accountAbsent: st.absent === true, syncing, code, nonce, requests: cereri, window: null, scanned: 0, sentTx: null, authorization: null }; + // a contract has no key of its own: nothing to search; an EIP-7702 delegation designator is NOT a contract (the account signed it) + if (code !== '0x' && !E.esteDelegare7702(code)) { obs.requests = cereri; return obs; } + const [w0, w1] = fereastraBlocuri(o.ethBlocks, varf); obs.window = [w0, w1]; + const delegat = E.esteDelegare7702(code); + for (let n = w1; n >= w0; n--) { + const bloc = await rpc('eth_getBlockByNumber', ['0x' + n.toString(16), true]); obs.scanned++; + if (!bloc || !Array.isArray(bloc.transactions)) return { ...obs, partial: `block ${n} was not served with its transactions` }; + // the hash the endpoint gives is the report's text only in its own form (0x + 64 hex digits); anything else is quoted as served + if (!obs.sentTx) { const tx = bloc.transactions.find((x) => x && typeof x.from === 'string' && x.from.toLowerCase() === a.address); if (tx) obs.sentTx = { hash: idSauCitat(tx.hash, HASH_ETH), block: n, type: tx.type || '0x0', recovered: E.recupereazaExpeditor(tx) }; } + // EIP-7702: an authorization in a type-4 transaction is signed by the AUTHORITY, which may or may not be the transaction's sender; + // the same block can hold both the account's own transaction and its authorization, so both are looked for before stopping + if (!obs.authorization) { + for (const t4 of bloc.transactions) { + if (!t4 || !Array.isArray(t4.authorizationList)) continue; + const recs = t4.authorizationList.map((au) => E.recupereazaAutoritate(au)); + const i = recs.findIndex((rec) => rec.ok && rec.address === a.address); + // the hash of the transaction that carries the authorization is re-derived from its served fields, as for a sent transaction; the + // delegate is the one in the bytes the authority signed (recupereazaAutoritate), not the served string + if (i >= 0) { let h = null; try { h = E.hashuriTx(t4).txHash; } catch { h = null; } obs.authorization = { hash: idSauCitat(t4.hash, HASH_ETH), block: n, index: i, delegate: recs[i].delegate, txHashMatches: h !== null && String(t4.hash || '').toLowerCase() === h }; break; } + } + } + // stop when what the classification needs is in hand: a delegated account wants its authorization too; any other account stops at + // the first signature of its key (a sent transaction, or an authorization) + if (delegat ? (obs.sentTx && obs.authorization) : (obs.sentTx || obs.authorization)) break; + } + obs.requests = cereri; + return obs; + } catch (e) { if (e instanceof Refuz) throw e; return { error: 'Ethereum JSON-RPC target ' + tinta.host + ': ' + taie(e.message), requests: cereri }; } +} + +export const ADAPTOARE = Object.freeze({ electrum, esplora, bitcoind, 'eth-rpc': ethRpc }); +export const tintaAdaptorului = (fel, target) => (fel === 'electrum' ? (({ host, port }) => ({ host, port }))(tintaElectrum(target)) : (({ host, port }) => ({ host, port }))(tintaHttp(target))); diff --git a/exposure-report/bitcoin.mjs b/exposure-report/bitcoin.mjs new file mode 100644 index 0000000..b89bcb1 --- /dev/null +++ b/exposure-report/bitcoin.mjs @@ -0,0 +1,473 @@ +// bitcoin.mjs (quantum exposure report, C12): the Bitcoin ADDRESS and SCRIPT codec, the TRANSACTION parser and the extraction of +// on-chain EVIDENCE from inputs and outputs. Pure functions over bytes; nothing here touches the network. +// +// Address forms (checked, never trusted from a label): +// base58check (BIP-13 / Bitcoin Core base58.cpp): 4-byte SHA-256d checksum; version 0x00 P2PKH, 0x05 P2SH on mainnet, 0x6f / 0xc4 on +// testnet and signet (regtest shares them) +// bech32 (BIP-173) for witness version 0 and bech32m (BIP-350) for versions 1..16: hrp bc / tb / bcrt, program 20 or 32 bytes for +// version 0, 2..40 bytes for the others; a version-0 address with the bech32m constant (or a version-1 with the bech32 one) is REFUSED +// Script types are derived from the scriptPubKey BYTES (BIP-16, BIP-141, BIP-341; Bitcoin Core script/solver.cpp): +// p2pk <33|65-byte key> OP_CHECKSIG the public key IS the script +// p2pkh OP_DUP OP_HASH160 <20> OP_EQUALVERIFY OP_CHECKSIG +// p2sh OP_HASH160 <20> OP_EQUAL +// p2ms OP_m OP_n OP_CHECKMULTISIG bare multisig: the keys are the script +// p2wpkh OP_0 <20>; p2wsh OP_0 <32>; p2tr OP_1 <32> (the output key, i.e. the tweaked key, is the script) +// Evidence of a REVEALED key or script, from a spending input (BIP-141 witness or scriptSig): a 33/65-byte push whose HASH160 equals +// the address's hash (p2pkh, p2wpkh, p2sh-p2wpkh), a redeem script whose HASH160 equals the p2sh hash, a witness script whose SHA-256 +// equals the p2wsh program, the control block of a taproot script-path spend (its internal key). Every match is a byte equality +// computed here, not a label read from an index. A push counts as a KEY only when it decodes as a point on secp256k1 (isKey); in a +// revealed script of no standard form it counts only when it is also the operand of a signature check (OP_CHECKSIG / OP_CHECKSIGVERIFY / +// OP_CHECKSIGADD, or the key run of an OP_CHECKMULTISIG); a push that merely looks like a key is reported as such, never as evidence. +import crypto from 'node:crypto'; +import { ripemd160, secp256k1 } from './noble.mjs'; + +export const sha256 = (b) => crypto.createHash('sha256').update(b).digest(); +export const sha256d = (b) => sha256(sha256(b)); +export const hash160 = (b) => Buffer.from(ripemd160(sha256(b))); +export const hex = (b) => Buffer.from(b).toString('hex'); +export const dinHex = (s) => { const t = String(s || '').replace(/^0x/, ''); if (!/^(?:[0-9a-fA-F]{2})*$/.test(t)) throw new Error('not hex'); return Buffer.from(t, 'hex'); }; + +// ---------------------------------------------------------------- base58check +const B58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; +export function base58Decode(s) { + if (!/^[1-9A-HJ-NP-Za-km-z]+$/.test(s)) return null; + let n = 0n; for (const c of s) n = n * 58n + BigInt(B58.indexOf(c)); + let h = n.toString(16); if (h.length % 2) h = '0' + h; + let b = n === 0n ? Buffer.alloc(0) : Buffer.from(h, 'hex'); + let zeros = 0; for (const c of s) { if (c !== '1') break; zeros++; } + return Buffer.concat([Buffer.alloc(zeros), b]); +} +export function base58checkDecode(s) { + const b = base58Decode(s); if (!b || b.length < 5) return null; + const body = b.subarray(0, b.length - 4), sum = b.subarray(b.length - 4); + if (!sha256d(body).subarray(0, 4).equals(sum)) return null; + return body; +} +/** body (version byte + payload) -> base58check string (used to NAME the sibling scripts of an address in the report) */ +export function base58checkEncode(body) { + const d = Buffer.concat([Buffer.from(body), sha256d(body).subarray(0, 4)]); + let n = BigInt('0x' + (d.toString('hex') || '0')); let s = ''; + while (n > 0n) { s = B58[Number(n % 58n)] + s; n /= 58n; } + for (const x of d) { if (x === 0) s = '1' + s; else break; } + return s; +} + +// ---------------------------------------------------------------- bech32 / bech32m (BIP-173, BIP-350) +const B32 = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'; +const GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]; +function polymod(v) { let c = 1; for (const x of v) { const c0 = c >>> 25; c = ((c & 0x1ffffff) << 5) ^ x; for (let i = 0; i < 5; i++) if ((c0 >> i) & 1) c ^= GEN[i]; } return c >>> 0; } +const hrpExpand = (hrp) => [...hrp].map((c) => c.charCodeAt(0) >> 5).concat([0], [...hrp].map((c) => c.charCodeAt(0) & 31)); +export const BECH32 = 1, BECH32M = 0x2bc830a3; +/** -> { hrp, data (5-bit values), constant } or null; the string must be all-lower or all-upper (BIP-173) */ +export function bech32Decode(s) { + if (s !== s.toLowerCase() && s !== s.toUpperCase()) return null; + const t = s.toLowerCase(); const p = t.lastIndexOf('1'); + if (p < 1 || p + 7 > t.length || t.length > 90) return null; + const hrp = t.slice(0, p); const dataS = t.slice(p + 1); + if ([...hrp].some((c) => c.charCodeAt(0) < 33 || c.charCodeAt(0) > 126)) return null; + const data = [...dataS].map((c) => B32.indexOf(c)); if (data.includes(-1)) return null; + const c = polymod(hrpExpand(hrp).concat(data)); + if (c !== BECH32 && c !== BECH32M) return null; + return { hrp, data: data.slice(0, -6), constant: c }; +} +function convertBits(data, from, to, pad) { + let acc = 0, bits = 0; const out = []; const max = (1 << to) - 1; + for (const v of data) { if (v < 0 || v >> from) return null; acc = (acc << from) | v; bits += from; while (bits >= to) { bits -= to; out.push((acc >> bits) & max); } } + if (pad) { if (bits) out.push((acc << (to - bits)) & max); } else if (bits >= from || ((acc << (to - bits)) & max)) return null; + return out; +} +/** BIP-173/350 segwit address -> { hrp, version, program } or null (checksum, constant/version pairing, program length checked) */ +export function segwitDecode(s) { + const d = bech32Decode(s); if (!d || d.data.length < 1) return null; + const version = d.data[0]; if (version > 16) return null; + const prog = convertBits(d.data.slice(1), 5, 8, false); if (!prog || prog.length < 2 || prog.length > 40) return null; + if (version === 0 && prog.length !== 20 && prog.length !== 32) return null; + if (version === 0 && d.constant !== BECH32) return null; + if (version !== 0 && d.constant !== BECH32M) return null; + return { hrp: d.hrp, version, program: Buffer.from(prog) }; +} +/** hrp, witness version, program -> the BIP-173 (version 0) or BIP-350 (version 1+) address (used to NAME sibling scripts in the report) */ +export function segwitEncode(hrp, version, program) { + const data = [version, ...convertBits([...program], 8, 5, true)]; + const c = polymod(hrpExpand(hrp).concat(data, [0, 0, 0, 0, 0, 0])) ^ (version === 0 ? BECH32 : BECH32M); + const sum = []; for (let i = 0; i < 6; i++) sum.push((c >>> (5 * (5 - i))) & 31); + return hrp + '1' + [...data, ...sum].map((v) => B32[v]).join(''); +} + +// ---------------------------------------------------------------- script pushes and types +export const OP = { 0: 0x00, PUSHDATA1: 0x4c, PUSHDATA2: 0x4d, PUSHDATA4: 0x4e, 1: 0x51, 16: 0x60, RETURN: 0x6a, DUP: 0x76, EQUAL: 0x87, EQUALVERIFY: 0x88, HASH160: 0xa9, CHECKSIG: 0xac, CHECKMULTISIG: 0xae }; +/** the script as a list of { op } or { data } (pushes); null when a push runs past the end */ +export function parseScript(b) { + const out = []; let i = 0; + while (i < b.length) { + const op = b[i++]; + let n = -1; + if (op >= 1 && op <= 75) n = op; + else if (op === OP.PUSHDATA1) { if (i + 1 > b.length) return null; n = b[i]; i += 1; } + else if (op === OP.PUSHDATA2) { if (i + 2 > b.length) return null; n = b.readUInt16LE(i); i += 2; } + else if (op === OP.PUSHDATA4) { if (i + 4 > b.length) return null; n = b.readUInt32LE(i); i += 4; } + if (n >= 0) { if (i + n > b.length) return null; out.push({ data: Buffer.from(b.subarray(i, i + n)) }); i += n; } + else out.push({ op }); + } + return out; +} +const smallNum = (op) => (op === OP[0] ? 0 : op >= OP[1] && op <= OP[16] ? op - OP[1] + 1 : null); +/** the FORM of a public key: 33 bytes with prefix 02/03, or 65 bytes with prefix 04, or the HYBRID 65-byte form 06/07 (x, y, and the + * parity of y repeated in the prefix), which consensus accepts in a signature check (Bitcoin Core pubkey.h GetLen, libsecp256k1 eckey_impl.h) */ +export const isKeyForm = (d) => (d.length === 33 && (d[0] === 2 || d[0] === 3)) || (d.length === 65 && (d[0] === 4 || d[0] === 6 || d[0] === 7)); +/** a public key: the form AND a point on secp256k1 (decoded here; a 33-byte string that is not an x-coordinate is not a key). A hybrid key + * is checked as its 04 form, and its prefix must state the parity of y (06 even, 07 odd), as libsecp256k1 requires */ +export const isKey = (d) => { + if (!isKeyForm(d)) return false; + try { + if (d[0] === 6 || d[0] === 7) { if ((d[64] & 1) !== (d[0] & 1)) return false; secp256k1.ProjectivePoint.fromHex(Buffer.concat([Buffer.from([4]), Buffer.from(d).subarray(1)])); return true; } + secp256k1.ProjectivePoint.fromHex(Buffer.from(d)); return true; + } catch { return false; } +}; +const CHECKSIG_OPS = new Set([0xac, 0xad, 0xba]); // OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CHECKSIGADD +const CHECKMULTISIG_OPS = new Set([0xae, 0xaf]); // OP_CHECKMULTISIG, OP_CHECKMULTISIGVERIFY +/** among the pushes of a parsed script, the public keys BOUND to a signature check: the operand of a CHECKSIG op, or a key inside the + * run of pushes that ends with OP_CHECKMULTISIG; a valid point pushed anywhere else (data, a hash lock, a drop) does not count */ +export function cheiLegate(p) { + let n = 0; + for (let i = 0; i < p.length; i++) { + if (!p[i].data || !isKey(p[i].data)) continue; + const next = p[i + 1]; + if (next && next.op !== undefined && CHECKSIG_OPS.has(next.op)) { n++; continue; } + let j = i + 1; while (p[j] && p[j].data && isKey(p[j].data)) j++; + if (p[j] && p[j].op !== undefined && smallNum(p[j].op) !== null && p[j + 1] && p[j + 1].op !== undefined && CHECKMULTISIG_OPS.has(p[j + 1].op)) n++; + } + return n; +} +/** { type, hash|program|key|m|n|keys } from scriptPubKey bytes; type 'nonstandard' when nothing matches */ +export function tipScript(spk) { + const b = Buffer.from(spk); + if (b.length === 25 && b[0] === OP.DUP && b[1] === OP.HASH160 && b[2] === 20 && b[23] === OP.EQUALVERIFY && b[24] === OP.CHECKSIG) return { type: 'p2pkh', hash: Buffer.from(b.subarray(3, 23)) }; + if (b.length === 23 && b[0] === OP.HASH160 && b[1] === 20 && b[22] === OP.EQUAL) return { type: 'p2sh', hash: Buffer.from(b.subarray(2, 22)) }; + if (b.length === 22 && b[0] === OP[0] && b[1] === 20) return { type: 'p2wpkh', version: 0, program: Buffer.from(b.subarray(2)) }; + if (b.length === 34 && b[0] === OP[0] && b[1] === 32) return { type: 'p2wsh', version: 0, program: Buffer.from(b.subarray(2)) }; + if (b.length === 34 && b[0] === OP[1] && b[1] === 32) return { type: 'p2tr', version: 1, program: Buffer.from(b.subarray(2)) }; + if (b.length >= 4 && b[0] >= OP[1] && b[0] <= OP[16] && b[1] >= 2 && b[1] <= 40) { const v = b[0] - OP[1] + 1; const n = b.length - 2; if (n >= 2 && n <= 40 && b[1] === n) return { type: 'witness-unknown', version: v, program: Buffer.from(b.subarray(2)) }; } + const p = parseScript(b); + if (p && p.length === 2 && p[0].data && isKey(p[0].data) && p[1].op === OP.CHECKSIG) return { type: 'p2pk', key: p[0].data }; + if (p && p.length >= 4 && p[p.length - 1].op === OP.CHECKMULTISIG) { + const m = smallNum(p[0].op ?? -1), n = smallNum(p[p.length - 2].op ?? -1); + const keys = p.slice(1, -2); + if (m !== null && n !== null && keys.length === n && m >= 1 && m <= n && keys.every((k) => k.data && isKey(k.data))) return { type: 'p2ms', m, n, keys: keys.map((k) => k.data) }; + } + if (b.length >= 1 && b[0] === OP.RETURN) return { type: 'op_return' }; + return { type: 'nonstandard' }; +} +/** describe a redeem / witness script (what a spend revealed) */ +export function tipScriptIntern(script) { + const t = tipScript(script); + if (t.type === 'p2ms') return { kind: 'multisig', m: t.m, n: t.n, keys: t.keys }; + if (t.type === 'p2wpkh') return { kind: 'p2wpkh', program: t.program }; + if (t.type === 'p2wsh') return { kind: 'p2wsh', program: t.program }; + if (t.type === 'p2pk') return { kind: 'p2pk', key: t.key }; + if (t.type === 'p2pkh') return { kind: 'p2pkh', hash: t.hash }; + const p = parseScript(script) || []; + // keyShapedPushes: pushes with the FORM of a key (not verified); keysBound: valid points that are the operand of a signature check + return { kind: 'other', keyShapedPushes: p.filter((x) => x.data && isKeyForm(x.data)).length, keysBound: cheiLegate(p) }; +} + +// ---------------------------------------------------------------- addresses -> scripts +const VERS = { 0x00: ['p2pkh', 'mainnet'], 0x05: ['p2sh', 'mainnet'], 0x6f: ['p2pkh', 'testnet'], 0xc4: ['p2sh', 'testnet'] }; +const HRP = { bc: 'mainnet', tb: 'testnet', bcrt: 'regtest' }; +/** + * one input line -> { input, form, network, scriptPubKey, ...tipScript } or { input, error } + * forms: a base58check address, a bech32/bech32m address, `script:` (a raw scriptPubKey), `p2pk:<33|65-byte key hex>` + */ +export function decodeazaIntrareBitcoin(line) { + const s = String(line).trim(); + if (/^script:/i.test(s)) { + let spk; try { spk = dinHex(s.slice(7)); } catch { return { input: s, error: 'script: is not hex' }; } + if (!spk.length) return { input: s, error: 'script: is empty' }; + return { input: s, form: 'script', network: 'unknown', scriptPubKey: spk, ...tipScript(spk) }; + } + if (/^p2pk:/i.test(s)) { + let k; try { k = dinHex(s.slice(5)); } catch { return { input: s, error: 'p2pk: is not hex' }; } + if (!isKey(k)) return { input: s, error: 'p2pk: needs a 33-byte (02/03) or 65-byte (04, or hybrid 06/07) secp256k1 public key (a point on the curve)' }; + const spk = Buffer.concat([Buffer.from([k.length]), k, Buffer.from([OP.CHECKSIG])]); + return { input: s, form: 'p2pk', network: 'unknown', scriptPubKey: spk, ...tipScript(spk) }; + } + const sw = segwitDecode(s); + if (sw) { + const net = HRP[sw.hrp]; if (!net) return { input: s, error: 'bech32 address with an unknown prefix ' + sw.hrp }; + const spk = Buffer.concat([Buffer.from([sw.version === 0 ? OP[0] : OP[1] + sw.version - 1, sw.program.length]), sw.program]); + return { input: s, form: sw.version === 0 ? 'bech32' : 'bech32m', network: net, scriptPubKey: spk, ...tipScript(spk) }; + } + if (/^[1-9A-HJ-NP-Za-km-z]{26,35}$/.test(s)) { + const b = base58checkDecode(s); + if (!b) return { input: s, error: 'base58check address with a wrong checksum (or not an address)' }; + if (b.length !== 21 || !VERS[b[0]]) return { input: s, error: 'base58check payload is not a known address version' }; + const [type, net] = VERS[b[0]]; const h = b.subarray(1); + const spk = type === 'p2pkh' ? Buffer.concat([Buffer.from([OP.DUP, OP.HASH160, 20]), h, Buffer.from([OP.EQUALVERIFY, OP.CHECKSIG])]) : Buffer.concat([Buffer.from([OP.HASH160, 20]), h, Buffer.from([OP.EQUAL])]); + return { input: s, form: 'base58check', network: net, scriptPubKey: spk, ...tipScript(spk) }; + } + const lower = s.toLowerCase(); + if (/^(bc|tb|bcrt)1[02-9ac-hj-np-z]+$/.test(lower)) return { input: s, error: 'bech32 address with a wrong checksum, mixed case, or a wrong version/encoding pair' }; + return { input: s, error: 'not a Bitcoin address, script: or p2pk: line' }; +} +/** the Electrum scripthash of a scriptPubKey: sha256 of the script, byte-reversed, hex */ +export const scripthash = (spk) => hex(Buffer.from(sha256(spk)).reverse()); + +// ---------------------------------------------------------------- sibling scripts (the same key under another script type) +const VER_P2PKH = { mainnet: 0x00, testnet: 0x6f, regtest: 0x6f }, VER_P2SH = { mainnet: 0x05, testnet: 0xc4, regtest: 0xc4 }, HRP_RETEA = { mainnet: 'bc', testnet: 'tb', regtest: 'bcrt' }; +/** the three encodings of a secp256k1 point that consensus accepts in a signature check (Bitcoin Core pubkey.h; libsecp256k1 eckey_impl.h): + * compressed (02/03), uncompressed (04) and hybrid (06/07: x, y, and the parity of y repeated in the prefix) -> { P, compressed, uncompressed, hybrid } */ +export function codificariCheie(k) { + const d = Buffer.from(k); + const P = secp256k1.ProjectivePoint.fromHex(d[0] === 6 || d[0] === 7 ? Buffer.concat([Buffer.from([4]), d.subarray(1)]) : d); + const uncompressed = Buffer.from(P.toRawBytes(false)); const hybrid = Buffer.from(uncompressed); hybrid[0] = 6 | (uncompressed[64] & 1); + return { P, compressed: Buffer.from(P.toRawBytes(true)), uncompressed, hybrid }; +} +/** BIP-86 (BIP-341 with no script tree): the 32-byte x-only OUTPUT key of the internal key P, Q = P' + t*G, P' the point of x(P) with an + * even y (BIP-340 lift_x), t = int(tagged_hash("TapTweak", x(P'))); null in the case BIP-341 rejects (t not below the group order) */ +export function cheieIesireBip86(P) { + const Pe = P.toAffine().y % 2n === 0n ? P : P.negate(); const x = Buffer.from(Pe.toRawBytes(true)).subarray(1); + const tag = sha256(Buffer.from('TapTweak', 'utf8')); const tw = BigInt('0x' + hex(sha256(Buffer.concat([tag, tag, x])))); + if (tw === 0n || tw >= secp256k1.CURVE.n) return null; + return Buffer.from(Pe.add(secp256k1.ProjectivePoint.BASE.multiply(tw)).toRawBytes(true)).subarray(1); +} +const scriptP2pkh = (h) => Buffer.concat([Buffer.from([OP.DUP, OP.HASH160, 20]), h, Buffer.from([OP.EQUALVERIFY, OP.CHECKSIG])]); +const scriptP2pk = (k) => Buffer.concat([Buffer.from([k.length]), k, Buffer.from([OP.CHECKSIG])]); +/** + * the SIBLING scripts of an input: the other scripts that the same key determines (project document, N8: the same key reused under another + * script type), each with its RELATION to the input (`relatie`): + * 'hash160' the same 20-byte HASH160 of a key under P2PKH, P2WPKH and P2SH-P2WPKH (whose redeem script is 0x0014 || hash, so its own + * hash is HASH160(0x0014 || hash)). For a p2pkh or p2wpkh input the hash is the address's (the key itself is not known, so + * nothing else is derived); for a p2pk input it is HASH160 of the key in the encoding given. + * 'codificare' for a p2pk input: the same point in its other encodings (compressed, uncompressed, hybrid), each under P2PK and under the + * three scripts of its own HASH160 (`codificare` names the encoding). + * 'bip86' for a p2pk input: the P2TR output of the key used as an internal key with no script tree (BIP-86). + * The input's own script is left out. What the key may sit in that the input does not determine (a P2TR output with a script tree, a P2SH + * or P2WSH script, a bare multisig with other keys) is not derived, and neither is any sibling of a P2SH, P2WSH, P2TR, bare-multisig or + * non-standard input: the hash of a script does not give the keys in it. -> [{ type, relatie, codificare?, input, scriptPubKey }], `input` + * an address in the input's network (only a NAME for the report: the adapters read a sibling by its script, never by that string), or + * `script:` when the network is unknown (p2pk:, script:) or the script has no address form (P2PK) + */ +export function scripturiSurori(t) { + let h; + if (t.type === 'p2pkh') h = t.hash; else if (t.type === 'p2wpkh') h = t.program; else if (t.type === 'p2pk') h = hash160(t.key); else return []; + const net = VER_P2PKH[t.network] !== undefined ? t.network : null; + const formeHash = (hh, relatie, codificare) => { + const p2wpkh = Buffer.concat([Buffer.from([OP[0], 20]), hh]); + const nume = (tip, spk) => (!net ? 'script:' + hex(spk) : tip === 'p2pkh' ? base58checkEncode(Buffer.concat([Buffer.from([VER_P2PKH[net]]), hh])) : tip === 'p2wpkh' ? segwitEncode(HRP_RETEA[net], 0, hh) : base58checkEncode(Buffer.concat([Buffer.from([VER_P2SH[net]]), hash160(p2wpkh)]))); + return [['p2pkh', scriptP2pkh(hh)], ['p2wpkh', p2wpkh], ['p2sh-p2wpkh', Buffer.concat([Buffer.from([OP.HASH160, 20]), hash160(p2wpkh), Buffer.from([OP.EQUAL])])]] + .map(([tip, spk]) => ({ type: tip, relatie, ...(codificare ? { codificare } : {}), input: nume(tip, spk), scriptPubKey: spk })); + }; + const lista = formeHash(h, 'hash160'); + if (t.type === 'p2pk') { + // the other encodings of the same point, and its BIP-86 output: derived from the key the input gives + const c = codificariCheie(t.key); + for (const cod of ['compressed', 'uncompressed', 'hybrid']) { + const k = c[cod]; if (k.equals(Buffer.from(t.key))) continue; + const spk = scriptP2pk(k); + lista.push({ type: 'p2pk', relatie: 'codificare', codificare: cod, input: 'script:' + hex(spk), scriptPubKey: spk }, ...formeHash(hash160(k), 'codificare', cod)); + } + const q = cheieIesireBip86(c.P); + if (q) { const spk = Buffer.concat([Buffer.from([OP[1], 32]), q]); lista.push({ type: 'p2tr', relatie: 'bip86', input: net ? segwitEncode(HRP_RETEA[net], 1, q) : 'script:' + hex(spk), scriptPubKey: spk }); } + } + return lista.filter((s) => !s.scriptPubKey.equals(t.scriptPubKey)); +} +/** a sibling as a target the adapters read BY ITS SCRIPT (form 'script': Esplora asks /scripthash/, Electrum the scripthash), named by its input */ +export const tintaSora = (s, network = 'unknown') => ({ input: s.input, form: 'script', network, scriptPubKey: s.scriptPubKey, ...tipScript(s.scriptPubKey) }); + +// ---------------------------------------------------------------- block headers (the tip a target serves) +/** the target a compact `bits` field states (Bitcoin Core arith_uint256::SetCompact), or null when it states none (negative, zero, overflow) */ +export function tintaDinBits(bits) { + const exp = bits >>> 24; const mant = bits & 0x007fffff; + if ((bits & 0x00800000) || mant === 0 || exp > 32) return null; + return exp <= 3 ? BigInt(mant >>> (8 * (3 - exp))) : BigInt(mant) << BigInt(8 * (exp - 3)); +} +/** + * 80 header bytes as hex -> { hash, time, bits } when they are a block header: the hash (SHA-256d, byte-reversed) meets the target that + * the header's own `bits` field states, as every block header does. This alone does NOT say that the header is on Bitcoin mainnet (a + * regtest or signet header meets its own easy target): which chain a header can belong to is judged with RETELE_BTC (its genesis block, + * its proof-of-work limit and, on mainnet, a checkpoint: clasifica.mjs), and whether it is on the chain with the most work is not judged + * at all. It says the bytes + * are a header and not some other string, so that the time read from them (offset 68) is a header's time. -> { eroare } otherwise + */ +export function antetBloc(hexAntet) { + const s = String(hexAntet ?? ''); + if (!/^[0-9a-fA-F]{160}$/.test(s)) return { eroare: 'not 80 bytes of hex' }; + const b = Buffer.from(s, 'hex'); + const hash = hex(Buffer.from(sha256d(b)).reverse()); + const bits = b.readUInt32LE(72); const tinta = tintaDinBits(bits); + if (tinta === null) return { eroare: 'its bits field states no valid target' }; + if (BigInt('0x' + hash) > tinta) return { eroare: 'its hash does not meet the proof of work its bits field states' }; + return { hash, time: b.readUInt32LE(68), bits }; +} +/** + * the CHECKPOINTS this tool holds for Bitcoin mainnet: a chain that split from Bitcoin after its genesis block shares that block and the + * proof-of-work limit (Bitcoin Cash from height 478559; Bitcoin SV and eCash split later from Bitcoin Cash and keep its blocks), so + * neither tells it apart; the block at a height after the split does. These are the two pins of the shield's Bitcoin header follower (btc/antete.mjs, + * PUNCTE_PINATE: hash and 80 header bytes read from two public block explorers of different operators, mempool.space and + * blockstream.info, on 2026-10-11, identical on both; that agreement is their whole provenance). The test requires each to equal that + * pin and its header to hash to its hash and meet its proof of work. A chain that split from Bitcoin AFTER the checkpoint used is not told + * apart (none is known on the date written here), and a tip below the lowest one cannot be checked at all. + */ +const PUNCTE_MAINNET = Object.freeze([ + Object.freeze({ height: 967680, hash: '0000000000000000000161354016172f2a377610d52dd46d0f68a919333458cd', header: '00000030410ccb1cba623e26f2e02f3fcb0e7f06f66998b68cb5010000000000000000003d16ae2558e8ec7b8dd369ee29bb2733fbd39bcc1058c681970a36a7f1a2bdea1135ae6ac51e0217480c3581' }), + Object.freeze({ height: 969696, hash: '000000000000000000001e39df127cbab82a824ac43cfcdbf62e59f6a08b9f0b', header: '00e00020ea7409145abed3693b6aa5e269dea055406e0962804301000000000000000000a8f40cc468f3aa4518fdc368e37fc7aff01eb12b293885f847517602a96e3a93d4abc06af01e021779d3a409' }), +]); +/** + * the Bitcoin networks a target may serve: the hash of each genesis block (Bitcoin Core kernel/chainparams.cpp; the test recomputes each + * from the genesis header's fields) and each chain's proof-of-work LIMIT (consensus.powLimit: CheckProofOfWork refuses a header whose bits + * state a target above it); mainnet also carries its checkpoints (above). Signet here is the default signet; a custom signet shares its + * genesis block and states its own limit. The test networks hold no checkpoint: a chain that shares one of their genesis blocks is not + * told apart from it + */ +export const RETELE_BTC = Object.freeze({ + mainnet: Object.freeze({ nume: 'Bitcoin mainnet', geneza: '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f', limita: 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffn, puncte: PUNCTE_MAINNET }), + testnet3: Object.freeze({ nume: 'Bitcoin testnet3', geneza: '000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943', limita: 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffn }), + testnet4: Object.freeze({ nume: 'Bitcoin testnet4', geneza: '00000000da84f2bafbbc53dee25a72ae507ff4914b867c565be350b0da8bf043', limita: 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffn }), + signet: Object.freeze({ nume: 'Bitcoin signet', geneza: '00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6', limita: 0x00000377ae000000000000000000000000000000000000000000000000000000n }), + regtest: Object.freeze({ nume: 'Bitcoin regtest', geneza: '0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206', limita: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn }), +}); +/** the network whose genesis block has this hash, or null (none of the five) */ +export const reteaDinGeneza = (hash) => Object.keys(RETELE_BTC).find((n) => RETELE_BTC[n].geneza === String(hash)) || null; +/** the checkpoint a target's chain is judged against: null when the network holds none; { sub: } when the chain the + * target serves ends below the lowest one; else the HIGHEST checkpoint at or below that height (the later the split it tells apart) */ +export function punctDeControl(retea, inaltime) { + const P = retea && RETELE_BTC[retea] && RETELE_BTC[retea].puncte; if (!P || !P.length) return null; + const sub = P.filter((p) => p.height <= inaltime); + return sub.length ? sub[sub.length - 1] : { sub: P[0].height }; +} +/** the networks an input can belong to: its address form names them (base58check 0x6f / 0xc4 is shared by testnet3, testnet4, signet and + * regtest; bech32 `tb` by the first three, `bcrt` is regtest); a `p2pk:` or `script:` line names none and is read on mainnet only */ +export const reteleIntrarii = (t) => (t.network === 'mainnet' ? ['mainnet'] : t.network === 'regtest' ? ['regtest'] : t.network === 'testnet' ? (t.form === 'base58check' ? ['testnet3', 'testnet4', 'signet', 'regtest'] : ['testnet3', 'testnet4', 'signet']) : ['mainnet']); + +// ---------------------------------------------------------------- transactions (BIP-141 serialization) +function readVarint(b, i) { + const f = b[i]; if (f === undefined) throw new Error('varint past the end'); + if (f < 0xfd) return [f, i + 1]; + if (f === 0xfd) return [b.readUInt16LE(i + 1), i + 3]; + if (f === 0xfe) return [b.readUInt32LE(i + 1), i + 5]; + return [Number(b.readBigUInt64LE(i + 1)), i + 9]; +} +export function varint(n) { + if (n < 0xfd) return Buffer.from([n]); + if (n <= 0xffff) { const b = Buffer.alloc(3); b[0] = 0xfd; b.writeUInt16LE(n, 1); return b; } + if (n <= 0xffffffff) { const b = Buffer.alloc(5); b[0] = 0xfe; b.writeUInt32LE(n, 1); return b; } + const b = Buffer.alloc(9); b[0] = 0xff; b.writeBigUInt64LE(BigInt(n), 1); return b; +} +/** raw tx bytes -> { txid, version, vin: [{txid, vout, scriptSig, sequence, witness: [Buffer]}], vout: [{value (bigint), scriptPubKey}], locktime, segwit } */ +export function parseTx(raw) { + const b = Buffer.from(raw); let i = 0; + if (b.length < 10) throw new Error('transaction too short'); + const version = b.readInt32LE(0); i = 4; + let segwit = false; + if (b[i] === 0 && b[i + 1] === 1) { segwit = true; i += 2; } + let nIn; [nIn, i] = readVarint(b, i); + if (nIn === 0) throw new Error('transaction with no inputs'); + const vin = []; + for (let k = 0; k < nIn; k++) { + const txid = hex(Buffer.from(b.subarray(i, i + 32)).reverse()); i += 32; + const vout = b.readUInt32LE(i); i += 4; + let l; [l, i] = readVarint(b, i); const scriptSig = Buffer.from(b.subarray(i, i + l)); i += l; + if (scriptSig.length !== l) throw new Error('scriptSig past the end'); + const sequence = b.readUInt32LE(i); i += 4; + vin.push({ txid, vout, scriptSig, sequence, witness: [] }); + } + let nOut; [nOut, i] = readVarint(b, i); + const vout = []; + for (let k = 0; k < nOut; k++) { + const value = b.readBigUInt64LE(i); i += 8; + let l; [l, i] = readVarint(b, i); const spk = Buffer.from(b.subarray(i, i + l)); i += l; + if (spk.length !== l) throw new Error('scriptPubKey past the end'); + vout.push({ value, scriptPubKey: spk }); + } + const endOutputs = i; + if (segwit) { + for (let k = 0; k < nIn; k++) { + let n; [n, i] = readVarint(b, i); + for (let j = 0; j < n; j++) { let l; [l, i] = readVarint(b, i); const it = Buffer.from(b.subarray(i, i + l)); if (it.length !== l) throw new Error('witness past the end'); i += l; vin[k].witness.push(it); } + } + } + if (i + 4 !== b.length) throw new Error('trailing bytes after the transaction (' + (b.length - i - 4) + ')'); + const locktime = b.readUInt32LE(i); + // txid: the serialization WITHOUT marker, flag and witness + const strip = segwit ? Buffer.concat([b.subarray(0, 4), b.subarray(6, endOutputs), b.subarray(b.length - 4)]) : b; + return { txid: hex(Buffer.from(sha256d(strip)).reverse()), version, vin, vout, locktime, segwit, size: b.length }; +} +/** serialize a tx of the parsed form (used by tests to build synthetic transactions) */ +export function serializeTx(tx) { + const segwit = tx.vin.some((v) => v.witness && v.witness.length); + const p = [Buffer.alloc(4)]; p[0].writeInt32LE(tx.version); + if (segwit) p.push(Buffer.from([0, 1])); + p.push(varint(tx.vin.length)); + for (const v of tx.vin) { const q = Buffer.alloc(4); q.writeUInt32LE(v.sequence >>> 0); const s = Buffer.alloc(4); s.writeUInt32LE(v.vout); p.push(Buffer.from(dinHex(v.txid)).reverse(), s, varint(v.scriptSig.length), v.scriptSig, q); } + p.push(varint(tx.vout.length)); + for (const o of tx.vout) { const q = Buffer.alloc(8); q.writeBigUInt64LE(BigInt(o.value)); p.push(q, varint(o.scriptPubKey.length), o.scriptPubKey); } + if (segwit) for (const v of tx.vin) { p.push(varint((v.witness || []).length)); for (const w of v.witness || []) p.push(varint(w.length), w); } + const lt = Buffer.alloc(4); lt.writeUInt32LE(tx.locktime >>> 0); p.push(lt); + return Buffer.concat(p); +} + +// ---------------------------------------------------------------- evidence from inputs +/** + * what a spending input REVEALS about the target script `t` (the output of tipScript / decodeazaIntrareBitcoin). + * input = { scriptSig: Buffer, witness: [Buffer] }; spendsTarget = the caller established (from the previous output the input names) + * that this input spends an output paying the target. Returns a list of { what, detail } byte-level findings, empty when nothing in + * this input ties to the target. For hash-type targets a finding is emitted only when a hash computed here equals the target's + * hash/program (that equality is the proof, whatever output the input spends); for p2tr / p2pk / p2ms only when spendsTarget. + */ +export function dovezileIntrarii(t, input, spendsTarget = false) { + const out = []; const ss = parseScript(input.scriptSig || Buffer.alloc(0)) || []; const w = input.witness || []; + const kHash = (k) => hash160(k); + // every item pushed in this input (scriptSig pushes and witness elements): a script that commits to the HASH of a key (a P2PKH-shaped + // redeem or witness script, a hash-locked contract) receives the key as a separate push in the same input + const pushuri = () => [...ss.filter((x) => x.data).map((x) => x.data), ...w]; + const scriptDezvaluit = (script, where) => { + const r = tipScriptIntern(script); + if (r.kind === 'multisig') { out.push({ what: 'keys-revealed-in-script', detail: `${where}: ${r.m}-of-${r.n} multisig, ${r.n} public keys revealed` }); return r; } + if (r.kind === 'p2pk') { out.push({ what: 'keys-revealed-in-script', detail: `${where}: P2PK form, the public key is in the script` }); return r; } + const hashuri = (parseScript(script) || []).filter((x) => x.data && x.data.length === 20).map((x) => x.data); + const chei = pushuri().filter((d) => isKey(d) && hashuri.some((h) => h.equals(kHash(d)))); + if (chei.length) { out.push({ what: 'public-key-revealed', detail: `${where}: the script commits to HASH160 of a key, and ${chei.length} public key(s) with that hash are pushed in the same input` }); return r; } + if (r.kind === 'other' && r.keysBound > 0) { out.push({ what: 'keys-revealed-in-script', detail: `${where}: script revealed, carrying ${r.keysBound} public key(s), each a point on secp256k1 that is the operand of a signature check in the script` }); return r; } + if (r.kind === 'other' && r.keyShapedPushes > 0) { out.push({ what: 'script-revealed-unclassified', detail: `${where}: script revealed, carrying ${r.keyShapedPushes} public-key-shaped push(es) not verified as keys bound to a signature check (a point on the curve that OP_CHECKSIG / OP_CHECKMULTISIG consumes); its form is not classified by this tool` }); return r; } + out.push({ what: 'script-revealed-unclassified', detail: `${where}: script revealed (${r.kind}), with no public-key-shaped push and no key hash matched by a push of this input; its form is not classified by this tool` }); + return r; + }; + // P2PKH / P2WPKH: EVERY push of the scriptSig (a legacy scriptSig need not end with the key: ` OP_NOP` is valid) and every + // witness element is compared with the hash; a push whose HASH160 equals it is the preimage, and it counts as a key only when it is a + // point on the curve (compressed, uncompressed or hybrid); an equal hash on bytes this tool does not decode as a key is named, not dropped + const preimagine = (lista, h, unde) => { + const egale = lista.filter((d) => kHash(d).equals(h)); + if (egale.some((d) => isKey(d))) out.push({ what: 'public-key-revealed', detail: `public key revealed in the ${unde}` }); + else if (egale.length) out.push({ what: 'script-revealed-unclassified', detail: `the ${unde} carries a push whose HASH160 equals the hash, not decoded as a public key by this tool` }); + }; + if (t.type === 'p2pkh') { + preimagine(ss.filter((x) => x.data).map((x) => x.data), t.hash, 'scriptSig (HASH160 equals the address hash)'); + } else if (t.type === 'p2wpkh') { + preimagine(w, t.program, 'witness (HASH160 equals the witness program)'); + } else if (t.type === 'p2sh') { + const last = ss.length ? ss[ss.length - 1] : null; + if (last && last.data && kHash(last.data).equals(t.hash)) { + const r = tipScriptIntern(last.data); + if (r.kind === 'p2wpkh') { const k = w.length >= 2 ? w[w.length - 1] : null; if (k && isKey(k) && kHash(k).equals(r.program)) out.push({ what: 'public-key-revealed', detail: 'P2SH-P2WPKH: redeem script revealed in the scriptSig and public key revealed in the witness' }); else out.push({ what: 'script-revealed', detail: 'P2SH-P2WPKH: redeem script revealed in the scriptSig (the key would be in the witness; not found there)' }); } + else if (r.kind === 'p2wsh') { const ws = w.length ? w[w.length - 1] : null; if (ws && sha256(ws).equals(r.program)) scriptDezvaluit(ws, 'P2SH-P2WSH witness script'); else out.push({ what: 'script-revealed-unclassified', detail: 'P2SH-P2WSH: redeem script revealed in the scriptSig, but no witness script hashing to its program was found in the witness' }); } + else scriptDezvaluit(last.data, 'P2SH redeem script (HASH160 equals the address hash)'); + } + } else if (t.type === 'p2wsh') { + const ws = w.length ? w[w.length - 1] : null; + if (ws && sha256(ws).equals(t.program)) scriptDezvaluit(ws, 'P2WSH witness script (SHA-256 equals the witness program)'); + } else if (t.type === 'p2tr' && spendsTarget) { + // only an input that spends THIS output says anything: the witness alone does not name the output it spends + // BIP-341: key path = a single 64/65-byte signature; script path = [.., script, control block], control block = 1 + 32 (internal key) + 32k + // the annex exists only when the witness has at least TWO elements (BIP-341); a lone 64-byte signature starting with 0x50 is a signature + const items = w.length >= 2 && w[w.length - 1].length > 0 && w[w.length - 1][0] === 0x50 ? w.slice(0, -1) : w; + if (items.length === 1 && (items[0].length === 64 || items[0].length === 65)) out.push({ what: 'taproot-key-path-spend', detail: 'spent on the key path: a Schnorr signature under the output key is in the witness' }); + else if (items.length >= 2) { const cb = items[items.length - 1]; if (cb.length >= 33 && (cb.length - 33) % 32 === 0) out.push({ what: 'taproot-internal-key-revealed', detail: 'spent on the script path: the control block in the witness carries the internal public key' }); } + } else if ((t.type === 'p2pk' || t.type === 'p2ms') && spendsTarget) { + if (ss.length >= 1 || w.length >= 1) out.push({ what: 'spend-seen', detail: 'a spend of this output is on chain (the key was already in the output script)' }); + } + return out; +} +/** the findings that mean a public key (or the script holding the keys) is readable from the input */ +export const DOVEZI_REVELATOARE = Object.freeze(new Set(['public-key-revealed', 'keys-revealed-in-script', 'taproot-internal-key-revealed'])); +/** does this scriptPubKey pay the target script exactly (byte equality)? */ +export const platesteTinta = (t, spk) => Buffer.from(spk).equals(t.scriptPubKey); diff --git a/exposure-report/clasifica.mjs b/exposure-report/clasifica.mjs new file mode 100644 index 0000000..1428473 --- /dev/null +++ b/exposure-report/clasifica.mjs @@ -0,0 +1,440 @@ +// clasifica.mjs (quantum exposure report, C12): the CLASSIFICATION of one address from what was (or was not) observed. Exactly two +// labels (limbaj.mjs) plus the state "unmeasured". Every verdict names the evidence that WAS seen and what was NOT seen, in a fixed +// vocabulary, so that a reader knows what the label rests on. Nothing here reads a chain: the adapters (adaptoare.mjs) bring +// observations, mode 1 brings none. +// +// What exposes a public key on chain (project document, sections 2.2 N1/N8 and 1.2): +// Bitcoin: P2PK and bare multisig outputs carry the key(s) in the script; P2TR outputs carry the output (tweaked) key; a spend of a +// hash-type output (P2PKH, P2WPKH, P2SH, P2WSH) reveals the key or the script in the scriptSig / witness. +// Ethereum: an externally owned account reveals its key with the first transaction it sends (the signature) or with an EIP-7702 +// authorization it signs (the delegation designator 0xef0100 || address in its code is set only after such an +// authorization was included); a contract account has no key of its own bound to the address. +// What this tool cannot see from a chain: keys disclosed OFF chain (shared xpubs, signed messages, PSBTs, EIP-191/712 signatures); +// those are asked as DECLARATIONS in the report (raport.mjs) and never turn into a label. +// What never becomes "no on-chain evidence of exposure": ANYTHING read through Bitcoin Core (it keeps no address index, so the history +// it shows of an address is the --txids list the requester gave, which no answer of the node shows to be complete: an address is +// "exposed" there, or "unmeasured" with the most specific reason: no list, a list none of whose CONFIRMED transactions touches the +// address, a spent output whose spending transaction was not given, or a list that cannot be shown complete), an index that counts more +// spent outputs than the pages served, a spend seen only in the target's mempool (or counted there by the index and not served), a +// P2TR / P2PK / bare-multisig output seen only in the target's mempool, a spend whose revealed script this tool does not classify, a +// spend SEEN of a hash-type output in which the tool reads no key or script (a valid spend reveals one; "seen" = it spends an output +// paying the script, or a push or script in it hashes to the address), an empty or erroneous answer, a target whose tip header time is +// more than MARJA_VARF_ORE hours before the reference instant (it is behind the chain: a later spend is not in its history), a target +// whose tip was not read, a SIBLING script (the same HASH160 of the key as P2PKH, P2WPKH or P2SH-P2WPKH; for a P2PK input also the same +// key in its other encodings and its BIP-86 P2TR output) that could not be measured, an index that counts more outputs or transactions +// of the script in its mempool than its page carried, or that served no mempool counts that are counts, an index that counts more +// outputs to the script on chain than its pages carried, an Ethereum endpoint whose head is more than MARJA_CAP_ETH_MIN minutes before +// the reference instant or that reports that it is syncing, an Ethereum account whose nonce and code were not proven under the state root +// of that head (adaptoare.mjs stareLaCap: no eth_getProof, a proof that does not lead to that root, a code that does not hash to the code +// hash proven; each is "unmeasured" there). +// And no label at all (exposed or not) for: a target that serves ANOTHER CHAIN than the address's network (its genesis block, or a tip +// header above the proof-of-work limit of the chain that genesis names, or, on mainnet, another block than the checkpoint at the highest +// checkpoint height at or below the end of its chain, or a chain that ends below the lowest checkpoint; a p2pk: or script: line is read +// on mainnet only), and a target that serves blocks AFTER the report date (its tip, an Ethereum head, a given transaction's block, or for +// Bitcoin Core the scan, read at the run, more than MARJA_VARF_ORE hours after the reference instant): the report records what was +// readable on its date. +// Each of those is "unmeasured", with the reason. A spend in the mempool never REMOVES evidence that is already on chain (a P2TR / P2PK / +// bare-multisig output stays "exposed"); a sibling script that shows the key on chain makes the input "exposed", with the sibling named. +import { ETICHETA, NEMASURAT } from './limbaj.mjs'; +import { DOVEZI_REVELATOARE as REVELATOARE, RETELE_BTC, reteleIntrarii, tintaDinBits } from './bitcoin.mjs'; +import { esteDelegare7702, delegatDin7702 } from './ethereum.mjs'; + +const TIP_EXPUS = Object.freeze({ + p2pk: 'P2PK output: the public key is the script', + p2ms: 'bare multisig output: the public keys are the script', + p2tr: 'P2TR output: the output key (the tweaked public key) is the script', +}); +const TIP_HASH = Object.freeze({ + p2pkh: 'P2PKH: the output carries HASH160 of the key; the key is revealed by a spend', + p2wpkh: 'P2WPKH: the output carries HASH160 of the key; the key is revealed by a spend', + p2sh: 'P2SH: the output carries HASH160 of a script; the script (and the keys in it) is revealed by a spend', + p2wsh: 'P2WSH: the output carries SHA-256 of a script; the script (and the keys in it) is revealed by a spend', +}); +const NUME_TIP = Object.freeze({ p2pk: 'P2PK', p2pkh: 'P2PKH', p2sh: 'P2SH', p2ms: 'bare multisig', p2wpkh: 'P2WPKH', p2wsh: 'P2WSH', p2tr: 'P2TR', op_return: 'OP_RETURN', nonstandard: 'non-standard', 'witness-unknown': 'witness program (unknown version)' }); +export const numeTip = (t) => NUME_TIP[t] || t; +const OFF_CHAIN = 'keys disclosed off chain (shared extended public keys, signed messages, PSBTs, a spend broadcast and never confirmed: replaced or dropped from mempools): not visible from any chain; see the declarations'; +/** where an output or a spend sits: the height when known, else the block hash, whole (Bitcoin Core verbose transactions carry no height, + * and a block hash starts with about nineteen zero digits, so a prefix names nothing) */ +const unde = (o) => (Number.isInteger(o.height) ? `height ${o.height}` : o.block ? `block ${String(o.block)}` : 'position not served'); + +const intrare = (t) => ({ input: t.input, chain: 'bitcoin', network: t.network, scriptType: t.type, scriptTypeName: numeTip(t.type), form: t.form }); +const nem = (r, motiv) => ({ ...r, label: null, unmeasured: motiv }); + +/** mode 1, Bitcoin: by script type only */ +export function clasificaBitcoinOffline(t) { + const r = { ...intrare(t), mode: 1, evidence: [], notSeen: [], label: null, unmeasured: null }; + if (t.error) return nem(r, 'not classified: ' + t.error); + if (TIP_EXPUS[t.type]) { + r.label = ETICHETA.EXPUSA; + r.evidence.push('by script type: ' + TIP_EXPUS[t.type] + (t.type === 'p2ms' ? ` (${t.m}-of-${t.n})` : '')); + r.notSeen.push('whether any output of this script exists on chain (mode 1 reads no chain data; the key is on chain from the first such output)'); + } else if (TIP_HASH[t.type]) { + r.label = ETICHETA.FARA_DOVADA; + r.evidence.push('by script type: ' + TIP_HASH[t.type]); + r.notSeen.push('spends from this address (mode 1 reads no chain data; a single spend would reveal the key or the script)'); + r.notSeen.push('whether the address has ever been used'); + r.notSeen.push(linieN8(t, 1)); + r.notSeen.push(ALTE_LANTURI_BTC(1)); + } else if (t.type === 'op_return') return nem(r, 'OP_RETURN script: not a spendable output, nothing to classify'); + else return nem(r, `script type "${t.type}" is not classified by this tool`); + return r; +} + +/** the margin within which the header time of a target's tip must fall, before the reference instant of the report, for "no on-chain + * evidence of exposure" to be given (README, "The tip of the target"): blocks arrive every 10 minutes on average, and a header's time, + * set by its miner, only has to exceed the median of the 11 previous blocks, so it may trail real time by about an hour; two hours keep + * a target that has caught up measurable, and leave a target about 12 or more blocks behind unmeasured */ +export const MARJA_VARF_ORE = 2; +/** the margin within which the time of an Ethereum endpoint's HEAD block must fall, before the reference instant, for "no on-chain evidence + * of exposure" to be given (README, "The head of an Ethereum endpoint"): a block every 12-second slot, so an endpoint that has caught up + * serves a head seconds old; 30 minutes (150 slots) leave room for a skewed clock of the machine that runs the report and for a run of + * missed slots, and leave an endpoint about 150 or more blocks behind unmeasured */ +export const MARJA_CAP_ETH_MIN = 30; +const isoS = (s) => new Date(s * 1000).toISOString().replace('.000Z', 'Z'); +const NUME_SORA = Object.freeze({ p2pkh: 'P2PKH', p2wpkh: 'P2WPKH', 'p2sh-p2wpkh': 'P2SH-P2WPKH', p2pk: 'P2PK', p2tr: 'P2TR' }); +/** how a sibling relates to the input (bitcoin.mjs scripturiSurori): the words that open its evidence line, and the reason a sibling that + * could not be measured leaves the input unmeasured */ +const RELATIE = Object.freeze({ + hash160: (s) => `the same HASH160 of the key under another script type, ${s.nume}`, + codificare: (s) => `the same key in its ${s.codificare} encoding, under ${s.nume}`, + bip86: (s) => `a P2TR output with no script tree (BIP-86) whose internal key is this key, ${s.nume}`, +}); +const DE_CE_SORA = Object.freeze({ + hash160: 'the same HASH160 of the key under another script type, where a spend reveals this same key', + codificare: 'the same key in another encoding, where an output or a spend shows this same key', + bip86: 'the BIP-86 P2TR output of this key, whose output key is this key tweaked by a hash of it', +}); +const relatia = (s) => (RELATIE[s.relatie] || RELATIE.hash160)(s); +/** what the same key may sit under and this tool cannot derive from the input (project document N8), per input type */ +const N8_NEDERIVAT = Object.freeze({ + p2pkh: 'a P2PK or bare-multisig output holding the key itself, a P2TR output or script, a P2SH or P2WSH script holding the key, and the key in its other encoding (compressed or uncompressed, which has another HASH160)', + p2wpkh: 'a P2PK or bare-multisig output holding the key itself, a P2TR output or script, a P2SH or P2WSH script holding the key, and the key in its other encoding (compressed or uncompressed, which has another HASH160)', + p2pk: 'a P2TR output whose key commits to a script tree, a P2SH or P2WSH script holding the key, and a bare-multisig output holding it: each depends on a tree, a script or other keys that this input does not give (the few forms that commit to this key alone, such as a 1-of-1 multisig or a P2WSH of OP_CHECKSIG, are not searched either)', + p2sh: 'the keys inside the script (unknown until a spend reveals it) under any other script type', + p2wsh: 'the keys inside the script (unknown until a spend reveals it) under any other script type', + p2tr: 'the internal key or the output key under any other script type (a P2PK, P2PKH or P2WPKH of the same key)', + p2ms: 'each key of this multisig under any other script type (a P2PK, P2PKH or P2WPKH of the same key)', +}); +/** N8: the same key under another script type. mode 1 reads nothing; in modes 2 and 3 the derivable siblings were read (named in the + * evidence), and this line names what cannot be derived */ +const linieN8 = (t, mode) => (mode === 1 + ? `the same key under another script type (${t.type === 'p2pk' ? 'the key in each of its encodings under P2PK, P2PKH, P2WPKH and P2SH-P2WPKH, its BIP-86 P2TR output, and ' : ['p2pkh', 'p2wpkh'].includes(t.type) ? 'the other P2PKH, P2WPKH or P2SH-P2WPKH forms of the same HASH160 of the key, and ' : ''}${N8_NEDERIVAT[t.type] || 'any other form'}): mode 1 reads no chain data` + : `the same key under another script type that cannot be derived from this input: ${N8_NEDERIVAT[t.type] || 'any other form'}; not searched (a key reused there is revealed by that script's own outputs or spends)`); +/** + * A. the CHAIN a Bitcoin target serves (Electrum server.features genesis_hash; Esplora /block-height/0; Bitcoin Core getblockhash 0), + * judged before any label: its genesis block must be one of the networks the input can belong to (bitcoin.mjs reteleIntrarii; a p2pk: or + * script: line is read on mainnet only); the tip header it serves (Electrum, Esplora) must state a target within the proof-of-work limit of + * the chain that genesis names (a signet or regtest header under a mainnet genesis states one above it); and on a network that holds + * CHECKPOINTS (mainnet: bitcoin.mjs punctDeControl) the block it serves at the highest checkpoint height at or below its chain's end must + * be the checkpoint: a chain that split from Bitcoin after its genesis block (Bitcoin Cash, Bitcoin SV, eCash) shares that block and the + * limit, and serves another block there. -> { linie } or { linie, motiv }; null when the chain was not read + */ +const DESPARTITE = 'Bitcoin Cash, Bitcoin SV and eCash share the genesis block and the proof-of-work limit of Bitcoin mainnet; Bitcoin Cash split from it at height 478559, and the other two split later from Bitcoin Cash'; +function lantulTintei(t, obs) { + if (!obs.chain) return null; + const retea = obs.chain.retea; const R = retea ? RETELE_BTC[retea] : null; + const linie = R ? `chain served: ${R.nume} (genesis block ${R.geneza})` : `chain served: genesis block ${obs.chain.geneza}, which is none of Bitcoin mainnet, testnet3, testnet4, signet or regtest`; + const permise = reteleIntrarii(t); + const aAdresei = t.network === 'mainnet' || t.network === 'testnet' || t.network === 'regtest' ? `this is a ${t.network} address (${permise.map((n) => RETELE_BTC[n].nume).join(', ')})` : `this is a ${t.form === 'p2pk' ? 'p2pk:' : 'script:'} line, which this tool reads on Bitcoin mainnet only`; + if (!R || !permise.includes(retea)) return { linie, motiv: `not measured: the target serves another chain: ${R ? R.nume : 'a chain whose genesis block is ' + obs.chain.geneza}, and ${aAdresei}; nothing it serves is about this address's chain` }; + // a tip whose bits were not read states no target, and is not let through as one within the limit + const gen = `genesis block ${R.geneza}, that of ${R.nume}`; + const tintaVarf = obs.tip ? tintaDinBits(Number(obs.tip.bits) >>> 0) : null; + if (obs.tip && (tintaVarf === null || tintaVarf > R.limita)) return { linie: `chain served: ${gen}, with a tip header that no header of ${R.nume} can carry`, motiv: `not measured: the target serves another chain: the tip header it serves (height ${obs.tip.height}, bits 0x${(Number(obs.tip.bits) >>> 0).toString(16).padStart(8, '0')}) states ${tintaVarf === null ? 'no valid proof-of-work target' : 'a proof-of-work target above the limit of ' + R.nume}, which no header of that chain can carry` }; + const limita = obs.tip ? '; the tip header states a target within its proof-of-work limit' : ''; + const munca = 'whether it is the chain with the most work is not verified'; + if (!(R.puncte && R.puncte.length)) return { linie: `chain served: ${R.nume} (genesis block ${R.geneza}${limita}; no checkpoint is held for ${R.nume}, so a chain that shares its genesis block is not told apart; ${munca})` }; + // the checkpoint: a chain that shares the genesis block and the limit, and split later, serves another block at that height + const c = obs.chain.control; + if (!c) return { linie: `chain served: ${gen}; its block at a checkpoint height was not read`, motiv: `not measured: the target serves the genesis block of ${R.nume}, but its block at a checkpoint height was not read, so a chain that split from ${R.nume} after its genesis block cannot be told apart from it (${DESPARTITE})` }; + if (c.sub !== undefined) return { linie: `chain served: ${gen}, ending at height ${c.inaltime}, below the lowest checkpoint this tool holds (height ${c.sub})`, motiv: `not measured: the target serves the genesis block of ${R.nume}, and the chain it serves ends at height ${c.inaltime}, below height ${c.sub}, the lowest checkpoint this tool holds for ${R.nume}: a chain that split from it there cannot be told apart (${DESPARTITE})` }; + if (c.servit !== c.asteptat) return { linie: `chain served: ${gen}, but at height ${c.height} the block ${c.servit}, where ${R.nume} has the block ${c.asteptat}`, motiv: `not measured: the target serves another chain: one that shares the genesis block of ${R.nume} and split from it before height ${c.height}, where it serves the block ${c.servit} and ${R.nume} has the block ${c.asteptat} (${DESPARTITE}); nothing it serves is about this address's chain` }; + return { linie: `chain served: ${R.nume} (genesis block ${R.geneza}; at height ${c.height} the block ${c.servit}, the checkpoint this tool holds${limita}; ${munca})` }; +} +/** + * C. the NEWEST chain time a target served (the header time of its tip, the time of an Ethereum head, the block time of a given + * transaction, and for Bitcoin Core the scan itself, which reads the node's unspent set at the time of the run) may not be more than + * MARJA_VARF_ORE hours after the reference instant: the report records what was readable on its date, and a block that came after it was + * not. Mainnet nodes refuse a header more than 2 hours ahead of their own time, so a target that serves the chain passes this for a report + * dated the day it is run. -> the reason, or null + */ +function dupaDataRaportului(timp, ce, ctx, cine = 'the target') { + if (!Number.isFinite(ctx.referinta)) return `not measured: ${ce} ${isoS(timp)}, but no reference instant was given to judge it against`; + if (timp * 1000 > ctx.referinta + MARJA_VARF_ORE * 3600 * 1000) return `not measured: ${cine} serves blocks after the report date: ${ce} ${isoS(timp)}, more than ${MARJA_VARF_ORE} hours after ${ctx.referintaText || 'the reference instant'}; this report records what was readable on its date and cannot rest on what came after it; date the report the day it is run`; + return null; +} +/** MIC-1: a key, or an address, shared with another chain is revealed by a signature there; only the chain named was read */ +const ALTE_LANTURI_BTC = (mode) => `other chains sharing this key: a Bitcoin fork that shares this chain's history before its split, a test network, or a chain of another kind using the same secp256k1 key (an Ethereum account of the same key): ${mode === 1 ? 'no chain was read (mode 1)' : 'only the Bitcoin chain served by the target was read'}; see the declarations`; +const ALTE_LANTURI_ETH = (chainId) => `other chains sharing this key: every EVM chain where this address is the same account (layer 2s, sidechains, test networks), and Bitcoin addresses of the same secp256k1 key: ${chainId === undefined || chainId === null ? 'no chain was read (mode 1)' : `only chain id ${chainId} was read`}; see the declarations`; +const OFF_CHAIN_ETH = 'keys disclosed off chain (EIP-191 and EIP-712 signatures: token permits, exchange orders, sign-in messages; a transaction broadcast and never included; an extended public key of the wallet given to a third party): not visible from any chain; see the declarations'; +/** the revealing findings of an observation, as evidence lines */ +const liniiRevelatoare = (obs) => (obs.inputs || []).filter((i) => i.findings.some((f) => REVELATOARE.has(f.what))).flatMap((i) => i.findings.filter((f) => REVELATOARE.has(f.what)).map((f) => `${f.detail}, in the spend ${i.txid} (input ${i.index}, ${unde(i)})`)); + +/** + * mode 2/3, Bitcoin: from observations (adaptoare.mjs, observatieDinTranzactii), then the SIBLING scripts and the TIP of the target + * obs = { outputs: [{txid, vout, height}], inputs: [{txid, index, height, findings: [{what, detail}], spendsTarget}], spentOutputs, txCount, + * unconfirmedCount, unconfirmedRevealing, unconfirmedOutputs, unconfirmedInputs, unconfirmedSpends, spendsNotEnumerable, txidsGiven, + * mempoolTouches, historyFromRequesterList, unspentFound, spentAbsent, spentNotRead, spentOutputsServed, mempoolSpendsCounted, + * mempoolSpendNotServed, note, partial, error, tip: { height, time, hash }, siblings: [{ type, input, t, obs }] } + * ctx = { referinta (ms), referintaText }: the instant the tip is judged against (raport.mjs: the end of the report's date, or the time of + * the run when that comes first) + * Order: the chain the target serves (A, lantulTintei) and the newest time it served (C, dupaDataRaportului), before any label; then the + * input itself (clasificaUna); a sibling that shows the key on chain makes it "exposed"; a sibling that could not be measured leaves no + * "no on-chain evidence"; a target whose tip header is older than the margin leaves no "no on-chain evidence"; every remaining "no + * on-chain evidence" names the siblings read, what cannot be derived (N8) and the other chains not read + */ +export function clasificaBitcoinObservat(t, obs, mode, ctx = {}) { + let r = clasificaUna(t, obs, mode); + if (t.error || !obs || obs.error || obs.partial) return r; + // A. the chain the target serves (Electrum, Esplora): nothing a target serves about another chain is about this address, so no label + const lant = lantulTintei(t, obs); + const linieVarf = obs.tip ? `history served up to height ${obs.tip.height} (tip header time ${isoS(obs.tip.time)})` : null; + const numaiTinta = (motiv) => ({ ...r, label: null, unmeasured: motiv, evidence: [linieVarf, lant && lant.linie].filter(Boolean), notSeen: [] }); + if (lant && lant.motiv) return numaiTinta(lant.motiv); + // C. nothing the target served may come after the report date (Electrum, Esplora: the tip; Bitcoin Core: the scan, read at the run, and + // the block of each given transaction), whatever the label would be + const dupa = obs.tip ? dupaDataRaportului(obs.tip.time, `its tip ${obs.tip.height} carries the header time`, ctx) : obs.timpMaxim ? dupaDataRaportului(obs.timpMaxim.time, obs.timpMaxim.ce, ctx) : null; + if (dupa) return numaiTinta(dupa); + if (obs.blocktimeLipsa) return numaiTinta(`not measured: the node served transaction ${obs.blocktimeLipsa} (given with --txids) in a block of its active chain without the time of that block (blocktime), so it cannot be placed against the report date`); + // the siblings: the same HASH160 under P2PKH / P2WPKH / P2SH-P2WPKH, and for a P2PK input the same key in its other encodings and its + // BIP-86 P2TR output (bitcoin.mjs scripturiSurori) + const surori = (Array.isArray(obs.siblings) ? obs.siblings : []).map((s) => ({ ...s, nume: `${NUME_SORA[s.type] || s.type} ${s.input}`, r: clasificaUna(s.t, s.obs, mode) })); + const expusa = surori.filter((s) => s.r.label === ETICHETA.EXPUSA); + if (expusa.length) { + const fost = r.unmeasured; + r = { ...r, label: ETICHETA.EXPUSA, unmeasured: null, evidence: [...r.evidence], notSeen: [...r.notSeen] }; + for (const s of expusa) r.evidence.push(`${relatia(s)}: ${liniiRevelatoare(s.obs).join('; ') || s.r.evidence.join('; ')}`); + if (fost) r.notSeen.push('this input itself was not measured (' + fost.replace(/^not measured: /, '') + '); the key is on chain through the script named in the evidence'); + // a BIP-86 output shows the output key, this key tweaked: it is said exactly what that exposes + if (expusa.some((s) => s.relatie === 'bip86')) r.notSeen.push('the BIP-86 P2TR output named carries the output key Q = P + t*G (P this key, t a hash of it), not this key itself: whoever recovers the private key of Q controls that output, and the private key of this key follows from it for anyone who also knows this key'); + } else if (r.label === ETICHETA.FARA_DOVADA) { + const nem_ = surori.find((s) => s.r.unmeasured); + if (nem_) r = nem(r, `not measured: the sibling script ${nem_.nume} (${DE_CE_SORA[nem_.relatie] || DE_CE_SORA.hash160}) was not measured: ${String(nem_.r.unmeasured).replace(/^not measured: /, '')}`); + else if (surori.length) r.evidence.push(t.type === 'p2pk' + ? `sibling scripts of the same key read through the same target (the key in each of its encodings under P2PK, P2PKH, P2WPKH and P2SH-P2WPKH, and its BIP-86 P2TR output): ${surori.map((s) => `${s.nume} (${s.obs.txCount ?? 0} confirmed transaction(s))`).join(', ')}; none shows the key on chain` + : `sibling scripts of the same HASH160 read through the same target: ${surori.map((s) => `${s.nume} (${s.obs.txCount ?? 0} confirmed transaction(s))`).join(', ')}; no spend there reveals the key`); + } + // the tip: every verdict names up to where the history goes, and the chain served; "no on-chain evidence" only for a target that has + // caught up with the chain + if (obs.tip) { + const H = obs.tip.height, T = isoS(obs.tip.time); + r.evidence.unshift(`history served up to height ${H} (tip header time ${T})`); + if (lant && lant.linie) r.evidence.splice(1, 0, lant.linie); + if (r.label === ETICHETA.FARA_DOVADA) { + if (!Number.isFinite(ctx.referinta)) r = nem(r, `not measured: target tip ${H} at ${T} was read, but no reference instant was given to judge it against`); + else if (obs.tip.time * 1000 < ctx.referinta - MARJA_VARF_ORE * 3600 * 1000) r = nem(r, `not measured: target behind the chain: tip ${H} at ${T}, more than ${MARJA_VARF_ORE} hours before ${ctx.referintaText || 'the reference instant'}; a spend confirmed after its tip is not in the history it served; re-run against a target that has caught up with the chain`); + } + } else if (r.label === ETICHETA.FARA_DOVADA) r = nem(r, 'not measured: the tip of the target was not read, so the history it served cannot be placed against the chain'); + // Bitcoin Core reads no tip: its verdicts name the chain the node serves as their first evidence line + if (!obs.tip && lant && lant.linie) r.evidence.unshift(lant.linie); + if (r.label === ETICHETA.FARA_DOVADA) { r.notSeen.push(linieN8(t, mode)); r.notSeen.push(ALTE_LANTURI_BTC(mode)); } + return r; +} + +/** one script, from its own observation (the rules of the header comment) */ +function clasificaUna(t, obs, mode) { + const r = { ...intrare(t), mode, evidence: [], notSeen: [], label: null, unmeasured: null }; + if (t.error) return nem(r, 'not classified: ' + t.error); + if (!obs || obs.error) return nem(r, 'not measured: ' + (obs && obs.error ? obs.error : 'no observation')); + if (obs.partial) return nem(r, 'not measured: ' + obs.partial); + if (t.type === 'op_return') return nem(r, 'OP_RETURN script: not a spendable output, nothing to classify'); + const tipExpus = !!TIP_EXPUS[t.type]; + if (!tipExpus && !TIP_HASH[t.type]) return nem(r, `script type "${t.type}" is not classified by this tool`); + const outs = obs.outputs || [], ins = obs.inputs || []; + const areRevel = (i) => i.findings.some((f) => REVELATOARE.has(f.what)); + const revel = ins.filter(areRevel); + const spends = ins.filter((i) => i.spendsTarget); + // a spend SEEN: an input that spends an output paying this script (its funding was read), or, for a hash-type script, an input in which + // a push or a script hashes to the address's hash (bitcoin.mjs emits a finding for a hash-type target only on such an equality): the + // preimage of the address is then on chain in that input, even when its funding was not served and a key in it was not read (a + // segwit spend served without its witness, which the transaction id does not cover) + const spendsVazute = ins.filter((i) => i.spendsTarget || (!tipExpus && i.findings.length > 0)); + const neclasif = ins.filter((i) => !areRevel(i) && i.findings.some((f) => f.what === 'script-revealed-unclassified')); + const listaIesiri = (l) => l.slice(0, 3).map((o) => `${o.txid}:${o.vout} (${unde(o)})`).join(', ') + (l.length > 3 ? ', ...' : ''); + // where a transaction that is NOT on chain sits: the target's mempool, or (Bitcoin Core) a block off the node's active chain + const neconf = obs.offChainBlocks > 0 ? "in the target's mempool or in a block off its active chain (confirmations 0)" : "in the target's mempool"; + + // Bitcoin Core without --txids, or with --txids none of which touches THIS address: scantxoutset enumerates only UNSPENT outputs; a + // spend (the thing that reveals a key) is invisible + if (obs.spendsNotEnumerable) { + // a list that touches the address only through transactions the node holds in its MEMPOOL says nothing about its history on chain + const prinMempool = obs.mempoolTouches > 0 ? ` (${obs.mempoolTouches} output(s) or input(s) of this address are in given transactions the node holds only in its mempool${obs.offChainBlocks > 0 ? ' or in a block off its active chain' : ''}, which are not on chain and say nothing about its history there)` : ''; + const deCe = obs.txidsGiven ? `none of the ${obs.txidsGiven} transaction(s) given with --txids touches this address on chain (no confirmed output to it, no confirmed input spending it or revealing its key or script)${prinMempool}, and Bitcoin Core keeps no address index` : 'Bitcoin Core keeps no address index'; + if (tipExpus && outs.length) { + r.label = ETICHETA.EXPUSA; + r.evidence.push(`${outs.length} unspent output(s) of this script found by scantxoutset: ` + listaIesiri(outs)); + r.evidence.push(TIP_EXPUS[t.type] + (t.type === 'p2ms' ? ` (${t.m}-of-${t.n})` : '') + ': the key is on chain in each of those outputs'); + r.notSeen.push(`spent outputs and spends: ${deCe}, so only unspent outputs were scanned; give this address's own transaction ids with --txids (from a node with txindex=1) to read them`); + r.notSeen.push(OFF_CHAIN); + return r; + } + if (tipExpus) return nem(r, `not measured: scantxoutset sees only unspent outputs and found none for this script; a spent output is invisible here (${deCe}); give this address's own transaction ids with --txids (from a node with txindex=1)`); + return nem(r, `not measured: spends not searched: ${deCe}, so a spend that revealed the key cannot be enumerated here; give this address's own transaction ids with --txids (from a node with txindex=1)`); + } + // the label a key-in-output type would get from its outputs alone: a spend in the mempool cannot take that evidence away + const expusPrinTip = tipExpus && outs.length > 0; + // a key-in-output type with no output on chain but one in the target's mempool: the key is public there, not yet on chain + if (tipExpus && !outs.length && obs.unconfirmedOutputs > 0) return nem(r, `not measured: ${obs.unconfirmedOutputs} output(s) of this script are ${neconf}, unconfirmed: a ${numeTip(t.type)} output carries its key, which is public there but not yet on chain; re-run after confirmation`); + // the same, when the index COUNTS an output of this script in its mempool that its transaction page did not carry + if (tipExpus && !outs.length && obs.mempoolOutputNotServed) return nem(r, `not measured: the target counts ${obs.mempoolOutputsCounted} output(s) of this script in its mempool (mempool_stats) and its transaction page carried ${obs.unconfirmedOutputs ?? 0} unconfirmed output(s) of it: a counted output was not served; a ${numeTip(t.type)} output carries its key, which is public there but not yet on chain; re-run`); + // a revealing spend seen only in the target's mempool is public but not on chain: neither label fits (unless the key is already on chain) + if (!revel.length && obs.unconfirmedRevealing && !expusPrinTip) return nem(r, `not measured: a spend of this address is ${neconf}, unconfirmed: the key is public there but not yet on chain; re-run after confirmation (${obs.unconfirmedCount} unconfirmed transaction(s) were not used as on-chain evidence)`); + // the index counts a spend of this address in its mempool that its transaction page did not carry (gone between the two requests) + if (!revel.length && !expusPrinTip && obs.mempoolSpendNotServed) return nem(r, `not measured: the target counts ${obs.mempoolSpendsCounted} spend(s) of this address in its mempool (mempool_stats) and its transaction page carried ${obs.unconfirmedSpends ?? 0} unconfirmed spend(s) of it: a counted spend was not served; a broadcast spend reveals the key even if it never confirms; re-run, and see the declarations`); + // the index counts more transactions of this script in its mempool than its page carried: its answer is incomplete, and what it did not + // serve may show the key + if (!revel.length && !expusPrinTip && obs.mempoolTxNotServed) return nem(r, `not measured: the target counts ${obs.mempoolTxsCounted} transaction(s) of this address in its mempool (mempool_stats) and its transaction page carried ${obs.unconfirmedCount ?? 0}: a counted transaction was not served, and what was not served may show the key; re-run`); + // the index served no mempool counts, or counts that are not counts: none of the three comparisons above could be made, so a spend, an + // output or a transaction it holds in its mempool and did not serve cannot be ruled out + if (!revel.length && !expusPrinTip && obs.mempoolNecitit) return nem(r, `not measured: the target served no mempool counts for this script that are counts (mempool_stats: ${obs.mempoolNecitit}), so a spend, an output or a transaction it holds in its mempool and did not serve cannot be ruled out; re-run`); + // a spend whose revealed script this tool does not classify: the key may be in it in a form the tool does not read + if (!revel.length && !tipExpus && neclasif.length) return nem(r, `not measured: ${neclasif.length} spend(s) of this address seen whose revealed script form is not classified by this tool: ` + neclasif[0].findings.find((f) => f.what === 'script-revealed-unclassified').detail); + // a spend SEEN of an output that pays this hash-type script: a valid spend reveals the preimage of the hash (the key, or the script), so + // a spend in which this tool finds neither has it in a form the tool does not read; "no on-chain evidence" would contradict the spend + if (!revel.length && !tipExpus && spendsVazute.length) return nem(r, `not measured: ${spendsVazute.length} spend(s) of this address seen (the first: ${spendsVazute[0].txid}, input ${spendsVazute[0].index}, ${unde(spendsVazute[0])}), each spending an output that pays this script or carrying a push or script that hashes to the address, which a valid spend does only by revealing the key or the script; in none of them did this tool read it (${spendsVazute[0].findings.length ? spendsVazute[0].findings.map((f) => f.detail).join('; ') : 'no push of the scriptSig or witness hashes to the address'}): it is in a form this tool does not read`); + // Bitcoin Core with --txids: an output of this address that the node's scan no longer finds unspent, and that none of the given + // transactions spends, was spent by a transaction NOT given: the key may be revealed there + if (!revel.length && !tipExpus && obs.spentNotRead > 0) return nem(r, `not measured: ${obs.spentNotRead} output(s) of this address are no longer unspent (scantxoutset), and the transaction(s) that spent them are not among the --txids given; the key may be revealed there; add them`); + // Esplora: the index counts more spent outputs than the spends read from the pages it served + if (!revel.length && !tipExpus && Number.isFinite(obs.spentOutputsServed) && obs.spentOutputsServed > spends.length) return nem(r, `not measured: the target counts ${obs.spentOutputsServed} spent output(s) of this address (chain_stats) but only ${spends.length} spend(s) were in the ${obs.txCount} transaction(s) it served; the key may be revealed in a spend not served`); + // Bitcoin Core: the history read here is the --txids list the requester gave, and no answer of the node shows it to be complete (it + // keeps no address index; an output of this address funded and spent by transactions not given is invisible to it). "No on-chain + // evidence of exposure" would rest on that list, not on a measurement: it is not given through this adapter, only "exposed" or this + if (obs.historyFromRequesterList && (tipExpus ? !outs.length : !revel.length)) return nem(r, `not measured: Bitcoin Core keeps no address index, so the history of this address read here is the --txids list given, and this tool cannot check that it lists every transaction of this address: the ${obs.txidsGiven ?? 0} transaction(s) given show no spend that reveals its key or script, and scantxoutset finds ${obs.unspentFound ?? 0} of its output(s) unspent, but an output funded and spent by transactions not given is invisible to the node; read the address through an index that serves its history (Electrum, Esplora) to measure it`); + // Esplora: the index counts more outputs to this script on chain than the outputs read from the pages it served: an output was not + // served (for a P2TR, P2PK or bare-multisig script it carries the key; for a hash type it may have a spend that reveals it) + if (!revel.length && !expusPrinTip && Number.isFinite(obs.fundedOutputsServed) && obs.fundedOutputsServed > outs.length) return nem(r, `not measured: the target counts ${obs.fundedOutputsServed} output(s) to this script on chain (chain_stats) but its pages carried ${outs.length}; an output not served ${tipExpus ? 'carries the key' : 'may have a spend that reveals the key'}`); + + if (outs.length) r.evidence.push(`${outs.length} output(s) to this script on chain: ` + listaIesiri(outs)); + else r.evidence.push('no output to this script in the history served by the target'); + if (tipExpus) { + if (outs.length) { r.label = ETICHETA.EXPUSA; r.evidence.push(TIP_EXPUS[t.type] + (t.type === 'p2ms' ? ` (${t.m}-of-${t.n})` : '') + ': the key is on chain in each of those outputs'); } + else { r.label = ETICHETA.FARA_DOVADA; r.notSeen.push(`no output exists yet: a ${numeTip(t.type)} output exposes its key the moment it is created`); } + for (const i of spends) for (const f of i.findings) r.evidence.push(`spend in ${i.txid} (input ${i.index}, ${unde(i)}): ${f.detail}`); + } else { + if (revel.length) { + r.label = ETICHETA.EXPUSA; + for (const i of revel) for (const f of i.findings.filter((x) => REVELATOARE.has(x.what))) r.evidence.push(`${f.detail}, in the spend ${i.txid} (input ${i.index}, ${unde(i)})`); + } else { + r.label = ETICHETA.FARA_DOVADA; + r.evidence.push(TIP_HASH[t.type]); + // a spend seen never reaches here (it is "exposed" or "unmeasured" above) + r.evidence.push(`no spend of this address in the ${obs.txCount ?? ins.length + outs.length} confirmed transaction(s) served by the target`); + } + // what the data source says about the outputs: Bitcoin Core from its unspent set, an index from its statistics, Electrum from the pages + if (Number.isFinite(obs.unspentFound)) r.evidence.push(`${obs.spentAbsent} of ${outs.length} output(s) absent from the node's unspent set (scantxoutset), ${spends.length} spend(s) read from the given transaction ids`); + else if (obs.spentOutputs !== undefined && obs.spentOutputs !== null) r.evidence.push(`${obs.spentOutputs} of ${outs.length} output(s) spent, as served` + (Number.isFinite(obs.spentOutputsServed) ? ` (the target counts ${obs.spentOutputsServed} spent output(s))` : '')); + } + if (obs.unconfirmedCount) r.notSeen.push(`${obs.unconfirmedCount} unconfirmed transaction(s) ${neconf} were not used as on-chain evidence`); + if (obs.note) r.notSeen.push(obs.note); + r.notSeen.push(OFF_CHAIN); + return r; +} + +/** mode 1, Ethereum */ +export function clasificaEthOffline(a) { + const r = { input: a.input, chain: 'ethereum', address: a.address, checksum: a.checksum, mode: 1, evidence: [], notSeen: [], label: null, unmeasured: null }; + if (a.error) return nem(r, 'not classified: ' + a.error); + r.label = ETICHETA.FARA_DOVADA; + r.evidence.push('by address form: an Ethereum address is keccak256 of the public key; the key is not on chain until the account signs a transaction or an EIP-7702 authorization'); + r.notSeen.push('transactions sent from this address (mode 1 reads no chain data; the first one reveals the key from its signature)'); + r.notSeen.push('whether the address is a contract account (no key of its own), an externally owned account, or an account with an EIP-7702 delegation'); + r.notSeen.push(OFF_CHAIN_ETH); + r.notSeen.push(ALTE_LANTURI_ETH(null)); + return r; +} + +/** + * mode 2/3, Ethereum: from observations (adaptoare.mjs, ethRpc), then the HEAD the endpoint served + * obs = { chainId, blockNumber, head: { number, time }, stateRoot, accountAbsent, syncing: null | { currentBlock, highestBlock }, code, nonce (both + * proven under stateRoot, the state root of the head block: adaptoare.mjs ethRpc), window: [a, b], scanned, + * sentTx: { hash, block, type, recovered }, authorization: { hash, block, index, delegate, txHashMatches }, partial, error } + * ctx = { referinta (ms), referintaText }, as for Bitcoin + * Order: a head more than MARJA_VARF_ORE hours after the reference instant gives no label (C); the account itself (clasificaEthUna); every + * verdict names the head; "no on-chain evidence" only from an endpoint that does not report that it is syncing and whose head time is at + * most MARJA_CAP_ETH_MIN minutes before the reference instant (B), and never without a head read + */ +export function clasificaEthObservat(a, obs, mode, ctx = {}) { + let r = clasificaEthUna(a, obs, mode); + if (a.error || !obs || obs.error || obs.partial) return r; + if (!obs.head) return r.label === ETICHETA.FARA_DOVADA ? nem(r, 'not measured: the head block of the endpoint was not read, so what it served cannot be placed against the chain') : r; + const linieCap = `head block ${obs.head.number} served by the endpoint (block time ${isoS(obs.head.time)})${obs.syncing ? ', which reports that it is syncing' : ''}`; + const dupa = dupaDataRaportului(obs.head.time, `its head block ${obs.head.number} carries the time`, ctx, 'the endpoint'); + if (dupa) return { ...r, label: null, unmeasured: dupa, evidence: [linieCap], notSeen: [] }; + r.evidence.unshift(linieCap); + if (r.label === ETICHETA.FARA_DOVADA) { + const deCe = 'a transaction sent or an authorization signed after its head is not in what it served; re-run against an endpoint that has caught up with the chain'; + if (obs.syncing) r = nem(r, `not measured: endpoint behind the chain: it reports that it is syncing (eth_syncing: current block ${obs.syncing.currentBlock ?? 'not given'}, highest block ${obs.syncing.highestBlock ?? 'not given'}; head block ${obs.head.number} at ${isoS(obs.head.time)}); ${deCe}`); + else if (!Number.isFinite(ctx.referinta)) r = nem(r, `not measured: head block ${obs.head.number} at ${isoS(obs.head.time)} was read, but no reference instant was given to judge it against`); + else if (obs.head.time * 1000 < ctx.referinta - MARJA_CAP_ETH_MIN * 60 * 1000) r = nem(r, `not measured: endpoint behind the chain: head block ${obs.head.number} at ${isoS(obs.head.time)}, more than ${MARJA_CAP_ETH_MIN} minutes before ${ctx.referintaText || 'the reference instant'}; ${deCe}`); + } + return r; +} +/** one Ethereum account, from its own observation (the rules of the header comment) */ +function clasificaEthUna(a, obs, mode) { + const r = { input: a.input, chain: 'ethereum', address: a.address, checksum: a.checksum, mode, evidence: [], notSeen: [], label: null, unmeasured: null }; + if (a.error) return nem(r, 'not classified: ' + a.error); + if (!obs || obs.error) return nem(r, 'not measured: ' + (obs && obs.error ? obs.error : 'no observation')); + if (obs.partial) return nem(r, 'not measured: ' + obs.partial); + const chain = obs.chainId !== undefined ? ` (chain id ${obs.chainId})` : ''; + const nonce = obs.nonce === undefined || obs.nonce === null ? null : Number(BigInt(obs.nonce)); + const [w0, w1] = obs.window || [null, null]; + const fereastra = obs.window ? `blocks ${w0}..${w1} (${obs.scanned} block(s) read)` : 'no block read'; + const cheieDinTx = () => { const s = obs.sentTx, rec = (s && s.recovered) || {}; return s && rec.ok && rec.address === a.address && rec.txHashMatches ? `public key recovered from the signature of transaction ${s.hash} in block ${s.block}${chain} (type 0x${Number(s.type || 0).toString(16)}); keccak256 of that key gives this address; the transaction hash re-derived from the served fields matches` : null; }; + // an authorization counts only when the transaction that carries it hashes to the hash the endpoint gives (re-derived from its fields) + const autorizare = () => (obs.authorization && obs.authorization.txHashMatches ? `authorization signed by this account in transaction ${obs.authorization.hash} (block ${obs.authorization.block}, authorization ${obs.authorization.index}, delegate ${obs.authorization.delegate}): the authority recovered from the authorization's signature is this address; the transaction hash re-derived from the served fields matches` : null); + const autorizareNepotrivita = () => (obs.authorization && !obs.authorization.txHashMatches ? `the endpoint serves an authorization signed by this account in transaction ${obs.authorization.hash} (block ${obs.authorization.block}), but the served fields of that transaction do not hash to that hash; not used as evidence` : null); + + // EIP-7702: the delegation designator is in the account's code only after an authorization signed with the account's key was included + if (esteDelegare7702(obs.code)) { + r.label = ETICHETA.EXPUSA; + r.evidence.push(`EIP-7702 delegation designator in the account code at head block ${obs.blockNumber}${chain} (its code hash proven under the state root of that block): 0xef0100 followed by the delegate ${delegatDin7702(obs.code)}; the chain sets this code only after an authorization signed with this account's own key was included, so the key has signed on chain`); + const au = autorizare(), auRea = autorizareNepotrivita(); if (au) r.evidence.push(au); else if (auRea) r.notSeen.push(auRea); else r.notSeen.push(`the authorizing transaction itself: none found in ${fereastra}; widen --eth-blocks to locate it`); + const tx = cheieDinTx(); if (tx) r.evidence.push(tx); + if (nonce !== null) r.evidence.push(`nonce ${nonce} at head block ${obs.blockNumber}, proven under its state root (eth_getProof)`); + return r; + } + const codeBytes = obs.code && obs.code !== '0x' ? (obs.code.length - 2) / 2 : 0; + if (codeBytes > 0) { + r.label = ETICHETA.FARA_DOVADA; + r.evidence.push(`contract account${chain}: ${codeBytes} bytes of code at head block ${obs.blockNumber} (its hash proven under the state root of that block); no secp256k1 key is bound to the address itself`); + r.notSeen.push('the keys that control this contract (owners, signers, upgrade keys): not visible from the address, not classified by this tool'); + r.notSeen.push(OFF_CHAIN_ETH); + r.notSeen.push(ALTE_LANTURI_ETH(obs.chainId)); + return r; + } + // a window in which no block was read measured nothing: a label on the nonce alone would rest on what this tool calls "not evidence" + if (obs.window && !(obs.scanned > 0)) return nem(r, `not measured: no block was read in ${fereastra}; the window must cover at least one block at or below the head ${obs.blockNumber}`); + if (obs.sentTx) { + const tx = cheieDinTx(); + if (tx) { r.label = ETICHETA.EXPUSA; r.evidence.push(tx); if (nonce !== null) r.evidence.push(`nonce ${nonce} at head block ${obs.blockNumber}, proven under its state root (eth_getProof)`); return r; } + const s = obs.sentTx, rec = s.recovered || {}; + return nem(r, `not measured: the endpoint serves transaction ${s.hash} in block ${s.block} as sent from this address, but the key could not be re-derived here (${rec.ok ? (rec.txHashMatches ? 'the recovered key gives ' + rec.address : 'the served fields do not hash to the transaction hash') : rec.reason})`); + } + if (autorizareNepotrivita()) return nem(r, 'not measured: ' + autorizareNepotrivita()); + if (obs.authorization) { + r.label = ETICHETA.EXPUSA; + r.evidence.push(autorizare() + '; the account code at the head block is empty (the delegation was cleared or set to the zero address), the key has signed on chain'); + if (nonce !== null) r.evidence.push(`nonce ${nonce} at head block ${obs.blockNumber}, proven under its state root (eth_getProof)`); + return r; + } + if (nonce === null) return nem(r, 'not measured: no nonce was proven for this account'); + if (nonce > 0) return nem(r, `not measured: the account proof at head block ${obs.blockNumber} gives nonce ${nonce} (transactions sent), but no transaction or authorization of this address was found in ${fereastra}; widen --eth-blocks to the block of a known transaction`); + r.label = ETICHETA.FARA_DOVADA; + r.evidence.push(`externally owned account${chain}: no code and nonce 0 at head block ${obs.blockNumber}, both proven under its state root (eth_getProof: every node of the proof checked by its hash from that root); no transaction sent and no EIP-7702 authorization signed by this address in ${fereastra}`); + r.notSeen.push(`transactions and authorizations in blocks outside ${w0}..${w1}`); + r.notSeen.push('the head block itself: its number, its time and its state root are what the endpoint served, and this tool does not check that block against the consensus of the chain (its hash, its parent, the validators that attested it): the account proof binds the nonce and the code to the state root of that block, not that block to the canonical chain'); + r.notSeen.push(OFF_CHAIN_ETH); + r.notSeen.push(ALTE_LANTURI_ETH(obs.chainId)); + return r; +} + +/** the summary line and counts of a list of classified addresses */ +export function rezumat(lista, mode) { + const n = lista.length; + const exp = lista.filter((x) => x.label === ETICHETA.EXPUSA).length; + const fara = lista.filter((x) => x.label === ETICHETA.FARA_DOVADA).length; + const nemasurate = lista.filter((x) => x.unmeasured).length; + return { addresses: n, exposed: exp, noOnChainEvidence: fara, unmeasured: nemasurate, mode, + verdict: `${n} address(es), mode ${mode}: ${exp} ${ETICHETA.EXPUSA}, ${fara} ${ETICHETA.FARA_DOVADA}, ${nemasurate} ${NEMASURAT}` }; +} diff --git a/exposure-report/ethereum.mjs b/exposure-report/ethereum.mjs new file mode 100644 index 0000000..c62ec3c --- /dev/null +++ b/exposure-report/ethereum.mjs @@ -0,0 +1,236 @@ +// ethereum.mjs (quantum exposure report, C12): EIP-55 addresses, a minimal RLP encoder, the signing hash of a transaction by type +// (legacy / EIP-2930 / EIP-1559 / EIP-4844 / EIP-7702) and the RECOVERY of the sender's public key from its signature. An EOA +// address is keccak256(publicKey)[12:]: the key is not on chain until the account SIGNS something; the first transaction it sends +// carries an ECDSA signature from which anyone recovers the key. This module re-derives that key from the bytes an endpoint serves +// and checks that it hashes to the address: the evidence is the recovered key, not the endpoint's `from` field. +// Pure functions; nothing here touches the network. +import { keccak_256, secp256k1 } from './noble.mjs'; + +export const keccak = (b) => Buffer.from(keccak_256(Buffer.from(b))); +const hexb = (h) => { const t = String(h || '').replace(/^0x/, ''); return Buffer.from(t.length % 2 ? '0' + t : t, 'hex'); }; +const N = secp256k1.CURVE.n; + +/** EIP-55: lowercase or uppercase hex is accepted as unchecked; mixed case must match the checksum. -> { address (lowercase), checksum: 'valid'|'none'|'wrong' } or { error } */ +export function decodeazaAdresaEth(line) { + const s = String(line).trim(); + if (!/^0x[0-9a-fA-F]{40}$/.test(s)) return { input: s, error: 'not an Ethereum address (0x + 40 hex)' }; + const low = s.slice(2).toLowerCase(); + const h = keccak(Buffer.from(low, 'ascii')).toString('hex'); + let cs = '0x'; for (let i = 0; i < 40; i++) cs += parseInt(h[i], 16) >= 8 ? low[i].toUpperCase() : low[i]; + if (s === cs) return { input: s, address: '0x' + low, checksum: 'valid', eip55: cs }; + if (s.slice(2) === low || s.slice(2) === low.toUpperCase()) return { input: s, address: '0x' + low, checksum: 'none', eip55: cs }; + return { input: s, error: 'EIP-55 checksum does not match (mixed-case address with a wrong checksum)' }; +} +export const adresaDinCheie = (pub65) => '0x' + keccak(Buffer.from(pub65).subarray(1)).subarray(12).toString('hex'); + +// ---------------------------------------------------------------- RLP (the subset a transaction needs) +const encLen = (n, off) => { if (n < 56) return Buffer.from([off + n]); const l = hexb(n.toString(16)); return Buffer.concat([Buffer.from([off + 55 + l.length]), l]); }; +export function rlpEncode(x) { + if (Array.isArray(x)) { const body = Buffer.concat(x.map(rlpEncode)); return Buffer.concat([encLen(body.length, 0xc0), body]); } + const b = Buffer.from(x); + if (b.length === 1 && b[0] < 0x80) return b; + return Buffer.concat([encLen(b.length, 0x80), b]); +} +/** a served value as a BigInt; a value that does not convert throws a FIXED message (the conversion's own message would carry the served + * text into the report) */ +const big = (x, nume) => { try { return BigInt(x); } catch { throw new Error(`${nume} is not a JSON-RPC quantity`); } }; +/** a JSON-RPC quantity (0x-hex) as minimal big-endian bytes; 0 -> empty */ +export const scalar = (h) => { if (h === undefined || h === null) return Buffer.alloc(0); const n = big(h, 'a field'); return n === 0n ? Buffer.alloc(0) : hexb(n.toString(16)); }; +const bytes = (h) => (h === undefined || h === null ? Buffer.alloc(0) : hexb(h)); +const accessList = (al) => (al || []).map((e) => [bytes(e.address), (e.storageKeys || []).map(bytes)]); +const authList = (al) => (al || []).map((a) => [scalar(a.chainId), bytes(a.address), scalar(a.nonce), scalar(a.yParity), scalar(a.r), scalar(a.s)]); + +/** + * the unsigned fields and the signature of a transaction as a JSON-RPC endpoint returns it (eth_getBlockByNumber with transactions / + * eth_getTransactionByHash). -> { type, unsigned: [..], prefix: Buffer, rec: 0|1, r, s, chainId } ; throws on an unknown type. + */ +export function campuriTx(tx) { + const type = Number(big(tx.type || 0, 'type')); + const r = big(tx.r, 'r'), s = big(tx.s, 's'); + if (type === 0) { + const v = Number(big(tx.v, 'v')); + let chainId = null, rec; + if (v === 27 || v === 28) rec = v - 27; + else { chainId = Math.floor((v - 35) / 2); rec = v - 35 - 2 * chainId; } + if (rec !== 0 && rec !== 1) throw new Error('legacy v does not yield a recovery bit'); + const base = [scalar(tx.nonce), scalar(tx.gasPrice), scalar(tx.gas), bytes(tx.to), scalar(tx.value), bytes(tx.input)]; + const unsigned = chainId === null ? base : [...base, scalar('0x' + chainId.toString(16)), Buffer.alloc(0), Buffer.alloc(0)]; + return { type, unsigned, signed: [...base, scalar(tx.v), scalar(tx.r), scalar(tx.s)], prefix: Buffer.alloc(0), rec, r, s, chainId }; + } + const yp = tx.yParity !== undefined ? Number(big(tx.yParity, 'yParity')) : Number(big(tx.v, 'v')); + if (yp !== 0 && yp !== 1) throw new Error('yParity is not 0 or 1'); + let unsigned; + if (type === 1) unsigned = [scalar(tx.chainId), scalar(tx.nonce), scalar(tx.gasPrice), scalar(tx.gas), bytes(tx.to), scalar(tx.value), bytes(tx.input), accessList(tx.accessList)]; + else if (type === 2) unsigned = [scalar(tx.chainId), scalar(tx.nonce), scalar(tx.maxPriorityFeePerGas), scalar(tx.maxFeePerGas), scalar(tx.gas), bytes(tx.to), scalar(tx.value), bytes(tx.input), accessList(tx.accessList)]; + else if (type === 3) unsigned = [scalar(tx.chainId), scalar(tx.nonce), scalar(tx.maxPriorityFeePerGas), scalar(tx.maxFeePerGas), scalar(tx.gas), bytes(tx.to), scalar(tx.value), bytes(tx.input), accessList(tx.accessList), scalar(tx.maxFeePerBlobGas), (tx.blobVersionedHashes || []).map(bytes)]; + else if (type === 4) unsigned = [scalar(tx.chainId), scalar(tx.nonce), scalar(tx.maxPriorityFeePerGas), scalar(tx.maxFeePerGas), scalar(tx.gas), bytes(tx.to), scalar(tx.value), bytes(tx.input), accessList(tx.accessList), authList(tx.authorizationList)]; + else throw new Error('transaction type 0x' + type.toString(16) + ' is not known to this tool'); + return { type, unsigned, signed: [...unsigned, scalar('0x' + yp.toString(16)), scalar(tx.r), scalar(tx.s)], prefix: Buffer.from([type]), rec: yp, r, s, chainId: Number(big(tx.chainId, 'chainId')) }; +} +/** the hash the sender signed (EIP-155 / EIP-2718 typed envelopes) and the transaction hash as the chain computes it */ +export function hashuriTx(tx) { + const c = campuriTx(tx); + return { signingHash: keccak(Buffer.concat([c.prefix, rlpEncode(c.unsigned)])), txHash: '0x' + keccak(Buffer.concat([c.prefix, rlpEncode(c.signed)])).toString('hex'), ...c }; +} +/** + * recover the sender's public key from a served transaction. -> { ok: true, publicKey (65 bytes), address, txHashMatches, type } + * or { ok: false, reason }. The recovered address is compared with tx.from by the caller; the tx hash re-derived from the served + * fields is compared with tx.hash so that an endpoint cannot serve fields that are not those of the transaction it names. + */ +export function recupereazaExpeditor(tx) { + let h; try { h = hashuriTx(tx); } catch (e) { return { ok: false, reason: e.message }; } + if (h.r === 0n || h.r >= N || h.s === 0n || h.s >= N) return { ok: false, reason: 'r or s outside [1, n-1]' }; + let pub; + try { pub = Buffer.from(new secp256k1.Signature(h.r, h.s).addRecoveryBit(h.rec).recoverPublicKey(h.signingHash).toRawBytes(false)); } + catch (e) { return { ok: false, reason: 'no public key recovers from the signature (' + String(e.message).slice(0, 60) + ')' }; } + return { ok: true, publicKey: pub, address: adresaDinCheie(pub), txHashMatches: String(tx.hash || '').toLowerCase() === h.txHash, txHash: h.txHash, type: h.type }; +} + +// ---------------------------------------------------------------- EIP-7702 (Pectra, 2025-05-07) +/** an account whose code is the delegation designator 0xef0100 || address: the chain sets it ONLY after an authorization signed with + * that account's own key was included in a type-4 transaction, so the designator is on-chain evidence that the key signed */ +export const esteDelegare7702 = (code) => typeof code === 'string' && /^0xef0100[0-9a-fA-F]{40}$/.test(code); +export const delegatDin7702 = (code) => '0x' + code.slice(8).toLowerCase(); +/** recover the AUTHORITY of an authorization tuple {chainId, address, nonce, yParity, r, s}: the signature is over + * keccak256(0x05 || rlp([chain_id, address, nonce])). -> { ok, publicKey, address, delegate } or { ok: false, reason } */ +export function recupereazaAutoritate(au) { + try { + const delegat = hexb(au.address); + const msg = keccak(Buffer.concat([Buffer.from([5]), rlpEncode([scalar(au.chainId), delegat, scalar(au.nonce)])])); + const r = big(au.r, 'r'), s = big(au.s, 's'), yp = Number(big(au.yParity !== undefined ? au.yParity : au.v, 'yParity')); + if (r === 0n || r >= N || s === 0n || s >= N || (yp !== 0 && yp !== 1)) return { ok: false, reason: 'authorization signature out of range' }; + const pub = Buffer.from(new secp256k1.Signature(r, s).addRecoveryBit(yp).recoverPublicKey(msg).toRawBytes(false)); + // the delegate is written as the bytes the authority signed, never as the served string (which may hold more than those bytes) + return { ok: true, publicKey: pub, address: adresaDinCheie(pub), delegate: '0x' + delegat.toString('hex') }; + } catch (e) { return { ok: false, reason: 'no public key recovers from the authorization (' + String(e && e.message).slice(0, 60) + ')' }; } +} + +// ---------------------------------------------------------------- the account AT a block: eth_getProof (EIP-1186) +// The nonce and the code of an account are read from a Merkle-Patricia proof under the STATE ROOT of the block the classification judges +// (the head block, whose time is judged), not from eth_getTransactionCount / eth_getCode at 'latest': behind a load balancer 'latest' +// may be answered by another machine, at another block. Every node of a proof is looked up by its own keccak hash, starting from the +// root, so a node an endpoint added or changed is never reached: a proof counts only when it leads, hash by hash, from that state root to +// the account (or shows it absent). The walker follows the same rules as the published one beside the AERE anchor verifier +// (verificator-falcon/mpt.mjs); the test runs both on the same proofs. +/** keccak256 of empty code: the code hash of an account without code */ +export const HASH_COD_GOL = keccak(Buffer.alloc(0)).toString('hex'); +/** strict RLP decoding: lists become arrays, strings Buffers; a length that runs past the input, or bytes left after the item, throw */ +export function rlpDecode(buf) { + const lung = (b, o, l) => { if (o + l > b.length) throw new Error('RLP runs past its input'); return Number(BigInt('0x' + (b.subarray(o, o + l).toString('hex') || '0'))); }; + const dec = (b, o) => { + const p = b[o]; + if (p === undefined) throw new Error('RLP runs past its input'); + if (p < 0x80) return [b.subarray(o, o + 1), o + 1]; + if (p < 0xb8) { const n = p - 0x80; if (o + 1 + n > b.length) throw new Error('RLP runs past its input'); return [b.subarray(o + 1, o + 1 + n), o + 1 + n]; } + if (p < 0xc0) { const l = p - 0xb7; const n = lung(b, o + 1, l); if (o + 1 + l + n > b.length) throw new Error('RLP runs past its input'); return [b.subarray(o + 1 + l, o + 1 + l + n), o + 1 + l + n]; } + let n, s; + if (p < 0xf8) { n = p - 0xc0; s = o + 1; } else { const l = p - 0xf7; n = lung(b, o + 1, l); s = o + 1 + l; } + if (s + n > b.length) throw new Error('RLP runs past its input'); + const out = []; let q = s; + while (q < s + n) { const [x, r] = dec(b, q); out.push(x); q = r; } + if (q !== s + n) throw new Error('RLP list length mismatch'); + return [out, s + n]; + }; + const [v, end] = dec(buf, 0); + if (end !== buf.length) throw new Error('trailing bytes after an RLP item'); + return v; +} +const nibule = (buf) => { const o = []; for (const x of buf) o.push(x >> 4, x & 15); return o; }; +/** the value at keccak(key) under root (a Buffer), or null when the proof shows it absent; throws when the proof does not hold */ +export function mptGet(root, cheieHash, dovada) { + const dupaHash = new Map(dovada.map((p) => { const b = hexb(p); return [keccak(b).toString('hex'), b]; })); + let cheie = nibule(cheieHash), ref = hexb(root); + for (let adancime = 0; adancime < 70; adancime++) { + let nod; + if (Buffer.isBuffer(ref)) { + const brut = dupaHash.get(ref.toString('hex')); + if (!brut) throw new Error('the proof is missing the node ' + ref.toString('hex').slice(0, 16) + '..'); + nod = rlpDecode(brut); + } else nod = ref; + if (!Array.isArray(nod)) throw new Error('a proof node is not a list'); + if (nod.length === 17) { + if (cheie.length === 0) return nod[16].length ? nod[16] : null; + const urm = nod[cheie[0]]; cheie = cheie.slice(1); + if (Array.isArray(urm)) { ref = urm; continue; } + if (urm.length === 0) return null; + if (urm.length !== 32) throw new Error('a branch child is neither a hash nor an inline node'); + ref = urm; continue; + } + if (nod.length === 2) { + if (!Buffer.isBuffer(nod[0]) || !nod[0].length) throw new Error('a proof node has no path'); + const enc = nibule(nod[0]); const steag = enc[0]; + if (steag > 3) throw new Error('bad hex-prefix flag'); + const p = enc.slice(steag % 2 === 1 ? 1 : 2); + const potrivit = cheie.length >= p.length && p.every((n, i) => cheie[i] === n); + if (steag >= 2) return potrivit && cheie.length === p.length ? nod[1] : null; + if (!potrivit) return null; + cheie = cheie.slice(p.length); + const urm = nod[1]; + if (Array.isArray(urm)) { ref = urm; continue; } + if (urm.length !== 32) throw new Error('an extension child is not a hash'); + ref = urm; continue; + } + throw new Error('a proof node with ' + nod.length + ' items'); + } + throw new Error('the proof is deeper than any key'); +} +/** + * the account of `adresa` proven under `stateRoot` by an eth_getProof answer -> { nonce (BigInt), codeHash (hex, no 0x), absent } or + * { eroare } naming why the proof does not hold. Only the PROVEN values are used; the nonce and codeHash fields the endpoint also serves + * beside the proof are not read + */ +export function contDinDovada(stateRoot, adresa, dovada) { + try { + if (!dovada || typeof dovada !== 'object' || !Array.isArray(dovada.accountProof)) throw new Error('the answer carries no accountProof list'); + if (dovada.accountProof.some((p) => typeof p !== 'string' || !/^0x(?:[0-9a-fA-F]{2})+$/.test(p))) throw new Error('an accountProof node is not hex bytes'); + const v = mptGet(stateRoot, keccak(hexb(adresa)), dovada.accountProof); + if (v === null) return { absent: true, nonce: 0n, codeHash: HASH_COD_GOL }; + const a = Buffer.isBuffer(v) ? rlpDecode(v) : null; + if (!Array.isArray(a) || a.length !== 4 || a.some((x) => !Buffer.isBuffer(x)) || a[0].length > 8 || a[2].length !== 32 || a[3].length !== 32) throw new Error('the value proven is not an account [nonce, balance, storageRoot, codeHash]'); + return { absent: false, nonce: a[0].length ? BigInt('0x' + a[0].toString('hex')) : 0n, codeHash: a[3].toString('hex') }; + } catch (e) { return { eroare: String((e && e.message) || e).slice(0, 120) }; } +} +/** + * the TEST side of the same structure (the tool itself only walks proofs): a Merkle-Patricia trie built from pairs { cheie (raw key, a + * Buffer), valoare (a Buffer) } -> { radacina (Buffer), dovada(cheie) -> the proof nodes of that key, as eth_getProof serves them }. A node + * whose encoding is under 32 bytes is inlined in its parent, as the yellow paper writes it; the test checks the root against known vectors + */ +export function trieDin(perechi) { + const noduri = new Map(); + const hp = (n, frunza) => { const impar = n.length % 2; const a = [(frunza ? 2 : 0) + impar, ...(impar ? [] : [0]), ...n]; const o = Buffer.alloc(a.length / 2); for (let i = 0; i < o.length; i++) o[i] = (a[2 * i] << 4) | a[2 * i + 1]; return o; }; + const ref = (nod) => { const e = rlpEncode(nod); if (e.length < 32) return nod; const h = keccak(e); noduri.set(h.toString('hex'), e); return h; }; + const fa = (el) => { + if (el.length === 1) return [hp(el[0].k, true), el[0].v]; + let p = 0; while (el.every((x) => x.k.length > p && x.k[p] === el[0].k[p])) p++; + if (p > 0) return [hp(el[0].k.slice(0, p), false), ref(fa(el.map((x) => ({ k: x.k.slice(p), v: x.v }))))]; + const ramura = Array.from({ length: 17 }, () => Buffer.alloc(0)); + for (let i = 0; i < 16; i++) { const g = el.filter((x) => x.k.length && x.k[0] === i).map((x) => ({ k: x.k.slice(1), v: x.v })); if (g.length) ramura[i] = ref(fa(g)); } + const capat = el.find((x) => !x.k.length); if (capat) ramura[16] = capat.v; + return ramura; + }; + const el = perechi.map((x) => ({ k: nibule(x.cheie), v: Buffer.from(x.valoare) })); + const radacinaRlp = rlpEncode(el.length ? fa(el) : Buffer.alloc(0)); const radacina = keccak(radacinaRlp); noduri.set(radacina.toString('hex'), radacinaRlp); + const dovada = (cheie) => { + const out = [radacinaRlp]; let k = nibule(cheie); let nod = rlpDecode(radacinaRlp); + for (let d = 0; d < 70 && Array.isArray(nod); d++) { + let urm; + if (nod.length === 17) { if (!k.length) break; urm = nod[k[0]]; k = k.slice(1); } + else { const enc = nibule(nod[0]); const s = enc[0]; const p = enc.slice(s % 2 ? 1 : 2); if (s >= 2 || !(k.length >= p.length && p.every((x, i) => k[i] === x))) break; k = k.slice(p.length); urm = nod[1]; } + if (Array.isArray(urm)) { nod = urm; continue; } + const brut = urm.length === 32 ? noduri.get(urm.toString('hex')) : null; if (!brut) break; + out.push(brut); nod = rlpDecode(brut); + } + return out.map((b) => '0x' + b.toString('hex')); + }; + return { radacina, dovada }; +} +/** a STATE of accounts [{ address, nonce, code }] (balance 0, empty storage) as an endpoint serves it at a block: -> { stateRoot, + * dovada(address) -> the eth_getProof answer for that address (an absent account gets its proof of absence) }; used by the test and its + * mocks */ +export function stareConturi(conturi) { + const RADACINA_GOALA = keccak(rlpEncode(Buffer.alloc(0))); + const camp = (c) => ({ nonce: BigInt(c.nonce || 0), codeHash: keccak(hexb(c.code || '0x')) }); + const t = trieDin(conturi.map((c) => { const x = camp(c); return { cheie: keccak(hexb(c.address)), valoare: rlpEncode([x.nonce ? hexb(x.nonce.toString(16)) : Buffer.alloc(0), Buffer.alloc(0), RADACINA_GOALA, x.codeHash]) }; })); + const dovada = (adresa) => { const c = conturi.find((x) => x.address.toLowerCase() === String(adresa).toLowerCase()); const x = camp(c || {}); return { address: String(adresa).toLowerCase(), accountProof: t.dovada(keccak(hexb(adresa))), balance: '0x0', codeHash: '0x' + (c ? x.codeHash.toString('hex') : HASH_COD_GOL), nonce: '0x' + x.nonce.toString(16), storageHash: '0x' + RADACINA_GOALA.toString('hex'), storageProof: [] }; }; + return { stateRoot: '0x' + t.radacina.toString('hex'), dovada }; +} diff --git a/exposure-report/fixturi/alese.json b/exposure-report/fixturi/alese.json new file mode 100644 index 0000000..55be405 --- /dev/null +++ b/exposure-report/fixturi/alese.json @@ -0,0 +1,109 @@ +{ + "cand": "2026-10-11T23:44:53.398Z", + "baza": { + "bitcoin": "https://mempool.space/api", + "ethereum": "https://ethereum-rpc.publicnode.com" + }, + "nota": "Real, public vectors of the quantum exposure report, chosen so that a never-spent address is historical or ownerless and every other address had no remaining balance on the recording date; nothing here says anything about who holds an address. Recorded responses live in the fixtures beside this file.", + "adrese": { + "p2pk": "p2pk:0496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858ee", + "p2pkh_cheltuit": "19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA", + "p2pkh_necheltuit": "1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9", + "p2wpkh_cheltuit": "bc1q0ht9tyks4vh7p5p904t340cr9nvahy7u3re7zg", + "p2sh_multisig_cheltuit": "3C1aVMk3dHci3rn6DjhZGK5j7cp9nAD4S9", + "p2wsh_multisig_cheltuit": "bc1qm38emw4p965sjhd5h7ktxggrhe034n9a2c4rcr5gkwynjuadfh2q9amddu", + "p2tr_cheltuit": "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0", + "p2tr_nefinantat": "bc1p725jqhdu6dnxf22rc8k6qxf6hhzl0m76z7g37x4lg22ufa3ln2psaq76sq" + }, + "rezumat": { + "p2pk": { + "address": "p2pk:0496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858ee", + "txCount": 3, + "spentOutputs": 0, + "balanceSats": 5000005777, + "unspent": 3, + "unspentDerivedFromHistory": false + }, + "p2pkh_cheltuit": { + "address": "19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA", + "txCount": 4, + "spentOutputs": 2, + "balanceSats": 0, + "unspent": 0, + "unspentDerivedFromHistory": false + }, + "p2pkh_necheltuit": { + "address": "1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9", + "txCount": 8, + "spentOutputs": 0, + "balanceSats": 79870, + "unspent": 8, + "unspentDerivedFromHistory": false + }, + "p2wpkh_cheltuit": { + "address": "bc1q0ht9tyks4vh7p5p904t340cr9nvahy7u3re7zg", + "txCount": 2, + "spentOutputs": 1, + "balanceSats": 0, + "unspent": 0, + "unspentDerivedFromHistory": false + }, + "p2sh_multisig_cheltuit": { + "address": "3C1aVMk3dHci3rn6DjhZGK5j7cp9nAD4S9", + "txCount": 2, + "spentOutputs": 1, + "balanceSats": 0, + "unspent": 0, + "unspentDerivedFromHistory": false + }, + "p2wsh_multisig_cheltuit": { + "address": "bc1qm38emw4p965sjhd5h7ktxggrhe034n9a2c4rcr5gkwynjuadfh2q9amddu", + "txCount": 2, + "spentOutputs": 1, + "balanceSats": 0, + "unspent": 0, + "unspentDerivedFromHistory": false + }, + "p2tr_cheltuit": { + "address": "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0", + "txCount": 18, + "spentOutputs": 14, + "balanceSats": 0, + "unspent": 0, + "unspentDerivedFromHistory": false + }, + "p2tr_nefinantat": { + "address": "bc1p725jqhdu6dnxf22rc8k6qxf6hhzl0m76z7g37x4lg22ufa3ln2psaq76sq", + "txCount": 0, + "spentOutputs": 0, + "balanceSats": 0, + "unspent": 0, + "unspentDerivedFromHistory": false + } + }, + "eth": { + "bloc": 26172068, + "expeditor": "0x853c6b56f75f2f56132511b99d1793ea85542adb", + "tx": "0xeb67b4eb32bc9adcb0ff2062a167d7501eb075bfe7f4198079aaba75d3d16a6c", + "tip": "0x2", + "primitor": "0x000000000000000000000000000000000000dead", + "contract": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "autoritate7702": "0xbc1c99a2791a0b0829e80e0a21957045efb13d54", + "tx7702": "0xe67fde7a9a29b3a6b835da29a455d23d961ded579bc9b85d36853bb3d0a08bc7", + "codAutoritate": "0xef010077.." + }, + "provenienta": { + "p2pk": "the coinbase output of block 1 (2009-01-09): the public key is the script; historical, no balance moved", + "p2pkh_cheltuit": "the P2PKH address of the compressed public key of the private key 7 (public knowledge), funded and swept by strangers; ownerless, no balance", + "p2pkh_necheltuit": "the P2PKH form of the coinbase key of block 11 (2009-01-09): never spent from, it holds only unsolicited dust; no living owner known; historical", + "p2wpkh_cheltuit": "the P2WPKH address of the public key of the private key 3 (public knowledge), funded and swept; ownerless, no balance", + "p2sh_multisig_cheltuit": "a recently spent P2SH multisig output with no remaining balance (found by scanning recent blocks on the recording date)", + "p2wsh_multisig_cheltuit": "a recently spent P2WSH multisig output with no remaining balance (found by scanning recent blocks on 2026-10-11)", + "p2tr_cheltuit": "the P2TR example address of BIP-350, whose output key is the generator point (private key 1, public knowledge), spent from; ownerless", + "p2tr_nefinantat": "a P2TR address whose internal key is the BIP-341 NUMS point H and whose only script leaf is OP_RETURN: provably unspendable, derived here, with no history on the recording date (never funded), so it exercises the never-funded branch; ownerless", + "ethereum_expeditor": "a sender of a type-2 transaction in the recorded block whose balance was zero on the recording date", + "ethereum_primitor": "the conventional burn address 0x...dEaD: no code, nonce 0, no owner", + "ethereum_contract": "the WETH contract (code, no key of its own)", + "ethereum_autoritate7702": "the authority of the EIP-7702 authorization in the recorded block (its account code is the delegation designator)" + } +} diff --git a/exposure-report/fixturi/bitcoind.json b/exposure-report/fixturi/bitcoind.json new file mode 100644 index 0000000..f4582b5 --- /dev/null +++ b/exposure-report/fixturi/bitcoind.json @@ -0,0 +1,1248 @@ +{ + "_sursa": { + "baza": "https://mempool.space/api", + "cand": "2026-10-11T23:44:53.398Z", + "nota": "Bitcoin Core JSON-RPC responses SHAPED from the same public index (scantxoutset from /address/:a/utxo or /scripthash/:h/utxo, getrawtransaction verbose from /tx/:id + /tx/:id/hex). Not recorded from a Bitcoin Core node: the shape was written from the Bitcoin Core RPC documentation. The asm fields (a rendering of the hex, not read by the adapter) were dropped to keep the fixture small. 2026-10-12: `hex` (what the adapter parses and hashes to the id; byte-identical to electrum.json) is kept for every transaction; the decoded `vin` / `vout` form, which the adapter reads only when a node serves no `hex`, is kept for the transactions of three roles (the P2WPKH and the two multisig vectors; the test exercises the no-hex path on them) and dropped from the rest to keep the fixture small; `confirmations` is derived from the recorded block heights relative to the newest recorded block (a lower bound of the real depth; the adapter does not read it). 2026-10-12 (round 8 of the review): getblockhash 0 (the genesis block of Bitcoin mainnet, the constant the test recomputes), getblockcount (971000, the tip the Electrum and Esplora fixtures serve) and getblockhash at a checkpoint height answer the CHAIN the adapter reads once per report. None was recorded from a node; getblockhash at a checkpoint height answers the CHECKPOINT blocks that the adapter reads after the tip, on Bitcoin mainnet, at the highest checkpoint height at or below the tip (bitcoin.mjs RETELE_BTC.mainnet.puncte): heights 967680 and 969696. They were NOT recorded with these responses: they are the two pins of the shield's Bitcoin header follower (btc/antete.mjs PUNCTE_PINATE, read from two public block explorers, mempool.space and blockstream.info, on 2026-10-11, identical on both), which the test requires to equal the tool's table, to hash to their hash and to meet their proof of work." + }, + "raspunsuri": { + "scantxoutset:raw(410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac)": { + "success": true, + "txouts": 0, + "height": 0, + "bestblock": "", + "unspents": [ + { + "txid": "a2e6580599d949ebcdebd85888e7abbf3ce5113bbaa276bb2ce0b722fcaa3aa2", + "vout": 1, + "scriptPubKey": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac", + "desc": "raw(410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac)#", + "amount": 0.00000777, + "coinbase": false, + "height": 957235 + }, + { + "txid": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098", + "vout": 0, + "scriptPubKey": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac", + "desc": "raw(410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac)#", + "amount": 50, + "coinbase": false, + "height": 1 + }, + { + "txid": "308bc3b8c3987ce86f2af1c32a6e8727f18cb151604b26ab0ce6b21ae5b500b1", + "vout": 0, + "scriptPubKey": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac", + "desc": "raw(410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac)#", + "amount": 0.00005, + "coinbase": false, + "height": 908451 + } + ], + "total_amount": 50.00005777 + }, + "scantxoutset:19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA": { + "success": true, + "txouts": 0, + "height": 0, + "bestblock": "", + "unspents": [], + "total_amount": 0 + }, + "scantxoutset:1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9": { + "success": true, + "txouts": 0, + "height": 0, + "bestblock": "", + "unspents": [ + { + "txid": "9b00af71e0a48823cebc6fbd6c9b9a60ab517b6b70d2e030ee61fd9be519d6dd", + "vout": 0, + "scriptPubKey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "desc": "addr(1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9)#", + "amount": 0.00000548, + "coinbase": false, + "height": 905378 + }, + { + "txid": "8eeacc40538b094b17f2e278dd53a2f6f68e7126ee81bff0ea3bec2fd9a42f66", + "vout": 257, + "scriptPubKey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "desc": "addr(1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9)#", + "amount": 0.00000547, + "coinbase": false, + "height": 642635 + }, + { + "txid": "8f716720ef9caf72149e262748e543df1fc2996cb5ae95d6cec2678dd06601ce", + "vout": 4, + "scriptPubKey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "desc": "addr(1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9)#", + "amount": 0.00000588, + "coinbase": false, + "height": 564789 + }, + { + "txid": "239cfce453bd562b3cc820e4bb9178fe4816bc73ab62292f33088d1893b1a3ec", + "vout": 111, + "scriptPubKey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "desc": "addr(1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9)#", + "amount": 0.00000547, + "coinbase": false, + "height": 661018 + }, + { + "txid": "092704c4efb9b499c8aceeba1dcb02e2d6abacc180dc9ebe587408a0dafa264e", + "vout": 95, + "scriptPubKey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "desc": "addr(1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9)#", + "amount": 0.00000546, + "coinbase": false, + "height": 950467 + }, + { + "txid": "65916aee7913a7bf95055dfff7b198d11ecc12ecb9fa5393f2a93fd2f6433e99", + "vout": 14, + "scriptPubKey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "desc": "addr(1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9)#", + "amount": 0.00076, + "coinbase": false, + "height": 751265 + }, + { + "txid": "eae4537e85ef54cb20408a385115f0cf88090f27609d4fa0f384b4aa633999a8", + "vout": 233, + "scriptPubKey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "desc": "addr(1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9)#", + "amount": 0.00000547, + "coinbase": false, + "height": 646789 + }, + { + "txid": "a66b0e20ca318ff84dd5da4c099fb9bcaee60bbc2da637b912bfb73345ffc9e9", + "vout": 183, + "scriptPubKey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "desc": "addr(1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9)#", + "amount": 0.00000547, + "coinbase": false, + "height": 667553 + } + ], + "total_amount": 0.0007987 + }, + "scantxoutset:bc1q0ht9tyks4vh7p5p904t340cr9nvahy7u3re7zg": { + "success": true, + "txouts": 0, + "height": 0, + "bestblock": "", + "unspents": [], + "total_amount": 0 + }, + "scantxoutset:3C1aVMk3dHci3rn6DjhZGK5j7cp9nAD4S9": { + "success": true, + "txouts": 0, + "height": 0, + "bestblock": "", + "unspents": [], + "total_amount": 0 + }, + "scantxoutset:bc1qm38emw4p965sjhd5h7ktxggrhe034n9a2c4rcr5gkwynjuadfh2q9amddu": { + "success": true, + "txouts": 0, + "height": 0, + "bestblock": "", + "unspents": [], + "total_amount": 0 + }, + "scantxoutset:bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0": { + "success": true, + "txouts": 0, + "height": 0, + "bestblock": "", + "unspents": [], + "total_amount": 0 + }, + "scantxoutset:bc1p725jqhdu6dnxf22rc8k6qxf6hhzl0m76z7g37x4lg22ufa3ln2psaq76sq": { + "success": true, + "txouts": 0, + "height": 0, + "bestblock": "", + "unspents": [], + "total_amount": 0 + }, + "getrawtransaction:a2e6580599d949ebcdebd85888e7abbf3ce5113bbaa276bb2ce0b722fcaa3aa2": { + "txid": "a2e6580599d949ebcdebd85888e7abbf3ce5113bbaa276bb2ce0b722fcaa3aa2", + "hash": "a2e6580599d949ebcdebd85888e7abbf3ce5113bbaa276bb2ce0b722fcaa3aa2", + "version": 2, + "size": 342, + "weight": 1041, + "locktime": 957234, + "hex": "020000000001017cba74a9aca0395f85e5c37329f83d512cd2c5a0ca0854f70d46b99b0ac9ecec0200000000fdffffff030000000000000000426a404f6c69766572204a61636b2c20446164647920697320e282bf75696c64696e6720796f7572206675747572652c206f6e652073617420617420612074696d652e090300000000000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeacae2900000000000016001485439608a60e1714d367f28a2c6a85f203988d130247304402204c4e97d149afccd2abeeb7162685bd03d0a7158609252cf8d6b8b96d607bbe6b0220531569f58287be1c9e003b7ce7d8e1c8df277781350c769044722d0216071811012102bfdaba69c2c24f77d17198fc4649e4919c499801f18d1211157087d65a88f58b329b0e00", + "blockhash": "00000000000000000000a5c854964b8fecb0ee34f9222662b7ae5436aa1514f5", + "confirmations": 13750, + "time": 1783552812, + "blocktime": 1783552812 + }, + "getrawtransaction:308bc3b8c3987ce86f2af1c32a6e8727f18cb151604b26ab0ce6b21ae5b500b1": { + "txid": "308bc3b8c3987ce86f2af1c32a6e8727f18cb151604b26ab0ce6b21ae5b500b1", + "hash": "308bc3b8c3987ce86f2af1c32a6e8727f18cb151604b26ab0ce6b21ae5b500b1", + "version": 1, + "size": 278, + "weight": 785, + "locktime": 0, + "hex": "010000000001011fad54b786a3d45ee1365b6a6e593477f8cfe44abc3eeb8296ee8b2f082f06660000000017160014458a593eeb60320ededa34d98bb52cb4a8aaf3f9feffffff02881300000000000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac00000000000000000a6a085468616e6b796f7502473044022001e1661aba38c580640f9a5c6f2b99a60c39098f6d8a436ac80a1bf3ee7daf0d02207c4d2b534ba5c006555bfd6f61ad5f406baddee0dc172c8032171680951d2f9a01210235ad7f08fcc677848136db845a948988c671b2ce8757451203fac7f59680fa6e00000000", + "blockhash": "000000000000000000004a4a1b4299d6d7ebfe4ad30538081c0e521472ca149e", + "confirmations": 62534, + "time": 1754254651, + "blocktime": 1754254651 + }, + "getrawtransaction:0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098": { + "txid": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098", + "hash": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098", + "version": 1, + "size": 134, + "weight": 536, + "locktime": 0, + "hex": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0104ffffffff0100f2052a0100000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac00000000", + "blockhash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048", + "confirmations": 970984, + "time": 1231469665, + "blocktime": 1231469665 + }, + "getrawtransaction:c2e9cced187a6222901f0dae0942ae95c3c1f92e2cae4b68780c09958d9ad43d": { + "txid": "c2e9cced187a6222901f0dae0942ae95c3c1f92e2cae4b68780c09958d9ad43d", + "hash": "c2e9cced187a6222901f0dae0942ae95c3c1f92e2cae4b68780c09958d9ad43d", + "version": 1, + "size": 548, + "weight": 2192, + "locktime": 0, + "hex": "0100000003591c64f47e60a3231d72be0c4f5ceb27d5c8aa0769afb7449bf322ac6912c6c9000000006a47304402204faa7a296cbf807e2d84d447a5f69a2665fc254913c16fb00bab725fbdda85ca02201b63ed9bb3fa5640421ce29b87a43b0b8316af6f7030f7a38d8e994e170f495b0121025cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bcffffffff591c64f47e60a3231d72be0c4f5ceb27d5c8aa0769afb7449bf322ac6912c6c9020000008b483045022100b2fca7c737b0818ae7d5f67b4657df294ac8b08fa85eef7e06e5f207392bc4000220217f7b1f20ebd376e2e9ec059733d19c70e9437d393977b1bf74581e094dda2e014104218ad6cdc632e7ae7d04472374311cebbbbf0ab540d2d08c3400bb844c654231b385c9781def7eabb9900860621d6f1ba5ac3858265459ef5c217feb9568c37cffffffff591c64f47e60a3231d72be0c4f5ceb27d5c8aa0769afb7449bf322ac6912c6c9070000008a473044022060dc08d4393998c315bb69780a2b609d15ceeaaf93e96d5ad7f9aa8be54885d00220151e4ef1cfe581ce38cfd30a78287930126cbbe8148a1602ecc0ec900228f39c0141043946a3002f7e56bad8f134f9b34282906a1ff5c54d9a60d47ef691c453bf5e1706d314b474399f6dab5088cf0c9ac28543c6f13b66aef3e1ff80d5e14111f7beffffffff01085200000000000017a91487cc007a9601b34d3e417aa458c36ed2adc4e1548700000000", + "blockhash": "0000000000000000000a12fea13cb4c1c3ff52710c93a156dd57fba16e7dd4e1", + "confirmations": 338696, + "time": 1590827293, + "blocktime": 1590827293 + }, + "getrawtransaction:c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59": { + "txid": "c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59", + "hash": "c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59", + "version": 2, + "size": 501, + "weight": 1674, + "locktime": 632288, + "hex": "02000000000101f13445914e28d5a38011526f14f915ea5b649f50d124af76bfa9346e1eab1c0c0000000000fdffffff0a10270000000000001976a9145dedfbf9ea599dd4e3ca6a80b333c472fd0b3f6988ac10270000000000001976a91476020d10a3ce41f94f4d584ed7f114ea6d01f2d388ac10270000000000001976a9149022dd1ee155e97d6d875375b48af4c06219a88b88ac10270000000000001976a9149b0b6a03b5a0ec32a84e861457c3287ec31b13ab88ac10270000000000001976a914c99432d583a087f51085b5a2c293cda3216884d988ac10270000000000001976a914e257825e04e5bacd06761b845c755d0024e9059d88ac10270000000000001976a914f92a30fae49bf6a15b72a267eb5ce98de6876df488ac10270000000000001976a914fd8d22e02b3a41bc38f69516c43f7ebd6268e16b88acb77a0000000000001976a91417e0c4ee5902aeeebb14985c988f02c7798a5c4588acf5b90500000000001976a9149c7eeeebc332f2abbee8f1cf48635d78d371c34c88ac02483045022100fd597565c2a45a9c53ae5b48f8256d485c88b573b1a54d8705a3f20722435171022076c5eaf0db8cbcdad2fed0ecf549fa046b0ad8beab71af56c364f9a7695ae717012103db4bef4b4a08253f15522c38766ec020fc133fb350bfe2505be1c8f8f985a398e0a50900", + "blockhash": "0000000000000000000a12fea13cb4c1c3ff52710c93a156dd57fba16e7dd4e1", + "confirmations": 338696, + "time": 1590827293, + "blocktime": 1590827293 + }, + "getrawtransaction:fa1b9a669a7c16f1d0b15cfb57e9830ccee36db984bd074de450e47088c8d078": { + "txid": "fa1b9a669a7c16f1d0b15cfb57e9830ccee36db984bd074de450e47088c8d078", + "hash": "fa1b9a669a7c16f1d0b15cfb57e9830ccee36db984bd074de450e47088c8d078", + "version": 1, + "size": 192, + "weight": 768, + "locktime": 0, + "hex": "010000000115cda65f1e46982fc082b15c8dbb60985d12a7e60b0c742263608cc9349f3808020000006b483045022100acd075b14f4fe12316bb75b07371d6d8ad0df95e477e7e31eb28f733bd6267700220442c39832f21d712e8af14027db405f0b29272f1ee0e7aed26eb64806ea558770121025cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bcffffffff01d06c0400000000001976a9140659a10acba837f71af2129690947e417b9cdca188ac00000000", + "blockhash": "0000000000000000188de542fd76b1676c4be6c380b39ddea119358c290cebd7", + "confirmations": 631900, + "time": 1421345234, + "blocktime": 1421345234 + }, + "getrawtransaction:08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15": { + "txid": "08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15", + "hash": "08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15", + "version": 1, + "size": 8864, + "weight": 35456, + "locktime": 0, + "hex": "01000000016216ba4b8e981a0574d0f0457235010e73a0d4e1af3b0182c9272c210ab9119b040000006b483045022100f5c26eee36e47b5ac824254398e1b82e2baaf53c645366bdd0b359e2cd01c010022067d6e273e289285360d49961152d599581446bbda5286e912073ac5f27ef266e0121024b0faa9624763002e963816b2f6774df0dedd770896a9511cb5c9d90f674ecdafffffffffd0001a0860100000000001976a914751e76e8199196d454941c45d1b3a323f1433bd688ac400d0300000000001976a9147dd65592d0ab2fe0d0257d571abf032cd9db93dc88ace0930400000000001976a9145dedfbf9ea599dd4e3ca6a80b333c472fd0b3f6988ac801a0600000000001976a9149652d86bedf43ad264362e6e6eba6eb76450812788ac20a10700000000001976a9148f9dff39a81ee4abcbad2ad8bafff090415a2be888acc0270900000000001976a914f93ec34e9e34a8f8ff7d600cdad83047b1bcb45c88ac60ae0a00000000001976a914e2192e8a7dd8dd1c88321959b477968b941aa97388ac00350c00000000001976a914dce76b2613052ea012204404a97b3c25eac3171588aca0bb0d00000000001976a9147d0f6c64afb419bbd7e971e943d7404b0e0daab488ac40420f00000000001976a914d7729816650e581d7462d52ad6f732da0e2ec93b88ace0c81000000000001976a914f8c698da3164ef8fa4258692d118cc9a902c5acc88ac804f1200000000001976a91485a1f9ba4da24c24e582d9b891dacbd1b043f97188ac20d61300000000001976a914f932d0188616c964416b91fb9cf76ba9790a921e88acc05c1500000000001976a91497f9281a1383879d72ac52a6a3e9e8b9a4a4f65588ac60e31600000000001976a914fe7c45126731f7384640b0b0045fd40bac72e2a288ac006a1800000000001976a9147025b4efb3ff42eb4d6d71fab6b53b4f4967e3dd88aca0f01900000000001976a914b67cb6edeabc0c8b927c9ea327628e7aa63e2d5288ac40771b00000000001976a914ad1e852b08eba53df306ec9daa8c643426953f9488ace0fd1c00000000001976a914ebfbe6819fcdebab061732ce91df7d586a037dee88ac80841e00000000001976a914b907c3a2a3b27789dfb509b730dd47703c27286888ac200b2000000000001976a91429a78213caa9eea824acf08022ab9dfc83414f5688acc0912100000000001976a9147ff45303774ef7a52fffd8011981034b258cb86b88ac60182300000000001976a914d0a79df189fe1ad5c306cc70497b358415da579e88ac009f2400000000001976a9140959e80121f36aea13b3bad361c15dac26189e2f88aca0252600000000001976a9142f396b29b27324300d0c59b17c3abc1835bd3dbb88ac40ac2700000000001976a914bfebb73562d4541b32a02ba664d140b5a574792f88ace0322900000000001976a9140c7aaf6caa7e5424b63d317f0f8f1f9fa40d556088ac80b92a00000000001976a9141306b9e4ff56513a476841bac7ba48d69516b1da88ac20402c00000000001976a9145a416cc9148f4a377b672c8ae5d3287adaafadec88acc0c62d00000000001976a914d39c4704664e1deb76c9331e637564c257d68a0888ac604d2f00000000001976a914d805f6f251f7479ebd853b3d0f4b9b2656d92f1d88ac00d43000000000001976a9149e42601eeaedc244e15f17375adb0e2cd08efdc988aca05a3200000000001976a9144e15e5189752d1eaf444dfd6bff399feb044397788ac40e13300000000001976a914f6d67d7983bf70450f295c9cb828daab265f1bfa88ace0673500000000001976a914f6d8ce225ffbdecec170f8298c3fc28ae686df2588ac80ee3600000000001976a91474b1e012be1521e5d8d75e745a26ced845ea3d3788ac20753800000000001976a91428c30fb9118ed1da72e7c4f89c0164756e8a021d88acc0fb3900000000001976a914b190e2d40cfdeee2cee072954a2be89e7ba3936488ac60823b00000000001976a9140b304f2a79a027270276533fe1ed4eff3091087688ac00093d00000000001976a91495a156cd21b4a69de969eb6716864f4c8b82a82a88aca08f3e00000000001976a914d1562eb37357f9e6fc41cb2359f4d3eda403232988ac40164000000000001976a9148efb85f9c5b5db2d55973a04128dc7510075ae2388ace09c4100000000001976a914f92044c7924e5525c61207972c253c9fc9f086f788ac80234300000000001976a91480df54e1f612f2fc5bdc05c9d21a83aa8d20791e88ac20aa4400000000001976a914f0225bfc68a6e17e87cd8b5e60ae3be18f12075388acc0304600000000001976a9149a012260d01c5113df66c8a8438c9f7a1e3d5dac88ac60b74700000000001976a914f828005d41b0f4fed4c8dca3b06011072cfb07d488ac003e4900000000001976a9148661cb56d9df0a61f01328b55af7e56a3fe7a2b288aca0c44a00000000001976a9140d2f533966c6578e1111978ca698f8add7fffdf388ac404b4c00000000001976a914de081b76f840e462fa2cdf360173dfaf4a976a4788ace0d14d00000000001976a914ef6419cffd7fad7027994354eb8efae223c2dbe788ac80584f00000000001976a91436af659edbe94453f6344e920d143f1778653ae788ac20df5000000000001976a9142f4870ef54fa4b048c1365d42594cc7d3d26955188acc0655200000000001976a914cb66763cf7fde659869ae7f06884d9a0f879a09288ac60ec5300000000001976a914db53d9bbd1f3a83b094eeca7dd970bd85b492fa288ac00735500000000001976a91448214c5969ae9f43f75070cea1e2cb41d5bdcccd88aca0f95600000000001976a914328660ef43f66abe2653fa178452a5dfc594c2a188ac40805800000000001976a9148c2a6071f89c90c4dab5ab295d7729d1b54ea60f88ace0065a00000000001976a914b14ed3146f5b2c9bde1703deae9ef33af811021088ac808d5b00000000001976a914cdf8e5c7503a9d22642e3ecfc87817672787b9c588ac20145d00000000001976a91468133e19b2dfb9034edf9830a200cfdf38c90cbd88acc09a5e00000000001976a914e26646db84b0602f32b34b5a62ca3cae1f91b77988ac60216000000000001976a914ef58afb697b094423ce90721fbb19a359ef7c50e88ac00a86100000000001976a9143ee4133d991f52fdf6a25c9834e0745ac74248a488aca02e6300000000001976a91452e763a7ddc1aa4fa811578c491c1bc7fd57013788ac40b56400000000001976a91420d45a6a762535700ce9e0b216e31994335db8a588ace03b6600000000001976a914739437bb3dd6d1983e66629c5f08c70e5276937188ac80c26700000000001976a914e0b8a2baee1b77fc703455f39d51477451fc8cfc88ac20496900000000001976a91461eb8a50c86b0584bb727dd65bed8d2400d6d5aa88acc0cf6a00000000001976a9145db8cda53a6a002db10365967d7f85d19e171b1088ac60566c00000000001976a914f6f5431d25bbf7b12e8add9af5e3475c44a0a5b888ac00dd6d00000000001976a914bf7413e8df4e7a34ce9dc13e2f2648783ec54adb88aca0636f00000000001976a914105b7f253f0ebd7843adaebbd805c944bfb863e488ac40ea7000000000001976a9149f1adb20baeacc38b3f49f3df6906a0e48f2df3d88ace0707200000000001976a914badf8b0d34289e679ec65c6c61d3a974353be5cf88ac80f77300000000001976a91486f9fea5cdecf033161dd2f8f8560768ae0a6d1488ac207e7500000000001976a914783c138ac81f6a52398564bb17455576e8525b2988acc0047700000000001976a91435003c3ef8759c92092f8488fca59a042859018c88ac608b7800000000001976a91467671d5490c272e3ab7ddd34030d587738df33da88ac00127a00000000001976a9146fe5a36eef0684af0b91f3b6cfc972d68c4f6fab88aca0987b00000000001976a914351e605fac813965951ba433b7c2956bf8ad95ce88ac401f7d00000000001976a91420d28d4e87543947c7e4913bcdceaa16e2f8f06188ace0a57e00000000001976a91424cef184714bbd030833904f5265c9c3e12a95a288ac802c8000000000001976a9147c99ce73e19f9fbfcce4825ae88261e2b0b0b04088ac20b38100000000001976a914cd03c1e6268ce9b89e3c3eeab8d0f1b6e8cac28188acc0398300000000001976a914c60111ed3d63b49665747b0e31eb382da519353588ac60c08400000000001976a914fbc708d671c03e26661b9c08f77598a529858b5e88ac00478600000000001976a91438a968fdfb457654c51bcfc4f9174d6ee487bb4188aca0cd8700000000001976a9145c3862203d1e44ab3af441503e22db97b1c5097e88ac40548900000000001976a914d06b6e206691295ec345782d7ea0686969d8674b88ace0da8a00000000001976a9149978f61b92d16c5f1a463a0995df70da1f7a7d2a88ac80618c00000000001976a9146534b31208fe6e100d29f9c9c75aac8bf06fbb3888ac20e88d00000000001976a914463013cd41279f2fd0c31d0a16db3972bfffac8d88acc06e8f00000000001976a914c6927a00970d0165327d0a6db7950f05720c295c88ac60f59000000000001976a9145ed822125365274262191d2b77e88d436dd56d8888ac007c9200000000001976a9142da63cbd251d23c7b633cb287c09e6cf888b3fe488aca0029400000000001976a914578d94dc6f40fff35f91f6fba9b71c46b361dff288ac40899500000000001976a9147eefddd979a1d6bb6f29757a1f463579770ba56688ace00f9700000000001976a914c01bf430a97cbcdaedddba87ef4ea21c456cebdb88ac80969800000000001976a914c7a7b23f6bd98b8aaf527beb724dda9460b1bc6e88ac201d9a00000000001976a9147c1a77205c03b9909663b2034faa0b544e6bc96b88acc0a39b00000000001976a914f72b812932f6d7102233971d65cec0a22b89e13688ac602a9d00000000001976a914695fd6dcf33f47166b25de968b2932b351b0afc488ac00b19e00000000001976a91493022af9a38f3ebb0c3f15dd1c83f8fadaf64e7488aca037a000000000001976a9147c957db6fdd0733bb83bc6d6d747711263ba50b088ac40bea100000000001976a914505aaa63a5e209dfb90cee683a8e227a8c278e4788ace044a300000000001976a9142e644e46b042ffa86da35c54d7275f1abe6d491188ac80cba400000000001976a914b166c44f12c7fc565f37ff6288ee64e0f0ec9a0b88ac2052a600000000001976a914aeb0a0197442d4ade8ef41442d557b0e22b85ac088acc0d8a700000000001976a9140e5f3c406397442996825fd395543514fd06f20788ac605fa900000000001976a9144cfc43fe12a330c8164251e38c0c0c3c84cf86f688ac00e6aa00000000001976a9144e81efec43c5195aeca0e3877664330418b8e48e88aca06cac00000000001976a914ed673389e4b12925316f9166d56d701829e53cf888ac40f3ad00000000001976a91442773005f9594cd16b10985d428418acb7f352ec88ace079af00000000001976a914ea0f2b7576bd098921fce9bfebe37f6383e639a488ac8000b100000000001976a914e3f381c34a20da049779b44cae0417c7fb2898d088ac2087b200000000001976a914c97f9591e28687be1c4d972e25be7c372a3221b488acc00db400000000001976a914f4a4e1c11a5bbbd2fc139d221825407c66e0b8b488ac6094b500000000001976a914ae6804b35c82f47f8b0a42d8c5e514fe5ef0a88388ac001bb700000000001976a9144b46e10a541aeec6be3fac709c256fb7da69308e88aca0a1b800000000001976a914a6e4818537e42f7b3f021daa810367dad4dda16f88ac4028ba00000000001976a914e263b62ea294b9650615a13b926e75944c82399088ace0aebb00000000001976a9147fa4515066ba6905f894b2078f9af7b1379169cf88ac8035bd00000000001976a91475f74467ce7214f1767406d5ed12012aa523c48e88ac20bcbe00000000001976a914f7079256aa027dc437cbb539f955472416725fc888acc042c000000000001976a914683ea8a1ef06eada90556017d44323b5c04e00f188ac60c9c100000000001976a914a58708aa98ad35c889bb36d8049bf9e9cacfd02a88ac0050c300000000001976a914e170ef514689d7230da362a0c121a0772355051288aca0d6c400000000001976a914ba4c2748360a6b66263e11d1dc8658463ca5ff1888ac405dc600000000001976a914a24922852051a9002ebf4c864a55acb75bb4cf7588ace0e3c700000000001976a91441b4b36a6c036568972380177eca2916cacd71de88ac806ac900000000001976a914cecd3ca4319651bd3afd1e23ab66e111ed38d16d88ac20f1ca00000000001976a914014e15e4ea6da460cc7835e262676baa37988e4f88acc077cc00000000001976a91417a5ebfaf62e73f149e33ba674836801f13a80b988ac60fecd00000000001976a9143b6f58a75a54bfd85d1bc6c51180fdc73299232688ac0085cf00000000001976a91405257be4b57ee43fc09762d5d3a9ad4a6e1a036488aca00bd100000000001976a9143482f8986e13c018692053a784481c63a3554c9c88ac4092d200000000001976a914692a8e583866fc9056f5c61a45969fb9d868a08c88ace018d400000000001976a914a45dae9cd5d3fde21e5aa9a95367d107267b3b8a88ac809fd500000000001976a914ffbb35a7bb9bbe16c1aa2534f7ff11d59c8e3d1a88ac2026d700000000001976a9147af50f73fd580f1713af3a6f9c5de49643ec6fc688acc0acd800000000001976a9142fcea55e6d027a2ba7c7ebe95eedf47766730fe288ac6033da00000000001976a91419ed3e03d19ddcedd5fa86543be820b3a795165088ac00badb00000000001976a914ed87120066e244ff5331d5f8625873d7a3acc39c88aca040dd00000000001976a9145abf369388deb8072741b4eb43ef10fa9388a72988ac40c7de00000000001976a914dca7ebfb78ce21884300f133d89244bc4b1b756f88ace04de000000000001976a9145318b9d7fcc93873f768725eb68ba2c924bb07ee88ac80d4e100000000001976a914a3e3612e586fd206efb8eee6ccd58318e182829a88ac205be300000000001976a9147e827e3b90da24c2a15f7b67e3bbece39955a5d088acc0e1e400000000001976a914e08c4d3bc9cf2b3e2cb88de2bfaa4fe8c7aa3f2488ac6068e600000000001976a9141a4fb632f0de0c53a0a31d57f840a19e56c645ee88ac00efe700000000001976a914da56cd815fa2f0d6a4ce6d25ed7b1a01d9f9bc6b88aca075e900000000001976a9144ccf94a1b0efd63cddeee0ef5eee5ebe720cfcbf88ac40fcea00000000001976a914edd2e206825fa8949d1304cd82c08d64b222f2eb88ace082ec00000000001976a9146b8b7830f73c5bf9e8beb9f161ad82b3bde992e488ac8009ee00000000001976a9149ea3f29aaedf7da10b1488934c50a39e271b0b6488ac2090ef00000000001976a914242d790e5a168043c76f0539fd894b73ee67b3b388acc016f100000000001976a914628dacebb0faa7f81670e174ca4c8a95a7e3702988ac609df200000000001976a9142ac1295b4e54b3f15bb0a99f84018d208249564588ac0024f400000000001976a914e84818e1bf7f699aa6e28ef9edfb58209909929288aca0aaf500000000001976a914c2c43e2b16f53c713bc00307140eaae18841354488ac4031f700000000001976a914442bd85a46d4acd7b082c1d731fb13c8474ffa6f88ace0b7f800000000001976a914b093122f7fb36d11c9f2c80cff2971fba7c9c1ff88ac803efa00000000001976a914d86f54f73e343d76dd7401639e427d828ba31eab88ac20c5fb00000000001976a9149acf9573eb7b4376beca979cfa769f0677cfd94988acc04bfd00000000001976a9140d07a05f7687824fb4dd4a160ddbdc380865500488ac60d2fe00000000001976a9146ccfd1cdb43788738536e11e247b0ce31c093f0f88ac00590001000000001976a914fa29a9264b9c18fa5925e38d201934ed89e64dd688aca0df0101000000001976a914a5169d8bc79e8cc94a36246de6bde7596cc9f4bb88ac40660301000000001976a914941ccb7383109b47b841044c9f865785676b091888ace0ec0401000000001976a9144cc856b74f1be643a3a0ac65f5399e018aed7ae588ac80730601000000001976a9142f86ddd3fac7bf830020f97c46b33aabc891e13288ac20fa0701000000001976a914e3ab5452f79c3ba677d230621f865667114ace0388acc0800901000000001976a91479b9c06f479cde2a04c871b7534f1d4706c6411a88ac60070b01000000001976a9148e235bafd009b1bf67a8475cf1687b09b23c525f88ac008e0c01000000001976a914ed28af7ebd057c69f2f9f5852fcff8da51b3257188aca0140e01000000001976a9143765ebcb90c64c4167674c8c2f35ad3d12245fb588ac409b0f01000000001976a9140cc25a433319a84636805fd00f8862aeb3fc8cdd88ace0211101000000001976a91412417789f9448e8d151699534c43c5b419e4ab7a88ac80a81201000000001976a91496d61f034c1d3db504e6c84e1d9b5e47b3bbb6ef88ac202f1401000000001976a914df9faeaaf5c84fb9aca49f923d7ae0286754f13f88acc0b51501000000001976a914aac6bf269ddce4d550f9c58eedc720b85ba1dc4988ac603c1701000000001976a9140d6e9b09e523e71ad7b9873dadee0d0bc788033c88ac00c31801000000001976a914242000d101c4c5b143c63f12ae08caa81d837c2888aca0491a01000000001976a914b8a393fd03783ac177243e8c4313a4221b049b8a88ac40d01b01000000001976a914710184e0443717cc62b086824b793f4e011b445688ace0561d01000000001976a9145e8a3a32df85af78e2ce3493985ff4ae2da0062388ac80dd1e01000000001976a9148e5160f5d3f432f7421f189d1888b85ed833718088ac20642001000000001976a914f92463f967ffc9cea3e1ef846ff106b591e38e6888acc0ea2101000000001976a914b4c41a566543c9133f45361d6df089531911353888ac60712301000000001976a91401b038f889ed602266f2c6647f657713e52d8cac88ac00f82401000000001976a914aa1bda87c542102bc484b1fc54f93764f0ccd70188aca07e2601000000001976a914e982b609d7049607fb087a936464fe8915087aee88ac40052801000000001976a91408cb7331dccb902b5db0a30dcc1ba8adbd6fe4d088ace08b2901000000001976a9143fecaa5f1295e3374ef2b04a365523cfcb56305a88ac80122b01000000001976a91465c2cfc6b38650c00242435f1b041a5fb1b733ee88ac20992c01000000001976a9141262b1eb58a0e55dc874e8c2d097e6119435838888acc01f2e01000000001976a91412f5a4496acc2393b6b56408ae7b3e07b6dc9b9388ac60a62f01000000001976a91471ce182dba6c2838d69248017141117721a7200a88ac002d3101000000001976a9148621202a5e010769fb0fd1a08027f41e173c3bb588aca0b33201000000001976a91485567151f330b69bac3eba86bb3aedd8813ec2b788ac403a3401000000001976a9145aee20366a5523246e1c43dc48462878b0d4806e88ace0c03501000000001976a91489060378aec62c83cd6e20d92865cf9ca80549b188ac80473701000000001976a914230e09c32f5aa23763f8e7c770cee5b5cf4359c188ac20ce3801000000001976a91486b816944ed6fce46ca955b80897996b016f8be088acc0543a01000000001976a914054907e50b2feceb0b75f850fd764c197844fea088ac60db3b01000000001976a9143d217c047cabb55395cd9618cee124683ea5c99888ac00623d01000000001976a91430d98d22a09bf062c9b3706af3c059a72bcb787988aca0e83e01000000001976a914c2037dcac7d46e66c4e06c289c3ccd317043833288ac406f4001000000001976a91426b9a572ce3f674c9c8d3a0f15386d6848783c2588ace0f54101000000001976a914627a0fd9f1c2034f9d643a355621842288cf455188ac807c4301000000001976a914c053d1c7b2e7e27c624dcb8087549876af73aa0388ac20034501000000001976a9147cb4648719aedaf874354cadf986e89458eb58cc88acc0894601000000001976a9143fa96459d3e03e94794724b8605c9ae47a10686288ac60104801000000001976a9143649ca67657d482484f49f8f5c8cdb5222c8700f88ac00974901000000001976a91458f29e811ffece9aaf65c7a360382ebcea3a2f1888aca01d4b01000000001976a914ddd18e224de138253a990a4cc8d8e7aaa399891488ac40a44c01000000001976a914700c655d586d1a06b0185b12007a1b195d60271c88ace02a4e01000000001976a9149668f0ad5f1eaa5c8e68baf1eaa07c1ea16a88de88ac80b14f01000000001976a914096751c3cb56d4d163186085c81fc8dcf5bfa4ec88ac20385101000000001976a914f0e280f15876be99ab63c8aaa4f934f777ed369b88acc0be5201000000001976a914438993e343b3317a4833a709894145f2374a95f988ac60455401000000001976a914eb8d65ae18eba8f6a1fcffe0b37e87fa34b09a7088ac00cc5501000000001976a9149ab3633c60100b0dd631bf1c6755abaea7bc044588aca0525701000000001976a9143ce1fc3304d09e7984c5766fd1134c1e8979821a88ac40d95801000000001976a914b944142155bef6fa7280d5f7f8eae49511349ebf88ace05f5a01000000001976a91432259030b93d8f20268aaa2c5222f9366faa2fc388ac80e65b01000000001976a91457baa9ea3f683b444a06702492443a9057ce2c9688ac206d5d01000000001976a91468ffcb39707615a254428f084c859376fa7144be88acc0f35e01000000001976a9141952876e85b0e6fe7c2557c8345975fd44700f0688ac607a6001000000001976a914530f6487090bda616a7846f68160ddd886fbdf2488ac00016201000000001976a914dde3637371e3638ef51b3753c028d84902153ea888aca0876301000000001976a914eefccc98b21f6748888b7b682d9f3ead5579689088ac400e6501000000001976a91402c031f6bc39053653a093d95511eb1197c5029c88ace0946601000000001976a914fa3a7f736604e038a0a7fe5945a114467baba15988ac801b6801000000001976a914fc152109a2102e72ae6aca2192065e909170d2c388ac20a26901000000001976a914586efe7cb41fc58c651225492e5c706a3af15d3588acc0286b01000000001976a9148e11830db460be44112d0d0150016fed3117224688ac60af6c01000000001976a914fff0706a3d7d599d40406165ad0daaa0fe9dfc9f88ac00366e01000000001976a9147a0a6e15efc2350d3dd45b88d855062a810ca61988aca0bc6f01000000001976a914d1a7e9f072b3ebc159327bec2f9ed46362a85bc988ac40437101000000001976a9149283ba38d0bb048fb69d6aafc9a32b666f1c097788ace0c97201000000001976a91459fe4938c08cfa18b39d68a376ed2c065a98a55a88ac80507401000000001976a914c9481fd7d3d294113c5e53990d9451e32844c0ec88ac20d77501000000001976a914ba7199b9bcac99a8ee39e6f103ab3cb049e7dd8688acc05d7701000000001976a914d9d7fb9cf1d10075b0515591e2570c7efabc80c188ac60e47801000000001976a914232eb8ef367fc06217fbaa43848df87567b2696d88ac006b7a01000000001976a91455a4cc2020c1769dce6c05e560bcff5db9f27f3a88aca0f17b01000000001976a91477ac8098d4726a592aed489e3880c23cfaf719ae88ac40787d01000000001976a91404b623b48cc42741d0c9ec3b1fa297664bcec49b88ace0fe7e01000000001976a914dbeecf6406c1569a483a88e35ed349a521a414ca88ac80858001000000001976a9147efd9baf1d6e21bd5f920e7e9e468b5a45ec92c788ac200c8201000000001976a914c3a2d618736baf0d5df7d81d5b8235cf8a26644888acc0928301000000001976a914e9e6a1ad0ddaf3c372e2e1eae83c8cf9f9163b3a88ac60198501000000001976a914460528d920ce045d9f6fc319182960707b24806488ac00a08601000000001976a9149d77f8bcfd56b6a095703aae85bbe003a9cff5eb88ac00000000", + "blockhash": "0000000000000000188de542fd76b1676c4be6c380b39ddea119358c290cebd7", + "confirmations": 631900, + "time": 1421345234, + "blocktime": 1421345234 + }, + "getrawtransaction:092704c4efb9b499c8aceeba1dcb02e2d6abacc180dc9ebe587408a0dafa264e": { + "txid": "092704c4efb9b499c8aceeba1dcb02e2d6abacc180dc9ebe587408a0dafa264e", + "hash": "092704c4efb9b499c8aceeba1dcb02e2d6abacc180dc9ebe587408a0dafa264e", + "version": 2, + "size": 13873, + "weight": 55165, + "locktime": 0, + "hex": "02000000000101b6c1cef24b6fb1a2c5d27ba4c819721fc986fba45851069083e6b060e127a3df9101000000fdfffffffd920122020000000000001976a914636f47e2c621334105e0439fa32fde9da232f3d988ac22020000000000001976a9141a36a6499a68baede161abde7a9642fa5fc98f1788ac22020000000000001976a914165ca6cc2fa7aa4bbc9ed9dc8d77ec152911b86988ac22020000000000001976a9141906411fe3400b6ccc4801d95a0206394c3002a188ac22020000000000001976a9142a5d6f86c3d5050a9875080c7151036cf61e24b988ac22020000000000001976a914348e804b56429002ae37a0bda737c05f9dad271788ac22020000000000001976a9142ac80f89a227d84acd87d00257eb530576a0a9ba88ac22020000000000001976a9142d75f1ee0439f01aa17a2576b7fb838ecc53521988ac22020000000000001976a9141d66654e06f9a26d372d304d03befa3ecbec9e1888ac22020000000000001976a9142c22081f368d26baaa91e33bed5b48582438948b88ac22020000000000001976a9141559d05668e6587b25390af37e39e0a45c7df42f88ac22020000000000001976a914235971558f790bbb8baeb4441c1d836eb961188d88ac22020000000000001976a914221cfe010a44eaf1af14c019d39f7587021af92488ac22020000000000001976a9141b05e8e969e144cde626dc8bb7213bcf0ab56e3e88ac22020000000000001976a9141d27a6130cde6495319dcec15c5aaaf43f8c8c9e88ac22020000000000001976a9142d71a745bec1c4b29b2600e21dee299a03df92d088ac22020000000000001976a9142ea245fd75a8dac67e821e55b5ce04bfd3262e6188ac22020000000000001976a9147450d5cd6e1def5af529c2b4e2c28157086a3f9488ac22020000000000001976a91490f61c65a04eadd97931f18106559e5b1914885a88ac22020000000000001976a914866dda7c90a6a34791aed55eec505c04a927690788ac22020000000000001976a91441f57e245a44e64ec38f6eacf0778b8261113d9988ac22020000000000001976a91454a02d9e95109360508c0fe824ebfd1c182384fa88ac22020000000000001976a9146eb8658bbbc264972a47d71df59b23485b7581a488ac22020000000000001976a9143d6d464f62299e242537ebbc67d6c1cbc0bda2b288ac22020000000000001976a914689fa186f3b3326e977e4117921e9401f37ca56388ac22020000000000001976a914a18be654ad730fc6ce2f4009ea7f426be7e346dd88ac22020000000000001976a9145576db8ec589111f4e44bc9dc89666b1dba4230b88ac22020000000000001976a9141b2a62e570d8f1a185a68a666bf7a2583924bb1888ac22020000000000001976a914f8fa6395e704ec3e2b7ca3637e9ab14f1e2c69dc88ac22020000000000001976a91449c0e836a0bb1e176097e6408efe6cb4c11a98f588ac22020000000000001976a914a3c78d275195f05766a9b497d7838b27bacac77588ac22020000000000001976a9148a10425680fa4605ed90adc8c1346084e83494ce88ac22020000000000001976a9141c0cfc223867f20e306f8e2845856152d91ff40b88ac22020000000000001976a9144aae6baec163d710927ebd6f9602f539ba4be84c88ac22020000000000001976a9147b581609d8f9b74c34f7648c3b79fd8a6848022d88ac22020000000000001976a9140fc9efe892743dc6d9119441a886af611f405a2b88ac22020000000000001976a914c1c6cb1b7d3c5a3f1dbd79ebd80d29bc6145e2fc88ac22020000000000001976a914f53df66f5e17b079c23797271ad75d35c2023c1088ac22020000000000001976a9143d79b9ac9050c4ae33238b623db8264b2b662f8f88ac22020000000000001976a9144c4b07a2e6c4e6b9a2d38b4ef2558f7d1382079a88ac22020000000000001976a9147e3efc0e1a62511751050706d22e48757d3db74588ac22020000000000001976a914363faf198944a43f02c1f85b9f2724be527eee6688ac22020000000000001976a9146cf1b35a7ae2b3ef4cc792cde0de917230ecc39688ac22020000000000001976a914b7d2d71d27c711f5f24dfd595a7abee6f6f90b8b88ac22020000000000001976a9148288ba4d7ef3a8e3671a8f57b9254673a20296aa88ac22020000000000001976a914de5d1feaadc9ff4bd7eb8bc2d8ca4ed693848a5e88ac22020000000000001976a9142408eab57193709b12b8a732a2ede4505fab2d9988ac22020000000000001976a9142a4f2ea87679cc4cf56763647dc35a2076f1576188ac22020000000000001976a914ed3319801afe50a7faf126ed177bff9667b50c2188ac22020000000000001976a9142cd415612027d5280ee4fbb28b94af539787248788ac22020000000000001976a9147832a94df69a5c8964ac36f8baa73743b6a8040888ac22020000000000001976a914a1587c8e23796c3ecb9f97697b9faa7d685b17a088ac22020000000000001976a914c9c8268bb8660814c8cd137a83440a992f746f5188ac22020000000000001976a91436896b2798eeec0fc03c95b52a357448ed0dfd4688ac22020000000000001976a914f73e287a597be9f69bcfc8159ada66c1aafe4c7588ac22020000000000001976a914f2339cd09bd4cb7a4610a9678837f7b1e49bcaa788ac22020000000000001976a9148f46f308b44651dc1f84c2898a707f693453e7e788ac22020000000000001976a9147eaefade237ecf20cb235ae35ddb95b1e5e803db88ac22020000000000001976a9140c5ae026fac9c78b49eec9ae67a4d6c9c7cb7c5088ac22020000000000001976a914066ba995c51581171e34e2276275c377749d731488ac22020000000000001976a914a0128c202d3371cbb0c577b7b054d75ae90fa52f88ac22020000000000001976a914990a614bdbfd26b3e535eefde71aab01321e52fc88ac22020000000000001976a91445ed040fcda2371e0de4269d36eadc4a47bce3a988ac22020000000000001976a91467b75e5187c1e33ca994efca011f56db7f84efaa88ac22020000000000001976a9143aa550b52979309ad049c275ec531b687cdec77688ac22020000000000001976a914fadec86597a5615ae432ec213aea91c0e842338388ac22020000000000001976a914e47eb666d628d906e4acdd1d4afc3ebfe9d5b7f388ac22020000000000001976a91470c44247959f48714d7a27d9c1922b9e8c96749b88ac22020000000000001976a91433f197b4ac7fc165338e577825cb28f729bd4ea588ac22020000000000001976a9143591c75e0418459ae81a5e7ee1dcfe4f696097ee88ac22020000000000001976a9140dad76b342bba5e6cde15dd153bc5225d64e870e88ac22020000000000001976a914c940fb39d44ff8c657a05e7713d74b76fd651a3788ac22020000000000001976a91462dfb4d8493e6b7a90b39b7ffe6c0974e4bb423888ac22020000000000001976a91400358a91768ed951784617dcf2208cd37494c2b288ac22020000000000001976a914bf2b2bbd623927b3f194c799b9b9830cdd6f1a0688ac22020000000000001976a914fb3e12e3161acc9b676deb26848d414c49eb380788ac22020000000000001976a914bf86d03f850ab945aa44628ac5a0473249b9cba688ac22020000000000001976a914990d13826fbbc392a891d9831ab90aa5c2f0cf2188ac22020000000000001976a9141d4812479ed47ecf53504b8ef30a7d38e1a7c8b888ac22020000000000001976a914482bb0b8f14aa24e50f18d2527046e413bb315df88ac22020000000000001976a9140535e3f9d1348e6b4600f4502cf0f2dcf18287f188ac22020000000000001976a914a7e6859bf8a6a97b383af0aaae9d3a5c9032ef0088ac22020000000000001976a91449b17951aeb02daad1aca76cbe0ff480ebbd1dfb88ac22020000000000001976a9141c7573bf28da96b9ad2dcb9bc6ec58db27e73d6d88ac22020000000000001976a9142bdf6a08fa9ff4682d357967c82fe84d30afe77988ac22020000000000001976a9149bd603549284f3a413986a6b5db08a90ef39e4f388ac22020000000000001976a9140088404a6726cef2350758cb98b0690d680846ca88ac22020000000000001976a914ad56997234a6de507f84696117dc811831984f6f88ac22020000000000001976a914c798ec14594511a76b87a1e936984857aded6f2288ac22020000000000001976a9140d763a4b65cf3290dc6e32f14f2d85e83e2ebe7b88ac22020000000000001976a9147215adc9892fef8740d8cd9b56a816c0c96ea05b88ac22020000000000001976a914749d8995eb72ccc50e77e7c1442184c5de70aed888ac22020000000000001976a9148c02fd5d98da512bb287ed793528437a35e4823488ac22020000000000001976a914fa13f3431203ced552702af62bd199b7c16c533c88ac22020000000000001976a9141702f435f0985e2425f41ea14445513ba8d718b388ac22020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac22020000000000001976a914251d09c140e5ffd8a2f867503c090c85ffdc063c88ac22020000000000001976a914acbf9c3dea6f2ad29fad5dbc4da6cbc3d7d3643288ac22020000000000001976a914e2b536122178b79b67d3fc1e22f114033b4a5a7b88ac22020000000000001976a914856b377d49c37314bcc18839d20f23d01d9f32ba88ac22020000000000001976a914b87c29a45dcc2885e8877f5edb6ee434af59ccc688ac22020000000000001976a9144726b6d8b8d4f9dff1ce92e7c04b5aa6e8eca2a088ac22020000000000001976a9140a965e4d56e56dd9a152faf342f5de5d428847f088ac22020000000000001976a914dfdd7539f2ace8a602d072ad986bf7bd7baa1d2f88ac22020000000000001976a9141f79370bb10554c3a0b0de5ce669117a4f2dc49788ac22020000000000001976a914c6e78f3f8ae38454849da2f9e3fa5b38a18eeb6688ac22020000000000001976a914164279ac78d463d7b1e2f35870f3ec79acead72a88ac22020000000000001976a914e108aa77839a42288e5eebd900aba0f13159ba2188ac22020000000000001976a914c036b137489f4018a86ccefb5958c5afb341035188ac22020000000000001976a914b4711f7cea392cb19120f50ddb46b0b51e0a4e2488ac22020000000000001976a914c201f40d2b14170b4972390917bf63e4c217281788ac22020000000000001976a914d39c0439284f4007990d88490e51c9b120c2ede288ac22020000000000001976a91499dff4915d45f39ad9e2020ecd9e8be27149c32688ac22020000000000001976a91453010a8ef1ad523f82d92e70c6166511f6f2f8f488ac22020000000000001976a9140b47b24b1b6dd6b6ef6fc9c2ddf962b7fd9ebce088ac22020000000000001976a91472c69ce0d7daafa26d56704172a15916b369940488ac22020000000000001976a914596aef525ebe05e66144d893aff5c053b7e7b42688ac22020000000000001976a9149591db844ac43b8be42f5c23ce48265de85b881f88ac22020000000000001976a9149b3e55c680309a590a9b319b584c6823a7033b4788ac22020000000000001976a91445110199352e60642095c72529405ca82803ee4588ac22020000000000001976a914f91a2655cb31715335f681237750d22c190b401388ac22020000000000001976a914005ba56ea6cd3028f76fc561c9d2e76ed568619488ac22020000000000001976a9149ed5105915d3f36e70d9b650b7f106e9b4dc219d88ac22020000000000001976a9149c9294d0eda27d418c207a885119c33d8ed6495b88ac22020000000000001976a9149d1f14f3830e16c13648676d91163d9b6a1bf13e88ac22020000000000001976a91453eeb328763194df9ccac165d24fbe6a1c73137688ac22020000000000001976a914f2aea28d39a684aa54a2c4bd9c3ed84c4844a64d88ac22020000000000001976a914902e1cbf7aeecc3cb512165ada1654ec1498bacc88ac22020000000000001976a914c54b5f8e810bf1cd36adb1f7de9d5d540695ec1c88ac22020000000000001976a914ae0f55c306208a4cc1448432e6aeabb3353101fc88ac22020000000000001976a914636e28e48f475852bfdf4a3f667cdc375fc0002188ac22020000000000001976a91465ecbeaf3eb4c63da465ca1e6e29fadca375bc2a88ac22020000000000001976a9144b60e99cc578aabbd52572df75be9ccbb2d40a8088ac22020000000000001976a9146f6c4d0a32c08b2b5fe729c2b3d2d2f245bb309988ac22020000000000001976a914d9ff8a819ddd30d58f8c87c6e1165dcbe692c8ed88ac22020000000000001976a9146eddbffac833e751740145e8b27b2b6bdfe3670a88ac22020000000000001976a9148d2f618b64283dd5ec31035e37ab1cc634249dbf88ac22020000000000001976a91402704a7425d828f95f36e6a7a1a26c97c3a90f4088ac22020000000000001976a9141357107e81dbbb83c236b1f00225483440e89b7088ac22020000000000001976a91446e823631877b72ee66885e5ba246b6d4d5b3c4a88ac22020000000000001976a9147482f56a14dd12c12243605ae1ebd77eff91e8ef88ac22020000000000001976a914877717568a7e1d716aa7c696f2db7a6b4b79ee5788ac22020000000000001976a91468ef84bc633e3d19da4a832afc73f6be8438629288ac22020000000000001976a9143173f0d90eb54c1ce7bab7afe8f543d03fbd425088ac22020000000000001976a91409f409914c2946fd165f7d489cb9a273d830723a88ac22020000000000001976a914e520f25341f5e89e743a6a3a335090ce8ebddca188ac22020000000000001976a91433b1cd0ef3d02abf101142901a4e0827be749bac88ac22020000000000001976a914febc63836b7ef9b4c4e661fd5108524bcfb0a38a88ac22020000000000001976a914301f6aa9f34c1e90e3d07ef37ed84defc7b6a52e88ac22020000000000001976a91435289c7be1fd152053351e634aaac498ae03c6bb88ac22020000000000001976a91438a966700f79c1887d4480ec1b590d56cca4cfd188ac22020000000000001976a91436c489b80847ea42da10a3f0fa2402d6e2a7c4bd88ac22020000000000001976a91437130f501558a09774a51469fe4e01e2031791d088ac22020000000000001976a91436451ace467a56cb962b878f205a8ba2b5f26f9088ac22020000000000001976a91436dac75e09a4485537bb7077e0bd2b5609b9723788ac22020000000000001976a914356d4dcf21211bc09debd708aa32c41db6d7e64488ac22020000000000001976a9143110b8c1ff0a4446580e28519b50d4d92baa31d488ac22020000000000001976a914316e09a69cd0bb8413006a04711e894f5ec35d2888ac22020000000000001976a9143036a8e803aa91f48aa4b24aca870c12e66d62a788ac22020000000000001976a91435a6cf3bfa88a360292a32d18e5b059385adbbd188ac22020000000000001976a914309dc53be4b5619e5be028645c27c61fc486154488ac22020000000000001976a914316cd64a58ed563fa5211f3ab97c5ac13fe26ff588ac22020000000000001976a914364bec430d129d04125789a6a3013c767de7314988ac22020000000000001976a91436ba14b7670a53056fc497b7c292f0afd222504188ac22020000000000001976a9143217240a81c1427aa7d0a0071018f6d9fc316bbb88ac22020000000000001976a914353eaba08ecd723a195d297b654d570c981bdee288ac22020000000000001976a914372737c415b4f9f7ca117528c2c5c66eb2d7b51d88ac22020000000000001976a91435cf4c09f53042f1c38ab22b4153c34bb98f2eef88ac22020000000000001976a9143d8c5ce0cda43422e870657480f51b335b72bab888ac22020000000000001976a9143d301536c26a4b0b71fa685b4348e4d9ffec1b0e88ac22020000000000001976a91431d7acf1277b166fcbee555b7a7344a4ad256ad588ac22020000000000001976a914373a07d4d64bf4770baee249af17c36ffcf8d4da88ac22020000000000001976a91438420829a9956ddf67b3bba8666900d5fb3f985288ac22020000000000001976a91436c5e4db81b4cfb85b1a3357d2456872ae23c4ea88ac22020000000000001976a91434b9bbb6f8493c5015a3cd0a6f93bc20c8b3961e88ac22020000000000001976a91430cf83c215247aeb6215658b13c417d5ffd6450588ac22020000000000001976a91435ed323567d34132dc83b8fe632ac2cf64e7f04688ac22020000000000001976a91431999b44aad8b2f7954bac7a7027df8e1aecf5ac88ac22020000000000001976a9143900f7f83f3b433ad76d1c0a536d392feaaf3d8488ac22020000000000001976a914304cd28169ea74fc622444c938b79c0b566882b288ac22020000000000001976a91435004b909d80811e70bb98a00447d7aa68f8461988ac22020000000000001976a914361bbc1fce7e9278d7ee013057ade43df34e5aa188ac22020000000000001976a914364898ca345e4d8113c34dd59c07b6190c37272188ac22020000000000001976a914305b441b6fb6e9bb635b4779bc174d8e737cd68888ac22020000000000001976a91438b98ad009408cee0d1c5a2027ca6b2abda343ee88ac22020000000000001976a91431208017d8c05c755027000ee0da67aa6d55fa7f88ac22020000000000001976a9143591bf76112442035f96f36f6dbc15f2a8f41f6588ac22020000000000001976a9143738b74b0d9727a3913e7961b3c2deb7b509891f88ac22020000000000001976a91435966d01d18f321412504759fb58b027c53198fc88ac22020000000000001976a91431a11a8c753f77519444e67e7304de3727b94d3a88ac22020000000000001976a91435216535c2bdc4684f6082bd84813fe937977b0f88ac22020000000000001976a91436d0bc15f0aa005b834797e50b8513dfbbbbff8c88ac22020000000000001976a914308544a1fe7aa28d2c7a75dcf53f7d5e20e2943c88ac22020000000000001976a91435e0feaabe5ef937de480d286e7fbd18289304aa88ac22020000000000001976a9143601a8ab5fdadbc26648d32755d55e3880e886d588ac22020000000000001976a914020ae29d2910e939c5d477e71ebcf4fb4def634588ac22020000000000001976a91428d3ec6a63d471b47d19207cf523c82b5e0e384c88ac22020000000000001976a914a3c80910c3ab21845765836bd57e537699bd83ce88ac22020000000000001976a914b9b352dfb37c998e8af7c6cc98f84c9d630a25c588ac22020000000000001976a91439490e5f469a263c14b1706bbbd13ffafcf51b8588ac22020000000000001976a914bc42bf24b0b89b3a41c40d79867f3033689e581188ac22020000000000001976a9143987ba00dec2176abf56db193110907dcdf742d788ac22020000000000001976a914035432789bbabd196d055ac07c7be843f9fc836e88ac22020000000000001976a914bb3dbdbe634c0661b7ce2eb058ab96a1c026e02a88ac22020000000000001976a91402bfd859482e9333115fe3b497ee153f4b7159d788ac22020000000000001976a914ba6c85d9810b903d1b307cb68a74f9f3707648a988ac22020000000000001976a914bb3a630629218c8a5e5aabcd7b3fceee00c3b3ad88ac22020000000000001976a914b91ed63a741e0c57d13f2372b1f1723b5c8bc1c388ac22020000000000001976a914b4fd0ee6638006116bc8fa70cef7566ee145d5a988ac22020000000000001976a914b4a2935a3e048ffeee4e202193acf0aaf91c8ccb88ac22020000000000001976a914bc2e5e22308b7d652ecf0cbaab03ea098753b99788ac22020000000000001976a914b48c851a1d573b01c7ae452b3502c096c9395ba688ac22020000000000001976a914b5815af5e62b363c01ad93749b6bc1f248e782c588ac22020000000000001976a914b42b91d026498d943d63d67fb3d9b5485e8cc8eb88ac22020000000000001976a914a3f1e42aa006d007ac3b87922906c5182d04284888ac22020000000000001976a9149f4d78d3c77b95d7a47b8f0e4d5d031e0b3938bd88ac22020000000000001976a914b8cf25a58461bf1e6f0568324637fb03d5b3e87d88ac22020000000000001976a914bb9f185432378c0860af0e5624478e6ab651c1a588ac22020000000000001976a9149f5d881549a212c53f8843e8a489f550651c617588ac22020000000000001976a914b488555eef21088a81dd2818816d94d7f250a0cb88ac22020000000000001976a91439322e1fa6dcd27bc789833d75edee087a00951b88ac22020000000000001976a914bc625b85dc4273f898143ade8c0d616c8c9d3d0f88ac22020000000000001976a914a4399b1a5020d32cadc91b2402f7f7f69180f85588ac22020000000000001976a914b9074db66505a133e55a7f449163ea17f384237c88ac22020000000000001976a914b58d58a334c8649132fc674c64f5438d76cbb4c988ac22020000000000001976a914b52403e9c1bbb888d4cad7007657945e447abb8788ac22020000000000001976a914b50e24229d46c7211a51737fc5e507dbf5c51d3f88ac22020000000000001976a914b4a89053e589e898447a47c59fe98aa8898503f688ac22020000000000001976a914b9a00affd20e7569ccbb0ee76fa3b91782fc1cd488ac22020000000000001976a914b57e608e76810c1099c443d1d497a40154ef0e3388ac22020000000000001976a914bb2e4be333948677c6b76ebaf85173f518af914d88ac22020000000000001976a9149f44fb8201f51a011626872a55585266a1e0234888ac22020000000000001976a914bb59ed58ac5f093a51fe9331c1a6971a17701ef088ac22020000000000001976a9140749f0b7a586033c8d5a78b2d8717795cba5eb3c88ac22020000000000001976a914b8a0525c641489ab8822b00c49c59cb8f225df3788ac22020000000000001976a914b499bf0d71b6a55184ff39a4dffdc218bbb32ac288ac22020000000000001976a914b540c33a8cd023151daec211d1a8942777b9204d88ac22020000000000001976a914b485e4bfbe3dc6a38b99b3431afa53fda1a098c588ac22020000000000001976a9149f50b46e832cfa39f42574599acedec0f48feb7e88ac22020000000000001976a9149f33cfd2ef89f261f6a83650c49bddfd6cac793888ac22020000000000001976a914b465752bad661ab482927a4d7826e8ea4779411488ac22020000000000001976a914b94e3aae244d071f313909b269e1a59f1808aec988ac22020000000000001976a914bbf257dd37c2c7aa24dc7816990787671c753e1f88ac22020000000000001976a914b5793ba16bfeea033a5941052c2e3a6ac581fe1888ac22020000000000001976a914b9600de53dd2c93551dc8930e7a894739a083a1488ac22020000000000001976a9147c2fb351c2a0f1787915b0aae48e00d2d3e091b688ac22020000000000001976a9143b27bfe0159020708bc59ed5097aa44904a3ce4888ac22020000000000001976a914a1770af930c96cc325e6bc7659929cb45dcc9fb988ac22020000000000001976a914de1997d8601ebda58a73224d2aa1f159a59c8e6b88ac22020000000000001976a9149abe76a2c6b51e4623bdc8f292070d867cd750bd88ac22020000000000001976a9142ce95d001bb54ba1f77a3fbd737af3a0c1a63b3888ac22020000000000001976a914c2ee45948e913c51d81ec1b04729f938c4c5527c88ac22020000000000001976a9145ab2245bde178f271078eb67e7c9547d00f329eb88ac22020000000000001976a914925848b89f3d153f3c760b897e27c046e99f270c88ac22020000000000001976a9141181e7c429190835b5e199827e0b1bedc3a7000488ac22020000000000001976a9143bec91810a7e38a8e40f8a90b768bc0d6eb1897c88ac22020000000000001976a91425b1a1a6d47bec515d4136958601b8ccac8005ca88ac22020000000000001976a9142c507eeb05e0587661e29b8dad6e1924ba655a3188ac22020000000000001976a914252a67d7497175dad99b34fcf8ce35ee1a9d6b8b88ac22020000000000001976a914e2abee39f4b0f6a90616c0aafc29e1bcfd3ead3988ac22020000000000001976a914322b326b5c5d3635952fa316d6442eb4b136d87388ac22020000000000001976a914e7a7690e0d01af22eb980fe470dc7e96fae3459488ac22020000000000001976a9143ee36f63368cdd226fc03a30a48c358bf305e59488ac22020000000000001976a914c068b2881bd002e6f8c4e130405b280cb002f6f188ac22020000000000001976a91440c03f109ee14ebaa5a1284726032ef6bb449fc088ac22020000000000001976a9143a52403d53dd4a7bf9592d0aec348a5a90cf75d588ac22020000000000001976a914b7b4dd5da3c03ee3151e527c99286a379c021df988ac22020000000000001976a914e2ee991c0120d5ec8d86d37f31353b6e02ac095088ac22020000000000001976a914e359e05f9151e96e8905d4ef8d76fb9945d9dc0c88ac22020000000000001976a91495964bebc2ac47c3845e5ec167d748b9fb5324f388ac22020000000000001976a914e1b81e53512f86434df36983063a3e78a80372a288ac22020000000000001976a914dfbc1ec72f8dedaa53e1fe0c24b6e61a40bcb9b988ac22020000000000001976a914e087ebbc4065ce82e4e5a5d04c7d0ca7728a962d88ac22020000000000001976a914a0d62a5f296d4770805103bc9a6fe8117cd596fa88ac22020000000000001976a91499e590814a44ce0f73a2b4682289393641e73f9388ac22020000000000001976a914b3076a7b077ccd798c5030201229a3b48484602f88ac22020000000000001976a914df77d14d66d3b02d7811209f29a56904639e624388ac22020000000000001976a9142c6611e13b8a325c3c2a7bf2bb85bf22f21bb59188ac22020000000000001976a914e847a095f1e274d8d1ebe5e554ba79342c69e94988ac22020000000000001976a914404a782a445cf6aa25db708fdff6a95777cb39ef88ac22020000000000001976a914de15f8d8412968b85c65d683acf86dcee5a6603388ac22020000000000001976a914a2b70fe868cccddc5ecfc724d16aa0e005b26abe88ac22020000000000001976a9143483a13057aebc406ea6df4282995dc2897fe88388ac22020000000000001976a914eca40323d7d0f916c663fadb9708c4d19172ce7288ac22020000000000001976a914b88ce185c8fab58f38edd884450100f7c49fb1fd88ac22020000000000001976a9149e56bc58402291a51411448ded1ccc62b569f8e488ac22020000000000001976a914a1be2f8dce447dac272df789cddad654abd8a60788ac22020000000000001976a914dd3dfbc1a6e3771a1b289cb458ccd1a58ff55f3588ac22020000000000001976a91427109bd3bfcb4c331cfbf377d9ef7b2fe427144688ac22020000000000001976a91491c335c9d29133b93b0550ef53098ecac8ed90e288ac22020000000000001976a914c5323d9c11a19d91cbc4413e0e830c907e4bb04c88ac22020000000000001976a91432c9a5bcbcf38cb43f7be32a615f6d15074576a288ac22020000000000001976a9149427844e41b97e424cac6a137930d92c3bb25c7988ac22020000000000001976a914df174820f7ce0e3ee6715f5d6bf4f0f2cd55b9ec88ac22020000000000001976a914e41058c5a5b8718f8372166b375684e2f7eea73f88ac22020000000000001976a91492905dd8148a013d235924c739f065ffdbff611088ac22020000000000001976a9149c6dccd0efaa94b45689b4cdbb8bb01673d5ce7988ac22020000000000001976a9145f253d1d48f4062b8e47f8557f069122c22feefc88ac22020000000000001976a9142e1267a74420cfc32c0b1c170d66d5262a0a993588ac22020000000000001976a914b23b40e6cbf06faf028cfc56a78d14b75448c9f588ac22020000000000001976a91453aa150a1655d3e1f4bb6f17b649ee852842f37088ac22020000000000001976a914e523cb0e62f7d3265af32ebfdfea79498a507eb488ac22020000000000001976a914ddf6301dfb430957a0d9af4eec60a20b488005b288ac22020000000000001976a9143ec8b1dba6a6140c068afaafb0db9c61f9d5d83688ac22020000000000001976a914aaecd63269f67ef581b3b6f95685b67573abdf8888ac22020000000000001976a914b33382efe1e6026c99419d68668aeaf9c7ebd50a88ac22020000000000001976a914b7a77cfa6b903fc4d175858d6aeb25b58545871288ac22020000000000001976a914ecf1e01827919f1649bfd7b397f3a24b3f6c7f9288ac22020000000000001976a9142bc3628d5a0dd80e570dea158c43f05f0ec1ba7b88ac22020000000000001976a9143ff09488baed38d147f27320bcc20989d27ee27f88ac22020000000000001976a9142bfc660fc4b54f62f72b1c43dfc487680b5904a188ac22020000000000001976a9145f35607b0880fd8197a0a210fd20330b875f034e88ac22020000000000001976a91402c92dd3066f7f12143ba5b6cb409b8ed010466388ac22020000000000001976a914c1ff6553c79954e729dd0cca071082ee4beb1c8f88ac22020000000000001976a91402cd6222cb74e6aae470a09e5a7d34e7c7444e3c88ac22020000000000001976a914c200c35c38824a53ef1743abfef42a246a1f446e88ac22020000000000001976a9149c2240ff1555872077ae5a0b93bc3abdd3feabc588ac22020000000000001976a914b38ff71454ba58b2b685c8b176039350adb957c888ac22020000000000001976a914b69bb89c674bcd622af17a11dc85db8943b4e04388ac22020000000000001976a914e0e90b75d0169e9f38d9de7297ea9a5a19eae69888ac22020000000000001976a914535bd4c5cfcd76c009bad15a17975e3a20bebbf788ac22020000000000001976a914e5880d6b6300dff24645a619588bc38e6bd2c7dd88ac22020000000000001976a914ecc733ce3400ed6f42ce0df6cd65081609caa9e588ac22020000000000001976a914df379c28601bd450a1d34ffe1dd407483ea44bab88ac22020000000000001976a914986be8dc33a70672c56402d9e17e531878b5d3b688ac22020000000000001976a91467f8c735e40bc3da6725b66609b55bb538ee8e7388ac22020000000000001976a914a26faa38cb92ccf75a16d644832b04194af2f05b88ac22020000000000001976a914e4f44d089e464980fc632cb2c61cda954f274f1588ac22020000000000001976a9149ba141ea5f3f77296380a25dfe3869654723d1ec88ac22020000000000001976a91499bd9cd6976a93f1f6c27e0a7971cbe04880d42688ac22020000000000001976a9143ae8f47a9bf02874a3e305cf4100c987790158da88ac22020000000000001976a914b34881231d2589c4e87a31bda9e40f60a196368b88ac22020000000000001976a9149daa04528b3aae6097dd5e81be594e51c9adc88288ac22020000000000001976a9143bc6bc54ceb95ee491d51e10ee5855328f106e6188ac22020000000000001976a9143e93fd1dd61f66e8a049a7777b47d02799d9ec0788ac22020000000000001976a91411e223050ccbdf9ffc0ddffae8ab12b2654bdf9c88ac22020000000000001976a914a274bd9d5f56059fc6c49faf1dce7a4dda523f7c88ac22020000000000001976a91494585750b94a5435de61881d37490bb01c33aed388ac22020000000000001976a9149436b9993c737eeb494a38c25d89901e230d44b688ac22020000000000001976a91403d73ce52a025ee54e8b22a990123ff046bae56d88ac22020000000000001976a91459c8a42bd9e47eb68cb1039262509ab1ccc3962a88ac22020000000000001976a914e7186e9f84fcf71e70f4fbcc5226f13496fe108f88ac22020000000000001976a9142d9fea88053e419f3b4e1a48da064cd40b71eb0988ac22020000000000001976a914c0639184274c768b5ccef4cd89883b2dd9994a2188ac22020000000000001976a914c1e1f06b68465eb6d128a38088bdbc9da44fafa488ac22020000000000001976a9140c1200786731a4252f926c80fd1a0b4c93834d3188ac22020000000000001976a9143ab8a72c9c2f8fb4c2de94ba1de576c932e47bc888ac22020000000000001976a914e6f8e0beb79e53b3e6542773f29839a870a822d288ac22020000000000001976a91439e422bf8b2cd8cdf1fbf44d4bdec60b4930c7e988ac22020000000000001976a9149ba546ddfcc6cc2371accbe5bea6d64a265d108088ac22020000000000001976a9140d08ecb2a806ffa05fa44a8a4583dfd1f2973f2e88ac22020000000000001976a914aacacd4060c5bca95867ed2cd44ed9b3a346fc2188ac22020000000000001976a914c09f28570489b6e20164fd534b5cc9b52f545a5188ac22020000000000001976a914a14085de325fbce3f5e80433cb6e3b013ee40ff488ac22020000000000001976a914e4953b0a2a16b314ec53327c030764482e944de288ac22020000000000001976a914c2b3868a9d16613b06f8202f659a0aa277404bfb88ac22020000000000001976a914bd55e58f788d0e4823fc7e85e1b6ae8c7ee20a2088ac22020000000000001976a9145fa4932d6cc7f0a87b51a538124790da7087d3a088ac22020000000000001976a9142a726d6acb694d8626c7d40d0551381508c6a57288ac22020000000000001976a91494684a2ae2e61a8102809f5945c7d5b2c24652d788ac22020000000000001976a914b3029e402b95bf3f483454249f7578ba6598d87388ac22020000000000001976a914e691bffd5f85f648b8e0b9e98281156da2233e6f88ac22020000000000001976a914b2e3db4732fa94ba7d918e30947d2c1d00198bc488ac22020000000000001976a9142f8509abda89169537c340afc90d157ca166132288ac22020000000000001976a9149265c2fdb8b6a0c0bb2f8fa48d5a29bbf6acaec588ac22020000000000001976a91494edf12abae9ea609d353bfcc3cd106a506b88b188ac22020000000000001976a9143e3cc04743166ce1287591b493f1482414ed300088ac22020000000000001976a9143e671287b6a1bb14682e189bb00a04bf24923c9d88ac22020000000000001976a91493033c0d182d0860bf7a4faf29e00f87185103b988ac22020000000000001976a9143a473b5e25d88da47be0aea4540531290c65145a88ac22020000000000001976a914e041a60fea35b6fa3da3c07596ebba8e8492609388ac22020000000000001976a914983a8237b39a513a67480c1bfbd9896171f2bb6488ac22020000000000001976a91459b123bb250eff95816e7c27c4a266650f4cb7a588ac22020000000000001976a9143f7228ce1f244908898d1e4ef3d017284b4e632188ac22020000000000001976a9145e33e7163a4874e43c6f61c6941c114471d3ca5088ac22020000000000001976a914dc849cd56448ce721c7fcdecb8c7cd61b8f43cf088ac22020000000000001976a91499867ed918d666ddc7532385227b30a41e0d3b3888ac22020000000000001976a9140733abda45d4a1534afc997280c2b9cf5a6611e288ac22020000000000001976a9143f466e3dc3aa68ee0368b0297e102d202fac8dd388ac22020000000000001976a9142bf3cb9152b2d0d6e42a5e831b70800f1311cc6c88ac22020000000000001976a914c13a0033db1915321e3ce9fbcf5fd139095b555988ac22020000000000001976a914dbc225254ea1cf8e99a7842179df97044d8d248888ac22020000000000001976a914bd231b48efcd96731ec07a2558d663a09f76acbf88ac22020000000000001976a91402cfe9b395194c17788097ebe0ea0dc2b2b01a6a88ac22020000000000001976a91499701869186279e8b85905674633308a8100073a88ac22020000000000001976a914c4ef2dd0f833f4dc137e956212a41776362697a488ac22020000000000001976a9145e6bdfffd49d318325765683808214b3f98cc7f088ac22020000000000001976a9144f87c89057b39f6b52ac931bd64f0fa8cfe3ba4588ac22020000000000001976a91432e6ed05d4d1a9fad01dd5e310908b7778dd0a0788ac22020000000000001976a914b26a4fdbfed2970aaf0d9dea26cb55ea625c37eb88ac22020000000000001976a914e13bffed190c7bb43caaed409bd89f6d06ce550988ac22020000000000001976a914c2aca71a5baa289173ec7df2ae948ee0b3ea314f88ac22020000000000001976a9144f73f4f19eec840c7eee51624e6f33fe45f4dafa88ac22020000000000001976a914e06ab3ca00b6a7e39f5fe1fd85c98eadced4b5ef88ac22020000000000001976a9142711d65b577fe433de49952e0507042f396a511c88ac22020000000000001976a914c462f08c8ad7050911f9459270b847d2b07d31f188ac22020000000000001976a9143e3519dde9ade66ad5027b24d5bc0ade2edc3f5f88ac22020000000000001976a9143ea68b95b19e9644e39c55b627939023d0f0ba7f88ac22020000000000001976a914b780b56454191eae252a3e21299bf4b1ce1f54d788ac22020000000000001976a914c409ab742b6691259ff37c214e1eaf8fb1250e6588ac0000000000000000476a45434f5552542d4f524445524544204c4547414c204e4f544943453a2068747470733a2f2f7777772e696c6177636f6e6f74696365732e636f6d2f3135333131392d32303236303a130000000000160014ddc3dfbaacc4f1cc2b3b327d62ab85ccfbfa93d70247304402203511265c865aa6cb655c081251edeb5775c07a9ff6ef079708ecc18a0d67b0bb0220222a494c586cd34b564030cbffe8b8ec1a226d06e854aa8997ce0a1e239720ac012103f9f7c6a59265e142b9b32b6d8a482b31bcc8d4626ece04a074b5841f1bbd4c1400000000", + "blockhash": "000000000000000000006e84a35a5b44e8765c694637ed8b2fc0d48a256213ae", + "confirmations": 20518, + "time": 1779428988, + "blocktime": 1779428988 + }, + "getrawtransaction:9b00af71e0a48823cebc6fbd6c9b9a60ab517b6b70d2e030ee61fd9be519d6dd": { + "txid": "9b00af71e0a48823cebc6fbd6c9b9a60ab517b6b70d2e030ee61fd9be519d6dd", + "hash": "9b00af71e0a48823cebc6fbd6c9b9a60ab517b6b70d2e030ee61fd9be519d6dd", + "version": 2, + "size": 294, + "weight": 849, + "locktime": 0, + "hex": "020000000001015931e3c952d013d14bc32e852002b0648e3ce719f1bf4b21818f6663c01ac88b0200000000fdffffff0324020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac00000000000000003c6a3a4e4f5449434520544f204f574e4552202d205365652068747470733a2f2f73616c6f6d6f6e62726f732e636f6d2f6f776e65722d6e6f746963650002000000000000160014c89ec8c194eaea21312746a4437a18fb201165750247304402204e0ae60ef4eaf28b8008145d0c1404ef9a8ce3b4a8e8d1de7018c989743214ab022040d3799649ffa7b2f23bf1f3189f8a982f10f897736940bdc568f60fe75e31c1012102331b1c714589d2e6f58dab1e6a7476131fb5271022855e6fdd0965232914d77e00000000", + "blockhash": "000000000000000000007c7b39331f75f7186ada5bab2e6b78a79b6a6e4cb313", + "confirmations": 65607, + "time": 1752417301, + "blocktime": 1752417301 + }, + "getrawtransaction:65916aee7913a7bf95055dfff7b198d11ecc12ecb9fa5393f2a93fd2f6433e99": { + "txid": "65916aee7913a7bf95055dfff7b198d11ecc12ecb9fa5393f2a93fd2f6433e99", + "hash": "65916aee7913a7bf95055dfff7b198d11ecc12ecb9fa5393f2a93fd2f6433e99", + "version": 2, + "size": 1182, + "weight": 3963, + "locktime": 0, + "hex": "02000000000101f7c041503da0203e29a33bc9a2755c7d2de5dfbf90b6af9f5527be5b4dc49bb01d00000000fdffffff1b3867100000000000160014847b51bb140355ec47ef35e439094d02f021a6e7bcf0020000000000160014ca346f5a23343adb01dcd57d487997b36ca8cf88204baa030000000017a9147531e918c87bc434cdaebcfdea744aa0cff1004d874837da000000000017a9145fe9e3fd898594dea78f7d181338cdcb1457a73f87a831080000000000160014bae06a67e9cf6399c0608d9966d1cb8cc65272beb8212600000000001600141a0057eeb0cca905a9a49efbfee28aa178bfe14300497f0f0000000017a91499efb6e42c8e1efeea08e8c11b356a2a3637497887f4ff260600000000160014e9c5b9b8f14984869ee3cb0ab346bded395b0609606e04000000000017a914c782dc86f44e88722412ee40b707f53619c6a1e487b0e920000000000017a9147466edad1cd9baf4df61cc55a1a62aea95d94b1e8720ed2400000000001976a91490c068c547e34ff4c92a75e6c3e81fa3e1bfc58d88ac38bb0200000000001600148904231eaa7f245cf6a9c0a5c96fdf7602a70476d07203000000000017a91456e868e0c2ac89d7edb92b7c2cc5755cfee490bc87682a04000000000017a9143224569779f327a303ff49b7b05aaa0f3611f33d87e0280100000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac189b24000000000016001406d13d60f7d2bfc16e4447b64579850c8bd6b8ae1820fd3d000000001976a914e07b29fdc9cc347539192e0aa33c67d177c6ad3188acb8e01b00000000001976a914992a21d9338dddd37a7c610a619719760e3b3d7c88acc0ed761200000000160014e423cab2144aa3abe8ded77a3d6987caab6ba11088dba9010000000016001427c60b623f372bd5f4c57f29a912e549734633aa48dc03000000000017a914521cc450e765af17e9f848e40a53b3b63f4c82698771ad0600000000001976a9148f0232256386dd406fd8bd4dede2089f7329bb8688ac58bb0f00000000001976a914a09bc944fa30b505b009d2718ecbb0eb25b145bf88ac206511000000000016001452e106319ce7f6fb58413dfa4be22086561cdab7f86c72000000000017a914d9579a75790f4f208f74affba54ef8be519b8e0e8738080b00000000001600145fbb3bfd4e1f66c58c14d8a4a4fb2bc8109f4d2cc32795440100000022002096ae07e89461e5854b88e0211a856f66d2aa777a6763e39a42ea0ecffa3f7a530400483045022100f62e8ce599f6b395d27d80e12ddf7f1340949a35c4b878fac6fecd1d92cf1017022019dd24ed68bb4b3da67958e0c9b4c314824d64e0b95419bac8f61a5fef87a7e70147304402204ce1356bb782d87499bc0916f150bb157b0cafe433b4c957902f597975429203022013edfabb5e26c490fecfb58b7f407b3c8c4b87e4cfbd5dbfd6cab15b07d1246e01695221025c72bef263157577a4e3eb4c2dc0efd368d2a7b665d51b40c55d00e2ddbcf8f22103cd6ee67bb134ea4ec9f05f4c2c486adb45f96df841662af11ec86afcb44e16bc2103be638c7bcb13820dd09a376b0673c0549547f292dabcac753b5d449dacb063c053ae00000000", + "blockhash": "00000000000000000006cd7404b981325b69c9186db3a30eaeb3e37fd8b51d9d", + "confirmations": 219720, + "time": 1661537908, + "blocktime": 1661537908 + }, + "getrawtransaction:a66b0e20ca318ff84dd5da4c099fb9bcaee60bbc2da637b912bfb73345ffc9e9": { + "txid": "a66b0e20ca318ff84dd5da4c099fb9bcaee60bbc2da637b912bfb73345ffc9e9", + "hash": "a66b0e20ca318ff84dd5da4c099fb9bcaee60bbc2da637b912bfb73345ffc9e9", + "version": 2, + "size": 13834, + "weight": 55009, + "locktime": 667552, + "hex": "020000000001017e15699ba0847ca03f0b5a9488989aa9d1d7dc817278184d1a916edc58e80f685f02000000fdfffffffda10123020000000000001976a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac23020000000000001976a914075b7dfca1465daa6f51b8497af83c10042ef39988ac23020000000000001976a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac23020000000000001976a91404d9d15e67e6f20551992e03039711e59281f72888ac23020000000000001976a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac23020000000000001976a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac23020000000000001976a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac23020000000000001976a914ae3be4abc4c3f171ee28567bb4cfef4bb47f318a88ac23020000000000001976a9146c42e1e7a5cc6298cbe98fd3ab1890621317b58d88ac23020000000000001600143a0d4f126b6022b058fc98d6faba62fc4e88543123020000000000001976a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac23020000000000001976a914aab56eaee257ced13882fbc50b8383688446d51f88ac230200000000000017a914992e7fd1b312165ba024fefb3c90191713add5d187230200000000000017a914cc0b10125327351c594fbd9de1f5ea3211aad90f872302000000000000160014f56a846749e38dd03d23d12bdbaed4901e0851372302000000000000160014be1fa434eece39c289a443c0891185e34f892c1c230200000000000016001405a4106b48a9b909e4708f0d6b70cd3dba56aeaf23020000000000001976a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac230200000000000017a91426d15738c606c1107f313dcee38e81af08ff96fc87230200000000000017a914bd060670716668c2c55654534aa281f2c910d1b787230200000000000017a9141a3f58c92ef5fe1fb1faf36652babcc68fb0229c8723020000000000001976a914aa78edd530844329915159f2c0e193ca791a824988ac23020000000000001976a914ff51a2045e512b6d4b07b2cf00314a005623984488ac23020000000000001976a914b92d99899d92b447668dd2705a2dad2d2110c6dc88ac23020000000000001976a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac230200000000000016001407ecd70495836065a9e3e8d1bf5d2254e114e95d230200000000000017a914568f34349dc2792c2a5318b046c3cdefba02d09487230200000000000017a9141ead9d0acd2f29f70ec28943a89f7b3c26998d248723020000000000001976a914aa9c17ab5726c479300d01c69499a198aff9412088ac230200000000000017a9148eb47d1832d38bb21db09a026e20af8aa991a40d8723020000000000001976a914d8fd61b3730d824ade8d9a8eebf5ac323eb230e988ac230200000000000017a914d98608245b500b7a06fcebec6bc1dc03b68a84be87230200000000000017a91478a64316229301b89ce158f4741ed7add4f048d08723020000000000001976a914cf3890eea91c255f2b088c1a360fa50cc129476988ac23020000000000001976a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac230200000000000017a914c3c432eb827dd2b012e3160fa45ca87424bfe6198723020000000000001600145425fd2d87afcd7bc9c7c01797f3662640a5d135230200000000000017a914e73413bea1e8a5871f6076d000f1b9706428829387230200000000000017a914ec2a3c05000febbc7a7e134cd93fb4d1addded438723020000000000001976a914f251420a06be6adf79ea0173fd433e30825a9d9b88ac230200000000000017a91468057331d5dd8f958f52a45550253153843d91e187230200000000000017a9147ae8b746a0d44619a05893283942a76683dfcc9987230200000000000017a91490e9eaf2b622c6a2c957a0bd286ed97edf6c84628723020000000000001976a914b476ef2ca4734cb9a46a111543beada2f102ea9488ac23020000000000001976a9147b18b02c105f05a5e0cec2f842f1c2bd8a71f33188ac23020000000000001976a914aa9ff9a44eb200b1c989fda7f95f92e2dc4f9e7e88ac23020000000000001976a9149ff78bda22aa357a14e389dcc77f3d1f8306257788ac230200000000000017a9149bdd7b34a3a73f90605f300756589b1f6db8da288723020000000000001600142f88fc7b48e7a70dba8fffe8cd1d340053c8dd7423020000000000001976a91467875d1a42af398108fff2c1ddf20d7e386aaf1d88ac23020000000000001976a91430e2e2695227c6ec784f31ad95aa9f77183e601288ac23020000000000001976a914f32abc1d4056bc660cfeb4e020e9037c840a211188ac23020000000000001600145ba2d59f473123550b132bf10e15eb48683dae1a230200000000000017a914767b93bc0474dfaf1a3e7757d9b99d8c8921232e87230200000000000017a9140b4d6b288b3ca9a052ef16968c1bfed359636dd48723020000000000001976a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac23020000000000001976a914dec9b43aba894697135f2067fda7518f9f15b33a88ac23020000000000001976a914c059ae8322cf82a9f5f4818f427124ca009d8f0888ac23020000000000001600145bb1e0498e412eefaa37ac62d2778a4e504ed10c230200000000000017a91474f1fb0411dca7f3919c43392ab2c594c04905e78723020000000000001976a914aa9b3a4a4da7fe2368746ef8df0ec2569b0057f188ac230200000000000017a9148c9b617d70c897bd5450aa56cb3d7c9f13952b1a872302000000000000160014b8d82c8205e4a39f6e5f8d89f95c1520300a5114230200000000000017a914286e901de5d809077be3139100a2b90d7de3be7b8723020000000000001976a914aa9a101d070bbf57baef0b8a4f17301e8a71baa488ac23020000000000001976a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac230200000000000017a914f5db8ed11248d26b48906ca8635f11c8fd953e36872302000000000000160014b3410e6001fbccb09e37b81f3b644cc630ff12fa23020000000000001976a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac230200000000000017a91452634d3cae32b2ad2613e9cd98e88d2c2b38a2f38723020000000000001976a9141252ee70db5d669019ede5895f6c2442a045423a88ac23020000000000001976a91442c78ecdd8dd08dac6765c2730aafc695c80780e88ac23020000000000001976a91443a4be0bcdb1de9e3873075b9c679d64ef906a2c88ac23020000000000001976a91411452b8be73d1c63619f1739d4cc372c5824b27188ac230200000000000017a914659e9fe07ce74be93cd0ae466c5642606d71f75f8723020000000000001976a914d185bf24ebadddf0bdeb15526de7a2766705cffd88ac2302000000000000160014133721d5110e4faf16300e9d96a91125ac7ee39b230200000000000017a914cf28ba8dcf55b472feafa29084a0fe4462c1a53d8723020000000000001976a914aaa0e19223e8f15ccfea98771b2f414b794373a788ac23020000000000001976a9144e32134232499d626899eb0c939580e7a2358d4a88ac230200000000000017a914b30e777c5b98e75ab323eab32568d49031ee09da8723020000000000001600146bdd9cbf9df8bc75b3ba859813e8d94b7c75cf27230200000000000017a91460524c444bdeb016e588b5342a94191dd288920d872302000000000000160014400aef7aa983c1616dcd2e46d847f9a9e4858a6c23020000000000001600149768c2298587d11719ca00b5288a77f1be2f2108230200000000000017a9142d19942114338d4badc6301d18fbfbaca97eb64f8723020000000000001976a91466fb5b68210405f03c093143d1081c8eca62d17b88ac230200000000000017a914a78da71baf05a247c256ef7cd924eb7658d1a9468723020000000000001976a914af4a5b9fe437cba4793f69c9df8c4cf3d26caefc88ac2302000000000000160014f1bb2480456be9d6f3bbf9dbff1eb0047a776be3230200000000000017a914e11db11d69beb6863b0cf4f4ce49d0c8187f3ba98723020000000000001976a914af35fe024575d751d379806e93855a3b472d154788ac2302000000000000160014dea54a0f785b15fbd4d302425c82341ce937f82723020000000000001976a914241502fdde2def412f786641009a31d85c9dad0888ac230200000000000017a914c36c3b801f97fc401043bec0a0f471698cc0d5e08723020000000000001976a914b46c02e2786a2f2028f09ccc3f5f1265a0c71f2f88ac2302000000000000160014e33a3d9fc71bedfceb17279b54fd2df860583adb23020000000000001976a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac23020000000000001976a914aa94113b2747ca73fd187fddad9ff764f95580cf88ac23020000000000001976a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac230200000000000017a914abf59fb35633235708d1126fa1ad5f355e79510887230200000000000017a9142810817059eba5fa4a58a8df2c94ab778d8314eb8723020000000000001976a914b9443ffaef7c58f3bc307201483a384543a5c0a888ac23020000000000001976a914af3964e461f41b87ed33bac7d5361256f95b4f0488ac2302000000000000160014c9ca604c6334023a1b67ea94bd59a9ec54bdf83923020000000000001976a914aa9d984067b4055179d6207694e1f02048f01a3f88ac23020000000000001976a914aa8fd9afdf033f40d7c83d967f23ea0ae01be87988ac230200000000000017a914d5b7d816b5ced951228662bcc4a50cd06643feb087230200000000000017a914e57c267b76de79d542417fe19c9bf93f7ecb31cc87230200000000000017a914c6c3079c51df289ae3214688b12879e8154582fc872302000000000000160014f5f34432b834dc48aa4667f363fd617a9cdfca0e23020000000000001976a914aaa1432d8a79549fc2b724aa560554424050c0c488ac230200000000000017a914749140baf9298b41f4d1b13c8dfbebd82320477b8723020000000000001600149417b5e90126ece9486d7c745c04547aedd9f3d3230200000000000017a9142480911e18cdf4f1142a22e8dfa04d58d368a4a28723020000000000001976a914484f9c8449a57b88ff8163bbeb7f42ffede843de88ac23020000000000001976a914885be2340ea7cc0aa2f8646137d922142d26474a88ac23020000000000001976a9145ef248eab5dbba9b3782caa6ca55704df8fbd6b288ac23020000000000001976a9147d7b036fbe1450332b3204301fbc6cc4ad27084d88ac23020000000000001600146c4931d9dbbcc288b9380f09d5781e33cc9025d323020000000000001976a914a3e1e10c49758a7e9c2e15e9daaf8443b1889b3788ac230200000000000017a914f65d73acdf6ddcff6b9fe40aa729454a798c5bc287230200000000000017a914a197190e15215de4d3b221d4173b4b958279c34f872302000000000000160014b9b6c250de156dd92689c1cbd4cb8a9b73a1d41a23020000000000001976a91483068bc8913bb8fdadff3c8c5904442af64deae688ac230200000000000017a914dbc151f2b6c63c7068ff79a0113ce4d10d1942908723020000000000001976a914b77e68177d0fef51df52370af08f530cc8e149ec88ac230200000000000017a914c6cd5de309034a67a53a4b7c82067bf6b499d3c48723020000000000001976a9147d9b7721645c954c0f8d2f96637da98b036c317588ac23020000000000001976a914eb233a91b56c6162468141e70256722ca9217a1788ac23020000000000001600144160e8618d37a1f27498242a1bd80075d2e70c9f23020000000000001976a914226c48bc72d3dfafe447f6448a6d09719752345e88ac230200000000000017a914d5dbfb7d92954088b0c15968da3095adcbff19a387230200000000000017a91488eaa986e2e8760cc55e33a8141403df77149cb487230200000000000017a9148aba7dfd8e903b1e1a63288b1deb2e41f54eb5df8723020000000000001976a914dac7c548c756a85284be4bb8d3e2052ee337a6bf88ac23020000000000001976a914b46cad8eac9bb05ca9d48fe1719744e2a308fa7988ac23020000000000001976a9140791f1f6600311c3043e4e247050833567bc2cdd88ac23020000000000001600149883ce0475d016f46a6c3527031cd6a855b7cb3f23020000000000001976a91446855e33a25dad1ffb1721630dfc9ed1749fdc1a88ac230200000000000017a914d7727d827b4710d0e0fbe0cdd70833753b63a48a87230200000000000017a9145d2a302a527611259882c3769ee0a7cf95441c728723020000000000001976a914b46bfd52f887c82b5fd12ebff231458c285b193988ac230200000000000017a914ad3c209f26ba53ae02b317e916023096e18cc0f98723020000000000001976a9144d8fd85dd9b7e77fe260448faed8304d8520350788ac230200000000000017a91424ae1b894ff06207328309245443ce33065a50b78723020000000000001976a914b98a8b0c1c6383fbe6c310bfb62c5789d01b420488ac23020000000000001976a914aa795e316c7d8ca9f01e944ca02df4d19e141b9d88ac23020000000000001976a9142b0d59ca2398d0f03f41096f2662671ddcf3653c88ac23020000000000001976a9149bf974ccd7e2e335f3da0934adbf480b680b01e088ac230200000000000016001494b9d21e4689cfbc1ae63c49d9bf5270e182be1a23020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac23020000000000001976a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac23020000000000001976a914b4575eece4b9b7cd71c002fb9e65466d0b632e9288ac230200000000000017a9146833e9da97b0f32501726cb9fb84ee406ce93da187230200000000000017a914b68f80cc562f642d22ca33138df21d219545c9c587230200000000000017a914f0f1b973b9b4f11a5e95a506f218473570b0868587230200000000000017a914e167704bb552e06da7b55cf1f143c822f52b4bf187230200000000000017a914c233c7f6eddb45c3d708239107e9dfa8340542338723020000000000001976a9149a63fa8f9c7fa3a18006c8337b1f0587fac66b4388ac230200000000000017a914fde0eb200fd0a547ceb917b255eee972dcad28af87230200000000000017a914cbc26a131b79cb8cf93df8d8f021e9f1baba240e87230200000000000017a9147d4bcb04cd6dfedf09089cb6afb8b1b0861c46ae8723020000000000001976a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac230200000000000017a9141fb24b5cdf092750e9d1d639117e99f12714c0ec8723020000000000001976a9142552508504c3936380468c7780d639cfaf055aa488ac23020000000000001976a9146ab4ff8ddeb6e259f26f7a8e354a7daf026f621888ac230200000000000017a91412d9875b13602e6fb1ebb04334ea0bfa1ece1da887230200000000000017a914509c26bd5d98491a06352e57a9f4806c30171c3a87230200000000000017a914d3b166181e1ba2890e0501f50405765c7ef9caf98723020000000000001976a91411a839044b8330e855c4a2e5b646bfde7ebe398888ac23020000000000001976a914b46f2a4fbfae5dac1695af164403c5ecbcffb2db88ac230200000000000017a914708669df1d3f412ee3f16376037b83d415e6eea78723020000000000001976a914976c91d993c793d471d45b52977a59c67d0c6cc488ac230200000000000017a9144ea9e8394dba70b7a2059a3fdab29d3dc24b592b8723020000000000001976a914af39047630245f7a09dbcc2df1c5e6b05e52889688ac2302000000000000160014ddcb0da2356df5996382f6c619e19075c66795cb2302000000000000160014f10dde77122dbaf3989a3fc51ba95a047d7e6fbe23020000000000001976a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac230200000000000017a9148f0462fa01da53ea3a4916df9524c7b580148a1087230200000000000017a914add27c375e0783e70c0e1893d7536f578a72a0848723020000000000001976a9144252e42746102463d2ce59ffe027fc498628d52888ac23020000000000001976a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac23020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac230200000000000017a914d3ffce5f3730680d86660a2b7619626f4914aea087230200000000000017a914f3b43564ec4ca3102cfba1579b3790b19f9a172087230200000000000017a9147bfc3e32ab123c59c31f18c0b057800af085c12c87230200000000000017a914bf075602c3c6a8cc0fbb7817b3b8910e39c6c3b58723020000000000001976a914b9285f59ef18bf6324b6a7d7c762eefa97495c9d88ac230200000000000017a9147efa989bc353e89e05b41aa83f1e758bafb3fd4b8723020000000000001976a914f529e7fcf018bf95d752a24f48f56e0e077f524588ac230200000000000017a914fe1be8dcc0713053e6696db244a0ba5cd120d98387230200000000000017a914b9e10c17d426f4301300adc0be9730c3c10cb8eb872302000000000000160014c2c7d1ae38ecc43d23c07c50e8407c2fcb56f0ce230200000000000017a91400fc5f48d9b7f505de1503b8aada7a623ea8e48d8723020000000000001976a914aa7dc81cd3969c1ec60f6364b8bc25af0141e7d288ac230200000000000017a9145322dbb102bf61d6e8b447f74404db3cd3d3766687230200000000000017a91435f41d5c9ed9c6404c37444a161e91570d5207ca8723020000000000001976a91410ac79341762b68fbfc9c81cd8a3a3181a19cf3d88ac230200000000000017a914f168a749f07d17b9d159e216a6f14e909cec04db87230200000000000017a914445cbecae0da26f18e79706909eea74efa92cd8d8723020000000000001976a914df60177b25a841f7653a0537a61257c88239d09888ac2302000000000000160014ae605bdf772b1e735887c8faf6890c84ec558e6f23020000000000001976a914113ed1eb5cb1a22e93cb987efe89ad2c2e47a80088ac23020000000000001976a914b5107766d16ee9a571201218c76a4093138d522988ac23020000000000001976a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac2302000000000000160014b6750bb468ffb489e61f4acbacb97ebade36882e23020000000000001976a914b48937b041e7bc5089bf0dd04e8b3d1fbf4c45ff88ac23020000000000001976a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac230200000000000017a9146149e19f8ba19861081213fa9e3f99b0be3f50ab87230200000000000017a9141e9549971ab07a4da0939a1b64673d492e5943b28723020000000000001976a914af3236f45dba940db11379dcd72e318366fd74b588ac23020000000000001976a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac230200000000000017a914784ca58d4326bf3001c23b25dc1ea7b494afc0f18723020000000000001976a91449b5aafa0b301bd762d3f389dc1a2ca5e2fe8df788ac230200000000000017a914923068b3c6fdae328b82b868204d4bb89fb524ab87230200000000000017a9145380732cfdf51ea21256657d0aef55d7b0ac6eef8723020000000000001976a9142865bfb6e61a0da1c2e56614e850bada641ae56b88ac23020000000000001976a91480af529a8766c58a93e2b501f40d1622d057cdee88ac2302000000000000160014e69f1c9a3b81b89ad20a81c850a447c3da8876c9230200000000000017a9144712974bec8b0896d8290beee2d78934962c483587230200000000000017a9145dea8bc267d8fa466f81bbf10c03b4ebcc92ecd18723020000000000001600141053d695789688c54e0d5f498993607d6c1d6e6223020000000000001976a914aa9ae2a459d82b5cd466b8c347ba264824ae341b88ac23020000000000001976a914b701e04a6ec31329868965beaa8892a13a202afc88ac230200000000000017a914d51727de340e868d9556d6056696bc1280c82d1d87230200000000000017a914c23a28cbffb6a1a1fee658319f97d949613b7ff487230200000000000017a9144ca679cadeeaf3647e1378a037114179e3e430618723020000000000001976a914af4876b92460407d9abce31a603efe3ead91d52988ac23020000000000001976a9144c58d15eaddbcd8e94f41da3d6ab3ab562590b1d88ac230200000000000017a914f73b1a8c661b34faddf540eb0df08179c47275e587230200000000000017a914c18a69d1cfd310c1ad97bfc3faa4d8806a8422b087230200000000000017a914690ca272524bee3d4f6978229a95fc8bb74c27de87230200000000000017a91491bd7b84100f183c727bd28ef5c4133d084ab43c8723020000000000001600145fcb966506c007712e14a639bdb20956d28d084d230200000000000017a9140a0d44b2740e394bd83a2dab9e0a657d523047528723020000000000001976a914ec457b6ebe3ff2f8a3d9d2007862b4f2654d34bc88ac23020000000000001976a914be4f07799950c3017fc64d696b27e10976a0df8188ac23020000000000001976a914de5d0e2e2a5858c59bfbe915d6d47540a9d8da4388ac230200000000000017a9145231d46cbbb0eeec58f3b1acc39e2fcf20caea9f8723020000000000001976a914f43fcfce83a3ca2f1d5ec8c3822134d51c1ab47888ac230200000000000017a914b552733b3e8d7d321c8144f76b06ea17be3e179f87230200000000000017a91487579d85fc6559d224ba7ac350c9aa754a64fac687230200000000000017a914da2f137b3047ca967a97cc4b1f8c77c92637d8e98723020000000000001976a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac23020000000000001976a9149343c1f975fda347a6f5a6e8850117d14b8ac9bc88ac230200000000000017a914192b034fdb7d3cec7677b83a3e5cabbb830f2f0e87230200000000000017a914b6e18667ef15927a920145aad31b3e9883e7e72c8723020000000000001976a914c708532d32e85d24efdf491167165dc0809e619e88ac23020000000000001976a914078fcc0ec36f8ffb239bd041e2429fde465419b288ac230200000000000017a914d0e4d3b53e419aad399f944524ec89a5cd940c608723020000000000001976a91474e3496ecb4db27d898a69aae4070e2b11718e5e88ac230200000000000017a9143794ee6318c3a17d0ab5e3e89e0812e9f113b7fa87230200000000000017a9141cbf3939c32350044043b12ad19b810c62b898f38723020000000000001976a914b48a2ac4f5b7a473956a5a3c9b9a6481220b303688ac23020000000000001976a91499a17c157f91f04bde3072657d00a8e8bcd2eca988ac230200000000000017a9141b7886b704f6ee99b548214294bdc7cf9a519a698723020000000000001976a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac230200000000000017a914f222831e0cba00afa94e627b16bfcd38d0fb136687230200000000000017a914839ffabb74abe668446b8279efa82602f43e61888723020000000000001976a914f2a299166c15eb83d12f73edf8dd7b95279a7de088ac23020000000000001976a914aa99bd3c545720cda1feee22c3054b1a145a016488ac23020000000000001976a914b92e137f61af0734b93b23f25cf9821a3f98d3df88ac23020000000000001976a91444825445c7c4768384c0bd1eeb5559a1c9b5b77288ac230200000000000017a9141bd345e9f19baabc4838280c12592f25450b5d1e87230200000000000017a9147da3e4f9e9098ec775fc65fde6bd61206de0debf8723020000000000001976a9148c939130b81f5e32c9669e8e894a500c0054e49488ac230200000000000017a914a7a87834de83c516140160d0077f3a51c116b3a187230200000000000017a914d7a6780dda8db994f01dc7c56c2b0299d528a8098723020000000000001600147f3f47d0895ccb7e504091bfbde07a1c2a27f554230200000000000017a9145a9b3fa58c1e1e2f1a64d22c25365eb1947276ce8723020000000000001976a914ea9b3dd49c68c0b6a83a64b5986429b25e218a4c88ac23020000000000001976a914af4925c69465d3cc5ad9451abe4cc0eb2a9005e988ac230200000000000017a914d5b90b70fdb7ab4e27215b3e38b944f3a0ff9e2a8723020000000000001976a9141644f7760fd97537563cfa56f656d1a2a79058c788ac230200000000000017a914a12a24fe9dd245176d73d093af883db5721dfa2b87230200000000000017a9141b92ed7f02c99991f52cf2a0b7c5d5aa22307bef87230200000000000017a9144160873048fcfc2140e022a768706fff45ecb0c287230200000000000017a914cdf007fae733d3b6513747e7250edf40d81e3f4a8723020000000000001976a914adaef2451df664e5930e4a16151ffbaa31aebb4f88ac23020000000000001976a914aaa0138d028ca416c8e5e11ef935887e19e7ba9088ac230200000000000017a914cfc588e7781e5c5fd30d063dceb9efd68771e6768723020000000000001976a9143da156ba4248c4ab72a9819570cf1e8ce582f26a88ac23020000000000001976a9145cb787cf3fd055de8b0e00b231aeef70ad3485f488ac230200000000000017a914e8c0b9deab2de07a1764a8e889c02a58fd6d3fa58723020000000000001976a914f9c9a198e91fc0d64b05c34d5d16ddfdc77f28ea88ac230200000000000017a9141f253fabb392c0b55d24d5bc0b785fb8629c343b87230200000000000017a914c89f31b06a9e9345e5149193d1c4aa061a83cd0b872302000000000000160014f84420e7edb7528587921e95be3028eedcecf9bd23020000000000001976a9145fbb64fa612dd13c8fdfaa5556ec6d20efd223b288ac230200000000000017a914c6a964950550b0854b50303e4c83557cfe469a508723020000000000001976a9148644841d30bc75f67799cf21d8d2858639fc465488ac23020000000000001976a914008c07e4f5c8b66cf082b67f44ff889062b3822588ac23020000000000001976a91418440870284d628f74c2b2ed2343501f5c62628288ac230200000000000016001408dce91899a1069447d34603d9f81d4c1e5404bb23020000000000001976a9147db14d76012b3d644b140a25daf784bac2c2e77588ac230200000000000017a914e6d692876dd35ef6d5be3412f05260bf24970a4d8723020000000000001976a914aa92e947687bebfc61d93d50cc7acf894224690588ac23020000000000001600140b577e6a1e77fb3ca7a98b83df497dd11318367223020000000000001976a914aa79b0f655dc148c5c2081afea91ec6a33b512a788ac230200000000000017a914c90eac718e17e740ae90f671c5066e5aa6257dc087230200000000000016001463b0bee36f64a4b3266c308e0902c7497dd10645230200000000000016001460cbcd34cd319c943912a691b4935747ed5050d3230200000000000017a914f6151f0306d90c59e162f33be8d7cdda2ff4029b8723020000000000001600144329c08b49f6fbd1141a79924b60e348ee875aaa23020000000000001976a914af35a7cc08f576e074d2fe0ff9e182790f0869c088ac230200000000000016001444a4666937f2fd39c91c68e09a28ebb8615bb72e230200000000000017a914ca4439611cb840f74c0fbe379bd7147ae75605848723020000000000001976a9141dec0db6c652fa87a496812c7864686532ab5e4e88ac23020000000000001976a914af3970b6a95a7c0f7313880787829c1555c0d2f988ac23020000000000001976a914c59fbde46d484eb120f4a02376fa66169173f1ca88ac230200000000000017a914351d0aea7c875750ae48813164724ca747ca09c4872302000000000000160014e60e1d9376689234ba92245873b2a1484fa1d75f230200000000000017a91481cdf5919633ff95d90fc06ce25a43807ada428687230200000000000017a9142ca167a69bba264824e5e5f44733223a9c10a7e48723020000000000001976a914aa7c0ea4c035b4f29986e0c2e51dcfe62e81eab588ac230200000000000017a914d6b81117572768c33f7572c72927084e3c74b8a787230200000000000017a914b943d84bd547d31f897da8530f85b61009435b0c8723020000000000001976a914aab37cde379b44b74325d9c6e569aed80e40c11a88ac23020000000000001976a914b4716f26b9d19ffe5a3d0ccfe28b0ea54db0475188ac230200000000000017a914ec3ecf3d28a9db726f087b010191df2a68663b808723020000000000001976a914aa9c56af30ce4ff3578eacc27b96c91da597f40e88ac230200000000000017a9149ae88d1f6b9a7366e7c167776d7cef8979146c048723020000000000001976a9141e29fd9568bfedc38f55dc8aa47df455dbfb57c988ac230200000000000017a914f46742044d0b31bdd43f6c97d66e7e16efa973b98723020000000000001976a914745686edcc0c8d82f8edb3e7511ba8ba9d60d9d788ac23020000000000001976a914aa9d85a31d9501de7dea85f4dafad8677acabe9d88ac23020000000000001976a914af4ab78194f772d2702eefd8df79c8d5075404f888ac23020000000000001976a91403314b8913216663a1f7dfe739a715bfb54b1baa88ac2302000000000000160014c5eac95536a9c6412027cead26cd559020e1758523020000000000001976a914f52ac66ae884b43c882d8d3d46ad142cf7e9cbda88ac23020000000000001976a914319bb40f6db34ba93c1fbb630b3dc1dfe5a3d41c88ac230200000000000017a914f8dd442d45ac37dfe305afe38cf569682f3bf28a8723020000000000001976a914aab351cbfb66c39d0dcee7cd33716e2f06b7a30988ac23020000000000001976a9143f74de1a49249ec74120a091dab1862484d65dda88ac23020000000000001976a914f53d8204cb80ef5db360b302cfc53f0a1bccd65688ac230200000000000017a9141ba29df6a4c2cf7ac3e90513539b19a8ee790dcc8723020000000000001600146d4a4c66db0d0fa74802867b14c69c0cbc1f65af230200000000000017a9149e3071e61584685f40354f8e7e974c442eaa18ae8723020000000000001976a9145feb4a3fb6c69e0985fbcef7756acb3909a1ecbe88ac23020000000000001976a914af5a27136990e3a258069d135f1477b5f2b7f06988ac23020000000000001600144df6d6b372d933f62c5319fd4e05dee4bb4307a32302000000000000160014e06c9576f5618b9bcc9993ef0501807ae3d3da8823020000000000001600147e4f5a19ea6239ecfe47f9038b6e4788fbbfc748230200000000000017a914c3745c1be3a2bc17ea3bc86ec8674ac16f1659e887230200000000000017a914e9611987dfacb1b2cdd11c3fda815a729434c5e087230200000000000017a914f96ab0b89ca2c4e251bc36a5b4cc079e4693ed5c87230200000000000017a914e25c3afdc83c938d55f9c0b78eb40ba2093ca5df8723020000000000001976a914e038febcda00af1abe04b78ba0a7e8256b80adcb88ac23020000000000001976a914ca40860c6f8646a4ab4cf3446c5b4df90587f7ab88ac230200000000000016001488125ef6f87783a1e2df021946097bd2d5c2a0c8230200000000000017a914e4e4259a88ff887113217b906a5386d2a57509118723020000000000001976a914d9022fa775e51754d49b678aab7b44f9f55699d088ac23020000000000001976a914b23cb45f995fc6981ff2d4f9e302aa5e7b4b841e88ac230200000000000017a914ba200c89b2db6c54c7568031299007c184273ff98723020000000000001976a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac23020000000000001976a9149ce43110d9b26ac0fb86582b764019296736309a88ac23020000000000001976a91425b631d4b3ec47eea5b6a9ee745ebb90adb0f20f88ac23020000000000001976a914aa76d22684424dc8fbbb7315169779e39f5cec9488ac23020000000000001976a9140652c29575018f03af6e406dbc8420dd36d7fc3888ac23020000000000001976a914aa9ffeaaee11cd977e4f173954786f3e1a929dda88ac23020000000000001976a914af4f942b3b4c6b2c4794ce205deb3f4450d83daa88ac23020000000000001976a91465947da6bf7153f8ea06f8c31680a3e1a9da28f688ac230200000000000017a914764cb9373ee4c19d3f75cdead10cf592aa7ecb5187230200000000000017a914226fa1d589d606df8fca8b75f5c5ee3321f3b83287230200000000000016001488a4a2eb39939cb2e171d38aef3ab602f1b6d8bd230200000000000017a914b848318de9e87f969368f77e5cd4f943eaa4abf28723020000000000001976a914b92ef2dd5f2980568f7b9b2d4dee68b516d717d888ac230200000000000017a914c2f4f39cead333aace56ee2dd9505bf59a4b13a78723020000000000001976a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac23020000000000001976a9146643621cac3e8d081d5f5b6baf84751d38067b3988ac23020000000000001976a914aa95d2d54bdad5c24364788c08b029375822ef2c88ac23020000000000001976a914aab525233f8dbd00aa6f1a102c76caa0b5452cfd88ac230200000000000017a914f807e3eb5622bc9aebd23fedb10f89e797c068de8723020000000000001976a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac23020000000000001600141f461a90161d0bd5f4e2117f33fb904d49b7592b23020000000000001976a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac23020000000000001976a91475cdf3b6093aad82343431ebfc36bcf8a5fa1a1a88ac230200000000000017a914c19b5a264e11630b14d20630a0fc8437af6ccf5e87230200000000000017a914d56834a7b9049ab5c33d8edc7130841eb8febc788723020000000000001976a914b92fd54a6a6b971befd22315a42332a32d64e54188ac230200000000000017a91438acd47db7ad63c3b58a2eeb2dda7b067c02110f8723020000000000001976a91497dd5e276317c3478337d1bb9bc7c90bd25e83cc88ac230200000000000017a914ad0647563aa08889ea3f4b2d385be50163563626872302000000000000160014aab72fc1064931d6244eddcd682382d2d48deac9230200000000000017a9143c3d76e5bd8593ef47a29664968a1490a82fea228723020000000000001976a914af3b0b1fe536158db82bc8e02296bc4585584db288ac23020000000000001976a91457e3421fac8594a282de45e25d7fd8e1ec742c9888ac23020000000000001976a914af32a0ce718af6bdec98743709368559ad8f72cc88ac23020000000000001600141720e3bdbc2d0f9947774b726576128659c1b3b0230200000000000016001490b30cdb38bac0b7270dd2a9fb788bdc099a758e230200000000000017a9145fad233725cc75ee7b3bbe043dbe5cfa0981c10e87230200000000000017a9145edc3ca9a4a668040e643fbc17c503c91d47579c8723020000000000001976a914af6fbff62fa0d1c4f4e03cb0fe34f5da6df926f688ac230200000000000017a914083d95f3721bf0e209e47ccea2e2d0fdbb6f0a468723020000000000001976a91495f0d4d41738523e4b296357608279f1b2627b4388ac230200000000000017a91453746da25186819e7d08730b411c20040808966e87230200000000000017a9140d6e1108b477d8d43528c1d2fc8378bb559933dd8723020000000000001976a9145b2a5ee980663c98ca775820f25b57c39474024288ac23020000000000001976a914aa930223a0f8761408ef9f6992bd0c1198d5c54888ac230200000000000017a9145d331ed101ed31abb19391bd4fe3d73ed05dcab687230200000000000017a9145018219fee281effbcff61098799df321aa24c2387230200000000000017a914b7b1461bdb26e4fa13e4f96826e035d4dcbded608723020000000000001600140f27aa70b6373e8a4a25cb4c7162050a639dd59b230200000000000017a914a8bec36e8fafe1e2f594b953736463e8330fbff88723020000000000001600144bc0eba0f3212d953a6a342d2fff6689e27a2b8d23020000000000001976a914b9261a6ce3babc62409fd6fd2960879f99ad310e88ac230200000000000017a9140d28ed5d5542c721662261a2dac5e71a6e74fad687230200000000000017a914b087304815ebbbff2ededacaec1f5cfb152bd66d87230200000000000017a91492eccb947fc709eac2ae0bd3aadabcaaf996112e87230200000000000017a914ec4325a9fc7944a86f74bf81d3a7c2db3b890bfa87230200000000000017a914dea4ad768f75205d5d805f90e70d7f2684a19fe58723020000000000001976a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac2302000000000000160014b2984bb8ad82b496fbc03f142e309eed5a6255a2230200000000000017a914196083103b472aa6830386561902673e83e0e0ad8723020000000000001976a914751f124bcf5d0b44ed1cbf2e0976f6c437ba8ab488ac72e81169000000001600142b1841c3bc78691cdbe3b7a6eb88064674bd3e8502473044022071982f034bc30b4cc1218be6805e2c9fa3d7e0839313e20cc6c55ae425dc0600022079de9446092780177e1ad103a774a69be0c160c0cf819875ee6c83ebe688b0530121038a0075f97e57b497ba99aeb3c3cfcbf44a69e019fc4656200e5329e618201f0ba02f0a00", + "blockhash": "00000000000000000000e297bcc894987014870ab9b381d95ec244b731b258b9", + "confirmations": 303432, + "time": 1611550284, + "blocktime": 1611550284 + }, + "getrawtransaction:239cfce453bd562b3cc820e4bb9178fe4816bc73ab62292f33088d1893b1a3ec": { + "txid": "239cfce453bd562b3cc820e4bb9178fe4816bc73ab62292f33088d1893b1a3ec", + "hash": "239cfce453bd562b3cc820e4bb9178fe4816bc73ab62292f33088d1893b1a3ec", + "version": 2, + "size": 9075, + "weight": 35973, + "locktime": 661017, + "hex": "0200000000010130706b933a2a4d8ed440f43fc366847f5b8600a125b4f66a010ad70066a7b6311f01000000fdfffffffd0a0123020000000000001976a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac23020000000000001976a914075b7dfca1465daa6f51b8497af83c10042ef39988ac23020000000000001976a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac23020000000000001976a91404d9d15e67e6f20551992e03039711e59281f72888ac23020000000000001976a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac23020000000000001976a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac23020000000000001976a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac23020000000000001976a9143899761764d0fce8572cf3eb34333613d43d080088ac23020000000000001976a914d85ee8f164fc01c064de7b716d87135547a2f59588ac23020000000000001976a914f526a5fc2cb4d8acd9d2e802195b8b04d1e04b2a88ac230200000000000017a914d6f2ed1d24b4b5747cccd8bcedf1099f414fb99c8723020000000000001976a914753c6bbc7e936d5d874162e412778dbdd9a61c7788ac23020000000000001976a914508fbd107fb44a9b779a061b6ce312ccaaf3730a88ac23020000000000001976a9148d0331484de0aea32b2c5b6a0c8008b032adc7a188ac230200000000000017a9140fb03a13f4c0a027509f8c4fd245f483551b6c108723020000000000001976a914d68bb25be12d6ac34df0cf622a1c2e48adc9f43488ac23020000000000001976a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac23020000000000001976a914976c91d993c793d471d45b52977a59c67d0c6cc488ac230200000000000017a914160b09174fbe0904949094083fe2783a2eef39ad8723020000000000001976a91408f456472311b789bf8885f5861b4e875421b4d588ac23020000000000001976a914f524ee187fbbb2a8997c09ded351b251f5be550988ac23020000000000001976a914f9a8ddfc7f65b199c61e633199bdb18f2e38eefd88ac23020000000000001976a914072af0864f2910e6130f3276ba0e5a87861a713a88ac230200000000000017a91444b283b839d9d5ae5a0bfbde400166a6e69b99708723020000000000001976a914f5121cb0478bab971f06c33345e4ebb4e66e973d88ac230200000000000017a914a79d2d1e0f27f7e8a10f0c99fbe700e433089b958723020000000000001976a9140791f1f6600311c3043e4e247050833567bc2cdd88ac23020000000000001976a914ce4551083b2c0c436a448de86fee5bb58c4d7b2088ac230200000000000017a91476afa231de5e191ad6fe01aa8675f77596d6db8e8723020000000000001976a9140f2a0a794c0fc4a67218b35f85cf7357b99ed42c88ac23020000000000001976a9141d58e5fe24de31ab66da56c30edc058046c9aacd88ac23020000000000001976a91473427601f4b8fcc0f16c4b54eaabf1ff64a8b7f888ac23020000000000001976a914f50f3b1ab21c0c17eae49f3abc6e47d4ef06bd8588ac23020000000000001976a9143da3a798e936602a071a26c51bac602411caf8e188ac230200000000000017a91431ee9b12409c141a0160e48204b95f3bfa5c9d6487230200000000000017a914047edf2df9e10faaacb3565dc0e770569b8ce7d68723020000000000001976a91475e30dd85efa6a11b164747dc3bd92d468fd35c688ac230200000000000017a914346e1c1b2fe6abc46433d8497c7be955184648b987230200000000000017a9149e1241593b98b8816454ae994a57f21a310f6a618723020000000000001976a914f522e556c17af3482a3a829ec9dd752355c7f34188ac23020000000000001976a914f5098451fb6ff8fe75a5e02c58a8eabb1b4e54de88ac23020000000000001976a914a963a244adfa7c473a408242b5cc6b2c090632d088ac23020000000000001976a914d5695ae87653eff01a0129696d91c7cd2631ef4988ac23020000000000001976a914c1e19319ee0990accc2fcceb91e14848cdded11a88ac23020000000000001976a914f53be4a1d6ee1602fe94db4e28ee3914f66839d388ac23020000000000001976a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac23020000000000001976a914f9c59f8d5c22b51fe82933a15da6a68f71cc82e288ac23020000000000001976a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac23020000000000001976a91448aa7e31474a9ace7c99b7d193eb26d7ce5bc5a388ac23020000000000001976a9143e827751265639a0ccde05b3f1d931d4fa3d5c3388ac23020000000000001976a914f9ab8a90e69dfb92cab5055bc1f617989b74448d88ac23020000000000001976a914a1f4c8d3bed6e474fed77aeb94c960ac36983f2688ac23020000000000001976a914248de298b5c6c0caa01b031917d6d779166aa13588ac23020000000000001976a91464e036a68a065eb2d6b10268ce89156933f0647a88ac23020000000000001976a914c201f40d2b14170b4972390917bf63e4c217281788ac23020000000000001976a91423ba1189cb027a21aa0a1b21fecf620f989ba33d88ac23020000000000001976a914f98f502f845c16053134ec2a389054dcf734c99788ac230200000000000017a914013191f62b689b1fb49051c79f91e357bbca812e8723020000000000001976a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac230200000000000017a914606795cd3a2d1e300674e343972a46d2c7edc5108723020000000000001976a91483068bc8913bb8fdadff3c8c5904442af64deae688ac23020000000000001976a91414ea3a048a980494d67eb09a1b087ff67476555c88ac23020000000000001976a914824ea5a10d5d66a369bc75d8dd8f43e03d04b5e288ac230200000000000017a914498b3aaddc99c5e9614940b2d3dcabb82f07727787230200000000000017a914cd1e44c6b5e40ba22ff5e8e6b6e9ea9b7d2bbb4a8723020000000000001976a914035114d41051bba13764b213f83ff6ac0ab38d1d88ac23020000000000001976a914f500565551e0e6310f1bf666e01a122a6874bb3288ac23020000000000001976a914f50bfd4764b4d067ffab4cadcc837a4e60e3826b88ac230200000000000017a914ee8f7e7dba5727715bc942e06cb147ab6cde0d718723020000000000001976a914ee56cb41d9537d5027b5f1b81b46f8238d947cf888ac23020000000000001976a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac23020000000000001976a914f520a923240a647267511315ec8a2ef55d43238888ac23020000000000001976a914b1a2508bf9de1ebdddb83b40c2da622de0d2bd3488ac23020000000000001976a914f9afcf9938f1dc4c4233876a22ff2bb487d9362c88ac23020000000000001976a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac230200000000000017a91425902e7c0e4c6eba8ff6fd95476bbb2039ea6b018723020000000000001976a914f5041435761dbd09f9d3f28f8164372caa40c89688ac23020000000000001976a9149c361e9b09fdf904b52854d1a6620d8746ffdf7f88ac23020000000000001976a914f4e9c12379aa3ce128e085d7b0159a7934ae9ed388ac23020000000000001976a914f4f90387b64de04e24555b77b17a403882d87cde88ac23020000000000001976a914a9ad9689dff7facfdc29cfd87a8fd3bcffe2a79e88ac230200000000000017a914caaa6675f8604e64b6836e20587e8ef8d37641638723020000000000001976a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac23020000000000001976a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac23020000000000001976a9144c8cbfa260db767ad23a8f7b01f67234f3b5f3fd88ac23020000000000001976a914f4ea0d90b72c09551248ec8f498ec929217c479988ac230200000000000017a914709ab603bb0403999c6ce7d92ed4e8611d6bf4bf8723020000000000001976a914dd2815c87bc2c695a9449c25fe296291c1e7514f88ac230200000000000017a914487a651731d8b2277c0ecbc263b68fd594098b138723020000000000001976a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac23020000000000001976a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac23020000000000001976a914988288362cb49f5b7e86a0e815d948286b2bf06088ac23020000000000001976a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac23020000000000001976a914f9aef0728bf48763d4dae15f170248fdc8d6f47a88ac23020000000000001976a9148d17f5c88fc5a09857fe8f75fc823b587f2f9b6588ac23020000000000001976a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac23020000000000001976a914cacc575af4397af297efeb0604917859693ca12088ac230200000000000017a914e440b01e68b9daa0d5a2cb52eac998e8a1164fd78723020000000000001976a914d6261ff8753d4f144c46b0330a9be617304a702988ac23020000000000001976a914f503737f00efd9d7d41a93092968d7b3f268e8b388ac23020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac230200000000000017a914cd0200882f48c8c99c87d3613df231c5a19c56078723020000000000001976a914f5233d795b41f6b1ac511170f2bafb94e449754888ac230200000000000017a91456d6fc3dc432e46675c229e0ee842c49f7bc8bf787230200000000000017a914929e735f1a71227e001d777b95c992ed00de17be8723020000000000001976a914c0d06e378cc88471c4a2c984fe9039bd6a231b0d88ac23020000000000001976a9148353ade1dd41a70e441602ce638a2f9ec7f4e91688ac230200000000000017a914380d9a4179469cf2d310b4088832de705641f01587230200000000000017a91427f7a15e10e1df4d41db15f2bc5e51f0811f00d78723020000000000001976a91487b35052183625aefca1e721e109f65f2710699988ac23020000000000001976a914659875d96ba0e8ef7126faf5c3bdac7de0aa0ec888ac23020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac23020000000000001976a914b5107766d16ee9a571201218c76a4093138d522988ac23020000000000001976a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac23020000000000001976a9143f527c6288ee1b3b232271fe5ede1be9902c6b1288ac23020000000000001976a914f53d4f215a2958ef1f938b0f7b3280cb9ae09fc788ac23020000000000001976a914c3f6e14183bfa5a5fc97b28acdc99e23ae205b8d88ac23020000000000001976a914f4fe11a650a9ccafd0637310e698b6a784f4e0a088ac23020000000000001976a914f501407b5413a09c19a39386bdd5b64d3ee0626388ac23020000000000001976a9142369e10cbeba03a9fb0f7093420e34236d0bb47f88ac23020000000000001976a91407c7f667097f229de67859f03ec44916b1c88bbe88ac230200000000000017a914ded69c02528237483a6ee0bf2047a891dba8ac3987230200000000000017a9143ca2c7e07daef23c7e2126ab4eaa1ad79b460c2c8723020000000000001976a914d6d8f823a7673bd3da372729e9006ee2686340ec88ac23020000000000001976a9142e1e14e5a9712decb2145a08fc99e7138b8156d088ac23020000000000001976a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac23020000000000001976a9148c939130b81f5e32c9669e8e894a500c0054e49488ac23020000000000001976a9140695daa9fa3342429a648cfc7f89392b37d4050688ac23020000000000001976a914f19e09bba24bb76111b502897675a05de4bbbcdd88ac23020000000000001976a914f9a8dd9cebf8a83e68a2cec80d7c8cfde48af07988ac23020000000000001976a9146fac8571b6b103626820f97b023f5f0212f0342088ac230200000000000017a9140e54ce77063433391566639ab155e328b7464b098723020000000000001976a9147e7ed0f5a912aa17fc6bb04eafa1f753a3d73f1b88ac23020000000000001976a914f51979a7aff4f01e13fb0b1e1203e1eeab0418ec88ac23020000000000001976a914885be2340ea7cc0aa2f8646137d922142d26474a88ac23020000000000001976a914be3795b8eda8dd3fe8e802de712d9014451e76ce88ac23020000000000001976a914e94415e89d0fc87d53713add7431764b742e8feb88ac230200000000000017a914b14e8610588be42584c78425c8053f3fad86e0808723020000000000001976a914f4ea9d82a3f12af0b8227107ec191662a3658e2a88ac23020000000000001976a9141535968fba30b3b3145c45b7a6e3a31c83f2c39f88ac230200000000000017a9144e640f46cb6d9c7b66ed1b794e6b695e9c93bd8f87230200000000000017a914f251fe79c6d72cb70383722e63b190b14be9ccb387230200000000000017a9141188221d3fcab2d0ba2b97eaf33efb5f28d52caf8723020000000000001976a914fb7834ca4d9a6efcc932558ba152d786939dec8c88ac23020000000000001976a914612e5c1af431ef3815580ef3c422d6295579e90e88ac230200000000000017a91498784d131308553967d02d1a8ccdb1dfd65f38a087230200000000000017a91418adc89f445b19b88a350453a4c85e760d1a0cbc87230200000000000017a914ac0fb26eac0e6f613d4f1a19a87b7b75632dce1a8723020000000000001976a91445110199352e60642095c72529405ca82803ee4588ac23020000000000001976a91419a3fd5ade3af9f102eb59dbbd1305727f09157588ac23020000000000001976a91490b335b081da2978f78d3cbdf01c0302035d170b88ac23020000000000001976a914f5205dabf4be1ae43147a783e953d2750bd1952588ac23020000000000001976a9144db9574e83120fac3f05bd1aa08659fc8ef5701688ac23020000000000001976a9143730c30e21c84284be8591c4c57c55b76160928788ac23020000000000001976a914f449285a885d3cea6ca6a6f12fea7b9327642b3e88ac23020000000000001976a914ecade0ba0ff81970e8e2215330154df5a054a1e688ac23020000000000001976a914f9a8d854e6f232a70bdcb74061ebc84fda55e69e88ac23020000000000001976a914a15eb54cc568018725891c226b6d346a2eab298488ac23020000000000001976a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac230200000000000017a914cc7edb9e1df7645dc333cf7613a90aad40f7923d8723020000000000001976a91407736f260963b708b6e2b5c02283eb4c8fdc90e188ac230200000000000017a914793e95b2284e22692dbed9f396fa1311691a574e8723020000000000001976a9146c58a5fd4c6e3b3f556c416270ce4c16e6ad00f188ac230200000000000017a91439e088ff23c8e45a24864c5224f2d03a21d7d3378723020000000000001976a914f5247f49d6708fa11b221d58676a1ccec9b6c1b588ac23020000000000001976a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac23020000000000001976a914563c6720e1434d19bd4d426ee8faa04295de043b88ac23020000000000001976a9140ca9dd8ef5f704fbf285584b78262ec3e47fba9a88ac23020000000000001976a91428c42ed3a3e8dd299b981f762ef1ff53b254d05088ac230200000000000017a91409891fa2f4e54cfd8e3acd4f53b173a9d692d3b68723020000000000001976a9144b0729a9cac7f29dc121b2f28b008b2a2311f3f388ac23020000000000001976a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac230200000000000017a914a08fe453058ac4d0c85415f760646c94bc77bb388723020000000000001976a914ce2d6072a51a54bfee980db7ab823e08c9e87a1c88ac23020000000000001976a9148644841d30bc75f67799cf21d8d2858639fc465488ac230200000000000017a9149e1b04356013957f0865e84e06fb59cc19e2e55e8723020000000000001976a9149d4d2758a88c68644053c435600db62100a9b75788ac23020000000000001976a9142fa2ed061d83bd04df0aec643b15ca380390d3e088ac23020000000000001976a914d0475ce09a356811c8bb361ecd2285294f668dc888ac23020000000000001976a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac23020000000000001976a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac23020000000000001976a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac230200000000000017a914f13067c43cdc7e4201628350cfd4362123a73b9b8723020000000000001976a9146bd6545185c83e9ae7f4c5227c7a9afa34d3a41b88ac230200000000000017a914f42b340dff1ef2d239c97d8ba11d223bae8cdfaa8723020000000000001976a914269cc7cb4632614c575f3674c8ceac0bf2e0429488ac230200000000000017a91431d3e0008a5f78ffdd60d979ce3f594133dc5cc28723020000000000001976a914b77e68177d0fef51df52370af08f530cc8e149ec88ac23020000000000001976a914d1cec8b8d70d2952c1cbff35d099a47b34590fea88ac23020000000000001976a914365b822817453422dfb41689c255861d993b4cb688ac23020000000000001976a914f5391c005ad45c0e385e36bd67b0fcef0424ba6988ac23020000000000001976a9149542bd8a020a245ba5785dfeb067ed5d898db46488ac23020000000000001976a914f513c898a5ef40fb6e5b7c438e39306119cf55c488ac23020000000000001976a914cb674747b8586b6536e40eb78f29155ebd8c60c088ac23020000000000001976a914afb7564e539d77b65f308aa65c4c09e2f7f463e788ac23020000000000001976a9146147395a0b8fcd759fcd7f40345db3b0d7e26d1588ac23020000000000001976a914f53919cf4890d0d0cbd559f43eb703d890cc4faf88ac23020000000000001976a9147b506577e65212ca6ae1125797fa713abb8e88b188ac23020000000000001976a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac23020000000000001976a914adbd9f3d4b5a61f894d3d2062dfe295eaa04096988ac23020000000000001976a914281063cf518ce1fba2fd000ebfc836de7813f33288ac23020000000000001976a9145036f8b276748ab301ca106471b6f8c05acd925d88ac230200000000000017a9145035f52bddb9ee0044d1796b773eef31087a38478723020000000000001976a914536d303cd4841afeb98fb4c43572b7efaa8535bd88ac23020000000000001976a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac230200000000000017a914348b5571551f0498d82fbee912e95e2c5dd82cc68723020000000000001976a91479fc20ebba0c83e5cb1924a9c99258a1a10d042188ac23020000000000001976a9144809d98c05fb8acdaeb4cd02b0cfb418fb3e42d988ac23020000000000001976a914f52681042537c33c4541d80e4974d7ae822b6f4488ac23020000000000001976a914713d27932d092b1e66772ffb44d46bda8db740d288ac23020000000000001976a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac23020000000000001976a914f51602f02babcc9efc955da4b81985450a2809e588ac230200000000000017a91462c09109fede9f918256001c2646365b5180707b87230200000000000017a9142db434998d3c9ff40f9ef1aa724e2f0a6fca25b487230200000000000017a91434866a596d4fa024e4bf48de50d25729f71918678723020000000000001976a9149088551764d2352a45c3d3bd18425780e8a0d60088ac23020000000000001976a9141fd35df583f6f9637609cc1119583fc8b24441e588ac23020000000000001976a914f863bf8480b78ebccb4c9b23c4261e54ebe6f72488ac230200000000000017a9143e3d03ab1d0358cc01395c59f12f6518604597008723020000000000001976a9143b07588b387a9b93e338ad563db8ba105e1069f888ac23020000000000001976a91473d95c0186c5dc5511a688858ced666f1328c92688ac23020000000000001976a91497324d7d9b8a78494ec2102a71222b192f3a8c7f88ac23020000000000001976a914babb672b8f3e761773f3fbf2122e706af3547c5c88ac230200000000000017a9143b6e274ee42803ab8c97a1437d98f6997a9006b287230200000000000017a91417c42f0ac3509e70edb190f5c5e8af11c9b4eb0d87230200000000000017a91418b984b775333f60c4bd136196e2413d6499a7bc8723020000000000001976a9147d9b7721645c954c0f8d2f96637da98b036c317588ac23020000000000001976a914f5286ab069a32a7d6bfd4bc7b68a10c7e1be7e1088ac23020000000000001976a914724a879b56137c03f145b65b2dd6596a328fc18388ac23020000000000001976a9143567ca297d30484e533d25bd28661f454e028a0088ac23020000000000001976a914cac4195b5e969ce82d6f99f8dbb8790693172ade88ac23020000000000001976a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac23020000000000001976a914f9ada987d8189121ff1da0e0138e6d77d8a2a62288ac23020000000000001976a91493de81a4087fd865f84657ebe23d6197c224ec2e88ac23020000000000001976a9148d4d9a706de8c210796c8af9f715bf747e48ef0688ac23020000000000001976a91403a8e9e6506e176d6d6fafdf7d37c6794888430b88ac23020000000000001976a914815e3c0e054e90911bf13f1291301e3548c2591088ac23020000000000001976a9140300e8d008e1786d431028a6688d89b9d19c5b6788ac23020000000000001976a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac23020000000000001976a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac23020000000000001976a914f4e9b5327f668f744febbc2c3c11679e5d38b5c188ac23020000000000001976a914b701e04a6ec31329868965beaa8892a13a202afc88ac23020000000000001976a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac23020000000000001976a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac23020000000000001976a914cbe2a1269d1a33ad8df912709d53d8bb426d737588ac230200000000000017a9143fd953c9ea2540eb62126a6f1f9ff9bfe35f86808723020000000000001976a9146dd07cce3b3a8aa0008a546b6a49bbe57b6c269f88ac23020000000000001976a91427866895d83f2c1625b63902090fe9f9634205ed88ac230200000000000017a91467dbda53ac35b009de3b69f5f20d6933626d135087230200000000000017a9146eb526b0c4472d9b0a5f7b4da1d243cc64ab215c8723020000000000001976a914c9afcbd2af611bf0fcfda5512c6851bff064bfb288ac23020000000000001976a9141fb3982ea323160a37af41447cef9f6d998ed6bb88ac230200000000000017a914ad0a703b9a72a83a931a8513fe3781a116caf5fc87230200000000000017a91464663bddf61b6468e070339f17f7f430e44e794987230200000000000017a914e5ec4325d33e804f9b8e0c8114a1762da90f07258723020000000000001976a91462385809aca4eede27968128a65fdc31df551eca88ac23020000000000001976a914f4fdca6ceb2a4263c9bec5952419da7e5bda90f588ac230200000000000017a9142a46d91f5f23c739ec1052bfdfd5c27300cfc8a587230200000000000017a9140635bebb301fa4f68d152395ebff1a1f5f5f76fd87230200000000000017a914494b17a5228f70c8ad1e25d6daa18635dec6da4c87230200000000000017a914414490f39d09cf3b9cbb6b21305c395683abf8dd8723020000000000001976a91450c6cb28247f040086ae749635183fae105d6d9d88ac230200000000000017a91494cc339ecc90537b95637786f2152e7a1e6d7c398723020000000000001976a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac23020000000000001976a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac1f03040000000000160014eb0c7e349da2e1d672c9b0e4100065504e2b9b8902473044022026d36ca95ffb702875b19086b9cef8836c12a2d2af3f31f906e8f66315bae40d02204f78a1ddce2cfccd8b9144cf77e1c70d84c938733ed927f8ee85a0828078003b01210333b7cab374313ca719ae4c2096c793fe26d544dde17bc5e0939e6aaa3617221719160a00", + "blockhash": "0000000000000000000477e07701c3163c8c72730061cda1169d87fd6161d6ed", + "confirmations": 309967, + "time": 1607767065, + "blocktime": 1607767065 + }, + "getrawtransaction:eae4537e85ef54cb20408a385115f0cf88090f27609d4fa0f384b4aa633999a8": { + "txid": "eae4537e85ef54cb20408a385115f0cf88090f27609d4fa0f384b4aa633999a8", + "hash": "eae4537e85ef54cb20408a385115f0cf88090f27609d4fa0f384b4aa633999a8", + "version": 2, + "size": 14090, + "weight": 56033, + "locktime": 646675, + "hex": "020000000001019e444d3d80fd390df748263a21d50cfb00d6564a4697e1629bdb47bfa6ea76db1001000000fdfffffffda60123020000000000001976a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac23020000000000001976a914075b7dfca1465daa6f51b8497af83c10042ef39988ac23020000000000001976a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac23020000000000001976a91404d9d15e67e6f20551992e03039711e59281f72888ac23020000000000001976a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac23020000000000001976a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac23020000000000001976a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac230200000000000017a914ca9c6e90f3a210be6535d5daddb056a553a7003687230200000000000016001446a8b9d509c06ff0224220b3b91828e7a1138a6c230200000000000017a9141c691b58d2733e67dfc671a464e3e767f935f17287230200000000000017a91494cfe33fc036ba25580ba43475d8076114638f2387230200000000000017a914e1172fcce580c8d3d18ba2e1a87c5c691b9c4a3887230200000000000017a914e34be8cd2f06bf9bc2ba62cf1fc3df14fcb406408723020000000000001976a9142ca0288895b3a9907def812d78b18b11b0e9a36f88ac23020000000000001976a91494cfde57c20624387e23c13aa7912c9df7b7b1d288ac23020000000000001976a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac23020000000000001976a91477ed13d6ea179f7758d06792402740a2f5e3feb288ac230200000000000017a914126b76396676975db775c89f90c64a7146c1779187230200000000000017a91476f2d700b5781839e3aeff07918309b4f1fc459e8723020000000000001976a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac23020000000000001976a914b7c8933264deef54109edb98c00116fe79e62cde88ac230200000000000017a914641fb1e2da3abcd0bb4baab8b5f2c5a1eb3cd9858723020000000000001976a914c0a2ccf1d637a6b323ddf0384d86408126bc3d9288ac230200000000000017a914b2799b53eae70e15839950697831d9fba734b82d87230200000000000017a91401e9a475206b9ae92e26a68cb99762f0f939da5287230200000000000017a914219301392120d9d5bd1b0b15b25efc49745c05f98723020000000000001976a91428b6b4e35ea5da0b61c83fa66bc80556e183596588ac230200000000000016001431afb2fbcbf7fb3ef942aab2ed999209f56d9afe23020000000000001976a914f68ef5654990e45879bf917db676025b7d525a7d88ac23020000000000001976a914a124b037ee6cd00905e3dac6083a710e2038c8c988ac230200000000000017a91477d5aaeba3112e3867859d02c401a7b1dee722748723020000000000001976a9142e1e14e5a9712decb2145a08fc99e7138b8156d088ac23020000000000001976a914bb6da1d4a6636a12a2255ae82c0a54976c0088e488ac230200000000000017a9144aa50ea34d70bbb08f71cb5b5829d9df69b5c7558723020000000000001976a9143ecab4486de975226f9080f36b483d91143ee2f488ac230200000000000017a914647a45c362d9dd25b5c05995b85f5e3b09133c1e87230200000000000017a914497f27973472ebbd5623c7a3f5abc36f72f4e2dd8723020000000000001976a91447ce7922a2290eb54e0e3adc86d306dfaefc4baf88ac230200000000000017a914c5e0a140be90437c77f89244b69e24c13ae9d3318723020000000000001976a914b6f76e8e680e4fea351d75b406a55131b303919088ac23020000000000001976a9140b6653042319b6ecf4b0f4637fd740f44832780888ac230200000000000017a91496f62bbc13a6a9f75a9c7fef368023baf1d4dff887230200000000000017a914b78792558f18ca95c68a4a9ebdd9a7bc00273c4a8723020000000000001976a914a14c5afbfbc7f22457e136193456511b5199d97e88ac230200000000000017a914dfdb0853dce2db8f73333b1d98d1d4b7c3e735178723020000000000001976a9143567ca297d30484e533d25bd28661f454e028a0088ac230200000000000017a9149c928a59d33f1557f82906f454b1ee0d6541ca6b87230200000000000017a9147a6509bf19354baa582c19b053b06a067d70493a87230200000000000017a914c4163a3386d664a19858093297d8599289f79f0787230200000000000017a914921b8b3a7dfcedb960cfdaa2168ce846c63f4cd68723020000000000001600142e745d784d9bf09e10663006e197012d65a7bdf423020000000000001976a91401b4c9546d14cac22495806305f832a41078375588ac23020000000000001600145db684ecee1ede311d713226c2f8a8b39a50db84230200000000000017a914000dec31346ddc41aa34049db6d8c19df8c1de538723020000000000001976a9142edcc8214ce526de2ff9d7250359a718970951be88ac230200000000000016001425d40546af280ebada472520bf1434db33e1b3de230200000000000017a914a89e802f44fe74cbd896168fd4cf340e82311d928723020000000000001976a9147a224c68140c391b37a77508c7cffc633404d67388ac23020000000000001976a914fba789bca97a2299a882a66751e5ff6d08c844f988ac23020000000000001976a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac230200000000000016001496bd6bb3b36ad9aec015a9737a7f99663c93e71f23020000000000001976a914970e44536ee837f50edae2717832b572b875472a88ac23020000000000001976a914225ec49487784a4c6394708e8b392ed1fde28deb88ac230200000000000017a9147554b6b0fce1b5b3cb8587a77d39f45e935df46887230200000000000017a9145582ba863311787efd5db4f095285b73907c46e287230200000000000017a9140e1ad58d851cfc91b540f95f630d3271fd43f7d087230200000000000017a914167c4f78b363d381fc36225d810679fa50c6cada8723020000000000001976a91497dca4eaaf26fc053d3a714b7755ab731d8d721988ac23020000000000001976a91404920812f837db8055d1a1832a9df73d3961dbea88ac23020000000000001976a914c201f40d2b14170b4972390917bf63e4c217281788ac230200000000000017a914a9bc40d7cb8419a3865ff754352a05500ad88c1b8723020000000000001976a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac230200000000000017a914263d5d98b57978daf432243cc68f3671b161110687230200000000000017a914a13c1db2eea532ead76f8ad0cfb28005a6ee0e288723020000000000001976a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac23020000000000001976a914f1c11284a8652b153474a328dad969079cb1fbc688ac230200000000000017a914c8dedab4217ab547aa9e9034763bd6908ab814308723020000000000001976a91497c9d32e43bada27cb80e398adcb60da9a2141e288ac230200000000000017a914f3267d362fc8b9b945e554014df931de7c3fe99d8723020000000000001976a914000dba2ae08ec02a5752ed67cd88062d96587ba788ac230200000000000017a91444593c3c5b4237991dde89a38919df184b151bec8723020000000000001976a914624d31cddd272ce06896ca86845a1eec0527fe2588ac230200000000000017a91453418cb2a7f706cbaee1991f6a5d53420980aa5587230200000000000017a9147b27350e4848b34dbbdc4d3b69c949a28784a7e08723020000000000001976a914b5107766d16ee9a571201218c76a4093138d522988ac23020000000000001976a914780073621cc467a9bc2f377649d2a8d21681219788ac23020000000000001976a914598cbebfa0f62e969692603e009c2617c2d8b2b988ac23020000000000001976a914c4ce9b3731a19a8b9d8487f55776b555c34ee8d988ac23020000000000001976a914757da6e1b2a5aa45c9f449896ef75b25570ceecb88ac23020000000000001976a91415fe20c4d83e3a50bba9d0bace983a4502dbbbdc88ac23020000000000001976a914b701e04a6ec31329868965beaa8892a13a202afc88ac23020000000000001600140a3d9a46b00e01172899902f2a154eb13a68d00f23020000000000001976a9142557acdc634ac7f274bddd53bef20d7bdb3b31e788ac230200000000000017a914a981ca60910138cc2f0202496bb4f81abac07ddd8723020000000000001976a914392893f9e5f8c96760df1d83338ecad75d910c9388ac230200000000000017a9146640205bcac55614aa1a0cdb23dc2a0ac3cf00198723020000000000001976a9140dd1ab497475a5f862187f4cb426499660328e5988ac23020000000000001976a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac23020000000000001976a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac23020000000000001976a914ebb999f4765c05f7f2e0c0d6bf20af9e65fdaf0e88ac23020000000000001976a9146bca413b0f9c1ce960ebf1e45e6babdb3a51e94d88ac23020000000000001600143535b76a791799e024b863b3bd0017cd46dcd6bc23020000000000001976a9147d9b7721645c954c0f8d2f96637da98b036c317588ac2302000000000000160014a3db85065a7729e6f71457dfddb07501b09461dd230200000000000017a91469f373d69ccf84d61386f4238f30139e9a2450ca87230200000000000017a9141cc51cb9865ddc27beca2424c52c028386f2e4198723020000000000001976a9141debb8615138bb3fe17dcbdf38a4572d7c6e016188ac23020000000000001976a91400100a1287131fad1f954537c58455b7ec2a47ba88ac230200000000000017a9149ec319e8ca8a50a33fb8beed1b10445e51f93cf7872302000000000000160014e43768fa81b8f6cd4a389cac86732eb1e563357523020000000000001976a9145a3faf13ca8d6d32ea1f15445411f063d4ee653b88ac230200000000000017a9144d53dba2f88d79c4cf790d7622aa126c37ed62208723020000000000001976a9144b813051e5b38396535da53d25ab26ac3b6bf69088ac230200000000000017a914e6d1a7c98dfd1dc83e53618d95b1ca1a2e303cba8723020000000000001976a91464ef0bf4cae69e0888167dd53268ed7b2f13de5c88ac230200000000000017a914aa09a8f7bcfe9898cb1f4f1e45dabda65e8d48598723020000000000001976a914bee2f97096755e41c0626189e8ac272587c73f2388ac23020000000000001976a9142e8e8ba352ae5d19f83def76212f38434cc45cc888ac230200000000000017a9142f1fec1edbbfb3edd27efad569449ef77e9767d287230200000000000017a91488259df2eb33f749c261e11696155f6007ea961a872302000000000000160014c09b4855ab15f0e56f045f26d5d96f9f16d4dedc23020000000000001976a9145e94d49e9f3adf5895c67d0221bce663e75eb70c88ac230200000000000017a9148ac3d1d6b9029dd09a3ef84f76d0a173c097c2d58723020000000000001976a914b768da04a041fa9286189a439fb1bfe9e84d399088ac23020000000000001976a914a3976cf0ac3bea2486e6320d81a10ec49a0857a488ac230200000000000017a91420d696f07b304f0c7b9b444d21b65961acfcbe0287230200000000000017a91403ba52f5b2be2386c72c94bdb9312d161b5c26ac87230200000000000017a9147ba2a231ca1c2dc9c8696920491f4668d12788cb8723020000000000001976a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac23020000000000001976a914364185e9cb93428f2573a6af31ea654464331c0e88ac23020000000000001976a914801befa66db85b954f2b8d53b18bbe28a688813f88ac23020000000000001976a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac230200000000000017a9148272b97c28883d7b249d2672cf07c9df59dd6f8f87230200000000000017a914c84aa77ff5f0c73a43792ecb840be4bf68a7b45887230200000000000017a9147db3b1c74dce2209fe3c2cf41292c6b385bd9de087230200000000000017a91469f37406884082a433c1c37eab72a9c2f3e94bff8723020000000000001976a914eec325c3280b8f96b736567f5206343adb1ce9bd88ac230200000000000017a914a886013826427a201ae117021dc6baef3b62970187230200000000000017a9144c5a08a5fd93d1999ca06ff3c48355020a85b23887230200000000000017a914754813a7d66dc43de9f4da62d3c30a1fa214434b8723020000000000001976a91464a8fbe5d93c24097d18cb6d1621b8c388d7bc2588ac23020000000000001976a914238909d978158349f520865d725566162ea92c8088ac23020000000000001976a914adc0542b37a628f5b62cf6e3193e6a8fa44bb61288ac23020000000000001976a9141517447e0f00167d5f8b075d638d7bb557272ddb88ac230200000000000017a914494792884f0cd961e7e74fe2d05c1021b41bb06b87230200000000000017a9142012096e5baeaf65af0ef022c63dfa1cc5d91a1a8723020000000000001976a9144e1ffd88e743ddb6e8d0580d077fd24432be422788ac23020000000000001976a9140ec79ad7df97800cb801097b1af31fb85032fdd388ac230200000000000017a914ca1dc3de0f45e2f24b983d47098898643b8832e28723020000000000001976a9142670993cc7036fdc366e1b56f30d225312ac629b88ac23020000000000001976a914cac8fbcd21005430337a9e20b8c407800b24be9888ac23020000000000001976a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac23020000000000001976a914a7b117ea56c5fb7252d3ef6d43ff090fe516197688ac230200000000000017a914c77652fc66fc2c5d884bb3206b3e1bea2c7a48a98723020000000000001976a91411adc7b9454b930884131d368365dc2c459c4ae588ac23020000000000001976a914b5cbbe12e8b79caa7a764766b02f16fd193ef1f688ac23020000000000001976a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac23020000000000001976a91428c42ed3a3e8dd299b981f762ef1ff53b254d05088ac230200000000000017a9140842b932a9d9c14cb5fab966711e4ae98b255f9b8723020000000000001976a9148c939130b81f5e32c9669e8e894a500c0054e49488ac23020000000000001976a91483068bc8913bb8fdadff3c8c5904442af64deae688ac23020000000000001976a9144aa3470fdf120095b24ef762eaf172868714fd3d88ac23020000000000001976a9140993915688c85f1d3c85fa6ee4759c92187efab188ac230200000000000017a914606b209f127812bb02a742a5d7f16caec239548087230200000000000017a914ece17d0a4fc019d93fb99cc945da24f7354a3c3887230200000000000017a914c68781daa5e91fc514cffb8896377702ea7662218723020000000000001976a914721fa96ce32dddbde6fa329f716a8d9505be94df88ac23020000000000001976a9143e3346d087383244c3503967ba2d22720200083e88ac23020000000000001976a914c8f6bd8c6e84cd25235e2676fd7c47bff0d1559288ac23020000000000001976a9147b506577e65212ca6ae1125797fa713abb8e88b188ac230200000000000017a914e025e8a52d9455efc65b4f4c74d4114778d75a8a87230200000000000017a9145cd5ee3205aa5b5177f18ff63337aa7a59fd965b87230200000000000017a914788dac6dbfc1bf0de8ce5f58631356ef8d0fd7fd8723020000000000001976a914839766eb5bd10661530bfd5c1f1966476857967988ac230200000000000017a9144150d1a6ced6f3656bb0ead3e941a71ef31824e587230200000000000017a914fd718b4d16009b5467fdc42f15276f216b16f6a68723020000000000001976a914976c91d993c793d471d45b52977a59c67d0c6cc488ac230200000000000017a91430a88b5a38c247dabb4777c9c8e77799a532faef8723020000000000001976a91482105dbeb438b1481ac20d259221aac2c1d546bc88ac23020000000000001976a914885be2340ea7cc0aa2f8646137d922142d26474a88ac23020000000000001976a9147975b5b27c7023c0bab785899358161209515b6488ac230200000000000017a9144072c1db05ec53b7cb73a9c831e969dec70b5dc387230200000000000017a9143b2767cf89557718a4d428df4d88930a3564e3e887230200000000000017a914861f23bc5f45abc08ebbd1812ceaf21dacc40f2a8723020000000000001976a914c732821624031236109005b43a64f6e21e5cb65588ac23020000000000001976a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac230200000000000017a9145147e139171976445c04aa6b07a16fde5080404a8723020000000000001976a9141575446eb18fdee5e96feee018a8f69728a6420e88ac230200000000000017a914c1bcc07d5ecb4be5a1c7fe5140310c814b4f49598723020000000000001976a91482a05defbdaa76f3fa7c914722d7d5e73d006b0588ac230200000000000017a91450c0f1f426aedeb69c3f69258dd2e5c81edc5aa987230200000000000017a9143fe5a8dcdec64dd7f1b16a1e209a19a4138187888723020000000000001976a914d107b8817df9f949aeb03de75ad5a91345bf176d88ac230200000000000017a914b099ddab3a91d337bdc16be86c74132cff9ec3a68723020000000000001976a914724a879b56137c03f145b65b2dd6596a328fc18388ac230200000000000017a914fad978a4eec17039f7b138a16e5667a32ff3651887230200000000000017a914301cf90b4d58ff1d131524b1ff4a77fcf0c8d7d28723020000000000001976a9149088551764d2352a45c3d3bd18425780e8a0d60088ac23020000000000001600147683a834acb6176d70a7d12ebd94f5af5be478a5230200000000000017a914e64aa1e37ef8b7815678668ad7528048aeaa35088723020000000000001976a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac23020000000000001976a9144f3bdfe3fc3f9a7b9e38a7795ff6d73f7e87e7f988ac230200000000000017a914c751d8f81559bf39516e5e1b33b070dc410cfd7d8723020000000000001976a91462ace1dede39e39b0f6264da2ad2cc60780b676088ac2302000000000000160014d6fd3fe25edf187229df8d0d14e0a946c36f8bf023020000000000001976a9148a33d877639ef0052d42844126c2a4629eede63d88ac23020000000000001976a914b48f9d6c379dacbfa5406012f5b2210d5189159f88ac230200000000000017a91466aaa916dd8232a3293aa63ef663a009685945b887230200000000000017a9147c30587ea632effc1db85cfe8ddee5afc82d8b698723020000000000001976a9145f261bf43e5ee2142cf9a1aaf60d4a28fd57f99588ac230200000000000017a91404839c4bceb4f3dec96af8735d6ffdeb34f5bc988723020000000000001976a914c1aea772552a8738d0147dc7937b1ee160f200d888ac23020000000000001976a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac23020000000000001976a9149f5a900a674aa8415105fcd9b030c3c1f91f6d5d88ac23020000000000001976a914fbf4b7ec9377dd063b06b1705bb1ee4b5526f2b588ac230200000000000017a914edabee24ac1a59441119b96bf12155362653ade787230200000000000016001478122e233e60e9051ad810e56c6366cefe424cfb230200000000000017a91432e54c4244db87b0f496b785afcae6787253fd398723020000000000001600144f7a28d7237e382ebd582fb13448ca5ef37b4b7c230200000000000017a914f6076450175048d25140934ba0609cefd7fd04e28723020000000000001976a914883f6702227fe21f7871cbbf5194c6a28184207e88ac230200000000000017a91421b6db29afd4dfcf9749e0ffdba5ecfde951ef7487230200000000000017a9147615976188fea1b2a7d5d97fa37136a0c44f015d8723020000000000001976a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac23020000000000001976a9148afa968104c60c0bcbc938e26b50157f9389e1f388ac230200000000000017a914bbe57aedb869c3d4d7c27dc1013c5d233be6f6728723020000000000001976a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac23020000000000001600142723e62af3062d344385b699947570e0105d2adf2302000000000000160014f3bbfa985f5635be5776587fc14d862bef97869d23020000000000001976a9143b0849f60d1519925ff3dc92836525815b5ead9588ac230200000000000017a914752a839283f9da5a937865a48a029a0715ed8abd87230200000000000017a914513c8fb40c33abe66e592bcc2c6d9a04fae9c5ed87230200000000000017a91497bb5395e7fc72190017b6bd9ebb2db868c486738723020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac230200000000000017a914bddaa47f9d3ee5094874dfc0bb0768f86c5b072587230200000000000017a914be5c0f7e08571e080ab461a0f10415245479f5df8723020000000000001976a91406f31b02fb5c2d82cc9d583d1d586e03bf479ea888ac230200000000000017a91407811f281a76e6238268b1529f99e0968b55a9078723020000000000001976a914f249f0b175f1a3eabb34af2a8289b8679a7c27cf88ac23020000000000001976a914f94cb26b990b25d543ca08a5ef576afed7a45ee788ac23020000000000001976a91450705377d4976800b2577a0368256f6e4c0ca0c988ac230200000000000017a914e390dfead0ca7f156cf32b53ea3b99527fe2bd0f8723020000000000001976a9144ab176a9bbe75e7fc8839104ad13e3de8beb160c88ac230200000000000017a9142e59bc20a28ada229c0dd39da9bba808777743c387230200000000000017a914de3e2c7ae81461075383ccc51543aa3a685d455b8723020000000000001976a91445547ea426dbf309be1ccb8d6096b6161444af1a88ac23020000000000001976a9141b481a662b1c2cf09be386bf753ce3387d55509e88ac230200000000000017a9142f09e545689363a9ff0aba211c96b6b85a89dd218723020000000000001976a914740cde4465c0a5626d41a52c230a85924b81f03688ac230200000000000017a9143bd59bd84431a3584314c6a9d2abe459ec7a24908723020000000000001976a9145be014adf2f246409de507a55df829c1a2f7749688ac230200000000000017a914855b965bd4a26638cff2088bb0d53bfaab7aabbe87230200000000000017a9142a4a8f556f3e3dd38733bc9b9cb48672f876a2bb87230200000000000017a914a5a40e931f20fe070cd237c17bae489604e03b298723020000000000001976a914931aa26207b3e2a90dbc0a93bf5249d1ed994c0a88ac23020000000000001976a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac23020000000000001976a914685359bd97d54eb904863851fb35b81f2ec4f21a88ac23020000000000001976a91488872bd7a99389e81a7147ba6ba09e1487c384a488ac23020000000000001976a914079e329263059d318333b547a7fae9ff5e78542f88ac23020000000000001976a9144b75f34bc1d88b52f18c2877ad77c910b463a4a388ac23020000000000001976a914436364ac912ba66594d4a2bc4e89a39d6c1f5b2288ac230200000000000017a914e4a09480838cfd49a9c16641520b6f780403b9078723020000000000001976a9147f3b321496dcb0a59c09adc403cc9ab2088799a888ac230200000000000017a914d4d000b0acd6676eeda3ed7edb6fd1d7295ce9e68723020000000000001976a9140aef240f19bbb29c85e328e5a25232abbd740ba988ac230200000000000017a914cede0362109e5af124f6b6ad211e4433a18299458723020000000000001976a9144ccfdb5233429d8ac3dec46dc85c5a6e20a2ab6288ac23020000000000001976a914bd61c2f7c5abd0046e7d257159631cb91671129088ac230200000000000017a91466697a919a4bcc8e75418522666d907908a26d028723020000000000001976a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac230200000000000017a9141941cee43baca7d7b2ee4a57983bc91e07263bf387230200000000000017a914cdfe08d97dc76c12c02551914eeee969dd25662087230200000000000017a9148252d4ac43d329e6255f3672b8d82da5f964bfb48723020000000000001976a9143f527c6288ee1b3b232271fe5ede1be9902c6b1288ac230200000000000017a914a1f6dc6ee49cbce315f800181ed6d90bcd316f6187230200000000000017a914f18f523d4fb2c14b0d1f7d7e7b321fd097226df78723020000000000001976a9142b451ee319672528c653ebc94b216630194a2f9988ac230200000000000017a9145e9f3c633cdf8fbec9d169dcd20051c56a6607288723020000000000001976a9149056c5e9b8520195a72c027e7e9a76968fefe67088ac230200000000000016001451a1281e9cafc8f5f51ad6c26649d6d8789a719123020000000000001976a914f0dfa17c1db83de64bd8703c9f595c5032e6426988ac23020000000000001976a914269cc7cb4632614c575f3674c8ceac0bf2e0429488ac23020000000000001976a914536d303cd4841afeb98fb4c43572b7efaa8535bd88ac23020000000000001976a9147825249ea7836df80639833b754c49bb320b643788ac230200000000000017a91456eea5b32d41520452600d0af39a8dab963e9f968723020000000000001976a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac23020000000000001976a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac23020000000000001976a914532e476facb85e943a7b32948209c35e1c7bd1a388ac230200000000000017a914d33914c7e10a1d47f7b0e66f77e914cf37b0a1f187230200000000000017a91488c48ae75673c9f5d4d89df05eb7124c3c69819b8723020000000000001976a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac230200000000000017a91468b0f118bbe3693a0b8384819954e2305eccabad87230200000000000017a914776f9be149d300daf5ebe3579bdec5bc69d2a2318723020000000000001976a9148c57c0a77bff335010895439bb536f9937af592888ac23020000000000001976a9149182e8c18157c664bc8a3123080738433ac76a6788ac230200000000000017a9146943767502bfbdc26ed1c5bbecdb90039921661187230200000000000017a9143efb24d9ddccd2fbfd65a4e08f89b5246b2697948723020000000000001976a9149424d3ac54f12e252e91e99853e4e3e6e597867c88ac23020000000000001976a91482aabd361a1ea4df42ff8587508794e2cfebb89e88ac23020000000000001976a914d746be6bf6ef309d59ee517d7f76b063c75a451588ac23020000000000001976a9142e56c82a26719facb889434f6914930ea1a0f38188ac23020000000000001976a9149714a5302b510387d3a7ab51cb15d8dcd02b4c0988ac230200000000000017a914ede8db516e6eb07e955f41b700db95f8bab463118723020000000000001976a914781ea96790d9640c8186575a889961cbe8a8ba3388ac23020000000000001976a9148644841d30bc75f67799cf21d8d2858639fc465488ac230200000000000017a914e3547e68036ce8c67afd4853a02d82e02d94163e8723020000000000001976a914867ef01439dffc5c42152cbe8bb330d7305db7aa88ac23020000000000001976a91476b144f69a937b753727c89db29ec8236a53316588ac23020000000000001976a91452c9d0081fe29603776817e8ffc75c177e4d782088ac23020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac230200000000000017a914997e9b9834946b9491063ca7cd3e9f355e2d3d5c87230200000000000017a9140cf6053e8cb9254552e4bae0fe670632c7ea540687230200000000000017a914bbb429f25ba41e3be0b9e0e4cd46557ab8e828968723020000000000001976a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac23020000000000001976a914d206fd2cb2011c961a8402c5d0a84a89b666d94188ac23020000000000001976a914f7211a88d14c581b7784187b5eddd0a2c4cf945b88ac230200000000000017a914992366850bba179596b6e00897c04577b23ddb168723020000000000001976a91448aa7e31474a9ace7c99b7d193eb26d7ce5bc5a388ac230200000000000017a914afd3f6ecd4121fdeaa29fef9dcd6e0015d3e39c287230200000000000017a914be9a327afd51f154cba24b60151b65df96b47e2387230200000000000017a9148fb280ed64eb180f7f6067930d1b7ebdbb947e368723020000000000001976a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac230200000000000017a9145da7f4a1f200cc055456e417755a2f1f409e15c78723020000000000001976a914f0c2385455cc195a07a370fe4d3c2fdbcd37ea6888ac23020000000000001976a914f9be66d347fc983b62277698f2c2d64acf19410e88ac23020000000000001976a914c690fb1ab03651ea84605120d2f16f39b854743c88ac230200000000000017a914f25e0dd26ccfe1f426ea6a6b62c62cfa56815dfd87230200000000000017a914a0e2ba6396acca24948d21a117f9626261615b768723020000000000001976a914560d8715e1ca752b73101318e3f19f7af698071288ac230200000000000017a914988ab5504dbf5742fa947ed0c268a0f1c54a9ad18723020000000000001976a914a2b8f5404e9263c11930720a153ca9ac24bb329c88ac23020000000000001976a9143186458445f45fa48ad843c87bdec06e527a0b2288ac23020000000000001976a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac230200000000000017a9140d8d4165757e30b914106d1076ace4fac70d4c6487230200000000000017a914309efd0a3ab0a58d7e48b3d50c3b1f90ba550ff38723020000000000001976a91456d27d0e35ecd0d2e3b611c6d7df778b5640fb7f88ac23020000000000001976a9148b1b24bd3db23572786fc645ab586918c53d135388ac230200000000000017a9149d6aa01ccac2624eb943e670b20af70d351869a787230200000000000017a914e9106300da4f6297adbe057a46f7a44c1a8dfde58723020000000000001976a9149e6a0b9fdab28719475e27ee9707c3c04a3348ca88ac23020000000000001976a9142e282b9e02a855423a73607d8e50799445f3a02188ac23020000000000001976a914ff19059d0e769d64114341c231ad932004c8f07588ac230200000000000017a914429bdcbc69f7b9ee8a2d6f668c28faeff8206a0287230200000000000017a9146b70c8314c9ead9eb528bd1f0f88e60125b4dd8687230200000000000017a9141001fbaf8c01a0df2ea3120f0e7ed7c1f12b867387230200000000000017a914ce6abc49116bcfc01e3ccb1d8d3f0b0fa4f6dc768723020000000000001976a9140d19ecf4bedf38da71f8877e042b65761742ded888ac230200000000000017a914601b9c4b6d6912df901726ca19b4322220a5841987230200000000000017a914e2bbe80f5614a7ce081674eb119db4b81bb5f9d287230200000000000017a914d4e8739d8d4cf246a62e79a31806de2342178f0a87230200000000000017a9140b1ce3ba0bd3059db9b37883e1f6e86dfae729bd87230200000000000017a914e55943a785950f4572a762ebf4d06376d8bce3ad8723020000000000001976a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac23020000000000001976a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac230200000000000017a914e6e1cfae0432b318d119a758abd47430a43903d487230200000000000017a91458d040eab0a572783afcd8989a21a048487954328723020000000000001976a91448b6351ed99307be4109db2284db8fb9186ce14988ac230200000000000017a9141b0799b947d190cd48c29b2ba1cdc2855dbaf8f98723020000000000001976a914ceb6a0ca98b6a70c95981ac1b9819755f918374e88ac230200000000000017a914ef79002c3ada61373c3330203b92ec71f88046918723020000000000001976a914967e4a6869439539f20171d0822a1e5380b0c72f88ac230200000000000017a914badee2a0f8f6824b636f6da919cdd93e280a00428723020000000000001976a9148d2a64d73ed4f1c6535427cc24dc9cbaa409711888ac230200000000000017a91479d3bf91956b6f2a7c545a3d7f0bbdd84c085ddc8723020000000000001976a9142134dc390dbdbe1686ce1dfe73e03c150b88bb4f88ac23020000000000001976a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac230200000000000017a914eb809c8f114e470219e3425acbc66db5cdf71c7987230200000000000017a914a6fff2fc08b657b4aff459a910c07088642c44588723020000000000001976a914848d5348ad4abb53aeceb1889326ea691f6ad99088ac230200000000000017a9146f4ef58823fc00d69dac01d5b964bdf1fffb11858723020000000000001976a914b770801054818fb88b126d6ce2d12b4b1a788b0f88ac23020000000000001976a91413599514a6b7c728d57f5c8cff51f6ff971ef90688ac230200000000000017a91494b57edf974a36ce5894088a79d91b9170a1d9e58723020000000000001976a914577d326af9d17f8803501e6daa33a483eb6efdb588ac230200000000000017a9144a7862252ad5abc097c3758988ccf1dac07e15458723020000000000001976a914e5a3fc2cd8b4ebc8cbd1d6100eeb100399cc01b988ac230200000000000017a914a3b8f4f16e8e3239c32d99aa2d29d365d4de0e918723020000000000001976a91445a2f2557b1881aa43abe55021bdae472e739c9688ac23020000000000001976a914b172ce176c72ff41324cf773a811cbb8b63c8f4388ac23020000000000001976a914b77e68177d0fef51df52370af08f530cc8e149ec88ac23020000000000001976a914cde6fa90cfb3168082eee9a1f95c4a53d265458988ac23020000000000001976a91411f519dbdb8229bd8492d6ebafd19c1ae64c293e88ac23020000000000001976a9144c72cdf3ebb66afe63f84d13b03bdb551f02e4c788ac230200000000000017a9146092a22788c79334f54b992188eb228b15f351518723020000000000001976a9148d0331484de0aea32b2c5b6a0c8008b032adc7a188ac23020000000000001976a914d242a7cda498ae85e63ca0f93a34361df139680b88ac23020000000000001976a9149dc7e095a01b123d1c99d8509243e51019dbf83388ac230200000000000017a914b93a83566618dbab54072aecb2146e0a3a23a5158723020000000000001976a914433f265f0805da0ed693fa7a8a0eb7e17481c5d688ac23020000000000001976a91469cb35a4cd013f5b39dbc0756387a958d2e4611688ac23020000000000001976a914164e4ad47e82e9c64d267740b1d8b19538a66dfb88ac2302000000000000160014c5bc4243749da6b6fadc232951c20f47bb9d0ba623020000000000001976a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac230200000000000017a914e93d893ee8cba909026f99ef526adc721dfe6f1387230200000000000017a9147053557a392ccd2aa9d70874b00bd4ff35bb1be38723020000000000001976a914f677b6b832e0cb14bcf4da3852c76ef5e7d0a40588ac230200000000000017a91499bf9a21b39b4ae4ea75e0e65a396cc70d0abbeb8723020000000000001976a9146bd6545185c83e9ae7f4c5227c7a9afa34d3a41b88ac23020000000000001976a9143977ad02e704f0c862b7dfa8349531fe5a563cc588ac23020000000000001976a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac23020000000000001976a91445110199352e60642095c72529405ca82803ee4588ac230200000000000017a914f6117e5bbef084bbcb261814bc3fdcccd83378e787230200000000000017a914787de31db40ea280da8d2766d74855d8b218b92f8723020000000000001976a914903c44cf021aaf16be037ff9fc97f06e5aee184188ac230200000000000017a914dc386f2e5ea9e9b0b3e02e174dc0c8152e54916987230200000000000017a914715dd7f5682b30a9a87736427b277fbfcfeb696b87230200000000000017a91433537888983cf93c65c6646a6331e55da5e9223087230200000000000017a91440099fe5ad396a7369c38c268616dbf98380fbbe87230200000000000017a91447c171df591d452c793bf22f76386ccbd55694318723020000000000001976a914e30d1ccfb05a0ad883cdc4982620952e225ebf0688ac230200000000000017a91460d9962367d98e5a11e7eeb522b1fc74750edcee87230200000000000017a91426856425267689b98f2fe376a8b83c5c41ac91be8723020000000000001976a914fc29603ed407951b9661a2a5493a3ba513c9022f88ac23020000000000001976a914d0a33dce453f1d49282abc07219d8cd6791ded6588ac23020000000000001976a9140791f1f6600311c3043e4e247050833567bc2cdd88ac23020000000000001976a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac230200000000000017a914632f6b718f50f1b5a2696d95f4f0782e10320c0387230200000000000017a914488eeb134c35f8ad7c88d649edc1d5ce3108484087230200000000000017a9147d0c3bc2eed630bbabeefff1173186a7b9ad95c08723020000000000001976a914656d55d286d2a59f57a70a1bc57a22edcffc967688ac230200000000000017a9149c3b1585c6d16360e44676ca0acdd6ee01d5eddb875b2b090000000000160014005411d7233a8a125418e61d6c8c928b708b33f40247304402206815a1ecb0d4c756b305b11294ecb497497012a33dad7350a6dde40c95260cb102203e7ccf5b502b6d068eaca24b6d41684f8a1204bdd706ae0a9afb4757be26739301210320e0b0e6b84b23c00eb57b3efe4e648e275dab998081dda155fa376e7d81cc9813de0900", + "blockhash": "0000000000000000000095b7bce82d0d69abb7fcd077dc9b2bce4e0cb7ced0ff", + "confirmations": 324196, + "time": 1599281769, + "blocktime": 1599281769 + }, + "getrawtransaction:8eeacc40538b094b17f2e278dd53a2f6f68e7126ee81bff0ea3bec2fd9a42f66": { + "txid": "8eeacc40538b094b17f2e278dd53a2f6f68e7126ee81bff0ea3bec2fd9a42f66", + "hash": "8eeacc40538b094b17f2e278dd53a2f6f68e7126ee81bff0ea3bec2fd9a42f66", + "version": 2, + "size": 19161, + "weight": 76317, + "locktime": 642623, + "hex": "0200000000010177fddf916ac6cdcc6f8390646a798db7d5ba535dc32fb9ab6e3d65fcb74473c6d701000000fdfffffffd3d0223020000000000001976a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac23020000000000001976a914075b7dfca1465daa6f51b8497af83c10042ef39988ac23020000000000001976a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac23020000000000001976a91404d9d15e67e6f20551992e03039711e59281f72888ac23020000000000001976a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac23020000000000001976a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac23020000000000001976a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac230200000000000017a914c8aac33fa02f6ce31b189f84cffdd94b629a994387230200000000000017a914bc271363437ebdeb214ec115f88363eb2365c66a8723020000000000001976a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac230200000000000016001467730e8d9efbbe6306dc481f67fbe71f95e3679323020000000000001976a9142210aa314ca4e1f4c5f615eb0ecba150e571765888ac23020000000000001976a91466f369d83ae39366c08733f32cd2bde5f2eaebe388ac23020000000000001976a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac23020000000000001976a914d99e0bc516631d93cd42ec5047fadb98c34fcf3388ac23020000000000001976a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac23020000000000001976a9144544d4a8bb281f6343f6ae7c4494d1213eea539888ac23020000000000001976a91494663df695c07ca33b453bab9320776b2c8d894a88ac23020000000000001976a914654e15dd3d72c91ecf696d375404ab8b10e9819488ac23020000000000001976a91406ae5abdecef3cf94d9ff03e162126e9cf76009e88ac230200000000000017a91449c3f9a40d5ff5bbcf5b5a7e4003d8630f5c1b558723020000000000001976a914fd59f4e0839d4498a4c29e474035a0218b27df0288ac230200000000000017a914ef99b01bbd57532d46e29fbe16b53c0ab180a0428723020000000000001600145ba7e1fc2123dc0cfd679a603258820c82caf46e23020000000000001976a914c810dbe2558e83509afd6e9a9d0f43f495bcc9b188ac23020000000000001976a9149e63d0e87134f67a72cbb25d926d718ff65bfddb88ac230200000000000017a914aad38c08b3fb8c6497855458053d86286612579887230200000000000017a914961d1208c7e7962948e4add21c36f6f76fc7545b8723020000000000001976a914d4a8831deb1487a5dda5d822b7967a4be0376bf888ac230200000000000017a9147b722453ecd8720dbd2426532f9b92bad3b2203487230200000000000017a914d895f3d9283b6e2009889a586ee7561ff47ca26e87230200000000000017a9149ed314ccda5f026fdda3090ceb8250d3633bf8018723020000000000001976a914eeb9bfae6970996e886bfa5d129a551c724baac888ac230200000000000017a91409f6552c125f95ab66845f29fc487d2e5c493dc18723020000000000001976a91435d31f84c9b0029d849c77e4de53439667a856d888ac23020000000000001976a9146733fa09b089197b520faee941693a593dd808d188ac23020000000000001976a9146fbd758b9303220db76edfc69102a06f07546caa88ac23020000000000001976a914780073621cc467a9bc2f377649d2a8d21681219788ac23020000000000001976a9142a7d0596a763aedb4b203c14ed8beeecf72eaf3788ac23020000000000001976a914b0d2e93bf8f240555d0bf6af3206a1826a43815f88ac23020000000000001976a914f8ea45dfa8c4635b6aaa26383fe8c2ab463566db88ac230200000000000017a9141777603fc9ee07e1639b37a845a137c0122d8cae8723020000000000001976a91403a6c5052abc1f593f98d5d4a7a41409ec8cb63288ac23020000000000001976a914fdaa114fe15a26c90018ae004e115ac5e8595c3e88ac230200000000000017a914c9d287a3c3c4cbe914ac00728593c31b94707ad08723020000000000001976a91432e9d486f238fefdb91bfd0efdc91dd76a4c9b7f88ac230200000000000017a914b794c610fe2a25e47fb947a98ca219db254460108723020000000000001976a914f32a622f13d9144a8cd240b557c12948310b217588ac23020000000000001976a914f0c8a73d7879df9cc691441c2f51257e0d1cb09388ac230200000000000017a914021b3723c6306502c0e5567c62093371dd92bcb88723020000000000001976a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac230200000000000016001420b48eb0241d3a23b1685848d50942a5e18c54c923020000000000001976a9143de5097d8b4ec74dd13a533993dfa6645e19878288ac23020000000000001976a91448abd76e1e05850d022aa983f0cee649db65fd9988ac23020000000000001976a9143137dee234aa07a80eb80674a9e47f6a29fb897988ac23020000000000001976a9149a1baceff12e8eace4e0c6ee48f591a05c939a4688ac2302000000000000160014750eeed48747c3a599f165d93bfb63859ff7a13e2302000000000000160014227cc0682276b286c28752e20a9e1ba518b08fba23020000000000001976a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac23020000000000001976a914b4328a68b970088a5a810a2739ec45100a58931988ac2302000000000000160014b02883a8c50dfb8714fc8700833af5eb82e6af2923020000000000001976a914d1a1b01257b8c3025ca8a6374513b1fc692bafdb88ac23020000000000001976a91473c4493b05dcfa8147641cc05b71f8321610dcca88ac23020000000000001976a914af182b20e495a2e1b8a041ce1a14ed7b33d877e488ac23020000000000001976a914eba4a834c3a334e7d1e2fb40b3efbb2192be23a488ac230200000000000017a91469f377316b8ce9058bf10a39a8c72b69cfef482287230200000000000017a914fa22d16ff1fb8fef3a625a49688f92764988a2078723020000000000001976a9144135ca337c6b83fd20083fe6b678172d3b8e12d088ac23020000000000001976a9146eddbffac833e751740145e8b27b2b6bdfe3670a88ac23020000000000001976a914651840a7fd07379d035f9bbefa8fdcb79703ab1d88ac23020000000000001976a914637e4725f8fd24ca44b38cbd8e38581ae37470e588ac230200000000000017a914feb95d38b02d2ba34ee6528a597bbcb4be425ea88723020000000000001976a91459ddc146a69bba84368ca34083da1179ea5f296288ac23020000000000001976a914c080e9c542e8c104128da4cd86ba5e71710d96ab88ac230200000000000017a91456807aff9268b6a5ab82e4b8c4eb4b87b0d3ed418723020000000000001976a9147cef5da9e49552b2c56073c859a4974e2823292388ac23020000000000001976a91433ef0a1835676b42ce72cd56d30ca6df0e20662b88ac230200000000000017a91449243c31e8c73ca3033f5ce995e313be6c82b6308723020000000000001976a914da8af24b7c75a65f0d69b64cbac32ac38c292dd788ac230200000000000017a914373e9e2ccc4531e0abe8a08e0cb5f3edb843649687230200000000000017a91472883a3d6ba033b9dfe0094324f129e7091273908723020000000000001976a914a10c673f0f157d701791af288b2f4be83540dd8688ac23020000000000001976a9144f710ce31b85abaa47d5d064a85d843547680c3c88ac230200000000000017a914c02335212dd81ccbbcf798ecdda74531060f24978723020000000000001976a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac2302000000000000160014a1cbe54b289c77e0de14d49db1cab7df4be89993230200000000000017a91469f373acc624791586a0a5e25bf56e7601b04bec8723020000000000001600141e3253c0e5da89493d25c239905fe221fdd50047230200000000000017a91491fdf28fcb2cd7538ed23dfc6b56581c192f61bb87230200000000000017a91410416ff841f8b1444b4c9d646c4571e45a6834bf8723020000000000001976a91424744a5ccdc2d1e73aa1fa5a96482fc96a9cdf8f88ac23020000000000001976a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac2302000000000000160014b7e0e236b22fece167e7143fd4769a8373c15bc3230200000000000017a9143393c78de549a0d9dc77b91de4be75ee518ffc5c8723020000000000001976a91475cc58509c6571c76808661acd803dac8a5ea86988ac23020000000000001976a91411db9f1bdec9fcb5f131082a197da32c64e0c6f788ac230200000000000017a9141f7387352f6eee7bf1eed04ed475903b5adb53dd87230200000000000017a91498af20e112cba7d9c8820ea7aafd3e35241be6f18723020000000000001976a914a66a364606b5e4e8f01a63c12021f58f5aa7c41688ac23020000000000001976a91477ed13d6ea179f7758d06792402740a2f5e3feb288ac2302000000000000160014e030e90659c435a17396087829e4551df69a4cf723020000000000001976a91472ac12ffc3a6d061ce04eaca84d6ef5ffcffce5d88ac23020000000000001976a91422e74f00407e8b7e0da50d89611e0a54f1f36e7388ac23020000000000001976a9148644841d30bc75f67799cf21d8d2858639fc465488ac23020000000000001976a914340fe45273b18bfab6d7da1e3941c561188541a088ac23020000000000001976a9145de14b18f356127e5f0ec8ec5513a2e1ab11775488ac230200000000000017a914d5fc5d311447945fc2b5e68a813d3c33954a361b87230200000000000017a914ca0e0fdf70bac2e68d3a80b1b8182b9746e3835c8723020000000000001976a914f340f146a357e457ae42b5588244495e3a37a4e288ac23020000000000001976a914c2e95ab2e3f67ce183931fa42160466a3e26142688ac23020000000000001976a91432f4ed9674c4f3f954a9116289c30dc3e755eb8288ac23020000000000001976a914e2ca88056f5b0aac2a247c13e79d73550ddbdca488ac230200000000000017a914a199e7ea1d5747271d0df63616fd323068c4d46f87230200000000000016001416b117a1cdf687229c910ac70c32976d6bfa072723020000000000001976a91483068bc8913bb8fdadff3c8c5904442af64deae688ac23020000000000001976a9140791f1f6600311c3043e4e247050833567bc2cdd88ac230200000000000017a91438683707dd6125db12ecdc8213bfe0012c14df5f87230200000000000017a9149b7739de6dd1ea74eed27a21a5f171eae9abf13887230200000000000017a914d2df9739fd4304cc8cfbb6718c93919ddc4422ad8723020000000000001976a91467142b2311a80233182c37a064b807f8513b6ce288ac230200000000000017a91409dafbd77d1fe4440dcadd5a0d56a270e0bf06478723020000000000001976a9148745551198a5b5ac2b0a56baec75a85e265b779088ac230200000000000016001454b140b3d77be62283b655c3ff5351ed5ff06f1323020000000000001976a914e0be570f0909a4eedc8e82652c7f391038f00ccc88ac230200000000000017a9140b76253add4f0c02b02b541d0d825adcf7c8bc678723020000000000001976a914e0da6065ebea41bdac9e86a8785ebfbb6835399e88ac23020000000000001976a91416c6dd3f32a4f70baea941fb4e04fbb25725d62588ac230200000000000017a914c0c02e07ec311c906a2d5bda65479fe4e0a65bae8723020000000000001976a9142b24e4d40a9230c4e40c952c6911dcd8163b75ef88ac23020000000000001976a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac23020000000000001976a914d0b7646157335f64985416908aed1b23b07d487e88ac230200000000000017a91481ee7b0d88f7a2e8268a6d7d8afca895a6bf90b78723020000000000001976a914ad1550576f4d298fe6631a1a14d2351a9d143d4588ac23020000000000001976a9146e50675bce4b62d6bdf99670b2b1536b8605f02488ac230200000000000017a9142559538fc021fc79ebb36d1e645e19d5fe765a4087230200000000000017a9148d8b0e4fbd0323048fb862b2f607cacee1cec83b8723020000000000001976a914fa89380979e2045d96f4f4e0f9bf0a42617f61d288ac23020000000000001976a914c2c493174000385e6b66b57c115363434f96ab7388ac230200000000000017a9146c1ca21ee61c804a598d589e810d5231faf726c88723020000000000001976a9146ca4bdea9b6a4cc760f42c09a05bcaf42ccda97b88ac23020000000000001976a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac230200000000000017a914036d1057bdef87b17f3cff827e350001a6438c568723020000000000001976a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac23020000000000001976a91454615beae9e8040f9e0da7f4d1eeac1c16eb700688ac23020000000000001976a914d92ccc2e4f3d3890f3f0437a2931da4447b8cbcd88ac23020000000000001976a91492af8342d5ee6f6b0e61f9053c4b971707573ba088ac23020000000000001976a914946ad998c6c5b4888ed345d99e25fa773d09f51b88ac230200000000000017a914386bdba1c0eaab78c98503bb0e45ab93aee0fc3e8723020000000000001976a9146372816c3fbf94740eb84a40c57346681543f3f088ac230200000000000017a9147ea7bfd3b57161fa96a8626a0f84a2b2bc71d91c8723020000000000001976a914b127faef1471c75dd361aeeb3ed1b74a0c9b56ed88ac23020000000000001600141bfbba09650aabb7ec28a4397c5c5bf94e5cbe0423020000000000001976a91467b4b3ab6004169178a10d53ce094f1120a23f9788ac23020000000000001976a91493817fc5a7544f050968561cce1dd65b6fcb612b88ac230200000000000017a914d53c0e5febbe7b0d88e73e7f69a6e3b8530a032387230200000000000016001444b31738b3df687c3db164d4cffd5f52db363272230200000000000017a91449d8f82bf0d2048e9c672c669e999607b19e942a8723020000000000001976a914d65fb84e0e0e14f5e22ea49a1adfe24700a3168488ac23020000000000001976a914dec3ac2bad60a475e21ae691b287de6598b7d86088ac230200000000000016001441ce2dd73cd2bc3eeca37544393c7a693e028fba23020000000000001976a914e5951b8fa2147d67c1dc6b02b7dcd284f643e70988ac230200000000000017a914396d4f0aa1db54a7906615579b70d837716b300887230200000000000017a91447bfc46613f91710e342d4d3cd2cb9fa8f85272387230200000000000017a9149c00d6ed78844271e5c1c41de7f5878f2fc315218723020000000000001976a91476c59a68f0640273c713797559b5690b933dcf9d88ac23020000000000001976a914ede19fbba27388ad2507febed524dc200276b49488ac230200000000000017a914d99d22b81b499a98c4ddd70699f604fdd865393d8723020000000000001976a914ee159f28d77af56b281c0101b52646f860604edc88ac23020000000000001976a91487375c512452a9d8a41865c60f5b241fa3520cde88ac23020000000000001976a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac23020000000000001976a9147fc8916d76f37e65e4cca88212d6337a1fe5d69488ac23020000000000001976a9146bd32aa9d4559852697d2a6b0b0ca45eb970abc888ac23020000000000001976a914b701e04a6ec31329868965beaa8892a13a202afc88ac23020000000000001976a914a6a3bc028bab7c7e16c1554d8efa3e3cdb60c91d88ac23020000000000001976a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac230200000000000017a914084b858cc62a1b6d1a75707fc53fc77187ecb5a38723020000000000001976a914a0d752e21b08c32c012c6bc378e99899ec2f6a7e88ac23020000000000001976a914909fe17221a59ac2b6a55353a810492ad40f090888ac23020000000000001976a9140e460dadd09eba856d2ba0b65c7897ebe188bd4188ac23020000000000001976a9145034d1bdaabdf22372642c1134a9a083b0bd823c88ac23020000000000001976a9143652f68deaf3b549833cd102d1dbf9b8f566a50d88ac23020000000000001976a914fb0b9cfd608c02f610834157c65733e9534c618488ac23020000000000001976a9145c94a3816ea37ed47cf3ae8af2bc6a9ec7438bdf88ac23020000000000001976a91451d2345854530988a47cce352413df0c009d6dad88ac230200000000000017a914d36820f42405bece04291b2a153351026eb58de18723020000000000001976a91476559c1c07448e1708531c62c068d7ab12b36ae788ac230200000000000017a914a706476a6aa99faea67733b4fc0867e2d719cbf48723020000000000001976a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac23020000000000001976a9144990266f703d7d678358f2522b120a3d3c415b4488ac23020000000000001976a9147722a4a4f25a86d9bf030b2428850fa2d7236fca88ac23020000000000001976a9141702f435f0985e2425f41ea14445513ba8d718b388ac23020000000000001976a914bb7b7071487858a7d74094277ab5f7c0317a458e88ac23020000000000001976a9140610d77af7fa5d507238e1e2cedaa49b12bf31c788ac23020000000000001976a9142795ae9798caf4d1031e6da4cbb538b3704546d188ac23020000000000001976a914262b8f010039d7fc20758521704419895d0f397788ac23020000000000001976a9145d73398d15aa2c73047092f373d2482acb14620a88ac23020000000000001976a9149c1a5c20ebdc5ea3f1c569b1c41434b0338800b388ac23020000000000001976a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac230200000000000017a914cc5a684e8c05ed87418d7419775ffc3ae831b2298723020000000000001976a91467e883e47b6148850c46005edccd46885780b55188ac23020000000000001976a9146008c4526ca972d4bdd11a91088e16f545ca68be88ac23020000000000001976a91418275e0f841720c1059f8297186b983eb986903188ac23020000000000001976a9140bbbcfb584a7840c2fa750b9b99b6f2bae6eab0e88ac230200000000000017a91498a000b947276d10099da60a8248c554c1a155468723020000000000001976a914a68aa9ff2abb5ec82b72afb1c79531ff40f005d788ac23020000000000001976a914f1ddb8fd5a07d17bb0933f02e845a4f01f07cef988ac230200000000000017a9146aa286d095c5697ecc0da66641ac416303036ddf87230200000000000017a914f7601fb07c209aca9b9c9c698024315b3bfdf9f98723020000000000001976a9143ea91d556619662f06d671a562479291cd97421088ac230200000000000017a914e78171ef985a53e28245c8e5bca1609ebb97c88b87230200000000000017a914857abc30a304ce491a8b825584a17115aed228048723020000000000001976a914f9a853e9ebd7092e66682714fb760d4aa954cca388ac23020000000000001976a91493f19e10ec04376ffe0b2de59c029c387923910088ac23020000000000001976a9145757915f0eed40ee98b2705d45b4079be70a6f9988ac230200000000000017a914d08958185aaa168fb490076a3c88097149e86e898723020000000000001976a9149ad10e1140bb2d6271c357d7e4d6174e56ddd3b188ac23020000000000001976a914b77e68177d0fef51df52370af08f530cc8e149ec88ac23020000000000001976a914721fa96ce32dddbde6fa329f716a8d9505be94df88ac2302000000000000160014a1d8ba16696309d941189947043882ed459d38c823020000000000001976a914818ae62c3af88e75f7272bc93e5d8df012ac2bc788ac23020000000000001976a9146fd501f0acb1bc3c1fae5fbd13d50c8ba2d3ee6188ac23020000000000001976a9142b8c528bd2ab6223647ab92a5813b129ec2fe00888ac230200000000000017a91489c82536a9a585676fd059576ef16d5ed003867d8723020000000000001976a91472cab65a9eb3a36100f9107bfd87c7a5fd9a496c88ac230200000000000016001476da0eec310dccaa9a72f1904f484e919906a19d23020000000000001976a91410b734814e7fe83e2e961386a957443dd76dd3e788ac23020000000000001976a9143674c2327146339dd0c6a18222704c059a2417b288ac23020000000000001976a91461f639d51c4a1d7922fca16c9b95a51b0cc1bb7f88ac23020000000000001976a9140e0ed983b3662da774636c3f41d304a3df82a79b88ac23020000000000001976a91492fd964b4823834d4c510ab4d4ae4067b1fad67188ac2302000000000000160014f2260443f374fc114cad27c12a266658135e7ecb230200000000000017a914aeb44898588bbb2f2ef6c1c916717337c03bd61387230200000000000017a914d8c9a8e4641f21067e986c19a41952a1170659518723020000000000001976a9145815f199571342a34a5cc389c1637607bb7768e288ac23020000000000001976a914973742d7d2e371c08540234d73008fabb99096ac88ac23020000000000001976a9144fce53c1025c69b18635c4f075adec3871d468cc88ac23020000000000001976a91443b736e4722b29f84220d6d9a570a720054b521988ac23020000000000001976a9144841c24ad4add41ddb2a0c4057624cfe08d8ad6788ac23020000000000001976a9147f2186949ea07a2d877f3c06670956a172be90b088ac23020000000000001976a91451896a34d6469db638daa2b233058f8193a96d9888ac23020000000000001976a91496ff60176c985e73606efd1a1ff2640318b9271688ac23020000000000001976a914a4dcf4437276aca54864b97e3105e4837858142888ac23020000000000001976a914dce19c16837b09a94c17f55a069e05cd8a618c4688ac23020000000000001976a9147ccd678bffd280b6db6cf03a8df00ced84d5481c88ac23020000000000001976a91402a6e5c01bbfc6d7638d9cfd7ced0fd8e7f3477b88ac23020000000000001976a9144c388152d1d380947df48121d189709b43ea3d0188ac23020000000000001976a914756a03cabf6aaa4018a69fba608fa8fa22219e0988ac23020000000000001600146c35ba0aa9587faac50925653e83ecda6a0c2ab323020000000000001976a914ad75880397169c6f584050e7072b39fe2e0b88ff88ac230200000000000017a9149bfd4e1c623bb413a7e2c571aae916cea48976e08723020000000000001976a914f4493cb6185988579db19fe22e8d02afc8d9346588ac23020000000000001976a914de9e71d81e32b0091806b868e77066e7cff9dc5988ac230200000000000017a914de43c4a3566606f966e1446638f29aff696099dc8723020000000000001976a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac230200000000000017a914e9e581032de79c4bd8815ca6c00107b03608b1ca8723020000000000001976a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac23020000000000001976a914b847a94efc698a501714276454877bb14fe12d0888ac23020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac2302000000000000160014ff278079bc27e733b8b52a2bf2dd54895ef52482230200000000000017a91481dc9fbbe39b908c0bb8a20e52c0c8c998982e9687230200000000000017a914fd40a63e0ae5329f49201744d02ebc414acac46f87230200000000000017a9142e73dedee0677e1aa22b6be06524c29dc228351f8723020000000000001976a9147c5fa1dd1ce47b1f44ef80cf0d2633cb3b5268a488ac230200000000000017a914c9fef5d20504b36e6159a5a2cc9d5174b0a04ba387230200000000000017a914f06b1a268ecaa505a03f784fe41522f02ca8dfb48723020000000000001976a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac230200000000000017a91407648206ebb8827c8739156278df9ca8195c5a0187230200000000000017a9149e376fdaef5115912bde5946cba135875b6e0e6087230200000000000017a91470d92063e779fbf7237cbfa3a825428fc3f84bff8723020000000000001976a914f9e01035fbc3a949e6a42457e1da5a286dccb6cc88ac23020000000000001976a914b2b07a9e02ed19b2177c31004045828c8cc9429588ac23020000000000001976a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac23020000000000001976a9142e67012f348dd86238f724e3e977e3cadc8d5db188ac23020000000000001976a9146a8524fc7da13ac68445135295204e55e3805ebd88ac23020000000000001976a914b144f5d508ca1a1a3f46b9c3175b36c6804a6a3f88ac230200000000000017a914e9a3576847752d551b36e86f22801cc972c5a27e8723020000000000001976a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac230200000000000017a914fbde6edab2f589fe6e45ea4eed0fe83cee8649d88723020000000000001976a914164bc186dcadcf594afe5489e5a3f35b9035b0dd88ac23020000000000001976a9146564d2a3b7c578216dd566e01b5891d41ae6bae388ac23020000000000001976a914cadd828fa7d7fd7f0bf013aa5104bd43da99d83188ac23020000000000001976a914d0c58d61ce4b06f2d2298e60fdff4183569c26e988ac23020000000000001976a9141c0aebde42959e95f6aef9865124b73f92577e9688ac23020000000000001976a91429de092bff44eb7d86079c7865c4899bd451ecf788ac23020000000000001976a9146c3bb729eabb92faba374edf5ecbc30c9d579e4088ac230200000000000017a914ee517272c0ba64faca2546b903eecb87c5b9e5fc87230200000000000017a914d816942aaee719ba4dde28de6daa401ed4db5be08723020000000000001976a914752bdd6714f3d711b73d255384dd6adeac2a75a588ac23020000000000001976a9143f1f25c07c9889744d699bc14802f1d8c3bdaf3088ac230200000000000017a9141f0486663b1d0024d56c19706d5733d21b1beb5a8723020000000000001976a914fbd52c1615139a753086474889045a9eaf2e285188ac23020000000000001976a9142733d2807f33b1546fe2b83c6c2e8373672d51de88ac23020000000000001976a9149a07d7fe95272da9518be00bd0fa152c9e2aafe188ac23020000000000001976a914885be2340ea7cc0aa2f8646137d922142d26474a88ac230200000000000017a9149af56242d9752549e49833bef76a46600a3d2ff08723020000000000001976a914ddd53b280cace9c9028d15865f619f55959969b088ac230200000000000017a9141b0d610e72bf1694cce003dafe7b63281012eda187230200000000000017a9147bc81232b0bcbe7cd56e3300a53ffb89f45e15738723020000000000001976a914ff973115b31f3e85a5ccbe34935e84665735eed088ac230200000000000017a914dbe702194fb530650e620337c671deb060fa82918723020000000000001976a91429dc431a103f399b97266ad67e527d9afbb3a08b88ac2302000000000000160014002e8643dd7fb0cdf7358cbabc00275b5e4a65d2230200000000000017a914b75bd07f3d696fc1301840767b8e37a86d22a6d387230200000000000017a9145c1f207c27b7724c862f8fd8fe85c6628888b8498723020000000000001976a9144b96a74e22154962ebd9acda1ef795f62661a67c88ac23020000000000001976a9147581082908e7ccf5f8e3ef5aaee49dfe652fb64d88ac23020000000000001976a914fb10809be31c1684637e12aa766d06e463cd515388ac23020000000000001976a914705b139f7e9e32a13b546f247caf7b9cd63dc66488ac23020000000000001976a914df91c8b4a7ea2a7f1ceb71801e9e6913326a72dc88ac230200000000000017a914265d0796d7dc4b9864bbbfe5fcd0890e2b70d87d8723020000000000001976a914153cc57eb84289ccab848ed15b40232a3b36fe9c88ac230200000000000017a91490f1565f95bdba9cdb19ef3b67cbd775d055d3838723020000000000001976a9145b2b81c5afeccbacf0c0a8b00410b770b75e169e88ac230200000000000017a91493adcda4f3ee2bdb35421dc817a6e1b28896c3fe8723020000000000001976a9140099bc2889ff177003aab6d482c1fe5568d2a7bc88ac230200000000000017a914bb9e272c4417c669edaefa7f85ba57cea13dd7468723020000000000001976a914e247c564074c1534590850d0ad2ce10129f51abe88ac23020000000000001976a9149dacc4c22583429fff9bb4aa8a172228d99e292f88ac23020000000000001976a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac230200000000000017a91469862f82ef8f6fb2eed83b7982aa1e13ad29bb3987230200000000000017a91440d69dc50dff7b0c3ab1b69e5289b0518b0121e987230200000000000017a9149499327ef0a2083257a55414339d255dc59fe5a38723020000000000001976a9146554f11d672fb59f03389b4c70439a6431485fa188ac230200000000000017a9145de528995e33e42451f84c715c76d9a3bffedb0887230200000000000017a914276fa159a226a1b27330b6ad2bd4170d61a02f578723020000000000001976a9143c11bb69bcbb79f5b579ee9d03cef3bce3a57ef988ac230200000000000017a91474882fc22c925b58fe642acc7c21625beca873a287230200000000000017a914a6f85ccdac81d8ab2595c031c9db7829df00d21b8723020000000000001976a914053dcc648e056f9c8c9716738dbe681abde859de88ac230200000000000017a91452a6fc85fef64752363b27f6b33cf27b67b641148723020000000000001976a9149e38b6f1bbaf1252e0f9e7b4f8b01ef60dae124c88ac23020000000000001976a914703685db243bf911135f28c2a81349f9ce02103b88ac23020000000000001600140cb2dd3ec9c2afc51d1fb9184f4f60ed8b3aafe023020000000000001976a91459b180bd012069ff1d1bf333e32da2525c854b4188ac230200000000000017a914162d4a6316f55960e3e1778685db543500c271958723020000000000001976a91402aa7a605300f3561a1ffd52bf125075aee33ab388ac230200000000000017a914e0ebc1a0fbb7cf5a643045d4a0316da7446e00528723020000000000001976a914e85fb60102581e2ecba5b3efca3bc7b1b1c2543d88ac23020000000000001976a914fa88abda67a0db10b767c50ce9eda477e7b2219b88ac23020000000000001976a914e5bd5ee9f3f1193e7206b0e2ab6fd669ee5716ce88ac230200000000000017a914ae03f937e3023d0e0ab4320237a35294c1e0c7c98723020000000000001976a9141373f18df0ed977ba4c7a48d1e881364f5d228d388ac23020000000000001976a9144bbf568e878edc4d01a8c6a5c324ff47ec7cc53588ac23020000000000001976a914d534f3ee9d11ea9559ad803702319463e24f77be88ac230200000000000017a9142369be34d365e5bcb03e6bd9a73a975e85db11758723020000000000001976a9148f22a67213ef2d7704a7d8e8f4f88ff3b3d4270788ac230200000000000017a91476e2f479fe48c0a7a93f5e56fb464a31320920b18723020000000000001976a91458cc51d1d59194d959fca752e65236e3c138a85288ac23020000000000001976a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac230200000000000017a9140048f425b4104fcc90976b349be4f853b264e7038723020000000000001976a914aa745d87bdda28946bfa3e97b01b334e9df7320088ac230200000000000017a914277827d3808234237df4f97c62ca0bdaaf90c49f87230200000000000017a9146d8a14c0934e6effe1d4213e7d5b1edcbe51f5a38723020000000000001976a914ce8f3c82f062ac2e546530cfc107378e5ac07e3f88ac23020000000000001976a9147f3b321496dcb0a59c09adc403cc9ab2088799a888ac230200000000000016001467d77e9766b1dfc8c84a99fb958ebf695d390b01230200000000000017a914618b8a2f5558753e7e2df5ef0b97bd689a963ede8723020000000000001976a9143f1a425ab596163ac164f67f2eb3876df16d269888ac23020000000000001976a914000b7001028a72d8188a9fc2886c6c754c94d68788ac23020000000000001976a91458c286df31d44de5a369eecae97f7f61d2ff85c288ac230200000000000017a9141d1adf938502c39c6e7ef4223184e2c0cbca2e518723020000000000001976a9141ee8bc579e5731502dcd6cc626cc0981738eb6cc88ac230200000000000017a9143b757a786bd5a5ec69b6e822165fc59e32ac4a0087230200000000000017a9142e62a0d42d83ac5350c9b7c8ba95155359aa9c6f87230200000000000017a914a52eddb33c58c3368d0c348e0f1e6e9a6d6b16e58723020000000000001976a914b5a6140e6e7e2d164c28760ab4a770ec1bd8220288ac2302000000000000160014f541bbb231d9f086ef18bc7b739cf7afd7680878230200000000000017a914d272e2b1ebc47ff35179db3442eda0c23449ae0d87230200000000000017a914660b914c2671c9c93e759c7bea6e907a6f0710bb8723020000000000001976a914cd879a594a99d25cde4c54b3185e1b0c33d0621588ac23020000000000001976a91493023916bfb7f730c5e0367c24a450e9cbcb165188ac230200000000000017a9147093495280495ad1ae5461753929c0a349f37c3087230200000000000017a914e452286598805cc17f731a4374bddf2ff0a18b578723020000000000001976a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac23020000000000001976a9143faaf5c434eb1c9ce5cf5e3dd44a6d0dcbe3e08088ac230200000000000017a91477c98c448ed5f6dd7c76ceb88f2d900e1093db148723020000000000001976a9147c3c53f3bba113f7437543a140ba714a78a8bd0488ac23020000000000001976a91436a392ceb11ffce13cc235fb450380bb2bd168ca88ac230200000000000017a9146c386cb916f05d3243de43d6315433658baf1fda87230200000000000017a9143e97c0c8881108f37c429486e3ad298db3382f1b87230200000000000017a91441ec75586c737fef2d803bf474cc53b52166813c87230200000000000017a91433cd3292f8b3598cff5a3210b7137c59d53a7b608723020000000000001976a914dd91d9fa14cc760cf67f7c65c031d89d5a65c97588ac2302000000000000160014d03a54c6f4c9bbe37f5a29bef75b4b95f7a4906c230200000000000017a914729bfa42a28018849c028e8a7ad53653b77430c38723020000000000001976a914207db13b11d6bdb713950ff1bad130013219de7e88ac23020000000000001976a9140dd75502ac89aa23dd3d278b0ed4ff4d08f8995088ac23020000000000001976a9141825b6d879d8509f9c4e3d3393ebedfd96d6718888ac23020000000000001976a914648d037e4556e72dce498c2876e7a0cf768259d988ac23020000000000001976a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac230200000000000017a914d2ea32126a227fa7d2b9d925f55871016a514afc8723020000000000001976a91493c0bbd6e9cd123da75e2198ac45a91557023f0588ac23020000000000001976a9142607246affdf371fb08369bf157ec56d1858dc0b88ac23020000000000001976a91499b8e94a802ebf22eb1163d10856c37f087ff56588ac23020000000000001600149852c66ca896ef584e7badf97851040be2a5493e230200000000000017a91495e76670d715ca5cf777bf4607030bb31a78a8db8723020000000000001976a914457870a7bdf47f73a63cfe1910262c22cc2a2c5a88ac230200000000000017a91436f363df99f2610734f1f25dba8a947fe2fa68bf8723020000000000001976a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac23020000000000001976a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac230200000000000017a9140824ab69a339d663d1be5a104a27a97435fd47eb8723020000000000001976a9146665caf1003a1b0694d66488b7f9f0d35e3d012c88ac23020000000000001976a914d4e485f3a1ed505667f59ce054146664f0bff81288ac23020000000000001976a914761a2698f767b271c78e26f05a23c207455ac68788ac230200000000000017a9142657ca64849d95a6cbf2a53b272191e5c6284f348723020000000000001976a9145715d2ed3f764eada6d330f3405f87590536e3dc88ac23020000000000001976a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac230200000000000017a91437cd6538f735c909e9f5cf0435d9ba8ed93544378723020000000000001976a91486f589bc4ada04ad3296367e4bff8ea97fbc347e88ac230200000000000017a9144242de3aaf3478d28a6bd0f39947c1357e86c56887230200000000000017a914648fc1f56d6467326ee3e6172811dd159e4648e88723020000000000001976a914327c591bbb6637218dc794788cda039052199c2a88ac230200000000000017a914bb43ee6eb0111982aba625e51e2503da2cdc7aa58723020000000000001976a914a6920fbcd9ca80fa363fc8066967c336ff25294588ac230200000000000017a914fc59a9558c4afdb5f3083d4dd17cb3993079bed08723020000000000001976a914713b2b3ef6c0c07c29be88f5f2a4cdc950e7645988ac230200000000000017a91491f7211c41ef7c4d3ed98053d97ae74235ce75bf872302000000000000160014b85829a0a7e05abf0421765676e2375dc4ec47ab23020000000000001976a91490fa797ea3942d5b11eee231fe8b98cb35ec5d0288ac23020000000000001976a91433fa5e26cb6f3f44c6a953a36000a03717045a8b88ac230200000000000017a914315ccb1387b1f02598b0cb5fef5de482c6c897268723020000000000001976a9149dfc9951c5c9d27a015475a34661c0fecbe101d188ac23020000000000001976a9142dca4d6fe3b1b6ebd4964bf3c1d45d84ed6272db88ac230200000000000017a91414e2da34a37c70482aa83341a58fa949510984f28723020000000000001976a914591189a8eb80158bd6ff7a88abefa236f8d3dfc588ac230200000000000017a91433a863287d9973295d0692506ee180228122a1e187230200000000000017a9147e1b8541a10da11452702655e2043845f30bbe928723020000000000001976a914e72a8e43dcea5949d7893ba51f47ebb088f95a6788ac23020000000000001976a91481a8975e9c01706c5c486bbc01c04c84658566b188ac23020000000000001976a9146c45c6f9fc3aa62ffbbe486c51a41ba07ce7dceb88ac23020000000000001976a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac230200000000000017a9148f27950716a2db5846ac2a6f0c8e5bf711afb4f887230200000000000017a9148e5acaa945a6e720098b9afb80e35c094a285f478723020000000000001976a9146ceb56035a323841ce5760060c43fa519847b41c88ac23020000000000001976a9145793b29e331322034d9c6227b08f73cbf5f05f4388ac23020000000000001976a914976c91d993c793d471d45b52977a59c67d0c6cc488ac2302000000000000160014211f0505c7e88147632ba8afc9554e6caa86e5c5230200000000000017a9145482207ebb6ebbec4470dac743a00f454e7b6cfa8723020000000000001976a9148bd694b1924956301617c7c866f5cf5bcc722b0d88ac23020000000000001976a9147ee8f22667d3684894fb772e63cd380934c14c8688ac23020000000000001976a91495d0bb9cd9b0aff3d13d65a9c8686ab5c9541bb588ac23020000000000001976a91436dc5c2b04579de951166c376237363aee6fb27888ac230200000000000017a9149f31fc9721bbda203a7f2f9ae99ce1b7b50d9ffd8723020000000000001600145732b3fa599afa8ac4a703256a7465be8433bcbe23020000000000001976a914b5107766d16ee9a571201218c76a4093138d522988ac23020000000000001976a914023e61462c28ce44a8df3db3f5930d938404143088ac23020000000000001976a914c17f35bd0170873a837937a7a51bd87a8ef8338588ac23020000000000001976a9142c0471d464ba270a92440375da5b857ee460548488ac23020000000000001976a914d0383fbddc65ca84f05d2c81e3a3b4b47d0e67c288ac230200000000000016001453757b608fca6ecf4b306722579ae151cb1659d223020000000000001976a914eeceac4055a21d40c98d5c09b46f242e1b50f06188ac23020000000000001976a9140c4b802d18389dfcb1f72d2827ea8180a3312c5588ac23020000000000001600148eb9202daeb4cd0006b37fed70456a8af2e838c723020000000000001976a914b7d380d421a5ab6c8d626590316a8889563869b388ac23020000000000001976a914153c3bacc9ac792f51146587358b77e33a4b984e88ac230200000000000017a914309dd8951ab8c3fbc5e25cfe93ad4980e3d4ba6d87230200000000000017a914475605b1e254e08c82d47fa1d3cc6dded38719ac8723020000000000001976a9141f9704f074cd95122b05ff16093ae0fbde3d476888ac230200000000000017a9149018a5b6dd832a0d281625c59afcd6ce9a00128587230200000000000017a9147bc9c50e4652bac25767b44656ed9978ef8abe1c87230200000000000017a9141edac297d0420f94bdff46b619ddf92d767c90f18723020000000000001976a914d5141b0e3ed413b4bb6142802e7cea14c0b8d7b388ac2302000000000000160014db17bc0d91ebbe70633b8e25e9ac70ea959f1ee623020000000000001976a914c0f69c25f3a7ac71098a48fcb7cd2f3336b346d488ac23020000000000001976a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac23020000000000001976a9148b34f43bc901790bf0c9f5f4612c48e2b23a9cd388ac230200000000000017a91413c0283eb2946aa9948ecbcc89d6df3416750a9387230200000000000017a9146cdb86ce23ace51da2ec567b1ae789cecb2d7b148723020000000000001976a91455adf0b0d83148aa6dc5bb26c5e16c0c8c09394088ac23020000000000001976a9148c939130b81f5e32c9669e8e894a500c0054e49488ac230200000000000016001489f03057eee1009500cfff99ba68df75f7b19aec23020000000000001976a914c201f40d2b14170b4972390917bf63e4c217281788ac230200000000000016001493d09f5d60459ca96734f23895988d213e06fb6e230200000000000017a914a80b2e429c4fa4805f6a099365202152e09f50668723020000000000001976a914272644d0e4aa055586f7990f8b977859564862e788ac23020000000000001976a914db92484123e28ae891498f70dfb58cf9e0da266188ac23020000000000001976a9149c447f8892ba7cdd4396d33f9fc6c301dfe7c82a88ac230200000000000017a9144610a8820ec66a3ef939d6643d5c492b82bb65308723020000000000001976a9141077c3e12439566b2a2f5d792714b23b5e48509d88ac23020000000000001976a914c7ddd308e2945909777c52f026bc21e77c3cf15688ac230200000000000017a914f55459a6381a8dc1712103c3a4486da0b8caa66f8723020000000000001600146b97559c97156a3bceed7baf70bf6df203a2ebd423020000000000001976a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac23020000000000001976a91464c3e4ef5fb1793c89c1fc49f903be8e6c3770bc88ac230200000000000017a914ec7e628f30f65d8155c6c41b366e75112e1c0a1f8723020000000000001976a9148be50f47acaaf0d02e3bf6068f6af466e6ff957c88ac23020000000000001976a914d0591f9ec23aef2a79a4b3051b6f6c060f336b4188ac2302000000000000160014ec79516243cb65090a7be1615e6f7aaf75f8c41623020000000000001976a914663887dfc75093588ebc41b62909667307607d3888ac230200000000000017a91412041e70d69b8e624284c725efbd85f3fbab73398723020000000000001976a914a3508626c07fab8d6b1c8a5197cba14bc121c60288ac23020000000000001976a914d0c0abbd045671f82cc0f90e62a9becc6f0d0c5288ac23020000000000001976a91476cc17a4904384270743814e53b778a71164bd8788ac23020000000000001976a9146ddd607d351a2e20abac7117e370bba743194ee288ac23020000000000001976a914d23252ed274bc676ff9b7e2679e2a02f5217fe5e88ac230200000000000017a914f5afd35c5e849bbd5943d0137a0cf8293c6f084687230200000000000017a9146bee70d1f733e31f310facdd5fe8079f63e0995487230200000000000017a914403e2bd10fed6070e17b094537d25f3ca355c93b8723020000000000001976a9146f8c44f1de4ccfcb44f521bfd451ab112c540b6188ac23020000000000001600146b40c955be150c7c21d5efe13a147818faf7a4e7230200000000000017a9143b45ce557d2cc6825d4f675ec860711e8e7fde3a8723020000000000001976a91489bab57f467c529bfa569b84ddd87759a5eb562c88ac230200000000000017a9145671f83465b1b64a6f4e128d1c565572b1324ffb8723020000000000001976a914958eebec21aa621680905795b12ea0934c9c324288ac23020000000000001976a914a34aa1735514e197d459f0e6004f6e5c6916725188ac23020000000000001976a9147d4be9ad0d33f63097a0d131f908d9c4934dbd5a88ac23020000000000001976a9147d426bd2619f9fbd3677a2c435241f6eef96f3a588ac23020000000000001976a9140bdf6b6fa7bb795115830714a161f3af34dd787588ac23020000000000001976a9143ee592c9df0ad4d5182241ce6d2ddd01055e421688ac23020000000000001976a9147d9b7721645c954c0f8d2f96637da98b036c317588ac23020000000000001976a914d77d596aa6f308b7a2b42fc688820872daaad9dc88ac23020000000000001976a914b92a5e9462abf113510a702bfa4f44d259284c2b88ac23020000000000001976a9147ffd2e735f57a185a772220d13e54ca07f666e1988ac23020000000000001976a914eba4df958553fc51bd800fab11a173808966b27788ac23020000000000001976a914d63e073aff0045db0b803feda0744072aeaba8a088ac23020000000000001976a9142938c5c2fbccac4fccc90461761b6c3492846d5a88ac23020000000000001976a91452e150992a5486318374d52140f08addb383273d88ac230200000000000017a91478940516012f7c7e2b749ddcf3074dc064811b688723020000000000001976a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac23020000000000001976a9143d7f1bfebbb0a839350fca6d3f784b6abd6f37de88ac23020000000000001976a9147e1be4e1a1192ff3088344a3b3d9db61df154cf288ac23020000000000001976a914d7df75efcf9e692e4ceb12f38b3dc44161933c1788ac23020000000000001600148089dd4198593ccc344aced7c4a7e9319386f8ed23020000000000001976a91497651ab1842deb3dc36aab97b4c49475c9ae31cc88ac230200000000000016001457122d6fd1947e7940e99fda6e6d30d50a9f7c6823020000000000001976a9146594a32b676c6eb505454ab0289c0e6f7e51cbd388ac230200000000000016001477e75ae49d81759f69da59c6318aeab60dccba2a23020000000000001976a91414bfa51624d8c52b34831de3ccd22a317ea5bafe88ac2302000000000000160014f85af58459bf628b835d200d77fa59de886c59f523020000000000001976a91451a9fbc3f50abcf855555c774a65f1d7e6fe582a88ac23020000000000001976a9140586f8cb26cfbfc780d06d4000e2e89941a3ef0d88ac23020000000000001976a91416dda94269d62aebac059079117839c73862d1ea88ac23020000000000001976a914fe551bed25282a60f6e0b20be8ae4e9baa808b6988ac23020000000000001976a9148c1b5869c0d1003901df76a969628c5fa011be2888ac230200000000000017a914a0cb10e963b02387e3145682e33359fbfca4e84c87230200000000000017a914634b89deace122bc1f42ab29c600a0728ec0f3cc8723020000000000001976a914e991a5d6ab6ca1f3c8cf6fd0b572d1ee2451018f88ac230200000000000017a9141412beba31fe7e8e6f3ac06a198c11d988c3cbaf87230200000000000017a914f68e6310630b77b5e4c76291ac1e0d60d227792287230200000000000017a91407406cb43ef2714c27f481e88554d10ed29f4a1a872302000000000000160014c75347fdb3f0417cf6b4dbe1f0d0dd46c4ab3e7023020000000000001976a914e420f157882616a242ed9d917221721db748947d88ac23020000000000001976a914b24df93c61ab527976ce87f890e2e0e2ecd316ee88ac230200000000000017a91465bad95bad69a2a44c5a89dd17404efa5291cdb687230200000000000017a914417e242b03e30bdd2ed9eab014c3ec19aab5455387230200000000000017a914cb7ed6403771abce6a6ad7edc0a4fd2c5670a7c18723020000000000001976a914a6beb7bff47cc3764e1c415d4f41153686c6679788ac23020000000000001976a91404b5ac8e58e2487fb07c8ec6874103602262c4d388ac230200000000000017a9144b424ba5ee5f60bcf97e2fa5ef6759bbc9b8e4f98723020000000000001976a9141c3d15a4efc740d4009aba39ab7f5c327000e4a088ac2302000000000000160014a95180410857995212815e459b2f671b18cd377423020000000000001976a914f354d0e047d4165fe41df08d2a7e268a7a2c8f2d88ac23020000000000001976a9141c37ecf6febefa65f5cf45a969a7e86ebfd5803f88ac230200000000000017a914f1bfb83bb216c250278d84bfcaf643c5e478275c87230200000000000017a91471433db63e45f0c49ce57220d5b15240d488228a8723020000000000001976a91444bee5c21f50d0b5d24f01509a983809e36be73c88ac230200000000000017a9141e26c10be52aa22c36b3fdbb26c0c6c8805734be8723020000000000001976a9141f6e82b1dcac4c70310a5b68d06a7e828b0f82bb88ac23020000000000001976a9146e49a3bd9ce84a75306f1dd1d6b38700ac97ff9588ac23020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac230200000000000017a914648ddc5e3f615f141fc5e38fc36858fe330ce65e8723020000000000001976a9142560668c9e3e98ba2be673e506c8191bd8d500ff88ac230200000000000017a9146b0a45e28e924257f5773fc66da089fba92ba5f98723020000000000001976a914130c14369048df4e18fdc019d0ff790808a0451b88ac230200000000000017a9143d2256747f54766efbca2f505a3349f0148e162a87230200000000000017a914a231b2f85a26988d105cc5c3cf1f875e2fb5bf1087230200000000000017a9143ddcbfdbc7b7ea27bbb8539df4f9d7ba19f986a2872302000000000000160014a8aa7d50d0cc3447a3d20499714df8edf1289e3f23020000000000001976a914dd2bb57e29cade87fd4c161cc1ab9b9ff8a37cd388ac23020000000000001976a9144c46868c4f8887a1ef3b69b02f35d0f337cf4e5488ac23020000000000001976a9148ba0ec85482ca6534e11832f312e0d63fe84a5a988ac23020000000000001976a91427ac5fe37286399e94b13594ef3b7eff1511f92788acdffe0900000000001600146b10cb743f308daa45cd418989d98473a8e0c5020247304402201b6d4d5a9a2b93c63807d0b3bad806786596828517f6edee8a2ff060e932b7ff022019903a46c1aabde2f6595591f13cbb0b5ce7bc3ce1c9c6a399e4c3c9169257d601210394153b1dfd6e4277ba146841db452e1a687269fc162433fb087742c61ab822af3fce0900", + "blockhash": "0000000000000000000362f4c59614eefbb6170fd0b1f3065b4b893cd9972b4a", + "confirmations": 328350, + "time": 1596807777, + "blocktime": 1596807777 + }, + "getrawtransaction:8f716720ef9caf72149e262748e543df1fc2996cb5ae95d6cec2678dd06601ce": { + "txid": "8f716720ef9caf72149e262748e543df1fc2996cb5ae95d6cec2678dd06601ce", + "hash": "8f716720ef9caf72149e262748e543df1fc2996cb5ae95d6cec2678dd06601ce", + "version": 2, + "size": 827, + "weight": 2981, + "locktime": 564766, + "hex": "02000000000101d77d39d80d7ac9fb7edbae3c4e363540583f32fa2152dee7709355ed9529b60e00000000171600148570015261851d49cbcd9743f5be3da635ecae68fdffffff134c020000000000001976a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac4c020000000000001976a91411b366edfc0a8b66feebae5c2e25a7b6a5d1cf3188acd05001000000000017a914fe7a977a9a166a868821bb81da33168ff4a2b188874c020000000000001976a91436896b2798eeec0fc03c95b52a357448ed0dfd4688ac4c020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac4c020000000000001976a914f73acad809960ebe012964383b184f5c94a3f3ba88ac4c020000000000001976a914482bb0b8f14aa24e50f18d2527046e413bb315df88ac4c020000000000001976a914877717568a7e1d716aa7c696f2db7a6b4b79ee5788ac4c020000000000001976a9147e92e66adf3e096ab4eef4fe7a128e9c7ac339e488ac4c020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac4c020000000000001976a914119b098e2e980a229e139a9ed01a469e518e6f2688ac4c020000000000001976a914b3407d4b4d1fca87fb930abe3fa6c2baed6e6fd888ac4c020000000000001976a914a3c78d275195f05766a9b497d7838b27bacac77588ac4c020000000000001976a91435d31d1dbc974770d456df632a44656a89bae80888ac4c020000000000001976a914c1c6cb1b7d3c5a3f1dbd79ebd80d29bc6145e2fc88ac4c020000000000001976a914acbf9c3dea6f2ad29fad5dbc4da6cbc3d7d3643288ac4c020000000000001976a9143a9759a48cd85654ae8e9e64359d3d8570e444a288ac4c020000000000001976a9143f1f25c07c9889744d699bc14802f1d8c3bdaf3088ac4c020000000000001976a914d49c6f116e0e500a9dde898f4d0c2885048953f388ac02473044022031be4012f13081e3a6eba5ff79ab2fe3fb992ace477ef51539a05ed0e08eb98102202ca01897e7fb47be7f0f35adfcbd9d6a4a033d63810ec4817c3cf9663a806198012103e8b8adf67f56a4cf469cd11586feedd3b3ad3d154934cb5c39af9bfe2a892c241e9e0800", + "blockhash": "0000000000000000001a7d2ca8dbec097dee5c4faac737b28758d19710caed57", + "confirmations": 406196, + "time": 1551213432, + "blocktime": 1551213432 + }, + "getrawtransaction:be09fa7749193def059b7fc7fb1668a749c37d2d8ed7a83748dffd725e0e8cb5": { + "txid": "be09fa7749193def059b7fc7fb1668a749c37d2d8ed7a83748dffd725e0e8cb5", + "hash": "be09fa7749193def059b7fc7fb1668a749c37d2d8ed7a83748dffd725e0e8cb5", + "version": 1, + "size": 339, + "weight": 708, + "locktime": 0, + "hex": "01000000000102d887e4df2f162186cd710da3915a4ad15823c9483abd43d919fabf52860b2a550000000000ffffffff1dbf2c3edeb68860e7f89da73fb8632bebee0894adce80d8914b7ff088419dde0000000000ffffffff0142010000000000001600148764c872ae9f31c0463278b4d4386646cfca20da024730440220558b1fe2f97b5dc1ef59f282eb971187f9a4a451848713b14caefbbf7fdf4e06022049636dfb5b7db2b41400e7daab5db038f672df2ed4eec2ccd3fd2c748bbc7a7c012102e8ac3ea5c5d42c40b59b2e623c70beccf39fe6280cfb128862fc5678983ef3060247304402203d705d894ae01af40393675c863cea271026167141397e0f359d94195f7b296902201647b6c1bca54bd59326b7e33bc3766565a5c62dca04a6e6487b551061664d39012102f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f900000000", + "vin": [ + { + "txid": "552a0b8652bffa19d943bd3a48c92358d14a5a91a30d71cd8621162fdfe487d8", + "vout": 0, + "scriptSig": { + "hex": "" + }, + "txinwitness": [ + "30440220558b1fe2f97b5dc1ef59f282eb971187f9a4a451848713b14caefbbf7fdf4e06022049636dfb5b7db2b41400e7daab5db038f672df2ed4eec2ccd3fd2c748bbc7a7c01", + "02e8ac3ea5c5d42c40b59b2e623c70beccf39fe6280cfb128862fc5678983ef306" + ], + "sequence": 4294967295 + }, + { + "txid": "de9d4188f07f4b91d880cead9408eeeb2b63b83fa79df8e76088b6de3e2cbf1d", + "vout": 0, + "scriptSig": { + "hex": "" + }, + "txinwitness": [ + "304402203d705d894ae01af40393675c863cea271026167141397e0f359d94195f7b296902201647b6c1bca54bd59326b7e33bc3766565a5c62dca04a6e6487b551061664d3901", + "02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9" + ], + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 0.00000322, + "n": 0, + "scriptPubKey": { + "hex": "00148764c872ae9f31c0463278b4d4386646cfca20da", + "type": "v0_p2wpkh", + "address": "bc1qsajvsu4wnucuq33j0z6dgwrxgm8u5gx6ghaaaa" + } + } + ], + "blockhash": "00000000000000000001896836e34a2853e536a0d2325d2d985bd69fad777a78", + "confirmations": 51345, + "time": 1760789577, + "blocktime": 1760789577 + }, + "getrawtransaction:de9d4188f07f4b91d880cead9408eeeb2b63b83fa79df8e76088b6de3e2cbf1d": { + "txid": "de9d4188f07f4b91d880cead9408eeeb2b63b83fa79df8e76088b6de3e2cbf1d", + "hash": "de9d4188f07f4b91d880cead9408eeeb2b63b83fa79df8e76088b6de3e2cbf1d", + "version": 2, + "size": 223, + "weight": 892, + "locktime": 0, + "hex": "0200000001847dd92079ddaf23121d84881c928a277b87d7d4b05e8bb3420868725b23b9f0010000006b483045022100d2ebb001d830309647ea244276b052c8c1a0657f3bb96895db6a106d4e95e06302202bb5aeaaadd7e39727182cbe5a1796ee5a4cc253c5db646a82ab2ba87fad98ff012103de505f92ea1a7b9e6ebce499efe4bacc62dd56ca25129f10772d1c053f11dc95fdffffff020c040000000000001600147dd65592d0ab2fe0d0257d571abf032cd9db93dcf0150000000000001976a914978a303fe8e579a2175ec79bbd98dbd7cae51b3288ac00000000", + "vin": [ + { + "txid": "f0b9235b72680842b38b5eb0d4d7877b278a921c88841d1223afdd7920d97d84", + "vout": 1, + "scriptSig": { + "hex": "483045022100d2ebb001d830309647ea244276b052c8c1a0657f3bb96895db6a106d4e95e06302202bb5aeaaadd7e39727182cbe5a1796ee5a4cc253c5db646a82ab2ba87fad98ff012103de505f92ea1a7b9e6ebce499efe4bacc62dd56ca25129f10772d1c053f11dc95" + }, + "sequence": 4294967293 + } + ], + "vout": [ + { + "value": 0.00001036, + "n": 0, + "scriptPubKey": { + "hex": "00147dd65592d0ab2fe0d0257d571abf032cd9db93dc", + "type": "v0_p2wpkh", + "address": "bc1q0ht9tyks4vh7p5p904t340cr9nvahy7u3re7zg" + } + }, + { + "value": 0.00005616, + "n": 1, + "scriptPubKey": { + "hex": "76a914978a303fe8e579a2175ec79bbd98dbd7cae51b3288ac", + "type": "p2pkh", + "address": "1EpGaUFzkDiRAZ7BAZsM9d8zmrvDnqnbie" + } + } + ], + "blockhash": "00000000000000000001896836e34a2853e536a0d2325d2d985bd69fad777a78", + "confirmations": 51345, + "time": 1760789577, + "blocktime": 1760789577 + }, + "getrawtransaction:8881ba5fd4ba272864c14e793ba78eba6568d7e98a83c362ceed6461450d4e1c": { + "txid": "8881ba5fd4ba272864c14e793ba78eba6568d7e98a83c362ceed6461450d4e1c", + "hash": "8881ba5fd4ba272864c14e793ba78eba6568d7e98a83c362ceed6461450d4e1c", + "version": 1, + "size": 630, + "weight": 2520, + "locktime": 0, + "hex": "010000000107621ca3725e8640be4af4a584c9be0401dea41b57a2f3d3b67f5340d7858f8401000000fdfd0000483045022100cf1879f6e5ec0967282bb82397f3fd957a34934d2abe738acd76c8f12f23d4ad022003593d1e78fd37fefaa6e3456025b0a0239126fa7e3077be8755ad42d4dd47c001473044022073b4953f00716a81b8da8ee9cb487db3690acf2df71bdefe048a7cba8b26cb1e02202f86d707c5413ada3e40ce032bd5449b9842ff88c2fef12b240e603e16c27240014c695221034f3c0a6de1d4e626013fb08fd6b3111429f49964643cdf559915452fdcb5ffda21032331def40791226bcbf9d23d22243ce80aa05eded9b80d85cccdedb08c6a96522102f27cef9353803c27807ac9e21cb12efacac2f7c32e8278a823dfd7a16839bbe853aeffffffff0a5990040000000000160014ff5ebf5473569f4d4b6607947af72a914c7a439710270000000000001600147d9f9d488622c9fdbcba42383c148739949244c3743c120000000000160014cb9fc048f7ae8a31ee16cced26a519c2724e5c8950c300000000000016001432c57f15253b7d4231a1bb81e74ca85446f2b8bf1141120000000000160014cb9fc048f7ae8a31ee16cced26a519c2724e5c8940420f00000000001600147753b9ae389b6f94f929beb1373641270308a7c094be6d0000000000160014c4b4531621dfe330c50fda4d8820eda3135fda0600db1a000000000017a91496cd57c85f4fc27db6ace43dbd45f5d3e558352e87102700000000000017a914cccf172f747cec2a3c16bed28fbb9e996e014e368759c44f0100000000220020a18a1f1ea0d4ad2aba38753573b3321455a20d3ae557cb41083da534d828f7e800000000", + "vin": [ + { + "txid": "848f85d740537fb6d3f3a2571ba4de0104bec984a5f44abe40865e72a31c6207", + "vout": 1, + "scriptSig": { + "hex": "00483045022100cf1879f6e5ec0967282bb82397f3fd957a34934d2abe738acd76c8f12f23d4ad022003593d1e78fd37fefaa6e3456025b0a0239126fa7e3077be8755ad42d4dd47c001473044022073b4953f00716a81b8da8ee9cb487db3690acf2df71bdefe048a7cba8b26cb1e02202f86d707c5413ada3e40ce032bd5449b9842ff88c2fef12b240e603e16c27240014c695221034f3c0a6de1d4e626013fb08fd6b3111429f49964643cdf559915452fdcb5ffda21032331def40791226bcbf9d23d22243ce80aa05eded9b80d85cccdedb08c6a96522102f27cef9353803c27807ac9e21cb12efacac2f7c32e8278a823dfd7a16839bbe853ae" + }, + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 0.00299097, + "n": 0, + "scriptPubKey": { + "hex": "0014ff5ebf5473569f4d4b6607947af72a914c7a4397", + "type": "v0_p2wpkh", + "address": "bc1qla0t74rn26056jmxq7284ae2j9x85suhc3yn93" + } + }, + { + "value": 0.0001, + "n": 1, + "scriptPubKey": { + "hex": "00147d9f9d488622c9fdbcba42383c148739949244c3", + "type": "v0_p2wpkh", + "address": "bc1q0k0e6jyxytylm096ggurc9y88x2fy3xrtcsu0k" + } + }, + { + "value": 0.01195124, + "n": 2, + "scriptPubKey": { + "hex": "0014cb9fc048f7ae8a31ee16cced26a519c2724e5c89", + "type": "v0_p2wpkh", + "address": "bc1qew0uqj8h469rrmskenkjdfgecfeyuhyfg4r398" + } + }, + { + "value": 0.0005, + "n": 3, + "scriptPubKey": { + "hex": "001432c57f15253b7d4231a1bb81e74ca85446f2b8bf", + "type": "v0_p2wpkh", + "address": "bc1qxtzh79f98d75yvdphwq7wn9g23r09w9lv8ltef" + } + }, + { + "value": 0.01196305, + "n": 4, + "scriptPubKey": { + "hex": "0014cb9fc048f7ae8a31ee16cced26a519c2724e5c89", + "type": "v0_p2wpkh", + "address": "bc1qew0uqj8h469rrmskenkjdfgecfeyuhyfg4r398" + } + }, + { + "value": 0.01, + "n": 5, + "scriptPubKey": { + "hex": "00147753b9ae389b6f94f929beb1373641270308a7c0", + "type": "v0_p2wpkh", + "address": "bc1qwafmnt3cndhef7ffh6cnwdjpyups3f7qa4ls66" + } + }, + { + "value": 0.07192212, + "n": 6, + "scriptPubKey": { + "hex": "0014c4b4531621dfe330c50fda4d8820eda3135fda06", + "type": "v0_p2wpkh", + "address": "bc1qcj69x93pml3np3g0mfxcsg8d5vf4lksxvp04qm" + } + }, + { + "value": 0.0176, + "n": 7, + "scriptPubKey": { + "hex": "a91496cd57c85f4fc27db6ace43dbd45f5d3e558352e87", + "type": "p2sh", + "address": "3FSPGnxdp13EB5MCgyF2kFKzpRt3Mg5b9W" + } + }, + { + "value": 0.0001, + "n": 8, + "scriptPubKey": { + "hex": "a914cccf172f747cec2a3c16bed28fbb9e996e014e3687", + "type": "p2sh", + "address": "3LMwraiLDAc67hZtXSh8FyJ5sxGyWtyNMe" + } + }, + { + "value": 0.22004825, + "n": 9, + "scriptPubKey": { + "hex": "0020a18a1f1ea0d4ad2aba38753573b3321455a20d3ae557cb41083da534d828f7e8", + "type": "v0_p2wsh", + "address": "bc1q5x9p784q6jkj4w3cw56h8vejz326yrf6u4tuksgg8kjnfkpg7l5qe8kpz6" + } + } + ], + "blockhash": "00000000000000000000228b012a916bc4b627109b95ab2c60cbf0a29ab57dec", + "confirmations": 14, + "time": 1791744946, + "blocktime": 1791744946 + }, + "getrawtransaction:848f85d740537fb6d3f3a2571ba4de0104bec984a5f44abe40865e72a31c6207": { + "txid": "848f85d740537fb6d3f3a2571ba4de0104bec984a5f44abe40865e72a31c6207", + "hash": "848f85d740537fb6d3f3a2571ba4de0104bec984a5f44abe40865e72a31c6207", + "version": 2, + "size": 539, + "weight": 1829, + "locktime": 0, + "hex": "02000000000101e426bfd35028b521f776a550ba5e1b992010a400efb349b75e2e7474cfa7977b0800000000fdffffff0c74790000000000001600140f3948e591cf8f53ad5122c74751a9021355e31121d811020000000017a9147133edffe96b69b15af7dc0964fa5f73694924478780841700000000001976a914d68de31e47ff6d147a983209ffce04c59586967288ac03c30100000000001976a914f2c9b94e9ea9527aadd7eaa8fdb88fedf5ef93f488acb444040000000000160014acf3c02353ad1d01eae69fa197df7f9906497269a06806000000000016001491973223a15925ae41dbc5690be968ffa70d108040fc000000000000160014fe70c68ef1b98cf093e34a634b661fa8c646a43b455400000000000016001498a3be774c3301a0164d1acb84bafd636e91c2df21890000000000001600145b1d77df3248e5109fa9ce807d0d8bd9a564ddf67b69010000000000160014476b5f4f6be44459731aa741862bf09ddfefb306817d00000000000016001488d54f8f2ff939d07b252892109671e81f9a9489c7b528500100000016001420349006e1f767a5ddbf52ad2eed66a2f00b370402473044022011e6867abb65745dc69b94a942d29345b792eb44d79d54ee6527b12de619b4890220582a462e298afa9293cd430a9a64307513ab1373a2d40c23b48c522d97d667400121033e645db065d4922b58b5dae11058a4da91d930233477f80f84a131942af9aacf00000000", + "vin": [ + { + "txid": "7b97a7cf74742e5eb749b3ef00a41020991b5eba50a576f721b52850d3bf26e4", + "vout": 8, + "scriptSig": { + "hex": "" + }, + "txinwitness": [ + "3044022011e6867abb65745dc69b94a942d29345b792eb44d79d54ee6527b12de619b4890220582a462e298afa9293cd430a9a64307513ab1373a2d40c23b48c522d97d6674001", + "033e645db065d4922b58b5dae11058a4da91d930233477f80f84a131942af9aacf" + ], + "sequence": 4294967293 + } + ], + "vout": [ + { + "value": 0.00031092, + "n": 0, + "scriptPubKey": { + "hex": "00140f3948e591cf8f53ad5122c74751a9021355e311", + "type": "v0_p2wpkh", + "address": "bc1qpuu53ev3e7848t23ytr5w5dfqgf4tcc3q6yh9k" + } + }, + { + "value": 0.34723873, + "n": 1, + "scriptPubKey": { + "hex": "a9147133edffe96b69b15af7dc0964fa5f736949244787", + "type": "p2sh", + "address": "3C1aVMk3dHci3rn6DjhZGK5j7cp9nAD4S9" + } + }, + { + "value": 0.01541248, + "n": 2, + "scriptPubKey": { + "hex": "76a914d68de31e47ff6d147a983209ffce04c59586967288ac", + "type": "p2pkh", + "address": "1LZTaYfHTAP59jHfNS8LxsPRiDSgxEWcqg" + } + }, + { + "value": 0.00115459, + "n": 3, + "scriptPubKey": { + "hex": "76a914f2c9b94e9ea9527aadd7eaa8fdb88fedf5ef93f488ac", + "type": "p2pkh", + "address": "1P8kBSeWrLR2UkXqh8QnU1kS2rPGox5PbS" + } + }, + { + "value": 0.00279732, + "n": 4, + "scriptPubKey": { + "hex": "0014acf3c02353ad1d01eae69fa197df7f9906497269", + "type": "v0_p2wpkh", + "address": "bc1q4neuqg6n45wsr6hxn7se0hmlnyryjunfz0mcjd" + } + }, + { + "value": 0.0042, + "n": 5, + "scriptPubKey": { + "hex": "001491973223a15925ae41dbc5690be968ffa70d1080", + "type": "v0_p2wpkh", + "address": "bc1qjxtnygaptyj6uswmc45sh6tgl7ns6yyq5aw0d5" + } + }, + { + "value": 0.00064576, + "n": 6, + "scriptPubKey": { + "hex": "0014fe70c68ef1b98cf093e34a634b661fa8c646a43b", + "type": "v0_p2wpkh", + "address": "bc1qlecvdrh3hxx0pylrff35kesl4rrydfpmfzcp4z" + } + }, + { + "value": 0.00021573, + "n": 7, + "scriptPubKey": { + "hex": "001498a3be774c3301a0164d1acb84bafd636e91c2df", + "type": "v0_p2wpkh", + "address": "bc1qnz3mua6vxvq6q9jdrt9cfwhavdhfrskl9y6t65" + } + }, + { + "value": 0.00035105, + "n": 8, + "scriptPubKey": { + "hex": "00145b1d77df3248e5109fa9ce807d0d8bd9a564ddf6", + "type": "v0_p2wpkh", + "address": "bc1qtvwh0hejfrj3p8afe6q86rvtmxjkfh0kcjfs3e" + } + }, + { + "value": 0.00092539, + "n": 9, + "scriptPubKey": { + "hex": "0014476b5f4f6be44459731aa741862bf09ddfefb306", + "type": "v0_p2wpkh", + "address": "bc1qga447nmtu3z9juc65aqcv2lsnh07lvcx2z0ckq" + } + }, + { + "value": 0.00032129, + "n": 10, + "scriptPubKey": { + "hex": "001488d54f8f2ff939d07b252892109671e81f9a9489", + "type": "v0_p2wpkh", + "address": "bc1q3r25lre0lyuaq7e99zfpp9n3aq0e49yf97a3xg" + } + }, + { + "value": 56.39812551, + "n": 11, + "scriptPubKey": { + "hex": "001420349006e1f767a5ddbf52ad2eed66a2f00b3704", + "type": "v0_p2wpkh", + "address": "bc1qyq6fqphp7an6thdl22kjamtx5tcqkdcyu6vzxw" + } + } + ], + "blockhash": "0000000000000000000024f94fb2d34e2dc165261c7c1bbd234e517f307caaa0", + "confirmations": 16, + "time": 1791743016, + "blocktime": 1791743016 + }, + "getrawtransaction:2e08a73b48527afde28ffe2a0d81d34ec4e850f23512342ce43e3815eac8f92a": { + "txid": "2e08a73b48527afde28ffe2a0d81d34ec4e850f23512342ce43e3815eac8f92a", + "hash": "2e08a73b48527afde28ffe2a0d81d34ec4e850f23512342ce43e3815eac8f92a", + "version": 1, + "size": 642, + "weight": 1806, + "locktime": 0, + "hex": "010000000001012b49150aab70389bfa7ee7010e3387efc230e1f6f649c041e5938157c1720f6f0f00000000fdffffff0ab3120000000000001976a9144d12e06925bcf36e1d5b645c78177a24e133e1b088ac851500000000000016001404303096e2d6cd9ddc90c7b70ac0881ee84fc126651700000000000016001468ff17dead0bf2a0faf472ccdd3a9346c2b59ffe6f330000000000001600146332abc07abfcdd5b526146ba0adcf925ff56db9bc2a010000000000160014d8d06e785f240931f122d943859daca35ea314cf2a210900000000001976a91464c303183967cb42d47c308727b5248d3353669988ace1310900000000001976a914cf9b078ec6affa179c44c98adb80f6618f75acfb88ac86330900000000001976a914d57b3e74547fbfb311da35b513be74a7f7d261bf88ac89380900000000001976a9147576471afdba023366b0ff125aad4efabc7ea86988ac422b9d02000000002200206330731a76119d946fc96d2f8935445cf4517c42ea59453acb2c89f03f54dc3c040047304402205106fa21f07128c11596eb6b56a19d7f6838fb24471565caef560f15ccab0b4902207e012c26ab7aebd86d1edd20ecffb13d131faf76d83a33ef58c98d8fb4ccc90401473044022069af855ad802055161c9de6b77519f38807c32f38240cf9c5a7f8604d19f437802204e1ae819853e595d09fce0e55cb6cf8dcffda145554b30841efe26b4a5ea08cd0169522103bc922d363d0c92915c491a54af3ea52c45d961af90ba23d89116792dc44b3d1d2102c39703874cdfedccb4dcb9213817704ae6af5b2b776cac04acad8fdb4e92db982102fe94ffa820b900a2214eddad6076b4e74c2a1a13fc16cca0db76cfb919fba4d353ae00000000", + "vin": [ + { + "txid": "6f0f72c1578193e541c049f6f6e130c2ef87330e01e77efa9b3870ab0a15492b", + "vout": 15, + "scriptSig": { + "hex": "" + }, + "txinwitness": [ + "", + "304402205106fa21f07128c11596eb6b56a19d7f6838fb24471565caef560f15ccab0b4902207e012c26ab7aebd86d1edd20ecffb13d131faf76d83a33ef58c98d8fb4ccc90401", + "3044022069af855ad802055161c9de6b77519f38807c32f38240cf9c5a7f8604d19f437802204e1ae819853e595d09fce0e55cb6cf8dcffda145554b30841efe26b4a5ea08cd01", + "522103bc922d363d0c92915c491a54af3ea52c45d961af90ba23d89116792dc44b3d1d2102c39703874cdfedccb4dcb9213817704ae6af5b2b776cac04acad8fdb4e92db982102fe94ffa820b900a2214eddad6076b4e74c2a1a13fc16cca0db76cfb919fba4d353ae" + ], + "sequence": 4294967293 + } + ], + "vout": [ + { + "value": 0.00004787, + "n": 0, + "scriptPubKey": { + "hex": "76a9144d12e06925bcf36e1d5b645c78177a24e133e1b088ac", + "type": "p2pkh", + "address": "182XeLk9FsUX4SkfeRhHoDZsXRKR3Pob6a" + } + }, + { + "value": 0.00005509, + "n": 1, + "scriptPubKey": { + "hex": "001404303096e2d6cd9ddc90c7b70ac0881ee84fc126", + "type": "v0_p2wpkh", + "address": "bc1qqscrp9hz6mxemhysc7ms4sygrm5ylsfx0w6sqw" + } + }, + { + "value": 0.00005989, + "n": 2, + "scriptPubKey": { + "hex": "001468ff17dead0bf2a0faf472ccdd3a9346c2b59ffe", + "type": "v0_p2wpkh", + "address": "bc1qdrl30h4dp0e2p7h5wtxd6w5ngmptt8l7xsj2w8" + } + }, + { + "value": 0.00013167, + "n": 3, + "scriptPubKey": { + "hex": "00146332abc07abfcdd5b526146ba0adcf925ff56db9", + "type": "v0_p2wpkh", + "address": "bc1qvve2hsr6hlxatdfxz346ptw0jf0l2mderfxznk" + } + }, + { + "value": 0.00076476, + "n": 4, + "scriptPubKey": { + "hex": "0014d8d06e785f240931f122d943859daca35ea314cf", + "type": "v0_p2wpkh", + "address": "bc1qmrgxu7zlysynrufzm9pct8dv5d02x9x0hlepar" + } + }, + { + "value": 0.00598314, + "n": 5, + "scriptPubKey": { + "hex": "76a91464c303183967cb42d47c308727b5248d3353669988ac", + "type": "p2pkh", + "address": "1ABnBrufsPBU9TsNAJY6THjpw1BQyabPTn" + } + }, + { + "value": 0.00602593, + "n": 6, + "scriptPubKey": { + "hex": "76a914cf9b078ec6affa179c44c98adb80f6618f75acfb88ac", + "type": "p2pkh", + "address": "1KvibMEs4pqj6PDv37wr8ZuAuk9FWDxHzW" + } + }, + { + "value": 0.00603014, + "n": 7, + "scriptPubKey": { + "hex": "76a914d57b3e74547fbfb311da35b513be74a7f7d261bf88ac", + "type": "p2pkh", + "address": "1LTna12kQP7JEw5gubx1uGsSGjErN4GK3T" + } + }, + { + "value": 0.00604297, + "n": 8, + "scriptPubKey": { + "hex": "76a9147576471afdba023366b0ff125aad4efabc7ea86988ac", + "type": "p2pkh", + "address": "1Bi5kXYnjK9QjqfsMscLv2yFpxtmjvkdL5" + } + }, + { + "value": 0.43854658, + "n": 9, + "scriptPubKey": { + "hex": "00206330731a76119d946fc96d2f8935445cf4517c42ea59453acb2c89f03f54dc3c", + "type": "v0_p2wsh", + "address": "bc1qvvc8xxnkzxwegm7fd5hcjd2ytn69zlzzafv52wkt9jylq065ms7qupv5c7" + } + } + ], + "blockhash": "000000000000000000007e610e49cf1087a77eeece833ee16c7f68a90f5cc009", + "confirmations": 1, + "time": 1791753450, + "blocktime": 1791753450 + }, + "getrawtransaction:6f0f72c1578193e541c049f6f6e130c2ef87330e01e77efa9b3870ab0a15492b": { + "txid": "6f0f72c1578193e541c049f6f6e130c2ef87330e01e77efa9b3870ab0a15492b", + "hash": "6f0f72c1578193e541c049f6f6e130c2ef87330e01e77efa9b3870ab0a15492b", + "version": 1, + "size": 841, + "weight": 2599, + "locktime": 0, + "hex": "01000000000101ee23e856da2154d9b66bbb1b6678248f6d32fc8d94829cc750357ca211b0445f1000000000fdffffff10d90c00000000000016001404303096e2d6cd9ddc90c7b70ac0881ee84fc126290f0000000000001976a9147f052496f8dfb8e99d850f491c0903d86daa6cc288ac4e18000000000000160014a69504712d29656c44d032f8fa4097be0276c242bf2400000000000016001496b2ff42bc6a56341e85aa24e2911c9d85fe3bae142f0000000000001976a914812b1ac0dad59ddee3bd468d9f8dc5974006997188ac6f5d000000000000160014a69504712d29656c44d032f8fa4097be0276c24223d301000000000017a914e3ae3388c6e8de67fdceb05bfb48b9d9df37f30c878b1a0900000000001976a914a95587ae49638161ae30dcdbe43f8dab7482868d88acfa490900000000001976a9143e13d3b3593135de8e6104c09cf0b0ccec1d4e1888ac79341200000000001976a914278ebf9cc4abf4181e864a5139853575030882f488acd1361200000000001976a91434bc4bbdd25c00823aa724884ac7876bcca57ae388ac333f12000000000017a914c609c2c97ea66879306b8028b9a51cfa621ea87e879a4012000000000017a914c609c2c97ea66879306b8028b9a51cfa621ea87e8766451200000000001976a914cb3a7ed1013cfc89b43f35cd070831a21a1cce4288aca16d1200000000001976a9149441d20253d030bfd392043190af5c2116bb41d388ac1839c40200000000220020dc4f9dbaa12ea9095db4bfacb32103be5f1accbd562a3c0e88b3893973ad4dd404004830450221009d74ade5ffb4bcdc3d5b69e4d41f590d8b41975dee71f21ed70fe51e9d07cd980220789e6f184cbd7a29da3e8b067efc8a12e5abd4c09cf81a753e1ba9128417ba8f0147304402204f0ec3382f0aede0b5a776042e62c90cb33c7d3cf67d0a37aff7161b1181943a0220126cc07eba86da3247d3db669b6362ac76b427e29f2051139d972086c66f10cf0169522102fb0febddfa52fe16a81a7a8e066eb0a6c1b417c8f1b606152041d0810b3721af2103cb8a0131925c6ea3150684db74d4ee12dd4dd2616753ddaa370c553411cd50572103fe6bb580bb3b75fa7cc1aa72294086713387b7aff249dfec3fed40c2898b599053ae00000000", + "vin": [ + { + "txid": "5f44b011a27c3550c79c82948dfc326d8f2478661bbb6bb6d95421da56e823ee", + "vout": 16, + "scriptSig": { + "hex": "" + }, + "txinwitness": [ + "", + "30450221009d74ade5ffb4bcdc3d5b69e4d41f590d8b41975dee71f21ed70fe51e9d07cd980220789e6f184cbd7a29da3e8b067efc8a12e5abd4c09cf81a753e1ba9128417ba8f01", + "304402204f0ec3382f0aede0b5a776042e62c90cb33c7d3cf67d0a37aff7161b1181943a0220126cc07eba86da3247d3db669b6362ac76b427e29f2051139d972086c66f10cf01", + "522102fb0febddfa52fe16a81a7a8e066eb0a6c1b417c8f1b606152041d0810b3721af2103cb8a0131925c6ea3150684db74d4ee12dd4dd2616753ddaa370c553411cd50572103fe6bb580bb3b75fa7cc1aa72294086713387b7aff249dfec3fed40c2898b599053ae" + ], + "sequence": 4294967293 + } + ], + "vout": [ + { + "value": 0.00003289, + "n": 0, + "scriptPubKey": { + "hex": "001404303096e2d6cd9ddc90c7b70ac0881ee84fc126", + "type": "v0_p2wpkh", + "address": "bc1qqscrp9hz6mxemhysc7ms4sygrm5ylsfx0w6sqw" + } + }, + { + "value": 0.00003881, + "n": 1, + "scriptPubKey": { + "hex": "76a9147f052496f8dfb8e99d850f491c0903d86daa6cc288ac", + "type": "p2pkh", + "address": "1CacyhZpQFwmzekJcGCPRydYbHfraQS4ZM" + } + }, + { + "value": 0.00006222, + "n": 2, + "scriptPubKey": { + "hex": "0014a69504712d29656c44d032f8fa4097be0276c242", + "type": "v0_p2wpkh", + "address": "bc1q562sgufd99jkc3xsxtu05syhhcp8dsjzntrtej" + } + }, + { + "value": 0.00009407, + "n": 3, + "scriptPubKey": { + "hex": "001496b2ff42bc6a56341e85aa24e2911c9d85fe3bae", + "type": "v0_p2wpkh", + "address": "bc1qj6e07s4udftrg8594gjw9ygunkzluwawqjl5h2" + } + }, + { + "value": 0.00012052, + "n": 4, + "scriptPubKey": { + "hex": "76a914812b1ac0dad59ddee3bd468d9f8dc5974006997188ac", + "type": "p2pkh", + "address": "1CmyohaddQAsxLrRqyo7esm5vue7QvmnMH" + } + }, + { + "value": 0.00023919, + "n": 5, + "scriptPubKey": { + "hex": "0014a69504712d29656c44d032f8fa4097be0276c242", + "type": "v0_p2wpkh", + "address": "bc1q562sgufd99jkc3xsxtu05syhhcp8dsjzntrtej" + } + }, + { + "value": 0.00119587, + "n": 6, + "scriptPubKey": { + "hex": "a914e3ae3388c6e8de67fdceb05bfb48b9d9df37f30c87", + "type": "p2sh", + "address": "3NSszopxzoohkYiPT2qVjVsptnh7XyrLoH" + } + }, + { + "value": 0.00596619, + "n": 7, + "scriptPubKey": { + "hex": "76a914a95587ae49638161ae30dcdbe43f8dab7482868d88ac", + "type": "p2pkh", + "address": "1GSMf9bMVQR9yeBfNGnqP15YEt3bVQv6jT" + } + }, + { + "value": 0.00608762, + "n": 8, + "scriptPubKey": { + "hex": "76a9143e13d3b3593135de8e6104c09cf0b0ccec1d4e1888ac", + "type": "p2pkh", + "address": "16fEeVgVPQJhFMUBAjvytDv4kwhjUctUvp" + } + }, + { + "value": 0.01193081, + "n": 9, + "scriptPubKey": { + "hex": "76a914278ebf9cc4abf4181e864a5139853575030882f488ac", + "type": "p2pkh", + "address": "14cAMpZh7yGkbVtSyoeKPUEw2Mu3XQrrvq" + } + }, + { + "value": 0.01193681, + "n": 10, + "scriptPubKey": { + "hex": "76a91434bc4bbdd25c00823aa724884ac7876bcca57ae388ac", + "type": "p2pkh", + "address": "15oqi15ECsovJ5NEfCBcdr6FaPk8MVf8ms" + } + }, + { + "value": 0.01195827, + "n": 11, + "scriptPubKey": { + "hex": "a914c609c2c97ea66879306b8028b9a51cfa621ea87e87", + "type": "p2sh", + "address": "3Kk9QiyUGUPzoiJwKNUVXqfDsi7hV8nWCe" + } + }, + { + "value": 0.01196186, + "n": 12, + "scriptPubKey": { + "hex": "a914c609c2c97ea66879306b8028b9a51cfa621ea87e87", + "type": "p2sh", + "address": "3Kk9QiyUGUPzoiJwKNUVXqfDsi7hV8nWCe" + } + }, + { + "value": 0.01197414, + "n": 13, + "scriptPubKey": { + "hex": "76a914cb3a7ed1013cfc89b43f35cd070831a21a1cce4288ac", + "type": "p2pkh", + "address": "1KXaFGkf3Qica7e4rCPy94Gv1mVi4WhPp3" + } + }, + { + "value": 0.01207713, + "n": 14, + "scriptPubKey": { + "hex": "76a9149441d20253d030bfd392043190af5c2116bb41d388ac", + "type": "p2pkh", + "address": "1EWurfo32ixJdGEoFwRGDdrrTegFMSDcLy" + } + }, + { + "value": 0.46414104, + "n": 15, + "scriptPubKey": { + "hex": "0020dc4f9dbaa12ea9095db4bfacb32103be5f1accbd562a3c0e88b3893973ad4dd4", + "type": "v0_p2wsh", + "address": "bc1qm38emw4p965sjhd5h7ktxggrhe034n9a2c4rcr5gkwynjuadfh2q9amddu" + } + } + ], + "blockhash": "000000000000000000015998bd57fad12c669b1eaa17247500894c224f001b6e", + "confirmations": 4, + "time": 1791752288, + "blocktime": 1791752288 + }, + "getrawtransaction:f0e7351b7829826057a984fde7c03d1c67e8235224c5e3791122a072d1e1a3ff": { + "txid": "f0e7351b7829826057a984fde7c03d1c67e8235224c5e3791122a072d1e1a3ff", + "hash": "f0e7351b7829826057a984fde7c03d1c67e8235224c5e3791122a072d1e1a3ff", + "version": 2, + "size": 150, + "weight": 396, + "locktime": 0, + "hex": "02000000000101642385ff6fbff5c04bef128255a5b1ee407edf9d4a72a1c97a896df8a7d8b5313600000000ffffffff01891a0000000000001600147af71c0620309cef5d78e399c38ec15dfb931cf5014068c65598d3b686745bb06022048dd77e4fe4645b3b50e95547e791a4e525d830aaa96deca3c72722c9760ee5dc30194b6a4f7e3332a5e93e73c23500b62f7f8600000000", + "blockhash": "00000000000000000000eb2af8b76e952b9da026c4dc74da66ba4891b19d3bee", + "confirmations": 52460, + "time": 1760162755, + "blocktime": 1760162755 + }, + "getrawtransaction:31b5d8a7f86d897ac9a1724a9ddf7e40eeb1a5558212ef4bc0f5bf6fff852364": { + "txid": "31b5d8a7f86d897ac9a1724a9ddf7e40eeb1a5558212ef4bc0f5bf6fff852364", + "hash": "31b5d8a7f86d897ac9a1724a9ddf7e40eeb1a5558212ef4bc0f5bf6fff852364", + "version": 2, + "size": 2692, + "weight": 10441, + "locktime": 0, + "hex": "02000000000101baf9d182b956363b867168a7ce460cb67994a55a574637cbc9126ecdb2a133e04700000000ffffffff4eb3220000000000001600141cbc60e86cab2a081adc671f59b94eb31e6f070ab0ed01000000000017a914afa5b92a3302b4eab69a23c6b83253239743f2468764450000000000001976a914d3566785c7828c01c6f9188b71c78cd0a6597c0488acab5c0000000000001600144650d0200eef90052f5d79a93141831a534f7d78a7446b02000000001600142cb2561ba91b3574312d2cef62fda0034f21707cedbe00000000000016001403b0b13dafff395bca8006fa4c71b37716a4c85b34b5000000000000160014fe6a74be5f1a833b0fc27cf01059db06b938b8a1c74f00000000000017a91427091a3927fce90b9ac60ee9e74b32344f25bc83876956000000000000220020aa6f7d1906d1f43d7e7cac3cc2c1525de51cf6248684f9504f868ad6f3ce85c9699b000000000000160014be8c3ea53dfda51e4755e6732a9104697ca8cef3e88d0d0000000000220020293ca48c2052b0bda98822db4ee52ecf9f37544f5ad40ee7e8857a5a34fe9b22db24000000000000160014ba463c0c9610f063615ef5f7480ec4b5e70ffd84fe660100000000001976a914aeb41fa3f2c3623df037c61a858bee5cd027f59c88ac11340000000000001600140a75e8d6998392f2320366f90f407a26c499f8e7f46f0500000000001976a9140a50d6504b42118345f4089cdd8e3b6a30089e0e88ac02dd0100000000001600148194950ab9982d909eabdefe0fa48ff2f7377ea51877000000000000160014ab33419155c65f3bc3f3d8d4e625d6a67782264f1165000000000000160014b0365359fbe2b23717b839d31a791d83df350c423447000000000000160014090f274c874a51e7666a04be6970adc5c12c627f366800000000000016001484ce1a2361ca42db2aa0c59a2820e6c18f85b707391e000000000000160014affeda7c6df0cf3c777f04782c05bafcf05de3b8bfbb0000000000002200200297ede6d96ec92e27d6b723c7f0ea8e6ae4cacbb381445b2d73c78e7b6fa745163f0000000000001600141667c968b936f2299843a2e04323ca9e276a9677e467000000000000160014072ef19e9e90ff659107ccf784021f83dbeef1666463030000000000160014e32decd13b42150a2a41be025000a01a7f190a5f611500000000000017a9145e60a07eef9c52790aac8d6f6f01b4ceccfab2498707360000000000001600148c65e20b855db4679e154f08ed8753ecd71a94ea102300000000000016001402b0b257c7c197179e878d9c9e2392634b61db081242010000000000160014ffd5263b30478103d3172679669a648d70a378f2944501000000000016001471dce581d4923fb893238eaf0f8018bc5b5b9d9b50460000000000001600148d13e55e39e8eb327063c7c629e79f7912838ce6b5220000000000001600141573cfda7341dc8439b2eaedfc6d44ae4cd36d17d767000000000000160014d1d3f0ce70cc2272cc1464d631c73bca18f7ce5527960200000000001976a914228d4b3982ab0175057f69ad4e3c756904c8b05a88ac1e8a00000000000017a9141f96c465c8c432fbe635235dc6bb56a158af9212877fb80000000000001976a91480ba44e47b3405fac3d32caf51f3fe912ae7f2fd88ac59ae06000000000016001442cf55355a3a39d529860b1cc3174b34831bd32e7b390000000000001600149510bc3f06410d0475241c6940332ef3266ef833691e03000000000016001401d1e633e17ec4da888b72c40c8f5b768001ce103c450100000000001600149a5a425f53e7fe44f7bf160cd65c39e9202baf4fb75600000000000016001415a1ee110841296536df86b0ed7c156535ee13a1d9670000000000001600145c4ef985172dd2afb41350feb0fccda33ea1926d0879000000000000160014773e0acb61df37f4d662276ca0ea5ac167c6d219113400000000000016001452ce1fd844a052b5fdb05990f7bcd8011f3185751a66000000000000160014da07e7322eb6810a731e0185df6ebbf154070541eaf6020000000000160014fa85f2994fc42bf0691ce09588ca2bef440a86b62368000000000000160014a88fbe1a3c9aa90645bdd21be839695003aeaf0697ef0000000000001976a91459db1434640ed902cfee39048d3c6c9c800e8b7b88ac821a0100000000001600144e0b71509573e23433c5bd7c5b4555196aa02b8b5e9b000000000000160014644322ac6c4d43ea042d33ea99cf846a1b20fc0e699b000000000000160014b3ed24bc574ec4c10227baf06d0c2d5878a4e9912e4b0100000000001600142fcbc45e349be18497d0ae9f9b7dbcef0c60f8f154150000000000001976a9143c1efaa6158b7988c1a1a36385824172ed7f0aaf88acb63100000000000017a9140b5b58111f34c6c1a22498d38099a92a5282e7f087e91e00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179873af120000000000220020b9ef205271969aa898073e742dbc2ed32656ba17c5753cf1c9dc2fa56363a72a63380100000000001600142776984a10ff2b6cc3d53bc88bca4a8d492919cdd0860000000000001600144a5b7ed87defdb56d3002779979747b01341ab66e135000000000000160014046bed34eb8f28ae30824efc95abd67e62538bee9a560000000000001976a9142537ec3e649147bad382cee675a5bd053d44124288ac0b3400000000000016001491fb5f6be64df745630a4896aee407a6f9ec4328e64800000000000022002009be3f4fbf08d5d952a76b43ddf0b860afff74df4b9c47409924e50bace3e65531ee030000000000160014b09a1a562904c8a665dc2a63c14c9e86fbbf718a42b602000000000017a9144fbe8a97ba06f40c6ceafc81df0167390385e24787bf2b1a00000000001600146fb2128385b04740f2115d680df2540e336f30f3a36f000000000000160014d1f267e98dac8ad7bba82199ebe8eea4361eb888d8590000000000001976a91478ed6463838ec1588f2047968a423e9ec8f3760588ac06ca0a0000000000160014166720c6d31b82403701988c3c6702b12ead1bc1c8560000000000001976a91409c003393f95731a15b40bc25f6674055ddd2ada88ac19c30100000000001600142f7805a1bc480580b89ef2b537a74c3499f0851107cb060000000000160014cd3d7d7626e5538cc8109a95718d9e8091a6fa422661000000000000160014606dfcafb086783e4e9a46438a5caf8fdd2f9c853e9b000000000000160014ef913ef2276388cdd2c9ef7f6c0a24a31368d77cf0911a00000000001976a914ebef974634c4825e68439c5ec625ff3d492d293588acb05600000000000016001437dead37f3631928a144f70f2f3166e4d22e7b1f61560100000000001600141ff9db176dae945bbb8b29d31667df0d748152e56349010000000000160014cc0c685325b271f08486bc43db4e1347d5630afdc9240000000000001976a9147c345faddf3132f4dd0d57d58816f978bd6f1a7e88ac0247304402200cc5cd35f53427db43e32a6d230845aa64c902ef8b0bf517285f062071b610c302204062ba83d02d48189c96edb1e822435870d9dd63b1cff8890db542026c2fd30001210230e7f82076a78f3992c63246a68092f5e5296021f269ee2c0ac323c55c2803ef00000000", + "blockhash": "00000000000000000000eb2af8b76e952b9da026c4dc74da66ba4891b19d3bee", + "confirmations": 52460, + "time": 1760162755, + "blocktime": 1760162755 + }, + "getrawtransaction:e9a495cede58be0f353626ae2a9bbce99087acc004bd3ca38198f27be15d9db1": { + "txid": "e9a495cede58be0f353626ae2a9bbce99087acc004bd3ca38198f27be15d9db1", + "hash": "e9a495cede58be0f353626ae2a9bbce99087acc004bd3ca38198f27be15d9db1", + "version": 2, + "size": 150, + "weight": 396, + "locktime": 0, + "hex": "0200000000010129fba2eced19963f7d0056a9a8f027f74ac07795dd6436f558e97fba152623581200000000ffffffff0118440000000000001600147af71c0620309cef5d78e399c38ec15dfb931cf5014043e090ff78645eca17a48162536b58689bd3c861a7f8a7de74d881fd17fc1e6f00822fb67c840acc4759d6dc3e2f20bd1487a19af954d3721f892fd1bdd66c9300000000", + "blockhash": "00000000000000000000e2283167cf9aed2a93afb337e866d7d04acaa7784b94", + "confirmations": 53680, + "time": 1759365617, + "blocktime": 1759365617 + }, + "getrawtransaction:58232615ba7fe958f53664dd9577c04af727f0a8a956007d3f9619edeca2fb29": { + "txid": "58232615ba7fe958f53664dd9577c04af727f0a8a956007d3f9619edeca2fb29", + "hash": "58232615ba7fe958f53664dd9577c04af727f0a8a956007d3f9619edeca2fb29", + "version": 1, + "size": 1866, + "weight": 7134, + "locktime": 0, + "hex": "010000000001011b1f7c6ef839228aa1679909815f81f4c6e11f9fba338a8f07f684d19ee5c9962f00000000ffffffff348890000000000000160014f0e8e9fe3624695e8844a4ca4071d46d780325f2281d0100000000001976a91451e204c2537e072234681a3033f49e4784d4908188ac80b501000000000016001480fed2e15cd09ecb174f0420f1940786d39f941a983a000000000000160014f323c09f8a5701c86da7cfacc192a07798a777c0b80501000000000016001410b575598deb6a85aac1b3d9eaa79d1d62e16307f0550000000000001976a91470657510ed248e033de1a11740e8c6b7705168a988ac90650000000000001976a914451bffca3f62fe9ef64d4d13e3d2c66f0f7080d788ace02202000000000017a91414025f47fb8ba53e4d9495a590cc4513df16303387f824010000000000160014e96371688bc5fb16932f08b07982a4011e27697e486b0100000000001600144303aa51d78a0aa7dc79835a2bd42958c8fbf2a8d0840000000000001976a9147b4e6341e66db693c02ba1f9b3ec988698b895d088acf8a700000000000017a91476cde79d0a0b7fc65fe5c96880fff695ab5359fd87f0550000000000001976a914d1bddc995a6245fdd7868f1cae48cf8fd4d7fca488acd8590000000000001976a914ccdae2d56342d02ecaa8592c0b31f40d535e263788ac281d0100000000001976a9144078fec902a6e05f773dcde676d2e8b11abdf8dd88ac58920100000000001976a91431d9dbb4281a064e0e5f01549943249047cab77d88ac204e0000000000001976a914f45e81a437b41505ae854f8330b8c8b131dde95088ac384a000000000000160014534af803f73c03aea2bd251d2e83c3ea2ab220f5384a00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817981021010000000000160014403970fa2ac0ae7494066dd596b4c3db1cb49645204e000000000000160014546bd88cb6824790fb900b2ffa0c311a52461331e08d0500000000001600142249f297e8f60f9ae7cf86d2720dd9472343806c880d0100000000001600143e2b6ced47e6ddf610a7ea309d5aa13851010ae2e01c0300000000001976a914f45e81a437b41505ae854f8330b8c8b131dde95088ac38a9050000000000160014ac36fc72ed3f6c222a58d0668fe3e2c1adab9292281d0100000000001976a9147670314b938810016ea95976beba2a58e7c6966a88ac803e0000000000001976a91402b760ff3b838e77ef947308ee369d68816391c788acb0b300000000000016001435d5273c38bd3901b2f4f763610c5e826a4f7c1aa8d20200000000001976a9147dab99545af7e0388fe1ee648374ebc96e9e075188acb030010000000000160014bfd34ffcaea6751d8334f742114d75ef40e5025490650000000000001976a91433e01a247155fdbebc4e690f7f932bd6cc77d37388ac38a90500000000001976a9140fb8efa73438e293dee7503e0146874168093bc688acd072030000000000160014cc2dd5932ad8c83ba2754c3140712351f15b83bde02e000000000000160014b6c6eda6951099b14d798351c1525ed5adccb56b98b70000000000001600142bc68729560befe159ec6bc9800253a670e3252a78da0200000000001600149030caa51b205b8eb74299936eaffc11a2f709c9b8760300000000001600149bd5378f495b6b057701816d37d6aa111a6aaf9be02e0000000000001976a914def05832801059bf2d68ad6d27d902da025dc32c88ac78c80500000000001976a91480737d514ee291e804c7bc3e86a534fa9188f97988acb88800000000000016001437bee253c61fb10f47b83c6df78f896959a9278468bf0000000000001976a914c0051c939c9e08991dad66519e1abc0dcb5f43e888ac50400100000000001976a9144cbc701c05879a480bf3e697f385f7ccc23818c488ac08b70400000000001976a91473d162928f9ea8e7308b49c11c3a21f3167ea39b88ac20cb00000000000017a914ce8625b35279e36fb6967bb3af5b2f5164dedc06879065000000000000225120e58cb189543e0c8114d4a4c81ca7c474a69ca146d7eb835d9b8a6f58218f771990650000000000001976a91450b998404c9479957b83dcec6cfd71e196876a0a88ac880d0100000000001600144e0a52cbc9a0be4aa2a0a6262c8a6f9d1eb5bbd7e8f70100000000001976a91434f861b84f56982a12d8870b5de92cdb99178ccd88acf8240100000000001600140d4631d05da58d4cdcb2f0fd1d045fcde83b9c3a38c1010000000000160014b956aa8e71762342767629ea155ec441be3fdf44f04f0100000000001600144a9cae40771cb5efd45786c42e2683c56f96370f34780803000000001600146367212615852e7dd5605a83e1f0f51c1ada16cf024830450221009ccd56abfc84a18d805f28ac40d233ec66766b312b409b4c51de22cfe1370ae4022021056ddeb548ed4d9a078021272f77db6e1c450e4cf754717272e8f2b52d8540012103cb0876c3d8fddf069dd590722daccebe19dd59e02a44a7ad72eff22fb14610bf00000000", + "blockhash": "00000000000000000000e2283167cf9aed2a93afb337e866d7d04acaa7784b94", + "confirmations": 53680, + "time": 1759365617, + "blocktime": 1759365617 + }, + "getrawtransaction:6f5b1bcacdeaa2dbcf6a9c99372c70f11a8195689fe7f9fdd90e1377d2e4e306": { + "txid": "6f5b1bcacdeaa2dbcf6a9c99372c70f11a8195689fe7f9fdd90e1377d2e4e306", + "hash": "6f5b1bcacdeaa2dbcf6a9c99372c70f11a8195689fe7f9fdd90e1377d2e4e306", + "version": 2, + "size": 262, + "weight": 640, + "locktime": 0, + "hex": "020000000001027812ac5eba42f5740cbf681f733e076926b8b8afaf1a0d282ff44354d0e2650a0100000000fdffffff0f4f4f6f2e85e2518feb34f2f54e6017cf4aeef3e2301e40b7fab746ef36c1820100000000fdffffff0102370000000000001976a914c07b9849fc9a4cffea518eaa3b956e3696fe71b888ac0141088b1e9016f900cb06a1b90c565d9d31073fe21346e8f6b3149a917427a048cf5abcbb6539b42454c5b16af408322f68f70a719f46cbf165cfdd5304dcb888730101410bea2b81680d9f923211e02f076cd8d39d211b89b5d4d57e2559c4914190079da895ad70572dc8733924befb73801150d66885b1fd6b6d2ae91e4695c64aa5ad0100000000", + "blockhash": "00000000000000000009087f9e91f6cdf2f430399743e58b86f4b20839e494df", + "confirmations": 251650, + "time": 1642540065, + "blocktime": 1642540065 + }, + "getrawtransaction:0a65e2d05443f42f280d1aafafb8b82669073e731f68bf0c74f542ba5eac1278": { + "txid": "0a65e2d05443f42f280d1aafafb8b82669073e731f68bf0c74f542ba5eac1278", + "hash": "0a65e2d05443f42f280d1aafafb8b82669073e731f68bf0c74f542ba5eac1278", + "version": 2, + "size": 259, + "weight": 706, + "locktime": 0, + "hex": "020000000001010f4f4f6f2e85e2518feb34f2f54e6017cf4aeef3e2301e40b7fab746ef36c1820000000017160014bbc117b871b7e194eda4c690f297a222953f29f5fdffffff028d3e00000000000017a91436c3fa9f5fd052c7b8da8496ac98cf44117d50e787db1b00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100abe786bfc153ce42b941a5b46b0a92336cbbcbd0b5aa2ab35fbe10ef194c1111022011643b9ee8d99b9a3492129f00e5ec5a8923667acb85eb6cc306ea6351631a6201210388091aa89c8d9ffafebe0c3bb8e28563a4da7b488c6a35b97fba336347b7512500000000", + "blockhash": "0000000000000000000544967e8daa1542db5d606c1f22e474ec90f00c8c6919", + "confirmations": 251795, + "time": 1642445772, + "blocktime": 1642445772 + }, + "getrawtransaction:82c136ef46b7fab7401e30e2f3ee4acf17604ef5f234eb8f51e2852e6f4f4f0f": { + "txid": "82c136ef46b7fab7401e30e2f3ee4acf17604ef5f234eb8f51e2852e6f4f4f0f", + "hash": "82c136ef46b7fab7401e30e2f3ee4acf17604ef5f234eb8f51e2852e6f4f4f0f", + "version": 2, + "size": 267, + "weight": 738, + "locktime": 0, + "hex": "0200000000010159ed01209b5ffe2d519cb54adfee41bc50271a9f0a92b47bd79a486069ff85250200000000fdffffff03935c00000000000017a91405166b9f98fbfde07be2bc8983e69a22c8ee542e87c71b00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798fe7300000000000016001494e417d6f725c08e89cde98ae294310d920c59ce024830450221009789d4c27136d1249b078bba7d2033f561ea8e2e274a3e5ca0b399b30424960502206f5fc1f89b41d7e44aef59bd0eb59b214f5b6d2274c8507f5025b61d4c3d27f0012102b51f7d75fa1a672fda68dd115a9aef9dd1ae02808f7448a7d37eeb4b4669503d00000000", + "blockhash": "00000000000000000001301979723628387fdbfedaf597c46019650d2005c49b", + "confirmations": 251806, + "time": 1642441346, + "blocktime": 1642441346 + }, + "getrawtransaction:98287365f0e155caf9514334427dfa493d34d653fba5f833d75aed51c6415b8b": { + "txid": "98287365f0e155caf9514334427dfa493d34d653fba5f833d75aed51c6415b8b", + "hash": "98287365f0e155caf9514334427dfa493d34d653fba5f833d75aed51c6415b8b", + "version": 2, + "size": 370, + "weight": 871, + "locktime": 0, + "hex": "020000000001037bebe9ec0dd485986668df2d188d81c53983b862f8378c70f715f79ffc21023b0000000000fdffffff11b60248657474b53d1f50460f2fccc15ad4f54b3058d5e896bc57ccbc2a0b1d0000000000fdffffffa58305c164b7b490c620d842be3f5ec78fb12e38ab545b52045988234e1cdf4f0000000000fdffffff01dc500000000000001976a914cb6c5405aa5f9db22ea7e635541e377be23ea51288ac0141099370c520b7064800f4b628b7d3c7ae1912aea1e84cce410cf1f382c53a0125d15bfcbee33a412c6d86735e3063fdb4f5ee0b71a4c49fa3b99105df66fe51f30101416839255a28794a3d0cdcb90a8b8c469e9c10d31982e7ac3bda87d0d4c2d956817309b79f6801861f03f219c2ece614e11954ff6097c1be5f802a874058a82d5b010141954df424bfe16805896b7d270993c7d51dd104ee5d6b6e51ec0670c81f43aafd652f4cd914896f2cdc505e00fdac030101516a298aec2b9af24ac387a4ca2df40100000000", + "blockhash": "00000000000000000001e4eb95645b931530ff029ef6995184d3ea448cbdd2df", + "confirmations": 252174, + "time": 1642254945, + "blocktime": 1642254945 + }, + "getrawtransaction:4fdf1c4e23885904525b54ab382eb18fc75e3fbe42d820c690b4b764c10583a5": { + "txid": "4fdf1c4e23885904525b54ab382eb18fc75e3fbe42d820c690b4b764c10583a5", + "hash": "4fdf1c4e23885904525b54ab382eb18fc75e3fbe42d820c690b4b764c10583a5", + "version": 2, + "size": 234, + "weight": 609, + "locktime": 0, + "hex": "02000000000101e7fc36df165ef84915b60077c52716a3c6357944435a0a7bb0e154def1f860b70000000000ffffffff029c1b00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a6f16500000000001600148b9417b2c10dab845be1b45981ba84982d0a51df02473044022004b5b18f3358288a26562c90cdf928c3181ea96f627bf6ced68f4ff106ee602a02204eca473ba1ce7629715dc47bc76cf378330ee5430fd25770f1b57c223f30d885012102042cade74cb9274d410b9244f0cf6cd071c7cd8209360092744eaae3956f56f100000000", + "blockhash": "0000000000000000000441a0a1345ae0e424201c24b6bd5aed4b69842e203480", + "confirmations": 258769, + "time": 1638440724, + "blocktime": 1638440724 + }, + "getrawtransaction:1d0b2abccc57bc96e8d558304bf5d45ac1cc2f0f46501f3db57474654802b611": { + "txid": "1d0b2abccc57bc96e8d558304bf5d45ac1cc2f0f46501f3db57474654802b611", + "hash": "1d0b2abccc57bc96e8d558304bf5d45ac1cc2f0f46501f3db57474654802b611", + "version": 2, + "size": 234, + "weight": 609, + "locktime": 0, + "hex": "020000000001017bebe9ec0dd485986668df2d188d81c53983b862f8378c70f715f79ffc21023b0100000000fdffffff02201b00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a36100000000000016001430e597acd2700aa1d679dbcbbd51a0b0c2338fef0247304402207d86d9b8ce62c335e35c30561a5a30866dd89c672fec875cc70fbb1e2fbb30830220729a63d9a7406053bc415df5e9c726a006d2be7fe911a0f128865435b68c70850121033c7b3ef4dc28b574e3954be6100cdb7cd67c7c86eb74ea2831bd321f20fd9a3c00000000", + "blockhash": "000000000000000000032b73c5d5ddc9b37d556810b214ba4a4f282824ea7d66", + "confirmations": 258995, + "time": 1638301660, + "blocktime": 1638301660 + }, + "getrawtransaction:3b0221fc9ff715f7708c37f862b88339c5818d182ddf68669885d40dece9eb7b": { + "txid": "3b0221fc9ff715f7708c37f862b88339c5818d182ddf68669885d40dece9eb7b", + "hash": "3b0221fc9ff715f7708c37f862b88339c5818d182ddf68669885d40dece9eb7b", + "version": 2, + "size": 265, + "weight": 733, + "locktime": 0, + "hex": "0200000000010178f21a7c99e37eb6afd1faa2e629377b1604d4acbd593417414c0f75ed42bf550100000000fdffffff03fb1a00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817983586000000000000160014465c3ad6358d94c2748bcf30daad2c385257ff3155300000000000001600146151358e34f511faf5df5ef2440b56cd86f550a902473044022011ff8c4bc4ff0ea1fa05a11e402cb0bde4c8fd2f290f852379fa4af84f69122d022035be34ef8cb47ac815a7566d11c8239c69944c7a098a100f13c6dba90e1d452d0121023e769ca1e8d525038e56c6d743cebb9c1dc0e6a0e08ee208a3c2970c4df8c3d600000000", + "blockhash": "0000000000000000000408e1adb7bec32de6645ea300a3297bd7860f8dfa60fd", + "confirmations": 258997, + "time": 1638299012, + "blocktime": 1638299012 + }, + "getrawtransaction:d345d25cbf488e705dd26bec204e7d0dcf9fb04c12a56705c4a5c2baf256c8b5": { + "txid": "d345d25cbf488e705dd26bec204e7d0dcf9fb04c12a56705c4a5c2baf256c8b5", + "hash": "d345d25cbf488e705dd26bec204e7d0dcf9fb04c12a56705c4a5c2baf256c8b5", + "version": 2, + "size": 802, + "weight": 1795, + "locktime": 0, + "hex": "02000000000107a3358f9ed3840fa7cef9e2b80b9d199d51dfba24c78666659d547fe4037f786a0100000000ffffffff6f4809e0802dd3c383a4c5461997d67aa137b196fc4a0c90ef6c91749fa17d0d0200000000ffffffff891a634c4960f1e0e3aa8a6e5888151f705769502732b9c0d0e993ff220bdf880000000000ffffffff31a8ba93b2b879119b232e480af1c5694a02d76eafc3113ff0b0af8e660befb80200000000ffffffff31a8ba93b2b879119b232e480af1c5694a02d76eafc3113ff0b0af8e660befb80300000000ffffffff3694e30a8a0b6a2710e0d81f75af89626ee08153f8838af2bed9dcddb049fd200100000000ffffffff2e57a97fe91d7fea2d1465cfd6de16e5ff249da14cf2a65613a6b940eb9ec1cf0100000000ffffffff0110a40000000000001976a9140d73163a05305840f3cf18358dd8acfe7cdfef1588ac0141183c95c393377f1c017f776634d8c2ba63af0ac135193c7ccffdbfc9d417dda593e82995548cd9dc4045546dfe56453d21bff0ae1f91efebc4817e98975a4fa0010141c610cb9cc1aca9afb47d4cd3e626d9e8d7d2f979aa2ccd451160adf7861f27268f480964a8c425ea1102621a28ab902ce0424fe56eebcce5e3cd8b5efff489b60101413e06be7033b98c6b4484a38d21787fddd03762329667aab373c541c9d19b0ad795acfe9d2f278bf006875f91912df4bc37fbe26ca1653a30f4a3bb95545b1faf0101418119776097929215514f00b751dd854f9078e515172f601b5f098dd7aea1ce0fa13804ee6df7989a784592f19d77bc0ab8f2b795b9bf935b27f14d519f53fa5c01014136a09fce6e825be856c57075de4df1f616d4e7df447b970017eb76cae2e4cf8a47553f94c8b5566561e12cbec70e2bf10dd3c3484b9a42b67e9bb7b094c06fff01014196e903589b866357ea63c3f10fe2a317ba5c1957a7098b09b79ae108d3fd62bfab3cfbeb20ee3b5f47724b6851ea5f3380c9f90f67726128834fdfde011deafa01014153c9795199d90b49eb2349027679d22bb4d088cd29b52998ea7fc5fc15e94a2299795e66dda90fa7d2f4f63bb1ba74b5d3e5b4fbf2ff795f8c61fd1c6765d6550100000000", + "blockhash": "0000000000000000000ba42307498a20df63ab521d62d97ad059ec0666a909e1", + "confirmations": 259858, + "time": 1637760613, + "blocktime": 1637760613 + }, + "getrawtransaction:6a787f03e47f549d656686c724badf519d199d0bb8e2f9cea70f84d39e8f35a3": { + "txid": "6a787f03e47f549d656686c724badf519d199d0bb8e2f9cea70f84d39e8f35a3", + "hash": "6a787f03e47f549d656686c724badf519d199d0bb8e2f9cea70f84d39e8f35a3", + "version": 2, + "size": 235, + "weight": 610, + "locktime": 0, + "hex": "020000000001016f4809e0802dd3c383a4c5461997d67aa137b196fc4a0c90ef6c91749fa17d0d0100000000fdffffff021f930100000000001600148621713862f01d904692619c7233a2defe635ea5641800000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100939fbdc91673866899ae7c4a27dea3a41a1d9ee1a84a3918574fefa6077ec00c0220595be524ca2b58eefcf8259eb561c48ac3eaa92d6918212cff7da4fe17b758fe012102f4d47f4fbd8e746943b4bc1fdf3a7eeed10bb78c7182c17d95b8d5ac1283ec8c00000000", + "blockhash": "000000000000000000041ba05acbd1dae91de5dc31bf5ca19a86a8474ca8b554", + "confirmations": 261562, + "time": 1636749981, + "blocktime": 1636749981 + }, + "getrawtransaction:0d7da19f74916cef900c4afc96b137a17ad6971946c5a483c3d32d80e009486f": { + "txid": "0d7da19f74916cef900c4afc96b137a17ad6971946c5a483c3d32d80e009486f", + "hash": "0d7da19f74916cef900c4afc96b137a17ad6971946c5a483c3d32d80e009486f", + "version": 2, + "size": 267, + "weight": 738, + "locktime": 0, + "hex": "0200000000010194d1ccf4c0b44b5e420cb02a58210b0b0ae12364bcc5c6c85401629c7d2a599e0000000000fdffffff03f17900000000000017a9142bf41bc699c55454c5d930793c60a9f8378e4b39870bb3010000000000160014fa2570ed4dacc329f0c799b85c8ce985ea6190994c1800000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100bc1e80a4365bad4071567df629d02e0ca87a31fdc6a5b7a8e84e6bd4030fede902201c9175757e1e287464cebe35f5bca65090eca7b4b7c512cdf5b7ae4e27cfb50c01210369b76a690a679ae7aab0aca30cd60fe2f20a150c5b59f28862d770f754d479f300000000", + "blockhash": "0000000000000000000c98908fa682cd532dab8fcd70a045706376be759b7d9e", + "confirmations": 261563, + "time": 1636749383, + "blocktime": 1636749383 + }, + "getrawtransaction:88df0b22ff93e9d0c0b93227506957701f1588586e8aaae3e0f160494c631a89": { + "txid": "88df0b22ff93e9d0c0b93227506957701f1588586e8aaae3e0f160494c631a89", + "hash": "88df0b22ff93e9d0c0b93227506957701f1588586e8aaae3e0f160494c631a89", + "version": 2, + "size": 204, + "weight": 486, + "locktime": 0, + "hex": "020000000001019594476d3e74d26f9f4fcae76797742f532e4f42b4374de74b05a4645dfe46450000000000fdffffff01c31700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100bdd4b0bf8d9850a4e23da6d3a20b6471fbaef057dda881826d3ce4f59012d99202207990667db550b0de54d16aa95b66410e7e1e4797a68f5a2b636f97f83d69a053012103272fd6d92028f4a63eb08810a8acc5fc1b6c93a0fe811c16b02a4d1eb85f559500000000", + "blockhash": "000000000000000000095b43d156c47a7a2966d9f3fe5af0091d1edf84265f20", + "confirmations": 270152, + "time": 1631821007, + "blocktime": 1631821007 + }, + "getrawtransaction:b8ef0b668eafb0f03f11c3af6ed7024a69c5f10a482e239b1179b8b293baa831": { + "txid": "b8ef0b668eafb0f03f11c3af6ed7024a69c5f10a482e239b1179b8b293baa831", + "hash": "b8ef0b668eafb0f03f11c3af6ed7024a69c5f10a482e239b1179b8b293baa831", + "version": 2, + "size": 310, + "weight": 910, + "locktime": 0, + "hex": "020000000001013694e30a8a0b6a2710e0d81f75af89626ee08153f8838af2bed9dcddb049fd200000000000fdffffff0457fb000000000000160014e6914da8d026c51fc830e53718f885c13d7c0f92172900000000000017a91471a0076e86d915d6e827ee4d46bff4b97790943287d61700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798d71700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100cdbd671976a3377cb4537a7e612a5bca176de7d86dd4f4fca5395a15e580df3e0220626415a0935cb9d223a9478186dfb9f1c1bd22eaf6e5f992352b099e8c8f75cf012103b7ee3a40205105b874840e80f859e8ab4434ab2a4a167e005770a19903294d5300000000", + "blockhash": "0000000000000000000cf636d6b1da73fcefa5b1bd35f0fe548738c7d2f23cc3", + "confirmations": 270153, + "time": 1631818909, + "blocktime": 1631818909 + }, + "getrawtransaction:20fd49b0dddcd9bef28a83f85381e06e6289af751fd8e010276a0b8a0ae39436": { + "txid": "20fd49b0dddcd9bef28a83f85381e06e6289af751fd8e010276a0b8a0ae39436", + "hash": "20fd49b0dddcd9bef28a83f85381e06e6289af751fd8e010276a0b8a0ae39436", + "version": 2, + "size": 234, + "weight": 609, + "locktime": 0, + "hex": "020000000001012e57a97fe91d7fea2d1465cfd6de16e5ff249da14cf2a65613a6b940eb9ec1cf0000000000fdffffff027b690100000000001600145785d937e06a63adcbe72789e3974d765cfc8327dd1700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980247304402206fe8f3c3864cfd375899920a5ba145906f6cad6a8fc36ae617f0d9ad014953e2022052b89f0891dd5e48d299b3f2bf31e9f6ad2686434536c2d6663283eaaaea1f0b012103954d00e6779936ce69a245d9dadb45b8d8f402bb283603dddb00373bb1f52a3700000000", + "blockhash": "0000000000000000000629acaa6c6a42d823e50ceb98c39171aeec7e72ae5eb3", + "confirmations": 270154, + "time": 1631816854, + "blocktime": 1631816854 + }, + "getrawtransaction:cfc19eeb40b9a61356a6f24ca19d24ffe516ded6cf65142dea7f1de97fa9572e": { + "txid": "cfc19eeb40b9a61356a6f24ca19d24ffe516ded6cf65142dea7f1de97fa9572e", + "hash": "cfc19eeb40b9a61356a6f24ca19d24ffe516ded6cf65142dea7f1de97fa9572e", + "version": 2, + "size": 383, + "weight": 881, + "locktime": 0, + "hex": "0200000000010222c1e35c74596dba0dfa1e4ec9731d4d90f6da4be2e06ec89d1ae113453ac8ae0100000000fdffffff709481a0120bc9784213be1c3e1621c8c2b58d3a3b13658c7c3d0094348d60180200000000fdffffff02e088010000000000160014264398b2fcab3459380cfc872a038df0c549b309d31700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980247304402202b5bdb595f78befc13fdbe120713c329b8e172c48acc4caee8de435b2670661102201a66f06f17c5750561d750ce3f947fc2fa2b371153c3d8abe3155464b6390a47012103dd4cdc64dc3bc80ba7acb0ab4310f5cb61cb83f99f6789f87136c2fdba05e84a02483045022100be1243e5c63e695360e0e0a46dcd80bf1f1c9887718a8c2083d0f7558c59b55602206d3d00ffb5df1ccce6309e6150a9d8cc0dfc1fbf19de0e736df68142efdffcb8012103cdb2a177c3f8185801a4d258e06ec987f24858a8b4c76d6113e863818951f57000000000", + "blockhash": "0000000000000000000b88f73eb1dc427aa254989eae625fa0de07a9ef43d161", + "confirmations": 270156, + "time": 1631816191, + "blocktime": 1631816191 + }, + "getblockhash:0": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", + "getblockcount": 971000, + "getblockhash:967680": "0000000000000000000161354016172f2a377610d52dd46d0f68a919333458cd", + "getblockhash:969696": "000000000000000000001e39df127cbab82a824ac43cfcdbf62e59f6a08b9f0b" + } +} diff --git a/exposure-report/fixturi/electrum.json b/exposure-report/fixturi/electrum.json new file mode 100644 index 0000000..a1b6e4d --- /dev/null +++ b/exposure-report/fixturi/electrum.json @@ -0,0 +1,231 @@ +{ + "_sursa": { + "baza": "https://mempool.space/api", + "cand": "2026-10-11T23:44:53.398Z", + "nota": "Electrum-protocol responses DERIVED from the same public index: get_history from the confirmed transaction list (tx_hash, height), transaction.get from /tx/:id/hex (verbatim raw hex). Not recorded from an Electrum server. 2026-10-12 (round 6 of the review): blockchain.headers.subscribe answers the tip { height, hex } that the adapter reads before the history. The tip was NOT recorded with these responses: it is the real mainnet header of block 971000 (hash 000000000000000000007e10297dd9dbd7b6a76292346cd489e568511b7e4c85, header time 2026-10-11T22:53:11Z), the last header of the header chain the C6 Bitcoin P2P follower validated on 2026-10-11T23:03:16.085Z (tools/aere-quantum-shield/dovezi-l1/ots-noi/btc/antete.bin: 1315 headers 969686..971000, each chained to the previous one and meeting its own proof of work), about 52 minutes before these responses were recorded; every height in the histories here (at most 970984) is at or below it. 2026-10-12 (round 7 of the review): server.features (only its genesis_hash, hash_function and protocol fields) answers the genesis block hash of Bitcoin mainnet, 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f. It was NOT recorded with these responses: it is a constant of the chain, and the test recomputes it from the fields of the mainnet genesis header (version 1, merkle root 4a5e1e4b..., time 1231006505, bits 0x1d00ffff, nonce 2083236893). 2026-10-12 (round 8 of the review): blockchain.block.header answers the CHECKPOINT blocks that the adapter reads after the tip, on Bitcoin mainnet, at the highest checkpoint height at or below the tip (bitcoin.mjs RETELE_BTC.mainnet.puncte): heights 967680 and 969696. They were NOT recorded with these responses: they are the two pins of the shield's Bitcoin header follower (btc/antete.mjs PUNCTE_PINATE, read from two public block explorers, mempool.space and blockstream.info, on 2026-10-11, identical on both), which the test requires to equal the tool's table, to hash to their hash and to meet their proof of work." + }, + "raspunsuri": { + "server.features": { + "genesis_hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", + "hash_function": "sha256", + "protocol_max": "1.4", + "protocol_min": "1.4" + }, + "blockchain.headers.subscribe": { + "height": 971000, + "hex": "00606b2513c30754d7e92558d00e0a4900fda8091ebe997beda901000000000000000000ec51ec7be7a1b8c250499fb056fa13d00f5d98918eb64905c8f910a8be64ef7f5713cc6af01e0217dc006b4a" + }, + "blockchain.scripthash.get_history:cc0d7111befe9f24f1824c797e837c5cff2f8773901ccb9aca0372a2a6c48d34": [ + { + "tx_hash": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098", + "height": 1 + }, + { + "tx_hash": "308bc3b8c3987ce86f2af1c32a6e8727f18cb151604b26ab0ce6b21ae5b500b1", + "height": 908451 + }, + { + "tx_hash": "a2e6580599d949ebcdebd85888e7abbf3ce5113bbaa276bb2ce0b722fcaa3aa2", + "height": 957235 + } + ], + "blockchain.scripthash.get_history:80416fa8b5ee90659ee7b67102d4c81770d476ebc9542e70be0eebd76177a9ac": [ + { + "tx_hash": "fa1b9a669a7c16f1d0b15cfb57e9830ccee36db984bd074de450e47088c8d078", + "height": 339085 + }, + { + "tx_hash": "08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15", + "height": 339085 + }, + { + "tx_hash": "c2e9cced187a6222901f0dae0942ae95c3c1f92e2cae4b68780c09958d9ad43d", + "height": 632289 + }, + { + "tx_hash": "c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59", + "height": 632289 + } + ], + "blockchain.scripthash.get_history:9c580325f55fbf4e2d4087c8eefba15e73909354aa533f3c61bf00a0a7474076": [ + { + "tx_hash": "8f716720ef9caf72149e262748e543df1fc2996cb5ae95d6cec2678dd06601ce", + "height": 564789 + }, + { + "tx_hash": "8eeacc40538b094b17f2e278dd53a2f6f68e7126ee81bff0ea3bec2fd9a42f66", + "height": 642635 + }, + { + "tx_hash": "eae4537e85ef54cb20408a385115f0cf88090f27609d4fa0f384b4aa633999a8", + "height": 646789 + }, + { + "tx_hash": "239cfce453bd562b3cc820e4bb9178fe4816bc73ab62292f33088d1893b1a3ec", + "height": 661018 + }, + { + "tx_hash": "a66b0e20ca318ff84dd5da4c099fb9bcaee60bbc2da637b912bfb73345ffc9e9", + "height": 667553 + }, + { + "tx_hash": "65916aee7913a7bf95055dfff7b198d11ecc12ecb9fa5393f2a93fd2f6433e99", + "height": 751265 + }, + { + "tx_hash": "9b00af71e0a48823cebc6fbd6c9b9a60ab517b6b70d2e030ee61fd9be519d6dd", + "height": 905378 + }, + { + "tx_hash": "092704c4efb9b499c8aceeba1dcb02e2d6abacc180dc9ebe587408a0dafa264e", + "height": 950467 + } + ], + "blockchain.scripthash.get_history:8c0b6e4d46f068c5b748b77f601637a881749a78dba5ed976550bad2dbc2d92d": [ + { + "tx_hash": "be09fa7749193def059b7fc7fb1668a749c37d2d8ed7a83748dffd725e0e8cb5", + "height": 919640 + }, + { + "tx_hash": "de9d4188f07f4b91d880cead9408eeeb2b63b83fa79df8e76088b6de3e2cbf1d", + "height": 919640 + } + ], + "blockchain.scripthash.get_history:0b3c7e665d444084f46222f8daa8c07f7cf32d2cfd190a2199a268f9c77e2cce": [ + { + "tx_hash": "848f85d740537fb6d3f3a2571ba4de0104bec984a5f44abe40865e72a31c6207", + "height": 970969 + }, + { + "tx_hash": "8881ba5fd4ba272864c14e793ba78eba6568d7e98a83c362ceed6461450d4e1c", + "height": 970971 + } + ], + "blockchain.scripthash.get_history:7f39fb8148b89c98a07f92bbf7f42aa499d7bd12c60091929314999e142b63ef": [ + { + "tx_hash": "6f0f72c1578193e541c049f6f6e130c2ef87330e01e77efa9b3870ab0a15492b", + "height": 970981 + }, + { + "tx_hash": "2e08a73b48527afde28ffe2a0d81d34ec4e850f23512342ce43e3815eac8f92a", + "height": 970984 + } + ], + "blockchain.scripthash.get_history:a12cf1aa7c74a6e9f54984646526173abed2a9f4a4862dc83eb94e8e8ef5220a": [ + { + "tx_hash": "cfc19eeb40b9a61356a6f24ca19d24ffe516ded6cf65142dea7f1de97fa9572e", + "height": 700829 + }, + { + "tx_hash": "20fd49b0dddcd9bef28a83f85381e06e6289af751fd8e010276a0b8a0ae39436", + "height": 700831 + }, + { + "tx_hash": "b8ef0b668eafb0f03f11c3af6ed7024a69c5f10a482e239b1179b8b293baa831", + "height": 700832 + }, + { + "tx_hash": "88df0b22ff93e9d0c0b93227506957701f1588586e8aaae3e0f160494c631a89", + "height": 700833 + }, + { + "tx_hash": "0d7da19f74916cef900c4afc96b137a17ad6971946c5a483c3d32d80e009486f", + "height": 709422 + }, + { + "tx_hash": "6a787f03e47f549d656686c724badf519d199d0bb8e2f9cea70f84d39e8f35a3", + "height": 709423 + }, + { + "tx_hash": "d345d25cbf488e705dd26bec204e7d0dcf9fb04c12a56705c4a5c2baf256c8b5", + "height": 711127 + }, + { + "tx_hash": "3b0221fc9ff715f7708c37f862b88339c5818d182ddf68669885d40dece9eb7b", + "height": 711988 + }, + { + "tx_hash": "1d0b2abccc57bc96e8d558304bf5d45ac1cc2f0f46501f3db57474654802b611", + "height": 711990 + }, + { + "tx_hash": "4fdf1c4e23885904525b54ab382eb18fc75e3fbe42d820c690b4b764c10583a5", + "height": 712216 + }, + { + "tx_hash": "98287365f0e155caf9514334427dfa493d34d653fba5f833d75aed51c6415b8b", + "height": 718811 + }, + { + "tx_hash": "82c136ef46b7fab7401e30e2f3ee4acf17604ef5f234eb8f51e2852e6f4f4f0f", + "height": 719179 + }, + { + "tx_hash": "0a65e2d05443f42f280d1aafafb8b82669073e731f68bf0c74f542ba5eac1278", + "height": 719190 + }, + { + "tx_hash": "6f5b1bcacdeaa2dbcf6a9c99372c70f11a8195689fe7f9fdd90e1377d2e4e306", + "height": 719335 + }, + { + "tx_hash": "e9a495cede58be0f353626ae2a9bbce99087acc004bd3ca38198f27be15d9db1", + "height": 917305 + }, + { + "tx_hash": "58232615ba7fe958f53664dd9577c04af727f0a8a956007d3f9619edeca2fb29", + "height": 917305 + }, + { + "tx_hash": "f0e7351b7829826057a984fde7c03d1c67e8235224c5e3791122a072d1e1a3ff", + "height": 918525 + }, + { + "tx_hash": "31b5d8a7f86d897ac9a1724a9ddf7e40eeb1a5558212ef4bc0f5bf6fff852364", + "height": 918525 + } + ], + "blockchain.scripthash.get_history:3e2d724c1088420b2e793555de5804e6551f2c474e9d955ccb901b6004216c93": [], + "blockchain.transaction.get:a2e6580599d949ebcdebd85888e7abbf3ce5113bbaa276bb2ce0b722fcaa3aa2": "020000000001017cba74a9aca0395f85e5c37329f83d512cd2c5a0ca0854f70d46b99b0ac9ecec0200000000fdffffff030000000000000000426a404f6c69766572204a61636b2c20446164647920697320e282bf75696c64696e6720796f7572206675747572652c206f6e652073617420617420612074696d652e090300000000000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeacae2900000000000016001485439608a60e1714d367f28a2c6a85f203988d130247304402204c4e97d149afccd2abeeb7162685bd03d0a7158609252cf8d6b8b96d607bbe6b0220531569f58287be1c9e003b7ce7d8e1c8df277781350c769044722d0216071811012102bfdaba69c2c24f77d17198fc4649e4919c499801f18d1211157087d65a88f58b329b0e00", + "blockchain.transaction.get:308bc3b8c3987ce86f2af1c32a6e8727f18cb151604b26ab0ce6b21ae5b500b1": "010000000001011fad54b786a3d45ee1365b6a6e593477f8cfe44abc3eeb8296ee8b2f082f06660000000017160014458a593eeb60320ededa34d98bb52cb4a8aaf3f9feffffff02881300000000000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac00000000000000000a6a085468616e6b796f7502473044022001e1661aba38c580640f9a5c6f2b99a60c39098f6d8a436ac80a1bf3ee7daf0d02207c4d2b534ba5c006555bfd6f61ad5f406baddee0dc172c8032171680951d2f9a01210235ad7f08fcc677848136db845a948988c671b2ce8757451203fac7f59680fa6e00000000", + "blockchain.transaction.get:0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0104ffffffff0100f2052a0100000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac00000000", + "blockchain.transaction.get:c2e9cced187a6222901f0dae0942ae95c3c1f92e2cae4b68780c09958d9ad43d": "0100000003591c64f47e60a3231d72be0c4f5ceb27d5c8aa0769afb7449bf322ac6912c6c9000000006a47304402204faa7a296cbf807e2d84d447a5f69a2665fc254913c16fb00bab725fbdda85ca02201b63ed9bb3fa5640421ce29b87a43b0b8316af6f7030f7a38d8e994e170f495b0121025cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bcffffffff591c64f47e60a3231d72be0c4f5ceb27d5c8aa0769afb7449bf322ac6912c6c9020000008b483045022100b2fca7c737b0818ae7d5f67b4657df294ac8b08fa85eef7e06e5f207392bc4000220217f7b1f20ebd376e2e9ec059733d19c70e9437d393977b1bf74581e094dda2e014104218ad6cdc632e7ae7d04472374311cebbbbf0ab540d2d08c3400bb844c654231b385c9781def7eabb9900860621d6f1ba5ac3858265459ef5c217feb9568c37cffffffff591c64f47e60a3231d72be0c4f5ceb27d5c8aa0769afb7449bf322ac6912c6c9070000008a473044022060dc08d4393998c315bb69780a2b609d15ceeaaf93e96d5ad7f9aa8be54885d00220151e4ef1cfe581ce38cfd30a78287930126cbbe8148a1602ecc0ec900228f39c0141043946a3002f7e56bad8f134f9b34282906a1ff5c54d9a60d47ef691c453bf5e1706d314b474399f6dab5088cf0c9ac28543c6f13b66aef3e1ff80d5e14111f7beffffffff01085200000000000017a91487cc007a9601b34d3e417aa458c36ed2adc4e1548700000000", + "blockchain.transaction.get:c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59": "02000000000101f13445914e28d5a38011526f14f915ea5b649f50d124af76bfa9346e1eab1c0c0000000000fdffffff0a10270000000000001976a9145dedfbf9ea599dd4e3ca6a80b333c472fd0b3f6988ac10270000000000001976a91476020d10a3ce41f94f4d584ed7f114ea6d01f2d388ac10270000000000001976a9149022dd1ee155e97d6d875375b48af4c06219a88b88ac10270000000000001976a9149b0b6a03b5a0ec32a84e861457c3287ec31b13ab88ac10270000000000001976a914c99432d583a087f51085b5a2c293cda3216884d988ac10270000000000001976a914e257825e04e5bacd06761b845c755d0024e9059d88ac10270000000000001976a914f92a30fae49bf6a15b72a267eb5ce98de6876df488ac10270000000000001976a914fd8d22e02b3a41bc38f69516c43f7ebd6268e16b88acb77a0000000000001976a91417e0c4ee5902aeeebb14985c988f02c7798a5c4588acf5b90500000000001976a9149c7eeeebc332f2abbee8f1cf48635d78d371c34c88ac02483045022100fd597565c2a45a9c53ae5b48f8256d485c88b573b1a54d8705a3f20722435171022076c5eaf0db8cbcdad2fed0ecf549fa046b0ad8beab71af56c364f9a7695ae717012103db4bef4b4a08253f15522c38766ec020fc133fb350bfe2505be1c8f8f985a398e0a50900", + "blockchain.transaction.get:fa1b9a669a7c16f1d0b15cfb57e9830ccee36db984bd074de450e47088c8d078": "010000000115cda65f1e46982fc082b15c8dbb60985d12a7e60b0c742263608cc9349f3808020000006b483045022100acd075b14f4fe12316bb75b07371d6d8ad0df95e477e7e31eb28f733bd6267700220442c39832f21d712e8af14027db405f0b29272f1ee0e7aed26eb64806ea558770121025cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bcffffffff01d06c0400000000001976a9140659a10acba837f71af2129690947e417b9cdca188ac00000000", + "blockchain.transaction.get:08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15": "01000000016216ba4b8e981a0574d0f0457235010e73a0d4e1af3b0182c9272c210ab9119b040000006b483045022100f5c26eee36e47b5ac824254398e1b82e2baaf53c645366bdd0b359e2cd01c010022067d6e273e289285360d49961152d599581446bbda5286e912073ac5f27ef266e0121024b0faa9624763002e963816b2f6774df0dedd770896a9511cb5c9d90f674ecdafffffffffd0001a0860100000000001976a914751e76e8199196d454941c45d1b3a323f1433bd688ac400d0300000000001976a9147dd65592d0ab2fe0d0257d571abf032cd9db93dc88ace0930400000000001976a9145dedfbf9ea599dd4e3ca6a80b333c472fd0b3f6988ac801a0600000000001976a9149652d86bedf43ad264362e6e6eba6eb76450812788ac20a10700000000001976a9148f9dff39a81ee4abcbad2ad8bafff090415a2be888acc0270900000000001976a914f93ec34e9e34a8f8ff7d600cdad83047b1bcb45c88ac60ae0a00000000001976a914e2192e8a7dd8dd1c88321959b477968b941aa97388ac00350c00000000001976a914dce76b2613052ea012204404a97b3c25eac3171588aca0bb0d00000000001976a9147d0f6c64afb419bbd7e971e943d7404b0e0daab488ac40420f00000000001976a914d7729816650e581d7462d52ad6f732da0e2ec93b88ace0c81000000000001976a914f8c698da3164ef8fa4258692d118cc9a902c5acc88ac804f1200000000001976a91485a1f9ba4da24c24e582d9b891dacbd1b043f97188ac20d61300000000001976a914f932d0188616c964416b91fb9cf76ba9790a921e88acc05c1500000000001976a91497f9281a1383879d72ac52a6a3e9e8b9a4a4f65588ac60e31600000000001976a914fe7c45126731f7384640b0b0045fd40bac72e2a288ac006a1800000000001976a9147025b4efb3ff42eb4d6d71fab6b53b4f4967e3dd88aca0f01900000000001976a914b67cb6edeabc0c8b927c9ea327628e7aa63e2d5288ac40771b00000000001976a914ad1e852b08eba53df306ec9daa8c643426953f9488ace0fd1c00000000001976a914ebfbe6819fcdebab061732ce91df7d586a037dee88ac80841e00000000001976a914b907c3a2a3b27789dfb509b730dd47703c27286888ac200b2000000000001976a91429a78213caa9eea824acf08022ab9dfc83414f5688acc0912100000000001976a9147ff45303774ef7a52fffd8011981034b258cb86b88ac60182300000000001976a914d0a79df189fe1ad5c306cc70497b358415da579e88ac009f2400000000001976a9140959e80121f36aea13b3bad361c15dac26189e2f88aca0252600000000001976a9142f396b29b27324300d0c59b17c3abc1835bd3dbb88ac40ac2700000000001976a914bfebb73562d4541b32a02ba664d140b5a574792f88ace0322900000000001976a9140c7aaf6caa7e5424b63d317f0f8f1f9fa40d556088ac80b92a00000000001976a9141306b9e4ff56513a476841bac7ba48d69516b1da88ac20402c00000000001976a9145a416cc9148f4a377b672c8ae5d3287adaafadec88acc0c62d00000000001976a914d39c4704664e1deb76c9331e637564c257d68a0888ac604d2f00000000001976a914d805f6f251f7479ebd853b3d0f4b9b2656d92f1d88ac00d43000000000001976a9149e42601eeaedc244e15f17375adb0e2cd08efdc988aca05a3200000000001976a9144e15e5189752d1eaf444dfd6bff399feb044397788ac40e13300000000001976a914f6d67d7983bf70450f295c9cb828daab265f1bfa88ace0673500000000001976a914f6d8ce225ffbdecec170f8298c3fc28ae686df2588ac80ee3600000000001976a91474b1e012be1521e5d8d75e745a26ced845ea3d3788ac20753800000000001976a91428c30fb9118ed1da72e7c4f89c0164756e8a021d88acc0fb3900000000001976a914b190e2d40cfdeee2cee072954a2be89e7ba3936488ac60823b00000000001976a9140b304f2a79a027270276533fe1ed4eff3091087688ac00093d00000000001976a91495a156cd21b4a69de969eb6716864f4c8b82a82a88aca08f3e00000000001976a914d1562eb37357f9e6fc41cb2359f4d3eda403232988ac40164000000000001976a9148efb85f9c5b5db2d55973a04128dc7510075ae2388ace09c4100000000001976a914f92044c7924e5525c61207972c253c9fc9f086f788ac80234300000000001976a91480df54e1f612f2fc5bdc05c9d21a83aa8d20791e88ac20aa4400000000001976a914f0225bfc68a6e17e87cd8b5e60ae3be18f12075388acc0304600000000001976a9149a012260d01c5113df66c8a8438c9f7a1e3d5dac88ac60b74700000000001976a914f828005d41b0f4fed4c8dca3b06011072cfb07d488ac003e4900000000001976a9148661cb56d9df0a61f01328b55af7e56a3fe7a2b288aca0c44a00000000001976a9140d2f533966c6578e1111978ca698f8add7fffdf388ac404b4c00000000001976a914de081b76f840e462fa2cdf360173dfaf4a976a4788ace0d14d00000000001976a914ef6419cffd7fad7027994354eb8efae223c2dbe788ac80584f00000000001976a91436af659edbe94453f6344e920d143f1778653ae788ac20df5000000000001976a9142f4870ef54fa4b048c1365d42594cc7d3d26955188acc0655200000000001976a914cb66763cf7fde659869ae7f06884d9a0f879a09288ac60ec5300000000001976a914db53d9bbd1f3a83b094eeca7dd970bd85b492fa288ac00735500000000001976a91448214c5969ae9f43f75070cea1e2cb41d5bdcccd88aca0f95600000000001976a914328660ef43f66abe2653fa178452a5dfc594c2a188ac40805800000000001976a9148c2a6071f89c90c4dab5ab295d7729d1b54ea60f88ace0065a00000000001976a914b14ed3146f5b2c9bde1703deae9ef33af811021088ac808d5b00000000001976a914cdf8e5c7503a9d22642e3ecfc87817672787b9c588ac20145d00000000001976a91468133e19b2dfb9034edf9830a200cfdf38c90cbd88acc09a5e00000000001976a914e26646db84b0602f32b34b5a62ca3cae1f91b77988ac60216000000000001976a914ef58afb697b094423ce90721fbb19a359ef7c50e88ac00a86100000000001976a9143ee4133d991f52fdf6a25c9834e0745ac74248a488aca02e6300000000001976a91452e763a7ddc1aa4fa811578c491c1bc7fd57013788ac40b56400000000001976a91420d45a6a762535700ce9e0b216e31994335db8a588ace03b6600000000001976a914739437bb3dd6d1983e66629c5f08c70e5276937188ac80c26700000000001976a914e0b8a2baee1b77fc703455f39d51477451fc8cfc88ac20496900000000001976a91461eb8a50c86b0584bb727dd65bed8d2400d6d5aa88acc0cf6a00000000001976a9145db8cda53a6a002db10365967d7f85d19e171b1088ac60566c00000000001976a914f6f5431d25bbf7b12e8add9af5e3475c44a0a5b888ac00dd6d00000000001976a914bf7413e8df4e7a34ce9dc13e2f2648783ec54adb88aca0636f00000000001976a914105b7f253f0ebd7843adaebbd805c944bfb863e488ac40ea7000000000001976a9149f1adb20baeacc38b3f49f3df6906a0e48f2df3d88ace0707200000000001976a914badf8b0d34289e679ec65c6c61d3a974353be5cf88ac80f77300000000001976a91486f9fea5cdecf033161dd2f8f8560768ae0a6d1488ac207e7500000000001976a914783c138ac81f6a52398564bb17455576e8525b2988acc0047700000000001976a91435003c3ef8759c92092f8488fca59a042859018c88ac608b7800000000001976a91467671d5490c272e3ab7ddd34030d587738df33da88ac00127a00000000001976a9146fe5a36eef0684af0b91f3b6cfc972d68c4f6fab88aca0987b00000000001976a914351e605fac813965951ba433b7c2956bf8ad95ce88ac401f7d00000000001976a91420d28d4e87543947c7e4913bcdceaa16e2f8f06188ace0a57e00000000001976a91424cef184714bbd030833904f5265c9c3e12a95a288ac802c8000000000001976a9147c99ce73e19f9fbfcce4825ae88261e2b0b0b04088ac20b38100000000001976a914cd03c1e6268ce9b89e3c3eeab8d0f1b6e8cac28188acc0398300000000001976a914c60111ed3d63b49665747b0e31eb382da519353588ac60c08400000000001976a914fbc708d671c03e26661b9c08f77598a529858b5e88ac00478600000000001976a91438a968fdfb457654c51bcfc4f9174d6ee487bb4188aca0cd8700000000001976a9145c3862203d1e44ab3af441503e22db97b1c5097e88ac40548900000000001976a914d06b6e206691295ec345782d7ea0686969d8674b88ace0da8a00000000001976a9149978f61b92d16c5f1a463a0995df70da1f7a7d2a88ac80618c00000000001976a9146534b31208fe6e100d29f9c9c75aac8bf06fbb3888ac20e88d00000000001976a914463013cd41279f2fd0c31d0a16db3972bfffac8d88acc06e8f00000000001976a914c6927a00970d0165327d0a6db7950f05720c295c88ac60f59000000000001976a9145ed822125365274262191d2b77e88d436dd56d8888ac007c9200000000001976a9142da63cbd251d23c7b633cb287c09e6cf888b3fe488aca0029400000000001976a914578d94dc6f40fff35f91f6fba9b71c46b361dff288ac40899500000000001976a9147eefddd979a1d6bb6f29757a1f463579770ba56688ace00f9700000000001976a914c01bf430a97cbcdaedddba87ef4ea21c456cebdb88ac80969800000000001976a914c7a7b23f6bd98b8aaf527beb724dda9460b1bc6e88ac201d9a00000000001976a9147c1a77205c03b9909663b2034faa0b544e6bc96b88acc0a39b00000000001976a914f72b812932f6d7102233971d65cec0a22b89e13688ac602a9d00000000001976a914695fd6dcf33f47166b25de968b2932b351b0afc488ac00b19e00000000001976a91493022af9a38f3ebb0c3f15dd1c83f8fadaf64e7488aca037a000000000001976a9147c957db6fdd0733bb83bc6d6d747711263ba50b088ac40bea100000000001976a914505aaa63a5e209dfb90cee683a8e227a8c278e4788ace044a300000000001976a9142e644e46b042ffa86da35c54d7275f1abe6d491188ac80cba400000000001976a914b166c44f12c7fc565f37ff6288ee64e0f0ec9a0b88ac2052a600000000001976a914aeb0a0197442d4ade8ef41442d557b0e22b85ac088acc0d8a700000000001976a9140e5f3c406397442996825fd395543514fd06f20788ac605fa900000000001976a9144cfc43fe12a330c8164251e38c0c0c3c84cf86f688ac00e6aa00000000001976a9144e81efec43c5195aeca0e3877664330418b8e48e88aca06cac00000000001976a914ed673389e4b12925316f9166d56d701829e53cf888ac40f3ad00000000001976a91442773005f9594cd16b10985d428418acb7f352ec88ace079af00000000001976a914ea0f2b7576bd098921fce9bfebe37f6383e639a488ac8000b100000000001976a914e3f381c34a20da049779b44cae0417c7fb2898d088ac2087b200000000001976a914c97f9591e28687be1c4d972e25be7c372a3221b488acc00db400000000001976a914f4a4e1c11a5bbbd2fc139d221825407c66e0b8b488ac6094b500000000001976a914ae6804b35c82f47f8b0a42d8c5e514fe5ef0a88388ac001bb700000000001976a9144b46e10a541aeec6be3fac709c256fb7da69308e88aca0a1b800000000001976a914a6e4818537e42f7b3f021daa810367dad4dda16f88ac4028ba00000000001976a914e263b62ea294b9650615a13b926e75944c82399088ace0aebb00000000001976a9147fa4515066ba6905f894b2078f9af7b1379169cf88ac8035bd00000000001976a91475f74467ce7214f1767406d5ed12012aa523c48e88ac20bcbe00000000001976a914f7079256aa027dc437cbb539f955472416725fc888acc042c000000000001976a914683ea8a1ef06eada90556017d44323b5c04e00f188ac60c9c100000000001976a914a58708aa98ad35c889bb36d8049bf9e9cacfd02a88ac0050c300000000001976a914e170ef514689d7230da362a0c121a0772355051288aca0d6c400000000001976a914ba4c2748360a6b66263e11d1dc8658463ca5ff1888ac405dc600000000001976a914a24922852051a9002ebf4c864a55acb75bb4cf7588ace0e3c700000000001976a91441b4b36a6c036568972380177eca2916cacd71de88ac806ac900000000001976a914cecd3ca4319651bd3afd1e23ab66e111ed38d16d88ac20f1ca00000000001976a914014e15e4ea6da460cc7835e262676baa37988e4f88acc077cc00000000001976a91417a5ebfaf62e73f149e33ba674836801f13a80b988ac60fecd00000000001976a9143b6f58a75a54bfd85d1bc6c51180fdc73299232688ac0085cf00000000001976a91405257be4b57ee43fc09762d5d3a9ad4a6e1a036488aca00bd100000000001976a9143482f8986e13c018692053a784481c63a3554c9c88ac4092d200000000001976a914692a8e583866fc9056f5c61a45969fb9d868a08c88ace018d400000000001976a914a45dae9cd5d3fde21e5aa9a95367d107267b3b8a88ac809fd500000000001976a914ffbb35a7bb9bbe16c1aa2534f7ff11d59c8e3d1a88ac2026d700000000001976a9147af50f73fd580f1713af3a6f9c5de49643ec6fc688acc0acd800000000001976a9142fcea55e6d027a2ba7c7ebe95eedf47766730fe288ac6033da00000000001976a91419ed3e03d19ddcedd5fa86543be820b3a795165088ac00badb00000000001976a914ed87120066e244ff5331d5f8625873d7a3acc39c88aca040dd00000000001976a9145abf369388deb8072741b4eb43ef10fa9388a72988ac40c7de00000000001976a914dca7ebfb78ce21884300f133d89244bc4b1b756f88ace04de000000000001976a9145318b9d7fcc93873f768725eb68ba2c924bb07ee88ac80d4e100000000001976a914a3e3612e586fd206efb8eee6ccd58318e182829a88ac205be300000000001976a9147e827e3b90da24c2a15f7b67e3bbece39955a5d088acc0e1e400000000001976a914e08c4d3bc9cf2b3e2cb88de2bfaa4fe8c7aa3f2488ac6068e600000000001976a9141a4fb632f0de0c53a0a31d57f840a19e56c645ee88ac00efe700000000001976a914da56cd815fa2f0d6a4ce6d25ed7b1a01d9f9bc6b88aca075e900000000001976a9144ccf94a1b0efd63cddeee0ef5eee5ebe720cfcbf88ac40fcea00000000001976a914edd2e206825fa8949d1304cd82c08d64b222f2eb88ace082ec00000000001976a9146b8b7830f73c5bf9e8beb9f161ad82b3bde992e488ac8009ee00000000001976a9149ea3f29aaedf7da10b1488934c50a39e271b0b6488ac2090ef00000000001976a914242d790e5a168043c76f0539fd894b73ee67b3b388acc016f100000000001976a914628dacebb0faa7f81670e174ca4c8a95a7e3702988ac609df200000000001976a9142ac1295b4e54b3f15bb0a99f84018d208249564588ac0024f400000000001976a914e84818e1bf7f699aa6e28ef9edfb58209909929288aca0aaf500000000001976a914c2c43e2b16f53c713bc00307140eaae18841354488ac4031f700000000001976a914442bd85a46d4acd7b082c1d731fb13c8474ffa6f88ace0b7f800000000001976a914b093122f7fb36d11c9f2c80cff2971fba7c9c1ff88ac803efa00000000001976a914d86f54f73e343d76dd7401639e427d828ba31eab88ac20c5fb00000000001976a9149acf9573eb7b4376beca979cfa769f0677cfd94988acc04bfd00000000001976a9140d07a05f7687824fb4dd4a160ddbdc380865500488ac60d2fe00000000001976a9146ccfd1cdb43788738536e11e247b0ce31c093f0f88ac00590001000000001976a914fa29a9264b9c18fa5925e38d201934ed89e64dd688aca0df0101000000001976a914a5169d8bc79e8cc94a36246de6bde7596cc9f4bb88ac40660301000000001976a914941ccb7383109b47b841044c9f865785676b091888ace0ec0401000000001976a9144cc856b74f1be643a3a0ac65f5399e018aed7ae588ac80730601000000001976a9142f86ddd3fac7bf830020f97c46b33aabc891e13288ac20fa0701000000001976a914e3ab5452f79c3ba677d230621f865667114ace0388acc0800901000000001976a91479b9c06f479cde2a04c871b7534f1d4706c6411a88ac60070b01000000001976a9148e235bafd009b1bf67a8475cf1687b09b23c525f88ac008e0c01000000001976a914ed28af7ebd057c69f2f9f5852fcff8da51b3257188aca0140e01000000001976a9143765ebcb90c64c4167674c8c2f35ad3d12245fb588ac409b0f01000000001976a9140cc25a433319a84636805fd00f8862aeb3fc8cdd88ace0211101000000001976a91412417789f9448e8d151699534c43c5b419e4ab7a88ac80a81201000000001976a91496d61f034c1d3db504e6c84e1d9b5e47b3bbb6ef88ac202f1401000000001976a914df9faeaaf5c84fb9aca49f923d7ae0286754f13f88acc0b51501000000001976a914aac6bf269ddce4d550f9c58eedc720b85ba1dc4988ac603c1701000000001976a9140d6e9b09e523e71ad7b9873dadee0d0bc788033c88ac00c31801000000001976a914242000d101c4c5b143c63f12ae08caa81d837c2888aca0491a01000000001976a914b8a393fd03783ac177243e8c4313a4221b049b8a88ac40d01b01000000001976a914710184e0443717cc62b086824b793f4e011b445688ace0561d01000000001976a9145e8a3a32df85af78e2ce3493985ff4ae2da0062388ac80dd1e01000000001976a9148e5160f5d3f432f7421f189d1888b85ed833718088ac20642001000000001976a914f92463f967ffc9cea3e1ef846ff106b591e38e6888acc0ea2101000000001976a914b4c41a566543c9133f45361d6df089531911353888ac60712301000000001976a91401b038f889ed602266f2c6647f657713e52d8cac88ac00f82401000000001976a914aa1bda87c542102bc484b1fc54f93764f0ccd70188aca07e2601000000001976a914e982b609d7049607fb087a936464fe8915087aee88ac40052801000000001976a91408cb7331dccb902b5db0a30dcc1ba8adbd6fe4d088ace08b2901000000001976a9143fecaa5f1295e3374ef2b04a365523cfcb56305a88ac80122b01000000001976a91465c2cfc6b38650c00242435f1b041a5fb1b733ee88ac20992c01000000001976a9141262b1eb58a0e55dc874e8c2d097e6119435838888acc01f2e01000000001976a91412f5a4496acc2393b6b56408ae7b3e07b6dc9b9388ac60a62f01000000001976a91471ce182dba6c2838d69248017141117721a7200a88ac002d3101000000001976a9148621202a5e010769fb0fd1a08027f41e173c3bb588aca0b33201000000001976a91485567151f330b69bac3eba86bb3aedd8813ec2b788ac403a3401000000001976a9145aee20366a5523246e1c43dc48462878b0d4806e88ace0c03501000000001976a91489060378aec62c83cd6e20d92865cf9ca80549b188ac80473701000000001976a914230e09c32f5aa23763f8e7c770cee5b5cf4359c188ac20ce3801000000001976a91486b816944ed6fce46ca955b80897996b016f8be088acc0543a01000000001976a914054907e50b2feceb0b75f850fd764c197844fea088ac60db3b01000000001976a9143d217c047cabb55395cd9618cee124683ea5c99888ac00623d01000000001976a91430d98d22a09bf062c9b3706af3c059a72bcb787988aca0e83e01000000001976a914c2037dcac7d46e66c4e06c289c3ccd317043833288ac406f4001000000001976a91426b9a572ce3f674c9c8d3a0f15386d6848783c2588ace0f54101000000001976a914627a0fd9f1c2034f9d643a355621842288cf455188ac807c4301000000001976a914c053d1c7b2e7e27c624dcb8087549876af73aa0388ac20034501000000001976a9147cb4648719aedaf874354cadf986e89458eb58cc88acc0894601000000001976a9143fa96459d3e03e94794724b8605c9ae47a10686288ac60104801000000001976a9143649ca67657d482484f49f8f5c8cdb5222c8700f88ac00974901000000001976a91458f29e811ffece9aaf65c7a360382ebcea3a2f1888aca01d4b01000000001976a914ddd18e224de138253a990a4cc8d8e7aaa399891488ac40a44c01000000001976a914700c655d586d1a06b0185b12007a1b195d60271c88ace02a4e01000000001976a9149668f0ad5f1eaa5c8e68baf1eaa07c1ea16a88de88ac80b14f01000000001976a914096751c3cb56d4d163186085c81fc8dcf5bfa4ec88ac20385101000000001976a914f0e280f15876be99ab63c8aaa4f934f777ed369b88acc0be5201000000001976a914438993e343b3317a4833a709894145f2374a95f988ac60455401000000001976a914eb8d65ae18eba8f6a1fcffe0b37e87fa34b09a7088ac00cc5501000000001976a9149ab3633c60100b0dd631bf1c6755abaea7bc044588aca0525701000000001976a9143ce1fc3304d09e7984c5766fd1134c1e8979821a88ac40d95801000000001976a914b944142155bef6fa7280d5f7f8eae49511349ebf88ace05f5a01000000001976a91432259030b93d8f20268aaa2c5222f9366faa2fc388ac80e65b01000000001976a91457baa9ea3f683b444a06702492443a9057ce2c9688ac206d5d01000000001976a91468ffcb39707615a254428f084c859376fa7144be88acc0f35e01000000001976a9141952876e85b0e6fe7c2557c8345975fd44700f0688ac607a6001000000001976a914530f6487090bda616a7846f68160ddd886fbdf2488ac00016201000000001976a914dde3637371e3638ef51b3753c028d84902153ea888aca0876301000000001976a914eefccc98b21f6748888b7b682d9f3ead5579689088ac400e6501000000001976a91402c031f6bc39053653a093d95511eb1197c5029c88ace0946601000000001976a914fa3a7f736604e038a0a7fe5945a114467baba15988ac801b6801000000001976a914fc152109a2102e72ae6aca2192065e909170d2c388ac20a26901000000001976a914586efe7cb41fc58c651225492e5c706a3af15d3588acc0286b01000000001976a9148e11830db460be44112d0d0150016fed3117224688ac60af6c01000000001976a914fff0706a3d7d599d40406165ad0daaa0fe9dfc9f88ac00366e01000000001976a9147a0a6e15efc2350d3dd45b88d855062a810ca61988aca0bc6f01000000001976a914d1a7e9f072b3ebc159327bec2f9ed46362a85bc988ac40437101000000001976a9149283ba38d0bb048fb69d6aafc9a32b666f1c097788ace0c97201000000001976a91459fe4938c08cfa18b39d68a376ed2c065a98a55a88ac80507401000000001976a914c9481fd7d3d294113c5e53990d9451e32844c0ec88ac20d77501000000001976a914ba7199b9bcac99a8ee39e6f103ab3cb049e7dd8688acc05d7701000000001976a914d9d7fb9cf1d10075b0515591e2570c7efabc80c188ac60e47801000000001976a914232eb8ef367fc06217fbaa43848df87567b2696d88ac006b7a01000000001976a91455a4cc2020c1769dce6c05e560bcff5db9f27f3a88aca0f17b01000000001976a91477ac8098d4726a592aed489e3880c23cfaf719ae88ac40787d01000000001976a91404b623b48cc42741d0c9ec3b1fa297664bcec49b88ace0fe7e01000000001976a914dbeecf6406c1569a483a88e35ed349a521a414ca88ac80858001000000001976a9147efd9baf1d6e21bd5f920e7e9e468b5a45ec92c788ac200c8201000000001976a914c3a2d618736baf0d5df7d81d5b8235cf8a26644888acc0928301000000001976a914e9e6a1ad0ddaf3c372e2e1eae83c8cf9f9163b3a88ac60198501000000001976a914460528d920ce045d9f6fc319182960707b24806488ac00a08601000000001976a9149d77f8bcfd56b6a095703aae85bbe003a9cff5eb88ac00000000", + "blockchain.transaction.get:092704c4efb9b499c8aceeba1dcb02e2d6abacc180dc9ebe587408a0dafa264e": "02000000000101b6c1cef24b6fb1a2c5d27ba4c819721fc986fba45851069083e6b060e127a3df9101000000fdfffffffd920122020000000000001976a914636f47e2c621334105e0439fa32fde9da232f3d988ac22020000000000001976a9141a36a6499a68baede161abde7a9642fa5fc98f1788ac22020000000000001976a914165ca6cc2fa7aa4bbc9ed9dc8d77ec152911b86988ac22020000000000001976a9141906411fe3400b6ccc4801d95a0206394c3002a188ac22020000000000001976a9142a5d6f86c3d5050a9875080c7151036cf61e24b988ac22020000000000001976a914348e804b56429002ae37a0bda737c05f9dad271788ac22020000000000001976a9142ac80f89a227d84acd87d00257eb530576a0a9ba88ac22020000000000001976a9142d75f1ee0439f01aa17a2576b7fb838ecc53521988ac22020000000000001976a9141d66654e06f9a26d372d304d03befa3ecbec9e1888ac22020000000000001976a9142c22081f368d26baaa91e33bed5b48582438948b88ac22020000000000001976a9141559d05668e6587b25390af37e39e0a45c7df42f88ac22020000000000001976a914235971558f790bbb8baeb4441c1d836eb961188d88ac22020000000000001976a914221cfe010a44eaf1af14c019d39f7587021af92488ac22020000000000001976a9141b05e8e969e144cde626dc8bb7213bcf0ab56e3e88ac22020000000000001976a9141d27a6130cde6495319dcec15c5aaaf43f8c8c9e88ac22020000000000001976a9142d71a745bec1c4b29b2600e21dee299a03df92d088ac22020000000000001976a9142ea245fd75a8dac67e821e55b5ce04bfd3262e6188ac22020000000000001976a9147450d5cd6e1def5af529c2b4e2c28157086a3f9488ac22020000000000001976a91490f61c65a04eadd97931f18106559e5b1914885a88ac22020000000000001976a914866dda7c90a6a34791aed55eec505c04a927690788ac22020000000000001976a91441f57e245a44e64ec38f6eacf0778b8261113d9988ac22020000000000001976a91454a02d9e95109360508c0fe824ebfd1c182384fa88ac22020000000000001976a9146eb8658bbbc264972a47d71df59b23485b7581a488ac22020000000000001976a9143d6d464f62299e242537ebbc67d6c1cbc0bda2b288ac22020000000000001976a914689fa186f3b3326e977e4117921e9401f37ca56388ac22020000000000001976a914a18be654ad730fc6ce2f4009ea7f426be7e346dd88ac22020000000000001976a9145576db8ec589111f4e44bc9dc89666b1dba4230b88ac22020000000000001976a9141b2a62e570d8f1a185a68a666bf7a2583924bb1888ac22020000000000001976a914f8fa6395e704ec3e2b7ca3637e9ab14f1e2c69dc88ac22020000000000001976a91449c0e836a0bb1e176097e6408efe6cb4c11a98f588ac22020000000000001976a914a3c78d275195f05766a9b497d7838b27bacac77588ac22020000000000001976a9148a10425680fa4605ed90adc8c1346084e83494ce88ac22020000000000001976a9141c0cfc223867f20e306f8e2845856152d91ff40b88ac22020000000000001976a9144aae6baec163d710927ebd6f9602f539ba4be84c88ac22020000000000001976a9147b581609d8f9b74c34f7648c3b79fd8a6848022d88ac22020000000000001976a9140fc9efe892743dc6d9119441a886af611f405a2b88ac22020000000000001976a914c1c6cb1b7d3c5a3f1dbd79ebd80d29bc6145e2fc88ac22020000000000001976a914f53df66f5e17b079c23797271ad75d35c2023c1088ac22020000000000001976a9143d79b9ac9050c4ae33238b623db8264b2b662f8f88ac22020000000000001976a9144c4b07a2e6c4e6b9a2d38b4ef2558f7d1382079a88ac22020000000000001976a9147e3efc0e1a62511751050706d22e48757d3db74588ac22020000000000001976a914363faf198944a43f02c1f85b9f2724be527eee6688ac22020000000000001976a9146cf1b35a7ae2b3ef4cc792cde0de917230ecc39688ac22020000000000001976a914b7d2d71d27c711f5f24dfd595a7abee6f6f90b8b88ac22020000000000001976a9148288ba4d7ef3a8e3671a8f57b9254673a20296aa88ac22020000000000001976a914de5d1feaadc9ff4bd7eb8bc2d8ca4ed693848a5e88ac22020000000000001976a9142408eab57193709b12b8a732a2ede4505fab2d9988ac22020000000000001976a9142a4f2ea87679cc4cf56763647dc35a2076f1576188ac22020000000000001976a914ed3319801afe50a7faf126ed177bff9667b50c2188ac22020000000000001976a9142cd415612027d5280ee4fbb28b94af539787248788ac22020000000000001976a9147832a94df69a5c8964ac36f8baa73743b6a8040888ac22020000000000001976a914a1587c8e23796c3ecb9f97697b9faa7d685b17a088ac22020000000000001976a914c9c8268bb8660814c8cd137a83440a992f746f5188ac22020000000000001976a91436896b2798eeec0fc03c95b52a357448ed0dfd4688ac22020000000000001976a914f73e287a597be9f69bcfc8159ada66c1aafe4c7588ac22020000000000001976a914f2339cd09bd4cb7a4610a9678837f7b1e49bcaa788ac22020000000000001976a9148f46f308b44651dc1f84c2898a707f693453e7e788ac22020000000000001976a9147eaefade237ecf20cb235ae35ddb95b1e5e803db88ac22020000000000001976a9140c5ae026fac9c78b49eec9ae67a4d6c9c7cb7c5088ac22020000000000001976a914066ba995c51581171e34e2276275c377749d731488ac22020000000000001976a914a0128c202d3371cbb0c577b7b054d75ae90fa52f88ac22020000000000001976a914990a614bdbfd26b3e535eefde71aab01321e52fc88ac22020000000000001976a91445ed040fcda2371e0de4269d36eadc4a47bce3a988ac22020000000000001976a91467b75e5187c1e33ca994efca011f56db7f84efaa88ac22020000000000001976a9143aa550b52979309ad049c275ec531b687cdec77688ac22020000000000001976a914fadec86597a5615ae432ec213aea91c0e842338388ac22020000000000001976a914e47eb666d628d906e4acdd1d4afc3ebfe9d5b7f388ac22020000000000001976a91470c44247959f48714d7a27d9c1922b9e8c96749b88ac22020000000000001976a91433f197b4ac7fc165338e577825cb28f729bd4ea588ac22020000000000001976a9143591c75e0418459ae81a5e7ee1dcfe4f696097ee88ac22020000000000001976a9140dad76b342bba5e6cde15dd153bc5225d64e870e88ac22020000000000001976a914c940fb39d44ff8c657a05e7713d74b76fd651a3788ac22020000000000001976a91462dfb4d8493e6b7a90b39b7ffe6c0974e4bb423888ac22020000000000001976a91400358a91768ed951784617dcf2208cd37494c2b288ac22020000000000001976a914bf2b2bbd623927b3f194c799b9b9830cdd6f1a0688ac22020000000000001976a914fb3e12e3161acc9b676deb26848d414c49eb380788ac22020000000000001976a914bf86d03f850ab945aa44628ac5a0473249b9cba688ac22020000000000001976a914990d13826fbbc392a891d9831ab90aa5c2f0cf2188ac22020000000000001976a9141d4812479ed47ecf53504b8ef30a7d38e1a7c8b888ac22020000000000001976a914482bb0b8f14aa24e50f18d2527046e413bb315df88ac22020000000000001976a9140535e3f9d1348e6b4600f4502cf0f2dcf18287f188ac22020000000000001976a914a7e6859bf8a6a97b383af0aaae9d3a5c9032ef0088ac22020000000000001976a91449b17951aeb02daad1aca76cbe0ff480ebbd1dfb88ac22020000000000001976a9141c7573bf28da96b9ad2dcb9bc6ec58db27e73d6d88ac22020000000000001976a9142bdf6a08fa9ff4682d357967c82fe84d30afe77988ac22020000000000001976a9149bd603549284f3a413986a6b5db08a90ef39e4f388ac22020000000000001976a9140088404a6726cef2350758cb98b0690d680846ca88ac22020000000000001976a914ad56997234a6de507f84696117dc811831984f6f88ac22020000000000001976a914c798ec14594511a76b87a1e936984857aded6f2288ac22020000000000001976a9140d763a4b65cf3290dc6e32f14f2d85e83e2ebe7b88ac22020000000000001976a9147215adc9892fef8740d8cd9b56a816c0c96ea05b88ac22020000000000001976a914749d8995eb72ccc50e77e7c1442184c5de70aed888ac22020000000000001976a9148c02fd5d98da512bb287ed793528437a35e4823488ac22020000000000001976a914fa13f3431203ced552702af62bd199b7c16c533c88ac22020000000000001976a9141702f435f0985e2425f41ea14445513ba8d718b388ac22020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac22020000000000001976a914251d09c140e5ffd8a2f867503c090c85ffdc063c88ac22020000000000001976a914acbf9c3dea6f2ad29fad5dbc4da6cbc3d7d3643288ac22020000000000001976a914e2b536122178b79b67d3fc1e22f114033b4a5a7b88ac22020000000000001976a914856b377d49c37314bcc18839d20f23d01d9f32ba88ac22020000000000001976a914b87c29a45dcc2885e8877f5edb6ee434af59ccc688ac22020000000000001976a9144726b6d8b8d4f9dff1ce92e7c04b5aa6e8eca2a088ac22020000000000001976a9140a965e4d56e56dd9a152faf342f5de5d428847f088ac22020000000000001976a914dfdd7539f2ace8a602d072ad986bf7bd7baa1d2f88ac22020000000000001976a9141f79370bb10554c3a0b0de5ce669117a4f2dc49788ac22020000000000001976a914c6e78f3f8ae38454849da2f9e3fa5b38a18eeb6688ac22020000000000001976a914164279ac78d463d7b1e2f35870f3ec79acead72a88ac22020000000000001976a914e108aa77839a42288e5eebd900aba0f13159ba2188ac22020000000000001976a914c036b137489f4018a86ccefb5958c5afb341035188ac22020000000000001976a914b4711f7cea392cb19120f50ddb46b0b51e0a4e2488ac22020000000000001976a914c201f40d2b14170b4972390917bf63e4c217281788ac22020000000000001976a914d39c0439284f4007990d88490e51c9b120c2ede288ac22020000000000001976a91499dff4915d45f39ad9e2020ecd9e8be27149c32688ac22020000000000001976a91453010a8ef1ad523f82d92e70c6166511f6f2f8f488ac22020000000000001976a9140b47b24b1b6dd6b6ef6fc9c2ddf962b7fd9ebce088ac22020000000000001976a91472c69ce0d7daafa26d56704172a15916b369940488ac22020000000000001976a914596aef525ebe05e66144d893aff5c053b7e7b42688ac22020000000000001976a9149591db844ac43b8be42f5c23ce48265de85b881f88ac22020000000000001976a9149b3e55c680309a590a9b319b584c6823a7033b4788ac22020000000000001976a91445110199352e60642095c72529405ca82803ee4588ac22020000000000001976a914f91a2655cb31715335f681237750d22c190b401388ac22020000000000001976a914005ba56ea6cd3028f76fc561c9d2e76ed568619488ac22020000000000001976a9149ed5105915d3f36e70d9b650b7f106e9b4dc219d88ac22020000000000001976a9149c9294d0eda27d418c207a885119c33d8ed6495b88ac22020000000000001976a9149d1f14f3830e16c13648676d91163d9b6a1bf13e88ac22020000000000001976a91453eeb328763194df9ccac165d24fbe6a1c73137688ac22020000000000001976a914f2aea28d39a684aa54a2c4bd9c3ed84c4844a64d88ac22020000000000001976a914902e1cbf7aeecc3cb512165ada1654ec1498bacc88ac22020000000000001976a914c54b5f8e810bf1cd36adb1f7de9d5d540695ec1c88ac22020000000000001976a914ae0f55c306208a4cc1448432e6aeabb3353101fc88ac22020000000000001976a914636e28e48f475852bfdf4a3f667cdc375fc0002188ac22020000000000001976a91465ecbeaf3eb4c63da465ca1e6e29fadca375bc2a88ac22020000000000001976a9144b60e99cc578aabbd52572df75be9ccbb2d40a8088ac22020000000000001976a9146f6c4d0a32c08b2b5fe729c2b3d2d2f245bb309988ac22020000000000001976a914d9ff8a819ddd30d58f8c87c6e1165dcbe692c8ed88ac22020000000000001976a9146eddbffac833e751740145e8b27b2b6bdfe3670a88ac22020000000000001976a9148d2f618b64283dd5ec31035e37ab1cc634249dbf88ac22020000000000001976a91402704a7425d828f95f36e6a7a1a26c97c3a90f4088ac22020000000000001976a9141357107e81dbbb83c236b1f00225483440e89b7088ac22020000000000001976a91446e823631877b72ee66885e5ba246b6d4d5b3c4a88ac22020000000000001976a9147482f56a14dd12c12243605ae1ebd77eff91e8ef88ac22020000000000001976a914877717568a7e1d716aa7c696f2db7a6b4b79ee5788ac22020000000000001976a91468ef84bc633e3d19da4a832afc73f6be8438629288ac22020000000000001976a9143173f0d90eb54c1ce7bab7afe8f543d03fbd425088ac22020000000000001976a91409f409914c2946fd165f7d489cb9a273d830723a88ac22020000000000001976a914e520f25341f5e89e743a6a3a335090ce8ebddca188ac22020000000000001976a91433b1cd0ef3d02abf101142901a4e0827be749bac88ac22020000000000001976a914febc63836b7ef9b4c4e661fd5108524bcfb0a38a88ac22020000000000001976a914301f6aa9f34c1e90e3d07ef37ed84defc7b6a52e88ac22020000000000001976a91435289c7be1fd152053351e634aaac498ae03c6bb88ac22020000000000001976a91438a966700f79c1887d4480ec1b590d56cca4cfd188ac22020000000000001976a91436c489b80847ea42da10a3f0fa2402d6e2a7c4bd88ac22020000000000001976a91437130f501558a09774a51469fe4e01e2031791d088ac22020000000000001976a91436451ace467a56cb962b878f205a8ba2b5f26f9088ac22020000000000001976a91436dac75e09a4485537bb7077e0bd2b5609b9723788ac22020000000000001976a914356d4dcf21211bc09debd708aa32c41db6d7e64488ac22020000000000001976a9143110b8c1ff0a4446580e28519b50d4d92baa31d488ac22020000000000001976a914316e09a69cd0bb8413006a04711e894f5ec35d2888ac22020000000000001976a9143036a8e803aa91f48aa4b24aca870c12e66d62a788ac22020000000000001976a91435a6cf3bfa88a360292a32d18e5b059385adbbd188ac22020000000000001976a914309dc53be4b5619e5be028645c27c61fc486154488ac22020000000000001976a914316cd64a58ed563fa5211f3ab97c5ac13fe26ff588ac22020000000000001976a914364bec430d129d04125789a6a3013c767de7314988ac22020000000000001976a91436ba14b7670a53056fc497b7c292f0afd222504188ac22020000000000001976a9143217240a81c1427aa7d0a0071018f6d9fc316bbb88ac22020000000000001976a914353eaba08ecd723a195d297b654d570c981bdee288ac22020000000000001976a914372737c415b4f9f7ca117528c2c5c66eb2d7b51d88ac22020000000000001976a91435cf4c09f53042f1c38ab22b4153c34bb98f2eef88ac22020000000000001976a9143d8c5ce0cda43422e870657480f51b335b72bab888ac22020000000000001976a9143d301536c26a4b0b71fa685b4348e4d9ffec1b0e88ac22020000000000001976a91431d7acf1277b166fcbee555b7a7344a4ad256ad588ac22020000000000001976a914373a07d4d64bf4770baee249af17c36ffcf8d4da88ac22020000000000001976a91438420829a9956ddf67b3bba8666900d5fb3f985288ac22020000000000001976a91436c5e4db81b4cfb85b1a3357d2456872ae23c4ea88ac22020000000000001976a91434b9bbb6f8493c5015a3cd0a6f93bc20c8b3961e88ac22020000000000001976a91430cf83c215247aeb6215658b13c417d5ffd6450588ac22020000000000001976a91435ed323567d34132dc83b8fe632ac2cf64e7f04688ac22020000000000001976a91431999b44aad8b2f7954bac7a7027df8e1aecf5ac88ac22020000000000001976a9143900f7f83f3b433ad76d1c0a536d392feaaf3d8488ac22020000000000001976a914304cd28169ea74fc622444c938b79c0b566882b288ac22020000000000001976a91435004b909d80811e70bb98a00447d7aa68f8461988ac22020000000000001976a914361bbc1fce7e9278d7ee013057ade43df34e5aa188ac22020000000000001976a914364898ca345e4d8113c34dd59c07b6190c37272188ac22020000000000001976a914305b441b6fb6e9bb635b4779bc174d8e737cd68888ac22020000000000001976a91438b98ad009408cee0d1c5a2027ca6b2abda343ee88ac22020000000000001976a91431208017d8c05c755027000ee0da67aa6d55fa7f88ac22020000000000001976a9143591bf76112442035f96f36f6dbc15f2a8f41f6588ac22020000000000001976a9143738b74b0d9727a3913e7961b3c2deb7b509891f88ac22020000000000001976a91435966d01d18f321412504759fb58b027c53198fc88ac22020000000000001976a91431a11a8c753f77519444e67e7304de3727b94d3a88ac22020000000000001976a91435216535c2bdc4684f6082bd84813fe937977b0f88ac22020000000000001976a91436d0bc15f0aa005b834797e50b8513dfbbbbff8c88ac22020000000000001976a914308544a1fe7aa28d2c7a75dcf53f7d5e20e2943c88ac22020000000000001976a91435e0feaabe5ef937de480d286e7fbd18289304aa88ac22020000000000001976a9143601a8ab5fdadbc26648d32755d55e3880e886d588ac22020000000000001976a914020ae29d2910e939c5d477e71ebcf4fb4def634588ac22020000000000001976a91428d3ec6a63d471b47d19207cf523c82b5e0e384c88ac22020000000000001976a914a3c80910c3ab21845765836bd57e537699bd83ce88ac22020000000000001976a914b9b352dfb37c998e8af7c6cc98f84c9d630a25c588ac22020000000000001976a91439490e5f469a263c14b1706bbbd13ffafcf51b8588ac22020000000000001976a914bc42bf24b0b89b3a41c40d79867f3033689e581188ac22020000000000001976a9143987ba00dec2176abf56db193110907dcdf742d788ac22020000000000001976a914035432789bbabd196d055ac07c7be843f9fc836e88ac22020000000000001976a914bb3dbdbe634c0661b7ce2eb058ab96a1c026e02a88ac22020000000000001976a91402bfd859482e9333115fe3b497ee153f4b7159d788ac22020000000000001976a914ba6c85d9810b903d1b307cb68a74f9f3707648a988ac22020000000000001976a914bb3a630629218c8a5e5aabcd7b3fceee00c3b3ad88ac22020000000000001976a914b91ed63a741e0c57d13f2372b1f1723b5c8bc1c388ac22020000000000001976a914b4fd0ee6638006116bc8fa70cef7566ee145d5a988ac22020000000000001976a914b4a2935a3e048ffeee4e202193acf0aaf91c8ccb88ac22020000000000001976a914bc2e5e22308b7d652ecf0cbaab03ea098753b99788ac22020000000000001976a914b48c851a1d573b01c7ae452b3502c096c9395ba688ac22020000000000001976a914b5815af5e62b363c01ad93749b6bc1f248e782c588ac22020000000000001976a914b42b91d026498d943d63d67fb3d9b5485e8cc8eb88ac22020000000000001976a914a3f1e42aa006d007ac3b87922906c5182d04284888ac22020000000000001976a9149f4d78d3c77b95d7a47b8f0e4d5d031e0b3938bd88ac22020000000000001976a914b8cf25a58461bf1e6f0568324637fb03d5b3e87d88ac22020000000000001976a914bb9f185432378c0860af0e5624478e6ab651c1a588ac22020000000000001976a9149f5d881549a212c53f8843e8a489f550651c617588ac22020000000000001976a914b488555eef21088a81dd2818816d94d7f250a0cb88ac22020000000000001976a91439322e1fa6dcd27bc789833d75edee087a00951b88ac22020000000000001976a914bc625b85dc4273f898143ade8c0d616c8c9d3d0f88ac22020000000000001976a914a4399b1a5020d32cadc91b2402f7f7f69180f85588ac22020000000000001976a914b9074db66505a133e55a7f449163ea17f384237c88ac22020000000000001976a914b58d58a334c8649132fc674c64f5438d76cbb4c988ac22020000000000001976a914b52403e9c1bbb888d4cad7007657945e447abb8788ac22020000000000001976a914b50e24229d46c7211a51737fc5e507dbf5c51d3f88ac22020000000000001976a914b4a89053e589e898447a47c59fe98aa8898503f688ac22020000000000001976a914b9a00affd20e7569ccbb0ee76fa3b91782fc1cd488ac22020000000000001976a914b57e608e76810c1099c443d1d497a40154ef0e3388ac22020000000000001976a914bb2e4be333948677c6b76ebaf85173f518af914d88ac22020000000000001976a9149f44fb8201f51a011626872a55585266a1e0234888ac22020000000000001976a914bb59ed58ac5f093a51fe9331c1a6971a17701ef088ac22020000000000001976a9140749f0b7a586033c8d5a78b2d8717795cba5eb3c88ac22020000000000001976a914b8a0525c641489ab8822b00c49c59cb8f225df3788ac22020000000000001976a914b499bf0d71b6a55184ff39a4dffdc218bbb32ac288ac22020000000000001976a914b540c33a8cd023151daec211d1a8942777b9204d88ac22020000000000001976a914b485e4bfbe3dc6a38b99b3431afa53fda1a098c588ac22020000000000001976a9149f50b46e832cfa39f42574599acedec0f48feb7e88ac22020000000000001976a9149f33cfd2ef89f261f6a83650c49bddfd6cac793888ac22020000000000001976a914b465752bad661ab482927a4d7826e8ea4779411488ac22020000000000001976a914b94e3aae244d071f313909b269e1a59f1808aec988ac22020000000000001976a914bbf257dd37c2c7aa24dc7816990787671c753e1f88ac22020000000000001976a914b5793ba16bfeea033a5941052c2e3a6ac581fe1888ac22020000000000001976a914b9600de53dd2c93551dc8930e7a894739a083a1488ac22020000000000001976a9147c2fb351c2a0f1787915b0aae48e00d2d3e091b688ac22020000000000001976a9143b27bfe0159020708bc59ed5097aa44904a3ce4888ac22020000000000001976a914a1770af930c96cc325e6bc7659929cb45dcc9fb988ac22020000000000001976a914de1997d8601ebda58a73224d2aa1f159a59c8e6b88ac22020000000000001976a9149abe76a2c6b51e4623bdc8f292070d867cd750bd88ac22020000000000001976a9142ce95d001bb54ba1f77a3fbd737af3a0c1a63b3888ac22020000000000001976a914c2ee45948e913c51d81ec1b04729f938c4c5527c88ac22020000000000001976a9145ab2245bde178f271078eb67e7c9547d00f329eb88ac22020000000000001976a914925848b89f3d153f3c760b897e27c046e99f270c88ac22020000000000001976a9141181e7c429190835b5e199827e0b1bedc3a7000488ac22020000000000001976a9143bec91810a7e38a8e40f8a90b768bc0d6eb1897c88ac22020000000000001976a91425b1a1a6d47bec515d4136958601b8ccac8005ca88ac22020000000000001976a9142c507eeb05e0587661e29b8dad6e1924ba655a3188ac22020000000000001976a914252a67d7497175dad99b34fcf8ce35ee1a9d6b8b88ac22020000000000001976a914e2abee39f4b0f6a90616c0aafc29e1bcfd3ead3988ac22020000000000001976a914322b326b5c5d3635952fa316d6442eb4b136d87388ac22020000000000001976a914e7a7690e0d01af22eb980fe470dc7e96fae3459488ac22020000000000001976a9143ee36f63368cdd226fc03a30a48c358bf305e59488ac22020000000000001976a914c068b2881bd002e6f8c4e130405b280cb002f6f188ac22020000000000001976a91440c03f109ee14ebaa5a1284726032ef6bb449fc088ac22020000000000001976a9143a52403d53dd4a7bf9592d0aec348a5a90cf75d588ac22020000000000001976a914b7b4dd5da3c03ee3151e527c99286a379c021df988ac22020000000000001976a914e2ee991c0120d5ec8d86d37f31353b6e02ac095088ac22020000000000001976a914e359e05f9151e96e8905d4ef8d76fb9945d9dc0c88ac22020000000000001976a91495964bebc2ac47c3845e5ec167d748b9fb5324f388ac22020000000000001976a914e1b81e53512f86434df36983063a3e78a80372a288ac22020000000000001976a914dfbc1ec72f8dedaa53e1fe0c24b6e61a40bcb9b988ac22020000000000001976a914e087ebbc4065ce82e4e5a5d04c7d0ca7728a962d88ac22020000000000001976a914a0d62a5f296d4770805103bc9a6fe8117cd596fa88ac22020000000000001976a91499e590814a44ce0f73a2b4682289393641e73f9388ac22020000000000001976a914b3076a7b077ccd798c5030201229a3b48484602f88ac22020000000000001976a914df77d14d66d3b02d7811209f29a56904639e624388ac22020000000000001976a9142c6611e13b8a325c3c2a7bf2bb85bf22f21bb59188ac22020000000000001976a914e847a095f1e274d8d1ebe5e554ba79342c69e94988ac22020000000000001976a914404a782a445cf6aa25db708fdff6a95777cb39ef88ac22020000000000001976a914de15f8d8412968b85c65d683acf86dcee5a6603388ac22020000000000001976a914a2b70fe868cccddc5ecfc724d16aa0e005b26abe88ac22020000000000001976a9143483a13057aebc406ea6df4282995dc2897fe88388ac22020000000000001976a914eca40323d7d0f916c663fadb9708c4d19172ce7288ac22020000000000001976a914b88ce185c8fab58f38edd884450100f7c49fb1fd88ac22020000000000001976a9149e56bc58402291a51411448ded1ccc62b569f8e488ac22020000000000001976a914a1be2f8dce447dac272df789cddad654abd8a60788ac22020000000000001976a914dd3dfbc1a6e3771a1b289cb458ccd1a58ff55f3588ac22020000000000001976a91427109bd3bfcb4c331cfbf377d9ef7b2fe427144688ac22020000000000001976a91491c335c9d29133b93b0550ef53098ecac8ed90e288ac22020000000000001976a914c5323d9c11a19d91cbc4413e0e830c907e4bb04c88ac22020000000000001976a91432c9a5bcbcf38cb43f7be32a615f6d15074576a288ac22020000000000001976a9149427844e41b97e424cac6a137930d92c3bb25c7988ac22020000000000001976a914df174820f7ce0e3ee6715f5d6bf4f0f2cd55b9ec88ac22020000000000001976a914e41058c5a5b8718f8372166b375684e2f7eea73f88ac22020000000000001976a91492905dd8148a013d235924c739f065ffdbff611088ac22020000000000001976a9149c6dccd0efaa94b45689b4cdbb8bb01673d5ce7988ac22020000000000001976a9145f253d1d48f4062b8e47f8557f069122c22feefc88ac22020000000000001976a9142e1267a74420cfc32c0b1c170d66d5262a0a993588ac22020000000000001976a914b23b40e6cbf06faf028cfc56a78d14b75448c9f588ac22020000000000001976a91453aa150a1655d3e1f4bb6f17b649ee852842f37088ac22020000000000001976a914e523cb0e62f7d3265af32ebfdfea79498a507eb488ac22020000000000001976a914ddf6301dfb430957a0d9af4eec60a20b488005b288ac22020000000000001976a9143ec8b1dba6a6140c068afaafb0db9c61f9d5d83688ac22020000000000001976a914aaecd63269f67ef581b3b6f95685b67573abdf8888ac22020000000000001976a914b33382efe1e6026c99419d68668aeaf9c7ebd50a88ac22020000000000001976a914b7a77cfa6b903fc4d175858d6aeb25b58545871288ac22020000000000001976a914ecf1e01827919f1649bfd7b397f3a24b3f6c7f9288ac22020000000000001976a9142bc3628d5a0dd80e570dea158c43f05f0ec1ba7b88ac22020000000000001976a9143ff09488baed38d147f27320bcc20989d27ee27f88ac22020000000000001976a9142bfc660fc4b54f62f72b1c43dfc487680b5904a188ac22020000000000001976a9145f35607b0880fd8197a0a210fd20330b875f034e88ac22020000000000001976a91402c92dd3066f7f12143ba5b6cb409b8ed010466388ac22020000000000001976a914c1ff6553c79954e729dd0cca071082ee4beb1c8f88ac22020000000000001976a91402cd6222cb74e6aae470a09e5a7d34e7c7444e3c88ac22020000000000001976a914c200c35c38824a53ef1743abfef42a246a1f446e88ac22020000000000001976a9149c2240ff1555872077ae5a0b93bc3abdd3feabc588ac22020000000000001976a914b38ff71454ba58b2b685c8b176039350adb957c888ac22020000000000001976a914b69bb89c674bcd622af17a11dc85db8943b4e04388ac22020000000000001976a914e0e90b75d0169e9f38d9de7297ea9a5a19eae69888ac22020000000000001976a914535bd4c5cfcd76c009bad15a17975e3a20bebbf788ac22020000000000001976a914e5880d6b6300dff24645a619588bc38e6bd2c7dd88ac22020000000000001976a914ecc733ce3400ed6f42ce0df6cd65081609caa9e588ac22020000000000001976a914df379c28601bd450a1d34ffe1dd407483ea44bab88ac22020000000000001976a914986be8dc33a70672c56402d9e17e531878b5d3b688ac22020000000000001976a91467f8c735e40bc3da6725b66609b55bb538ee8e7388ac22020000000000001976a914a26faa38cb92ccf75a16d644832b04194af2f05b88ac22020000000000001976a914e4f44d089e464980fc632cb2c61cda954f274f1588ac22020000000000001976a9149ba141ea5f3f77296380a25dfe3869654723d1ec88ac22020000000000001976a91499bd9cd6976a93f1f6c27e0a7971cbe04880d42688ac22020000000000001976a9143ae8f47a9bf02874a3e305cf4100c987790158da88ac22020000000000001976a914b34881231d2589c4e87a31bda9e40f60a196368b88ac22020000000000001976a9149daa04528b3aae6097dd5e81be594e51c9adc88288ac22020000000000001976a9143bc6bc54ceb95ee491d51e10ee5855328f106e6188ac22020000000000001976a9143e93fd1dd61f66e8a049a7777b47d02799d9ec0788ac22020000000000001976a91411e223050ccbdf9ffc0ddffae8ab12b2654bdf9c88ac22020000000000001976a914a274bd9d5f56059fc6c49faf1dce7a4dda523f7c88ac22020000000000001976a91494585750b94a5435de61881d37490bb01c33aed388ac22020000000000001976a9149436b9993c737eeb494a38c25d89901e230d44b688ac22020000000000001976a91403d73ce52a025ee54e8b22a990123ff046bae56d88ac22020000000000001976a91459c8a42bd9e47eb68cb1039262509ab1ccc3962a88ac22020000000000001976a914e7186e9f84fcf71e70f4fbcc5226f13496fe108f88ac22020000000000001976a9142d9fea88053e419f3b4e1a48da064cd40b71eb0988ac22020000000000001976a914c0639184274c768b5ccef4cd89883b2dd9994a2188ac22020000000000001976a914c1e1f06b68465eb6d128a38088bdbc9da44fafa488ac22020000000000001976a9140c1200786731a4252f926c80fd1a0b4c93834d3188ac22020000000000001976a9143ab8a72c9c2f8fb4c2de94ba1de576c932e47bc888ac22020000000000001976a914e6f8e0beb79e53b3e6542773f29839a870a822d288ac22020000000000001976a91439e422bf8b2cd8cdf1fbf44d4bdec60b4930c7e988ac22020000000000001976a9149ba546ddfcc6cc2371accbe5bea6d64a265d108088ac22020000000000001976a9140d08ecb2a806ffa05fa44a8a4583dfd1f2973f2e88ac22020000000000001976a914aacacd4060c5bca95867ed2cd44ed9b3a346fc2188ac22020000000000001976a914c09f28570489b6e20164fd534b5cc9b52f545a5188ac22020000000000001976a914a14085de325fbce3f5e80433cb6e3b013ee40ff488ac22020000000000001976a914e4953b0a2a16b314ec53327c030764482e944de288ac22020000000000001976a914c2b3868a9d16613b06f8202f659a0aa277404bfb88ac22020000000000001976a914bd55e58f788d0e4823fc7e85e1b6ae8c7ee20a2088ac22020000000000001976a9145fa4932d6cc7f0a87b51a538124790da7087d3a088ac22020000000000001976a9142a726d6acb694d8626c7d40d0551381508c6a57288ac22020000000000001976a91494684a2ae2e61a8102809f5945c7d5b2c24652d788ac22020000000000001976a914b3029e402b95bf3f483454249f7578ba6598d87388ac22020000000000001976a914e691bffd5f85f648b8e0b9e98281156da2233e6f88ac22020000000000001976a914b2e3db4732fa94ba7d918e30947d2c1d00198bc488ac22020000000000001976a9142f8509abda89169537c340afc90d157ca166132288ac22020000000000001976a9149265c2fdb8b6a0c0bb2f8fa48d5a29bbf6acaec588ac22020000000000001976a91494edf12abae9ea609d353bfcc3cd106a506b88b188ac22020000000000001976a9143e3cc04743166ce1287591b493f1482414ed300088ac22020000000000001976a9143e671287b6a1bb14682e189bb00a04bf24923c9d88ac22020000000000001976a91493033c0d182d0860bf7a4faf29e00f87185103b988ac22020000000000001976a9143a473b5e25d88da47be0aea4540531290c65145a88ac22020000000000001976a914e041a60fea35b6fa3da3c07596ebba8e8492609388ac22020000000000001976a914983a8237b39a513a67480c1bfbd9896171f2bb6488ac22020000000000001976a91459b123bb250eff95816e7c27c4a266650f4cb7a588ac22020000000000001976a9143f7228ce1f244908898d1e4ef3d017284b4e632188ac22020000000000001976a9145e33e7163a4874e43c6f61c6941c114471d3ca5088ac22020000000000001976a914dc849cd56448ce721c7fcdecb8c7cd61b8f43cf088ac22020000000000001976a91499867ed918d666ddc7532385227b30a41e0d3b3888ac22020000000000001976a9140733abda45d4a1534afc997280c2b9cf5a6611e288ac22020000000000001976a9143f466e3dc3aa68ee0368b0297e102d202fac8dd388ac22020000000000001976a9142bf3cb9152b2d0d6e42a5e831b70800f1311cc6c88ac22020000000000001976a914c13a0033db1915321e3ce9fbcf5fd139095b555988ac22020000000000001976a914dbc225254ea1cf8e99a7842179df97044d8d248888ac22020000000000001976a914bd231b48efcd96731ec07a2558d663a09f76acbf88ac22020000000000001976a91402cfe9b395194c17788097ebe0ea0dc2b2b01a6a88ac22020000000000001976a91499701869186279e8b85905674633308a8100073a88ac22020000000000001976a914c4ef2dd0f833f4dc137e956212a41776362697a488ac22020000000000001976a9145e6bdfffd49d318325765683808214b3f98cc7f088ac22020000000000001976a9144f87c89057b39f6b52ac931bd64f0fa8cfe3ba4588ac22020000000000001976a91432e6ed05d4d1a9fad01dd5e310908b7778dd0a0788ac22020000000000001976a914b26a4fdbfed2970aaf0d9dea26cb55ea625c37eb88ac22020000000000001976a914e13bffed190c7bb43caaed409bd89f6d06ce550988ac22020000000000001976a914c2aca71a5baa289173ec7df2ae948ee0b3ea314f88ac22020000000000001976a9144f73f4f19eec840c7eee51624e6f33fe45f4dafa88ac22020000000000001976a914e06ab3ca00b6a7e39f5fe1fd85c98eadced4b5ef88ac22020000000000001976a9142711d65b577fe433de49952e0507042f396a511c88ac22020000000000001976a914c462f08c8ad7050911f9459270b847d2b07d31f188ac22020000000000001976a9143e3519dde9ade66ad5027b24d5bc0ade2edc3f5f88ac22020000000000001976a9143ea68b95b19e9644e39c55b627939023d0f0ba7f88ac22020000000000001976a914b780b56454191eae252a3e21299bf4b1ce1f54d788ac22020000000000001976a914c409ab742b6691259ff37c214e1eaf8fb1250e6588ac0000000000000000476a45434f5552542d4f524445524544204c4547414c204e4f544943453a2068747470733a2f2f7777772e696c6177636f6e6f74696365732e636f6d2f3135333131392d32303236303a130000000000160014ddc3dfbaacc4f1cc2b3b327d62ab85ccfbfa93d70247304402203511265c865aa6cb655c081251edeb5775c07a9ff6ef079708ecc18a0d67b0bb0220222a494c586cd34b564030cbffe8b8ec1a226d06e854aa8997ce0a1e239720ac012103f9f7c6a59265e142b9b32b6d8a482b31bcc8d4626ece04a074b5841f1bbd4c1400000000", + "blockchain.transaction.get:9b00af71e0a48823cebc6fbd6c9b9a60ab517b6b70d2e030ee61fd9be519d6dd": "020000000001015931e3c952d013d14bc32e852002b0648e3ce719f1bf4b21818f6663c01ac88b0200000000fdffffff0324020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac00000000000000003c6a3a4e4f5449434520544f204f574e4552202d205365652068747470733a2f2f73616c6f6d6f6e62726f732e636f6d2f6f776e65722d6e6f746963650002000000000000160014c89ec8c194eaea21312746a4437a18fb201165750247304402204e0ae60ef4eaf28b8008145d0c1404ef9a8ce3b4a8e8d1de7018c989743214ab022040d3799649ffa7b2f23bf1f3189f8a982f10f897736940bdc568f60fe75e31c1012102331b1c714589d2e6f58dab1e6a7476131fb5271022855e6fdd0965232914d77e00000000", + "blockchain.transaction.get:65916aee7913a7bf95055dfff7b198d11ecc12ecb9fa5393f2a93fd2f6433e99": "02000000000101f7c041503da0203e29a33bc9a2755c7d2de5dfbf90b6af9f5527be5b4dc49bb01d00000000fdffffff1b3867100000000000160014847b51bb140355ec47ef35e439094d02f021a6e7bcf0020000000000160014ca346f5a23343adb01dcd57d487997b36ca8cf88204baa030000000017a9147531e918c87bc434cdaebcfdea744aa0cff1004d874837da000000000017a9145fe9e3fd898594dea78f7d181338cdcb1457a73f87a831080000000000160014bae06a67e9cf6399c0608d9966d1cb8cc65272beb8212600000000001600141a0057eeb0cca905a9a49efbfee28aa178bfe14300497f0f0000000017a91499efb6e42c8e1efeea08e8c11b356a2a3637497887f4ff260600000000160014e9c5b9b8f14984869ee3cb0ab346bded395b0609606e04000000000017a914c782dc86f44e88722412ee40b707f53619c6a1e487b0e920000000000017a9147466edad1cd9baf4df61cc55a1a62aea95d94b1e8720ed2400000000001976a91490c068c547e34ff4c92a75e6c3e81fa3e1bfc58d88ac38bb0200000000001600148904231eaa7f245cf6a9c0a5c96fdf7602a70476d07203000000000017a91456e868e0c2ac89d7edb92b7c2cc5755cfee490bc87682a04000000000017a9143224569779f327a303ff49b7b05aaa0f3611f33d87e0280100000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac189b24000000000016001406d13d60f7d2bfc16e4447b64579850c8bd6b8ae1820fd3d000000001976a914e07b29fdc9cc347539192e0aa33c67d177c6ad3188acb8e01b00000000001976a914992a21d9338dddd37a7c610a619719760e3b3d7c88acc0ed761200000000160014e423cab2144aa3abe8ded77a3d6987caab6ba11088dba9010000000016001427c60b623f372bd5f4c57f29a912e549734633aa48dc03000000000017a914521cc450e765af17e9f848e40a53b3b63f4c82698771ad0600000000001976a9148f0232256386dd406fd8bd4dede2089f7329bb8688ac58bb0f00000000001976a914a09bc944fa30b505b009d2718ecbb0eb25b145bf88ac206511000000000016001452e106319ce7f6fb58413dfa4be22086561cdab7f86c72000000000017a914d9579a75790f4f208f74affba54ef8be519b8e0e8738080b00000000001600145fbb3bfd4e1f66c58c14d8a4a4fb2bc8109f4d2cc32795440100000022002096ae07e89461e5854b88e0211a856f66d2aa777a6763e39a42ea0ecffa3f7a530400483045022100f62e8ce599f6b395d27d80e12ddf7f1340949a35c4b878fac6fecd1d92cf1017022019dd24ed68bb4b3da67958e0c9b4c314824d64e0b95419bac8f61a5fef87a7e70147304402204ce1356bb782d87499bc0916f150bb157b0cafe433b4c957902f597975429203022013edfabb5e26c490fecfb58b7f407b3c8c4b87e4cfbd5dbfd6cab15b07d1246e01695221025c72bef263157577a4e3eb4c2dc0efd368d2a7b665d51b40c55d00e2ddbcf8f22103cd6ee67bb134ea4ec9f05f4c2c486adb45f96df841662af11ec86afcb44e16bc2103be638c7bcb13820dd09a376b0673c0549547f292dabcac753b5d449dacb063c053ae00000000", + "blockchain.transaction.get:a66b0e20ca318ff84dd5da4c099fb9bcaee60bbc2da637b912bfb73345ffc9e9": "020000000001017e15699ba0847ca03f0b5a9488989aa9d1d7dc817278184d1a916edc58e80f685f02000000fdfffffffda10123020000000000001976a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac23020000000000001976a914075b7dfca1465daa6f51b8497af83c10042ef39988ac23020000000000001976a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac23020000000000001976a91404d9d15e67e6f20551992e03039711e59281f72888ac23020000000000001976a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac23020000000000001976a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac23020000000000001976a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac23020000000000001976a914ae3be4abc4c3f171ee28567bb4cfef4bb47f318a88ac23020000000000001976a9146c42e1e7a5cc6298cbe98fd3ab1890621317b58d88ac23020000000000001600143a0d4f126b6022b058fc98d6faba62fc4e88543123020000000000001976a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac23020000000000001976a914aab56eaee257ced13882fbc50b8383688446d51f88ac230200000000000017a914992e7fd1b312165ba024fefb3c90191713add5d187230200000000000017a914cc0b10125327351c594fbd9de1f5ea3211aad90f872302000000000000160014f56a846749e38dd03d23d12bdbaed4901e0851372302000000000000160014be1fa434eece39c289a443c0891185e34f892c1c230200000000000016001405a4106b48a9b909e4708f0d6b70cd3dba56aeaf23020000000000001976a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac230200000000000017a91426d15738c606c1107f313dcee38e81af08ff96fc87230200000000000017a914bd060670716668c2c55654534aa281f2c910d1b787230200000000000017a9141a3f58c92ef5fe1fb1faf36652babcc68fb0229c8723020000000000001976a914aa78edd530844329915159f2c0e193ca791a824988ac23020000000000001976a914ff51a2045e512b6d4b07b2cf00314a005623984488ac23020000000000001976a914b92d99899d92b447668dd2705a2dad2d2110c6dc88ac23020000000000001976a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac230200000000000016001407ecd70495836065a9e3e8d1bf5d2254e114e95d230200000000000017a914568f34349dc2792c2a5318b046c3cdefba02d09487230200000000000017a9141ead9d0acd2f29f70ec28943a89f7b3c26998d248723020000000000001976a914aa9c17ab5726c479300d01c69499a198aff9412088ac230200000000000017a9148eb47d1832d38bb21db09a026e20af8aa991a40d8723020000000000001976a914d8fd61b3730d824ade8d9a8eebf5ac323eb230e988ac230200000000000017a914d98608245b500b7a06fcebec6bc1dc03b68a84be87230200000000000017a91478a64316229301b89ce158f4741ed7add4f048d08723020000000000001976a914cf3890eea91c255f2b088c1a360fa50cc129476988ac23020000000000001976a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac230200000000000017a914c3c432eb827dd2b012e3160fa45ca87424bfe6198723020000000000001600145425fd2d87afcd7bc9c7c01797f3662640a5d135230200000000000017a914e73413bea1e8a5871f6076d000f1b9706428829387230200000000000017a914ec2a3c05000febbc7a7e134cd93fb4d1addded438723020000000000001976a914f251420a06be6adf79ea0173fd433e30825a9d9b88ac230200000000000017a91468057331d5dd8f958f52a45550253153843d91e187230200000000000017a9147ae8b746a0d44619a05893283942a76683dfcc9987230200000000000017a91490e9eaf2b622c6a2c957a0bd286ed97edf6c84628723020000000000001976a914b476ef2ca4734cb9a46a111543beada2f102ea9488ac23020000000000001976a9147b18b02c105f05a5e0cec2f842f1c2bd8a71f33188ac23020000000000001976a914aa9ff9a44eb200b1c989fda7f95f92e2dc4f9e7e88ac23020000000000001976a9149ff78bda22aa357a14e389dcc77f3d1f8306257788ac230200000000000017a9149bdd7b34a3a73f90605f300756589b1f6db8da288723020000000000001600142f88fc7b48e7a70dba8fffe8cd1d340053c8dd7423020000000000001976a91467875d1a42af398108fff2c1ddf20d7e386aaf1d88ac23020000000000001976a91430e2e2695227c6ec784f31ad95aa9f77183e601288ac23020000000000001976a914f32abc1d4056bc660cfeb4e020e9037c840a211188ac23020000000000001600145ba2d59f473123550b132bf10e15eb48683dae1a230200000000000017a914767b93bc0474dfaf1a3e7757d9b99d8c8921232e87230200000000000017a9140b4d6b288b3ca9a052ef16968c1bfed359636dd48723020000000000001976a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac23020000000000001976a914dec9b43aba894697135f2067fda7518f9f15b33a88ac23020000000000001976a914c059ae8322cf82a9f5f4818f427124ca009d8f0888ac23020000000000001600145bb1e0498e412eefaa37ac62d2778a4e504ed10c230200000000000017a91474f1fb0411dca7f3919c43392ab2c594c04905e78723020000000000001976a914aa9b3a4a4da7fe2368746ef8df0ec2569b0057f188ac230200000000000017a9148c9b617d70c897bd5450aa56cb3d7c9f13952b1a872302000000000000160014b8d82c8205e4a39f6e5f8d89f95c1520300a5114230200000000000017a914286e901de5d809077be3139100a2b90d7de3be7b8723020000000000001976a914aa9a101d070bbf57baef0b8a4f17301e8a71baa488ac23020000000000001976a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac230200000000000017a914f5db8ed11248d26b48906ca8635f11c8fd953e36872302000000000000160014b3410e6001fbccb09e37b81f3b644cc630ff12fa23020000000000001976a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac230200000000000017a91452634d3cae32b2ad2613e9cd98e88d2c2b38a2f38723020000000000001976a9141252ee70db5d669019ede5895f6c2442a045423a88ac23020000000000001976a91442c78ecdd8dd08dac6765c2730aafc695c80780e88ac23020000000000001976a91443a4be0bcdb1de9e3873075b9c679d64ef906a2c88ac23020000000000001976a91411452b8be73d1c63619f1739d4cc372c5824b27188ac230200000000000017a914659e9fe07ce74be93cd0ae466c5642606d71f75f8723020000000000001976a914d185bf24ebadddf0bdeb15526de7a2766705cffd88ac2302000000000000160014133721d5110e4faf16300e9d96a91125ac7ee39b230200000000000017a914cf28ba8dcf55b472feafa29084a0fe4462c1a53d8723020000000000001976a914aaa0e19223e8f15ccfea98771b2f414b794373a788ac23020000000000001976a9144e32134232499d626899eb0c939580e7a2358d4a88ac230200000000000017a914b30e777c5b98e75ab323eab32568d49031ee09da8723020000000000001600146bdd9cbf9df8bc75b3ba859813e8d94b7c75cf27230200000000000017a91460524c444bdeb016e588b5342a94191dd288920d872302000000000000160014400aef7aa983c1616dcd2e46d847f9a9e4858a6c23020000000000001600149768c2298587d11719ca00b5288a77f1be2f2108230200000000000017a9142d19942114338d4badc6301d18fbfbaca97eb64f8723020000000000001976a91466fb5b68210405f03c093143d1081c8eca62d17b88ac230200000000000017a914a78da71baf05a247c256ef7cd924eb7658d1a9468723020000000000001976a914af4a5b9fe437cba4793f69c9df8c4cf3d26caefc88ac2302000000000000160014f1bb2480456be9d6f3bbf9dbff1eb0047a776be3230200000000000017a914e11db11d69beb6863b0cf4f4ce49d0c8187f3ba98723020000000000001976a914af35fe024575d751d379806e93855a3b472d154788ac2302000000000000160014dea54a0f785b15fbd4d302425c82341ce937f82723020000000000001976a914241502fdde2def412f786641009a31d85c9dad0888ac230200000000000017a914c36c3b801f97fc401043bec0a0f471698cc0d5e08723020000000000001976a914b46c02e2786a2f2028f09ccc3f5f1265a0c71f2f88ac2302000000000000160014e33a3d9fc71bedfceb17279b54fd2df860583adb23020000000000001976a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac23020000000000001976a914aa94113b2747ca73fd187fddad9ff764f95580cf88ac23020000000000001976a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac230200000000000017a914abf59fb35633235708d1126fa1ad5f355e79510887230200000000000017a9142810817059eba5fa4a58a8df2c94ab778d8314eb8723020000000000001976a914b9443ffaef7c58f3bc307201483a384543a5c0a888ac23020000000000001976a914af3964e461f41b87ed33bac7d5361256f95b4f0488ac2302000000000000160014c9ca604c6334023a1b67ea94bd59a9ec54bdf83923020000000000001976a914aa9d984067b4055179d6207694e1f02048f01a3f88ac23020000000000001976a914aa8fd9afdf033f40d7c83d967f23ea0ae01be87988ac230200000000000017a914d5b7d816b5ced951228662bcc4a50cd06643feb087230200000000000017a914e57c267b76de79d542417fe19c9bf93f7ecb31cc87230200000000000017a914c6c3079c51df289ae3214688b12879e8154582fc872302000000000000160014f5f34432b834dc48aa4667f363fd617a9cdfca0e23020000000000001976a914aaa1432d8a79549fc2b724aa560554424050c0c488ac230200000000000017a914749140baf9298b41f4d1b13c8dfbebd82320477b8723020000000000001600149417b5e90126ece9486d7c745c04547aedd9f3d3230200000000000017a9142480911e18cdf4f1142a22e8dfa04d58d368a4a28723020000000000001976a914484f9c8449a57b88ff8163bbeb7f42ffede843de88ac23020000000000001976a914885be2340ea7cc0aa2f8646137d922142d26474a88ac23020000000000001976a9145ef248eab5dbba9b3782caa6ca55704df8fbd6b288ac23020000000000001976a9147d7b036fbe1450332b3204301fbc6cc4ad27084d88ac23020000000000001600146c4931d9dbbcc288b9380f09d5781e33cc9025d323020000000000001976a914a3e1e10c49758a7e9c2e15e9daaf8443b1889b3788ac230200000000000017a914f65d73acdf6ddcff6b9fe40aa729454a798c5bc287230200000000000017a914a197190e15215de4d3b221d4173b4b958279c34f872302000000000000160014b9b6c250de156dd92689c1cbd4cb8a9b73a1d41a23020000000000001976a91483068bc8913bb8fdadff3c8c5904442af64deae688ac230200000000000017a914dbc151f2b6c63c7068ff79a0113ce4d10d1942908723020000000000001976a914b77e68177d0fef51df52370af08f530cc8e149ec88ac230200000000000017a914c6cd5de309034a67a53a4b7c82067bf6b499d3c48723020000000000001976a9147d9b7721645c954c0f8d2f96637da98b036c317588ac23020000000000001976a914eb233a91b56c6162468141e70256722ca9217a1788ac23020000000000001600144160e8618d37a1f27498242a1bd80075d2e70c9f23020000000000001976a914226c48bc72d3dfafe447f6448a6d09719752345e88ac230200000000000017a914d5dbfb7d92954088b0c15968da3095adcbff19a387230200000000000017a91488eaa986e2e8760cc55e33a8141403df77149cb487230200000000000017a9148aba7dfd8e903b1e1a63288b1deb2e41f54eb5df8723020000000000001976a914dac7c548c756a85284be4bb8d3e2052ee337a6bf88ac23020000000000001976a914b46cad8eac9bb05ca9d48fe1719744e2a308fa7988ac23020000000000001976a9140791f1f6600311c3043e4e247050833567bc2cdd88ac23020000000000001600149883ce0475d016f46a6c3527031cd6a855b7cb3f23020000000000001976a91446855e33a25dad1ffb1721630dfc9ed1749fdc1a88ac230200000000000017a914d7727d827b4710d0e0fbe0cdd70833753b63a48a87230200000000000017a9145d2a302a527611259882c3769ee0a7cf95441c728723020000000000001976a914b46bfd52f887c82b5fd12ebff231458c285b193988ac230200000000000017a914ad3c209f26ba53ae02b317e916023096e18cc0f98723020000000000001976a9144d8fd85dd9b7e77fe260448faed8304d8520350788ac230200000000000017a91424ae1b894ff06207328309245443ce33065a50b78723020000000000001976a914b98a8b0c1c6383fbe6c310bfb62c5789d01b420488ac23020000000000001976a914aa795e316c7d8ca9f01e944ca02df4d19e141b9d88ac23020000000000001976a9142b0d59ca2398d0f03f41096f2662671ddcf3653c88ac23020000000000001976a9149bf974ccd7e2e335f3da0934adbf480b680b01e088ac230200000000000016001494b9d21e4689cfbc1ae63c49d9bf5270e182be1a23020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac23020000000000001976a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac23020000000000001976a914b4575eece4b9b7cd71c002fb9e65466d0b632e9288ac230200000000000017a9146833e9da97b0f32501726cb9fb84ee406ce93da187230200000000000017a914b68f80cc562f642d22ca33138df21d219545c9c587230200000000000017a914f0f1b973b9b4f11a5e95a506f218473570b0868587230200000000000017a914e167704bb552e06da7b55cf1f143c822f52b4bf187230200000000000017a914c233c7f6eddb45c3d708239107e9dfa8340542338723020000000000001976a9149a63fa8f9c7fa3a18006c8337b1f0587fac66b4388ac230200000000000017a914fde0eb200fd0a547ceb917b255eee972dcad28af87230200000000000017a914cbc26a131b79cb8cf93df8d8f021e9f1baba240e87230200000000000017a9147d4bcb04cd6dfedf09089cb6afb8b1b0861c46ae8723020000000000001976a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac230200000000000017a9141fb24b5cdf092750e9d1d639117e99f12714c0ec8723020000000000001976a9142552508504c3936380468c7780d639cfaf055aa488ac23020000000000001976a9146ab4ff8ddeb6e259f26f7a8e354a7daf026f621888ac230200000000000017a91412d9875b13602e6fb1ebb04334ea0bfa1ece1da887230200000000000017a914509c26bd5d98491a06352e57a9f4806c30171c3a87230200000000000017a914d3b166181e1ba2890e0501f50405765c7ef9caf98723020000000000001976a91411a839044b8330e855c4a2e5b646bfde7ebe398888ac23020000000000001976a914b46f2a4fbfae5dac1695af164403c5ecbcffb2db88ac230200000000000017a914708669df1d3f412ee3f16376037b83d415e6eea78723020000000000001976a914976c91d993c793d471d45b52977a59c67d0c6cc488ac230200000000000017a9144ea9e8394dba70b7a2059a3fdab29d3dc24b592b8723020000000000001976a914af39047630245f7a09dbcc2df1c5e6b05e52889688ac2302000000000000160014ddcb0da2356df5996382f6c619e19075c66795cb2302000000000000160014f10dde77122dbaf3989a3fc51ba95a047d7e6fbe23020000000000001976a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac230200000000000017a9148f0462fa01da53ea3a4916df9524c7b580148a1087230200000000000017a914add27c375e0783e70c0e1893d7536f578a72a0848723020000000000001976a9144252e42746102463d2ce59ffe027fc498628d52888ac23020000000000001976a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac23020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac230200000000000017a914d3ffce5f3730680d86660a2b7619626f4914aea087230200000000000017a914f3b43564ec4ca3102cfba1579b3790b19f9a172087230200000000000017a9147bfc3e32ab123c59c31f18c0b057800af085c12c87230200000000000017a914bf075602c3c6a8cc0fbb7817b3b8910e39c6c3b58723020000000000001976a914b9285f59ef18bf6324b6a7d7c762eefa97495c9d88ac230200000000000017a9147efa989bc353e89e05b41aa83f1e758bafb3fd4b8723020000000000001976a914f529e7fcf018bf95d752a24f48f56e0e077f524588ac230200000000000017a914fe1be8dcc0713053e6696db244a0ba5cd120d98387230200000000000017a914b9e10c17d426f4301300adc0be9730c3c10cb8eb872302000000000000160014c2c7d1ae38ecc43d23c07c50e8407c2fcb56f0ce230200000000000017a91400fc5f48d9b7f505de1503b8aada7a623ea8e48d8723020000000000001976a914aa7dc81cd3969c1ec60f6364b8bc25af0141e7d288ac230200000000000017a9145322dbb102bf61d6e8b447f74404db3cd3d3766687230200000000000017a91435f41d5c9ed9c6404c37444a161e91570d5207ca8723020000000000001976a91410ac79341762b68fbfc9c81cd8a3a3181a19cf3d88ac230200000000000017a914f168a749f07d17b9d159e216a6f14e909cec04db87230200000000000017a914445cbecae0da26f18e79706909eea74efa92cd8d8723020000000000001976a914df60177b25a841f7653a0537a61257c88239d09888ac2302000000000000160014ae605bdf772b1e735887c8faf6890c84ec558e6f23020000000000001976a914113ed1eb5cb1a22e93cb987efe89ad2c2e47a80088ac23020000000000001976a914b5107766d16ee9a571201218c76a4093138d522988ac23020000000000001976a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac2302000000000000160014b6750bb468ffb489e61f4acbacb97ebade36882e23020000000000001976a914b48937b041e7bc5089bf0dd04e8b3d1fbf4c45ff88ac23020000000000001976a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac230200000000000017a9146149e19f8ba19861081213fa9e3f99b0be3f50ab87230200000000000017a9141e9549971ab07a4da0939a1b64673d492e5943b28723020000000000001976a914af3236f45dba940db11379dcd72e318366fd74b588ac23020000000000001976a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac230200000000000017a914784ca58d4326bf3001c23b25dc1ea7b494afc0f18723020000000000001976a91449b5aafa0b301bd762d3f389dc1a2ca5e2fe8df788ac230200000000000017a914923068b3c6fdae328b82b868204d4bb89fb524ab87230200000000000017a9145380732cfdf51ea21256657d0aef55d7b0ac6eef8723020000000000001976a9142865bfb6e61a0da1c2e56614e850bada641ae56b88ac23020000000000001976a91480af529a8766c58a93e2b501f40d1622d057cdee88ac2302000000000000160014e69f1c9a3b81b89ad20a81c850a447c3da8876c9230200000000000017a9144712974bec8b0896d8290beee2d78934962c483587230200000000000017a9145dea8bc267d8fa466f81bbf10c03b4ebcc92ecd18723020000000000001600141053d695789688c54e0d5f498993607d6c1d6e6223020000000000001976a914aa9ae2a459d82b5cd466b8c347ba264824ae341b88ac23020000000000001976a914b701e04a6ec31329868965beaa8892a13a202afc88ac230200000000000017a914d51727de340e868d9556d6056696bc1280c82d1d87230200000000000017a914c23a28cbffb6a1a1fee658319f97d949613b7ff487230200000000000017a9144ca679cadeeaf3647e1378a037114179e3e430618723020000000000001976a914af4876b92460407d9abce31a603efe3ead91d52988ac23020000000000001976a9144c58d15eaddbcd8e94f41da3d6ab3ab562590b1d88ac230200000000000017a914f73b1a8c661b34faddf540eb0df08179c47275e587230200000000000017a914c18a69d1cfd310c1ad97bfc3faa4d8806a8422b087230200000000000017a914690ca272524bee3d4f6978229a95fc8bb74c27de87230200000000000017a91491bd7b84100f183c727bd28ef5c4133d084ab43c8723020000000000001600145fcb966506c007712e14a639bdb20956d28d084d230200000000000017a9140a0d44b2740e394bd83a2dab9e0a657d523047528723020000000000001976a914ec457b6ebe3ff2f8a3d9d2007862b4f2654d34bc88ac23020000000000001976a914be4f07799950c3017fc64d696b27e10976a0df8188ac23020000000000001976a914de5d0e2e2a5858c59bfbe915d6d47540a9d8da4388ac230200000000000017a9145231d46cbbb0eeec58f3b1acc39e2fcf20caea9f8723020000000000001976a914f43fcfce83a3ca2f1d5ec8c3822134d51c1ab47888ac230200000000000017a914b552733b3e8d7d321c8144f76b06ea17be3e179f87230200000000000017a91487579d85fc6559d224ba7ac350c9aa754a64fac687230200000000000017a914da2f137b3047ca967a97cc4b1f8c77c92637d8e98723020000000000001976a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac23020000000000001976a9149343c1f975fda347a6f5a6e8850117d14b8ac9bc88ac230200000000000017a914192b034fdb7d3cec7677b83a3e5cabbb830f2f0e87230200000000000017a914b6e18667ef15927a920145aad31b3e9883e7e72c8723020000000000001976a914c708532d32e85d24efdf491167165dc0809e619e88ac23020000000000001976a914078fcc0ec36f8ffb239bd041e2429fde465419b288ac230200000000000017a914d0e4d3b53e419aad399f944524ec89a5cd940c608723020000000000001976a91474e3496ecb4db27d898a69aae4070e2b11718e5e88ac230200000000000017a9143794ee6318c3a17d0ab5e3e89e0812e9f113b7fa87230200000000000017a9141cbf3939c32350044043b12ad19b810c62b898f38723020000000000001976a914b48a2ac4f5b7a473956a5a3c9b9a6481220b303688ac23020000000000001976a91499a17c157f91f04bde3072657d00a8e8bcd2eca988ac230200000000000017a9141b7886b704f6ee99b548214294bdc7cf9a519a698723020000000000001976a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac230200000000000017a914f222831e0cba00afa94e627b16bfcd38d0fb136687230200000000000017a914839ffabb74abe668446b8279efa82602f43e61888723020000000000001976a914f2a299166c15eb83d12f73edf8dd7b95279a7de088ac23020000000000001976a914aa99bd3c545720cda1feee22c3054b1a145a016488ac23020000000000001976a914b92e137f61af0734b93b23f25cf9821a3f98d3df88ac23020000000000001976a91444825445c7c4768384c0bd1eeb5559a1c9b5b77288ac230200000000000017a9141bd345e9f19baabc4838280c12592f25450b5d1e87230200000000000017a9147da3e4f9e9098ec775fc65fde6bd61206de0debf8723020000000000001976a9148c939130b81f5e32c9669e8e894a500c0054e49488ac230200000000000017a914a7a87834de83c516140160d0077f3a51c116b3a187230200000000000017a914d7a6780dda8db994f01dc7c56c2b0299d528a8098723020000000000001600147f3f47d0895ccb7e504091bfbde07a1c2a27f554230200000000000017a9145a9b3fa58c1e1e2f1a64d22c25365eb1947276ce8723020000000000001976a914ea9b3dd49c68c0b6a83a64b5986429b25e218a4c88ac23020000000000001976a914af4925c69465d3cc5ad9451abe4cc0eb2a9005e988ac230200000000000017a914d5b90b70fdb7ab4e27215b3e38b944f3a0ff9e2a8723020000000000001976a9141644f7760fd97537563cfa56f656d1a2a79058c788ac230200000000000017a914a12a24fe9dd245176d73d093af883db5721dfa2b87230200000000000017a9141b92ed7f02c99991f52cf2a0b7c5d5aa22307bef87230200000000000017a9144160873048fcfc2140e022a768706fff45ecb0c287230200000000000017a914cdf007fae733d3b6513747e7250edf40d81e3f4a8723020000000000001976a914adaef2451df664e5930e4a16151ffbaa31aebb4f88ac23020000000000001976a914aaa0138d028ca416c8e5e11ef935887e19e7ba9088ac230200000000000017a914cfc588e7781e5c5fd30d063dceb9efd68771e6768723020000000000001976a9143da156ba4248c4ab72a9819570cf1e8ce582f26a88ac23020000000000001976a9145cb787cf3fd055de8b0e00b231aeef70ad3485f488ac230200000000000017a914e8c0b9deab2de07a1764a8e889c02a58fd6d3fa58723020000000000001976a914f9c9a198e91fc0d64b05c34d5d16ddfdc77f28ea88ac230200000000000017a9141f253fabb392c0b55d24d5bc0b785fb8629c343b87230200000000000017a914c89f31b06a9e9345e5149193d1c4aa061a83cd0b872302000000000000160014f84420e7edb7528587921e95be3028eedcecf9bd23020000000000001976a9145fbb64fa612dd13c8fdfaa5556ec6d20efd223b288ac230200000000000017a914c6a964950550b0854b50303e4c83557cfe469a508723020000000000001976a9148644841d30bc75f67799cf21d8d2858639fc465488ac23020000000000001976a914008c07e4f5c8b66cf082b67f44ff889062b3822588ac23020000000000001976a91418440870284d628f74c2b2ed2343501f5c62628288ac230200000000000016001408dce91899a1069447d34603d9f81d4c1e5404bb23020000000000001976a9147db14d76012b3d644b140a25daf784bac2c2e77588ac230200000000000017a914e6d692876dd35ef6d5be3412f05260bf24970a4d8723020000000000001976a914aa92e947687bebfc61d93d50cc7acf894224690588ac23020000000000001600140b577e6a1e77fb3ca7a98b83df497dd11318367223020000000000001976a914aa79b0f655dc148c5c2081afea91ec6a33b512a788ac230200000000000017a914c90eac718e17e740ae90f671c5066e5aa6257dc087230200000000000016001463b0bee36f64a4b3266c308e0902c7497dd10645230200000000000016001460cbcd34cd319c943912a691b4935747ed5050d3230200000000000017a914f6151f0306d90c59e162f33be8d7cdda2ff4029b8723020000000000001600144329c08b49f6fbd1141a79924b60e348ee875aaa23020000000000001976a914af35a7cc08f576e074d2fe0ff9e182790f0869c088ac230200000000000016001444a4666937f2fd39c91c68e09a28ebb8615bb72e230200000000000017a914ca4439611cb840f74c0fbe379bd7147ae75605848723020000000000001976a9141dec0db6c652fa87a496812c7864686532ab5e4e88ac23020000000000001976a914af3970b6a95a7c0f7313880787829c1555c0d2f988ac23020000000000001976a914c59fbde46d484eb120f4a02376fa66169173f1ca88ac230200000000000017a914351d0aea7c875750ae48813164724ca747ca09c4872302000000000000160014e60e1d9376689234ba92245873b2a1484fa1d75f230200000000000017a91481cdf5919633ff95d90fc06ce25a43807ada428687230200000000000017a9142ca167a69bba264824e5e5f44733223a9c10a7e48723020000000000001976a914aa7c0ea4c035b4f29986e0c2e51dcfe62e81eab588ac230200000000000017a914d6b81117572768c33f7572c72927084e3c74b8a787230200000000000017a914b943d84bd547d31f897da8530f85b61009435b0c8723020000000000001976a914aab37cde379b44b74325d9c6e569aed80e40c11a88ac23020000000000001976a914b4716f26b9d19ffe5a3d0ccfe28b0ea54db0475188ac230200000000000017a914ec3ecf3d28a9db726f087b010191df2a68663b808723020000000000001976a914aa9c56af30ce4ff3578eacc27b96c91da597f40e88ac230200000000000017a9149ae88d1f6b9a7366e7c167776d7cef8979146c048723020000000000001976a9141e29fd9568bfedc38f55dc8aa47df455dbfb57c988ac230200000000000017a914f46742044d0b31bdd43f6c97d66e7e16efa973b98723020000000000001976a914745686edcc0c8d82f8edb3e7511ba8ba9d60d9d788ac23020000000000001976a914aa9d85a31d9501de7dea85f4dafad8677acabe9d88ac23020000000000001976a914af4ab78194f772d2702eefd8df79c8d5075404f888ac23020000000000001976a91403314b8913216663a1f7dfe739a715bfb54b1baa88ac2302000000000000160014c5eac95536a9c6412027cead26cd559020e1758523020000000000001976a914f52ac66ae884b43c882d8d3d46ad142cf7e9cbda88ac23020000000000001976a914319bb40f6db34ba93c1fbb630b3dc1dfe5a3d41c88ac230200000000000017a914f8dd442d45ac37dfe305afe38cf569682f3bf28a8723020000000000001976a914aab351cbfb66c39d0dcee7cd33716e2f06b7a30988ac23020000000000001976a9143f74de1a49249ec74120a091dab1862484d65dda88ac23020000000000001976a914f53d8204cb80ef5db360b302cfc53f0a1bccd65688ac230200000000000017a9141ba29df6a4c2cf7ac3e90513539b19a8ee790dcc8723020000000000001600146d4a4c66db0d0fa74802867b14c69c0cbc1f65af230200000000000017a9149e3071e61584685f40354f8e7e974c442eaa18ae8723020000000000001976a9145feb4a3fb6c69e0985fbcef7756acb3909a1ecbe88ac23020000000000001976a914af5a27136990e3a258069d135f1477b5f2b7f06988ac23020000000000001600144df6d6b372d933f62c5319fd4e05dee4bb4307a32302000000000000160014e06c9576f5618b9bcc9993ef0501807ae3d3da8823020000000000001600147e4f5a19ea6239ecfe47f9038b6e4788fbbfc748230200000000000017a914c3745c1be3a2bc17ea3bc86ec8674ac16f1659e887230200000000000017a914e9611987dfacb1b2cdd11c3fda815a729434c5e087230200000000000017a914f96ab0b89ca2c4e251bc36a5b4cc079e4693ed5c87230200000000000017a914e25c3afdc83c938d55f9c0b78eb40ba2093ca5df8723020000000000001976a914e038febcda00af1abe04b78ba0a7e8256b80adcb88ac23020000000000001976a914ca40860c6f8646a4ab4cf3446c5b4df90587f7ab88ac230200000000000016001488125ef6f87783a1e2df021946097bd2d5c2a0c8230200000000000017a914e4e4259a88ff887113217b906a5386d2a57509118723020000000000001976a914d9022fa775e51754d49b678aab7b44f9f55699d088ac23020000000000001976a914b23cb45f995fc6981ff2d4f9e302aa5e7b4b841e88ac230200000000000017a914ba200c89b2db6c54c7568031299007c184273ff98723020000000000001976a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac23020000000000001976a9149ce43110d9b26ac0fb86582b764019296736309a88ac23020000000000001976a91425b631d4b3ec47eea5b6a9ee745ebb90adb0f20f88ac23020000000000001976a914aa76d22684424dc8fbbb7315169779e39f5cec9488ac23020000000000001976a9140652c29575018f03af6e406dbc8420dd36d7fc3888ac23020000000000001976a914aa9ffeaaee11cd977e4f173954786f3e1a929dda88ac23020000000000001976a914af4f942b3b4c6b2c4794ce205deb3f4450d83daa88ac23020000000000001976a91465947da6bf7153f8ea06f8c31680a3e1a9da28f688ac230200000000000017a914764cb9373ee4c19d3f75cdead10cf592aa7ecb5187230200000000000017a914226fa1d589d606df8fca8b75f5c5ee3321f3b83287230200000000000016001488a4a2eb39939cb2e171d38aef3ab602f1b6d8bd230200000000000017a914b848318de9e87f969368f77e5cd4f943eaa4abf28723020000000000001976a914b92ef2dd5f2980568f7b9b2d4dee68b516d717d888ac230200000000000017a914c2f4f39cead333aace56ee2dd9505bf59a4b13a78723020000000000001976a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac23020000000000001976a9146643621cac3e8d081d5f5b6baf84751d38067b3988ac23020000000000001976a914aa95d2d54bdad5c24364788c08b029375822ef2c88ac23020000000000001976a914aab525233f8dbd00aa6f1a102c76caa0b5452cfd88ac230200000000000017a914f807e3eb5622bc9aebd23fedb10f89e797c068de8723020000000000001976a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac23020000000000001600141f461a90161d0bd5f4e2117f33fb904d49b7592b23020000000000001976a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac23020000000000001976a91475cdf3b6093aad82343431ebfc36bcf8a5fa1a1a88ac230200000000000017a914c19b5a264e11630b14d20630a0fc8437af6ccf5e87230200000000000017a914d56834a7b9049ab5c33d8edc7130841eb8febc788723020000000000001976a914b92fd54a6a6b971befd22315a42332a32d64e54188ac230200000000000017a91438acd47db7ad63c3b58a2eeb2dda7b067c02110f8723020000000000001976a91497dd5e276317c3478337d1bb9bc7c90bd25e83cc88ac230200000000000017a914ad0647563aa08889ea3f4b2d385be50163563626872302000000000000160014aab72fc1064931d6244eddcd682382d2d48deac9230200000000000017a9143c3d76e5bd8593ef47a29664968a1490a82fea228723020000000000001976a914af3b0b1fe536158db82bc8e02296bc4585584db288ac23020000000000001976a91457e3421fac8594a282de45e25d7fd8e1ec742c9888ac23020000000000001976a914af32a0ce718af6bdec98743709368559ad8f72cc88ac23020000000000001600141720e3bdbc2d0f9947774b726576128659c1b3b0230200000000000016001490b30cdb38bac0b7270dd2a9fb788bdc099a758e230200000000000017a9145fad233725cc75ee7b3bbe043dbe5cfa0981c10e87230200000000000017a9145edc3ca9a4a668040e643fbc17c503c91d47579c8723020000000000001976a914af6fbff62fa0d1c4f4e03cb0fe34f5da6df926f688ac230200000000000017a914083d95f3721bf0e209e47ccea2e2d0fdbb6f0a468723020000000000001976a91495f0d4d41738523e4b296357608279f1b2627b4388ac230200000000000017a91453746da25186819e7d08730b411c20040808966e87230200000000000017a9140d6e1108b477d8d43528c1d2fc8378bb559933dd8723020000000000001976a9145b2a5ee980663c98ca775820f25b57c39474024288ac23020000000000001976a914aa930223a0f8761408ef9f6992bd0c1198d5c54888ac230200000000000017a9145d331ed101ed31abb19391bd4fe3d73ed05dcab687230200000000000017a9145018219fee281effbcff61098799df321aa24c2387230200000000000017a914b7b1461bdb26e4fa13e4f96826e035d4dcbded608723020000000000001600140f27aa70b6373e8a4a25cb4c7162050a639dd59b230200000000000017a914a8bec36e8fafe1e2f594b953736463e8330fbff88723020000000000001600144bc0eba0f3212d953a6a342d2fff6689e27a2b8d23020000000000001976a914b9261a6ce3babc62409fd6fd2960879f99ad310e88ac230200000000000017a9140d28ed5d5542c721662261a2dac5e71a6e74fad687230200000000000017a914b087304815ebbbff2ededacaec1f5cfb152bd66d87230200000000000017a91492eccb947fc709eac2ae0bd3aadabcaaf996112e87230200000000000017a914ec4325a9fc7944a86f74bf81d3a7c2db3b890bfa87230200000000000017a914dea4ad768f75205d5d805f90e70d7f2684a19fe58723020000000000001976a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac2302000000000000160014b2984bb8ad82b496fbc03f142e309eed5a6255a2230200000000000017a914196083103b472aa6830386561902673e83e0e0ad8723020000000000001976a914751f124bcf5d0b44ed1cbf2e0976f6c437ba8ab488ac72e81169000000001600142b1841c3bc78691cdbe3b7a6eb88064674bd3e8502473044022071982f034bc30b4cc1218be6805e2c9fa3d7e0839313e20cc6c55ae425dc0600022079de9446092780177e1ad103a774a69be0c160c0cf819875ee6c83ebe688b0530121038a0075f97e57b497ba99aeb3c3cfcbf44a69e019fc4656200e5329e618201f0ba02f0a00", + "blockchain.transaction.get:239cfce453bd562b3cc820e4bb9178fe4816bc73ab62292f33088d1893b1a3ec": "0200000000010130706b933a2a4d8ed440f43fc366847f5b8600a125b4f66a010ad70066a7b6311f01000000fdfffffffd0a0123020000000000001976a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac23020000000000001976a914075b7dfca1465daa6f51b8497af83c10042ef39988ac23020000000000001976a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac23020000000000001976a91404d9d15e67e6f20551992e03039711e59281f72888ac23020000000000001976a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac23020000000000001976a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac23020000000000001976a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac23020000000000001976a9143899761764d0fce8572cf3eb34333613d43d080088ac23020000000000001976a914d85ee8f164fc01c064de7b716d87135547a2f59588ac23020000000000001976a914f526a5fc2cb4d8acd9d2e802195b8b04d1e04b2a88ac230200000000000017a914d6f2ed1d24b4b5747cccd8bcedf1099f414fb99c8723020000000000001976a914753c6bbc7e936d5d874162e412778dbdd9a61c7788ac23020000000000001976a914508fbd107fb44a9b779a061b6ce312ccaaf3730a88ac23020000000000001976a9148d0331484de0aea32b2c5b6a0c8008b032adc7a188ac230200000000000017a9140fb03a13f4c0a027509f8c4fd245f483551b6c108723020000000000001976a914d68bb25be12d6ac34df0cf622a1c2e48adc9f43488ac23020000000000001976a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac23020000000000001976a914976c91d993c793d471d45b52977a59c67d0c6cc488ac230200000000000017a914160b09174fbe0904949094083fe2783a2eef39ad8723020000000000001976a91408f456472311b789bf8885f5861b4e875421b4d588ac23020000000000001976a914f524ee187fbbb2a8997c09ded351b251f5be550988ac23020000000000001976a914f9a8ddfc7f65b199c61e633199bdb18f2e38eefd88ac23020000000000001976a914072af0864f2910e6130f3276ba0e5a87861a713a88ac230200000000000017a91444b283b839d9d5ae5a0bfbde400166a6e69b99708723020000000000001976a914f5121cb0478bab971f06c33345e4ebb4e66e973d88ac230200000000000017a914a79d2d1e0f27f7e8a10f0c99fbe700e433089b958723020000000000001976a9140791f1f6600311c3043e4e247050833567bc2cdd88ac23020000000000001976a914ce4551083b2c0c436a448de86fee5bb58c4d7b2088ac230200000000000017a91476afa231de5e191ad6fe01aa8675f77596d6db8e8723020000000000001976a9140f2a0a794c0fc4a67218b35f85cf7357b99ed42c88ac23020000000000001976a9141d58e5fe24de31ab66da56c30edc058046c9aacd88ac23020000000000001976a91473427601f4b8fcc0f16c4b54eaabf1ff64a8b7f888ac23020000000000001976a914f50f3b1ab21c0c17eae49f3abc6e47d4ef06bd8588ac23020000000000001976a9143da3a798e936602a071a26c51bac602411caf8e188ac230200000000000017a91431ee9b12409c141a0160e48204b95f3bfa5c9d6487230200000000000017a914047edf2df9e10faaacb3565dc0e770569b8ce7d68723020000000000001976a91475e30dd85efa6a11b164747dc3bd92d468fd35c688ac230200000000000017a914346e1c1b2fe6abc46433d8497c7be955184648b987230200000000000017a9149e1241593b98b8816454ae994a57f21a310f6a618723020000000000001976a914f522e556c17af3482a3a829ec9dd752355c7f34188ac23020000000000001976a914f5098451fb6ff8fe75a5e02c58a8eabb1b4e54de88ac23020000000000001976a914a963a244adfa7c473a408242b5cc6b2c090632d088ac23020000000000001976a914d5695ae87653eff01a0129696d91c7cd2631ef4988ac23020000000000001976a914c1e19319ee0990accc2fcceb91e14848cdded11a88ac23020000000000001976a914f53be4a1d6ee1602fe94db4e28ee3914f66839d388ac23020000000000001976a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac23020000000000001976a914f9c59f8d5c22b51fe82933a15da6a68f71cc82e288ac23020000000000001976a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac23020000000000001976a91448aa7e31474a9ace7c99b7d193eb26d7ce5bc5a388ac23020000000000001976a9143e827751265639a0ccde05b3f1d931d4fa3d5c3388ac23020000000000001976a914f9ab8a90e69dfb92cab5055bc1f617989b74448d88ac23020000000000001976a914a1f4c8d3bed6e474fed77aeb94c960ac36983f2688ac23020000000000001976a914248de298b5c6c0caa01b031917d6d779166aa13588ac23020000000000001976a91464e036a68a065eb2d6b10268ce89156933f0647a88ac23020000000000001976a914c201f40d2b14170b4972390917bf63e4c217281788ac23020000000000001976a91423ba1189cb027a21aa0a1b21fecf620f989ba33d88ac23020000000000001976a914f98f502f845c16053134ec2a389054dcf734c99788ac230200000000000017a914013191f62b689b1fb49051c79f91e357bbca812e8723020000000000001976a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac230200000000000017a914606795cd3a2d1e300674e343972a46d2c7edc5108723020000000000001976a91483068bc8913bb8fdadff3c8c5904442af64deae688ac23020000000000001976a91414ea3a048a980494d67eb09a1b087ff67476555c88ac23020000000000001976a914824ea5a10d5d66a369bc75d8dd8f43e03d04b5e288ac230200000000000017a914498b3aaddc99c5e9614940b2d3dcabb82f07727787230200000000000017a914cd1e44c6b5e40ba22ff5e8e6b6e9ea9b7d2bbb4a8723020000000000001976a914035114d41051bba13764b213f83ff6ac0ab38d1d88ac23020000000000001976a914f500565551e0e6310f1bf666e01a122a6874bb3288ac23020000000000001976a914f50bfd4764b4d067ffab4cadcc837a4e60e3826b88ac230200000000000017a914ee8f7e7dba5727715bc942e06cb147ab6cde0d718723020000000000001976a914ee56cb41d9537d5027b5f1b81b46f8238d947cf888ac23020000000000001976a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac23020000000000001976a914f520a923240a647267511315ec8a2ef55d43238888ac23020000000000001976a914b1a2508bf9de1ebdddb83b40c2da622de0d2bd3488ac23020000000000001976a914f9afcf9938f1dc4c4233876a22ff2bb487d9362c88ac23020000000000001976a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac230200000000000017a91425902e7c0e4c6eba8ff6fd95476bbb2039ea6b018723020000000000001976a914f5041435761dbd09f9d3f28f8164372caa40c89688ac23020000000000001976a9149c361e9b09fdf904b52854d1a6620d8746ffdf7f88ac23020000000000001976a914f4e9c12379aa3ce128e085d7b0159a7934ae9ed388ac23020000000000001976a914f4f90387b64de04e24555b77b17a403882d87cde88ac23020000000000001976a914a9ad9689dff7facfdc29cfd87a8fd3bcffe2a79e88ac230200000000000017a914caaa6675f8604e64b6836e20587e8ef8d37641638723020000000000001976a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac23020000000000001976a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac23020000000000001976a9144c8cbfa260db767ad23a8f7b01f67234f3b5f3fd88ac23020000000000001976a914f4ea0d90b72c09551248ec8f498ec929217c479988ac230200000000000017a914709ab603bb0403999c6ce7d92ed4e8611d6bf4bf8723020000000000001976a914dd2815c87bc2c695a9449c25fe296291c1e7514f88ac230200000000000017a914487a651731d8b2277c0ecbc263b68fd594098b138723020000000000001976a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac23020000000000001976a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac23020000000000001976a914988288362cb49f5b7e86a0e815d948286b2bf06088ac23020000000000001976a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac23020000000000001976a914f9aef0728bf48763d4dae15f170248fdc8d6f47a88ac23020000000000001976a9148d17f5c88fc5a09857fe8f75fc823b587f2f9b6588ac23020000000000001976a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac23020000000000001976a914cacc575af4397af297efeb0604917859693ca12088ac230200000000000017a914e440b01e68b9daa0d5a2cb52eac998e8a1164fd78723020000000000001976a914d6261ff8753d4f144c46b0330a9be617304a702988ac23020000000000001976a914f503737f00efd9d7d41a93092968d7b3f268e8b388ac23020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac230200000000000017a914cd0200882f48c8c99c87d3613df231c5a19c56078723020000000000001976a914f5233d795b41f6b1ac511170f2bafb94e449754888ac230200000000000017a91456d6fc3dc432e46675c229e0ee842c49f7bc8bf787230200000000000017a914929e735f1a71227e001d777b95c992ed00de17be8723020000000000001976a914c0d06e378cc88471c4a2c984fe9039bd6a231b0d88ac23020000000000001976a9148353ade1dd41a70e441602ce638a2f9ec7f4e91688ac230200000000000017a914380d9a4179469cf2d310b4088832de705641f01587230200000000000017a91427f7a15e10e1df4d41db15f2bc5e51f0811f00d78723020000000000001976a91487b35052183625aefca1e721e109f65f2710699988ac23020000000000001976a914659875d96ba0e8ef7126faf5c3bdac7de0aa0ec888ac23020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac23020000000000001976a914b5107766d16ee9a571201218c76a4093138d522988ac23020000000000001976a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac23020000000000001976a9143f527c6288ee1b3b232271fe5ede1be9902c6b1288ac23020000000000001976a914f53d4f215a2958ef1f938b0f7b3280cb9ae09fc788ac23020000000000001976a914c3f6e14183bfa5a5fc97b28acdc99e23ae205b8d88ac23020000000000001976a914f4fe11a650a9ccafd0637310e698b6a784f4e0a088ac23020000000000001976a914f501407b5413a09c19a39386bdd5b64d3ee0626388ac23020000000000001976a9142369e10cbeba03a9fb0f7093420e34236d0bb47f88ac23020000000000001976a91407c7f667097f229de67859f03ec44916b1c88bbe88ac230200000000000017a914ded69c02528237483a6ee0bf2047a891dba8ac3987230200000000000017a9143ca2c7e07daef23c7e2126ab4eaa1ad79b460c2c8723020000000000001976a914d6d8f823a7673bd3da372729e9006ee2686340ec88ac23020000000000001976a9142e1e14e5a9712decb2145a08fc99e7138b8156d088ac23020000000000001976a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac23020000000000001976a9148c939130b81f5e32c9669e8e894a500c0054e49488ac23020000000000001976a9140695daa9fa3342429a648cfc7f89392b37d4050688ac23020000000000001976a914f19e09bba24bb76111b502897675a05de4bbbcdd88ac23020000000000001976a914f9a8dd9cebf8a83e68a2cec80d7c8cfde48af07988ac23020000000000001976a9146fac8571b6b103626820f97b023f5f0212f0342088ac230200000000000017a9140e54ce77063433391566639ab155e328b7464b098723020000000000001976a9147e7ed0f5a912aa17fc6bb04eafa1f753a3d73f1b88ac23020000000000001976a914f51979a7aff4f01e13fb0b1e1203e1eeab0418ec88ac23020000000000001976a914885be2340ea7cc0aa2f8646137d922142d26474a88ac23020000000000001976a914be3795b8eda8dd3fe8e802de712d9014451e76ce88ac23020000000000001976a914e94415e89d0fc87d53713add7431764b742e8feb88ac230200000000000017a914b14e8610588be42584c78425c8053f3fad86e0808723020000000000001976a914f4ea9d82a3f12af0b8227107ec191662a3658e2a88ac23020000000000001976a9141535968fba30b3b3145c45b7a6e3a31c83f2c39f88ac230200000000000017a9144e640f46cb6d9c7b66ed1b794e6b695e9c93bd8f87230200000000000017a914f251fe79c6d72cb70383722e63b190b14be9ccb387230200000000000017a9141188221d3fcab2d0ba2b97eaf33efb5f28d52caf8723020000000000001976a914fb7834ca4d9a6efcc932558ba152d786939dec8c88ac23020000000000001976a914612e5c1af431ef3815580ef3c422d6295579e90e88ac230200000000000017a91498784d131308553967d02d1a8ccdb1dfd65f38a087230200000000000017a91418adc89f445b19b88a350453a4c85e760d1a0cbc87230200000000000017a914ac0fb26eac0e6f613d4f1a19a87b7b75632dce1a8723020000000000001976a91445110199352e60642095c72529405ca82803ee4588ac23020000000000001976a91419a3fd5ade3af9f102eb59dbbd1305727f09157588ac23020000000000001976a91490b335b081da2978f78d3cbdf01c0302035d170b88ac23020000000000001976a914f5205dabf4be1ae43147a783e953d2750bd1952588ac23020000000000001976a9144db9574e83120fac3f05bd1aa08659fc8ef5701688ac23020000000000001976a9143730c30e21c84284be8591c4c57c55b76160928788ac23020000000000001976a914f449285a885d3cea6ca6a6f12fea7b9327642b3e88ac23020000000000001976a914ecade0ba0ff81970e8e2215330154df5a054a1e688ac23020000000000001976a914f9a8d854e6f232a70bdcb74061ebc84fda55e69e88ac23020000000000001976a914a15eb54cc568018725891c226b6d346a2eab298488ac23020000000000001976a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac230200000000000017a914cc7edb9e1df7645dc333cf7613a90aad40f7923d8723020000000000001976a91407736f260963b708b6e2b5c02283eb4c8fdc90e188ac230200000000000017a914793e95b2284e22692dbed9f396fa1311691a574e8723020000000000001976a9146c58a5fd4c6e3b3f556c416270ce4c16e6ad00f188ac230200000000000017a91439e088ff23c8e45a24864c5224f2d03a21d7d3378723020000000000001976a914f5247f49d6708fa11b221d58676a1ccec9b6c1b588ac23020000000000001976a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac23020000000000001976a914563c6720e1434d19bd4d426ee8faa04295de043b88ac23020000000000001976a9140ca9dd8ef5f704fbf285584b78262ec3e47fba9a88ac23020000000000001976a91428c42ed3a3e8dd299b981f762ef1ff53b254d05088ac230200000000000017a91409891fa2f4e54cfd8e3acd4f53b173a9d692d3b68723020000000000001976a9144b0729a9cac7f29dc121b2f28b008b2a2311f3f388ac23020000000000001976a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac230200000000000017a914a08fe453058ac4d0c85415f760646c94bc77bb388723020000000000001976a914ce2d6072a51a54bfee980db7ab823e08c9e87a1c88ac23020000000000001976a9148644841d30bc75f67799cf21d8d2858639fc465488ac230200000000000017a9149e1b04356013957f0865e84e06fb59cc19e2e55e8723020000000000001976a9149d4d2758a88c68644053c435600db62100a9b75788ac23020000000000001976a9142fa2ed061d83bd04df0aec643b15ca380390d3e088ac23020000000000001976a914d0475ce09a356811c8bb361ecd2285294f668dc888ac23020000000000001976a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac23020000000000001976a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac23020000000000001976a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac230200000000000017a914f13067c43cdc7e4201628350cfd4362123a73b9b8723020000000000001976a9146bd6545185c83e9ae7f4c5227c7a9afa34d3a41b88ac230200000000000017a914f42b340dff1ef2d239c97d8ba11d223bae8cdfaa8723020000000000001976a914269cc7cb4632614c575f3674c8ceac0bf2e0429488ac230200000000000017a91431d3e0008a5f78ffdd60d979ce3f594133dc5cc28723020000000000001976a914b77e68177d0fef51df52370af08f530cc8e149ec88ac23020000000000001976a914d1cec8b8d70d2952c1cbff35d099a47b34590fea88ac23020000000000001976a914365b822817453422dfb41689c255861d993b4cb688ac23020000000000001976a914f5391c005ad45c0e385e36bd67b0fcef0424ba6988ac23020000000000001976a9149542bd8a020a245ba5785dfeb067ed5d898db46488ac23020000000000001976a914f513c898a5ef40fb6e5b7c438e39306119cf55c488ac23020000000000001976a914cb674747b8586b6536e40eb78f29155ebd8c60c088ac23020000000000001976a914afb7564e539d77b65f308aa65c4c09e2f7f463e788ac23020000000000001976a9146147395a0b8fcd759fcd7f40345db3b0d7e26d1588ac23020000000000001976a914f53919cf4890d0d0cbd559f43eb703d890cc4faf88ac23020000000000001976a9147b506577e65212ca6ae1125797fa713abb8e88b188ac23020000000000001976a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac23020000000000001976a914adbd9f3d4b5a61f894d3d2062dfe295eaa04096988ac23020000000000001976a914281063cf518ce1fba2fd000ebfc836de7813f33288ac23020000000000001976a9145036f8b276748ab301ca106471b6f8c05acd925d88ac230200000000000017a9145035f52bddb9ee0044d1796b773eef31087a38478723020000000000001976a914536d303cd4841afeb98fb4c43572b7efaa8535bd88ac23020000000000001976a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac230200000000000017a914348b5571551f0498d82fbee912e95e2c5dd82cc68723020000000000001976a91479fc20ebba0c83e5cb1924a9c99258a1a10d042188ac23020000000000001976a9144809d98c05fb8acdaeb4cd02b0cfb418fb3e42d988ac23020000000000001976a914f52681042537c33c4541d80e4974d7ae822b6f4488ac23020000000000001976a914713d27932d092b1e66772ffb44d46bda8db740d288ac23020000000000001976a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac23020000000000001976a914f51602f02babcc9efc955da4b81985450a2809e588ac230200000000000017a91462c09109fede9f918256001c2646365b5180707b87230200000000000017a9142db434998d3c9ff40f9ef1aa724e2f0a6fca25b487230200000000000017a91434866a596d4fa024e4bf48de50d25729f71918678723020000000000001976a9149088551764d2352a45c3d3bd18425780e8a0d60088ac23020000000000001976a9141fd35df583f6f9637609cc1119583fc8b24441e588ac23020000000000001976a914f863bf8480b78ebccb4c9b23c4261e54ebe6f72488ac230200000000000017a9143e3d03ab1d0358cc01395c59f12f6518604597008723020000000000001976a9143b07588b387a9b93e338ad563db8ba105e1069f888ac23020000000000001976a91473d95c0186c5dc5511a688858ced666f1328c92688ac23020000000000001976a91497324d7d9b8a78494ec2102a71222b192f3a8c7f88ac23020000000000001976a914babb672b8f3e761773f3fbf2122e706af3547c5c88ac230200000000000017a9143b6e274ee42803ab8c97a1437d98f6997a9006b287230200000000000017a91417c42f0ac3509e70edb190f5c5e8af11c9b4eb0d87230200000000000017a91418b984b775333f60c4bd136196e2413d6499a7bc8723020000000000001976a9147d9b7721645c954c0f8d2f96637da98b036c317588ac23020000000000001976a914f5286ab069a32a7d6bfd4bc7b68a10c7e1be7e1088ac23020000000000001976a914724a879b56137c03f145b65b2dd6596a328fc18388ac23020000000000001976a9143567ca297d30484e533d25bd28661f454e028a0088ac23020000000000001976a914cac4195b5e969ce82d6f99f8dbb8790693172ade88ac23020000000000001976a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac23020000000000001976a914f9ada987d8189121ff1da0e0138e6d77d8a2a62288ac23020000000000001976a91493de81a4087fd865f84657ebe23d6197c224ec2e88ac23020000000000001976a9148d4d9a706de8c210796c8af9f715bf747e48ef0688ac23020000000000001976a91403a8e9e6506e176d6d6fafdf7d37c6794888430b88ac23020000000000001976a914815e3c0e054e90911bf13f1291301e3548c2591088ac23020000000000001976a9140300e8d008e1786d431028a6688d89b9d19c5b6788ac23020000000000001976a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac23020000000000001976a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac23020000000000001976a914f4e9b5327f668f744febbc2c3c11679e5d38b5c188ac23020000000000001976a914b701e04a6ec31329868965beaa8892a13a202afc88ac23020000000000001976a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac23020000000000001976a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac23020000000000001976a914cbe2a1269d1a33ad8df912709d53d8bb426d737588ac230200000000000017a9143fd953c9ea2540eb62126a6f1f9ff9bfe35f86808723020000000000001976a9146dd07cce3b3a8aa0008a546b6a49bbe57b6c269f88ac23020000000000001976a91427866895d83f2c1625b63902090fe9f9634205ed88ac230200000000000017a91467dbda53ac35b009de3b69f5f20d6933626d135087230200000000000017a9146eb526b0c4472d9b0a5f7b4da1d243cc64ab215c8723020000000000001976a914c9afcbd2af611bf0fcfda5512c6851bff064bfb288ac23020000000000001976a9141fb3982ea323160a37af41447cef9f6d998ed6bb88ac230200000000000017a914ad0a703b9a72a83a931a8513fe3781a116caf5fc87230200000000000017a91464663bddf61b6468e070339f17f7f430e44e794987230200000000000017a914e5ec4325d33e804f9b8e0c8114a1762da90f07258723020000000000001976a91462385809aca4eede27968128a65fdc31df551eca88ac23020000000000001976a914f4fdca6ceb2a4263c9bec5952419da7e5bda90f588ac230200000000000017a9142a46d91f5f23c739ec1052bfdfd5c27300cfc8a587230200000000000017a9140635bebb301fa4f68d152395ebff1a1f5f5f76fd87230200000000000017a914494b17a5228f70c8ad1e25d6daa18635dec6da4c87230200000000000017a914414490f39d09cf3b9cbb6b21305c395683abf8dd8723020000000000001976a91450c6cb28247f040086ae749635183fae105d6d9d88ac230200000000000017a91494cc339ecc90537b95637786f2152e7a1e6d7c398723020000000000001976a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac23020000000000001976a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac1f03040000000000160014eb0c7e349da2e1d672c9b0e4100065504e2b9b8902473044022026d36ca95ffb702875b19086b9cef8836c12a2d2af3f31f906e8f66315bae40d02204f78a1ddce2cfccd8b9144cf77e1c70d84c938733ed927f8ee85a0828078003b01210333b7cab374313ca719ae4c2096c793fe26d544dde17bc5e0939e6aaa3617221719160a00", + "blockchain.transaction.get:eae4537e85ef54cb20408a385115f0cf88090f27609d4fa0f384b4aa633999a8": "020000000001019e444d3d80fd390df748263a21d50cfb00d6564a4697e1629bdb47bfa6ea76db1001000000fdfffffffda60123020000000000001976a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac23020000000000001976a914075b7dfca1465daa6f51b8497af83c10042ef39988ac23020000000000001976a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac23020000000000001976a91404d9d15e67e6f20551992e03039711e59281f72888ac23020000000000001976a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac23020000000000001976a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac23020000000000001976a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac230200000000000017a914ca9c6e90f3a210be6535d5daddb056a553a7003687230200000000000016001446a8b9d509c06ff0224220b3b91828e7a1138a6c230200000000000017a9141c691b58d2733e67dfc671a464e3e767f935f17287230200000000000017a91494cfe33fc036ba25580ba43475d8076114638f2387230200000000000017a914e1172fcce580c8d3d18ba2e1a87c5c691b9c4a3887230200000000000017a914e34be8cd2f06bf9bc2ba62cf1fc3df14fcb406408723020000000000001976a9142ca0288895b3a9907def812d78b18b11b0e9a36f88ac23020000000000001976a91494cfde57c20624387e23c13aa7912c9df7b7b1d288ac23020000000000001976a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac23020000000000001976a91477ed13d6ea179f7758d06792402740a2f5e3feb288ac230200000000000017a914126b76396676975db775c89f90c64a7146c1779187230200000000000017a91476f2d700b5781839e3aeff07918309b4f1fc459e8723020000000000001976a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac23020000000000001976a914b7c8933264deef54109edb98c00116fe79e62cde88ac230200000000000017a914641fb1e2da3abcd0bb4baab8b5f2c5a1eb3cd9858723020000000000001976a914c0a2ccf1d637a6b323ddf0384d86408126bc3d9288ac230200000000000017a914b2799b53eae70e15839950697831d9fba734b82d87230200000000000017a91401e9a475206b9ae92e26a68cb99762f0f939da5287230200000000000017a914219301392120d9d5bd1b0b15b25efc49745c05f98723020000000000001976a91428b6b4e35ea5da0b61c83fa66bc80556e183596588ac230200000000000016001431afb2fbcbf7fb3ef942aab2ed999209f56d9afe23020000000000001976a914f68ef5654990e45879bf917db676025b7d525a7d88ac23020000000000001976a914a124b037ee6cd00905e3dac6083a710e2038c8c988ac230200000000000017a91477d5aaeba3112e3867859d02c401a7b1dee722748723020000000000001976a9142e1e14e5a9712decb2145a08fc99e7138b8156d088ac23020000000000001976a914bb6da1d4a6636a12a2255ae82c0a54976c0088e488ac230200000000000017a9144aa50ea34d70bbb08f71cb5b5829d9df69b5c7558723020000000000001976a9143ecab4486de975226f9080f36b483d91143ee2f488ac230200000000000017a914647a45c362d9dd25b5c05995b85f5e3b09133c1e87230200000000000017a914497f27973472ebbd5623c7a3f5abc36f72f4e2dd8723020000000000001976a91447ce7922a2290eb54e0e3adc86d306dfaefc4baf88ac230200000000000017a914c5e0a140be90437c77f89244b69e24c13ae9d3318723020000000000001976a914b6f76e8e680e4fea351d75b406a55131b303919088ac23020000000000001976a9140b6653042319b6ecf4b0f4637fd740f44832780888ac230200000000000017a91496f62bbc13a6a9f75a9c7fef368023baf1d4dff887230200000000000017a914b78792558f18ca95c68a4a9ebdd9a7bc00273c4a8723020000000000001976a914a14c5afbfbc7f22457e136193456511b5199d97e88ac230200000000000017a914dfdb0853dce2db8f73333b1d98d1d4b7c3e735178723020000000000001976a9143567ca297d30484e533d25bd28661f454e028a0088ac230200000000000017a9149c928a59d33f1557f82906f454b1ee0d6541ca6b87230200000000000017a9147a6509bf19354baa582c19b053b06a067d70493a87230200000000000017a914c4163a3386d664a19858093297d8599289f79f0787230200000000000017a914921b8b3a7dfcedb960cfdaa2168ce846c63f4cd68723020000000000001600142e745d784d9bf09e10663006e197012d65a7bdf423020000000000001976a91401b4c9546d14cac22495806305f832a41078375588ac23020000000000001600145db684ecee1ede311d713226c2f8a8b39a50db84230200000000000017a914000dec31346ddc41aa34049db6d8c19df8c1de538723020000000000001976a9142edcc8214ce526de2ff9d7250359a718970951be88ac230200000000000016001425d40546af280ebada472520bf1434db33e1b3de230200000000000017a914a89e802f44fe74cbd896168fd4cf340e82311d928723020000000000001976a9147a224c68140c391b37a77508c7cffc633404d67388ac23020000000000001976a914fba789bca97a2299a882a66751e5ff6d08c844f988ac23020000000000001976a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac230200000000000016001496bd6bb3b36ad9aec015a9737a7f99663c93e71f23020000000000001976a914970e44536ee837f50edae2717832b572b875472a88ac23020000000000001976a914225ec49487784a4c6394708e8b392ed1fde28deb88ac230200000000000017a9147554b6b0fce1b5b3cb8587a77d39f45e935df46887230200000000000017a9145582ba863311787efd5db4f095285b73907c46e287230200000000000017a9140e1ad58d851cfc91b540f95f630d3271fd43f7d087230200000000000017a914167c4f78b363d381fc36225d810679fa50c6cada8723020000000000001976a91497dca4eaaf26fc053d3a714b7755ab731d8d721988ac23020000000000001976a91404920812f837db8055d1a1832a9df73d3961dbea88ac23020000000000001976a914c201f40d2b14170b4972390917bf63e4c217281788ac230200000000000017a914a9bc40d7cb8419a3865ff754352a05500ad88c1b8723020000000000001976a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac230200000000000017a914263d5d98b57978daf432243cc68f3671b161110687230200000000000017a914a13c1db2eea532ead76f8ad0cfb28005a6ee0e288723020000000000001976a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac23020000000000001976a914f1c11284a8652b153474a328dad969079cb1fbc688ac230200000000000017a914c8dedab4217ab547aa9e9034763bd6908ab814308723020000000000001976a91497c9d32e43bada27cb80e398adcb60da9a2141e288ac230200000000000017a914f3267d362fc8b9b945e554014df931de7c3fe99d8723020000000000001976a914000dba2ae08ec02a5752ed67cd88062d96587ba788ac230200000000000017a91444593c3c5b4237991dde89a38919df184b151bec8723020000000000001976a914624d31cddd272ce06896ca86845a1eec0527fe2588ac230200000000000017a91453418cb2a7f706cbaee1991f6a5d53420980aa5587230200000000000017a9147b27350e4848b34dbbdc4d3b69c949a28784a7e08723020000000000001976a914b5107766d16ee9a571201218c76a4093138d522988ac23020000000000001976a914780073621cc467a9bc2f377649d2a8d21681219788ac23020000000000001976a914598cbebfa0f62e969692603e009c2617c2d8b2b988ac23020000000000001976a914c4ce9b3731a19a8b9d8487f55776b555c34ee8d988ac23020000000000001976a914757da6e1b2a5aa45c9f449896ef75b25570ceecb88ac23020000000000001976a91415fe20c4d83e3a50bba9d0bace983a4502dbbbdc88ac23020000000000001976a914b701e04a6ec31329868965beaa8892a13a202afc88ac23020000000000001600140a3d9a46b00e01172899902f2a154eb13a68d00f23020000000000001976a9142557acdc634ac7f274bddd53bef20d7bdb3b31e788ac230200000000000017a914a981ca60910138cc2f0202496bb4f81abac07ddd8723020000000000001976a914392893f9e5f8c96760df1d83338ecad75d910c9388ac230200000000000017a9146640205bcac55614aa1a0cdb23dc2a0ac3cf00198723020000000000001976a9140dd1ab497475a5f862187f4cb426499660328e5988ac23020000000000001976a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac23020000000000001976a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac23020000000000001976a914ebb999f4765c05f7f2e0c0d6bf20af9e65fdaf0e88ac23020000000000001976a9146bca413b0f9c1ce960ebf1e45e6babdb3a51e94d88ac23020000000000001600143535b76a791799e024b863b3bd0017cd46dcd6bc23020000000000001976a9147d9b7721645c954c0f8d2f96637da98b036c317588ac2302000000000000160014a3db85065a7729e6f71457dfddb07501b09461dd230200000000000017a91469f373d69ccf84d61386f4238f30139e9a2450ca87230200000000000017a9141cc51cb9865ddc27beca2424c52c028386f2e4198723020000000000001976a9141debb8615138bb3fe17dcbdf38a4572d7c6e016188ac23020000000000001976a91400100a1287131fad1f954537c58455b7ec2a47ba88ac230200000000000017a9149ec319e8ca8a50a33fb8beed1b10445e51f93cf7872302000000000000160014e43768fa81b8f6cd4a389cac86732eb1e563357523020000000000001976a9145a3faf13ca8d6d32ea1f15445411f063d4ee653b88ac230200000000000017a9144d53dba2f88d79c4cf790d7622aa126c37ed62208723020000000000001976a9144b813051e5b38396535da53d25ab26ac3b6bf69088ac230200000000000017a914e6d1a7c98dfd1dc83e53618d95b1ca1a2e303cba8723020000000000001976a91464ef0bf4cae69e0888167dd53268ed7b2f13de5c88ac230200000000000017a914aa09a8f7bcfe9898cb1f4f1e45dabda65e8d48598723020000000000001976a914bee2f97096755e41c0626189e8ac272587c73f2388ac23020000000000001976a9142e8e8ba352ae5d19f83def76212f38434cc45cc888ac230200000000000017a9142f1fec1edbbfb3edd27efad569449ef77e9767d287230200000000000017a91488259df2eb33f749c261e11696155f6007ea961a872302000000000000160014c09b4855ab15f0e56f045f26d5d96f9f16d4dedc23020000000000001976a9145e94d49e9f3adf5895c67d0221bce663e75eb70c88ac230200000000000017a9148ac3d1d6b9029dd09a3ef84f76d0a173c097c2d58723020000000000001976a914b768da04a041fa9286189a439fb1bfe9e84d399088ac23020000000000001976a914a3976cf0ac3bea2486e6320d81a10ec49a0857a488ac230200000000000017a91420d696f07b304f0c7b9b444d21b65961acfcbe0287230200000000000017a91403ba52f5b2be2386c72c94bdb9312d161b5c26ac87230200000000000017a9147ba2a231ca1c2dc9c8696920491f4668d12788cb8723020000000000001976a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac23020000000000001976a914364185e9cb93428f2573a6af31ea654464331c0e88ac23020000000000001976a914801befa66db85b954f2b8d53b18bbe28a688813f88ac23020000000000001976a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac230200000000000017a9148272b97c28883d7b249d2672cf07c9df59dd6f8f87230200000000000017a914c84aa77ff5f0c73a43792ecb840be4bf68a7b45887230200000000000017a9147db3b1c74dce2209fe3c2cf41292c6b385bd9de087230200000000000017a91469f37406884082a433c1c37eab72a9c2f3e94bff8723020000000000001976a914eec325c3280b8f96b736567f5206343adb1ce9bd88ac230200000000000017a914a886013826427a201ae117021dc6baef3b62970187230200000000000017a9144c5a08a5fd93d1999ca06ff3c48355020a85b23887230200000000000017a914754813a7d66dc43de9f4da62d3c30a1fa214434b8723020000000000001976a91464a8fbe5d93c24097d18cb6d1621b8c388d7bc2588ac23020000000000001976a914238909d978158349f520865d725566162ea92c8088ac23020000000000001976a914adc0542b37a628f5b62cf6e3193e6a8fa44bb61288ac23020000000000001976a9141517447e0f00167d5f8b075d638d7bb557272ddb88ac230200000000000017a914494792884f0cd961e7e74fe2d05c1021b41bb06b87230200000000000017a9142012096e5baeaf65af0ef022c63dfa1cc5d91a1a8723020000000000001976a9144e1ffd88e743ddb6e8d0580d077fd24432be422788ac23020000000000001976a9140ec79ad7df97800cb801097b1af31fb85032fdd388ac230200000000000017a914ca1dc3de0f45e2f24b983d47098898643b8832e28723020000000000001976a9142670993cc7036fdc366e1b56f30d225312ac629b88ac23020000000000001976a914cac8fbcd21005430337a9e20b8c407800b24be9888ac23020000000000001976a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac23020000000000001976a914a7b117ea56c5fb7252d3ef6d43ff090fe516197688ac230200000000000017a914c77652fc66fc2c5d884bb3206b3e1bea2c7a48a98723020000000000001976a91411adc7b9454b930884131d368365dc2c459c4ae588ac23020000000000001976a914b5cbbe12e8b79caa7a764766b02f16fd193ef1f688ac23020000000000001976a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac23020000000000001976a91428c42ed3a3e8dd299b981f762ef1ff53b254d05088ac230200000000000017a9140842b932a9d9c14cb5fab966711e4ae98b255f9b8723020000000000001976a9148c939130b81f5e32c9669e8e894a500c0054e49488ac23020000000000001976a91483068bc8913bb8fdadff3c8c5904442af64deae688ac23020000000000001976a9144aa3470fdf120095b24ef762eaf172868714fd3d88ac23020000000000001976a9140993915688c85f1d3c85fa6ee4759c92187efab188ac230200000000000017a914606b209f127812bb02a742a5d7f16caec239548087230200000000000017a914ece17d0a4fc019d93fb99cc945da24f7354a3c3887230200000000000017a914c68781daa5e91fc514cffb8896377702ea7662218723020000000000001976a914721fa96ce32dddbde6fa329f716a8d9505be94df88ac23020000000000001976a9143e3346d087383244c3503967ba2d22720200083e88ac23020000000000001976a914c8f6bd8c6e84cd25235e2676fd7c47bff0d1559288ac23020000000000001976a9147b506577e65212ca6ae1125797fa713abb8e88b188ac230200000000000017a914e025e8a52d9455efc65b4f4c74d4114778d75a8a87230200000000000017a9145cd5ee3205aa5b5177f18ff63337aa7a59fd965b87230200000000000017a914788dac6dbfc1bf0de8ce5f58631356ef8d0fd7fd8723020000000000001976a914839766eb5bd10661530bfd5c1f1966476857967988ac230200000000000017a9144150d1a6ced6f3656bb0ead3e941a71ef31824e587230200000000000017a914fd718b4d16009b5467fdc42f15276f216b16f6a68723020000000000001976a914976c91d993c793d471d45b52977a59c67d0c6cc488ac230200000000000017a91430a88b5a38c247dabb4777c9c8e77799a532faef8723020000000000001976a91482105dbeb438b1481ac20d259221aac2c1d546bc88ac23020000000000001976a914885be2340ea7cc0aa2f8646137d922142d26474a88ac23020000000000001976a9147975b5b27c7023c0bab785899358161209515b6488ac230200000000000017a9144072c1db05ec53b7cb73a9c831e969dec70b5dc387230200000000000017a9143b2767cf89557718a4d428df4d88930a3564e3e887230200000000000017a914861f23bc5f45abc08ebbd1812ceaf21dacc40f2a8723020000000000001976a914c732821624031236109005b43a64f6e21e5cb65588ac23020000000000001976a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac230200000000000017a9145147e139171976445c04aa6b07a16fde5080404a8723020000000000001976a9141575446eb18fdee5e96feee018a8f69728a6420e88ac230200000000000017a914c1bcc07d5ecb4be5a1c7fe5140310c814b4f49598723020000000000001976a91482a05defbdaa76f3fa7c914722d7d5e73d006b0588ac230200000000000017a91450c0f1f426aedeb69c3f69258dd2e5c81edc5aa987230200000000000017a9143fe5a8dcdec64dd7f1b16a1e209a19a4138187888723020000000000001976a914d107b8817df9f949aeb03de75ad5a91345bf176d88ac230200000000000017a914b099ddab3a91d337bdc16be86c74132cff9ec3a68723020000000000001976a914724a879b56137c03f145b65b2dd6596a328fc18388ac230200000000000017a914fad978a4eec17039f7b138a16e5667a32ff3651887230200000000000017a914301cf90b4d58ff1d131524b1ff4a77fcf0c8d7d28723020000000000001976a9149088551764d2352a45c3d3bd18425780e8a0d60088ac23020000000000001600147683a834acb6176d70a7d12ebd94f5af5be478a5230200000000000017a914e64aa1e37ef8b7815678668ad7528048aeaa35088723020000000000001976a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac23020000000000001976a9144f3bdfe3fc3f9a7b9e38a7795ff6d73f7e87e7f988ac230200000000000017a914c751d8f81559bf39516e5e1b33b070dc410cfd7d8723020000000000001976a91462ace1dede39e39b0f6264da2ad2cc60780b676088ac2302000000000000160014d6fd3fe25edf187229df8d0d14e0a946c36f8bf023020000000000001976a9148a33d877639ef0052d42844126c2a4629eede63d88ac23020000000000001976a914b48f9d6c379dacbfa5406012f5b2210d5189159f88ac230200000000000017a91466aaa916dd8232a3293aa63ef663a009685945b887230200000000000017a9147c30587ea632effc1db85cfe8ddee5afc82d8b698723020000000000001976a9145f261bf43e5ee2142cf9a1aaf60d4a28fd57f99588ac230200000000000017a91404839c4bceb4f3dec96af8735d6ffdeb34f5bc988723020000000000001976a914c1aea772552a8738d0147dc7937b1ee160f200d888ac23020000000000001976a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac23020000000000001976a9149f5a900a674aa8415105fcd9b030c3c1f91f6d5d88ac23020000000000001976a914fbf4b7ec9377dd063b06b1705bb1ee4b5526f2b588ac230200000000000017a914edabee24ac1a59441119b96bf12155362653ade787230200000000000016001478122e233e60e9051ad810e56c6366cefe424cfb230200000000000017a91432e54c4244db87b0f496b785afcae6787253fd398723020000000000001600144f7a28d7237e382ebd582fb13448ca5ef37b4b7c230200000000000017a914f6076450175048d25140934ba0609cefd7fd04e28723020000000000001976a914883f6702227fe21f7871cbbf5194c6a28184207e88ac230200000000000017a91421b6db29afd4dfcf9749e0ffdba5ecfde951ef7487230200000000000017a9147615976188fea1b2a7d5d97fa37136a0c44f015d8723020000000000001976a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac23020000000000001976a9148afa968104c60c0bcbc938e26b50157f9389e1f388ac230200000000000017a914bbe57aedb869c3d4d7c27dc1013c5d233be6f6728723020000000000001976a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac23020000000000001600142723e62af3062d344385b699947570e0105d2adf2302000000000000160014f3bbfa985f5635be5776587fc14d862bef97869d23020000000000001976a9143b0849f60d1519925ff3dc92836525815b5ead9588ac230200000000000017a914752a839283f9da5a937865a48a029a0715ed8abd87230200000000000017a914513c8fb40c33abe66e592bcc2c6d9a04fae9c5ed87230200000000000017a91497bb5395e7fc72190017b6bd9ebb2db868c486738723020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac230200000000000017a914bddaa47f9d3ee5094874dfc0bb0768f86c5b072587230200000000000017a914be5c0f7e08571e080ab461a0f10415245479f5df8723020000000000001976a91406f31b02fb5c2d82cc9d583d1d586e03bf479ea888ac230200000000000017a91407811f281a76e6238268b1529f99e0968b55a9078723020000000000001976a914f249f0b175f1a3eabb34af2a8289b8679a7c27cf88ac23020000000000001976a914f94cb26b990b25d543ca08a5ef576afed7a45ee788ac23020000000000001976a91450705377d4976800b2577a0368256f6e4c0ca0c988ac230200000000000017a914e390dfead0ca7f156cf32b53ea3b99527fe2bd0f8723020000000000001976a9144ab176a9bbe75e7fc8839104ad13e3de8beb160c88ac230200000000000017a9142e59bc20a28ada229c0dd39da9bba808777743c387230200000000000017a914de3e2c7ae81461075383ccc51543aa3a685d455b8723020000000000001976a91445547ea426dbf309be1ccb8d6096b6161444af1a88ac23020000000000001976a9141b481a662b1c2cf09be386bf753ce3387d55509e88ac230200000000000017a9142f09e545689363a9ff0aba211c96b6b85a89dd218723020000000000001976a914740cde4465c0a5626d41a52c230a85924b81f03688ac230200000000000017a9143bd59bd84431a3584314c6a9d2abe459ec7a24908723020000000000001976a9145be014adf2f246409de507a55df829c1a2f7749688ac230200000000000017a914855b965bd4a26638cff2088bb0d53bfaab7aabbe87230200000000000017a9142a4a8f556f3e3dd38733bc9b9cb48672f876a2bb87230200000000000017a914a5a40e931f20fe070cd237c17bae489604e03b298723020000000000001976a914931aa26207b3e2a90dbc0a93bf5249d1ed994c0a88ac23020000000000001976a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac23020000000000001976a914685359bd97d54eb904863851fb35b81f2ec4f21a88ac23020000000000001976a91488872bd7a99389e81a7147ba6ba09e1487c384a488ac23020000000000001976a914079e329263059d318333b547a7fae9ff5e78542f88ac23020000000000001976a9144b75f34bc1d88b52f18c2877ad77c910b463a4a388ac23020000000000001976a914436364ac912ba66594d4a2bc4e89a39d6c1f5b2288ac230200000000000017a914e4a09480838cfd49a9c16641520b6f780403b9078723020000000000001976a9147f3b321496dcb0a59c09adc403cc9ab2088799a888ac230200000000000017a914d4d000b0acd6676eeda3ed7edb6fd1d7295ce9e68723020000000000001976a9140aef240f19bbb29c85e328e5a25232abbd740ba988ac230200000000000017a914cede0362109e5af124f6b6ad211e4433a18299458723020000000000001976a9144ccfdb5233429d8ac3dec46dc85c5a6e20a2ab6288ac23020000000000001976a914bd61c2f7c5abd0046e7d257159631cb91671129088ac230200000000000017a91466697a919a4bcc8e75418522666d907908a26d028723020000000000001976a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac230200000000000017a9141941cee43baca7d7b2ee4a57983bc91e07263bf387230200000000000017a914cdfe08d97dc76c12c02551914eeee969dd25662087230200000000000017a9148252d4ac43d329e6255f3672b8d82da5f964bfb48723020000000000001976a9143f527c6288ee1b3b232271fe5ede1be9902c6b1288ac230200000000000017a914a1f6dc6ee49cbce315f800181ed6d90bcd316f6187230200000000000017a914f18f523d4fb2c14b0d1f7d7e7b321fd097226df78723020000000000001976a9142b451ee319672528c653ebc94b216630194a2f9988ac230200000000000017a9145e9f3c633cdf8fbec9d169dcd20051c56a6607288723020000000000001976a9149056c5e9b8520195a72c027e7e9a76968fefe67088ac230200000000000016001451a1281e9cafc8f5f51ad6c26649d6d8789a719123020000000000001976a914f0dfa17c1db83de64bd8703c9f595c5032e6426988ac23020000000000001976a914269cc7cb4632614c575f3674c8ceac0bf2e0429488ac23020000000000001976a914536d303cd4841afeb98fb4c43572b7efaa8535bd88ac23020000000000001976a9147825249ea7836df80639833b754c49bb320b643788ac230200000000000017a91456eea5b32d41520452600d0af39a8dab963e9f968723020000000000001976a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac23020000000000001976a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac23020000000000001976a914532e476facb85e943a7b32948209c35e1c7bd1a388ac230200000000000017a914d33914c7e10a1d47f7b0e66f77e914cf37b0a1f187230200000000000017a91488c48ae75673c9f5d4d89df05eb7124c3c69819b8723020000000000001976a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac230200000000000017a91468b0f118bbe3693a0b8384819954e2305eccabad87230200000000000017a914776f9be149d300daf5ebe3579bdec5bc69d2a2318723020000000000001976a9148c57c0a77bff335010895439bb536f9937af592888ac23020000000000001976a9149182e8c18157c664bc8a3123080738433ac76a6788ac230200000000000017a9146943767502bfbdc26ed1c5bbecdb90039921661187230200000000000017a9143efb24d9ddccd2fbfd65a4e08f89b5246b2697948723020000000000001976a9149424d3ac54f12e252e91e99853e4e3e6e597867c88ac23020000000000001976a91482aabd361a1ea4df42ff8587508794e2cfebb89e88ac23020000000000001976a914d746be6bf6ef309d59ee517d7f76b063c75a451588ac23020000000000001976a9142e56c82a26719facb889434f6914930ea1a0f38188ac23020000000000001976a9149714a5302b510387d3a7ab51cb15d8dcd02b4c0988ac230200000000000017a914ede8db516e6eb07e955f41b700db95f8bab463118723020000000000001976a914781ea96790d9640c8186575a889961cbe8a8ba3388ac23020000000000001976a9148644841d30bc75f67799cf21d8d2858639fc465488ac230200000000000017a914e3547e68036ce8c67afd4853a02d82e02d94163e8723020000000000001976a914867ef01439dffc5c42152cbe8bb330d7305db7aa88ac23020000000000001976a91476b144f69a937b753727c89db29ec8236a53316588ac23020000000000001976a91452c9d0081fe29603776817e8ffc75c177e4d782088ac23020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac230200000000000017a914997e9b9834946b9491063ca7cd3e9f355e2d3d5c87230200000000000017a9140cf6053e8cb9254552e4bae0fe670632c7ea540687230200000000000017a914bbb429f25ba41e3be0b9e0e4cd46557ab8e828968723020000000000001976a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac23020000000000001976a914d206fd2cb2011c961a8402c5d0a84a89b666d94188ac23020000000000001976a914f7211a88d14c581b7784187b5eddd0a2c4cf945b88ac230200000000000017a914992366850bba179596b6e00897c04577b23ddb168723020000000000001976a91448aa7e31474a9ace7c99b7d193eb26d7ce5bc5a388ac230200000000000017a914afd3f6ecd4121fdeaa29fef9dcd6e0015d3e39c287230200000000000017a914be9a327afd51f154cba24b60151b65df96b47e2387230200000000000017a9148fb280ed64eb180f7f6067930d1b7ebdbb947e368723020000000000001976a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac230200000000000017a9145da7f4a1f200cc055456e417755a2f1f409e15c78723020000000000001976a914f0c2385455cc195a07a370fe4d3c2fdbcd37ea6888ac23020000000000001976a914f9be66d347fc983b62277698f2c2d64acf19410e88ac23020000000000001976a914c690fb1ab03651ea84605120d2f16f39b854743c88ac230200000000000017a914f25e0dd26ccfe1f426ea6a6b62c62cfa56815dfd87230200000000000017a914a0e2ba6396acca24948d21a117f9626261615b768723020000000000001976a914560d8715e1ca752b73101318e3f19f7af698071288ac230200000000000017a914988ab5504dbf5742fa947ed0c268a0f1c54a9ad18723020000000000001976a914a2b8f5404e9263c11930720a153ca9ac24bb329c88ac23020000000000001976a9143186458445f45fa48ad843c87bdec06e527a0b2288ac23020000000000001976a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac230200000000000017a9140d8d4165757e30b914106d1076ace4fac70d4c6487230200000000000017a914309efd0a3ab0a58d7e48b3d50c3b1f90ba550ff38723020000000000001976a91456d27d0e35ecd0d2e3b611c6d7df778b5640fb7f88ac23020000000000001976a9148b1b24bd3db23572786fc645ab586918c53d135388ac230200000000000017a9149d6aa01ccac2624eb943e670b20af70d351869a787230200000000000017a914e9106300da4f6297adbe057a46f7a44c1a8dfde58723020000000000001976a9149e6a0b9fdab28719475e27ee9707c3c04a3348ca88ac23020000000000001976a9142e282b9e02a855423a73607d8e50799445f3a02188ac23020000000000001976a914ff19059d0e769d64114341c231ad932004c8f07588ac230200000000000017a914429bdcbc69f7b9ee8a2d6f668c28faeff8206a0287230200000000000017a9146b70c8314c9ead9eb528bd1f0f88e60125b4dd8687230200000000000017a9141001fbaf8c01a0df2ea3120f0e7ed7c1f12b867387230200000000000017a914ce6abc49116bcfc01e3ccb1d8d3f0b0fa4f6dc768723020000000000001976a9140d19ecf4bedf38da71f8877e042b65761742ded888ac230200000000000017a914601b9c4b6d6912df901726ca19b4322220a5841987230200000000000017a914e2bbe80f5614a7ce081674eb119db4b81bb5f9d287230200000000000017a914d4e8739d8d4cf246a62e79a31806de2342178f0a87230200000000000017a9140b1ce3ba0bd3059db9b37883e1f6e86dfae729bd87230200000000000017a914e55943a785950f4572a762ebf4d06376d8bce3ad8723020000000000001976a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac23020000000000001976a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac230200000000000017a914e6e1cfae0432b318d119a758abd47430a43903d487230200000000000017a91458d040eab0a572783afcd8989a21a048487954328723020000000000001976a91448b6351ed99307be4109db2284db8fb9186ce14988ac230200000000000017a9141b0799b947d190cd48c29b2ba1cdc2855dbaf8f98723020000000000001976a914ceb6a0ca98b6a70c95981ac1b9819755f918374e88ac230200000000000017a914ef79002c3ada61373c3330203b92ec71f88046918723020000000000001976a914967e4a6869439539f20171d0822a1e5380b0c72f88ac230200000000000017a914badee2a0f8f6824b636f6da919cdd93e280a00428723020000000000001976a9148d2a64d73ed4f1c6535427cc24dc9cbaa409711888ac230200000000000017a91479d3bf91956b6f2a7c545a3d7f0bbdd84c085ddc8723020000000000001976a9142134dc390dbdbe1686ce1dfe73e03c150b88bb4f88ac23020000000000001976a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac230200000000000017a914eb809c8f114e470219e3425acbc66db5cdf71c7987230200000000000017a914a6fff2fc08b657b4aff459a910c07088642c44588723020000000000001976a914848d5348ad4abb53aeceb1889326ea691f6ad99088ac230200000000000017a9146f4ef58823fc00d69dac01d5b964bdf1fffb11858723020000000000001976a914b770801054818fb88b126d6ce2d12b4b1a788b0f88ac23020000000000001976a91413599514a6b7c728d57f5c8cff51f6ff971ef90688ac230200000000000017a91494b57edf974a36ce5894088a79d91b9170a1d9e58723020000000000001976a914577d326af9d17f8803501e6daa33a483eb6efdb588ac230200000000000017a9144a7862252ad5abc097c3758988ccf1dac07e15458723020000000000001976a914e5a3fc2cd8b4ebc8cbd1d6100eeb100399cc01b988ac230200000000000017a914a3b8f4f16e8e3239c32d99aa2d29d365d4de0e918723020000000000001976a91445a2f2557b1881aa43abe55021bdae472e739c9688ac23020000000000001976a914b172ce176c72ff41324cf773a811cbb8b63c8f4388ac23020000000000001976a914b77e68177d0fef51df52370af08f530cc8e149ec88ac23020000000000001976a914cde6fa90cfb3168082eee9a1f95c4a53d265458988ac23020000000000001976a91411f519dbdb8229bd8492d6ebafd19c1ae64c293e88ac23020000000000001976a9144c72cdf3ebb66afe63f84d13b03bdb551f02e4c788ac230200000000000017a9146092a22788c79334f54b992188eb228b15f351518723020000000000001976a9148d0331484de0aea32b2c5b6a0c8008b032adc7a188ac23020000000000001976a914d242a7cda498ae85e63ca0f93a34361df139680b88ac23020000000000001976a9149dc7e095a01b123d1c99d8509243e51019dbf83388ac230200000000000017a914b93a83566618dbab54072aecb2146e0a3a23a5158723020000000000001976a914433f265f0805da0ed693fa7a8a0eb7e17481c5d688ac23020000000000001976a91469cb35a4cd013f5b39dbc0756387a958d2e4611688ac23020000000000001976a914164e4ad47e82e9c64d267740b1d8b19538a66dfb88ac2302000000000000160014c5bc4243749da6b6fadc232951c20f47bb9d0ba623020000000000001976a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac230200000000000017a914e93d893ee8cba909026f99ef526adc721dfe6f1387230200000000000017a9147053557a392ccd2aa9d70874b00bd4ff35bb1be38723020000000000001976a914f677b6b832e0cb14bcf4da3852c76ef5e7d0a40588ac230200000000000017a91499bf9a21b39b4ae4ea75e0e65a396cc70d0abbeb8723020000000000001976a9146bd6545185c83e9ae7f4c5227c7a9afa34d3a41b88ac23020000000000001976a9143977ad02e704f0c862b7dfa8349531fe5a563cc588ac23020000000000001976a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac23020000000000001976a91445110199352e60642095c72529405ca82803ee4588ac230200000000000017a914f6117e5bbef084bbcb261814bc3fdcccd83378e787230200000000000017a914787de31db40ea280da8d2766d74855d8b218b92f8723020000000000001976a914903c44cf021aaf16be037ff9fc97f06e5aee184188ac230200000000000017a914dc386f2e5ea9e9b0b3e02e174dc0c8152e54916987230200000000000017a914715dd7f5682b30a9a87736427b277fbfcfeb696b87230200000000000017a91433537888983cf93c65c6646a6331e55da5e9223087230200000000000017a91440099fe5ad396a7369c38c268616dbf98380fbbe87230200000000000017a91447c171df591d452c793bf22f76386ccbd55694318723020000000000001976a914e30d1ccfb05a0ad883cdc4982620952e225ebf0688ac230200000000000017a91460d9962367d98e5a11e7eeb522b1fc74750edcee87230200000000000017a91426856425267689b98f2fe376a8b83c5c41ac91be8723020000000000001976a914fc29603ed407951b9661a2a5493a3ba513c9022f88ac23020000000000001976a914d0a33dce453f1d49282abc07219d8cd6791ded6588ac23020000000000001976a9140791f1f6600311c3043e4e247050833567bc2cdd88ac23020000000000001976a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac230200000000000017a914632f6b718f50f1b5a2696d95f4f0782e10320c0387230200000000000017a914488eeb134c35f8ad7c88d649edc1d5ce3108484087230200000000000017a9147d0c3bc2eed630bbabeefff1173186a7b9ad95c08723020000000000001976a914656d55d286d2a59f57a70a1bc57a22edcffc967688ac230200000000000017a9149c3b1585c6d16360e44676ca0acdd6ee01d5eddb875b2b090000000000160014005411d7233a8a125418e61d6c8c928b708b33f40247304402206815a1ecb0d4c756b305b11294ecb497497012a33dad7350a6dde40c95260cb102203e7ccf5b502b6d068eaca24b6d41684f8a1204bdd706ae0a9afb4757be26739301210320e0b0e6b84b23c00eb57b3efe4e648e275dab998081dda155fa376e7d81cc9813de0900", + "blockchain.transaction.get:8eeacc40538b094b17f2e278dd53a2f6f68e7126ee81bff0ea3bec2fd9a42f66": "0200000000010177fddf916ac6cdcc6f8390646a798db7d5ba535dc32fb9ab6e3d65fcb74473c6d701000000fdfffffffd3d0223020000000000001976a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac23020000000000001976a914075b7dfca1465daa6f51b8497af83c10042ef39988ac23020000000000001976a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac23020000000000001976a91404d9d15e67e6f20551992e03039711e59281f72888ac23020000000000001976a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac23020000000000001976a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac23020000000000001976a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac230200000000000017a914c8aac33fa02f6ce31b189f84cffdd94b629a994387230200000000000017a914bc271363437ebdeb214ec115f88363eb2365c66a8723020000000000001976a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac230200000000000016001467730e8d9efbbe6306dc481f67fbe71f95e3679323020000000000001976a9142210aa314ca4e1f4c5f615eb0ecba150e571765888ac23020000000000001976a91466f369d83ae39366c08733f32cd2bde5f2eaebe388ac23020000000000001976a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac23020000000000001976a914d99e0bc516631d93cd42ec5047fadb98c34fcf3388ac23020000000000001976a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac23020000000000001976a9144544d4a8bb281f6343f6ae7c4494d1213eea539888ac23020000000000001976a91494663df695c07ca33b453bab9320776b2c8d894a88ac23020000000000001976a914654e15dd3d72c91ecf696d375404ab8b10e9819488ac23020000000000001976a91406ae5abdecef3cf94d9ff03e162126e9cf76009e88ac230200000000000017a91449c3f9a40d5ff5bbcf5b5a7e4003d8630f5c1b558723020000000000001976a914fd59f4e0839d4498a4c29e474035a0218b27df0288ac230200000000000017a914ef99b01bbd57532d46e29fbe16b53c0ab180a0428723020000000000001600145ba7e1fc2123dc0cfd679a603258820c82caf46e23020000000000001976a914c810dbe2558e83509afd6e9a9d0f43f495bcc9b188ac23020000000000001976a9149e63d0e87134f67a72cbb25d926d718ff65bfddb88ac230200000000000017a914aad38c08b3fb8c6497855458053d86286612579887230200000000000017a914961d1208c7e7962948e4add21c36f6f76fc7545b8723020000000000001976a914d4a8831deb1487a5dda5d822b7967a4be0376bf888ac230200000000000017a9147b722453ecd8720dbd2426532f9b92bad3b2203487230200000000000017a914d895f3d9283b6e2009889a586ee7561ff47ca26e87230200000000000017a9149ed314ccda5f026fdda3090ceb8250d3633bf8018723020000000000001976a914eeb9bfae6970996e886bfa5d129a551c724baac888ac230200000000000017a91409f6552c125f95ab66845f29fc487d2e5c493dc18723020000000000001976a91435d31f84c9b0029d849c77e4de53439667a856d888ac23020000000000001976a9146733fa09b089197b520faee941693a593dd808d188ac23020000000000001976a9146fbd758b9303220db76edfc69102a06f07546caa88ac23020000000000001976a914780073621cc467a9bc2f377649d2a8d21681219788ac23020000000000001976a9142a7d0596a763aedb4b203c14ed8beeecf72eaf3788ac23020000000000001976a914b0d2e93bf8f240555d0bf6af3206a1826a43815f88ac23020000000000001976a914f8ea45dfa8c4635b6aaa26383fe8c2ab463566db88ac230200000000000017a9141777603fc9ee07e1639b37a845a137c0122d8cae8723020000000000001976a91403a6c5052abc1f593f98d5d4a7a41409ec8cb63288ac23020000000000001976a914fdaa114fe15a26c90018ae004e115ac5e8595c3e88ac230200000000000017a914c9d287a3c3c4cbe914ac00728593c31b94707ad08723020000000000001976a91432e9d486f238fefdb91bfd0efdc91dd76a4c9b7f88ac230200000000000017a914b794c610fe2a25e47fb947a98ca219db254460108723020000000000001976a914f32a622f13d9144a8cd240b557c12948310b217588ac23020000000000001976a914f0c8a73d7879df9cc691441c2f51257e0d1cb09388ac230200000000000017a914021b3723c6306502c0e5567c62093371dd92bcb88723020000000000001976a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac230200000000000016001420b48eb0241d3a23b1685848d50942a5e18c54c923020000000000001976a9143de5097d8b4ec74dd13a533993dfa6645e19878288ac23020000000000001976a91448abd76e1e05850d022aa983f0cee649db65fd9988ac23020000000000001976a9143137dee234aa07a80eb80674a9e47f6a29fb897988ac23020000000000001976a9149a1baceff12e8eace4e0c6ee48f591a05c939a4688ac2302000000000000160014750eeed48747c3a599f165d93bfb63859ff7a13e2302000000000000160014227cc0682276b286c28752e20a9e1ba518b08fba23020000000000001976a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac23020000000000001976a914b4328a68b970088a5a810a2739ec45100a58931988ac2302000000000000160014b02883a8c50dfb8714fc8700833af5eb82e6af2923020000000000001976a914d1a1b01257b8c3025ca8a6374513b1fc692bafdb88ac23020000000000001976a91473c4493b05dcfa8147641cc05b71f8321610dcca88ac23020000000000001976a914af182b20e495a2e1b8a041ce1a14ed7b33d877e488ac23020000000000001976a914eba4a834c3a334e7d1e2fb40b3efbb2192be23a488ac230200000000000017a91469f377316b8ce9058bf10a39a8c72b69cfef482287230200000000000017a914fa22d16ff1fb8fef3a625a49688f92764988a2078723020000000000001976a9144135ca337c6b83fd20083fe6b678172d3b8e12d088ac23020000000000001976a9146eddbffac833e751740145e8b27b2b6bdfe3670a88ac23020000000000001976a914651840a7fd07379d035f9bbefa8fdcb79703ab1d88ac23020000000000001976a914637e4725f8fd24ca44b38cbd8e38581ae37470e588ac230200000000000017a914feb95d38b02d2ba34ee6528a597bbcb4be425ea88723020000000000001976a91459ddc146a69bba84368ca34083da1179ea5f296288ac23020000000000001976a914c080e9c542e8c104128da4cd86ba5e71710d96ab88ac230200000000000017a91456807aff9268b6a5ab82e4b8c4eb4b87b0d3ed418723020000000000001976a9147cef5da9e49552b2c56073c859a4974e2823292388ac23020000000000001976a91433ef0a1835676b42ce72cd56d30ca6df0e20662b88ac230200000000000017a91449243c31e8c73ca3033f5ce995e313be6c82b6308723020000000000001976a914da8af24b7c75a65f0d69b64cbac32ac38c292dd788ac230200000000000017a914373e9e2ccc4531e0abe8a08e0cb5f3edb843649687230200000000000017a91472883a3d6ba033b9dfe0094324f129e7091273908723020000000000001976a914a10c673f0f157d701791af288b2f4be83540dd8688ac23020000000000001976a9144f710ce31b85abaa47d5d064a85d843547680c3c88ac230200000000000017a914c02335212dd81ccbbcf798ecdda74531060f24978723020000000000001976a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac2302000000000000160014a1cbe54b289c77e0de14d49db1cab7df4be89993230200000000000017a91469f373acc624791586a0a5e25bf56e7601b04bec8723020000000000001600141e3253c0e5da89493d25c239905fe221fdd50047230200000000000017a91491fdf28fcb2cd7538ed23dfc6b56581c192f61bb87230200000000000017a91410416ff841f8b1444b4c9d646c4571e45a6834bf8723020000000000001976a91424744a5ccdc2d1e73aa1fa5a96482fc96a9cdf8f88ac23020000000000001976a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac2302000000000000160014b7e0e236b22fece167e7143fd4769a8373c15bc3230200000000000017a9143393c78de549a0d9dc77b91de4be75ee518ffc5c8723020000000000001976a91475cc58509c6571c76808661acd803dac8a5ea86988ac23020000000000001976a91411db9f1bdec9fcb5f131082a197da32c64e0c6f788ac230200000000000017a9141f7387352f6eee7bf1eed04ed475903b5adb53dd87230200000000000017a91498af20e112cba7d9c8820ea7aafd3e35241be6f18723020000000000001976a914a66a364606b5e4e8f01a63c12021f58f5aa7c41688ac23020000000000001976a91477ed13d6ea179f7758d06792402740a2f5e3feb288ac2302000000000000160014e030e90659c435a17396087829e4551df69a4cf723020000000000001976a91472ac12ffc3a6d061ce04eaca84d6ef5ffcffce5d88ac23020000000000001976a91422e74f00407e8b7e0da50d89611e0a54f1f36e7388ac23020000000000001976a9148644841d30bc75f67799cf21d8d2858639fc465488ac23020000000000001976a914340fe45273b18bfab6d7da1e3941c561188541a088ac23020000000000001976a9145de14b18f356127e5f0ec8ec5513a2e1ab11775488ac230200000000000017a914d5fc5d311447945fc2b5e68a813d3c33954a361b87230200000000000017a914ca0e0fdf70bac2e68d3a80b1b8182b9746e3835c8723020000000000001976a914f340f146a357e457ae42b5588244495e3a37a4e288ac23020000000000001976a914c2e95ab2e3f67ce183931fa42160466a3e26142688ac23020000000000001976a91432f4ed9674c4f3f954a9116289c30dc3e755eb8288ac23020000000000001976a914e2ca88056f5b0aac2a247c13e79d73550ddbdca488ac230200000000000017a914a199e7ea1d5747271d0df63616fd323068c4d46f87230200000000000016001416b117a1cdf687229c910ac70c32976d6bfa072723020000000000001976a91483068bc8913bb8fdadff3c8c5904442af64deae688ac23020000000000001976a9140791f1f6600311c3043e4e247050833567bc2cdd88ac230200000000000017a91438683707dd6125db12ecdc8213bfe0012c14df5f87230200000000000017a9149b7739de6dd1ea74eed27a21a5f171eae9abf13887230200000000000017a914d2df9739fd4304cc8cfbb6718c93919ddc4422ad8723020000000000001976a91467142b2311a80233182c37a064b807f8513b6ce288ac230200000000000017a91409dafbd77d1fe4440dcadd5a0d56a270e0bf06478723020000000000001976a9148745551198a5b5ac2b0a56baec75a85e265b779088ac230200000000000016001454b140b3d77be62283b655c3ff5351ed5ff06f1323020000000000001976a914e0be570f0909a4eedc8e82652c7f391038f00ccc88ac230200000000000017a9140b76253add4f0c02b02b541d0d825adcf7c8bc678723020000000000001976a914e0da6065ebea41bdac9e86a8785ebfbb6835399e88ac23020000000000001976a91416c6dd3f32a4f70baea941fb4e04fbb25725d62588ac230200000000000017a914c0c02e07ec311c906a2d5bda65479fe4e0a65bae8723020000000000001976a9142b24e4d40a9230c4e40c952c6911dcd8163b75ef88ac23020000000000001976a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac23020000000000001976a914d0b7646157335f64985416908aed1b23b07d487e88ac230200000000000017a91481ee7b0d88f7a2e8268a6d7d8afca895a6bf90b78723020000000000001976a914ad1550576f4d298fe6631a1a14d2351a9d143d4588ac23020000000000001976a9146e50675bce4b62d6bdf99670b2b1536b8605f02488ac230200000000000017a9142559538fc021fc79ebb36d1e645e19d5fe765a4087230200000000000017a9148d8b0e4fbd0323048fb862b2f607cacee1cec83b8723020000000000001976a914fa89380979e2045d96f4f4e0f9bf0a42617f61d288ac23020000000000001976a914c2c493174000385e6b66b57c115363434f96ab7388ac230200000000000017a9146c1ca21ee61c804a598d589e810d5231faf726c88723020000000000001976a9146ca4bdea9b6a4cc760f42c09a05bcaf42ccda97b88ac23020000000000001976a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac230200000000000017a914036d1057bdef87b17f3cff827e350001a6438c568723020000000000001976a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac23020000000000001976a91454615beae9e8040f9e0da7f4d1eeac1c16eb700688ac23020000000000001976a914d92ccc2e4f3d3890f3f0437a2931da4447b8cbcd88ac23020000000000001976a91492af8342d5ee6f6b0e61f9053c4b971707573ba088ac23020000000000001976a914946ad998c6c5b4888ed345d99e25fa773d09f51b88ac230200000000000017a914386bdba1c0eaab78c98503bb0e45ab93aee0fc3e8723020000000000001976a9146372816c3fbf94740eb84a40c57346681543f3f088ac230200000000000017a9147ea7bfd3b57161fa96a8626a0f84a2b2bc71d91c8723020000000000001976a914b127faef1471c75dd361aeeb3ed1b74a0c9b56ed88ac23020000000000001600141bfbba09650aabb7ec28a4397c5c5bf94e5cbe0423020000000000001976a91467b4b3ab6004169178a10d53ce094f1120a23f9788ac23020000000000001976a91493817fc5a7544f050968561cce1dd65b6fcb612b88ac230200000000000017a914d53c0e5febbe7b0d88e73e7f69a6e3b8530a032387230200000000000016001444b31738b3df687c3db164d4cffd5f52db363272230200000000000017a91449d8f82bf0d2048e9c672c669e999607b19e942a8723020000000000001976a914d65fb84e0e0e14f5e22ea49a1adfe24700a3168488ac23020000000000001976a914dec3ac2bad60a475e21ae691b287de6598b7d86088ac230200000000000016001441ce2dd73cd2bc3eeca37544393c7a693e028fba23020000000000001976a914e5951b8fa2147d67c1dc6b02b7dcd284f643e70988ac230200000000000017a914396d4f0aa1db54a7906615579b70d837716b300887230200000000000017a91447bfc46613f91710e342d4d3cd2cb9fa8f85272387230200000000000017a9149c00d6ed78844271e5c1c41de7f5878f2fc315218723020000000000001976a91476c59a68f0640273c713797559b5690b933dcf9d88ac23020000000000001976a914ede19fbba27388ad2507febed524dc200276b49488ac230200000000000017a914d99d22b81b499a98c4ddd70699f604fdd865393d8723020000000000001976a914ee159f28d77af56b281c0101b52646f860604edc88ac23020000000000001976a91487375c512452a9d8a41865c60f5b241fa3520cde88ac23020000000000001976a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac23020000000000001976a9147fc8916d76f37e65e4cca88212d6337a1fe5d69488ac23020000000000001976a9146bd32aa9d4559852697d2a6b0b0ca45eb970abc888ac23020000000000001976a914b701e04a6ec31329868965beaa8892a13a202afc88ac23020000000000001976a914a6a3bc028bab7c7e16c1554d8efa3e3cdb60c91d88ac23020000000000001976a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac230200000000000017a914084b858cc62a1b6d1a75707fc53fc77187ecb5a38723020000000000001976a914a0d752e21b08c32c012c6bc378e99899ec2f6a7e88ac23020000000000001976a914909fe17221a59ac2b6a55353a810492ad40f090888ac23020000000000001976a9140e460dadd09eba856d2ba0b65c7897ebe188bd4188ac23020000000000001976a9145034d1bdaabdf22372642c1134a9a083b0bd823c88ac23020000000000001976a9143652f68deaf3b549833cd102d1dbf9b8f566a50d88ac23020000000000001976a914fb0b9cfd608c02f610834157c65733e9534c618488ac23020000000000001976a9145c94a3816ea37ed47cf3ae8af2bc6a9ec7438bdf88ac23020000000000001976a91451d2345854530988a47cce352413df0c009d6dad88ac230200000000000017a914d36820f42405bece04291b2a153351026eb58de18723020000000000001976a91476559c1c07448e1708531c62c068d7ab12b36ae788ac230200000000000017a914a706476a6aa99faea67733b4fc0867e2d719cbf48723020000000000001976a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac23020000000000001976a9144990266f703d7d678358f2522b120a3d3c415b4488ac23020000000000001976a9147722a4a4f25a86d9bf030b2428850fa2d7236fca88ac23020000000000001976a9141702f435f0985e2425f41ea14445513ba8d718b388ac23020000000000001976a914bb7b7071487858a7d74094277ab5f7c0317a458e88ac23020000000000001976a9140610d77af7fa5d507238e1e2cedaa49b12bf31c788ac23020000000000001976a9142795ae9798caf4d1031e6da4cbb538b3704546d188ac23020000000000001976a914262b8f010039d7fc20758521704419895d0f397788ac23020000000000001976a9145d73398d15aa2c73047092f373d2482acb14620a88ac23020000000000001976a9149c1a5c20ebdc5ea3f1c569b1c41434b0338800b388ac23020000000000001976a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac230200000000000017a914cc5a684e8c05ed87418d7419775ffc3ae831b2298723020000000000001976a91467e883e47b6148850c46005edccd46885780b55188ac23020000000000001976a9146008c4526ca972d4bdd11a91088e16f545ca68be88ac23020000000000001976a91418275e0f841720c1059f8297186b983eb986903188ac23020000000000001976a9140bbbcfb584a7840c2fa750b9b99b6f2bae6eab0e88ac230200000000000017a91498a000b947276d10099da60a8248c554c1a155468723020000000000001976a914a68aa9ff2abb5ec82b72afb1c79531ff40f005d788ac23020000000000001976a914f1ddb8fd5a07d17bb0933f02e845a4f01f07cef988ac230200000000000017a9146aa286d095c5697ecc0da66641ac416303036ddf87230200000000000017a914f7601fb07c209aca9b9c9c698024315b3bfdf9f98723020000000000001976a9143ea91d556619662f06d671a562479291cd97421088ac230200000000000017a914e78171ef985a53e28245c8e5bca1609ebb97c88b87230200000000000017a914857abc30a304ce491a8b825584a17115aed228048723020000000000001976a914f9a853e9ebd7092e66682714fb760d4aa954cca388ac23020000000000001976a91493f19e10ec04376ffe0b2de59c029c387923910088ac23020000000000001976a9145757915f0eed40ee98b2705d45b4079be70a6f9988ac230200000000000017a914d08958185aaa168fb490076a3c88097149e86e898723020000000000001976a9149ad10e1140bb2d6271c357d7e4d6174e56ddd3b188ac23020000000000001976a914b77e68177d0fef51df52370af08f530cc8e149ec88ac23020000000000001976a914721fa96ce32dddbde6fa329f716a8d9505be94df88ac2302000000000000160014a1d8ba16696309d941189947043882ed459d38c823020000000000001976a914818ae62c3af88e75f7272bc93e5d8df012ac2bc788ac23020000000000001976a9146fd501f0acb1bc3c1fae5fbd13d50c8ba2d3ee6188ac23020000000000001976a9142b8c528bd2ab6223647ab92a5813b129ec2fe00888ac230200000000000017a91489c82536a9a585676fd059576ef16d5ed003867d8723020000000000001976a91472cab65a9eb3a36100f9107bfd87c7a5fd9a496c88ac230200000000000016001476da0eec310dccaa9a72f1904f484e919906a19d23020000000000001976a91410b734814e7fe83e2e961386a957443dd76dd3e788ac23020000000000001976a9143674c2327146339dd0c6a18222704c059a2417b288ac23020000000000001976a91461f639d51c4a1d7922fca16c9b95a51b0cc1bb7f88ac23020000000000001976a9140e0ed983b3662da774636c3f41d304a3df82a79b88ac23020000000000001976a91492fd964b4823834d4c510ab4d4ae4067b1fad67188ac2302000000000000160014f2260443f374fc114cad27c12a266658135e7ecb230200000000000017a914aeb44898588bbb2f2ef6c1c916717337c03bd61387230200000000000017a914d8c9a8e4641f21067e986c19a41952a1170659518723020000000000001976a9145815f199571342a34a5cc389c1637607bb7768e288ac23020000000000001976a914973742d7d2e371c08540234d73008fabb99096ac88ac23020000000000001976a9144fce53c1025c69b18635c4f075adec3871d468cc88ac23020000000000001976a91443b736e4722b29f84220d6d9a570a720054b521988ac23020000000000001976a9144841c24ad4add41ddb2a0c4057624cfe08d8ad6788ac23020000000000001976a9147f2186949ea07a2d877f3c06670956a172be90b088ac23020000000000001976a91451896a34d6469db638daa2b233058f8193a96d9888ac23020000000000001976a91496ff60176c985e73606efd1a1ff2640318b9271688ac23020000000000001976a914a4dcf4437276aca54864b97e3105e4837858142888ac23020000000000001976a914dce19c16837b09a94c17f55a069e05cd8a618c4688ac23020000000000001976a9147ccd678bffd280b6db6cf03a8df00ced84d5481c88ac23020000000000001976a91402a6e5c01bbfc6d7638d9cfd7ced0fd8e7f3477b88ac23020000000000001976a9144c388152d1d380947df48121d189709b43ea3d0188ac23020000000000001976a914756a03cabf6aaa4018a69fba608fa8fa22219e0988ac23020000000000001600146c35ba0aa9587faac50925653e83ecda6a0c2ab323020000000000001976a914ad75880397169c6f584050e7072b39fe2e0b88ff88ac230200000000000017a9149bfd4e1c623bb413a7e2c571aae916cea48976e08723020000000000001976a914f4493cb6185988579db19fe22e8d02afc8d9346588ac23020000000000001976a914de9e71d81e32b0091806b868e77066e7cff9dc5988ac230200000000000017a914de43c4a3566606f966e1446638f29aff696099dc8723020000000000001976a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac230200000000000017a914e9e581032de79c4bd8815ca6c00107b03608b1ca8723020000000000001976a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac23020000000000001976a914b847a94efc698a501714276454877bb14fe12d0888ac23020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac2302000000000000160014ff278079bc27e733b8b52a2bf2dd54895ef52482230200000000000017a91481dc9fbbe39b908c0bb8a20e52c0c8c998982e9687230200000000000017a914fd40a63e0ae5329f49201744d02ebc414acac46f87230200000000000017a9142e73dedee0677e1aa22b6be06524c29dc228351f8723020000000000001976a9147c5fa1dd1ce47b1f44ef80cf0d2633cb3b5268a488ac230200000000000017a914c9fef5d20504b36e6159a5a2cc9d5174b0a04ba387230200000000000017a914f06b1a268ecaa505a03f784fe41522f02ca8dfb48723020000000000001976a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac230200000000000017a91407648206ebb8827c8739156278df9ca8195c5a0187230200000000000017a9149e376fdaef5115912bde5946cba135875b6e0e6087230200000000000017a91470d92063e779fbf7237cbfa3a825428fc3f84bff8723020000000000001976a914f9e01035fbc3a949e6a42457e1da5a286dccb6cc88ac23020000000000001976a914b2b07a9e02ed19b2177c31004045828c8cc9429588ac23020000000000001976a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac23020000000000001976a9142e67012f348dd86238f724e3e977e3cadc8d5db188ac23020000000000001976a9146a8524fc7da13ac68445135295204e55e3805ebd88ac23020000000000001976a914b144f5d508ca1a1a3f46b9c3175b36c6804a6a3f88ac230200000000000017a914e9a3576847752d551b36e86f22801cc972c5a27e8723020000000000001976a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac230200000000000017a914fbde6edab2f589fe6e45ea4eed0fe83cee8649d88723020000000000001976a914164bc186dcadcf594afe5489e5a3f35b9035b0dd88ac23020000000000001976a9146564d2a3b7c578216dd566e01b5891d41ae6bae388ac23020000000000001976a914cadd828fa7d7fd7f0bf013aa5104bd43da99d83188ac23020000000000001976a914d0c58d61ce4b06f2d2298e60fdff4183569c26e988ac23020000000000001976a9141c0aebde42959e95f6aef9865124b73f92577e9688ac23020000000000001976a91429de092bff44eb7d86079c7865c4899bd451ecf788ac23020000000000001976a9146c3bb729eabb92faba374edf5ecbc30c9d579e4088ac230200000000000017a914ee517272c0ba64faca2546b903eecb87c5b9e5fc87230200000000000017a914d816942aaee719ba4dde28de6daa401ed4db5be08723020000000000001976a914752bdd6714f3d711b73d255384dd6adeac2a75a588ac23020000000000001976a9143f1f25c07c9889744d699bc14802f1d8c3bdaf3088ac230200000000000017a9141f0486663b1d0024d56c19706d5733d21b1beb5a8723020000000000001976a914fbd52c1615139a753086474889045a9eaf2e285188ac23020000000000001976a9142733d2807f33b1546fe2b83c6c2e8373672d51de88ac23020000000000001976a9149a07d7fe95272da9518be00bd0fa152c9e2aafe188ac23020000000000001976a914885be2340ea7cc0aa2f8646137d922142d26474a88ac230200000000000017a9149af56242d9752549e49833bef76a46600a3d2ff08723020000000000001976a914ddd53b280cace9c9028d15865f619f55959969b088ac230200000000000017a9141b0d610e72bf1694cce003dafe7b63281012eda187230200000000000017a9147bc81232b0bcbe7cd56e3300a53ffb89f45e15738723020000000000001976a914ff973115b31f3e85a5ccbe34935e84665735eed088ac230200000000000017a914dbe702194fb530650e620337c671deb060fa82918723020000000000001976a91429dc431a103f399b97266ad67e527d9afbb3a08b88ac2302000000000000160014002e8643dd7fb0cdf7358cbabc00275b5e4a65d2230200000000000017a914b75bd07f3d696fc1301840767b8e37a86d22a6d387230200000000000017a9145c1f207c27b7724c862f8fd8fe85c6628888b8498723020000000000001976a9144b96a74e22154962ebd9acda1ef795f62661a67c88ac23020000000000001976a9147581082908e7ccf5f8e3ef5aaee49dfe652fb64d88ac23020000000000001976a914fb10809be31c1684637e12aa766d06e463cd515388ac23020000000000001976a914705b139f7e9e32a13b546f247caf7b9cd63dc66488ac23020000000000001976a914df91c8b4a7ea2a7f1ceb71801e9e6913326a72dc88ac230200000000000017a914265d0796d7dc4b9864bbbfe5fcd0890e2b70d87d8723020000000000001976a914153cc57eb84289ccab848ed15b40232a3b36fe9c88ac230200000000000017a91490f1565f95bdba9cdb19ef3b67cbd775d055d3838723020000000000001976a9145b2b81c5afeccbacf0c0a8b00410b770b75e169e88ac230200000000000017a91493adcda4f3ee2bdb35421dc817a6e1b28896c3fe8723020000000000001976a9140099bc2889ff177003aab6d482c1fe5568d2a7bc88ac230200000000000017a914bb9e272c4417c669edaefa7f85ba57cea13dd7468723020000000000001976a914e247c564074c1534590850d0ad2ce10129f51abe88ac23020000000000001976a9149dacc4c22583429fff9bb4aa8a172228d99e292f88ac23020000000000001976a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac230200000000000017a91469862f82ef8f6fb2eed83b7982aa1e13ad29bb3987230200000000000017a91440d69dc50dff7b0c3ab1b69e5289b0518b0121e987230200000000000017a9149499327ef0a2083257a55414339d255dc59fe5a38723020000000000001976a9146554f11d672fb59f03389b4c70439a6431485fa188ac230200000000000017a9145de528995e33e42451f84c715c76d9a3bffedb0887230200000000000017a914276fa159a226a1b27330b6ad2bd4170d61a02f578723020000000000001976a9143c11bb69bcbb79f5b579ee9d03cef3bce3a57ef988ac230200000000000017a91474882fc22c925b58fe642acc7c21625beca873a287230200000000000017a914a6f85ccdac81d8ab2595c031c9db7829df00d21b8723020000000000001976a914053dcc648e056f9c8c9716738dbe681abde859de88ac230200000000000017a91452a6fc85fef64752363b27f6b33cf27b67b641148723020000000000001976a9149e38b6f1bbaf1252e0f9e7b4f8b01ef60dae124c88ac23020000000000001976a914703685db243bf911135f28c2a81349f9ce02103b88ac23020000000000001600140cb2dd3ec9c2afc51d1fb9184f4f60ed8b3aafe023020000000000001976a91459b180bd012069ff1d1bf333e32da2525c854b4188ac230200000000000017a914162d4a6316f55960e3e1778685db543500c271958723020000000000001976a91402aa7a605300f3561a1ffd52bf125075aee33ab388ac230200000000000017a914e0ebc1a0fbb7cf5a643045d4a0316da7446e00528723020000000000001976a914e85fb60102581e2ecba5b3efca3bc7b1b1c2543d88ac23020000000000001976a914fa88abda67a0db10b767c50ce9eda477e7b2219b88ac23020000000000001976a914e5bd5ee9f3f1193e7206b0e2ab6fd669ee5716ce88ac230200000000000017a914ae03f937e3023d0e0ab4320237a35294c1e0c7c98723020000000000001976a9141373f18df0ed977ba4c7a48d1e881364f5d228d388ac23020000000000001976a9144bbf568e878edc4d01a8c6a5c324ff47ec7cc53588ac23020000000000001976a914d534f3ee9d11ea9559ad803702319463e24f77be88ac230200000000000017a9142369be34d365e5bcb03e6bd9a73a975e85db11758723020000000000001976a9148f22a67213ef2d7704a7d8e8f4f88ff3b3d4270788ac230200000000000017a91476e2f479fe48c0a7a93f5e56fb464a31320920b18723020000000000001976a91458cc51d1d59194d959fca752e65236e3c138a85288ac23020000000000001976a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac230200000000000017a9140048f425b4104fcc90976b349be4f853b264e7038723020000000000001976a914aa745d87bdda28946bfa3e97b01b334e9df7320088ac230200000000000017a914277827d3808234237df4f97c62ca0bdaaf90c49f87230200000000000017a9146d8a14c0934e6effe1d4213e7d5b1edcbe51f5a38723020000000000001976a914ce8f3c82f062ac2e546530cfc107378e5ac07e3f88ac23020000000000001976a9147f3b321496dcb0a59c09adc403cc9ab2088799a888ac230200000000000016001467d77e9766b1dfc8c84a99fb958ebf695d390b01230200000000000017a914618b8a2f5558753e7e2df5ef0b97bd689a963ede8723020000000000001976a9143f1a425ab596163ac164f67f2eb3876df16d269888ac23020000000000001976a914000b7001028a72d8188a9fc2886c6c754c94d68788ac23020000000000001976a91458c286df31d44de5a369eecae97f7f61d2ff85c288ac230200000000000017a9141d1adf938502c39c6e7ef4223184e2c0cbca2e518723020000000000001976a9141ee8bc579e5731502dcd6cc626cc0981738eb6cc88ac230200000000000017a9143b757a786bd5a5ec69b6e822165fc59e32ac4a0087230200000000000017a9142e62a0d42d83ac5350c9b7c8ba95155359aa9c6f87230200000000000017a914a52eddb33c58c3368d0c348e0f1e6e9a6d6b16e58723020000000000001976a914b5a6140e6e7e2d164c28760ab4a770ec1bd8220288ac2302000000000000160014f541bbb231d9f086ef18bc7b739cf7afd7680878230200000000000017a914d272e2b1ebc47ff35179db3442eda0c23449ae0d87230200000000000017a914660b914c2671c9c93e759c7bea6e907a6f0710bb8723020000000000001976a914cd879a594a99d25cde4c54b3185e1b0c33d0621588ac23020000000000001976a91493023916bfb7f730c5e0367c24a450e9cbcb165188ac230200000000000017a9147093495280495ad1ae5461753929c0a349f37c3087230200000000000017a914e452286598805cc17f731a4374bddf2ff0a18b578723020000000000001976a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac23020000000000001976a9143faaf5c434eb1c9ce5cf5e3dd44a6d0dcbe3e08088ac230200000000000017a91477c98c448ed5f6dd7c76ceb88f2d900e1093db148723020000000000001976a9147c3c53f3bba113f7437543a140ba714a78a8bd0488ac23020000000000001976a91436a392ceb11ffce13cc235fb450380bb2bd168ca88ac230200000000000017a9146c386cb916f05d3243de43d6315433658baf1fda87230200000000000017a9143e97c0c8881108f37c429486e3ad298db3382f1b87230200000000000017a91441ec75586c737fef2d803bf474cc53b52166813c87230200000000000017a91433cd3292f8b3598cff5a3210b7137c59d53a7b608723020000000000001976a914dd91d9fa14cc760cf67f7c65c031d89d5a65c97588ac2302000000000000160014d03a54c6f4c9bbe37f5a29bef75b4b95f7a4906c230200000000000017a914729bfa42a28018849c028e8a7ad53653b77430c38723020000000000001976a914207db13b11d6bdb713950ff1bad130013219de7e88ac23020000000000001976a9140dd75502ac89aa23dd3d278b0ed4ff4d08f8995088ac23020000000000001976a9141825b6d879d8509f9c4e3d3393ebedfd96d6718888ac23020000000000001976a914648d037e4556e72dce498c2876e7a0cf768259d988ac23020000000000001976a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac230200000000000017a914d2ea32126a227fa7d2b9d925f55871016a514afc8723020000000000001976a91493c0bbd6e9cd123da75e2198ac45a91557023f0588ac23020000000000001976a9142607246affdf371fb08369bf157ec56d1858dc0b88ac23020000000000001976a91499b8e94a802ebf22eb1163d10856c37f087ff56588ac23020000000000001600149852c66ca896ef584e7badf97851040be2a5493e230200000000000017a91495e76670d715ca5cf777bf4607030bb31a78a8db8723020000000000001976a914457870a7bdf47f73a63cfe1910262c22cc2a2c5a88ac230200000000000017a91436f363df99f2610734f1f25dba8a947fe2fa68bf8723020000000000001976a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac23020000000000001976a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac230200000000000017a9140824ab69a339d663d1be5a104a27a97435fd47eb8723020000000000001976a9146665caf1003a1b0694d66488b7f9f0d35e3d012c88ac23020000000000001976a914d4e485f3a1ed505667f59ce054146664f0bff81288ac23020000000000001976a914761a2698f767b271c78e26f05a23c207455ac68788ac230200000000000017a9142657ca64849d95a6cbf2a53b272191e5c6284f348723020000000000001976a9145715d2ed3f764eada6d330f3405f87590536e3dc88ac23020000000000001976a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac230200000000000017a91437cd6538f735c909e9f5cf0435d9ba8ed93544378723020000000000001976a91486f589bc4ada04ad3296367e4bff8ea97fbc347e88ac230200000000000017a9144242de3aaf3478d28a6bd0f39947c1357e86c56887230200000000000017a914648fc1f56d6467326ee3e6172811dd159e4648e88723020000000000001976a914327c591bbb6637218dc794788cda039052199c2a88ac230200000000000017a914bb43ee6eb0111982aba625e51e2503da2cdc7aa58723020000000000001976a914a6920fbcd9ca80fa363fc8066967c336ff25294588ac230200000000000017a914fc59a9558c4afdb5f3083d4dd17cb3993079bed08723020000000000001976a914713b2b3ef6c0c07c29be88f5f2a4cdc950e7645988ac230200000000000017a91491f7211c41ef7c4d3ed98053d97ae74235ce75bf872302000000000000160014b85829a0a7e05abf0421765676e2375dc4ec47ab23020000000000001976a91490fa797ea3942d5b11eee231fe8b98cb35ec5d0288ac23020000000000001976a91433fa5e26cb6f3f44c6a953a36000a03717045a8b88ac230200000000000017a914315ccb1387b1f02598b0cb5fef5de482c6c897268723020000000000001976a9149dfc9951c5c9d27a015475a34661c0fecbe101d188ac23020000000000001976a9142dca4d6fe3b1b6ebd4964bf3c1d45d84ed6272db88ac230200000000000017a91414e2da34a37c70482aa83341a58fa949510984f28723020000000000001976a914591189a8eb80158bd6ff7a88abefa236f8d3dfc588ac230200000000000017a91433a863287d9973295d0692506ee180228122a1e187230200000000000017a9147e1b8541a10da11452702655e2043845f30bbe928723020000000000001976a914e72a8e43dcea5949d7893ba51f47ebb088f95a6788ac23020000000000001976a91481a8975e9c01706c5c486bbc01c04c84658566b188ac23020000000000001976a9146c45c6f9fc3aa62ffbbe486c51a41ba07ce7dceb88ac23020000000000001976a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac230200000000000017a9148f27950716a2db5846ac2a6f0c8e5bf711afb4f887230200000000000017a9148e5acaa945a6e720098b9afb80e35c094a285f478723020000000000001976a9146ceb56035a323841ce5760060c43fa519847b41c88ac23020000000000001976a9145793b29e331322034d9c6227b08f73cbf5f05f4388ac23020000000000001976a914976c91d993c793d471d45b52977a59c67d0c6cc488ac2302000000000000160014211f0505c7e88147632ba8afc9554e6caa86e5c5230200000000000017a9145482207ebb6ebbec4470dac743a00f454e7b6cfa8723020000000000001976a9148bd694b1924956301617c7c866f5cf5bcc722b0d88ac23020000000000001976a9147ee8f22667d3684894fb772e63cd380934c14c8688ac23020000000000001976a91495d0bb9cd9b0aff3d13d65a9c8686ab5c9541bb588ac23020000000000001976a91436dc5c2b04579de951166c376237363aee6fb27888ac230200000000000017a9149f31fc9721bbda203a7f2f9ae99ce1b7b50d9ffd8723020000000000001600145732b3fa599afa8ac4a703256a7465be8433bcbe23020000000000001976a914b5107766d16ee9a571201218c76a4093138d522988ac23020000000000001976a914023e61462c28ce44a8df3db3f5930d938404143088ac23020000000000001976a914c17f35bd0170873a837937a7a51bd87a8ef8338588ac23020000000000001976a9142c0471d464ba270a92440375da5b857ee460548488ac23020000000000001976a914d0383fbddc65ca84f05d2c81e3a3b4b47d0e67c288ac230200000000000016001453757b608fca6ecf4b306722579ae151cb1659d223020000000000001976a914eeceac4055a21d40c98d5c09b46f242e1b50f06188ac23020000000000001976a9140c4b802d18389dfcb1f72d2827ea8180a3312c5588ac23020000000000001600148eb9202daeb4cd0006b37fed70456a8af2e838c723020000000000001976a914b7d380d421a5ab6c8d626590316a8889563869b388ac23020000000000001976a914153c3bacc9ac792f51146587358b77e33a4b984e88ac230200000000000017a914309dd8951ab8c3fbc5e25cfe93ad4980e3d4ba6d87230200000000000017a914475605b1e254e08c82d47fa1d3cc6dded38719ac8723020000000000001976a9141f9704f074cd95122b05ff16093ae0fbde3d476888ac230200000000000017a9149018a5b6dd832a0d281625c59afcd6ce9a00128587230200000000000017a9147bc9c50e4652bac25767b44656ed9978ef8abe1c87230200000000000017a9141edac297d0420f94bdff46b619ddf92d767c90f18723020000000000001976a914d5141b0e3ed413b4bb6142802e7cea14c0b8d7b388ac2302000000000000160014db17bc0d91ebbe70633b8e25e9ac70ea959f1ee623020000000000001976a914c0f69c25f3a7ac71098a48fcb7cd2f3336b346d488ac23020000000000001976a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac23020000000000001976a9148b34f43bc901790bf0c9f5f4612c48e2b23a9cd388ac230200000000000017a91413c0283eb2946aa9948ecbcc89d6df3416750a9387230200000000000017a9146cdb86ce23ace51da2ec567b1ae789cecb2d7b148723020000000000001976a91455adf0b0d83148aa6dc5bb26c5e16c0c8c09394088ac23020000000000001976a9148c939130b81f5e32c9669e8e894a500c0054e49488ac230200000000000016001489f03057eee1009500cfff99ba68df75f7b19aec23020000000000001976a914c201f40d2b14170b4972390917bf63e4c217281788ac230200000000000016001493d09f5d60459ca96734f23895988d213e06fb6e230200000000000017a914a80b2e429c4fa4805f6a099365202152e09f50668723020000000000001976a914272644d0e4aa055586f7990f8b977859564862e788ac23020000000000001976a914db92484123e28ae891498f70dfb58cf9e0da266188ac23020000000000001976a9149c447f8892ba7cdd4396d33f9fc6c301dfe7c82a88ac230200000000000017a9144610a8820ec66a3ef939d6643d5c492b82bb65308723020000000000001976a9141077c3e12439566b2a2f5d792714b23b5e48509d88ac23020000000000001976a914c7ddd308e2945909777c52f026bc21e77c3cf15688ac230200000000000017a914f55459a6381a8dc1712103c3a4486da0b8caa66f8723020000000000001600146b97559c97156a3bceed7baf70bf6df203a2ebd423020000000000001976a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac23020000000000001976a91464c3e4ef5fb1793c89c1fc49f903be8e6c3770bc88ac230200000000000017a914ec7e628f30f65d8155c6c41b366e75112e1c0a1f8723020000000000001976a9148be50f47acaaf0d02e3bf6068f6af466e6ff957c88ac23020000000000001976a914d0591f9ec23aef2a79a4b3051b6f6c060f336b4188ac2302000000000000160014ec79516243cb65090a7be1615e6f7aaf75f8c41623020000000000001976a914663887dfc75093588ebc41b62909667307607d3888ac230200000000000017a91412041e70d69b8e624284c725efbd85f3fbab73398723020000000000001976a914a3508626c07fab8d6b1c8a5197cba14bc121c60288ac23020000000000001976a914d0c0abbd045671f82cc0f90e62a9becc6f0d0c5288ac23020000000000001976a91476cc17a4904384270743814e53b778a71164bd8788ac23020000000000001976a9146ddd607d351a2e20abac7117e370bba743194ee288ac23020000000000001976a914d23252ed274bc676ff9b7e2679e2a02f5217fe5e88ac230200000000000017a914f5afd35c5e849bbd5943d0137a0cf8293c6f084687230200000000000017a9146bee70d1f733e31f310facdd5fe8079f63e0995487230200000000000017a914403e2bd10fed6070e17b094537d25f3ca355c93b8723020000000000001976a9146f8c44f1de4ccfcb44f521bfd451ab112c540b6188ac23020000000000001600146b40c955be150c7c21d5efe13a147818faf7a4e7230200000000000017a9143b45ce557d2cc6825d4f675ec860711e8e7fde3a8723020000000000001976a91489bab57f467c529bfa569b84ddd87759a5eb562c88ac230200000000000017a9145671f83465b1b64a6f4e128d1c565572b1324ffb8723020000000000001976a914958eebec21aa621680905795b12ea0934c9c324288ac23020000000000001976a914a34aa1735514e197d459f0e6004f6e5c6916725188ac23020000000000001976a9147d4be9ad0d33f63097a0d131f908d9c4934dbd5a88ac23020000000000001976a9147d426bd2619f9fbd3677a2c435241f6eef96f3a588ac23020000000000001976a9140bdf6b6fa7bb795115830714a161f3af34dd787588ac23020000000000001976a9143ee592c9df0ad4d5182241ce6d2ddd01055e421688ac23020000000000001976a9147d9b7721645c954c0f8d2f96637da98b036c317588ac23020000000000001976a914d77d596aa6f308b7a2b42fc688820872daaad9dc88ac23020000000000001976a914b92a5e9462abf113510a702bfa4f44d259284c2b88ac23020000000000001976a9147ffd2e735f57a185a772220d13e54ca07f666e1988ac23020000000000001976a914eba4df958553fc51bd800fab11a173808966b27788ac23020000000000001976a914d63e073aff0045db0b803feda0744072aeaba8a088ac23020000000000001976a9142938c5c2fbccac4fccc90461761b6c3492846d5a88ac23020000000000001976a91452e150992a5486318374d52140f08addb383273d88ac230200000000000017a91478940516012f7c7e2b749ddcf3074dc064811b688723020000000000001976a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac23020000000000001976a9143d7f1bfebbb0a839350fca6d3f784b6abd6f37de88ac23020000000000001976a9147e1be4e1a1192ff3088344a3b3d9db61df154cf288ac23020000000000001976a914d7df75efcf9e692e4ceb12f38b3dc44161933c1788ac23020000000000001600148089dd4198593ccc344aced7c4a7e9319386f8ed23020000000000001976a91497651ab1842deb3dc36aab97b4c49475c9ae31cc88ac230200000000000016001457122d6fd1947e7940e99fda6e6d30d50a9f7c6823020000000000001976a9146594a32b676c6eb505454ab0289c0e6f7e51cbd388ac230200000000000016001477e75ae49d81759f69da59c6318aeab60dccba2a23020000000000001976a91414bfa51624d8c52b34831de3ccd22a317ea5bafe88ac2302000000000000160014f85af58459bf628b835d200d77fa59de886c59f523020000000000001976a91451a9fbc3f50abcf855555c774a65f1d7e6fe582a88ac23020000000000001976a9140586f8cb26cfbfc780d06d4000e2e89941a3ef0d88ac23020000000000001976a91416dda94269d62aebac059079117839c73862d1ea88ac23020000000000001976a914fe551bed25282a60f6e0b20be8ae4e9baa808b6988ac23020000000000001976a9148c1b5869c0d1003901df76a969628c5fa011be2888ac230200000000000017a914a0cb10e963b02387e3145682e33359fbfca4e84c87230200000000000017a914634b89deace122bc1f42ab29c600a0728ec0f3cc8723020000000000001976a914e991a5d6ab6ca1f3c8cf6fd0b572d1ee2451018f88ac230200000000000017a9141412beba31fe7e8e6f3ac06a198c11d988c3cbaf87230200000000000017a914f68e6310630b77b5e4c76291ac1e0d60d227792287230200000000000017a91407406cb43ef2714c27f481e88554d10ed29f4a1a872302000000000000160014c75347fdb3f0417cf6b4dbe1f0d0dd46c4ab3e7023020000000000001976a914e420f157882616a242ed9d917221721db748947d88ac23020000000000001976a914b24df93c61ab527976ce87f890e2e0e2ecd316ee88ac230200000000000017a91465bad95bad69a2a44c5a89dd17404efa5291cdb687230200000000000017a914417e242b03e30bdd2ed9eab014c3ec19aab5455387230200000000000017a914cb7ed6403771abce6a6ad7edc0a4fd2c5670a7c18723020000000000001976a914a6beb7bff47cc3764e1c415d4f41153686c6679788ac23020000000000001976a91404b5ac8e58e2487fb07c8ec6874103602262c4d388ac230200000000000017a9144b424ba5ee5f60bcf97e2fa5ef6759bbc9b8e4f98723020000000000001976a9141c3d15a4efc740d4009aba39ab7f5c327000e4a088ac2302000000000000160014a95180410857995212815e459b2f671b18cd377423020000000000001976a914f354d0e047d4165fe41df08d2a7e268a7a2c8f2d88ac23020000000000001976a9141c37ecf6febefa65f5cf45a969a7e86ebfd5803f88ac230200000000000017a914f1bfb83bb216c250278d84bfcaf643c5e478275c87230200000000000017a91471433db63e45f0c49ce57220d5b15240d488228a8723020000000000001976a91444bee5c21f50d0b5d24f01509a983809e36be73c88ac230200000000000017a9141e26c10be52aa22c36b3fdbb26c0c6c8805734be8723020000000000001976a9141f6e82b1dcac4c70310a5b68d06a7e828b0f82bb88ac23020000000000001976a9146e49a3bd9ce84a75306f1dd1d6b38700ac97ff9588ac23020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac230200000000000017a914648ddc5e3f615f141fc5e38fc36858fe330ce65e8723020000000000001976a9142560668c9e3e98ba2be673e506c8191bd8d500ff88ac230200000000000017a9146b0a45e28e924257f5773fc66da089fba92ba5f98723020000000000001976a914130c14369048df4e18fdc019d0ff790808a0451b88ac230200000000000017a9143d2256747f54766efbca2f505a3349f0148e162a87230200000000000017a914a231b2f85a26988d105cc5c3cf1f875e2fb5bf1087230200000000000017a9143ddcbfdbc7b7ea27bbb8539df4f9d7ba19f986a2872302000000000000160014a8aa7d50d0cc3447a3d20499714df8edf1289e3f23020000000000001976a914dd2bb57e29cade87fd4c161cc1ab9b9ff8a37cd388ac23020000000000001976a9144c46868c4f8887a1ef3b69b02f35d0f337cf4e5488ac23020000000000001976a9148ba0ec85482ca6534e11832f312e0d63fe84a5a988ac23020000000000001976a91427ac5fe37286399e94b13594ef3b7eff1511f92788acdffe0900000000001600146b10cb743f308daa45cd418989d98473a8e0c5020247304402201b6d4d5a9a2b93c63807d0b3bad806786596828517f6edee8a2ff060e932b7ff022019903a46c1aabde2f6595591f13cbb0b5ce7bc3ce1c9c6a399e4c3c9169257d601210394153b1dfd6e4277ba146841db452e1a687269fc162433fb087742c61ab822af3fce0900", + "blockchain.transaction.get:8f716720ef9caf72149e262748e543df1fc2996cb5ae95d6cec2678dd06601ce": "02000000000101d77d39d80d7ac9fb7edbae3c4e363540583f32fa2152dee7709355ed9529b60e00000000171600148570015261851d49cbcd9743f5be3da635ecae68fdffffff134c020000000000001976a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac4c020000000000001976a91411b366edfc0a8b66feebae5c2e25a7b6a5d1cf3188acd05001000000000017a914fe7a977a9a166a868821bb81da33168ff4a2b188874c020000000000001976a91436896b2798eeec0fc03c95b52a357448ed0dfd4688ac4c020000000000001976a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac4c020000000000001976a914f73acad809960ebe012964383b184f5c94a3f3ba88ac4c020000000000001976a914482bb0b8f14aa24e50f18d2527046e413bb315df88ac4c020000000000001976a914877717568a7e1d716aa7c696f2db7a6b4b79ee5788ac4c020000000000001976a9147e92e66adf3e096ab4eef4fe7a128e9c7ac339e488ac4c020000000000001976a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac4c020000000000001976a914119b098e2e980a229e139a9ed01a469e518e6f2688ac4c020000000000001976a914b3407d4b4d1fca87fb930abe3fa6c2baed6e6fd888ac4c020000000000001976a914a3c78d275195f05766a9b497d7838b27bacac77588ac4c020000000000001976a91435d31d1dbc974770d456df632a44656a89bae80888ac4c020000000000001976a914c1c6cb1b7d3c5a3f1dbd79ebd80d29bc6145e2fc88ac4c020000000000001976a914acbf9c3dea6f2ad29fad5dbc4da6cbc3d7d3643288ac4c020000000000001976a9143a9759a48cd85654ae8e9e64359d3d8570e444a288ac4c020000000000001976a9143f1f25c07c9889744d699bc14802f1d8c3bdaf3088ac4c020000000000001976a914d49c6f116e0e500a9dde898f4d0c2885048953f388ac02473044022031be4012f13081e3a6eba5ff79ab2fe3fb992ace477ef51539a05ed0e08eb98102202ca01897e7fb47be7f0f35adfcbd9d6a4a033d63810ec4817c3cf9663a806198012103e8b8adf67f56a4cf469cd11586feedd3b3ad3d154934cb5c39af9bfe2a892c241e9e0800", + "blockchain.transaction.get:be09fa7749193def059b7fc7fb1668a749c37d2d8ed7a83748dffd725e0e8cb5": "01000000000102d887e4df2f162186cd710da3915a4ad15823c9483abd43d919fabf52860b2a550000000000ffffffff1dbf2c3edeb68860e7f89da73fb8632bebee0894adce80d8914b7ff088419dde0000000000ffffffff0142010000000000001600148764c872ae9f31c0463278b4d4386646cfca20da024730440220558b1fe2f97b5dc1ef59f282eb971187f9a4a451848713b14caefbbf7fdf4e06022049636dfb5b7db2b41400e7daab5db038f672df2ed4eec2ccd3fd2c748bbc7a7c012102e8ac3ea5c5d42c40b59b2e623c70beccf39fe6280cfb128862fc5678983ef3060247304402203d705d894ae01af40393675c863cea271026167141397e0f359d94195f7b296902201647b6c1bca54bd59326b7e33bc3766565a5c62dca04a6e6487b551061664d39012102f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f900000000", + "blockchain.transaction.get:de9d4188f07f4b91d880cead9408eeeb2b63b83fa79df8e76088b6de3e2cbf1d": "0200000001847dd92079ddaf23121d84881c928a277b87d7d4b05e8bb3420868725b23b9f0010000006b483045022100d2ebb001d830309647ea244276b052c8c1a0657f3bb96895db6a106d4e95e06302202bb5aeaaadd7e39727182cbe5a1796ee5a4cc253c5db646a82ab2ba87fad98ff012103de505f92ea1a7b9e6ebce499efe4bacc62dd56ca25129f10772d1c053f11dc95fdffffff020c040000000000001600147dd65592d0ab2fe0d0257d571abf032cd9db93dcf0150000000000001976a914978a303fe8e579a2175ec79bbd98dbd7cae51b3288ac00000000", + "blockchain.transaction.get:8881ba5fd4ba272864c14e793ba78eba6568d7e98a83c362ceed6461450d4e1c": "010000000107621ca3725e8640be4af4a584c9be0401dea41b57a2f3d3b67f5340d7858f8401000000fdfd0000483045022100cf1879f6e5ec0967282bb82397f3fd957a34934d2abe738acd76c8f12f23d4ad022003593d1e78fd37fefaa6e3456025b0a0239126fa7e3077be8755ad42d4dd47c001473044022073b4953f00716a81b8da8ee9cb487db3690acf2df71bdefe048a7cba8b26cb1e02202f86d707c5413ada3e40ce032bd5449b9842ff88c2fef12b240e603e16c27240014c695221034f3c0a6de1d4e626013fb08fd6b3111429f49964643cdf559915452fdcb5ffda21032331def40791226bcbf9d23d22243ce80aa05eded9b80d85cccdedb08c6a96522102f27cef9353803c27807ac9e21cb12efacac2f7c32e8278a823dfd7a16839bbe853aeffffffff0a5990040000000000160014ff5ebf5473569f4d4b6607947af72a914c7a439710270000000000001600147d9f9d488622c9fdbcba42383c148739949244c3743c120000000000160014cb9fc048f7ae8a31ee16cced26a519c2724e5c8950c300000000000016001432c57f15253b7d4231a1bb81e74ca85446f2b8bf1141120000000000160014cb9fc048f7ae8a31ee16cced26a519c2724e5c8940420f00000000001600147753b9ae389b6f94f929beb1373641270308a7c094be6d0000000000160014c4b4531621dfe330c50fda4d8820eda3135fda0600db1a000000000017a91496cd57c85f4fc27db6ace43dbd45f5d3e558352e87102700000000000017a914cccf172f747cec2a3c16bed28fbb9e996e014e368759c44f0100000000220020a18a1f1ea0d4ad2aba38753573b3321455a20d3ae557cb41083da534d828f7e800000000", + "blockchain.transaction.get:848f85d740537fb6d3f3a2571ba4de0104bec984a5f44abe40865e72a31c6207": "02000000000101e426bfd35028b521f776a550ba5e1b992010a400efb349b75e2e7474cfa7977b0800000000fdffffff0c74790000000000001600140f3948e591cf8f53ad5122c74751a9021355e31121d811020000000017a9147133edffe96b69b15af7dc0964fa5f73694924478780841700000000001976a914d68de31e47ff6d147a983209ffce04c59586967288ac03c30100000000001976a914f2c9b94e9ea9527aadd7eaa8fdb88fedf5ef93f488acb444040000000000160014acf3c02353ad1d01eae69fa197df7f9906497269a06806000000000016001491973223a15925ae41dbc5690be968ffa70d108040fc000000000000160014fe70c68ef1b98cf093e34a634b661fa8c646a43b455400000000000016001498a3be774c3301a0164d1acb84bafd636e91c2df21890000000000001600145b1d77df3248e5109fa9ce807d0d8bd9a564ddf67b69010000000000160014476b5f4f6be44459731aa741862bf09ddfefb306817d00000000000016001488d54f8f2ff939d07b252892109671e81f9a9489c7b528500100000016001420349006e1f767a5ddbf52ad2eed66a2f00b370402473044022011e6867abb65745dc69b94a942d29345b792eb44d79d54ee6527b12de619b4890220582a462e298afa9293cd430a9a64307513ab1373a2d40c23b48c522d97d667400121033e645db065d4922b58b5dae11058a4da91d930233477f80f84a131942af9aacf00000000", + "blockchain.transaction.get:2e08a73b48527afde28ffe2a0d81d34ec4e850f23512342ce43e3815eac8f92a": "010000000001012b49150aab70389bfa7ee7010e3387efc230e1f6f649c041e5938157c1720f6f0f00000000fdffffff0ab3120000000000001976a9144d12e06925bcf36e1d5b645c78177a24e133e1b088ac851500000000000016001404303096e2d6cd9ddc90c7b70ac0881ee84fc126651700000000000016001468ff17dead0bf2a0faf472ccdd3a9346c2b59ffe6f330000000000001600146332abc07abfcdd5b526146ba0adcf925ff56db9bc2a010000000000160014d8d06e785f240931f122d943859daca35ea314cf2a210900000000001976a91464c303183967cb42d47c308727b5248d3353669988ace1310900000000001976a914cf9b078ec6affa179c44c98adb80f6618f75acfb88ac86330900000000001976a914d57b3e74547fbfb311da35b513be74a7f7d261bf88ac89380900000000001976a9147576471afdba023366b0ff125aad4efabc7ea86988ac422b9d02000000002200206330731a76119d946fc96d2f8935445cf4517c42ea59453acb2c89f03f54dc3c040047304402205106fa21f07128c11596eb6b56a19d7f6838fb24471565caef560f15ccab0b4902207e012c26ab7aebd86d1edd20ecffb13d131faf76d83a33ef58c98d8fb4ccc90401473044022069af855ad802055161c9de6b77519f38807c32f38240cf9c5a7f8604d19f437802204e1ae819853e595d09fce0e55cb6cf8dcffda145554b30841efe26b4a5ea08cd0169522103bc922d363d0c92915c491a54af3ea52c45d961af90ba23d89116792dc44b3d1d2102c39703874cdfedccb4dcb9213817704ae6af5b2b776cac04acad8fdb4e92db982102fe94ffa820b900a2214eddad6076b4e74c2a1a13fc16cca0db76cfb919fba4d353ae00000000", + "blockchain.transaction.get:6f0f72c1578193e541c049f6f6e130c2ef87330e01e77efa9b3870ab0a15492b": "01000000000101ee23e856da2154d9b66bbb1b6678248f6d32fc8d94829cc750357ca211b0445f1000000000fdffffff10d90c00000000000016001404303096e2d6cd9ddc90c7b70ac0881ee84fc126290f0000000000001976a9147f052496f8dfb8e99d850f491c0903d86daa6cc288ac4e18000000000000160014a69504712d29656c44d032f8fa4097be0276c242bf2400000000000016001496b2ff42bc6a56341e85aa24e2911c9d85fe3bae142f0000000000001976a914812b1ac0dad59ddee3bd468d9f8dc5974006997188ac6f5d000000000000160014a69504712d29656c44d032f8fa4097be0276c24223d301000000000017a914e3ae3388c6e8de67fdceb05bfb48b9d9df37f30c878b1a0900000000001976a914a95587ae49638161ae30dcdbe43f8dab7482868d88acfa490900000000001976a9143e13d3b3593135de8e6104c09cf0b0ccec1d4e1888ac79341200000000001976a914278ebf9cc4abf4181e864a5139853575030882f488acd1361200000000001976a91434bc4bbdd25c00823aa724884ac7876bcca57ae388ac333f12000000000017a914c609c2c97ea66879306b8028b9a51cfa621ea87e879a4012000000000017a914c609c2c97ea66879306b8028b9a51cfa621ea87e8766451200000000001976a914cb3a7ed1013cfc89b43f35cd070831a21a1cce4288aca16d1200000000001976a9149441d20253d030bfd392043190af5c2116bb41d388ac1839c40200000000220020dc4f9dbaa12ea9095db4bfacb32103be5f1accbd562a3c0e88b3893973ad4dd404004830450221009d74ade5ffb4bcdc3d5b69e4d41f590d8b41975dee71f21ed70fe51e9d07cd980220789e6f184cbd7a29da3e8b067efc8a12e5abd4c09cf81a753e1ba9128417ba8f0147304402204f0ec3382f0aede0b5a776042e62c90cb33c7d3cf67d0a37aff7161b1181943a0220126cc07eba86da3247d3db669b6362ac76b427e29f2051139d972086c66f10cf0169522102fb0febddfa52fe16a81a7a8e066eb0a6c1b417c8f1b606152041d0810b3721af2103cb8a0131925c6ea3150684db74d4ee12dd4dd2616753ddaa370c553411cd50572103fe6bb580bb3b75fa7cc1aa72294086713387b7aff249dfec3fed40c2898b599053ae00000000", + "blockchain.transaction.get:f0e7351b7829826057a984fde7c03d1c67e8235224c5e3791122a072d1e1a3ff": "02000000000101642385ff6fbff5c04bef128255a5b1ee407edf9d4a72a1c97a896df8a7d8b5313600000000ffffffff01891a0000000000001600147af71c0620309cef5d78e399c38ec15dfb931cf5014068c65598d3b686745bb06022048dd77e4fe4645b3b50e95547e791a4e525d830aaa96deca3c72722c9760ee5dc30194b6a4f7e3332a5e93e73c23500b62f7f8600000000", + "blockchain.transaction.get:31b5d8a7f86d897ac9a1724a9ddf7e40eeb1a5558212ef4bc0f5bf6fff852364": "02000000000101baf9d182b956363b867168a7ce460cb67994a55a574637cbc9126ecdb2a133e04700000000ffffffff4eb3220000000000001600141cbc60e86cab2a081adc671f59b94eb31e6f070ab0ed01000000000017a914afa5b92a3302b4eab69a23c6b83253239743f2468764450000000000001976a914d3566785c7828c01c6f9188b71c78cd0a6597c0488acab5c0000000000001600144650d0200eef90052f5d79a93141831a534f7d78a7446b02000000001600142cb2561ba91b3574312d2cef62fda0034f21707cedbe00000000000016001403b0b13dafff395bca8006fa4c71b37716a4c85b34b5000000000000160014fe6a74be5f1a833b0fc27cf01059db06b938b8a1c74f00000000000017a91427091a3927fce90b9ac60ee9e74b32344f25bc83876956000000000000220020aa6f7d1906d1f43d7e7cac3cc2c1525de51cf6248684f9504f868ad6f3ce85c9699b000000000000160014be8c3ea53dfda51e4755e6732a9104697ca8cef3e88d0d0000000000220020293ca48c2052b0bda98822db4ee52ecf9f37544f5ad40ee7e8857a5a34fe9b22db24000000000000160014ba463c0c9610f063615ef5f7480ec4b5e70ffd84fe660100000000001976a914aeb41fa3f2c3623df037c61a858bee5cd027f59c88ac11340000000000001600140a75e8d6998392f2320366f90f407a26c499f8e7f46f0500000000001976a9140a50d6504b42118345f4089cdd8e3b6a30089e0e88ac02dd0100000000001600148194950ab9982d909eabdefe0fa48ff2f7377ea51877000000000000160014ab33419155c65f3bc3f3d8d4e625d6a67782264f1165000000000000160014b0365359fbe2b23717b839d31a791d83df350c423447000000000000160014090f274c874a51e7666a04be6970adc5c12c627f366800000000000016001484ce1a2361ca42db2aa0c59a2820e6c18f85b707391e000000000000160014affeda7c6df0cf3c777f04782c05bafcf05de3b8bfbb0000000000002200200297ede6d96ec92e27d6b723c7f0ea8e6ae4cacbb381445b2d73c78e7b6fa745163f0000000000001600141667c968b936f2299843a2e04323ca9e276a9677e467000000000000160014072ef19e9e90ff659107ccf784021f83dbeef1666463030000000000160014e32decd13b42150a2a41be025000a01a7f190a5f611500000000000017a9145e60a07eef9c52790aac8d6f6f01b4ceccfab2498707360000000000001600148c65e20b855db4679e154f08ed8753ecd71a94ea102300000000000016001402b0b257c7c197179e878d9c9e2392634b61db081242010000000000160014ffd5263b30478103d3172679669a648d70a378f2944501000000000016001471dce581d4923fb893238eaf0f8018bc5b5b9d9b50460000000000001600148d13e55e39e8eb327063c7c629e79f7912838ce6b5220000000000001600141573cfda7341dc8439b2eaedfc6d44ae4cd36d17d767000000000000160014d1d3f0ce70cc2272cc1464d631c73bca18f7ce5527960200000000001976a914228d4b3982ab0175057f69ad4e3c756904c8b05a88ac1e8a00000000000017a9141f96c465c8c432fbe635235dc6bb56a158af9212877fb80000000000001976a91480ba44e47b3405fac3d32caf51f3fe912ae7f2fd88ac59ae06000000000016001442cf55355a3a39d529860b1cc3174b34831bd32e7b390000000000001600149510bc3f06410d0475241c6940332ef3266ef833691e03000000000016001401d1e633e17ec4da888b72c40c8f5b768001ce103c450100000000001600149a5a425f53e7fe44f7bf160cd65c39e9202baf4fb75600000000000016001415a1ee110841296536df86b0ed7c156535ee13a1d9670000000000001600145c4ef985172dd2afb41350feb0fccda33ea1926d0879000000000000160014773e0acb61df37f4d662276ca0ea5ac167c6d219113400000000000016001452ce1fd844a052b5fdb05990f7bcd8011f3185751a66000000000000160014da07e7322eb6810a731e0185df6ebbf154070541eaf6020000000000160014fa85f2994fc42bf0691ce09588ca2bef440a86b62368000000000000160014a88fbe1a3c9aa90645bdd21be839695003aeaf0697ef0000000000001976a91459db1434640ed902cfee39048d3c6c9c800e8b7b88ac821a0100000000001600144e0b71509573e23433c5bd7c5b4555196aa02b8b5e9b000000000000160014644322ac6c4d43ea042d33ea99cf846a1b20fc0e699b000000000000160014b3ed24bc574ec4c10227baf06d0c2d5878a4e9912e4b0100000000001600142fcbc45e349be18497d0ae9f9b7dbcef0c60f8f154150000000000001976a9143c1efaa6158b7988c1a1a36385824172ed7f0aaf88acb63100000000000017a9140b5b58111f34c6c1a22498d38099a92a5282e7f087e91e00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179873af120000000000220020b9ef205271969aa898073e742dbc2ed32656ba17c5753cf1c9dc2fa56363a72a63380100000000001600142776984a10ff2b6cc3d53bc88bca4a8d492919cdd0860000000000001600144a5b7ed87defdb56d3002779979747b01341ab66e135000000000000160014046bed34eb8f28ae30824efc95abd67e62538bee9a560000000000001976a9142537ec3e649147bad382cee675a5bd053d44124288ac0b3400000000000016001491fb5f6be64df745630a4896aee407a6f9ec4328e64800000000000022002009be3f4fbf08d5d952a76b43ddf0b860afff74df4b9c47409924e50bace3e65531ee030000000000160014b09a1a562904c8a665dc2a63c14c9e86fbbf718a42b602000000000017a9144fbe8a97ba06f40c6ceafc81df0167390385e24787bf2b1a00000000001600146fb2128385b04740f2115d680df2540e336f30f3a36f000000000000160014d1f267e98dac8ad7bba82199ebe8eea4361eb888d8590000000000001976a91478ed6463838ec1588f2047968a423e9ec8f3760588ac06ca0a0000000000160014166720c6d31b82403701988c3c6702b12ead1bc1c8560000000000001976a91409c003393f95731a15b40bc25f6674055ddd2ada88ac19c30100000000001600142f7805a1bc480580b89ef2b537a74c3499f0851107cb060000000000160014cd3d7d7626e5538cc8109a95718d9e8091a6fa422661000000000000160014606dfcafb086783e4e9a46438a5caf8fdd2f9c853e9b000000000000160014ef913ef2276388cdd2c9ef7f6c0a24a31368d77cf0911a00000000001976a914ebef974634c4825e68439c5ec625ff3d492d293588acb05600000000000016001437dead37f3631928a144f70f2f3166e4d22e7b1f61560100000000001600141ff9db176dae945bbb8b29d31667df0d748152e56349010000000000160014cc0c685325b271f08486bc43db4e1347d5630afdc9240000000000001976a9147c345faddf3132f4dd0d57d58816f978bd6f1a7e88ac0247304402200cc5cd35f53427db43e32a6d230845aa64c902ef8b0bf517285f062071b610c302204062ba83d02d48189c96edb1e822435870d9dd63b1cff8890db542026c2fd30001210230e7f82076a78f3992c63246a68092f5e5296021f269ee2c0ac323c55c2803ef00000000", + "blockchain.transaction.get:e9a495cede58be0f353626ae2a9bbce99087acc004bd3ca38198f27be15d9db1": "0200000000010129fba2eced19963f7d0056a9a8f027f74ac07795dd6436f558e97fba152623581200000000ffffffff0118440000000000001600147af71c0620309cef5d78e399c38ec15dfb931cf5014043e090ff78645eca17a48162536b58689bd3c861a7f8a7de74d881fd17fc1e6f00822fb67c840acc4759d6dc3e2f20bd1487a19af954d3721f892fd1bdd66c9300000000", + "blockchain.transaction.get:58232615ba7fe958f53664dd9577c04af727f0a8a956007d3f9619edeca2fb29": "010000000001011b1f7c6ef839228aa1679909815f81f4c6e11f9fba338a8f07f684d19ee5c9962f00000000ffffffff348890000000000000160014f0e8e9fe3624695e8844a4ca4071d46d780325f2281d0100000000001976a91451e204c2537e072234681a3033f49e4784d4908188ac80b501000000000016001480fed2e15cd09ecb174f0420f1940786d39f941a983a000000000000160014f323c09f8a5701c86da7cfacc192a07798a777c0b80501000000000016001410b575598deb6a85aac1b3d9eaa79d1d62e16307f0550000000000001976a91470657510ed248e033de1a11740e8c6b7705168a988ac90650000000000001976a914451bffca3f62fe9ef64d4d13e3d2c66f0f7080d788ace02202000000000017a91414025f47fb8ba53e4d9495a590cc4513df16303387f824010000000000160014e96371688bc5fb16932f08b07982a4011e27697e486b0100000000001600144303aa51d78a0aa7dc79835a2bd42958c8fbf2a8d0840000000000001976a9147b4e6341e66db693c02ba1f9b3ec988698b895d088acf8a700000000000017a91476cde79d0a0b7fc65fe5c96880fff695ab5359fd87f0550000000000001976a914d1bddc995a6245fdd7868f1cae48cf8fd4d7fca488acd8590000000000001976a914ccdae2d56342d02ecaa8592c0b31f40d535e263788ac281d0100000000001976a9144078fec902a6e05f773dcde676d2e8b11abdf8dd88ac58920100000000001976a91431d9dbb4281a064e0e5f01549943249047cab77d88ac204e0000000000001976a914f45e81a437b41505ae854f8330b8c8b131dde95088ac384a000000000000160014534af803f73c03aea2bd251d2e83c3ea2ab220f5384a00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817981021010000000000160014403970fa2ac0ae7494066dd596b4c3db1cb49645204e000000000000160014546bd88cb6824790fb900b2ffa0c311a52461331e08d0500000000001600142249f297e8f60f9ae7cf86d2720dd9472343806c880d0100000000001600143e2b6ced47e6ddf610a7ea309d5aa13851010ae2e01c0300000000001976a914f45e81a437b41505ae854f8330b8c8b131dde95088ac38a9050000000000160014ac36fc72ed3f6c222a58d0668fe3e2c1adab9292281d0100000000001976a9147670314b938810016ea95976beba2a58e7c6966a88ac803e0000000000001976a91402b760ff3b838e77ef947308ee369d68816391c788acb0b300000000000016001435d5273c38bd3901b2f4f763610c5e826a4f7c1aa8d20200000000001976a9147dab99545af7e0388fe1ee648374ebc96e9e075188acb030010000000000160014bfd34ffcaea6751d8334f742114d75ef40e5025490650000000000001976a91433e01a247155fdbebc4e690f7f932bd6cc77d37388ac38a90500000000001976a9140fb8efa73438e293dee7503e0146874168093bc688acd072030000000000160014cc2dd5932ad8c83ba2754c3140712351f15b83bde02e000000000000160014b6c6eda6951099b14d798351c1525ed5adccb56b98b70000000000001600142bc68729560befe159ec6bc9800253a670e3252a78da0200000000001600149030caa51b205b8eb74299936eaffc11a2f709c9b8760300000000001600149bd5378f495b6b057701816d37d6aa111a6aaf9be02e0000000000001976a914def05832801059bf2d68ad6d27d902da025dc32c88ac78c80500000000001976a91480737d514ee291e804c7bc3e86a534fa9188f97988acb88800000000000016001437bee253c61fb10f47b83c6df78f896959a9278468bf0000000000001976a914c0051c939c9e08991dad66519e1abc0dcb5f43e888ac50400100000000001976a9144cbc701c05879a480bf3e697f385f7ccc23818c488ac08b70400000000001976a91473d162928f9ea8e7308b49c11c3a21f3167ea39b88ac20cb00000000000017a914ce8625b35279e36fb6967bb3af5b2f5164dedc06879065000000000000225120e58cb189543e0c8114d4a4c81ca7c474a69ca146d7eb835d9b8a6f58218f771990650000000000001976a91450b998404c9479957b83dcec6cfd71e196876a0a88ac880d0100000000001600144e0a52cbc9a0be4aa2a0a6262c8a6f9d1eb5bbd7e8f70100000000001976a91434f861b84f56982a12d8870b5de92cdb99178ccd88acf8240100000000001600140d4631d05da58d4cdcb2f0fd1d045fcde83b9c3a38c1010000000000160014b956aa8e71762342767629ea155ec441be3fdf44f04f0100000000001600144a9cae40771cb5efd45786c42e2683c56f96370f34780803000000001600146367212615852e7dd5605a83e1f0f51c1ada16cf024830450221009ccd56abfc84a18d805f28ac40d233ec66766b312b409b4c51de22cfe1370ae4022021056ddeb548ed4d9a078021272f77db6e1c450e4cf754717272e8f2b52d8540012103cb0876c3d8fddf069dd590722daccebe19dd59e02a44a7ad72eff22fb14610bf00000000", + "blockchain.transaction.get:6f5b1bcacdeaa2dbcf6a9c99372c70f11a8195689fe7f9fdd90e1377d2e4e306": "020000000001027812ac5eba42f5740cbf681f733e076926b8b8afaf1a0d282ff44354d0e2650a0100000000fdffffff0f4f4f6f2e85e2518feb34f2f54e6017cf4aeef3e2301e40b7fab746ef36c1820100000000fdffffff0102370000000000001976a914c07b9849fc9a4cffea518eaa3b956e3696fe71b888ac0141088b1e9016f900cb06a1b90c565d9d31073fe21346e8f6b3149a917427a048cf5abcbb6539b42454c5b16af408322f68f70a719f46cbf165cfdd5304dcb888730101410bea2b81680d9f923211e02f076cd8d39d211b89b5d4d57e2559c4914190079da895ad70572dc8733924befb73801150d66885b1fd6b6d2ae91e4695c64aa5ad0100000000", + "blockchain.transaction.get:0a65e2d05443f42f280d1aafafb8b82669073e731f68bf0c74f542ba5eac1278": "020000000001010f4f4f6f2e85e2518feb34f2f54e6017cf4aeef3e2301e40b7fab746ef36c1820000000017160014bbc117b871b7e194eda4c690f297a222953f29f5fdffffff028d3e00000000000017a91436c3fa9f5fd052c7b8da8496ac98cf44117d50e787db1b00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100abe786bfc153ce42b941a5b46b0a92336cbbcbd0b5aa2ab35fbe10ef194c1111022011643b9ee8d99b9a3492129f00e5ec5a8923667acb85eb6cc306ea6351631a6201210388091aa89c8d9ffafebe0c3bb8e28563a4da7b488c6a35b97fba336347b7512500000000", + "blockchain.transaction.get:82c136ef46b7fab7401e30e2f3ee4acf17604ef5f234eb8f51e2852e6f4f4f0f": "0200000000010159ed01209b5ffe2d519cb54adfee41bc50271a9f0a92b47bd79a486069ff85250200000000fdffffff03935c00000000000017a91405166b9f98fbfde07be2bc8983e69a22c8ee542e87c71b00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798fe7300000000000016001494e417d6f725c08e89cde98ae294310d920c59ce024830450221009789d4c27136d1249b078bba7d2033f561ea8e2e274a3e5ca0b399b30424960502206f5fc1f89b41d7e44aef59bd0eb59b214f5b6d2274c8507f5025b61d4c3d27f0012102b51f7d75fa1a672fda68dd115a9aef9dd1ae02808f7448a7d37eeb4b4669503d00000000", + "blockchain.transaction.get:98287365f0e155caf9514334427dfa493d34d653fba5f833d75aed51c6415b8b": "020000000001037bebe9ec0dd485986668df2d188d81c53983b862f8378c70f715f79ffc21023b0000000000fdffffff11b60248657474b53d1f50460f2fccc15ad4f54b3058d5e896bc57ccbc2a0b1d0000000000fdffffffa58305c164b7b490c620d842be3f5ec78fb12e38ab545b52045988234e1cdf4f0000000000fdffffff01dc500000000000001976a914cb6c5405aa5f9db22ea7e635541e377be23ea51288ac0141099370c520b7064800f4b628b7d3c7ae1912aea1e84cce410cf1f382c53a0125d15bfcbee33a412c6d86735e3063fdb4f5ee0b71a4c49fa3b99105df66fe51f30101416839255a28794a3d0cdcb90a8b8c469e9c10d31982e7ac3bda87d0d4c2d956817309b79f6801861f03f219c2ece614e11954ff6097c1be5f802a874058a82d5b010141954df424bfe16805896b7d270993c7d51dd104ee5d6b6e51ec0670c81f43aafd652f4cd914896f2cdc505e00fdac030101516a298aec2b9af24ac387a4ca2df40100000000", + "blockchain.transaction.get:4fdf1c4e23885904525b54ab382eb18fc75e3fbe42d820c690b4b764c10583a5": "02000000000101e7fc36df165ef84915b60077c52716a3c6357944435a0a7bb0e154def1f860b70000000000ffffffff029c1b00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a6f16500000000001600148b9417b2c10dab845be1b45981ba84982d0a51df02473044022004b5b18f3358288a26562c90cdf928c3181ea96f627bf6ced68f4ff106ee602a02204eca473ba1ce7629715dc47bc76cf378330ee5430fd25770f1b57c223f30d885012102042cade74cb9274d410b9244f0cf6cd071c7cd8209360092744eaae3956f56f100000000", + "blockchain.transaction.get:1d0b2abccc57bc96e8d558304bf5d45ac1cc2f0f46501f3db57474654802b611": "020000000001017bebe9ec0dd485986668df2d188d81c53983b862f8378c70f715f79ffc21023b0100000000fdffffff02201b00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798a36100000000000016001430e597acd2700aa1d679dbcbbd51a0b0c2338fef0247304402207d86d9b8ce62c335e35c30561a5a30866dd89c672fec875cc70fbb1e2fbb30830220729a63d9a7406053bc415df5e9c726a006d2be7fe911a0f128865435b68c70850121033c7b3ef4dc28b574e3954be6100cdb7cd67c7c86eb74ea2831bd321f20fd9a3c00000000", + "blockchain.transaction.get:3b0221fc9ff715f7708c37f862b88339c5818d182ddf68669885d40dece9eb7b": "0200000000010178f21a7c99e37eb6afd1faa2e629377b1604d4acbd593417414c0f75ed42bf550100000000fdffffff03fb1a00000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817983586000000000000160014465c3ad6358d94c2748bcf30daad2c385257ff3155300000000000001600146151358e34f511faf5df5ef2440b56cd86f550a902473044022011ff8c4bc4ff0ea1fa05a11e402cb0bde4c8fd2f290f852379fa4af84f69122d022035be34ef8cb47ac815a7566d11c8239c69944c7a098a100f13c6dba90e1d452d0121023e769ca1e8d525038e56c6d743cebb9c1dc0e6a0e08ee208a3c2970c4df8c3d600000000", + "blockchain.transaction.get:d345d25cbf488e705dd26bec204e7d0dcf9fb04c12a56705c4a5c2baf256c8b5": "02000000000107a3358f9ed3840fa7cef9e2b80b9d199d51dfba24c78666659d547fe4037f786a0100000000ffffffff6f4809e0802dd3c383a4c5461997d67aa137b196fc4a0c90ef6c91749fa17d0d0200000000ffffffff891a634c4960f1e0e3aa8a6e5888151f705769502732b9c0d0e993ff220bdf880000000000ffffffff31a8ba93b2b879119b232e480af1c5694a02d76eafc3113ff0b0af8e660befb80200000000ffffffff31a8ba93b2b879119b232e480af1c5694a02d76eafc3113ff0b0af8e660befb80300000000ffffffff3694e30a8a0b6a2710e0d81f75af89626ee08153f8838af2bed9dcddb049fd200100000000ffffffff2e57a97fe91d7fea2d1465cfd6de16e5ff249da14cf2a65613a6b940eb9ec1cf0100000000ffffffff0110a40000000000001976a9140d73163a05305840f3cf18358dd8acfe7cdfef1588ac0141183c95c393377f1c017f776634d8c2ba63af0ac135193c7ccffdbfc9d417dda593e82995548cd9dc4045546dfe56453d21bff0ae1f91efebc4817e98975a4fa0010141c610cb9cc1aca9afb47d4cd3e626d9e8d7d2f979aa2ccd451160adf7861f27268f480964a8c425ea1102621a28ab902ce0424fe56eebcce5e3cd8b5efff489b60101413e06be7033b98c6b4484a38d21787fddd03762329667aab373c541c9d19b0ad795acfe9d2f278bf006875f91912df4bc37fbe26ca1653a30f4a3bb95545b1faf0101418119776097929215514f00b751dd854f9078e515172f601b5f098dd7aea1ce0fa13804ee6df7989a784592f19d77bc0ab8f2b795b9bf935b27f14d519f53fa5c01014136a09fce6e825be856c57075de4df1f616d4e7df447b970017eb76cae2e4cf8a47553f94c8b5566561e12cbec70e2bf10dd3c3484b9a42b67e9bb7b094c06fff01014196e903589b866357ea63c3f10fe2a317ba5c1957a7098b09b79ae108d3fd62bfab3cfbeb20ee3b5f47724b6851ea5f3380c9f90f67726128834fdfde011deafa01014153c9795199d90b49eb2349027679d22bb4d088cd29b52998ea7fc5fc15e94a2299795e66dda90fa7d2f4f63bb1ba74b5d3e5b4fbf2ff795f8c61fd1c6765d6550100000000", + "blockchain.transaction.get:6a787f03e47f549d656686c724badf519d199d0bb8e2f9cea70f84d39e8f35a3": "020000000001016f4809e0802dd3c383a4c5461997d67aa137b196fc4a0c90ef6c91749fa17d0d0100000000fdffffff021f930100000000001600148621713862f01d904692619c7233a2defe635ea5641800000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100939fbdc91673866899ae7c4a27dea3a41a1d9ee1a84a3918574fefa6077ec00c0220595be524ca2b58eefcf8259eb561c48ac3eaa92d6918212cff7da4fe17b758fe012102f4d47f4fbd8e746943b4bc1fdf3a7eeed10bb78c7182c17d95b8d5ac1283ec8c00000000", + "blockchain.transaction.get:0d7da19f74916cef900c4afc96b137a17ad6971946c5a483c3d32d80e009486f": "0200000000010194d1ccf4c0b44b5e420cb02a58210b0b0ae12364bcc5c6c85401629c7d2a599e0000000000fdffffff03f17900000000000017a9142bf41bc699c55454c5d930793c60a9f8378e4b39870bb3010000000000160014fa2570ed4dacc329f0c799b85c8ce985ea6190994c1800000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100bc1e80a4365bad4071567df629d02e0ca87a31fdc6a5b7a8e84e6bd4030fede902201c9175757e1e287464cebe35f5bca65090eca7b4b7c512cdf5b7ae4e27cfb50c01210369b76a690a679ae7aab0aca30cd60fe2f20a150c5b59f28862d770f754d479f300000000", + "blockchain.transaction.get:88df0b22ff93e9d0c0b93227506957701f1588586e8aaae3e0f160494c631a89": "020000000001019594476d3e74d26f9f4fcae76797742f532e4f42b4374de74b05a4645dfe46450000000000fdffffff01c31700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100bdd4b0bf8d9850a4e23da6d3a20b6471fbaef057dda881826d3ce4f59012d99202207990667db550b0de54d16aa95b66410e7e1e4797a68f5a2b636f97f83d69a053012103272fd6d92028f4a63eb08810a8acc5fc1b6c93a0fe811c16b02a4d1eb85f559500000000", + "blockchain.transaction.get:b8ef0b668eafb0f03f11c3af6ed7024a69c5f10a482e239b1179b8b293baa831": "020000000001013694e30a8a0b6a2710e0d81f75af89626ee08153f8838af2bed9dcddb049fd200000000000fdffffff0457fb000000000000160014e6914da8d026c51fc830e53718f885c13d7c0f92172900000000000017a91471a0076e86d915d6e827ee4d46bff4b97790943287d61700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798d71700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179802483045022100cdbd671976a3377cb4537a7e612a5bca176de7d86dd4f4fca5395a15e580df3e0220626415a0935cb9d223a9478186dfb9f1c1bd22eaf6e5f992352b099e8c8f75cf012103b7ee3a40205105b874840e80f859e8ab4434ab2a4a167e005770a19903294d5300000000", + "blockchain.transaction.get:20fd49b0dddcd9bef28a83f85381e06e6289af751fd8e010276a0b8a0ae39436": "020000000001012e57a97fe91d7fea2d1465cfd6de16e5ff249da14cf2a65613a6b940eb9ec1cf0000000000fdffffff027b690100000000001600145785d937e06a63adcbe72789e3974d765cfc8327dd1700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980247304402206fe8f3c3864cfd375899920a5ba145906f6cad6a8fc36ae617f0d9ad014953e2022052b89f0891dd5e48d299b3f2bf31e9f6ad2686434536c2d6663283eaaaea1f0b012103954d00e6779936ce69a245d9dadb45b8d8f402bb283603dddb00373bb1f52a3700000000", + "blockchain.transaction.get:cfc19eeb40b9a61356a6f24ca19d24ffe516ded6cf65142dea7f1de97fa9572e": "0200000000010222c1e35c74596dba0dfa1e4ec9731d4d90f6da4be2e06ec89d1ae113453ac8ae0100000000fdffffff709481a0120bc9784213be1c3e1621c8c2b58d3a3b13658c7c3d0094348d60180200000000fdffffff02e088010000000000160014264398b2fcab3459380cfc872a038df0c549b309d31700000000000022512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817980247304402202b5bdb595f78befc13fdbe120713c329b8e172c48acc4caee8de435b2670661102201a66f06f17c5750561d750ce3f947fc2fa2b371153c3d8abe3155464b6390a47012103dd4cdc64dc3bc80ba7acb0ab4310f5cb61cb83f99f6789f87136c2fdba05e84a02483045022100be1243e5c63e695360e0e0a46dcd80bf1f1c9887718a8c2083d0f7558c59b55602206d3d00ffb5df1ccce6309e6150a9d8cc0dfc1fbf19de0e736df68142efdffcb8012103cdb2a177c3f8185801a4d258e06ec987f24858a8b4c76d6113e863818951f57000000000", + "blockchain.block.header:967680": "00000030410ccb1cba623e26f2e02f3fcb0e7f06f66998b68cb5010000000000000000003d16ae2558e8ec7b8dd369ee29bb2733fbd39bcc1058c681970a36a7f1a2bdea1135ae6ac51e0217480c3581", + "blockchain.block.header:969696": "00e00020ea7409145abed3693b6aa5e269dea055406e0962804301000000000000000000a8f40cc468f3aa4518fdc368e37fc7aff01eb12b293885f847517602a96e3a93d4abc06af01e021779d3a409" + } +} diff --git a/exposure-report/fixturi/esplora.json b/exposure-report/fixturi/esplora.json new file mode 100644 index 0000000..4bc0d24 --- /dev/null +++ b/exposure-report/fixturi/esplora.json @@ -0,0 +1,12104 @@ +{ + "_sursa": { + "baza": "https://mempool.space/api", + "cand": "2026-10-11T23:44:53.398Z", + "nota": "responses recorded verbatim from a public Esplora-compatible index (path -> body); used only as a fixture of the mock adapter target. Pages were requested exactly as the adapter requests them (/txs, then /txs/chain/). Only the paths the Esplora adapter requests are kept (the stats of /address/:a and /scripthash/:h, and their transaction pages); the per-transaction paths (/tx/:id, /tx/:id/hex) and the /utxo paths, which no adapter requests, were dropped to keep the fixture small. 2026-10-12: in the transaction pages the fields the adapter never reads were removed from every entry (vin: scriptsig_asm, inner_redeemscript_asm, inner_witnessscript_asm; vin.prevout and vout: scriptpubkey_asm, scriptpubkey_type, scriptpubkey_address); every field the adapter reads (txid, status, vin txid/vout/scriptsig/witness/prevout.scriptpubkey, vout scriptpubkey) and every other field is as served. 2026-10-12 (round 6 of the review): /blocks/tip/height, /block-height/971000 and /block//header answer the tip that the adapter reads before the history, as plain text. The tip was NOT recorded with these responses: it is the real mainnet header of block 971000 (hash 000000000000000000007e10297dd9dbd7b6a76292346cd489e568511b7e4c85, header time 2026-10-11T22:53:11Z), the last header of the header chain the C6 Bitcoin P2P follower validated on 2026-10-11T23:03:16.085Z (tools/aere-quantum-shield/dovezi-l1/ots-noi/btc/antete.bin: 1315 headers 969686..971000, each chained to the previous one and meeting its own proof of work), about 52 minutes before these responses were recorded; every height in the histories here (at most 970984) is at or below it. 2026-10-12 (round 7 of the review): /block-height/0, as plain text, answers the genesis block hash of Bitcoin mainnet, 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f. It was NOT recorded with these responses: it is a constant of the chain, and the test recomputes it from the fields of the mainnet genesis header (version 1, merkle root 4a5e1e4b..., time 1231006505, bits 0x1d00ffff, nonce 2083236893). 2026-10-12 (round 8 of the review): /block-height/:h, as plain text, answers the CHECKPOINT blocks that the adapter reads after the tip, on Bitcoin mainnet, at the highest checkpoint height at or below the tip (bitcoin.mjs RETELE_BTC.mainnet.puncte): heights 967680 and 969696. They were NOT recorded with these responses: they are the two pins of the shield's Bitcoin header follower (btc/antete.mjs PUNCTE_PINATE, read from two public block explorers, mempool.space and blockstream.info, on 2026-10-11, identical on both), which the test requires to equal the tool's table, to hash to their hash and to meet their proof of work." + }, + "raspunsuri": { + "/block-height/0": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", + "/blocks/tip/height": "971000", + "/block-height/971000": "000000000000000000007e10297dd9dbd7b6a76292346cd489e568511b7e4c85", + "/block/000000000000000000007e10297dd9dbd7b6a76292346cd489e568511b7e4c85/header": "00606b2513c30754d7e92558d00e0a4900fda8091ebe997beda901000000000000000000ec51ec7be7a1b8c250499fb056fa13d00f5d98918eb64905c8f910a8be64ef7f5713cc6af01e0217dc006b4a", + "/scripthash/348dc4a6a27203ca9acb1c9073872fff5c7c837e794c82f1249ffebe11710dcc": { + "chain_stats": { + "funded_txo_count": 3, + "funded_txo_sum": 5000005777, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 3 + }, + "mempool_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + }, + "scripthash": "348dc4a6a27203ca9acb1c9073872fff5c7c837e794c82f1249ffebe11710dcc" + }, + "/scripthash/348dc4a6a27203ca9acb1c9073872fff5c7c837e794c82f1249ffebe11710dcc/txs": [ + { + "txid": "a2e6580599d949ebcdebd85888e7abbf3ce5113bbaa276bb2ce0b722fcaa3aa2", + "version": 2, + "locktime": 957234, + "vin": [ + { + "txid": "ececc90a9bb9460df75408caa0c5d22c513df82973c3e5855f39a0aca974ba7c", + "vout": 2, + "prevout": { + "scriptpubkey": "0014e8e8f249bbe40e70b1a6b9cb9deb3f1d4ba0bcca", + "value": 11708 + }, + "scriptsig": "", + "witness": [ + "304402204c4e97d149afccd2abeeb7162685bd03d0a7158609252cf8d6b8b96d607bbe6b0220531569f58287be1c9e003b7ce7d8e1c8df277781350c769044722d021607181101", + "02bfdaba69c2c24f77d17198fc4649e4919c499801f18d1211157087d65a88f58b" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "6a404f6c69766572204a61636b2c20446164647920697320e282bf75696c64696e6720796f7572206675747572652c206f6e652073617420617420612074696d652e", + "value": 0 + }, + { + "scriptpubkey": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac", + "value": 777 + }, + { + "scriptpubkey": "001485439608a60e1714d367f28a2c6a85f203988d13", + "value": 10670 + } + ], + "size": 342, + "weight": 1041, + "sigops": 5, + "fee": 261, + "status": { + "confirmed": true, + "block_height": 957235, + "block_hash": "00000000000000000000a5c854964b8fecb0ee34f9222662b7ae5436aa1514f5", + "block_time": 1783552812 + } + }, + { + "txid": "308bc3b8c3987ce86f2af1c32a6e8727f18cb151604b26ab0ce6b21ae5b500b1", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "66062f082f8bee9682eb3ebc4ae4cff87734596e6a5b36e15ed4a386b754ad1f", + "vout": 0, + "prevout": { + "scriptpubkey": "a91473849101c2a19f0172f5320a10f7e05b69c1da4287", + "value": 10000 + }, + "scriptsig": "160014458a593eeb60320ededa34d98bb52cb4a8aaf3f9", + "witness": [ + "3044022001e1661aba38c580640f9a5c6f2b99a60c39098f6d8a436ac80a1bf3ee7daf0d02207c4d2b534ba5c006555bfd6f61ad5f406baddee0dc172c8032171680951d2f9a01", + "0235ad7f08fcc677848136db845a948988c671b2ce8757451203fac7f59680fa6e" + ], + "is_coinbase": false, + "sequence": 4294967294 + } + ], + "vout": [ + { + "scriptpubkey": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac", + "value": 5000 + }, + { + "scriptpubkey": "6a085468616e6b796f75", + "value": 0 + } + ], + "size": 278, + "weight": 785, + "sigops": 5, + "fee": 5000, + "status": { + "confirmed": true, + "block_height": 908451, + "block_hash": "000000000000000000004a4a1b4299d6d7ebfe4ad30538081c0e521472ca149e", + "block_time": 1754254651 + } + }, + { + "txid": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "0000000000000000000000000000000000000000000000000000000000000000", + "vout": 4294967295, + "prevout": null, + "scriptsig": "04ffff001d0104", + "is_coinbase": true, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac", + "value": 5000000000 + } + ], + "size": 134, + "weight": 536, + "sigops": 4, + "fee": 0, + "status": { + "confirmed": true, + "block_height": 1, + "block_hash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048", + "block_time": 1231469665 + } + } + ], + "/address/19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA": { + "address": "19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA", + "chain_stats": { + "funded_txo_count": 2, + "funded_txo_sum": 310000, + "spent_txo_count": 2, + "spent_txo_sum": 310000, + "tx_count": 4 + }, + "mempool_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + } + }, + "/address/19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA/txs": [ + { + "txid": "c2e9cced187a6222901f0dae0942ae95c3c1f92e2cae4b68780c09958d9ad43d", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59", + "vout": 0, + "prevout": { + "scriptpubkey": "76a9145dedfbf9ea599dd4e3ca6a80b333c472fd0b3f6988ac", + "value": 10000 + }, + "scriptsig": "47304402204faa7a296cbf807e2d84d447a5f69a2665fc254913c16fb00bab725fbdda85ca02201b63ed9bb3fa5640421ce29b87a43b0b8316af6f7030f7a38d8e994e170f495b0121025cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc", + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59", + "vout": 2, + "prevout": { + "scriptpubkey": "76a9149022dd1ee155e97d6d875375b48af4c06219a88b88ac", + "value": 10000 + }, + "scriptsig": "483045022100b2fca7c737b0818ae7d5f67b4657df294ac8b08fa85eef7e06e5f207392bc4000220217f7b1f20ebd376e2e9ec059733d19c70e9437d393977b1bf74581e094dda2e014104218ad6cdc632e7ae7d04472374311cebbbbf0ab540d2d08c3400bb844c654231b385c9781def7eabb9900860621d6f1ba5ac3858265459ef5c217feb9568c37c", + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59", + "vout": 7, + "prevout": { + "scriptpubkey": "76a914fd8d22e02b3a41bc38f69516c43f7ebd6268e16b88ac", + "value": 10000 + }, + "scriptsig": "473044022060dc08d4393998c315bb69780a2b609d15ceeaaf93e96d5ad7f9aa8be54885d00220151e4ef1cfe581ce38cfd30a78287930126cbbe8148a1602ecc0ec900228f39c0141043946a3002f7e56bad8f134f9b34282906a1ff5c54d9a60d47ef691c453bf5e1706d314b474399f6dab5088cf0c9ac28543c6f13b66aef3e1ff80d5e14111f7be", + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "a91487cc007a9601b34d3e417aa458c36ed2adc4e15487", + "value": 21000 + } + ], + "size": 548, + "weight": 2192, + "sigops": 0, + "fee": 9000, + "status": { + "confirmed": true, + "block_height": 632289, + "block_hash": "0000000000000000000a12fea13cb4c1c3ff52710c93a156dd57fba16e7dd4e1", + "block_time": 1590827293 + } + }, + { + "txid": "c9c61269ac22f39b44b7af6907aac8d527eb5c4f0cbe721d23a3607ef4641c59", + "version": 2, + "locktime": 632288, + "vin": [ + { + "txid": "0c1cab1e6e34a9bf76af24d1509f645bea15f9146f521180a3d5284e914534f1", + "vout": 0, + "prevout": { + "scriptpubkey": "0014caf28718fa7bee79ad02b0510597776e662bdbc3", + "value": 496700 + }, + "scriptsig": "", + "witness": [ + "3045022100fd597565c2a45a9c53ae5b48f8256d485c88b573b1a54d8705a3f20722435171022076c5eaf0db8cbcdad2fed0ecf549fa046b0ad8beab71af56c364f9a7695ae71701", + "03db4bef4b4a08253f15522c38766ec020fc133fb350bfe2505be1c8f8f985a398" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a9145dedfbf9ea599dd4e3ca6a80b333c472fd0b3f6988ac", + "value": 10000 + }, + { + "scriptpubkey": "76a91476020d10a3ce41f94f4d584ed7f114ea6d01f2d388ac", + "value": 10000 + }, + { + "scriptpubkey": "76a9149022dd1ee155e97d6d875375b48af4c06219a88b88ac", + "value": 10000 + }, + { + "scriptpubkey": "76a9149b0b6a03b5a0ec32a84e861457c3287ec31b13ab88ac", + "value": 10000 + }, + { + "scriptpubkey": "76a914c99432d583a087f51085b5a2c293cda3216884d988ac", + "value": 10000 + }, + { + "scriptpubkey": "76a914e257825e04e5bacd06761b845c755d0024e9059d88ac", + "value": 10000 + }, + { + "scriptpubkey": "76a914f92a30fae49bf6a15b72a267eb5ce98de6876df488ac", + "value": 10000 + }, + { + "scriptpubkey": "76a914fd8d22e02b3a41bc38f69516c43f7ebd6268e16b88ac", + "value": 10000 + }, + { + "scriptpubkey": "76a91417e0c4ee5902aeeebb14985c988f02c7798a5c4588ac", + "value": 31415 + }, + { + "scriptpubkey": "76a9149c7eeeebc332f2abbee8f1cf48635d78d371c34c88ac", + "value": 375285 + } + ], + "size": 501, + "weight": 1674, + "sigops": 41, + "fee": 10000, + "status": { + "confirmed": true, + "block_height": 632289, + "block_hash": "0000000000000000000a12fea13cb4c1c3ff52710c93a156dd57fba16e7dd4e1", + "block_time": 1590827293 + } + }, + { + "txid": "fa1b9a669a7c16f1d0b15cfb57e9830ccee36db984bd074de450e47088c8d078", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15", + "vout": 2, + "prevout": { + "scriptpubkey": "76a9145dedfbf9ea599dd4e3ca6a80b333c472fd0b3f6988ac", + "value": 300000 + }, + "scriptsig": "483045022100acd075b14f4fe12316bb75b07371d6d8ad0df95e477e7e31eb28f733bd6267700220442c39832f21d712e8af14027db405f0b29272f1ee0e7aed26eb64806ea558770121025cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc", + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "76a9140659a10acba837f71af2129690947e417b9cdca188ac", + "value": 290000 + } + ], + "size": 192, + "weight": 768, + "sigops": 4, + "fee": 10000, + "status": { + "confirmed": true, + "block_height": 339085, + "block_hash": "0000000000000000188de542fd76b1676c4be6c380b39ddea119358c290cebd7", + "block_time": 1421345234 + } + }, + { + "txid": "08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "9b11b90a212c27c982013bafe1d4a0730e01357245f0d074051a988e4bba1662", + "vout": 4, + "prevout": { + "scriptpubkey": "76a91483984cddc827ef7885444b3d4af57eba52e9e3cb88ac", + "value": 3290000000 + }, + "scriptsig": "483045022100f5c26eee36e47b5ac824254398e1b82e2baaf53c645366bdd0b359e2cd01c010022067d6e273e289285360d49961152d599581446bbda5286e912073ac5f27ef266e0121024b0faa9624763002e963816b2f6774df0dedd770896a9511cb5c9d90f674ecda", + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "76a914751e76e8199196d454941c45d1b3a323f1433bd688ac", + "value": 100000 + }, + { + "scriptpubkey": "76a9147dd65592d0ab2fe0d0257d571abf032cd9db93dc88ac", + "value": 200000 + }, + { + "scriptpubkey": "76a9145dedfbf9ea599dd4e3ca6a80b333c472fd0b3f6988ac", + "value": 300000 + }, + { + "scriptpubkey": "76a9149652d86bedf43ad264362e6e6eba6eb76450812788ac", + "value": 400000 + }, + { + "scriptpubkey": "76a9148f9dff39a81ee4abcbad2ad8bafff090415a2be888ac", + "value": 500000 + }, + { + "scriptpubkey": "76a914f93ec34e9e34a8f8ff7d600cdad83047b1bcb45c88ac", + "value": 600000 + }, + { + "scriptpubkey": "76a914e2192e8a7dd8dd1c88321959b477968b941aa97388ac", + "value": 700000 + }, + { + "scriptpubkey": "76a914dce76b2613052ea012204404a97b3c25eac3171588ac", + "value": 800000 + }, + { + "scriptpubkey": "76a9147d0f6c64afb419bbd7e971e943d7404b0e0daab488ac", + "value": 900000 + }, + { + "scriptpubkey": "76a914d7729816650e581d7462d52ad6f732da0e2ec93b88ac", + "value": 1000000 + }, + { + "scriptpubkey": "76a914f8c698da3164ef8fa4258692d118cc9a902c5acc88ac", + "value": 1100000 + }, + { + "scriptpubkey": "76a91485a1f9ba4da24c24e582d9b891dacbd1b043f97188ac", + "value": 1200000 + }, + { + "scriptpubkey": "76a914f932d0188616c964416b91fb9cf76ba9790a921e88ac", + "value": 1300000 + }, + { + "scriptpubkey": "76a91497f9281a1383879d72ac52a6a3e9e8b9a4a4f65588ac", + "value": 1400000 + }, + { + "scriptpubkey": "76a914fe7c45126731f7384640b0b0045fd40bac72e2a288ac", + "value": 1500000 + }, + { + "scriptpubkey": "76a9147025b4efb3ff42eb4d6d71fab6b53b4f4967e3dd88ac", + "value": 1600000 + }, + { + "scriptpubkey": "76a914b67cb6edeabc0c8b927c9ea327628e7aa63e2d5288ac", + "value": 1700000 + }, + { + "scriptpubkey": "76a914ad1e852b08eba53df306ec9daa8c643426953f9488ac", + "value": 1800000 + }, + { + "scriptpubkey": "76a914ebfbe6819fcdebab061732ce91df7d586a037dee88ac", + "value": 1900000 + }, + { + "scriptpubkey": "76a914b907c3a2a3b27789dfb509b730dd47703c27286888ac", + "value": 2000000 + }, + { + "scriptpubkey": "76a91429a78213caa9eea824acf08022ab9dfc83414f5688ac", + "value": 2100000 + }, + { + "scriptpubkey": "76a9147ff45303774ef7a52fffd8011981034b258cb86b88ac", + "value": 2200000 + }, + { + "scriptpubkey": "76a914d0a79df189fe1ad5c306cc70497b358415da579e88ac", + "value": 2300000 + }, + { + "scriptpubkey": "76a9140959e80121f36aea13b3bad361c15dac26189e2f88ac", + "value": 2400000 + }, + { + "scriptpubkey": "76a9142f396b29b27324300d0c59b17c3abc1835bd3dbb88ac", + "value": 2500000 + }, + { + "scriptpubkey": "76a914bfebb73562d4541b32a02ba664d140b5a574792f88ac", + "value": 2600000 + }, + { + "scriptpubkey": "76a9140c7aaf6caa7e5424b63d317f0f8f1f9fa40d556088ac", + "value": 2700000 + }, + { + "scriptpubkey": "76a9141306b9e4ff56513a476841bac7ba48d69516b1da88ac", + "value": 2800000 + }, + { + "scriptpubkey": "76a9145a416cc9148f4a377b672c8ae5d3287adaafadec88ac", + "value": 2900000 + }, + { + "scriptpubkey": "76a914d39c4704664e1deb76c9331e637564c257d68a0888ac", + "value": 3000000 + }, + { + "scriptpubkey": "76a914d805f6f251f7479ebd853b3d0f4b9b2656d92f1d88ac", + "value": 3100000 + }, + { + "scriptpubkey": "76a9149e42601eeaedc244e15f17375adb0e2cd08efdc988ac", + "value": 3200000 + }, + { + "scriptpubkey": "76a9144e15e5189752d1eaf444dfd6bff399feb044397788ac", + "value": 3300000 + }, + { + "scriptpubkey": "76a914f6d67d7983bf70450f295c9cb828daab265f1bfa88ac", + "value": 3400000 + }, + { + "scriptpubkey": "76a914f6d8ce225ffbdecec170f8298c3fc28ae686df2588ac", + "value": 3500000 + }, + { + "scriptpubkey": "76a91474b1e012be1521e5d8d75e745a26ced845ea3d3788ac", + "value": 3600000 + }, + { + "scriptpubkey": "76a91428c30fb9118ed1da72e7c4f89c0164756e8a021d88ac", + "value": 3700000 + }, + { + "scriptpubkey": "76a914b190e2d40cfdeee2cee072954a2be89e7ba3936488ac", + "value": 3800000 + }, + { + "scriptpubkey": "76a9140b304f2a79a027270276533fe1ed4eff3091087688ac", + "value": 3900000 + }, + { + "scriptpubkey": "76a91495a156cd21b4a69de969eb6716864f4c8b82a82a88ac", + "value": 4000000 + }, + { + "scriptpubkey": "76a914d1562eb37357f9e6fc41cb2359f4d3eda403232988ac", + "value": 4100000 + }, + { + "scriptpubkey": "76a9148efb85f9c5b5db2d55973a04128dc7510075ae2388ac", + "value": 4200000 + }, + { + "scriptpubkey": "76a914f92044c7924e5525c61207972c253c9fc9f086f788ac", + "value": 4300000 + }, + { + "scriptpubkey": "76a91480df54e1f612f2fc5bdc05c9d21a83aa8d20791e88ac", + "value": 4400000 + }, + { + "scriptpubkey": "76a914f0225bfc68a6e17e87cd8b5e60ae3be18f12075388ac", + "value": 4500000 + }, + { + "scriptpubkey": "76a9149a012260d01c5113df66c8a8438c9f7a1e3d5dac88ac", + "value": 4600000 + }, + { + "scriptpubkey": "76a914f828005d41b0f4fed4c8dca3b06011072cfb07d488ac", + "value": 4700000 + }, + { + "scriptpubkey": "76a9148661cb56d9df0a61f01328b55af7e56a3fe7a2b288ac", + "value": 4800000 + }, + { + "scriptpubkey": "76a9140d2f533966c6578e1111978ca698f8add7fffdf388ac", + "value": 4900000 + }, + { + "scriptpubkey": "76a914de081b76f840e462fa2cdf360173dfaf4a976a4788ac", + "value": 5000000 + }, + { + "scriptpubkey": "76a914ef6419cffd7fad7027994354eb8efae223c2dbe788ac", + "value": 5100000 + }, + { + "scriptpubkey": "76a91436af659edbe94453f6344e920d143f1778653ae788ac", + "value": 5200000 + }, + { + "scriptpubkey": "76a9142f4870ef54fa4b048c1365d42594cc7d3d26955188ac", + "value": 5300000 + }, + { + "scriptpubkey": "76a914cb66763cf7fde659869ae7f06884d9a0f879a09288ac", + "value": 5400000 + }, + { + "scriptpubkey": "76a914db53d9bbd1f3a83b094eeca7dd970bd85b492fa288ac", + "value": 5500000 + }, + { + "scriptpubkey": "76a91448214c5969ae9f43f75070cea1e2cb41d5bdcccd88ac", + "value": 5600000 + }, + { + "scriptpubkey": "76a914328660ef43f66abe2653fa178452a5dfc594c2a188ac", + "value": 5700000 + }, + { + "scriptpubkey": "76a9148c2a6071f89c90c4dab5ab295d7729d1b54ea60f88ac", + "value": 5800000 + }, + { + "scriptpubkey": "76a914b14ed3146f5b2c9bde1703deae9ef33af811021088ac", + "value": 5900000 + }, + { + "scriptpubkey": "76a914cdf8e5c7503a9d22642e3ecfc87817672787b9c588ac", + "value": 6000000 + }, + { + "scriptpubkey": "76a91468133e19b2dfb9034edf9830a200cfdf38c90cbd88ac", + "value": 6100000 + }, + { + "scriptpubkey": "76a914e26646db84b0602f32b34b5a62ca3cae1f91b77988ac", + "value": 6200000 + }, + { + "scriptpubkey": "76a914ef58afb697b094423ce90721fbb19a359ef7c50e88ac", + "value": 6300000 + }, + { + "scriptpubkey": "76a9143ee4133d991f52fdf6a25c9834e0745ac74248a488ac", + "value": 6400000 + }, + { + "scriptpubkey": "76a91452e763a7ddc1aa4fa811578c491c1bc7fd57013788ac", + "value": 6500000 + }, + { + "scriptpubkey": "76a91420d45a6a762535700ce9e0b216e31994335db8a588ac", + "value": 6600000 + }, + { + "scriptpubkey": "76a914739437bb3dd6d1983e66629c5f08c70e5276937188ac", + "value": 6700000 + }, + { + "scriptpubkey": "76a914e0b8a2baee1b77fc703455f39d51477451fc8cfc88ac", + "value": 6800000 + }, + { + "scriptpubkey": "76a91461eb8a50c86b0584bb727dd65bed8d2400d6d5aa88ac", + "value": 6900000 + }, + { + "scriptpubkey": "76a9145db8cda53a6a002db10365967d7f85d19e171b1088ac", + "value": 7000000 + }, + { + "scriptpubkey": "76a914f6f5431d25bbf7b12e8add9af5e3475c44a0a5b888ac", + "value": 7100000 + }, + { + "scriptpubkey": "76a914bf7413e8df4e7a34ce9dc13e2f2648783ec54adb88ac", + "value": 7200000 + }, + { + "scriptpubkey": "76a914105b7f253f0ebd7843adaebbd805c944bfb863e488ac", + "value": 7300000 + }, + { + "scriptpubkey": "76a9149f1adb20baeacc38b3f49f3df6906a0e48f2df3d88ac", + "value": 7400000 + }, + { + "scriptpubkey": "76a914badf8b0d34289e679ec65c6c61d3a974353be5cf88ac", + "value": 7500000 + }, + { + "scriptpubkey": "76a91486f9fea5cdecf033161dd2f8f8560768ae0a6d1488ac", + "value": 7600000 + }, + { + "scriptpubkey": "76a914783c138ac81f6a52398564bb17455576e8525b2988ac", + "value": 7700000 + }, + { + "scriptpubkey": "76a91435003c3ef8759c92092f8488fca59a042859018c88ac", + "value": 7800000 + }, + { + "scriptpubkey": "76a91467671d5490c272e3ab7ddd34030d587738df33da88ac", + "value": 7900000 + }, + { + "scriptpubkey": "76a9146fe5a36eef0684af0b91f3b6cfc972d68c4f6fab88ac", + "value": 8000000 + }, + { + "scriptpubkey": "76a914351e605fac813965951ba433b7c2956bf8ad95ce88ac", + "value": 8100000 + }, + { + "scriptpubkey": "76a91420d28d4e87543947c7e4913bcdceaa16e2f8f06188ac", + "value": 8200000 + }, + { + "scriptpubkey": "76a91424cef184714bbd030833904f5265c9c3e12a95a288ac", + "value": 8300000 + }, + { + "scriptpubkey": "76a9147c99ce73e19f9fbfcce4825ae88261e2b0b0b04088ac", + "value": 8400000 + }, + { + "scriptpubkey": "76a914cd03c1e6268ce9b89e3c3eeab8d0f1b6e8cac28188ac", + "value": 8500000 + }, + { + "scriptpubkey": "76a914c60111ed3d63b49665747b0e31eb382da519353588ac", + "value": 8600000 + }, + { + "scriptpubkey": "76a914fbc708d671c03e26661b9c08f77598a529858b5e88ac", + "value": 8700000 + }, + { + "scriptpubkey": "76a91438a968fdfb457654c51bcfc4f9174d6ee487bb4188ac", + "value": 8800000 + }, + { + "scriptpubkey": "76a9145c3862203d1e44ab3af441503e22db97b1c5097e88ac", + "value": 8900000 + }, + { + "scriptpubkey": "76a914d06b6e206691295ec345782d7ea0686969d8674b88ac", + "value": 9000000 + }, + { + "scriptpubkey": "76a9149978f61b92d16c5f1a463a0995df70da1f7a7d2a88ac", + "value": 9100000 + }, + { + "scriptpubkey": "76a9146534b31208fe6e100d29f9c9c75aac8bf06fbb3888ac", + "value": 9200000 + }, + { + "scriptpubkey": "76a914463013cd41279f2fd0c31d0a16db3972bfffac8d88ac", + "value": 9300000 + }, + { + "scriptpubkey": "76a914c6927a00970d0165327d0a6db7950f05720c295c88ac", + "value": 9400000 + }, + { + "scriptpubkey": "76a9145ed822125365274262191d2b77e88d436dd56d8888ac", + "value": 9500000 + }, + { + "scriptpubkey": "76a9142da63cbd251d23c7b633cb287c09e6cf888b3fe488ac", + "value": 9600000 + }, + { + "scriptpubkey": "76a914578d94dc6f40fff35f91f6fba9b71c46b361dff288ac", + "value": 9700000 + }, + { + "scriptpubkey": "76a9147eefddd979a1d6bb6f29757a1f463579770ba56688ac", + "value": 9800000 + }, + { + "scriptpubkey": "76a914c01bf430a97cbcdaedddba87ef4ea21c456cebdb88ac", + "value": 9900000 + }, + { + "scriptpubkey": "76a914c7a7b23f6bd98b8aaf527beb724dda9460b1bc6e88ac", + "value": 10000000 + }, + { + "scriptpubkey": "76a9147c1a77205c03b9909663b2034faa0b544e6bc96b88ac", + "value": 10100000 + }, + { + "scriptpubkey": "76a914f72b812932f6d7102233971d65cec0a22b89e13688ac", + "value": 10200000 + }, + { + "scriptpubkey": "76a914695fd6dcf33f47166b25de968b2932b351b0afc488ac", + "value": 10300000 + }, + { + "scriptpubkey": "76a91493022af9a38f3ebb0c3f15dd1c83f8fadaf64e7488ac", + "value": 10400000 + }, + { + "scriptpubkey": "76a9147c957db6fdd0733bb83bc6d6d747711263ba50b088ac", + "value": 10500000 + }, + { + "scriptpubkey": "76a914505aaa63a5e209dfb90cee683a8e227a8c278e4788ac", + "value": 10600000 + }, + { + "scriptpubkey": "76a9142e644e46b042ffa86da35c54d7275f1abe6d491188ac", + "value": 10700000 + }, + { + "scriptpubkey": "76a914b166c44f12c7fc565f37ff6288ee64e0f0ec9a0b88ac", + "value": 10800000 + }, + { + "scriptpubkey": "76a914aeb0a0197442d4ade8ef41442d557b0e22b85ac088ac", + "value": 10900000 + }, + { + "scriptpubkey": "76a9140e5f3c406397442996825fd395543514fd06f20788ac", + "value": 11000000 + }, + { + "scriptpubkey": "76a9144cfc43fe12a330c8164251e38c0c0c3c84cf86f688ac", + "value": 11100000 + }, + { + "scriptpubkey": "76a9144e81efec43c5195aeca0e3877664330418b8e48e88ac", + "value": 11200000 + }, + { + "scriptpubkey": "76a914ed673389e4b12925316f9166d56d701829e53cf888ac", + "value": 11300000 + }, + { + "scriptpubkey": "76a91442773005f9594cd16b10985d428418acb7f352ec88ac", + "value": 11400000 + }, + { + "scriptpubkey": "76a914ea0f2b7576bd098921fce9bfebe37f6383e639a488ac", + "value": 11500000 + }, + { + "scriptpubkey": "76a914e3f381c34a20da049779b44cae0417c7fb2898d088ac", + "value": 11600000 + }, + { + "scriptpubkey": "76a914c97f9591e28687be1c4d972e25be7c372a3221b488ac", + "value": 11700000 + }, + { + "scriptpubkey": "76a914f4a4e1c11a5bbbd2fc139d221825407c66e0b8b488ac", + "value": 11800000 + }, + { + "scriptpubkey": "76a914ae6804b35c82f47f8b0a42d8c5e514fe5ef0a88388ac", + "value": 11900000 + }, + { + "scriptpubkey": "76a9144b46e10a541aeec6be3fac709c256fb7da69308e88ac", + "value": 12000000 + }, + { + "scriptpubkey": "76a914a6e4818537e42f7b3f021daa810367dad4dda16f88ac", + "value": 12100000 + }, + { + "scriptpubkey": "76a914e263b62ea294b9650615a13b926e75944c82399088ac", + "value": 12200000 + }, + { + "scriptpubkey": "76a9147fa4515066ba6905f894b2078f9af7b1379169cf88ac", + "value": 12300000 + }, + { + "scriptpubkey": "76a91475f74467ce7214f1767406d5ed12012aa523c48e88ac", + "value": 12400000 + }, + { + "scriptpubkey": "76a914f7079256aa027dc437cbb539f955472416725fc888ac", + "value": 12500000 + }, + { + "scriptpubkey": "76a914683ea8a1ef06eada90556017d44323b5c04e00f188ac", + "value": 12600000 + }, + { + "scriptpubkey": "76a914a58708aa98ad35c889bb36d8049bf9e9cacfd02a88ac", + "value": 12700000 + }, + { + "scriptpubkey": "76a914e170ef514689d7230da362a0c121a0772355051288ac", + "value": 12800000 + }, + { + "scriptpubkey": "76a914ba4c2748360a6b66263e11d1dc8658463ca5ff1888ac", + "value": 12900000 + }, + { + "scriptpubkey": "76a914a24922852051a9002ebf4c864a55acb75bb4cf7588ac", + "value": 13000000 + }, + { + "scriptpubkey": "76a91441b4b36a6c036568972380177eca2916cacd71de88ac", + "value": 13100000 + }, + { + "scriptpubkey": "76a914cecd3ca4319651bd3afd1e23ab66e111ed38d16d88ac", + "value": 13200000 + }, + { + "scriptpubkey": "76a914014e15e4ea6da460cc7835e262676baa37988e4f88ac", + "value": 13300000 + }, + { + "scriptpubkey": "76a91417a5ebfaf62e73f149e33ba674836801f13a80b988ac", + "value": 13400000 + }, + { + "scriptpubkey": "76a9143b6f58a75a54bfd85d1bc6c51180fdc73299232688ac", + "value": 13500000 + }, + { + "scriptpubkey": "76a91405257be4b57ee43fc09762d5d3a9ad4a6e1a036488ac", + "value": 13600000 + }, + { + "scriptpubkey": "76a9143482f8986e13c018692053a784481c63a3554c9c88ac", + "value": 13700000 + }, + { + "scriptpubkey": "76a914692a8e583866fc9056f5c61a45969fb9d868a08c88ac", + "value": 13800000 + }, + { + "scriptpubkey": "76a914a45dae9cd5d3fde21e5aa9a95367d107267b3b8a88ac", + "value": 13900000 + }, + { + "scriptpubkey": "76a914ffbb35a7bb9bbe16c1aa2534f7ff11d59c8e3d1a88ac", + "value": 14000000 + }, + { + "scriptpubkey": "76a9147af50f73fd580f1713af3a6f9c5de49643ec6fc688ac", + "value": 14100000 + }, + { + "scriptpubkey": "76a9142fcea55e6d027a2ba7c7ebe95eedf47766730fe288ac", + "value": 14200000 + }, + { + "scriptpubkey": "76a91419ed3e03d19ddcedd5fa86543be820b3a795165088ac", + "value": 14300000 + }, + { + "scriptpubkey": "76a914ed87120066e244ff5331d5f8625873d7a3acc39c88ac", + "value": 14400000 + }, + { + "scriptpubkey": "76a9145abf369388deb8072741b4eb43ef10fa9388a72988ac", + "value": 14500000 + }, + { + "scriptpubkey": "76a914dca7ebfb78ce21884300f133d89244bc4b1b756f88ac", + "value": 14600000 + }, + { + "scriptpubkey": "76a9145318b9d7fcc93873f768725eb68ba2c924bb07ee88ac", + "value": 14700000 + }, + { + "scriptpubkey": "76a914a3e3612e586fd206efb8eee6ccd58318e182829a88ac", + "value": 14800000 + }, + { + "scriptpubkey": "76a9147e827e3b90da24c2a15f7b67e3bbece39955a5d088ac", + "value": 14900000 + }, + { + "scriptpubkey": "76a914e08c4d3bc9cf2b3e2cb88de2bfaa4fe8c7aa3f2488ac", + "value": 15000000 + }, + { + "scriptpubkey": "76a9141a4fb632f0de0c53a0a31d57f840a19e56c645ee88ac", + "value": 15100000 + }, + { + "scriptpubkey": "76a914da56cd815fa2f0d6a4ce6d25ed7b1a01d9f9bc6b88ac", + "value": 15200000 + }, + { + "scriptpubkey": "76a9144ccf94a1b0efd63cddeee0ef5eee5ebe720cfcbf88ac", + "value": 15300000 + }, + { + "scriptpubkey": "76a914edd2e206825fa8949d1304cd82c08d64b222f2eb88ac", + "value": 15400000 + }, + { + "scriptpubkey": "76a9146b8b7830f73c5bf9e8beb9f161ad82b3bde992e488ac", + "value": 15500000 + }, + { + "scriptpubkey": "76a9149ea3f29aaedf7da10b1488934c50a39e271b0b6488ac", + "value": 15600000 + }, + { + "scriptpubkey": "76a914242d790e5a168043c76f0539fd894b73ee67b3b388ac", + "value": 15700000 + }, + { + "scriptpubkey": "76a914628dacebb0faa7f81670e174ca4c8a95a7e3702988ac", + "value": 15800000 + }, + { + "scriptpubkey": "76a9142ac1295b4e54b3f15bb0a99f84018d208249564588ac", + "value": 15900000 + }, + { + "scriptpubkey": "76a914e84818e1bf7f699aa6e28ef9edfb58209909929288ac", + "value": 16000000 + }, + { + "scriptpubkey": "76a914c2c43e2b16f53c713bc00307140eaae18841354488ac", + "value": 16100000 + }, + { + "scriptpubkey": "76a914442bd85a46d4acd7b082c1d731fb13c8474ffa6f88ac", + "value": 16200000 + }, + { + "scriptpubkey": "76a914b093122f7fb36d11c9f2c80cff2971fba7c9c1ff88ac", + "value": 16300000 + }, + { + "scriptpubkey": "76a914d86f54f73e343d76dd7401639e427d828ba31eab88ac", + "value": 16400000 + }, + { + "scriptpubkey": "76a9149acf9573eb7b4376beca979cfa769f0677cfd94988ac", + "value": 16500000 + }, + { + "scriptpubkey": "76a9140d07a05f7687824fb4dd4a160ddbdc380865500488ac", + "value": 16600000 + }, + { + "scriptpubkey": "76a9146ccfd1cdb43788738536e11e247b0ce31c093f0f88ac", + "value": 16700000 + }, + { + "scriptpubkey": "76a914fa29a9264b9c18fa5925e38d201934ed89e64dd688ac", + "value": 16800000 + }, + { + "scriptpubkey": "76a914a5169d8bc79e8cc94a36246de6bde7596cc9f4bb88ac", + "value": 16900000 + }, + { + "scriptpubkey": "76a914941ccb7383109b47b841044c9f865785676b091888ac", + "value": 17000000 + }, + { + "scriptpubkey": "76a9144cc856b74f1be643a3a0ac65f5399e018aed7ae588ac", + "value": 17100000 + }, + { + "scriptpubkey": "76a9142f86ddd3fac7bf830020f97c46b33aabc891e13288ac", + "value": 17200000 + }, + { + "scriptpubkey": "76a914e3ab5452f79c3ba677d230621f865667114ace0388ac", + "value": 17300000 + }, + { + "scriptpubkey": "76a91479b9c06f479cde2a04c871b7534f1d4706c6411a88ac", + "value": 17400000 + }, + { + "scriptpubkey": "76a9148e235bafd009b1bf67a8475cf1687b09b23c525f88ac", + "value": 17500000 + }, + { + "scriptpubkey": "76a914ed28af7ebd057c69f2f9f5852fcff8da51b3257188ac", + "value": 17600000 + }, + { + "scriptpubkey": "76a9143765ebcb90c64c4167674c8c2f35ad3d12245fb588ac", + "value": 17700000 + }, + { + "scriptpubkey": "76a9140cc25a433319a84636805fd00f8862aeb3fc8cdd88ac", + "value": 17800000 + }, + { + "scriptpubkey": "76a91412417789f9448e8d151699534c43c5b419e4ab7a88ac", + "value": 17900000 + }, + { + "scriptpubkey": "76a91496d61f034c1d3db504e6c84e1d9b5e47b3bbb6ef88ac", + "value": 18000000 + }, + { + "scriptpubkey": "76a914df9faeaaf5c84fb9aca49f923d7ae0286754f13f88ac", + "value": 18100000 + }, + { + "scriptpubkey": "76a914aac6bf269ddce4d550f9c58eedc720b85ba1dc4988ac", + "value": 18200000 + }, + { + "scriptpubkey": "76a9140d6e9b09e523e71ad7b9873dadee0d0bc788033c88ac", + "value": 18300000 + }, + { + "scriptpubkey": "76a914242000d101c4c5b143c63f12ae08caa81d837c2888ac", + "value": 18400000 + }, + { + "scriptpubkey": "76a914b8a393fd03783ac177243e8c4313a4221b049b8a88ac", + "value": 18500000 + }, + { + "scriptpubkey": "76a914710184e0443717cc62b086824b793f4e011b445688ac", + "value": 18600000 + }, + { + "scriptpubkey": "76a9145e8a3a32df85af78e2ce3493985ff4ae2da0062388ac", + "value": 18700000 + }, + { + "scriptpubkey": "76a9148e5160f5d3f432f7421f189d1888b85ed833718088ac", + "value": 18800000 + }, + { + "scriptpubkey": "76a914f92463f967ffc9cea3e1ef846ff106b591e38e6888ac", + "value": 18900000 + }, + { + "scriptpubkey": "76a914b4c41a566543c9133f45361d6df089531911353888ac", + "value": 19000000 + }, + { + "scriptpubkey": "76a91401b038f889ed602266f2c6647f657713e52d8cac88ac", + "value": 19100000 + }, + { + "scriptpubkey": "76a914aa1bda87c542102bc484b1fc54f93764f0ccd70188ac", + "value": 19200000 + }, + { + "scriptpubkey": "76a914e982b609d7049607fb087a936464fe8915087aee88ac", + "value": 19300000 + }, + { + "scriptpubkey": "76a91408cb7331dccb902b5db0a30dcc1ba8adbd6fe4d088ac", + "value": 19400000 + }, + { + "scriptpubkey": "76a9143fecaa5f1295e3374ef2b04a365523cfcb56305a88ac", + "value": 19500000 + }, + { + "scriptpubkey": "76a91465c2cfc6b38650c00242435f1b041a5fb1b733ee88ac", + "value": 19600000 + }, + { + "scriptpubkey": "76a9141262b1eb58a0e55dc874e8c2d097e6119435838888ac", + "value": 19700000 + }, + { + "scriptpubkey": "76a91412f5a4496acc2393b6b56408ae7b3e07b6dc9b9388ac", + "value": 19800000 + }, + { + "scriptpubkey": "76a91471ce182dba6c2838d69248017141117721a7200a88ac", + "value": 19900000 + }, + { + "scriptpubkey": "76a9148621202a5e010769fb0fd1a08027f41e173c3bb588ac", + "value": 20000000 + }, + { + "scriptpubkey": "76a91485567151f330b69bac3eba86bb3aedd8813ec2b788ac", + "value": 20100000 + }, + { + "scriptpubkey": "76a9145aee20366a5523246e1c43dc48462878b0d4806e88ac", + "value": 20200000 + }, + { + "scriptpubkey": "76a91489060378aec62c83cd6e20d92865cf9ca80549b188ac", + "value": 20300000 + }, + { + "scriptpubkey": "76a914230e09c32f5aa23763f8e7c770cee5b5cf4359c188ac", + "value": 20400000 + }, + { + "scriptpubkey": "76a91486b816944ed6fce46ca955b80897996b016f8be088ac", + "value": 20500000 + }, + { + "scriptpubkey": "76a914054907e50b2feceb0b75f850fd764c197844fea088ac", + "value": 20600000 + }, + { + "scriptpubkey": "76a9143d217c047cabb55395cd9618cee124683ea5c99888ac", + "value": 20700000 + }, + { + "scriptpubkey": "76a91430d98d22a09bf062c9b3706af3c059a72bcb787988ac", + "value": 20800000 + }, + { + "scriptpubkey": "76a914c2037dcac7d46e66c4e06c289c3ccd317043833288ac", + "value": 20900000 + }, + { + "scriptpubkey": "76a91426b9a572ce3f674c9c8d3a0f15386d6848783c2588ac", + "value": 21000000 + }, + { + "scriptpubkey": "76a914627a0fd9f1c2034f9d643a355621842288cf455188ac", + "value": 21100000 + }, + { + "scriptpubkey": "76a914c053d1c7b2e7e27c624dcb8087549876af73aa0388ac", + "value": 21200000 + }, + { + "scriptpubkey": "76a9147cb4648719aedaf874354cadf986e89458eb58cc88ac", + "value": 21300000 + }, + { + "scriptpubkey": "76a9143fa96459d3e03e94794724b8605c9ae47a10686288ac", + "value": 21400000 + }, + { + "scriptpubkey": "76a9143649ca67657d482484f49f8f5c8cdb5222c8700f88ac", + "value": 21500000 + }, + { + "scriptpubkey": "76a91458f29e811ffece9aaf65c7a360382ebcea3a2f1888ac", + "value": 21600000 + }, + { + "scriptpubkey": "76a914ddd18e224de138253a990a4cc8d8e7aaa399891488ac", + "value": 21700000 + }, + { + "scriptpubkey": "76a914700c655d586d1a06b0185b12007a1b195d60271c88ac", + "value": 21800000 + }, + { + "scriptpubkey": "76a9149668f0ad5f1eaa5c8e68baf1eaa07c1ea16a88de88ac", + "value": 21900000 + }, + { + "scriptpubkey": "76a914096751c3cb56d4d163186085c81fc8dcf5bfa4ec88ac", + "value": 22000000 + }, + { + "scriptpubkey": "76a914f0e280f15876be99ab63c8aaa4f934f777ed369b88ac", + "value": 22100000 + }, + { + "scriptpubkey": "76a914438993e343b3317a4833a709894145f2374a95f988ac", + "value": 22200000 + }, + { + "scriptpubkey": "76a914eb8d65ae18eba8f6a1fcffe0b37e87fa34b09a7088ac", + "value": 22300000 + }, + { + "scriptpubkey": "76a9149ab3633c60100b0dd631bf1c6755abaea7bc044588ac", + "value": 22400000 + }, + { + "scriptpubkey": "76a9143ce1fc3304d09e7984c5766fd1134c1e8979821a88ac", + "value": 22500000 + }, + { + "scriptpubkey": "76a914b944142155bef6fa7280d5f7f8eae49511349ebf88ac", + "value": 22600000 + }, + { + "scriptpubkey": "76a91432259030b93d8f20268aaa2c5222f9366faa2fc388ac", + "value": 22700000 + }, + { + "scriptpubkey": "76a91457baa9ea3f683b444a06702492443a9057ce2c9688ac", + "value": 22800000 + }, + { + "scriptpubkey": "76a91468ffcb39707615a254428f084c859376fa7144be88ac", + "value": 22900000 + }, + { + "scriptpubkey": "76a9141952876e85b0e6fe7c2557c8345975fd44700f0688ac", + "value": 23000000 + }, + { + "scriptpubkey": "76a914530f6487090bda616a7846f68160ddd886fbdf2488ac", + "value": 23100000 + }, + { + "scriptpubkey": "76a914dde3637371e3638ef51b3753c028d84902153ea888ac", + "value": 23200000 + }, + { + "scriptpubkey": "76a914eefccc98b21f6748888b7b682d9f3ead5579689088ac", + "value": 23300000 + }, + { + "scriptpubkey": "76a91402c031f6bc39053653a093d95511eb1197c5029c88ac", + "value": 23400000 + }, + { + "scriptpubkey": "76a914fa3a7f736604e038a0a7fe5945a114467baba15988ac", + "value": 23500000 + }, + { + "scriptpubkey": "76a914fc152109a2102e72ae6aca2192065e909170d2c388ac", + "value": 23600000 + }, + { + "scriptpubkey": "76a914586efe7cb41fc58c651225492e5c706a3af15d3588ac", + "value": 23700000 + }, + { + "scriptpubkey": "76a9148e11830db460be44112d0d0150016fed3117224688ac", + "value": 23800000 + }, + { + "scriptpubkey": "76a914fff0706a3d7d599d40406165ad0daaa0fe9dfc9f88ac", + "value": 23900000 + }, + { + "scriptpubkey": "76a9147a0a6e15efc2350d3dd45b88d855062a810ca61988ac", + "value": 24000000 + }, + { + "scriptpubkey": "76a914d1a7e9f072b3ebc159327bec2f9ed46362a85bc988ac", + "value": 24100000 + }, + { + "scriptpubkey": "76a9149283ba38d0bb048fb69d6aafc9a32b666f1c097788ac", + "value": 24200000 + }, + { + "scriptpubkey": "76a91459fe4938c08cfa18b39d68a376ed2c065a98a55a88ac", + "value": 24300000 + }, + { + "scriptpubkey": "76a914c9481fd7d3d294113c5e53990d9451e32844c0ec88ac", + "value": 24400000 + }, + { + "scriptpubkey": "76a914ba7199b9bcac99a8ee39e6f103ab3cb049e7dd8688ac", + "value": 24500000 + }, + { + "scriptpubkey": "76a914d9d7fb9cf1d10075b0515591e2570c7efabc80c188ac", + "value": 24600000 + }, + { + "scriptpubkey": "76a914232eb8ef367fc06217fbaa43848df87567b2696d88ac", + "value": 24700000 + }, + { + "scriptpubkey": "76a91455a4cc2020c1769dce6c05e560bcff5db9f27f3a88ac", + "value": 24800000 + }, + { + "scriptpubkey": "76a91477ac8098d4726a592aed489e3880c23cfaf719ae88ac", + "value": 24900000 + }, + { + "scriptpubkey": "76a91404b623b48cc42741d0c9ec3b1fa297664bcec49b88ac", + "value": 25000000 + }, + { + "scriptpubkey": "76a914dbeecf6406c1569a483a88e35ed349a521a414ca88ac", + "value": 25100000 + }, + { + "scriptpubkey": "76a9147efd9baf1d6e21bd5f920e7e9e468b5a45ec92c788ac", + "value": 25200000 + }, + { + "scriptpubkey": "76a914c3a2d618736baf0d5df7d81d5b8235cf8a26644888ac", + "value": 25300000 + }, + { + "scriptpubkey": "76a914e9e6a1ad0ddaf3c372e2e1eae83c8cf9f9163b3a88ac", + "value": 25400000 + }, + { + "scriptpubkey": "76a914460528d920ce045d9f6fc319182960707b24806488ac", + "value": 25500000 + }, + { + "scriptpubkey": "76a9149d77f8bcfd56b6a095703aae85bbe003a9cff5eb88ac", + "value": 25600000 + } + ], + "size": 8864, + "weight": 35456, + "sigops": 1024, + "fee": 400000, + "status": { + "confirmed": true, + "block_height": 339085, + "block_hash": "0000000000000000188de542fd76b1676c4be6c380b39ddea119358c290cebd7", + "block_time": 1421345234 + } + } + ], + "/address/1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9": { + "address": "1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9", + "chain_stats": { + "funded_txo_count": 8, + "funded_txo_sum": 79870, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 8 + }, + "mempool_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + } + }, + "/address/1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9/txs": [ + { + "txid": "092704c4efb9b499c8aceeba1dcb02e2d6abacc180dc9ebe587408a0dafa264e", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "dfa327e160b0e68390065158a4fb86c91f7219c8a47bd2c5a2b16f4bf2cec1b6", + "vout": 401, + "prevout": { + "scriptpubkey": "0014ddc3dfbaacc4f1cc2b3b327d62ab85ccfbfa93d7", + "value": 1506064 + }, + "scriptsig": "", + "witness": [ + "304402203511265c865aa6cb655c081251edeb5775c07a9ff6ef079708ecc18a0d67b0bb0220222a494c586cd34b564030cbffe8b8ec1a226d06e854aa8997ce0a1e239720ac01", + "03f9f7c6a59265e142b9b32b6d8a482b31bcc8d4626ece04a074b5841f1bbd4c14" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a914636f47e2c621334105e0439fa32fde9da232f3d988ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141a36a6499a68baede161abde7a9642fa5fc98f1788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914165ca6cc2fa7aa4bbc9ed9dc8d77ec152911b86988ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141906411fe3400b6ccc4801d95a0206394c3002a188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142a5d6f86c3d5050a9875080c7151036cf61e24b988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914348e804b56429002ae37a0bda737c05f9dad271788ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142ac80f89a227d84acd87d00257eb530576a0a9ba88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142d75f1ee0439f01aa17a2576b7fb838ecc53521988ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141d66654e06f9a26d372d304d03befa3ecbec9e1888ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142c22081f368d26baaa91e33bed5b48582438948b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141559d05668e6587b25390af37e39e0a45c7df42f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914235971558f790bbb8baeb4441c1d836eb961188d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914221cfe010a44eaf1af14c019d39f7587021af92488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141b05e8e969e144cde626dc8bb7213bcf0ab56e3e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141d27a6130cde6495319dcec15c5aaaf43f8c8c9e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142d71a745bec1c4b29b2600e21dee299a03df92d088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142ea245fd75a8dac67e821e55b5ce04bfd3262e6188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9147450d5cd6e1def5af529c2b4e2c28157086a3f9488ac", + "value": 546 + }, + { + "scriptpubkey": "76a91490f61c65a04eadd97931f18106559e5b1914885a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914866dda7c90a6a34791aed55eec505c04a927690788ac", + "value": 546 + }, + { + "scriptpubkey": "76a91441f57e245a44e64ec38f6eacf0778b8261113d9988ac", + "value": 546 + }, + { + "scriptpubkey": "76a91454a02d9e95109360508c0fe824ebfd1c182384fa88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9146eb8658bbbc264972a47d71df59b23485b7581a488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143d6d464f62299e242537ebbc67d6c1cbc0bda2b288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914689fa186f3b3326e977e4117921e9401f37ca56388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a18be654ad730fc6ce2f4009ea7f426be7e346dd88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9145576db8ec589111f4e44bc9dc89666b1dba4230b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141b2a62e570d8f1a185a68a666bf7a2583924bb1888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914f8fa6395e704ec3e2b7ca3637e9ab14f1e2c69dc88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91449c0e836a0bb1e176097e6408efe6cb4c11a98f588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a3c78d275195f05766a9b497d7838b27bacac77588ac", + "value": 546 + }, + { + "scriptpubkey": "76a9148a10425680fa4605ed90adc8c1346084e83494ce88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141c0cfc223867f20e306f8e2845856152d91ff40b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9144aae6baec163d710927ebd6f9602f539ba4be84c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9147b581609d8f9b74c34f7648c3b79fd8a6848022d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140fc9efe892743dc6d9119441a886af611f405a2b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c1c6cb1b7d3c5a3f1dbd79ebd80d29bc6145e2fc88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914f53df66f5e17b079c23797271ad75d35c2023c1088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143d79b9ac9050c4ae33238b623db8264b2b662f8f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9144c4b07a2e6c4e6b9a2d38b4ef2558f7d1382079a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9147e3efc0e1a62511751050706d22e48757d3db74588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914363faf198944a43f02c1f85b9f2724be527eee6688ac", + "value": 546 + }, + { + "scriptpubkey": "76a9146cf1b35a7ae2b3ef4cc792cde0de917230ecc39688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b7d2d71d27c711f5f24dfd595a7abee6f6f90b8b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9148288ba4d7ef3a8e3671a8f57b9254673a20296aa88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914de5d1feaadc9ff4bd7eb8bc2d8ca4ed693848a5e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142408eab57193709b12b8a732a2ede4505fab2d9988ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142a4f2ea87679cc4cf56763647dc35a2076f1576188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914ed3319801afe50a7faf126ed177bff9667b50c2188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142cd415612027d5280ee4fbb28b94af539787248788ac", + "value": 546 + }, + { + "scriptpubkey": "76a9147832a94df69a5c8964ac36f8baa73743b6a8040888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a1587c8e23796c3ecb9f97697b9faa7d685b17a088ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c9c8268bb8660814c8cd137a83440a992f746f5188ac", + "value": 546 + }, + { + "scriptpubkey": "76a91436896b2798eeec0fc03c95b52a357448ed0dfd4688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914f73e287a597be9f69bcfc8159ada66c1aafe4c7588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914f2339cd09bd4cb7a4610a9678837f7b1e49bcaa788ac", + "value": 546 + }, + { + "scriptpubkey": "76a9148f46f308b44651dc1f84c2898a707f693453e7e788ac", + "value": 546 + }, + { + "scriptpubkey": "76a9147eaefade237ecf20cb235ae35ddb95b1e5e803db88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140c5ae026fac9c78b49eec9ae67a4d6c9c7cb7c5088ac", + "value": 546 + }, + { + "scriptpubkey": "76a914066ba995c51581171e34e2276275c377749d731488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a0128c202d3371cbb0c577b7b054d75ae90fa52f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914990a614bdbfd26b3e535eefde71aab01321e52fc88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91445ed040fcda2371e0de4269d36eadc4a47bce3a988ac", + "value": 546 + }, + { + "scriptpubkey": "76a91467b75e5187c1e33ca994efca011f56db7f84efaa88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143aa550b52979309ad049c275ec531b687cdec77688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914fadec86597a5615ae432ec213aea91c0e842338388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e47eb666d628d906e4acdd1d4afc3ebfe9d5b7f388ac", + "value": 546 + }, + { + "scriptpubkey": "76a91470c44247959f48714d7a27d9c1922b9e8c96749b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91433f197b4ac7fc165338e577825cb28f729bd4ea588ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143591c75e0418459ae81a5e7ee1dcfe4f696097ee88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140dad76b342bba5e6cde15dd153bc5225d64e870e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c940fb39d44ff8c657a05e7713d74b76fd651a3788ac", + "value": 546 + }, + { + "scriptpubkey": "76a91462dfb4d8493e6b7a90b39b7ffe6c0974e4bb423888ac", + "value": 546 + }, + { + "scriptpubkey": "76a91400358a91768ed951784617dcf2208cd37494c2b288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bf2b2bbd623927b3f194c799b9b9830cdd6f1a0688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914fb3e12e3161acc9b676deb26848d414c49eb380788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bf86d03f850ab945aa44628ac5a0473249b9cba688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914990d13826fbbc392a891d9831ab90aa5c2f0cf2188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141d4812479ed47ecf53504b8ef30a7d38e1a7c8b888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914482bb0b8f14aa24e50f18d2527046e413bb315df88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140535e3f9d1348e6b4600f4502cf0f2dcf18287f188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a7e6859bf8a6a97b383af0aaae9d3a5c9032ef0088ac", + "value": 546 + }, + { + "scriptpubkey": "76a91449b17951aeb02daad1aca76cbe0ff480ebbd1dfb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141c7573bf28da96b9ad2dcb9bc6ec58db27e73d6d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142bdf6a08fa9ff4682d357967c82fe84d30afe77988ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149bd603549284f3a413986a6b5db08a90ef39e4f388ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140088404a6726cef2350758cb98b0690d680846ca88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914ad56997234a6de507f84696117dc811831984f6f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c798ec14594511a76b87a1e936984857aded6f2288ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140d763a4b65cf3290dc6e32f14f2d85e83e2ebe7b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9147215adc9892fef8740d8cd9b56a816c0c96ea05b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914749d8995eb72ccc50e77e7c1442184c5de70aed888ac", + "value": 546 + }, + { + "scriptpubkey": "76a9148c02fd5d98da512bb287ed793528437a35e4823488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914fa13f3431203ced552702af62bd199b7c16c533c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141702f435f0985e2425f41ea14445513ba8d718b388ac", + "value": 546 + }, + { + "scriptpubkey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914251d09c140e5ffd8a2f867503c090c85ffdc063c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914acbf9c3dea6f2ad29fad5dbc4da6cbc3d7d3643288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e2b536122178b79b67d3fc1e22f114033b4a5a7b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914856b377d49c37314bcc18839d20f23d01d9f32ba88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b87c29a45dcc2885e8877f5edb6ee434af59ccc688ac", + "value": 546 + }, + { + "scriptpubkey": "76a9144726b6d8b8d4f9dff1ce92e7c04b5aa6e8eca2a088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140a965e4d56e56dd9a152faf342f5de5d428847f088ac", + "value": 546 + }, + { + "scriptpubkey": "76a914dfdd7539f2ace8a602d072ad986bf7bd7baa1d2f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141f79370bb10554c3a0b0de5ce669117a4f2dc49788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c6e78f3f8ae38454849da2f9e3fa5b38a18eeb6688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914164279ac78d463d7b1e2f35870f3ec79acead72a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e108aa77839a42288e5eebd900aba0f13159ba2188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c036b137489f4018a86ccefb5958c5afb341035188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b4711f7cea392cb19120f50ddb46b0b51e0a4e2488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c201f40d2b14170b4972390917bf63e4c217281788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914d39c0439284f4007990d88490e51c9b120c2ede288ac", + "value": 546 + }, + { + "scriptpubkey": "76a91499dff4915d45f39ad9e2020ecd9e8be27149c32688ac", + "value": 546 + }, + { + "scriptpubkey": "76a91453010a8ef1ad523f82d92e70c6166511f6f2f8f488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140b47b24b1b6dd6b6ef6fc9c2ddf962b7fd9ebce088ac", + "value": 546 + }, + { + "scriptpubkey": "76a91472c69ce0d7daafa26d56704172a15916b369940488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914596aef525ebe05e66144d893aff5c053b7e7b42688ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149591db844ac43b8be42f5c23ce48265de85b881f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149b3e55c680309a590a9b319b584c6823a7033b4788ac", + "value": 546 + }, + { + "scriptpubkey": "76a91445110199352e60642095c72529405ca82803ee4588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914f91a2655cb31715335f681237750d22c190b401388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914005ba56ea6cd3028f76fc561c9d2e76ed568619488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149ed5105915d3f36e70d9b650b7f106e9b4dc219d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149c9294d0eda27d418c207a885119c33d8ed6495b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149d1f14f3830e16c13648676d91163d9b6a1bf13e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91453eeb328763194df9ccac165d24fbe6a1c73137688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914f2aea28d39a684aa54a2c4bd9c3ed84c4844a64d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914902e1cbf7aeecc3cb512165ada1654ec1498bacc88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c54b5f8e810bf1cd36adb1f7de9d5d540695ec1c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914ae0f55c306208a4cc1448432e6aeabb3353101fc88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914636e28e48f475852bfdf4a3f667cdc375fc0002188ac", + "value": 546 + }, + { + "scriptpubkey": "76a91465ecbeaf3eb4c63da465ca1e6e29fadca375bc2a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9144b60e99cc578aabbd52572df75be9ccbb2d40a8088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9146f6c4d0a32c08b2b5fe729c2b3d2d2f245bb309988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914d9ff8a819ddd30d58f8c87c6e1165dcbe692c8ed88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9146eddbffac833e751740145e8b27b2b6bdfe3670a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9148d2f618b64283dd5ec31035e37ab1cc634249dbf88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91402704a7425d828f95f36e6a7a1a26c97c3a90f4088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141357107e81dbbb83c236b1f00225483440e89b7088ac", + "value": 546 + }, + { + "scriptpubkey": "76a91446e823631877b72ee66885e5ba246b6d4d5b3c4a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9147482f56a14dd12c12243605ae1ebd77eff91e8ef88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914877717568a7e1d716aa7c696f2db7a6b4b79ee5788ac", + "value": 546 + }, + { + "scriptpubkey": "76a91468ef84bc633e3d19da4a832afc73f6be8438629288ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143173f0d90eb54c1ce7bab7afe8f543d03fbd425088ac", + "value": 546 + }, + { + "scriptpubkey": "76a91409f409914c2946fd165f7d489cb9a273d830723a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e520f25341f5e89e743a6a3a335090ce8ebddca188ac", + "value": 546 + }, + { + "scriptpubkey": "76a91433b1cd0ef3d02abf101142901a4e0827be749bac88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914febc63836b7ef9b4c4e661fd5108524bcfb0a38a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914301f6aa9f34c1e90e3d07ef37ed84defc7b6a52e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91435289c7be1fd152053351e634aaac498ae03c6bb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91438a966700f79c1887d4480ec1b590d56cca4cfd188ac", + "value": 546 + }, + { + "scriptpubkey": "76a91436c489b80847ea42da10a3f0fa2402d6e2a7c4bd88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91437130f501558a09774a51469fe4e01e2031791d088ac", + "value": 546 + }, + { + "scriptpubkey": "76a91436451ace467a56cb962b878f205a8ba2b5f26f9088ac", + "value": 546 + }, + { + "scriptpubkey": "76a91436dac75e09a4485537bb7077e0bd2b5609b9723788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914356d4dcf21211bc09debd708aa32c41db6d7e64488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143110b8c1ff0a4446580e28519b50d4d92baa31d488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914316e09a69cd0bb8413006a04711e894f5ec35d2888ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143036a8e803aa91f48aa4b24aca870c12e66d62a788ac", + "value": 546 + }, + { + "scriptpubkey": "76a91435a6cf3bfa88a360292a32d18e5b059385adbbd188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914309dc53be4b5619e5be028645c27c61fc486154488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914316cd64a58ed563fa5211f3ab97c5ac13fe26ff588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914364bec430d129d04125789a6a3013c767de7314988ac", + "value": 546 + }, + { + "scriptpubkey": "76a91436ba14b7670a53056fc497b7c292f0afd222504188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143217240a81c1427aa7d0a0071018f6d9fc316bbb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914353eaba08ecd723a195d297b654d570c981bdee288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914372737c415b4f9f7ca117528c2c5c66eb2d7b51d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91435cf4c09f53042f1c38ab22b4153c34bb98f2eef88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143d8c5ce0cda43422e870657480f51b335b72bab888ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143d301536c26a4b0b71fa685b4348e4d9ffec1b0e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91431d7acf1277b166fcbee555b7a7344a4ad256ad588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914373a07d4d64bf4770baee249af17c36ffcf8d4da88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91438420829a9956ddf67b3bba8666900d5fb3f985288ac", + "value": 546 + }, + { + "scriptpubkey": "76a91436c5e4db81b4cfb85b1a3357d2456872ae23c4ea88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91434b9bbb6f8493c5015a3cd0a6f93bc20c8b3961e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91430cf83c215247aeb6215658b13c417d5ffd6450588ac", + "value": 546 + }, + { + "scriptpubkey": "76a91435ed323567d34132dc83b8fe632ac2cf64e7f04688ac", + "value": 546 + }, + { + "scriptpubkey": "76a91431999b44aad8b2f7954bac7a7027df8e1aecf5ac88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143900f7f83f3b433ad76d1c0a536d392feaaf3d8488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914304cd28169ea74fc622444c938b79c0b566882b288ac", + "value": 546 + }, + { + "scriptpubkey": "76a91435004b909d80811e70bb98a00447d7aa68f8461988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914361bbc1fce7e9278d7ee013057ade43df34e5aa188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914364898ca345e4d8113c34dd59c07b6190c37272188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914305b441b6fb6e9bb635b4779bc174d8e737cd68888ac", + "value": 546 + }, + { + "scriptpubkey": "76a91438b98ad009408cee0d1c5a2027ca6b2abda343ee88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91431208017d8c05c755027000ee0da67aa6d55fa7f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143591bf76112442035f96f36f6dbc15f2a8f41f6588ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143738b74b0d9727a3913e7961b3c2deb7b509891f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91435966d01d18f321412504759fb58b027c53198fc88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91431a11a8c753f77519444e67e7304de3727b94d3a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91435216535c2bdc4684f6082bd84813fe937977b0f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91436d0bc15f0aa005b834797e50b8513dfbbbbff8c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914308544a1fe7aa28d2c7a75dcf53f7d5e20e2943c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91435e0feaabe5ef937de480d286e7fbd18289304aa88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143601a8ab5fdadbc26648d32755d55e3880e886d588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914020ae29d2910e939c5d477e71ebcf4fb4def634588ac", + "value": 546 + }, + { + "scriptpubkey": "76a91428d3ec6a63d471b47d19207cf523c82b5e0e384c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a3c80910c3ab21845765836bd57e537699bd83ce88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b9b352dfb37c998e8af7c6cc98f84c9d630a25c588ac", + "value": 546 + }, + { + "scriptpubkey": "76a91439490e5f469a263c14b1706bbbd13ffafcf51b8588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bc42bf24b0b89b3a41c40d79867f3033689e581188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143987ba00dec2176abf56db193110907dcdf742d788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914035432789bbabd196d055ac07c7be843f9fc836e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bb3dbdbe634c0661b7ce2eb058ab96a1c026e02a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91402bfd859482e9333115fe3b497ee153f4b7159d788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914ba6c85d9810b903d1b307cb68a74f9f3707648a988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bb3a630629218c8a5e5aabcd7b3fceee00c3b3ad88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b91ed63a741e0c57d13f2372b1f1723b5c8bc1c388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b4fd0ee6638006116bc8fa70cef7566ee145d5a988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b4a2935a3e048ffeee4e202193acf0aaf91c8ccb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bc2e5e22308b7d652ecf0cbaab03ea098753b99788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b48c851a1d573b01c7ae452b3502c096c9395ba688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b5815af5e62b363c01ad93749b6bc1f248e782c588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b42b91d026498d943d63d67fb3d9b5485e8cc8eb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a3f1e42aa006d007ac3b87922906c5182d04284888ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149f4d78d3c77b95d7a47b8f0e4d5d031e0b3938bd88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b8cf25a58461bf1e6f0568324637fb03d5b3e87d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bb9f185432378c0860af0e5624478e6ab651c1a588ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149f5d881549a212c53f8843e8a489f550651c617588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b488555eef21088a81dd2818816d94d7f250a0cb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91439322e1fa6dcd27bc789833d75edee087a00951b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bc625b85dc4273f898143ade8c0d616c8c9d3d0f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a4399b1a5020d32cadc91b2402f7f7f69180f85588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b9074db66505a133e55a7f449163ea17f384237c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b58d58a334c8649132fc674c64f5438d76cbb4c988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b52403e9c1bbb888d4cad7007657945e447abb8788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b50e24229d46c7211a51737fc5e507dbf5c51d3f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b4a89053e589e898447a47c59fe98aa8898503f688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b9a00affd20e7569ccbb0ee76fa3b91782fc1cd488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b57e608e76810c1099c443d1d497a40154ef0e3388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bb2e4be333948677c6b76ebaf85173f518af914d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149f44fb8201f51a011626872a55585266a1e0234888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bb59ed58ac5f093a51fe9331c1a6971a17701ef088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140749f0b7a586033c8d5a78b2d8717795cba5eb3c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b8a0525c641489ab8822b00c49c59cb8f225df3788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b499bf0d71b6a55184ff39a4dffdc218bbb32ac288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b540c33a8cd023151daec211d1a8942777b9204d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b485e4bfbe3dc6a38b99b3431afa53fda1a098c588ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149f50b46e832cfa39f42574599acedec0f48feb7e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149f33cfd2ef89f261f6a83650c49bddfd6cac793888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b465752bad661ab482927a4d7826e8ea4779411488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b94e3aae244d071f313909b269e1a59f1808aec988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bbf257dd37c2c7aa24dc7816990787671c753e1f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b5793ba16bfeea033a5941052c2e3a6ac581fe1888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b9600de53dd2c93551dc8930e7a894739a083a1488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9147c2fb351c2a0f1787915b0aae48e00d2d3e091b688ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143b27bfe0159020708bc59ed5097aa44904a3ce4888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a1770af930c96cc325e6bc7659929cb45dcc9fb988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914de1997d8601ebda58a73224d2aa1f159a59c8e6b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149abe76a2c6b51e4623bdc8f292070d867cd750bd88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142ce95d001bb54ba1f77a3fbd737af3a0c1a63b3888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c2ee45948e913c51d81ec1b04729f938c4c5527c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9145ab2245bde178f271078eb67e7c9547d00f329eb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914925848b89f3d153f3c760b897e27c046e99f270c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9141181e7c429190835b5e199827e0b1bedc3a7000488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143bec91810a7e38a8e40f8a90b768bc0d6eb1897c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91425b1a1a6d47bec515d4136958601b8ccac8005ca88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142c507eeb05e0587661e29b8dad6e1924ba655a3188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914252a67d7497175dad99b34fcf8ce35ee1a9d6b8b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e2abee39f4b0f6a90616c0aafc29e1bcfd3ead3988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914322b326b5c5d3635952fa316d6442eb4b136d87388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e7a7690e0d01af22eb980fe470dc7e96fae3459488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143ee36f63368cdd226fc03a30a48c358bf305e59488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c068b2881bd002e6f8c4e130405b280cb002f6f188ac", + "value": 546 + }, + { + "scriptpubkey": "76a91440c03f109ee14ebaa5a1284726032ef6bb449fc088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143a52403d53dd4a7bf9592d0aec348a5a90cf75d588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b7b4dd5da3c03ee3151e527c99286a379c021df988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e2ee991c0120d5ec8d86d37f31353b6e02ac095088ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e359e05f9151e96e8905d4ef8d76fb9945d9dc0c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91495964bebc2ac47c3845e5ec167d748b9fb5324f388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e1b81e53512f86434df36983063a3e78a80372a288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914dfbc1ec72f8dedaa53e1fe0c24b6e61a40bcb9b988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e087ebbc4065ce82e4e5a5d04c7d0ca7728a962d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a0d62a5f296d4770805103bc9a6fe8117cd596fa88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91499e590814a44ce0f73a2b4682289393641e73f9388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b3076a7b077ccd798c5030201229a3b48484602f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914df77d14d66d3b02d7811209f29a56904639e624388ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142c6611e13b8a325c3c2a7bf2bb85bf22f21bb59188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e847a095f1e274d8d1ebe5e554ba79342c69e94988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914404a782a445cf6aa25db708fdff6a95777cb39ef88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914de15f8d8412968b85c65d683acf86dcee5a6603388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a2b70fe868cccddc5ecfc724d16aa0e005b26abe88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143483a13057aebc406ea6df4282995dc2897fe88388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914eca40323d7d0f916c663fadb9708c4d19172ce7288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b88ce185c8fab58f38edd884450100f7c49fb1fd88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149e56bc58402291a51411448ded1ccc62b569f8e488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a1be2f8dce447dac272df789cddad654abd8a60788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914dd3dfbc1a6e3771a1b289cb458ccd1a58ff55f3588ac", + "value": 546 + }, + { + "scriptpubkey": "76a91427109bd3bfcb4c331cfbf377d9ef7b2fe427144688ac", + "value": 546 + }, + { + "scriptpubkey": "76a91491c335c9d29133b93b0550ef53098ecac8ed90e288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c5323d9c11a19d91cbc4413e0e830c907e4bb04c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91432c9a5bcbcf38cb43f7be32a615f6d15074576a288ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149427844e41b97e424cac6a137930d92c3bb25c7988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914df174820f7ce0e3ee6715f5d6bf4f0f2cd55b9ec88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e41058c5a5b8718f8372166b375684e2f7eea73f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91492905dd8148a013d235924c739f065ffdbff611088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149c6dccd0efaa94b45689b4cdbb8bb01673d5ce7988ac", + "value": 546 + }, + { + "scriptpubkey": "76a9145f253d1d48f4062b8e47f8557f069122c22feefc88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142e1267a74420cfc32c0b1c170d66d5262a0a993588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b23b40e6cbf06faf028cfc56a78d14b75448c9f588ac", + "value": 546 + }, + { + "scriptpubkey": "76a91453aa150a1655d3e1f4bb6f17b649ee852842f37088ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e523cb0e62f7d3265af32ebfdfea79498a507eb488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914ddf6301dfb430957a0d9af4eec60a20b488005b288ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143ec8b1dba6a6140c068afaafb0db9c61f9d5d83688ac", + "value": 546 + }, + { + "scriptpubkey": "76a914aaecd63269f67ef581b3b6f95685b67573abdf8888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b33382efe1e6026c99419d68668aeaf9c7ebd50a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b7a77cfa6b903fc4d175858d6aeb25b58545871288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914ecf1e01827919f1649bfd7b397f3a24b3f6c7f9288ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142bc3628d5a0dd80e570dea158c43f05f0ec1ba7b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143ff09488baed38d147f27320bcc20989d27ee27f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142bfc660fc4b54f62f72b1c43dfc487680b5904a188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9145f35607b0880fd8197a0a210fd20330b875f034e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91402c92dd3066f7f12143ba5b6cb409b8ed010466388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c1ff6553c79954e729dd0cca071082ee4beb1c8f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91402cd6222cb74e6aae470a09e5a7d34e7c7444e3c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c200c35c38824a53ef1743abfef42a246a1f446e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149c2240ff1555872077ae5a0b93bc3abdd3feabc588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b38ff71454ba58b2b685c8b176039350adb957c888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b69bb89c674bcd622af17a11dc85db8943b4e04388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e0e90b75d0169e9f38d9de7297ea9a5a19eae69888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914535bd4c5cfcd76c009bad15a17975e3a20bebbf788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e5880d6b6300dff24645a619588bc38e6bd2c7dd88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914ecc733ce3400ed6f42ce0df6cd65081609caa9e588ac", + "value": 546 + }, + { + "scriptpubkey": "76a914df379c28601bd450a1d34ffe1dd407483ea44bab88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914986be8dc33a70672c56402d9e17e531878b5d3b688ac", + "value": 546 + }, + { + "scriptpubkey": "76a91467f8c735e40bc3da6725b66609b55bb538ee8e7388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a26faa38cb92ccf75a16d644832b04194af2f05b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e4f44d089e464980fc632cb2c61cda954f274f1588ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149ba141ea5f3f77296380a25dfe3869654723d1ec88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91499bd9cd6976a93f1f6c27e0a7971cbe04880d42688ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143ae8f47a9bf02874a3e305cf4100c987790158da88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b34881231d2589c4e87a31bda9e40f60a196368b88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149daa04528b3aae6097dd5e81be594e51c9adc88288ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143bc6bc54ceb95ee491d51e10ee5855328f106e6188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143e93fd1dd61f66e8a049a7777b47d02799d9ec0788ac", + "value": 546 + }, + { + "scriptpubkey": "76a91411e223050ccbdf9ffc0ddffae8ab12b2654bdf9c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a274bd9d5f56059fc6c49faf1dce7a4dda523f7c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91494585750b94a5435de61881d37490bb01c33aed388ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149436b9993c737eeb494a38c25d89901e230d44b688ac", + "value": 546 + }, + { + "scriptpubkey": "76a91403d73ce52a025ee54e8b22a990123ff046bae56d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91459c8a42bd9e47eb68cb1039262509ab1ccc3962a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e7186e9f84fcf71e70f4fbcc5226f13496fe108f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142d9fea88053e419f3b4e1a48da064cd40b71eb0988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c0639184274c768b5ccef4cd89883b2dd9994a2188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c1e1f06b68465eb6d128a38088bdbc9da44fafa488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140c1200786731a4252f926c80fd1a0b4c93834d3188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143ab8a72c9c2f8fb4c2de94ba1de576c932e47bc888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e6f8e0beb79e53b3e6542773f29839a870a822d288ac", + "value": 546 + }, + { + "scriptpubkey": "76a91439e422bf8b2cd8cdf1fbf44d4bdec60b4930c7e988ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149ba546ddfcc6cc2371accbe5bea6d64a265d108088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140d08ecb2a806ffa05fa44a8a4583dfd1f2973f2e88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914aacacd4060c5bca95867ed2cd44ed9b3a346fc2188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c09f28570489b6e20164fd534b5cc9b52f545a5188ac", + "value": 546 + }, + { + "scriptpubkey": "76a914a14085de325fbce3f5e80433cb6e3b013ee40ff488ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e4953b0a2a16b314ec53327c030764482e944de288ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c2b3868a9d16613b06f8202f659a0aa277404bfb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bd55e58f788d0e4823fc7e85e1b6ae8c7ee20a2088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9145fa4932d6cc7f0a87b51a538124790da7087d3a088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142a726d6acb694d8626c7d40d0551381508c6a57288ac", + "value": 546 + }, + { + "scriptpubkey": "76a91494684a2ae2e61a8102809f5945c7d5b2c24652d788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b3029e402b95bf3f483454249f7578ba6598d87388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e691bffd5f85f648b8e0b9e98281156da2233e6f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b2e3db4732fa94ba7d918e30947d2c1d00198bc488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142f8509abda89169537c340afc90d157ca166132288ac", + "value": 546 + }, + { + "scriptpubkey": "76a9149265c2fdb8b6a0c0bb2f8fa48d5a29bbf6acaec588ac", + "value": 546 + }, + { + "scriptpubkey": "76a91494edf12abae9ea609d353bfcc3cd106a506b88b188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143e3cc04743166ce1287591b493f1482414ed300088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143e671287b6a1bb14682e189bb00a04bf24923c9d88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91493033c0d182d0860bf7a4faf29e00f87185103b988ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143a473b5e25d88da47be0aea4540531290c65145a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e041a60fea35b6fa3da3c07596ebba8e8492609388ac", + "value": 546 + }, + { + "scriptpubkey": "76a914983a8237b39a513a67480c1bfbd9896171f2bb6488ac", + "value": 546 + }, + { + "scriptpubkey": "76a91459b123bb250eff95816e7c27c4a266650f4cb7a588ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143f7228ce1f244908898d1e4ef3d017284b4e632188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9145e33e7163a4874e43c6f61c6941c114471d3ca5088ac", + "value": 546 + }, + { + "scriptpubkey": "76a914dc849cd56448ce721c7fcdecb8c7cd61b8f43cf088ac", + "value": 546 + }, + { + "scriptpubkey": "76a91499867ed918d666ddc7532385227b30a41e0d3b3888ac", + "value": 546 + }, + { + "scriptpubkey": "76a9140733abda45d4a1534afc997280c2b9cf5a6611e288ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143f466e3dc3aa68ee0368b0297e102d202fac8dd388ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142bf3cb9152b2d0d6e42a5e831b70800f1311cc6c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c13a0033db1915321e3ce9fbcf5fd139095b555988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914dbc225254ea1cf8e99a7842179df97044d8d248888ac", + "value": 546 + }, + { + "scriptpubkey": "76a914bd231b48efcd96731ec07a2558d663a09f76acbf88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91402cfe9b395194c17788097ebe0ea0dc2b2b01a6a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a91499701869186279e8b85905674633308a8100073a88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c4ef2dd0f833f4dc137e956212a41776362697a488ac", + "value": 546 + }, + { + "scriptpubkey": "76a9145e6bdfffd49d318325765683808214b3f98cc7f088ac", + "value": 546 + }, + { + "scriptpubkey": "76a9144f87c89057b39f6b52ac931bd64f0fa8cfe3ba4588ac", + "value": 546 + }, + { + "scriptpubkey": "76a91432e6ed05d4d1a9fad01dd5e310908b7778dd0a0788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b26a4fdbfed2970aaf0d9dea26cb55ea625c37eb88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e13bffed190c7bb43caaed409bd89f6d06ce550988ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c2aca71a5baa289173ec7df2ae948ee0b3ea314f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9144f73f4f19eec840c7eee51624e6f33fe45f4dafa88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914e06ab3ca00b6a7e39f5fe1fd85c98eadced4b5ef88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9142711d65b577fe433de49952e0507042f396a511c88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c462f08c8ad7050911f9459270b847d2b07d31f188ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143e3519dde9ade66ad5027b24d5bc0ade2edc3f5f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a9143ea68b95b19e9644e39c55b627939023d0f0ba7f88ac", + "value": 546 + }, + { + "scriptpubkey": "76a914b780b56454191eae252a3e21299bf4b1ce1f54d788ac", + "value": 546 + }, + { + "scriptpubkey": "76a914c409ab742b6691259ff37c214e1eaf8fb1250e6588ac", + "value": 546 + }, + { + "scriptpubkey": "6a45434f5552542d4f524445524544204c4547414c204e4f544943453a2068747470733a2f2f7777772e696c6177636f6e6f74696365732e636f6d2f3135333131392d32303236", + "value": 0 + }, + { + "scriptpubkey": "0014ddc3dfbaacc4f1cc2b3b327d62ab85ccfbfa93d7", + "value": 1260080 + } + ], + "size": 13873, + "weight": 55165, + "sigops": 1601, + "fee": 27584, + "status": { + "confirmed": true, + "block_height": 950467, + "block_hash": "000000000000000000006e84a35a5b44e8765c694637ed8b2fc0d48a256213ae", + "block_time": 1779428988 + } + }, + { + "txid": "9b00af71e0a48823cebc6fbd6c9b9a60ab517b6b70d2e030ee61fd9be519d6dd", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "8bc81ac063668f81214bbff119e73c8e64b00220852ec34bd113d052c9e33159", + "vout": 2, + "prevout": { + "scriptpubkey": "0014c89ec8c194eaea21312746a4437a18fb20116575", + "value": 2165 + }, + "scriptsig": "", + "witness": [ + "304402204e0ae60ef4eaf28b8008145d0c1404ef9a8ce3b4a8e8d1de7018c989743214ab022040d3799649ffa7b2f23bf1f3189f8a982f10f897736940bdc568f60fe75e31c101", + "02331b1c714589d2e6f58dab1e6a7476131fb5271022855e6fdd0965232914d77e" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "value": 548 + }, + { + "scriptpubkey": "6a3a4e4f5449434520544f204f574e4552202d205365652068747470733a2f2f73616c6f6d6f6e62726f732e636f6d2f6f776e65722d6e6f74696365", + "value": 0 + }, + { + "scriptpubkey": "0014c89ec8c194eaea21312746a4437a18fb20116575", + "value": 512 + } + ], + "size": 294, + "weight": 849, + "sigops": 5, + "fee": 1105, + "status": { + "confirmed": true, + "block_height": 905378, + "block_hash": "000000000000000000007c7b39331f75f7186ada5bab2e6b78a79b6a6e4cb313", + "block_time": 1752417301 + } + }, + { + "txid": "65916aee7913a7bf95055dfff7b198d11ecc12ecb9fa5393f2a93fd2f6433e99", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "b09bc44d5bbe27559fafb690bfdfe52d7d5c75a2c93ba3293e20a03d5041c0f7", + "vout": 29, + "prevout": { + "scriptpubkey": "0020c07b16fb5cdde6ccb429fdd435111321479ce540a3909064c810fa25c2b40d96", + "value": 7287541499 + }, + "scriptsig": "", + "witness": [ + "", + "3045022100f62e8ce599f6b395d27d80e12ddf7f1340949a35c4b878fac6fecd1d92cf1017022019dd24ed68bb4b3da67958e0c9b4c314824d64e0b95419bac8f61a5fef87a7e701", + "304402204ce1356bb782d87499bc0916f150bb157b0cafe433b4c957902f597975429203022013edfabb5e26c490fecfb58b7f407b3c8c4b87e4cfbd5dbfd6cab15b07d1246e01", + "5221025c72bef263157577a4e3eb4c2dc0efd368d2a7b665d51b40c55d00e2ddbcf8f22103cd6ee67bb134ea4ec9f05f4c2c486adb45f96df841662af11ec86afcb44e16bc2103be638c7bcb13820dd09a376b0673c0549547f292dabcac753b5d449dacb063c053ae" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "0014847b51bb140355ec47ef35e439094d02f021a6e7", + "value": 1075000 + }, + { + "scriptpubkey": "0014ca346f5a23343adb01dcd57d487997b36ca8cf88", + "value": 192700 + }, + { + "scriptpubkey": "a9147531e918c87bc434cdaebcfdea744aa0cff1004d87", + "value": 61492000 + }, + { + "scriptpubkey": "a9145fe9e3fd898594dea78f7d181338cdcb1457a73f87", + "value": 14301000 + }, + { + "scriptpubkey": "0014bae06a67e9cf6399c0608d9966d1cb8cc65272be", + "value": 537000 + }, + { + "scriptpubkey": "00141a0057eeb0cca905a9a49efbfee28aa178bfe143", + "value": 2499000 + }, + { + "scriptpubkey": "a91499efb6e42c8e1efeea08e8c11b356a2a3637497887", + "value": 260000000 + }, + { + "scriptpubkey": "0014e9c5b9b8f14984869ee3cb0ab346bded395b0609", + "value": 103219188 + }, + { + "scriptpubkey": "a914c782dc86f44e88722412ee40b707f53619c6a1e487", + "value": 290400 + }, + { + "scriptpubkey": "a9147466edad1cd9baf4df61cc55a1a62aea95d94b1e87", + "value": 2156976 + }, + { + "scriptpubkey": "76a91490c068c547e34ff4c92a75e6c3e81fa3e1bfc58d88ac", + "value": 2420000 + }, + { + "scriptpubkey": "00148904231eaa7f245cf6a9c0a5c96fdf7602a70476", + "value": 179000 + }, + { + "scriptpubkey": "a91456e868e0c2ac89d7edb92b7c2cc5755cfee490bc87", + "value": 226000 + }, + { + "scriptpubkey": "a9143224569779f327a303ff49b7b05aaa0f3611f33d87", + "value": 273000 + }, + { + "scriptpubkey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "value": 76000 + }, + { + "scriptpubkey": "001406d13d60f7d2bfc16e4447b64579850c8bd6b8ae", + "value": 2399000 + }, + { + "scriptpubkey": "76a914e07b29fdc9cc347539192e0aa33c67d177c6ad3188ac", + "value": 1039999000 + }, + { + "scriptpubkey": "76a914992a21d9338dddd37a7c610a619719760e3b3d7c88ac", + "value": 1827000 + }, + { + "scriptpubkey": "0014e423cab2144aa3abe8ded77a3d6987caab6ba110", + "value": 309784000 + }, + { + "scriptpubkey": "001427c60b623f372bd5f4c57f29a912e549734633aa", + "value": 27909000 + }, + { + "scriptpubkey": "a914521cc450e765af17e9f848e40a53b3b63f4c826987", + "value": 253000 + }, + { + "scriptpubkey": "76a9148f0232256386dd406fd8bd4dede2089f7329bb8688ac", + "value": 437617 + }, + { + "scriptpubkey": "76a914a09bc944fa30b505b009d2718ecbb0eb25b145bf88ac", + "value": 1031000 + }, + { + "scriptpubkey": "001452e106319ce7f6fb58413dfa4be22086561cdab7", + "value": 1140000 + }, + { + "scriptpubkey": "a914d9579a75790f4f208f74affba54ef8be519b8e0e87", + "value": 7499000 + }, + { + "scriptpubkey": "00145fbb3bfd4e1f66c58c14d8a4a4fb2bc8109f4d2c", + "value": 723000 + }, + { + "scriptpubkey": "002096ae07e89461e5854b88e0211a856f66d2aa777a6763e39a42ea0ecffa3f7a53", + "value": 5445593027 + } + ], + "size": 1182, + "weight": 3963, + "sigops": 27, + "fee": 9591, + "status": { + "confirmed": true, + "block_height": 751265, + "block_hash": "00000000000000000006cd7404b981325b69c9186db3a30eaeb3e37fd8b51d9d", + "block_time": 1661537908 + } + }, + { + "txid": "a66b0e20ca318ff84dd5da4c099fb9bcaee60bbc2da637b912bfb73345ffc9e9", + "version": 2, + "locktime": 667552, + "vin": [ + { + "txid": "680fe858dc6e911a4d18787281dcd7d1a99a9888945a0b3fa07c84a09b69157e", + "vout": 607, + "prevout": { + "scriptpubkey": "001427f92239a7158ccc949e7ca04b70afbc7d8083da", + "value": 1763325169 + }, + "scriptsig": "", + "witness": [ + "3044022071982f034bc30b4cc1218be6805e2c9fa3d7e0839313e20cc6c55ae425dc0600022079de9446092780177e1ad103a774a69be0c160c0cf819875ee6c83ebe688b05301", + "038a0075f97e57b497ba99aeb3c3cfcbf44a69e019fc4656200e5329e618201f0b" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914075b7dfca1465daa6f51b8497af83c10042ef39988ac", + "value": 547 + }, + { + "scriptpubkey": "76a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91404d9d15e67e6f20551992e03039711e59281f72888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914ae3be4abc4c3f171ee28567bb4cfef4bb47f318a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146c42e1e7a5cc6298cbe98fd3ab1890621317b58d88ac", + "value": 547 + }, + { + "scriptpubkey": "00143a0d4f126b6022b058fc98d6faba62fc4e885431", + "value": 547 + }, + { + "scriptpubkey": "76a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aab56eaee257ced13882fbc50b8383688446d51f88ac", + "value": 547 + }, + { + "scriptpubkey": "a914992e7fd1b312165ba024fefb3c90191713add5d187", + "value": 547 + }, + { + "scriptpubkey": "a914cc0b10125327351c594fbd9de1f5ea3211aad90f87", + "value": 547 + }, + { + "scriptpubkey": "0014f56a846749e38dd03d23d12bdbaed4901e085137", + "value": 547 + }, + { + "scriptpubkey": "0014be1fa434eece39c289a443c0891185e34f892c1c", + "value": 547 + }, + { + "scriptpubkey": "001405a4106b48a9b909e4708f0d6b70cd3dba56aeaf", + "value": 547 + }, + { + "scriptpubkey": "76a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac", + "value": 547 + }, + { + "scriptpubkey": "a91426d15738c606c1107f313dcee38e81af08ff96fc87", + "value": 547 + }, + { + "scriptpubkey": "a914bd060670716668c2c55654534aa281f2c910d1b787", + "value": 547 + }, + { + "scriptpubkey": "a9141a3f58c92ef5fe1fb1faf36652babcc68fb0229c87", + "value": 547 + }, + { + "scriptpubkey": "76a914aa78edd530844329915159f2c0e193ca791a824988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914ff51a2045e512b6d4b07b2cf00314a005623984488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b92d99899d92b447668dd2705a2dad2d2110c6dc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac", + "value": 547 + }, + { + "scriptpubkey": "001407ecd70495836065a9e3e8d1bf5d2254e114e95d", + "value": 547 + }, + { + "scriptpubkey": "a914568f34349dc2792c2a5318b046c3cdefba02d09487", + "value": 547 + }, + { + "scriptpubkey": "a9141ead9d0acd2f29f70ec28943a89f7b3c26998d2487", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9c17ab5726c479300d01c69499a198aff9412088ac", + "value": 547 + }, + { + "scriptpubkey": "a9148eb47d1832d38bb21db09a026e20af8aa991a40d87", + "value": 547 + }, + { + "scriptpubkey": "76a914d8fd61b3730d824ade8d9a8eebf5ac323eb230e988ac", + "value": 547 + }, + { + "scriptpubkey": "a914d98608245b500b7a06fcebec6bc1dc03b68a84be87", + "value": 547 + }, + { + "scriptpubkey": "a91478a64316229301b89ce158f4741ed7add4f048d087", + "value": 547 + }, + { + "scriptpubkey": "76a914cf3890eea91c255f2b088c1a360fa50cc129476988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac", + "value": 547 + }, + { + "scriptpubkey": "a914c3c432eb827dd2b012e3160fa45ca87424bfe61987", + "value": 547 + }, + { + "scriptpubkey": "00145425fd2d87afcd7bc9c7c01797f3662640a5d135", + "value": 547 + }, + { + "scriptpubkey": "a914e73413bea1e8a5871f6076d000f1b9706428829387", + "value": 547 + }, + { + "scriptpubkey": "a914ec2a3c05000febbc7a7e134cd93fb4d1addded4387", + "value": 547 + }, + { + "scriptpubkey": "76a914f251420a06be6adf79ea0173fd433e30825a9d9b88ac", + "value": 547 + }, + { + "scriptpubkey": "a91468057331d5dd8f958f52a45550253153843d91e187", + "value": 547 + }, + { + "scriptpubkey": "a9147ae8b746a0d44619a05893283942a76683dfcc9987", + "value": 547 + }, + { + "scriptpubkey": "a91490e9eaf2b622c6a2c957a0bd286ed97edf6c846287", + "value": 547 + }, + { + "scriptpubkey": "76a914b476ef2ca4734cb9a46a111543beada2f102ea9488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147b18b02c105f05a5e0cec2f842f1c2bd8a71f33188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9ff9a44eb200b1c989fda7f95f92e2dc4f9e7e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149ff78bda22aa357a14e389dcc77f3d1f8306257788ac", + "value": 547 + }, + { + "scriptpubkey": "a9149bdd7b34a3a73f90605f300756589b1f6db8da2887", + "value": 547 + }, + { + "scriptpubkey": "00142f88fc7b48e7a70dba8fffe8cd1d340053c8dd74", + "value": 547 + }, + { + "scriptpubkey": "76a91467875d1a42af398108fff2c1ddf20d7e386aaf1d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91430e2e2695227c6ec784f31ad95aa9f77183e601288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f32abc1d4056bc660cfeb4e020e9037c840a211188ac", + "value": 547 + }, + { + "scriptpubkey": "00145ba2d59f473123550b132bf10e15eb48683dae1a", + "value": 547 + }, + { + "scriptpubkey": "a914767b93bc0474dfaf1a3e7757d9b99d8c8921232e87", + "value": 547 + }, + { + "scriptpubkey": "a9140b4d6b288b3ca9a052ef16968c1bfed359636dd487", + "value": 547 + }, + { + "scriptpubkey": "76a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914dec9b43aba894697135f2067fda7518f9f15b33a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c059ae8322cf82a9f5f4818f427124ca009d8f0888ac", + "value": 547 + }, + { + "scriptpubkey": "00145bb1e0498e412eefaa37ac62d2778a4e504ed10c", + "value": 547 + }, + { + "scriptpubkey": "a91474f1fb0411dca7f3919c43392ab2c594c04905e787", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9b3a4a4da7fe2368746ef8df0ec2569b0057f188ac", + "value": 547 + }, + { + "scriptpubkey": "a9148c9b617d70c897bd5450aa56cb3d7c9f13952b1a87", + "value": 547 + }, + { + "scriptpubkey": "0014b8d82c8205e4a39f6e5f8d89f95c1520300a5114", + "value": 547 + }, + { + "scriptpubkey": "a914286e901de5d809077be3139100a2b90d7de3be7b87", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9a101d070bbf57baef0b8a4f17301e8a71baa488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f5db8ed11248d26b48906ca8635f11c8fd953e3687", + "value": 547 + }, + { + "scriptpubkey": "0014b3410e6001fbccb09e37b81f3b644cc630ff12fa", + "value": 547 + }, + { + "scriptpubkey": "76a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac", + "value": 547 + }, + { + "scriptpubkey": "a91452634d3cae32b2ad2613e9cd98e88d2c2b38a2f387", + "value": 547 + }, + { + "scriptpubkey": "76a9141252ee70db5d669019ede5895f6c2442a045423a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91442c78ecdd8dd08dac6765c2730aafc695c80780e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91443a4be0bcdb1de9e3873075b9c679d64ef906a2c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91411452b8be73d1c63619f1739d4cc372c5824b27188ac", + "value": 547 + }, + { + "scriptpubkey": "a914659e9fe07ce74be93cd0ae466c5642606d71f75f87", + "value": 547 + }, + { + "scriptpubkey": "76a914d185bf24ebadddf0bdeb15526de7a2766705cffd88ac", + "value": 547 + }, + { + "scriptpubkey": "0014133721d5110e4faf16300e9d96a91125ac7ee39b", + "value": 547 + }, + { + "scriptpubkey": "a914cf28ba8dcf55b472feafa29084a0fe4462c1a53d87", + "value": 547 + }, + { + "scriptpubkey": "76a914aaa0e19223e8f15ccfea98771b2f414b794373a788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144e32134232499d626899eb0c939580e7a2358d4a88ac", + "value": 547 + }, + { + "scriptpubkey": "a914b30e777c5b98e75ab323eab32568d49031ee09da87", + "value": 547 + }, + { + "scriptpubkey": "00146bdd9cbf9df8bc75b3ba859813e8d94b7c75cf27", + "value": 547 + }, + { + "scriptpubkey": "a91460524c444bdeb016e588b5342a94191dd288920d87", + "value": 547 + }, + { + "scriptpubkey": "0014400aef7aa983c1616dcd2e46d847f9a9e4858a6c", + "value": 547 + }, + { + "scriptpubkey": "00149768c2298587d11719ca00b5288a77f1be2f2108", + "value": 547 + }, + { + "scriptpubkey": "a9142d19942114338d4badc6301d18fbfbaca97eb64f87", + "value": 547 + }, + { + "scriptpubkey": "76a91466fb5b68210405f03c093143d1081c8eca62d17b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914a78da71baf05a247c256ef7cd924eb7658d1a94687", + "value": 547 + }, + { + "scriptpubkey": "76a914af4a5b9fe437cba4793f69c9df8c4cf3d26caefc88ac", + "value": 547 + }, + { + "scriptpubkey": "0014f1bb2480456be9d6f3bbf9dbff1eb0047a776be3", + "value": 547 + }, + { + "scriptpubkey": "a914e11db11d69beb6863b0cf4f4ce49d0c8187f3ba987", + "value": 547 + }, + { + "scriptpubkey": "76a914af35fe024575d751d379806e93855a3b472d154788ac", + "value": 547 + }, + { + "scriptpubkey": "0014dea54a0f785b15fbd4d302425c82341ce937f827", + "value": 547 + }, + { + "scriptpubkey": "76a914241502fdde2def412f786641009a31d85c9dad0888ac", + "value": 547 + }, + { + "scriptpubkey": "a914c36c3b801f97fc401043bec0a0f471698cc0d5e087", + "value": 547 + }, + { + "scriptpubkey": "76a914b46c02e2786a2f2028f09ccc3f5f1265a0c71f2f88ac", + "value": 547 + }, + { + "scriptpubkey": "0014e33a3d9fc71bedfceb17279b54fd2df860583adb", + "value": 547 + }, + { + "scriptpubkey": "76a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa94113b2747ca73fd187fddad9ff764f95580cf88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac", + "value": 547 + }, + { + "scriptpubkey": "a914abf59fb35633235708d1126fa1ad5f355e79510887", + "value": 547 + }, + { + "scriptpubkey": "a9142810817059eba5fa4a58a8df2c94ab778d8314eb87", + "value": 547 + }, + { + "scriptpubkey": "76a914b9443ffaef7c58f3bc307201483a384543a5c0a888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914af3964e461f41b87ed33bac7d5361256f95b4f0488ac", + "value": 547 + }, + { + "scriptpubkey": "0014c9ca604c6334023a1b67ea94bd59a9ec54bdf839", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9d984067b4055179d6207694e1f02048f01a3f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa8fd9afdf033f40d7c83d967f23ea0ae01be87988ac", + "value": 547 + }, + { + "scriptpubkey": "a914d5b7d816b5ced951228662bcc4a50cd06643feb087", + "value": 547 + }, + { + "scriptpubkey": "a914e57c267b76de79d542417fe19c9bf93f7ecb31cc87", + "value": 547 + }, + { + "scriptpubkey": "a914c6c3079c51df289ae3214688b12879e8154582fc87", + "value": 547 + }, + { + "scriptpubkey": "0014f5f34432b834dc48aa4667f363fd617a9cdfca0e", + "value": 547 + }, + { + "scriptpubkey": "76a914aaa1432d8a79549fc2b724aa560554424050c0c488ac", + "value": 547 + }, + { + "scriptpubkey": "a914749140baf9298b41f4d1b13c8dfbebd82320477b87", + "value": 547 + }, + { + "scriptpubkey": "00149417b5e90126ece9486d7c745c04547aedd9f3d3", + "value": 547 + }, + { + "scriptpubkey": "a9142480911e18cdf4f1142a22e8dfa04d58d368a4a287", + "value": 547 + }, + { + "scriptpubkey": "76a914484f9c8449a57b88ff8163bbeb7f42ffede843de88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914885be2340ea7cc0aa2f8646137d922142d26474a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145ef248eab5dbba9b3782caa6ca55704df8fbd6b288ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147d7b036fbe1450332b3204301fbc6cc4ad27084d88ac", + "value": 547 + }, + { + "scriptpubkey": "00146c4931d9dbbcc288b9380f09d5781e33cc9025d3", + "value": 547 + }, + { + "scriptpubkey": "76a914a3e1e10c49758a7e9c2e15e9daaf8443b1889b3788ac", + "value": 547 + }, + { + "scriptpubkey": "a914f65d73acdf6ddcff6b9fe40aa729454a798c5bc287", + "value": 547 + }, + { + "scriptpubkey": "a914a197190e15215de4d3b221d4173b4b958279c34f87", + "value": 547 + }, + { + "scriptpubkey": "0014b9b6c250de156dd92689c1cbd4cb8a9b73a1d41a", + "value": 547 + }, + { + "scriptpubkey": "76a91483068bc8913bb8fdadff3c8c5904442af64deae688ac", + "value": 547 + }, + { + "scriptpubkey": "a914dbc151f2b6c63c7068ff79a0113ce4d10d19429087", + "value": 547 + }, + { + "scriptpubkey": "76a914b77e68177d0fef51df52370af08f530cc8e149ec88ac", + "value": 547 + }, + { + "scriptpubkey": "a914c6cd5de309034a67a53a4b7c82067bf6b499d3c487", + "value": 547 + }, + { + "scriptpubkey": "76a9147d9b7721645c954c0f8d2f96637da98b036c317588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914eb233a91b56c6162468141e70256722ca9217a1788ac", + "value": 547 + }, + { + "scriptpubkey": "00144160e8618d37a1f27498242a1bd80075d2e70c9f", + "value": 547 + }, + { + "scriptpubkey": "76a914226c48bc72d3dfafe447f6448a6d09719752345e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914d5dbfb7d92954088b0c15968da3095adcbff19a387", + "value": 547 + }, + { + "scriptpubkey": "a91488eaa986e2e8760cc55e33a8141403df77149cb487", + "value": 547 + }, + { + "scriptpubkey": "a9148aba7dfd8e903b1e1a63288b1deb2e41f54eb5df87", + "value": 547 + }, + { + "scriptpubkey": "76a914dac7c548c756a85284be4bb8d3e2052ee337a6bf88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b46cad8eac9bb05ca9d48fe1719744e2a308fa7988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140791f1f6600311c3043e4e247050833567bc2cdd88ac", + "value": 547 + }, + { + "scriptpubkey": "00149883ce0475d016f46a6c3527031cd6a855b7cb3f", + "value": 547 + }, + { + "scriptpubkey": "76a91446855e33a25dad1ffb1721630dfc9ed1749fdc1a88ac", + "value": 547 + }, + { + "scriptpubkey": "a914d7727d827b4710d0e0fbe0cdd70833753b63a48a87", + "value": 547 + }, + { + "scriptpubkey": "a9145d2a302a527611259882c3769ee0a7cf95441c7287", + "value": 547 + }, + { + "scriptpubkey": "76a914b46bfd52f887c82b5fd12ebff231458c285b193988ac", + "value": 547 + }, + { + "scriptpubkey": "a914ad3c209f26ba53ae02b317e916023096e18cc0f987", + "value": 547 + }, + { + "scriptpubkey": "76a9144d8fd85dd9b7e77fe260448faed8304d8520350788ac", + "value": 547 + }, + { + "scriptpubkey": "a91424ae1b894ff06207328309245443ce33065a50b787", + "value": 547 + }, + { + "scriptpubkey": "76a914b98a8b0c1c6383fbe6c310bfb62c5789d01b420488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa795e316c7d8ca9f01e944ca02df4d19e141b9d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142b0d59ca2398d0f03f41096f2662671ddcf3653c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149bf974ccd7e2e335f3da0934adbf480b680b01e088ac", + "value": 547 + }, + { + "scriptpubkey": "001494b9d21e4689cfbc1ae63c49d9bf5270e182be1a", + "value": 547 + }, + { + "scriptpubkey": "76a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b4575eece4b9b7cd71c002fb9e65466d0b632e9288ac", + "value": 547 + }, + { + "scriptpubkey": "a9146833e9da97b0f32501726cb9fb84ee406ce93da187", + "value": 547 + }, + { + "scriptpubkey": "a914b68f80cc562f642d22ca33138df21d219545c9c587", + "value": 547 + }, + { + "scriptpubkey": "a914f0f1b973b9b4f11a5e95a506f218473570b0868587", + "value": 547 + }, + { + "scriptpubkey": "a914e167704bb552e06da7b55cf1f143c822f52b4bf187", + "value": 547 + }, + { + "scriptpubkey": "a914c233c7f6eddb45c3d708239107e9dfa83405423387", + "value": 547 + }, + { + "scriptpubkey": "76a9149a63fa8f9c7fa3a18006c8337b1f0587fac66b4388ac", + "value": 547 + }, + { + "scriptpubkey": "a914fde0eb200fd0a547ceb917b255eee972dcad28af87", + "value": 547 + }, + { + "scriptpubkey": "a914cbc26a131b79cb8cf93df8d8f021e9f1baba240e87", + "value": 547 + }, + { + "scriptpubkey": "a9147d4bcb04cd6dfedf09089cb6afb8b1b0861c46ae87", + "value": 547 + }, + { + "scriptpubkey": "76a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac", + "value": 547 + }, + { + "scriptpubkey": "a9141fb24b5cdf092750e9d1d639117e99f12714c0ec87", + "value": 547 + }, + { + "scriptpubkey": "76a9142552508504c3936380468c7780d639cfaf055aa488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146ab4ff8ddeb6e259f26f7a8e354a7daf026f621888ac", + "value": 547 + }, + { + "scriptpubkey": "a91412d9875b13602e6fb1ebb04334ea0bfa1ece1da887", + "value": 547 + }, + { + "scriptpubkey": "a914509c26bd5d98491a06352e57a9f4806c30171c3a87", + "value": 547 + }, + { + "scriptpubkey": "a914d3b166181e1ba2890e0501f50405765c7ef9caf987", + "value": 547 + }, + { + "scriptpubkey": "76a91411a839044b8330e855c4a2e5b646bfde7ebe398888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b46f2a4fbfae5dac1695af164403c5ecbcffb2db88ac", + "value": 547 + }, + { + "scriptpubkey": "a914708669df1d3f412ee3f16376037b83d415e6eea787", + "value": 547 + }, + { + "scriptpubkey": "76a914976c91d993c793d471d45b52977a59c67d0c6cc488ac", + "value": 547 + }, + { + "scriptpubkey": "a9144ea9e8394dba70b7a2059a3fdab29d3dc24b592b87", + "value": 547 + }, + { + "scriptpubkey": "76a914af39047630245f7a09dbcc2df1c5e6b05e52889688ac", + "value": 547 + }, + { + "scriptpubkey": "0014ddcb0da2356df5996382f6c619e19075c66795cb", + "value": 547 + }, + { + "scriptpubkey": "0014f10dde77122dbaf3989a3fc51ba95a047d7e6fbe", + "value": 547 + }, + { + "scriptpubkey": "76a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac", + "value": 547 + }, + { + "scriptpubkey": "a9148f0462fa01da53ea3a4916df9524c7b580148a1087", + "value": 547 + }, + { + "scriptpubkey": "a914add27c375e0783e70c0e1893d7536f578a72a08487", + "value": 547 + }, + { + "scriptpubkey": "76a9144252e42746102463d2ce59ffe027fc498628d52888ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac", + "value": 547 + }, + { + "scriptpubkey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "value": 547 + }, + { + "scriptpubkey": "a914d3ffce5f3730680d86660a2b7619626f4914aea087", + "value": 547 + }, + { + "scriptpubkey": "a914f3b43564ec4ca3102cfba1579b3790b19f9a172087", + "value": 547 + }, + { + "scriptpubkey": "a9147bfc3e32ab123c59c31f18c0b057800af085c12c87", + "value": 547 + }, + { + "scriptpubkey": "a914bf075602c3c6a8cc0fbb7817b3b8910e39c6c3b587", + "value": 547 + }, + { + "scriptpubkey": "76a914b9285f59ef18bf6324b6a7d7c762eefa97495c9d88ac", + "value": 547 + }, + { + "scriptpubkey": "a9147efa989bc353e89e05b41aa83f1e758bafb3fd4b87", + "value": 547 + }, + { + "scriptpubkey": "76a914f529e7fcf018bf95d752a24f48f56e0e077f524588ac", + "value": 547 + }, + { + "scriptpubkey": "a914fe1be8dcc0713053e6696db244a0ba5cd120d98387", + "value": 547 + }, + { + "scriptpubkey": "a914b9e10c17d426f4301300adc0be9730c3c10cb8eb87", + "value": 547 + }, + { + "scriptpubkey": "0014c2c7d1ae38ecc43d23c07c50e8407c2fcb56f0ce", + "value": 547 + }, + { + "scriptpubkey": "a91400fc5f48d9b7f505de1503b8aada7a623ea8e48d87", + "value": 547 + }, + { + "scriptpubkey": "76a914aa7dc81cd3969c1ec60f6364b8bc25af0141e7d288ac", + "value": 547 + }, + { + "scriptpubkey": "a9145322dbb102bf61d6e8b447f74404db3cd3d3766687", + "value": 547 + }, + { + "scriptpubkey": "a91435f41d5c9ed9c6404c37444a161e91570d5207ca87", + "value": 547 + }, + { + "scriptpubkey": "76a91410ac79341762b68fbfc9c81cd8a3a3181a19cf3d88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f168a749f07d17b9d159e216a6f14e909cec04db87", + "value": 547 + }, + { + "scriptpubkey": "a914445cbecae0da26f18e79706909eea74efa92cd8d87", + "value": 547 + }, + { + "scriptpubkey": "76a914df60177b25a841f7653a0537a61257c88239d09888ac", + "value": 547 + }, + { + "scriptpubkey": "0014ae605bdf772b1e735887c8faf6890c84ec558e6f", + "value": 547 + }, + { + "scriptpubkey": "76a914113ed1eb5cb1a22e93cb987efe89ad2c2e47a80088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b5107766d16ee9a571201218c76a4093138d522988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac", + "value": 547 + }, + { + "scriptpubkey": "0014b6750bb468ffb489e61f4acbacb97ebade36882e", + "value": 547 + }, + { + "scriptpubkey": "76a914b48937b041e7bc5089bf0dd04e8b3d1fbf4c45ff88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac", + "value": 547 + }, + { + "scriptpubkey": "a9146149e19f8ba19861081213fa9e3f99b0be3f50ab87", + "value": 547 + }, + { + "scriptpubkey": "a9141e9549971ab07a4da0939a1b64673d492e5943b287", + "value": 547 + }, + { + "scriptpubkey": "76a914af3236f45dba940db11379dcd72e318366fd74b588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac", + "value": 547 + }, + { + "scriptpubkey": "a914784ca58d4326bf3001c23b25dc1ea7b494afc0f187", + "value": 547 + }, + { + "scriptpubkey": "76a91449b5aafa0b301bd762d3f389dc1a2ca5e2fe8df788ac", + "value": 547 + }, + { + "scriptpubkey": "a914923068b3c6fdae328b82b868204d4bb89fb524ab87", + "value": 547 + }, + { + "scriptpubkey": "a9145380732cfdf51ea21256657d0aef55d7b0ac6eef87", + "value": 547 + }, + { + "scriptpubkey": "76a9142865bfb6e61a0da1c2e56614e850bada641ae56b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91480af529a8766c58a93e2b501f40d1622d057cdee88ac", + "value": 547 + }, + { + "scriptpubkey": "0014e69f1c9a3b81b89ad20a81c850a447c3da8876c9", + "value": 547 + }, + { + "scriptpubkey": "a9144712974bec8b0896d8290beee2d78934962c483587", + "value": 547 + }, + { + "scriptpubkey": "a9145dea8bc267d8fa466f81bbf10c03b4ebcc92ecd187", + "value": 547 + }, + { + "scriptpubkey": "00141053d695789688c54e0d5f498993607d6c1d6e62", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9ae2a459d82b5cd466b8c347ba264824ae341b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b701e04a6ec31329868965beaa8892a13a202afc88ac", + "value": 547 + }, + { + "scriptpubkey": "a914d51727de340e868d9556d6056696bc1280c82d1d87", + "value": 547 + }, + { + "scriptpubkey": "a914c23a28cbffb6a1a1fee658319f97d949613b7ff487", + "value": 547 + }, + { + "scriptpubkey": "a9144ca679cadeeaf3647e1378a037114179e3e4306187", + "value": 547 + }, + { + "scriptpubkey": "76a914af4876b92460407d9abce31a603efe3ead91d52988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144c58d15eaddbcd8e94f41da3d6ab3ab562590b1d88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f73b1a8c661b34faddf540eb0df08179c47275e587", + "value": 547 + }, + { + "scriptpubkey": "a914c18a69d1cfd310c1ad97bfc3faa4d8806a8422b087", + "value": 547 + }, + { + "scriptpubkey": "a914690ca272524bee3d4f6978229a95fc8bb74c27de87", + "value": 547 + }, + { + "scriptpubkey": "a91491bd7b84100f183c727bd28ef5c4133d084ab43c87", + "value": 547 + }, + { + "scriptpubkey": "00145fcb966506c007712e14a639bdb20956d28d084d", + "value": 547 + }, + { + "scriptpubkey": "a9140a0d44b2740e394bd83a2dab9e0a657d5230475287", + "value": 547 + }, + { + "scriptpubkey": "76a914ec457b6ebe3ff2f8a3d9d2007862b4f2654d34bc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914be4f07799950c3017fc64d696b27e10976a0df8188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914de5d0e2e2a5858c59bfbe915d6d47540a9d8da4388ac", + "value": 547 + }, + { + "scriptpubkey": "a9145231d46cbbb0eeec58f3b1acc39e2fcf20caea9f87", + "value": 547 + }, + { + "scriptpubkey": "76a914f43fcfce83a3ca2f1d5ec8c3822134d51c1ab47888ac", + "value": 547 + }, + { + "scriptpubkey": "a914b552733b3e8d7d321c8144f76b06ea17be3e179f87", + "value": 547 + }, + { + "scriptpubkey": "a91487579d85fc6559d224ba7ac350c9aa754a64fac687", + "value": 547 + }, + { + "scriptpubkey": "a914da2f137b3047ca967a97cc4b1f8c77c92637d8e987", + "value": 547 + }, + { + "scriptpubkey": "76a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149343c1f975fda347a6f5a6e8850117d14b8ac9bc88ac", + "value": 547 + }, + { + "scriptpubkey": "a914192b034fdb7d3cec7677b83a3e5cabbb830f2f0e87", + "value": 547 + }, + { + "scriptpubkey": "a914b6e18667ef15927a920145aad31b3e9883e7e72c87", + "value": 547 + }, + { + "scriptpubkey": "76a914c708532d32e85d24efdf491167165dc0809e619e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914078fcc0ec36f8ffb239bd041e2429fde465419b288ac", + "value": 547 + }, + { + "scriptpubkey": "a914d0e4d3b53e419aad399f944524ec89a5cd940c6087", + "value": 547 + }, + { + "scriptpubkey": "76a91474e3496ecb4db27d898a69aae4070e2b11718e5e88ac", + "value": 547 + }, + { + "scriptpubkey": "a9143794ee6318c3a17d0ab5e3e89e0812e9f113b7fa87", + "value": 547 + }, + { + "scriptpubkey": "a9141cbf3939c32350044043b12ad19b810c62b898f387", + "value": 547 + }, + { + "scriptpubkey": "76a914b48a2ac4f5b7a473956a5a3c9b9a6481220b303688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91499a17c157f91f04bde3072657d00a8e8bcd2eca988ac", + "value": 547 + }, + { + "scriptpubkey": "a9141b7886b704f6ee99b548214294bdc7cf9a519a6987", + "value": 547 + }, + { + "scriptpubkey": "76a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac", + "value": 547 + }, + { + "scriptpubkey": "a914f222831e0cba00afa94e627b16bfcd38d0fb136687", + "value": 547 + }, + { + "scriptpubkey": "a914839ffabb74abe668446b8279efa82602f43e618887", + "value": 547 + }, + { + "scriptpubkey": "76a914f2a299166c15eb83d12f73edf8dd7b95279a7de088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa99bd3c545720cda1feee22c3054b1a145a016488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b92e137f61af0734b93b23f25cf9821a3f98d3df88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91444825445c7c4768384c0bd1eeb5559a1c9b5b77288ac", + "value": 547 + }, + { + "scriptpubkey": "a9141bd345e9f19baabc4838280c12592f25450b5d1e87", + "value": 547 + }, + { + "scriptpubkey": "a9147da3e4f9e9098ec775fc65fde6bd61206de0debf87", + "value": 547 + }, + { + "scriptpubkey": "76a9148c939130b81f5e32c9669e8e894a500c0054e49488ac", + "value": 547 + }, + { + "scriptpubkey": "a914a7a87834de83c516140160d0077f3a51c116b3a187", + "value": 547 + }, + { + "scriptpubkey": "a914d7a6780dda8db994f01dc7c56c2b0299d528a80987", + "value": 547 + }, + { + "scriptpubkey": "00147f3f47d0895ccb7e504091bfbde07a1c2a27f554", + "value": 547 + }, + { + "scriptpubkey": "a9145a9b3fa58c1e1e2f1a64d22c25365eb1947276ce87", + "value": 547 + }, + { + "scriptpubkey": "76a914ea9b3dd49c68c0b6a83a64b5986429b25e218a4c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914af4925c69465d3cc5ad9451abe4cc0eb2a9005e988ac", + "value": 547 + }, + { + "scriptpubkey": "a914d5b90b70fdb7ab4e27215b3e38b944f3a0ff9e2a87", + "value": 547 + }, + { + "scriptpubkey": "76a9141644f7760fd97537563cfa56f656d1a2a79058c788ac", + "value": 547 + }, + { + "scriptpubkey": "a914a12a24fe9dd245176d73d093af883db5721dfa2b87", + "value": 547 + }, + { + "scriptpubkey": "a9141b92ed7f02c99991f52cf2a0b7c5d5aa22307bef87", + "value": 547 + }, + { + "scriptpubkey": "a9144160873048fcfc2140e022a768706fff45ecb0c287", + "value": 547 + }, + { + "scriptpubkey": "a914cdf007fae733d3b6513747e7250edf40d81e3f4a87", + "value": 547 + }, + { + "scriptpubkey": "76a914adaef2451df664e5930e4a16151ffbaa31aebb4f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aaa0138d028ca416c8e5e11ef935887e19e7ba9088ac", + "value": 547 + }, + { + "scriptpubkey": "a914cfc588e7781e5c5fd30d063dceb9efd68771e67687", + "value": 547 + }, + { + "scriptpubkey": "76a9143da156ba4248c4ab72a9819570cf1e8ce582f26a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145cb787cf3fd055de8b0e00b231aeef70ad3485f488ac", + "value": 547 + }, + { + "scriptpubkey": "a914e8c0b9deab2de07a1764a8e889c02a58fd6d3fa587", + "value": 547 + }, + { + "scriptpubkey": "76a914f9c9a198e91fc0d64b05c34d5d16ddfdc77f28ea88ac", + "value": 547 + }, + { + "scriptpubkey": "a9141f253fabb392c0b55d24d5bc0b785fb8629c343b87", + "value": 547 + }, + { + "scriptpubkey": "a914c89f31b06a9e9345e5149193d1c4aa061a83cd0b87", + "value": 547 + }, + { + "scriptpubkey": "0014f84420e7edb7528587921e95be3028eedcecf9bd", + "value": 547 + }, + { + "scriptpubkey": "76a9145fbb64fa612dd13c8fdfaa5556ec6d20efd223b288ac", + "value": 547 + }, + { + "scriptpubkey": "a914c6a964950550b0854b50303e4c83557cfe469a5087", + "value": 547 + }, + { + "scriptpubkey": "76a9148644841d30bc75f67799cf21d8d2858639fc465488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914008c07e4f5c8b66cf082b67f44ff889062b3822588ac", + "value": 547 + }, + { + "scriptpubkey": "76a91418440870284d628f74c2b2ed2343501f5c62628288ac", + "value": 547 + }, + { + "scriptpubkey": "001408dce91899a1069447d34603d9f81d4c1e5404bb", + "value": 547 + }, + { + "scriptpubkey": "76a9147db14d76012b3d644b140a25daf784bac2c2e77588ac", + "value": 547 + }, + { + "scriptpubkey": "a914e6d692876dd35ef6d5be3412f05260bf24970a4d87", + "value": 547 + }, + { + "scriptpubkey": "76a914aa92e947687bebfc61d93d50cc7acf894224690588ac", + "value": 547 + }, + { + "scriptpubkey": "00140b577e6a1e77fb3ca7a98b83df497dd113183672", + "value": 547 + }, + { + "scriptpubkey": "76a914aa79b0f655dc148c5c2081afea91ec6a33b512a788ac", + "value": 547 + }, + { + "scriptpubkey": "a914c90eac718e17e740ae90f671c5066e5aa6257dc087", + "value": 547 + }, + { + "scriptpubkey": "001463b0bee36f64a4b3266c308e0902c7497dd10645", + "value": 547 + }, + { + "scriptpubkey": "001460cbcd34cd319c943912a691b4935747ed5050d3", + "value": 547 + }, + { + "scriptpubkey": "a914f6151f0306d90c59e162f33be8d7cdda2ff4029b87", + "value": 547 + }, + { + "scriptpubkey": "00144329c08b49f6fbd1141a79924b60e348ee875aaa", + "value": 547 + }, + { + "scriptpubkey": "76a914af35a7cc08f576e074d2fe0ff9e182790f0869c088ac", + "value": 547 + }, + { + "scriptpubkey": "001444a4666937f2fd39c91c68e09a28ebb8615bb72e", + "value": 547 + }, + { + "scriptpubkey": "a914ca4439611cb840f74c0fbe379bd7147ae756058487", + "value": 547 + }, + { + "scriptpubkey": "76a9141dec0db6c652fa87a496812c7864686532ab5e4e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914af3970b6a95a7c0f7313880787829c1555c0d2f988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c59fbde46d484eb120f4a02376fa66169173f1ca88ac", + "value": 547 + }, + { + "scriptpubkey": "a914351d0aea7c875750ae48813164724ca747ca09c487", + "value": 547 + }, + { + "scriptpubkey": "0014e60e1d9376689234ba92245873b2a1484fa1d75f", + "value": 547 + }, + { + "scriptpubkey": "a91481cdf5919633ff95d90fc06ce25a43807ada428687", + "value": 547 + }, + { + "scriptpubkey": "a9142ca167a69bba264824e5e5f44733223a9c10a7e487", + "value": 547 + }, + { + "scriptpubkey": "76a914aa7c0ea4c035b4f29986e0c2e51dcfe62e81eab588ac", + "value": 547 + }, + { + "scriptpubkey": "a914d6b81117572768c33f7572c72927084e3c74b8a787", + "value": 547 + }, + { + "scriptpubkey": "a914b943d84bd547d31f897da8530f85b61009435b0c87", + "value": 547 + }, + { + "scriptpubkey": "76a914aab37cde379b44b74325d9c6e569aed80e40c11a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b4716f26b9d19ffe5a3d0ccfe28b0ea54db0475188ac", + "value": 547 + }, + { + "scriptpubkey": "a914ec3ecf3d28a9db726f087b010191df2a68663b8087", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9c56af30ce4ff3578eacc27b96c91da597f40e88ac", + "value": 547 + }, + { + "scriptpubkey": "a9149ae88d1f6b9a7366e7c167776d7cef8979146c0487", + "value": 547 + }, + { + "scriptpubkey": "76a9141e29fd9568bfedc38f55dc8aa47df455dbfb57c988ac", + "value": 547 + }, + { + "scriptpubkey": "a914f46742044d0b31bdd43f6c97d66e7e16efa973b987", + "value": 547 + }, + { + "scriptpubkey": "76a914745686edcc0c8d82f8edb3e7511ba8ba9d60d9d788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9d85a31d9501de7dea85f4dafad8677acabe9d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914af4ab78194f772d2702eefd8df79c8d5075404f888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91403314b8913216663a1f7dfe739a715bfb54b1baa88ac", + "value": 547 + }, + { + "scriptpubkey": "0014c5eac95536a9c6412027cead26cd559020e17585", + "value": 547 + }, + { + "scriptpubkey": "76a914f52ac66ae884b43c882d8d3d46ad142cf7e9cbda88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914319bb40f6db34ba93c1fbb630b3dc1dfe5a3d41c88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f8dd442d45ac37dfe305afe38cf569682f3bf28a87", + "value": 547 + }, + { + "scriptpubkey": "76a914aab351cbfb66c39d0dcee7cd33716e2f06b7a30988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143f74de1a49249ec74120a091dab1862484d65dda88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f53d8204cb80ef5db360b302cfc53f0a1bccd65688ac", + "value": 547 + }, + { + "scriptpubkey": "a9141ba29df6a4c2cf7ac3e90513539b19a8ee790dcc87", + "value": 547 + }, + { + "scriptpubkey": "00146d4a4c66db0d0fa74802867b14c69c0cbc1f65af", + "value": 547 + }, + { + "scriptpubkey": "a9149e3071e61584685f40354f8e7e974c442eaa18ae87", + "value": 547 + }, + { + "scriptpubkey": "76a9145feb4a3fb6c69e0985fbcef7756acb3909a1ecbe88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914af5a27136990e3a258069d135f1477b5f2b7f06988ac", + "value": 547 + }, + { + "scriptpubkey": "00144df6d6b372d933f62c5319fd4e05dee4bb4307a3", + "value": 547 + }, + { + "scriptpubkey": "0014e06c9576f5618b9bcc9993ef0501807ae3d3da88", + "value": 547 + }, + { + "scriptpubkey": "00147e4f5a19ea6239ecfe47f9038b6e4788fbbfc748", + "value": 547 + }, + { + "scriptpubkey": "a914c3745c1be3a2bc17ea3bc86ec8674ac16f1659e887", + "value": 547 + }, + { + "scriptpubkey": "a914e9611987dfacb1b2cdd11c3fda815a729434c5e087", + "value": 547 + }, + { + "scriptpubkey": "a914f96ab0b89ca2c4e251bc36a5b4cc079e4693ed5c87", + "value": 547 + }, + { + "scriptpubkey": "a914e25c3afdc83c938d55f9c0b78eb40ba2093ca5df87", + "value": 547 + }, + { + "scriptpubkey": "76a914e038febcda00af1abe04b78ba0a7e8256b80adcb88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914ca40860c6f8646a4ab4cf3446c5b4df90587f7ab88ac", + "value": 547 + }, + { + "scriptpubkey": "001488125ef6f87783a1e2df021946097bd2d5c2a0c8", + "value": 547 + }, + { + "scriptpubkey": "a914e4e4259a88ff887113217b906a5386d2a575091187", + "value": 547 + }, + { + "scriptpubkey": "76a914d9022fa775e51754d49b678aab7b44f9f55699d088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b23cb45f995fc6981ff2d4f9e302aa5e7b4b841e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ba200c89b2db6c54c7568031299007c184273ff987", + "value": 547 + }, + { + "scriptpubkey": "76a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149ce43110d9b26ac0fb86582b764019296736309a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91425b631d4b3ec47eea5b6a9ee745ebb90adb0f20f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa76d22684424dc8fbbb7315169779e39f5cec9488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140652c29575018f03af6e406dbc8420dd36d7fc3888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa9ffeaaee11cd977e4f173954786f3e1a929dda88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914af4f942b3b4c6b2c4794ce205deb3f4450d83daa88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91465947da6bf7153f8ea06f8c31680a3e1a9da28f688ac", + "value": 547 + }, + { + "scriptpubkey": "a914764cb9373ee4c19d3f75cdead10cf592aa7ecb5187", + "value": 547 + }, + { + "scriptpubkey": "a914226fa1d589d606df8fca8b75f5c5ee3321f3b83287", + "value": 547 + }, + { + "scriptpubkey": "001488a4a2eb39939cb2e171d38aef3ab602f1b6d8bd", + "value": 547 + }, + { + "scriptpubkey": "a914b848318de9e87f969368f77e5cd4f943eaa4abf287", + "value": 547 + }, + { + "scriptpubkey": "76a914b92ef2dd5f2980568f7b9b2d4dee68b516d717d888ac", + "value": 547 + }, + { + "scriptpubkey": "a914c2f4f39cead333aace56ee2dd9505bf59a4b13a787", + "value": 547 + }, + { + "scriptpubkey": "76a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146643621cac3e8d081d5f5b6baf84751d38067b3988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa95d2d54bdad5c24364788c08b029375822ef2c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aab525233f8dbd00aa6f1a102c76caa0b5452cfd88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f807e3eb5622bc9aebd23fedb10f89e797c068de87", + "value": 547 + }, + { + "scriptpubkey": "76a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac", + "value": 547 + }, + { + "scriptpubkey": "00141f461a90161d0bd5f4e2117f33fb904d49b7592b", + "value": 547 + }, + { + "scriptpubkey": "76a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91475cdf3b6093aad82343431ebfc36bcf8a5fa1a1a88ac", + "value": 547 + }, + { + "scriptpubkey": "a914c19b5a264e11630b14d20630a0fc8437af6ccf5e87", + "value": 547 + }, + { + "scriptpubkey": "a914d56834a7b9049ab5c33d8edc7130841eb8febc7887", + "value": 547 + }, + { + "scriptpubkey": "76a914b92fd54a6a6b971befd22315a42332a32d64e54188ac", + "value": 547 + }, + { + "scriptpubkey": "a91438acd47db7ad63c3b58a2eeb2dda7b067c02110f87", + "value": 547 + }, + { + "scriptpubkey": "76a91497dd5e276317c3478337d1bb9bc7c90bd25e83cc88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ad0647563aa08889ea3f4b2d385be5016356362687", + "value": 547 + }, + { + "scriptpubkey": "0014aab72fc1064931d6244eddcd682382d2d48deac9", + "value": 547 + }, + { + "scriptpubkey": "a9143c3d76e5bd8593ef47a29664968a1490a82fea2287", + "value": 547 + }, + { + "scriptpubkey": "76a914af3b0b1fe536158db82bc8e02296bc4585584db288ac", + "value": 547 + }, + { + "scriptpubkey": "76a91457e3421fac8594a282de45e25d7fd8e1ec742c9888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914af32a0ce718af6bdec98743709368559ad8f72cc88ac", + "value": 547 + }, + { + "scriptpubkey": "00141720e3bdbc2d0f9947774b726576128659c1b3b0", + "value": 547 + }, + { + "scriptpubkey": "001490b30cdb38bac0b7270dd2a9fb788bdc099a758e", + "value": 547 + }, + { + "scriptpubkey": "a9145fad233725cc75ee7b3bbe043dbe5cfa0981c10e87", + "value": 547 + }, + { + "scriptpubkey": "a9145edc3ca9a4a668040e643fbc17c503c91d47579c87", + "value": 547 + }, + { + "scriptpubkey": "76a914af6fbff62fa0d1c4f4e03cb0fe34f5da6df926f688ac", + "value": 547 + }, + { + "scriptpubkey": "a914083d95f3721bf0e209e47ccea2e2d0fdbb6f0a4687", + "value": 547 + }, + { + "scriptpubkey": "76a91495f0d4d41738523e4b296357608279f1b2627b4388ac", + "value": 547 + }, + { + "scriptpubkey": "a91453746da25186819e7d08730b411c20040808966e87", + "value": 547 + }, + { + "scriptpubkey": "a9140d6e1108b477d8d43528c1d2fc8378bb559933dd87", + "value": 547 + }, + { + "scriptpubkey": "76a9145b2a5ee980663c98ca775820f25b57c39474024288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914aa930223a0f8761408ef9f6992bd0c1198d5c54888ac", + "value": 547 + }, + { + "scriptpubkey": "a9145d331ed101ed31abb19391bd4fe3d73ed05dcab687", + "value": 547 + }, + { + "scriptpubkey": "a9145018219fee281effbcff61098799df321aa24c2387", + "value": 547 + }, + { + "scriptpubkey": "a914b7b1461bdb26e4fa13e4f96826e035d4dcbded6087", + "value": 547 + }, + { + "scriptpubkey": "00140f27aa70b6373e8a4a25cb4c7162050a639dd59b", + "value": 547 + }, + { + "scriptpubkey": "a914a8bec36e8fafe1e2f594b953736463e8330fbff887", + "value": 547 + }, + { + "scriptpubkey": "00144bc0eba0f3212d953a6a342d2fff6689e27a2b8d", + "value": 547 + }, + { + "scriptpubkey": "76a914b9261a6ce3babc62409fd6fd2960879f99ad310e88ac", + "value": 547 + }, + { + "scriptpubkey": "a9140d28ed5d5542c721662261a2dac5e71a6e74fad687", + "value": 547 + }, + { + "scriptpubkey": "a914b087304815ebbbff2ededacaec1f5cfb152bd66d87", + "value": 547 + }, + { + "scriptpubkey": "a91492eccb947fc709eac2ae0bd3aadabcaaf996112e87", + "value": 547 + }, + { + "scriptpubkey": "a914ec4325a9fc7944a86f74bf81d3a7c2db3b890bfa87", + "value": 547 + }, + { + "scriptpubkey": "a914dea4ad768f75205d5d805f90e70d7f2684a19fe587", + "value": 547 + }, + { + "scriptpubkey": "76a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac", + "value": 547 + }, + { + "scriptpubkey": "0014b2984bb8ad82b496fbc03f142e309eed5a6255a2", + "value": 547 + }, + { + "scriptpubkey": "a914196083103b472aa6830386561902673e83e0e0ad87", + "value": 547 + }, + { + "scriptpubkey": "76a914751f124bcf5d0b44ed1cbf2e0976f6c437ba8ab488ac", + "value": 547 + }, + { + "scriptpubkey": "00142b1841c3bc78691cdbe3b7a6eb88064674bd3e85", + "value": 1762781298 + } + ], + "size": 13834, + "weight": 55009, + "sigops": 773, + "fee": 316319, + "status": { + "confirmed": true, + "block_height": 667553, + "block_hash": "00000000000000000000e297bcc894987014870ab9b381d95ec244b731b258b9", + "block_time": 1611550284 + } + }, + { + "txid": "239cfce453bd562b3cc820e4bb9178fe4816bc73ab62292f33088d1893b1a3ec", + "version": 2, + "locktime": 661017, + "vin": [ + { + "txid": "31b6a76600d70a016af6b425a100865b7f8466c33ff440d48e4d2a3a936b7030", + "vout": 287, + "prevout": { + "scriptpubkey": "00147a5dedfd7f9e5a40c3f3edb2320bed555fee9562", + "value": 488844 + }, + "scriptsig": "", + "witness": [ + "3044022026d36ca95ffb702875b19086b9cef8836c12a2d2af3f31f906e8f66315bae40d02204f78a1ddce2cfccd8b9144cf77e1c70d84c938733ed927f8ee85a0828078003b01", + "0333b7cab374313ca719ae4c2096c793fe26d544dde17bc5e0939e6aaa36172217" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914075b7dfca1465daa6f51b8497af83c10042ef39988ac", + "value": 547 + }, + { + "scriptpubkey": "76a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91404d9d15e67e6f20551992e03039711e59281f72888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143899761764d0fce8572cf3eb34333613d43d080088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d85ee8f164fc01c064de7b716d87135547a2f59588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f526a5fc2cb4d8acd9d2e802195b8b04d1e04b2a88ac", + "value": 547 + }, + { + "scriptpubkey": "a914d6f2ed1d24b4b5747cccd8bcedf1099f414fb99c87", + "value": 547 + }, + { + "scriptpubkey": "76a914753c6bbc7e936d5d874162e412778dbdd9a61c7788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914508fbd107fb44a9b779a061b6ce312ccaaf3730a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148d0331484de0aea32b2c5b6a0c8008b032adc7a188ac", + "value": 547 + }, + { + "scriptpubkey": "a9140fb03a13f4c0a027509f8c4fd245f483551b6c1087", + "value": 547 + }, + { + "scriptpubkey": "76a914d68bb25be12d6ac34df0cf622a1c2e48adc9f43488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914976c91d993c793d471d45b52977a59c67d0c6cc488ac", + "value": 547 + }, + { + "scriptpubkey": "a914160b09174fbe0904949094083fe2783a2eef39ad87", + "value": 547 + }, + { + "scriptpubkey": "76a91408f456472311b789bf8885f5861b4e875421b4d588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f524ee187fbbb2a8997c09ded351b251f5be550988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9a8ddfc7f65b199c61e633199bdb18f2e38eefd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914072af0864f2910e6130f3276ba0e5a87861a713a88ac", + "value": 547 + }, + { + "scriptpubkey": "a91444b283b839d9d5ae5a0bfbde400166a6e69b997087", + "value": 547 + }, + { + "scriptpubkey": "76a914f5121cb0478bab971f06c33345e4ebb4e66e973d88ac", + "value": 547 + }, + { + "scriptpubkey": "a914a79d2d1e0f27f7e8a10f0c99fbe700e433089b9587", + "value": 547 + }, + { + "scriptpubkey": "76a9140791f1f6600311c3043e4e247050833567bc2cdd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914ce4551083b2c0c436a448de86fee5bb58c4d7b2088ac", + "value": 547 + }, + { + "scriptpubkey": "a91476afa231de5e191ad6fe01aa8675f77596d6db8e87", + "value": 547 + }, + { + "scriptpubkey": "76a9140f2a0a794c0fc4a67218b35f85cf7357b99ed42c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141d58e5fe24de31ab66da56c30edc058046c9aacd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91473427601f4b8fcc0f16c4b54eaabf1ff64a8b7f888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f50f3b1ab21c0c17eae49f3abc6e47d4ef06bd8588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143da3a798e936602a071a26c51bac602411caf8e188ac", + "value": 547 + }, + { + "scriptpubkey": "a91431ee9b12409c141a0160e48204b95f3bfa5c9d6487", + "value": 547 + }, + { + "scriptpubkey": "a914047edf2df9e10faaacb3565dc0e770569b8ce7d687", + "value": 547 + }, + { + "scriptpubkey": "76a91475e30dd85efa6a11b164747dc3bd92d468fd35c688ac", + "value": 547 + }, + { + "scriptpubkey": "a914346e1c1b2fe6abc46433d8497c7be955184648b987", + "value": 547 + }, + { + "scriptpubkey": "a9149e1241593b98b8816454ae994a57f21a310f6a6187", + "value": 547 + }, + { + "scriptpubkey": "76a914f522e556c17af3482a3a829ec9dd752355c7f34188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f5098451fb6ff8fe75a5e02c58a8eabb1b4e54de88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a963a244adfa7c473a408242b5cc6b2c090632d088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d5695ae87653eff01a0129696d91c7cd2631ef4988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c1e19319ee0990accc2fcceb91e14848cdded11a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f53be4a1d6ee1602fe94db4e28ee3914f66839d388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9c59f8d5c22b51fe82933a15da6a68f71cc82e288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac", + "value": 547 + }, + { + "scriptpubkey": "76a91448aa7e31474a9ace7c99b7d193eb26d7ce5bc5a388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143e827751265639a0ccde05b3f1d931d4fa3d5c3388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9ab8a90e69dfb92cab5055bc1f617989b74448d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a1f4c8d3bed6e474fed77aeb94c960ac36983f2688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914248de298b5c6c0caa01b031917d6d779166aa13588ac", + "value": 547 + }, + { + "scriptpubkey": "76a91464e036a68a065eb2d6b10268ce89156933f0647a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c201f40d2b14170b4972390917bf63e4c217281788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91423ba1189cb027a21aa0a1b21fecf620f989ba33d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f98f502f845c16053134ec2a389054dcf734c99788ac", + "value": 547 + }, + { + "scriptpubkey": "a914013191f62b689b1fb49051c79f91e357bbca812e87", + "value": 547 + }, + { + "scriptpubkey": "76a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac", + "value": 547 + }, + { + "scriptpubkey": "a914606795cd3a2d1e300674e343972a46d2c7edc51087", + "value": 547 + }, + { + "scriptpubkey": "76a91483068bc8913bb8fdadff3c8c5904442af64deae688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91414ea3a048a980494d67eb09a1b087ff67476555c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914824ea5a10d5d66a369bc75d8dd8f43e03d04b5e288ac", + "value": 547 + }, + { + "scriptpubkey": "a914498b3aaddc99c5e9614940b2d3dcabb82f07727787", + "value": 547 + }, + { + "scriptpubkey": "a914cd1e44c6b5e40ba22ff5e8e6b6e9ea9b7d2bbb4a87", + "value": 547 + }, + { + "scriptpubkey": "76a914035114d41051bba13764b213f83ff6ac0ab38d1d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f500565551e0e6310f1bf666e01a122a6874bb3288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f50bfd4764b4d067ffab4cadcc837a4e60e3826b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ee8f7e7dba5727715bc942e06cb147ab6cde0d7187", + "value": 547 + }, + { + "scriptpubkey": "76a914ee56cb41d9537d5027b5f1b81b46f8238d947cf888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f520a923240a647267511315ec8a2ef55d43238888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b1a2508bf9de1ebdddb83b40c2da622de0d2bd3488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9afcf9938f1dc4c4233876a22ff2bb487d9362c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac", + "value": 547 + }, + { + "scriptpubkey": "a91425902e7c0e4c6eba8ff6fd95476bbb2039ea6b0187", + "value": 547 + }, + { + "scriptpubkey": "76a914f5041435761dbd09f9d3f28f8164372caa40c89688ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149c361e9b09fdf904b52854d1a6620d8746ffdf7f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f4e9c12379aa3ce128e085d7b0159a7934ae9ed388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f4f90387b64de04e24555b77b17a403882d87cde88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a9ad9689dff7facfdc29cfd87a8fd3bcffe2a79e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914caaa6675f8604e64b6836e20587e8ef8d376416387", + "value": 547 + }, + { + "scriptpubkey": "76a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144c8cbfa260db767ad23a8f7b01f67234f3b5f3fd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f4ea0d90b72c09551248ec8f498ec929217c479988ac", + "value": 547 + }, + { + "scriptpubkey": "a914709ab603bb0403999c6ce7d92ed4e8611d6bf4bf87", + "value": 547 + }, + { + "scriptpubkey": "76a914dd2815c87bc2c695a9449c25fe296291c1e7514f88ac", + "value": 547 + }, + { + "scriptpubkey": "a914487a651731d8b2277c0ecbc263b68fd594098b1387", + "value": 547 + }, + { + "scriptpubkey": "76a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914988288362cb49f5b7e86a0e815d948286b2bf06088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9aef0728bf48763d4dae15f170248fdc8d6f47a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148d17f5c88fc5a09857fe8f75fc823b587f2f9b6588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cacc575af4397af297efeb0604917859693ca12088ac", + "value": 547 + }, + { + "scriptpubkey": "a914e440b01e68b9daa0d5a2cb52eac998e8a1164fd787", + "value": 547 + }, + { + "scriptpubkey": "76a914d6261ff8753d4f144c46b0330a9be617304a702988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f503737f00efd9d7d41a93092968d7b3f268e8b388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac", + "value": 547 + }, + { + "scriptpubkey": "a914cd0200882f48c8c99c87d3613df231c5a19c560787", + "value": 547 + }, + { + "scriptpubkey": "76a914f5233d795b41f6b1ac511170f2bafb94e449754888ac", + "value": 547 + }, + { + "scriptpubkey": "a91456d6fc3dc432e46675c229e0ee842c49f7bc8bf787", + "value": 547 + }, + { + "scriptpubkey": "a914929e735f1a71227e001d777b95c992ed00de17be87", + "value": 547 + }, + { + "scriptpubkey": "76a914c0d06e378cc88471c4a2c984fe9039bd6a231b0d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148353ade1dd41a70e441602ce638a2f9ec7f4e91688ac", + "value": 547 + }, + { + "scriptpubkey": "a914380d9a4179469cf2d310b4088832de705641f01587", + "value": 547 + }, + { + "scriptpubkey": "a91427f7a15e10e1df4d41db15f2bc5e51f0811f00d787", + "value": 547 + }, + { + "scriptpubkey": "76a91487b35052183625aefca1e721e109f65f2710699988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914659875d96ba0e8ef7126faf5c3bdac7de0aa0ec888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b5107766d16ee9a571201218c76a4093138d522988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143f527c6288ee1b3b232271fe5ede1be9902c6b1288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f53d4f215a2958ef1f938b0f7b3280cb9ae09fc788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c3f6e14183bfa5a5fc97b28acdc99e23ae205b8d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f4fe11a650a9ccafd0637310e698b6a784f4e0a088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f501407b5413a09c19a39386bdd5b64d3ee0626388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142369e10cbeba03a9fb0f7093420e34236d0bb47f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91407c7f667097f229de67859f03ec44916b1c88bbe88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ded69c02528237483a6ee0bf2047a891dba8ac3987", + "value": 547 + }, + { + "scriptpubkey": "a9143ca2c7e07daef23c7e2126ab4eaa1ad79b460c2c87", + "value": 547 + }, + { + "scriptpubkey": "76a914d6d8f823a7673bd3da372729e9006ee2686340ec88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142e1e14e5a9712decb2145a08fc99e7138b8156d088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148c939130b81f5e32c9669e8e894a500c0054e49488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140695daa9fa3342429a648cfc7f89392b37d4050688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f19e09bba24bb76111b502897675a05de4bbbcdd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9a8dd9cebf8a83e68a2cec80d7c8cfde48af07988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146fac8571b6b103626820f97b023f5f0212f0342088ac", + "value": 547 + }, + { + "scriptpubkey": "a9140e54ce77063433391566639ab155e328b7464b0987", + "value": 547 + }, + { + "scriptpubkey": "76a9147e7ed0f5a912aa17fc6bb04eafa1f753a3d73f1b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f51979a7aff4f01e13fb0b1e1203e1eeab0418ec88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914885be2340ea7cc0aa2f8646137d922142d26474a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914be3795b8eda8dd3fe8e802de712d9014451e76ce88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914e94415e89d0fc87d53713add7431764b742e8feb88ac", + "value": 547 + }, + { + "scriptpubkey": "a914b14e8610588be42584c78425c8053f3fad86e08087", + "value": 547 + }, + { + "scriptpubkey": "76a914f4ea9d82a3f12af0b8227107ec191662a3658e2a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141535968fba30b3b3145c45b7a6e3a31c83f2c39f88ac", + "value": 547 + }, + { + "scriptpubkey": "a9144e640f46cb6d9c7b66ed1b794e6b695e9c93bd8f87", + "value": 547 + }, + { + "scriptpubkey": "a914f251fe79c6d72cb70383722e63b190b14be9ccb387", + "value": 547 + }, + { + "scriptpubkey": "a9141188221d3fcab2d0ba2b97eaf33efb5f28d52caf87", + "value": 547 + }, + { + "scriptpubkey": "76a914fb7834ca4d9a6efcc932558ba152d786939dec8c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914612e5c1af431ef3815580ef3c422d6295579e90e88ac", + "value": 547 + }, + { + "scriptpubkey": "a91498784d131308553967d02d1a8ccdb1dfd65f38a087", + "value": 547 + }, + { + "scriptpubkey": "a91418adc89f445b19b88a350453a4c85e760d1a0cbc87", + "value": 547 + }, + { + "scriptpubkey": "a914ac0fb26eac0e6f613d4f1a19a87b7b75632dce1a87", + "value": 547 + }, + { + "scriptpubkey": "76a91445110199352e60642095c72529405ca82803ee4588ac", + "value": 547 + }, + { + "scriptpubkey": "76a91419a3fd5ade3af9f102eb59dbbd1305727f09157588ac", + "value": 547 + }, + { + "scriptpubkey": "76a91490b335b081da2978f78d3cbdf01c0302035d170b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f5205dabf4be1ae43147a783e953d2750bd1952588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144db9574e83120fac3f05bd1aa08659fc8ef5701688ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143730c30e21c84284be8591c4c57c55b76160928788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f449285a885d3cea6ca6a6f12fea7b9327642b3e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914ecade0ba0ff81970e8e2215330154df5a054a1e688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9a8d854e6f232a70bdcb74061ebc84fda55e69e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a15eb54cc568018725891c226b6d346a2eab298488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac", + "value": 547 + }, + { + "scriptpubkey": "a914cc7edb9e1df7645dc333cf7613a90aad40f7923d87", + "value": 547 + }, + { + "scriptpubkey": "76a91407736f260963b708b6e2b5c02283eb4c8fdc90e188ac", + "value": 547 + }, + { + "scriptpubkey": "a914793e95b2284e22692dbed9f396fa1311691a574e87", + "value": 547 + }, + { + "scriptpubkey": "76a9146c58a5fd4c6e3b3f556c416270ce4c16e6ad00f188ac", + "value": 547 + }, + { + "scriptpubkey": "a91439e088ff23c8e45a24864c5224f2d03a21d7d33787", + "value": 547 + }, + { + "scriptpubkey": "76a914f5247f49d6708fa11b221d58676a1ccec9b6c1b588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914563c6720e1434d19bd4d426ee8faa04295de043b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140ca9dd8ef5f704fbf285584b78262ec3e47fba9a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91428c42ed3a3e8dd299b981f762ef1ff53b254d05088ac", + "value": 547 + }, + { + "scriptpubkey": "a91409891fa2f4e54cfd8e3acd4f53b173a9d692d3b687", + "value": 547 + }, + { + "scriptpubkey": "76a9144b0729a9cac7f29dc121b2f28b008b2a2311f3f388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914a08fe453058ac4d0c85415f760646c94bc77bb3887", + "value": 547 + }, + { + "scriptpubkey": "76a914ce2d6072a51a54bfee980db7ab823e08c9e87a1c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148644841d30bc75f67799cf21d8d2858639fc465488ac", + "value": 547 + }, + { + "scriptpubkey": "a9149e1b04356013957f0865e84e06fb59cc19e2e55e87", + "value": 547 + }, + { + "scriptpubkey": "76a9149d4d2758a88c68644053c435600db62100a9b75788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142fa2ed061d83bd04df0aec643b15ca380390d3e088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d0475ce09a356811c8bb361ecd2285294f668dc888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac", + "value": 547 + }, + { + "scriptpubkey": "a914f13067c43cdc7e4201628350cfd4362123a73b9b87", + "value": 547 + }, + { + "scriptpubkey": "76a9146bd6545185c83e9ae7f4c5227c7a9afa34d3a41b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f42b340dff1ef2d239c97d8ba11d223bae8cdfaa87", + "value": 547 + }, + { + "scriptpubkey": "76a914269cc7cb4632614c575f3674c8ceac0bf2e0429488ac", + "value": 547 + }, + { + "scriptpubkey": "a91431d3e0008a5f78ffdd60d979ce3f594133dc5cc287", + "value": 547 + }, + { + "scriptpubkey": "76a914b77e68177d0fef51df52370af08f530cc8e149ec88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d1cec8b8d70d2952c1cbff35d099a47b34590fea88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914365b822817453422dfb41689c255861d993b4cb688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f5391c005ad45c0e385e36bd67b0fcef0424ba6988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149542bd8a020a245ba5785dfeb067ed5d898db46488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f513c898a5ef40fb6e5b7c438e39306119cf55c488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cb674747b8586b6536e40eb78f29155ebd8c60c088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914afb7564e539d77b65f308aa65c4c09e2f7f463e788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146147395a0b8fcd759fcd7f40345db3b0d7e26d1588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f53919cf4890d0d0cbd559f43eb703d890cc4faf88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147b506577e65212ca6ae1125797fa713abb8e88b188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914adbd9f3d4b5a61f894d3d2062dfe295eaa04096988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914281063cf518ce1fba2fd000ebfc836de7813f33288ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145036f8b276748ab301ca106471b6f8c05acd925d88ac", + "value": 547 + }, + { + "scriptpubkey": "a9145035f52bddb9ee0044d1796b773eef31087a384787", + "value": 547 + }, + { + "scriptpubkey": "76a914536d303cd4841afeb98fb4c43572b7efaa8535bd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac", + "value": 547 + }, + { + "scriptpubkey": "a914348b5571551f0498d82fbee912e95e2c5dd82cc687", + "value": 547 + }, + { + "scriptpubkey": "76a91479fc20ebba0c83e5cb1924a9c99258a1a10d042188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144809d98c05fb8acdaeb4cd02b0cfb418fb3e42d988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f52681042537c33c4541d80e4974d7ae822b6f4488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914713d27932d092b1e66772ffb44d46bda8db740d288ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f51602f02babcc9efc955da4b81985450a2809e588ac", + "value": 547 + }, + { + "scriptpubkey": "a91462c09109fede9f918256001c2646365b5180707b87", + "value": 547 + }, + { + "scriptpubkey": "a9142db434998d3c9ff40f9ef1aa724e2f0a6fca25b487", + "value": 547 + }, + { + "scriptpubkey": "a91434866a596d4fa024e4bf48de50d25729f719186787", + "value": 547 + }, + { + "scriptpubkey": "76a9149088551764d2352a45c3d3bd18425780e8a0d60088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141fd35df583f6f9637609cc1119583fc8b24441e588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f863bf8480b78ebccb4c9b23c4261e54ebe6f72488ac", + "value": 547 + }, + { + "scriptpubkey": "a9143e3d03ab1d0358cc01395c59f12f65186045970087", + "value": 547 + }, + { + "scriptpubkey": "76a9143b07588b387a9b93e338ad563db8ba105e1069f888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91473d95c0186c5dc5511a688858ced666f1328c92688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91497324d7d9b8a78494ec2102a71222b192f3a8c7f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914babb672b8f3e761773f3fbf2122e706af3547c5c88ac", + "value": 547 + }, + { + "scriptpubkey": "a9143b6e274ee42803ab8c97a1437d98f6997a9006b287", + "value": 547 + }, + { + "scriptpubkey": "a91417c42f0ac3509e70edb190f5c5e8af11c9b4eb0d87", + "value": 547 + }, + { + "scriptpubkey": "a91418b984b775333f60c4bd136196e2413d6499a7bc87", + "value": 547 + }, + { + "scriptpubkey": "76a9147d9b7721645c954c0f8d2f96637da98b036c317588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f5286ab069a32a7d6bfd4bc7b68a10c7e1be7e1088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914724a879b56137c03f145b65b2dd6596a328fc18388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143567ca297d30484e533d25bd28661f454e028a0088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cac4195b5e969ce82d6f99f8dbb8790693172ade88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9ada987d8189121ff1da0e0138e6d77d8a2a62288ac", + "value": 547 + }, + { + "scriptpubkey": "76a91493de81a4087fd865f84657ebe23d6197c224ec2e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148d4d9a706de8c210796c8af9f715bf747e48ef0688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91403a8e9e6506e176d6d6fafdf7d37c6794888430b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914815e3c0e054e90911bf13f1291301e3548c2591088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140300e8d008e1786d431028a6688d89b9d19c5b6788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f4e9b5327f668f744febbc2c3c11679e5d38b5c188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b701e04a6ec31329868965beaa8892a13a202afc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cbe2a1269d1a33ad8df912709d53d8bb426d737588ac", + "value": 547 + }, + { + "scriptpubkey": "a9143fd953c9ea2540eb62126a6f1f9ff9bfe35f868087", + "value": 547 + }, + { + "scriptpubkey": "76a9146dd07cce3b3a8aa0008a546b6a49bbe57b6c269f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91427866895d83f2c1625b63902090fe9f9634205ed88ac", + "value": 547 + }, + { + "scriptpubkey": "a91467dbda53ac35b009de3b69f5f20d6933626d135087", + "value": 547 + }, + { + "scriptpubkey": "a9146eb526b0c4472d9b0a5f7b4da1d243cc64ab215c87", + "value": 547 + }, + { + "scriptpubkey": "76a914c9afcbd2af611bf0fcfda5512c6851bff064bfb288ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141fb3982ea323160a37af41447cef9f6d998ed6bb88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ad0a703b9a72a83a931a8513fe3781a116caf5fc87", + "value": 547 + }, + { + "scriptpubkey": "a91464663bddf61b6468e070339f17f7f430e44e794987", + "value": 547 + }, + { + "scriptpubkey": "a914e5ec4325d33e804f9b8e0c8114a1762da90f072587", + "value": 547 + }, + { + "scriptpubkey": "76a91462385809aca4eede27968128a65fdc31df551eca88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f4fdca6ceb2a4263c9bec5952419da7e5bda90f588ac", + "value": 547 + }, + { + "scriptpubkey": "a9142a46d91f5f23c739ec1052bfdfd5c27300cfc8a587", + "value": 547 + }, + { + "scriptpubkey": "a9140635bebb301fa4f68d152395ebff1a1f5f5f76fd87", + "value": 547 + }, + { + "scriptpubkey": "a914494b17a5228f70c8ad1e25d6daa18635dec6da4c87", + "value": 547 + }, + { + "scriptpubkey": "a914414490f39d09cf3b9cbb6b21305c395683abf8dd87", + "value": 547 + }, + { + "scriptpubkey": "76a91450c6cb28247f040086ae749635183fae105d6d9d88ac", + "value": 547 + }, + { + "scriptpubkey": "a91494cc339ecc90537b95637786f2152e7a1e6d7c3987", + "value": 547 + }, + { + "scriptpubkey": "76a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac", + "value": 547 + }, + { + "scriptpubkey": "0014eb0c7e349da2e1d672c9b0e4100065504e2b9b89", + "value": 262943 + } + ], + "size": 9075, + "weight": 35973, + "sigops": 805, + "fee": 80946, + "status": { + "confirmed": true, + "block_height": 661018, + "block_hash": "0000000000000000000477e07701c3163c8c72730061cda1169d87fd6161d6ed", + "block_time": 1607767065 + } + }, + { + "txid": "eae4537e85ef54cb20408a385115f0cf88090f27609d4fa0f384b4aa633999a8", + "version": 2, + "locktime": 646675, + "vin": [ + { + "txid": "db76eaa6bf47db9b62e197464a56d600fb0cd5213a2648f70d39fd803d4d449e", + "vout": 272, + "prevout": { + "scriptpubkey": "001446523cb79145e380920a888144443bc3a5bfb6b8", + "value": 1335534 + }, + "scriptsig": "", + "witness": [ + "304402206815a1ecb0d4c756b305b11294ecb497497012a33dad7350a6dde40c95260cb102203e7ccf5b502b6d068eaca24b6d41684f8a1204bdd706ae0a9afb4757be26739301", + "0320e0b0e6b84b23c00eb57b3efe4e648e275dab998081dda155fa376e7d81cc98" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914075b7dfca1465daa6f51b8497af83c10042ef39988ac", + "value": 547 + }, + { + "scriptpubkey": "76a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91404d9d15e67e6f20551992e03039711e59281f72888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ca9c6e90f3a210be6535d5daddb056a553a7003687", + "value": 547 + }, + { + "scriptpubkey": "001446a8b9d509c06ff0224220b3b91828e7a1138a6c", + "value": 547 + }, + { + "scriptpubkey": "a9141c691b58d2733e67dfc671a464e3e767f935f17287", + "value": 547 + }, + { + "scriptpubkey": "a91494cfe33fc036ba25580ba43475d8076114638f2387", + "value": 547 + }, + { + "scriptpubkey": "a914e1172fcce580c8d3d18ba2e1a87c5c691b9c4a3887", + "value": 547 + }, + { + "scriptpubkey": "a914e34be8cd2f06bf9bc2ba62cf1fc3df14fcb4064087", + "value": 547 + }, + { + "scriptpubkey": "76a9142ca0288895b3a9907def812d78b18b11b0e9a36f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91494cfde57c20624387e23c13aa7912c9df7b7b1d288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91477ed13d6ea179f7758d06792402740a2f5e3feb288ac", + "value": 547 + }, + { + "scriptpubkey": "a914126b76396676975db775c89f90c64a7146c1779187", + "value": 547 + }, + { + "scriptpubkey": "a91476f2d700b5781839e3aeff07918309b4f1fc459e87", + "value": 547 + }, + { + "scriptpubkey": "76a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b7c8933264deef54109edb98c00116fe79e62cde88ac", + "value": 547 + }, + { + "scriptpubkey": "a914641fb1e2da3abcd0bb4baab8b5f2c5a1eb3cd98587", + "value": 547 + }, + { + "scriptpubkey": "76a914c0a2ccf1d637a6b323ddf0384d86408126bc3d9288ac", + "value": 547 + }, + { + "scriptpubkey": "a914b2799b53eae70e15839950697831d9fba734b82d87", + "value": 547 + }, + { + "scriptpubkey": "a91401e9a475206b9ae92e26a68cb99762f0f939da5287", + "value": 547 + }, + { + "scriptpubkey": "a914219301392120d9d5bd1b0b15b25efc49745c05f987", + "value": 547 + }, + { + "scriptpubkey": "76a91428b6b4e35ea5da0b61c83fa66bc80556e183596588ac", + "value": 547 + }, + { + "scriptpubkey": "001431afb2fbcbf7fb3ef942aab2ed999209f56d9afe", + "value": 547 + }, + { + "scriptpubkey": "76a914f68ef5654990e45879bf917db676025b7d525a7d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a124b037ee6cd00905e3dac6083a710e2038c8c988ac", + "value": 547 + }, + { + "scriptpubkey": "a91477d5aaeba3112e3867859d02c401a7b1dee7227487", + "value": 547 + }, + { + "scriptpubkey": "76a9142e1e14e5a9712decb2145a08fc99e7138b8156d088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bb6da1d4a6636a12a2255ae82c0a54976c0088e488ac", + "value": 547 + }, + { + "scriptpubkey": "a9144aa50ea34d70bbb08f71cb5b5829d9df69b5c75587", + "value": 547 + }, + { + "scriptpubkey": "76a9143ecab4486de975226f9080f36b483d91143ee2f488ac", + "value": 547 + }, + { + "scriptpubkey": "a914647a45c362d9dd25b5c05995b85f5e3b09133c1e87", + "value": 547 + }, + { + "scriptpubkey": "a914497f27973472ebbd5623c7a3f5abc36f72f4e2dd87", + "value": 547 + }, + { + "scriptpubkey": "76a91447ce7922a2290eb54e0e3adc86d306dfaefc4baf88ac", + "value": 547 + }, + { + "scriptpubkey": "a914c5e0a140be90437c77f89244b69e24c13ae9d33187", + "value": 547 + }, + { + "scriptpubkey": "76a914b6f76e8e680e4fea351d75b406a55131b303919088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140b6653042319b6ecf4b0f4637fd740f44832780888ac", + "value": 547 + }, + { + "scriptpubkey": "a91496f62bbc13a6a9f75a9c7fef368023baf1d4dff887", + "value": 547 + }, + { + "scriptpubkey": "a914b78792558f18ca95c68a4a9ebdd9a7bc00273c4a87", + "value": 547 + }, + { + "scriptpubkey": "76a914a14c5afbfbc7f22457e136193456511b5199d97e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914dfdb0853dce2db8f73333b1d98d1d4b7c3e7351787", + "value": 547 + }, + { + "scriptpubkey": "76a9143567ca297d30484e533d25bd28661f454e028a0088ac", + "value": 547 + }, + { + "scriptpubkey": "a9149c928a59d33f1557f82906f454b1ee0d6541ca6b87", + "value": 547 + }, + { + "scriptpubkey": "a9147a6509bf19354baa582c19b053b06a067d70493a87", + "value": 547 + }, + { + "scriptpubkey": "a914c4163a3386d664a19858093297d8599289f79f0787", + "value": 547 + }, + { + "scriptpubkey": "a914921b8b3a7dfcedb960cfdaa2168ce846c63f4cd687", + "value": 547 + }, + { + "scriptpubkey": "00142e745d784d9bf09e10663006e197012d65a7bdf4", + "value": 547 + }, + { + "scriptpubkey": "76a91401b4c9546d14cac22495806305f832a41078375588ac", + "value": 547 + }, + { + "scriptpubkey": "00145db684ecee1ede311d713226c2f8a8b39a50db84", + "value": 547 + }, + { + "scriptpubkey": "a914000dec31346ddc41aa34049db6d8c19df8c1de5387", + "value": 547 + }, + { + "scriptpubkey": "76a9142edcc8214ce526de2ff9d7250359a718970951be88ac", + "value": 547 + }, + { + "scriptpubkey": "001425d40546af280ebada472520bf1434db33e1b3de", + "value": 547 + }, + { + "scriptpubkey": "a914a89e802f44fe74cbd896168fd4cf340e82311d9287", + "value": 547 + }, + { + "scriptpubkey": "76a9147a224c68140c391b37a77508c7cffc633404d67388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914fba789bca97a2299a882a66751e5ff6d08c844f988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac", + "value": 547 + }, + { + "scriptpubkey": "001496bd6bb3b36ad9aec015a9737a7f99663c93e71f", + "value": 547 + }, + { + "scriptpubkey": "76a914970e44536ee837f50edae2717832b572b875472a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914225ec49487784a4c6394708e8b392ed1fde28deb88ac", + "value": 547 + }, + { + "scriptpubkey": "a9147554b6b0fce1b5b3cb8587a77d39f45e935df46887", + "value": 547 + }, + { + "scriptpubkey": "a9145582ba863311787efd5db4f095285b73907c46e287", + "value": 547 + }, + { + "scriptpubkey": "a9140e1ad58d851cfc91b540f95f630d3271fd43f7d087", + "value": 547 + }, + { + "scriptpubkey": "a914167c4f78b363d381fc36225d810679fa50c6cada87", + "value": 547 + }, + { + "scriptpubkey": "76a91497dca4eaaf26fc053d3a714b7755ab731d8d721988ac", + "value": 547 + }, + { + "scriptpubkey": "76a91404920812f837db8055d1a1832a9df73d3961dbea88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c201f40d2b14170b4972390917bf63e4c217281788ac", + "value": 547 + }, + { + "scriptpubkey": "a914a9bc40d7cb8419a3865ff754352a05500ad88c1b87", + "value": 547 + }, + { + "scriptpubkey": "76a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac", + "value": 547 + }, + { + "scriptpubkey": "a914263d5d98b57978daf432243cc68f3671b161110687", + "value": 547 + }, + { + "scriptpubkey": "a914a13c1db2eea532ead76f8ad0cfb28005a6ee0e2887", + "value": 547 + }, + { + "scriptpubkey": "76a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f1c11284a8652b153474a328dad969079cb1fbc688ac", + "value": 547 + }, + { + "scriptpubkey": "a914c8dedab4217ab547aa9e9034763bd6908ab8143087", + "value": 547 + }, + { + "scriptpubkey": "76a91497c9d32e43bada27cb80e398adcb60da9a2141e288ac", + "value": 547 + }, + { + "scriptpubkey": "a914f3267d362fc8b9b945e554014df931de7c3fe99d87", + "value": 547 + }, + { + "scriptpubkey": "76a914000dba2ae08ec02a5752ed67cd88062d96587ba788ac", + "value": 547 + }, + { + "scriptpubkey": "a91444593c3c5b4237991dde89a38919df184b151bec87", + "value": 547 + }, + { + "scriptpubkey": "76a914624d31cddd272ce06896ca86845a1eec0527fe2588ac", + "value": 547 + }, + { + "scriptpubkey": "a91453418cb2a7f706cbaee1991f6a5d53420980aa5587", + "value": 547 + }, + { + "scriptpubkey": "a9147b27350e4848b34dbbdc4d3b69c949a28784a7e087", + "value": 547 + }, + { + "scriptpubkey": "76a914b5107766d16ee9a571201218c76a4093138d522988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914780073621cc467a9bc2f377649d2a8d21681219788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914598cbebfa0f62e969692603e009c2617c2d8b2b988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c4ce9b3731a19a8b9d8487f55776b555c34ee8d988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914757da6e1b2a5aa45c9f449896ef75b25570ceecb88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91415fe20c4d83e3a50bba9d0bace983a4502dbbbdc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b701e04a6ec31329868965beaa8892a13a202afc88ac", + "value": 547 + }, + { + "scriptpubkey": "00140a3d9a46b00e01172899902f2a154eb13a68d00f", + "value": 547 + }, + { + "scriptpubkey": "76a9142557acdc634ac7f274bddd53bef20d7bdb3b31e788ac", + "value": 547 + }, + { + "scriptpubkey": "a914a981ca60910138cc2f0202496bb4f81abac07ddd87", + "value": 547 + }, + { + "scriptpubkey": "76a914392893f9e5f8c96760df1d83338ecad75d910c9388ac", + "value": 547 + }, + { + "scriptpubkey": "a9146640205bcac55614aa1a0cdb23dc2a0ac3cf001987", + "value": 547 + }, + { + "scriptpubkey": "76a9140dd1ab497475a5f862187f4cb426499660328e5988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914ebb999f4765c05f7f2e0c0d6bf20af9e65fdaf0e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146bca413b0f9c1ce960ebf1e45e6babdb3a51e94d88ac", + "value": 547 + }, + { + "scriptpubkey": "00143535b76a791799e024b863b3bd0017cd46dcd6bc", + "value": 547 + }, + { + "scriptpubkey": "76a9147d9b7721645c954c0f8d2f96637da98b036c317588ac", + "value": 547 + }, + { + "scriptpubkey": "0014a3db85065a7729e6f71457dfddb07501b09461dd", + "value": 547 + }, + { + "scriptpubkey": "a91469f373d69ccf84d61386f4238f30139e9a2450ca87", + "value": 547 + }, + { + "scriptpubkey": "a9141cc51cb9865ddc27beca2424c52c028386f2e41987", + "value": 547 + }, + { + "scriptpubkey": "76a9141debb8615138bb3fe17dcbdf38a4572d7c6e016188ac", + "value": 547 + }, + { + "scriptpubkey": "76a91400100a1287131fad1f954537c58455b7ec2a47ba88ac", + "value": 547 + }, + { + "scriptpubkey": "a9149ec319e8ca8a50a33fb8beed1b10445e51f93cf787", + "value": 547 + }, + { + "scriptpubkey": "0014e43768fa81b8f6cd4a389cac86732eb1e5633575", + "value": 547 + }, + { + "scriptpubkey": "76a9145a3faf13ca8d6d32ea1f15445411f063d4ee653b88ac", + "value": 547 + }, + { + "scriptpubkey": "a9144d53dba2f88d79c4cf790d7622aa126c37ed622087", + "value": 547 + }, + { + "scriptpubkey": "76a9144b813051e5b38396535da53d25ab26ac3b6bf69088ac", + "value": 547 + }, + { + "scriptpubkey": "a914e6d1a7c98dfd1dc83e53618d95b1ca1a2e303cba87", + "value": 547 + }, + { + "scriptpubkey": "76a91464ef0bf4cae69e0888167dd53268ed7b2f13de5c88ac", + "value": 547 + }, + { + "scriptpubkey": "a914aa09a8f7bcfe9898cb1f4f1e45dabda65e8d485987", + "value": 547 + }, + { + "scriptpubkey": "76a914bee2f97096755e41c0626189e8ac272587c73f2388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142e8e8ba352ae5d19f83def76212f38434cc45cc888ac", + "value": 547 + }, + { + "scriptpubkey": "a9142f1fec1edbbfb3edd27efad569449ef77e9767d287", + "value": 547 + }, + { + "scriptpubkey": "a91488259df2eb33f749c261e11696155f6007ea961a87", + "value": 547 + }, + { + "scriptpubkey": "0014c09b4855ab15f0e56f045f26d5d96f9f16d4dedc", + "value": 547 + }, + { + "scriptpubkey": "76a9145e94d49e9f3adf5895c67d0221bce663e75eb70c88ac", + "value": 547 + }, + { + "scriptpubkey": "a9148ac3d1d6b9029dd09a3ef84f76d0a173c097c2d587", + "value": 547 + }, + { + "scriptpubkey": "76a914b768da04a041fa9286189a439fb1bfe9e84d399088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a3976cf0ac3bea2486e6320d81a10ec49a0857a488ac", + "value": 547 + }, + { + "scriptpubkey": "a91420d696f07b304f0c7b9b444d21b65961acfcbe0287", + "value": 547 + }, + { + "scriptpubkey": "a91403ba52f5b2be2386c72c94bdb9312d161b5c26ac87", + "value": 547 + }, + { + "scriptpubkey": "a9147ba2a231ca1c2dc9c8696920491f4668d12788cb87", + "value": 547 + }, + { + "scriptpubkey": "76a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914364185e9cb93428f2573a6af31ea654464331c0e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914801befa66db85b954f2b8d53b18bbe28a688813f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac", + "value": 547 + }, + { + "scriptpubkey": "a9148272b97c28883d7b249d2672cf07c9df59dd6f8f87", + "value": 547 + }, + { + "scriptpubkey": "a914c84aa77ff5f0c73a43792ecb840be4bf68a7b45887", + "value": 547 + }, + { + "scriptpubkey": "a9147db3b1c74dce2209fe3c2cf41292c6b385bd9de087", + "value": 547 + }, + { + "scriptpubkey": "a91469f37406884082a433c1c37eab72a9c2f3e94bff87", + "value": 547 + }, + { + "scriptpubkey": "76a914eec325c3280b8f96b736567f5206343adb1ce9bd88ac", + "value": 547 + }, + { + "scriptpubkey": "a914a886013826427a201ae117021dc6baef3b62970187", + "value": 547 + }, + { + "scriptpubkey": "a9144c5a08a5fd93d1999ca06ff3c48355020a85b23887", + "value": 547 + }, + { + "scriptpubkey": "a914754813a7d66dc43de9f4da62d3c30a1fa214434b87", + "value": 547 + }, + { + "scriptpubkey": "76a91464a8fbe5d93c24097d18cb6d1621b8c388d7bc2588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914238909d978158349f520865d725566162ea92c8088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914adc0542b37a628f5b62cf6e3193e6a8fa44bb61288ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141517447e0f00167d5f8b075d638d7bb557272ddb88ac", + "value": 547 + }, + { + "scriptpubkey": "a914494792884f0cd961e7e74fe2d05c1021b41bb06b87", + "value": 547 + }, + { + "scriptpubkey": "a9142012096e5baeaf65af0ef022c63dfa1cc5d91a1a87", + "value": 547 + }, + { + "scriptpubkey": "76a9144e1ffd88e743ddb6e8d0580d077fd24432be422788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140ec79ad7df97800cb801097b1af31fb85032fdd388ac", + "value": 547 + }, + { + "scriptpubkey": "a914ca1dc3de0f45e2f24b983d47098898643b8832e287", + "value": 547 + }, + { + "scriptpubkey": "76a9142670993cc7036fdc366e1b56f30d225312ac629b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cac8fbcd21005430337a9e20b8c407800b24be9888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a7b117ea56c5fb7252d3ef6d43ff090fe516197688ac", + "value": 547 + }, + { + "scriptpubkey": "a914c77652fc66fc2c5d884bb3206b3e1bea2c7a48a987", + "value": 547 + }, + { + "scriptpubkey": "76a91411adc7b9454b930884131d368365dc2c459c4ae588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b5cbbe12e8b79caa7a764766b02f16fd193ef1f688ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91428c42ed3a3e8dd299b981f762ef1ff53b254d05088ac", + "value": 547 + }, + { + "scriptpubkey": "a9140842b932a9d9c14cb5fab966711e4ae98b255f9b87", + "value": 547 + }, + { + "scriptpubkey": "76a9148c939130b81f5e32c9669e8e894a500c0054e49488ac", + "value": 547 + }, + { + "scriptpubkey": "76a91483068bc8913bb8fdadff3c8c5904442af64deae688ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144aa3470fdf120095b24ef762eaf172868714fd3d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140993915688c85f1d3c85fa6ee4759c92187efab188ac", + "value": 547 + }, + { + "scriptpubkey": "a914606b209f127812bb02a742a5d7f16caec239548087", + "value": 547 + }, + { + "scriptpubkey": "a914ece17d0a4fc019d93fb99cc945da24f7354a3c3887", + "value": 547 + }, + { + "scriptpubkey": "a914c68781daa5e91fc514cffb8896377702ea76622187", + "value": 547 + }, + { + "scriptpubkey": "76a914721fa96ce32dddbde6fa329f716a8d9505be94df88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143e3346d087383244c3503967ba2d22720200083e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c8f6bd8c6e84cd25235e2676fd7c47bff0d1559288ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147b506577e65212ca6ae1125797fa713abb8e88b188ac", + "value": 547 + }, + { + "scriptpubkey": "a914e025e8a52d9455efc65b4f4c74d4114778d75a8a87", + "value": 547 + }, + { + "scriptpubkey": "a9145cd5ee3205aa5b5177f18ff63337aa7a59fd965b87", + "value": 547 + }, + { + "scriptpubkey": "a914788dac6dbfc1bf0de8ce5f58631356ef8d0fd7fd87", + "value": 547 + }, + { + "scriptpubkey": "76a914839766eb5bd10661530bfd5c1f1966476857967988ac", + "value": 547 + }, + { + "scriptpubkey": "a9144150d1a6ced6f3656bb0ead3e941a71ef31824e587", + "value": 547 + }, + { + "scriptpubkey": "a914fd718b4d16009b5467fdc42f15276f216b16f6a687", + "value": 547 + }, + { + "scriptpubkey": "76a914976c91d993c793d471d45b52977a59c67d0c6cc488ac", + "value": 547 + }, + { + "scriptpubkey": "a91430a88b5a38c247dabb4777c9c8e77799a532faef87", + "value": 547 + }, + { + "scriptpubkey": "76a91482105dbeb438b1481ac20d259221aac2c1d546bc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914885be2340ea7cc0aa2f8646137d922142d26474a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147975b5b27c7023c0bab785899358161209515b6488ac", + "value": 547 + }, + { + "scriptpubkey": "a9144072c1db05ec53b7cb73a9c831e969dec70b5dc387", + "value": 547 + }, + { + "scriptpubkey": "a9143b2767cf89557718a4d428df4d88930a3564e3e887", + "value": 547 + }, + { + "scriptpubkey": "a914861f23bc5f45abc08ebbd1812ceaf21dacc40f2a87", + "value": 547 + }, + { + "scriptpubkey": "76a914c732821624031236109005b43a64f6e21e5cb65588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac", + "value": 547 + }, + { + "scriptpubkey": "a9145147e139171976445c04aa6b07a16fde5080404a87", + "value": 547 + }, + { + "scriptpubkey": "76a9141575446eb18fdee5e96feee018a8f69728a6420e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914c1bcc07d5ecb4be5a1c7fe5140310c814b4f495987", + "value": 547 + }, + { + "scriptpubkey": "76a91482a05defbdaa76f3fa7c914722d7d5e73d006b0588ac", + "value": 547 + }, + { + "scriptpubkey": "a91450c0f1f426aedeb69c3f69258dd2e5c81edc5aa987", + "value": 547 + }, + { + "scriptpubkey": "a9143fe5a8dcdec64dd7f1b16a1e209a19a41381878887", + "value": 547 + }, + { + "scriptpubkey": "76a914d107b8817df9f949aeb03de75ad5a91345bf176d88ac", + "value": 547 + }, + { + "scriptpubkey": "a914b099ddab3a91d337bdc16be86c74132cff9ec3a687", + "value": 547 + }, + { + "scriptpubkey": "76a914724a879b56137c03f145b65b2dd6596a328fc18388ac", + "value": 547 + }, + { + "scriptpubkey": "a914fad978a4eec17039f7b138a16e5667a32ff3651887", + "value": 547 + }, + { + "scriptpubkey": "a914301cf90b4d58ff1d131524b1ff4a77fcf0c8d7d287", + "value": 547 + }, + { + "scriptpubkey": "76a9149088551764d2352a45c3d3bd18425780e8a0d60088ac", + "value": 547 + }, + { + "scriptpubkey": "00147683a834acb6176d70a7d12ebd94f5af5be478a5", + "value": 547 + }, + { + "scriptpubkey": "a914e64aa1e37ef8b7815678668ad7528048aeaa350887", + "value": 547 + }, + { + "scriptpubkey": "76a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144f3bdfe3fc3f9a7b9e38a7795ff6d73f7e87e7f988ac", + "value": 547 + }, + { + "scriptpubkey": "a914c751d8f81559bf39516e5e1b33b070dc410cfd7d87", + "value": 547 + }, + { + "scriptpubkey": "76a91462ace1dede39e39b0f6264da2ad2cc60780b676088ac", + "value": 547 + }, + { + "scriptpubkey": "0014d6fd3fe25edf187229df8d0d14e0a946c36f8bf0", + "value": 547 + }, + { + "scriptpubkey": "76a9148a33d877639ef0052d42844126c2a4629eede63d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b48f9d6c379dacbfa5406012f5b2210d5189159f88ac", + "value": 547 + }, + { + "scriptpubkey": "a91466aaa916dd8232a3293aa63ef663a009685945b887", + "value": 547 + }, + { + "scriptpubkey": "a9147c30587ea632effc1db85cfe8ddee5afc82d8b6987", + "value": 547 + }, + { + "scriptpubkey": "76a9145f261bf43e5ee2142cf9a1aaf60d4a28fd57f99588ac", + "value": 547 + }, + { + "scriptpubkey": "a91404839c4bceb4f3dec96af8735d6ffdeb34f5bc9887", + "value": 547 + }, + { + "scriptpubkey": "76a914c1aea772552a8738d0147dc7937b1ee160f200d888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149f5a900a674aa8415105fcd9b030c3c1f91f6d5d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914fbf4b7ec9377dd063b06b1705bb1ee4b5526f2b588ac", + "value": 547 + }, + { + "scriptpubkey": "a914edabee24ac1a59441119b96bf12155362653ade787", + "value": 547 + }, + { + "scriptpubkey": "001478122e233e60e9051ad810e56c6366cefe424cfb", + "value": 547 + }, + { + "scriptpubkey": "a91432e54c4244db87b0f496b785afcae6787253fd3987", + "value": 547 + }, + { + "scriptpubkey": "00144f7a28d7237e382ebd582fb13448ca5ef37b4b7c", + "value": 547 + }, + { + "scriptpubkey": "a914f6076450175048d25140934ba0609cefd7fd04e287", + "value": 547 + }, + { + "scriptpubkey": "76a914883f6702227fe21f7871cbbf5194c6a28184207e88ac", + "value": 547 + }, + { + "scriptpubkey": "a91421b6db29afd4dfcf9749e0ffdba5ecfde951ef7487", + "value": 547 + }, + { + "scriptpubkey": "a9147615976188fea1b2a7d5d97fa37136a0c44f015d87", + "value": 547 + }, + { + "scriptpubkey": "76a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148afa968104c60c0bcbc938e26b50157f9389e1f388ac", + "value": 547 + }, + { + "scriptpubkey": "a914bbe57aedb869c3d4d7c27dc1013c5d233be6f67287", + "value": 547 + }, + { + "scriptpubkey": "76a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac", + "value": 547 + }, + { + "scriptpubkey": "00142723e62af3062d344385b699947570e0105d2adf", + "value": 547 + }, + { + "scriptpubkey": "0014f3bbfa985f5635be5776587fc14d862bef97869d", + "value": 547 + }, + { + "scriptpubkey": "76a9143b0849f60d1519925ff3dc92836525815b5ead9588ac", + "value": 547 + }, + { + "scriptpubkey": "a914752a839283f9da5a937865a48a029a0715ed8abd87", + "value": 547 + }, + { + "scriptpubkey": "a914513c8fb40c33abe66e592bcc2c6d9a04fae9c5ed87", + "value": 547 + }, + { + "scriptpubkey": "a91497bb5395e7fc72190017b6bd9ebb2db868c4867387", + "value": 547 + }, + { + "scriptpubkey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "value": 547 + }, + { + "scriptpubkey": "a914bddaa47f9d3ee5094874dfc0bb0768f86c5b072587", + "value": 547 + }, + { + "scriptpubkey": "a914be5c0f7e08571e080ab461a0f10415245479f5df87", + "value": 547 + }, + { + "scriptpubkey": "76a91406f31b02fb5c2d82cc9d583d1d586e03bf479ea888ac", + "value": 547 + }, + { + "scriptpubkey": "a91407811f281a76e6238268b1529f99e0968b55a90787", + "value": 547 + }, + { + "scriptpubkey": "76a914f249f0b175f1a3eabb34af2a8289b8679a7c27cf88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f94cb26b990b25d543ca08a5ef576afed7a45ee788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91450705377d4976800b2577a0368256f6e4c0ca0c988ac", + "value": 547 + }, + { + "scriptpubkey": "a914e390dfead0ca7f156cf32b53ea3b99527fe2bd0f87", + "value": 547 + }, + { + "scriptpubkey": "76a9144ab176a9bbe75e7fc8839104ad13e3de8beb160c88ac", + "value": 547 + }, + { + "scriptpubkey": "a9142e59bc20a28ada229c0dd39da9bba808777743c387", + "value": 547 + }, + { + "scriptpubkey": "a914de3e2c7ae81461075383ccc51543aa3a685d455b87", + "value": 547 + }, + { + "scriptpubkey": "76a91445547ea426dbf309be1ccb8d6096b6161444af1a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141b481a662b1c2cf09be386bf753ce3387d55509e88ac", + "value": 547 + }, + { + "scriptpubkey": "a9142f09e545689363a9ff0aba211c96b6b85a89dd2187", + "value": 547 + }, + { + "scriptpubkey": "76a914740cde4465c0a5626d41a52c230a85924b81f03688ac", + "value": 547 + }, + { + "scriptpubkey": "a9143bd59bd84431a3584314c6a9d2abe459ec7a249087", + "value": 547 + }, + { + "scriptpubkey": "76a9145be014adf2f246409de507a55df829c1a2f7749688ac", + "value": 547 + }, + { + "scriptpubkey": "a914855b965bd4a26638cff2088bb0d53bfaab7aabbe87", + "value": 547 + }, + { + "scriptpubkey": "a9142a4a8f556f3e3dd38733bc9b9cb48672f876a2bb87", + "value": 547 + }, + { + "scriptpubkey": "a914a5a40e931f20fe070cd237c17bae489604e03b2987", + "value": 547 + }, + { + "scriptpubkey": "76a914931aa26207b3e2a90dbc0a93bf5249d1ed994c0a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914685359bd97d54eb904863851fb35b81f2ec4f21a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91488872bd7a99389e81a7147ba6ba09e1487c384a488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914079e329263059d318333b547a7fae9ff5e78542f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144b75f34bc1d88b52f18c2877ad77c910b463a4a388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914436364ac912ba66594d4a2bc4e89a39d6c1f5b2288ac", + "value": 547 + }, + { + "scriptpubkey": "a914e4a09480838cfd49a9c16641520b6f780403b90787", + "value": 547 + }, + { + "scriptpubkey": "76a9147f3b321496dcb0a59c09adc403cc9ab2088799a888ac", + "value": 547 + }, + { + "scriptpubkey": "a914d4d000b0acd6676eeda3ed7edb6fd1d7295ce9e687", + "value": 547 + }, + { + "scriptpubkey": "76a9140aef240f19bbb29c85e328e5a25232abbd740ba988ac", + "value": 547 + }, + { + "scriptpubkey": "a914cede0362109e5af124f6b6ad211e4433a182994587", + "value": 547 + }, + { + "scriptpubkey": "76a9144ccfdb5233429d8ac3dec46dc85c5a6e20a2ab6288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bd61c2f7c5abd0046e7d257159631cb91671129088ac", + "value": 547 + }, + { + "scriptpubkey": "a91466697a919a4bcc8e75418522666d907908a26d0287", + "value": 547 + }, + { + "scriptpubkey": "76a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac", + "value": 547 + }, + { + "scriptpubkey": "a9141941cee43baca7d7b2ee4a57983bc91e07263bf387", + "value": 547 + }, + { + "scriptpubkey": "a914cdfe08d97dc76c12c02551914eeee969dd25662087", + "value": 547 + }, + { + "scriptpubkey": "a9148252d4ac43d329e6255f3672b8d82da5f964bfb487", + "value": 547 + }, + { + "scriptpubkey": "76a9143f527c6288ee1b3b232271fe5ede1be9902c6b1288ac", + "value": 547 + }, + { + "scriptpubkey": "a914a1f6dc6ee49cbce315f800181ed6d90bcd316f6187", + "value": 547 + }, + { + "scriptpubkey": "a914f18f523d4fb2c14b0d1f7d7e7b321fd097226df787", + "value": 547 + }, + { + "scriptpubkey": "76a9142b451ee319672528c653ebc94b216630194a2f9988ac", + "value": 547 + }, + { + "scriptpubkey": "a9145e9f3c633cdf8fbec9d169dcd20051c56a66072887", + "value": 547 + }, + { + "scriptpubkey": "76a9149056c5e9b8520195a72c027e7e9a76968fefe67088ac", + "value": 547 + }, + { + "scriptpubkey": "001451a1281e9cafc8f5f51ad6c26649d6d8789a7191", + "value": 547 + }, + { + "scriptpubkey": "76a914f0dfa17c1db83de64bd8703c9f595c5032e6426988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914269cc7cb4632614c575f3674c8ceac0bf2e0429488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914536d303cd4841afeb98fb4c43572b7efaa8535bd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147825249ea7836df80639833b754c49bb320b643788ac", + "value": 547 + }, + { + "scriptpubkey": "a91456eea5b32d41520452600d0af39a8dab963e9f9687", + "value": 547 + }, + { + "scriptpubkey": "76a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914532e476facb85e943a7b32948209c35e1c7bd1a388ac", + "value": 547 + }, + { + "scriptpubkey": "a914d33914c7e10a1d47f7b0e66f77e914cf37b0a1f187", + "value": 547 + }, + { + "scriptpubkey": "a91488c48ae75673c9f5d4d89df05eb7124c3c69819b87", + "value": 547 + }, + { + "scriptpubkey": "76a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac", + "value": 547 + }, + { + "scriptpubkey": "a91468b0f118bbe3693a0b8384819954e2305eccabad87", + "value": 547 + }, + { + "scriptpubkey": "a914776f9be149d300daf5ebe3579bdec5bc69d2a23187", + "value": 547 + }, + { + "scriptpubkey": "76a9148c57c0a77bff335010895439bb536f9937af592888ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149182e8c18157c664bc8a3123080738433ac76a6788ac", + "value": 547 + }, + { + "scriptpubkey": "a9146943767502bfbdc26ed1c5bbecdb90039921661187", + "value": 547 + }, + { + "scriptpubkey": "a9143efb24d9ddccd2fbfd65a4e08f89b5246b26979487", + "value": 547 + }, + { + "scriptpubkey": "76a9149424d3ac54f12e252e91e99853e4e3e6e597867c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91482aabd361a1ea4df42ff8587508794e2cfebb89e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d746be6bf6ef309d59ee517d7f76b063c75a451588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142e56c82a26719facb889434f6914930ea1a0f38188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149714a5302b510387d3a7ab51cb15d8dcd02b4c0988ac", + "value": 547 + }, + { + "scriptpubkey": "a914ede8db516e6eb07e955f41b700db95f8bab4631187", + "value": 547 + }, + { + "scriptpubkey": "76a914781ea96790d9640c8186575a889961cbe8a8ba3388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148644841d30bc75f67799cf21d8d2858639fc465488ac", + "value": 547 + }, + { + "scriptpubkey": "a914e3547e68036ce8c67afd4853a02d82e02d94163e87", + "value": 547 + }, + { + "scriptpubkey": "76a914867ef01439dffc5c42152cbe8bb330d7305db7aa88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91476b144f69a937b753727c89db29ec8236a53316588ac", + "value": 547 + }, + { + "scriptpubkey": "76a91452c9d0081fe29603776817e8ffc75c177e4d782088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac", + "value": 547 + }, + { + "scriptpubkey": "a914997e9b9834946b9491063ca7cd3e9f355e2d3d5c87", + "value": 547 + }, + { + "scriptpubkey": "a9140cf6053e8cb9254552e4bae0fe670632c7ea540687", + "value": 547 + }, + { + "scriptpubkey": "a914bbb429f25ba41e3be0b9e0e4cd46557ab8e8289687", + "value": 547 + }, + { + "scriptpubkey": "76a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d206fd2cb2011c961a8402c5d0a84a89b666d94188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f7211a88d14c581b7784187b5eddd0a2c4cf945b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914992366850bba179596b6e00897c04577b23ddb1687", + "value": 547 + }, + { + "scriptpubkey": "76a91448aa7e31474a9ace7c99b7d193eb26d7ce5bc5a388ac", + "value": 547 + }, + { + "scriptpubkey": "a914afd3f6ecd4121fdeaa29fef9dcd6e0015d3e39c287", + "value": 547 + }, + { + "scriptpubkey": "a914be9a327afd51f154cba24b60151b65df96b47e2387", + "value": 547 + }, + { + "scriptpubkey": "a9148fb280ed64eb180f7f6067930d1b7ebdbb947e3687", + "value": 547 + }, + { + "scriptpubkey": "76a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac", + "value": 547 + }, + { + "scriptpubkey": "a9145da7f4a1f200cc055456e417755a2f1f409e15c787", + "value": 547 + }, + { + "scriptpubkey": "76a914f0c2385455cc195a07a370fe4d3c2fdbcd37ea6888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f9be66d347fc983b62277698f2c2d64acf19410e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c690fb1ab03651ea84605120d2f16f39b854743c88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f25e0dd26ccfe1f426ea6a6b62c62cfa56815dfd87", + "value": 547 + }, + { + "scriptpubkey": "a914a0e2ba6396acca24948d21a117f9626261615b7687", + "value": 547 + }, + { + "scriptpubkey": "76a914560d8715e1ca752b73101318e3f19f7af698071288ac", + "value": 547 + }, + { + "scriptpubkey": "a914988ab5504dbf5742fa947ed0c268a0f1c54a9ad187", + "value": 547 + }, + { + "scriptpubkey": "76a914a2b8f5404e9263c11930720a153ca9ac24bb329c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143186458445f45fa48ad843c87bdec06e527a0b2288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac", + "value": 547 + }, + { + "scriptpubkey": "a9140d8d4165757e30b914106d1076ace4fac70d4c6487", + "value": 547 + }, + { + "scriptpubkey": "a914309efd0a3ab0a58d7e48b3d50c3b1f90ba550ff387", + "value": 547 + }, + { + "scriptpubkey": "76a91456d27d0e35ecd0d2e3b611c6d7df778b5640fb7f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148b1b24bd3db23572786fc645ab586918c53d135388ac", + "value": 547 + }, + { + "scriptpubkey": "a9149d6aa01ccac2624eb943e670b20af70d351869a787", + "value": 547 + }, + { + "scriptpubkey": "a914e9106300da4f6297adbe057a46f7a44c1a8dfde587", + "value": 547 + }, + { + "scriptpubkey": "76a9149e6a0b9fdab28719475e27ee9707c3c04a3348ca88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142e282b9e02a855423a73607d8e50799445f3a02188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914ff19059d0e769d64114341c231ad932004c8f07588ac", + "value": 547 + }, + { + "scriptpubkey": "a914429bdcbc69f7b9ee8a2d6f668c28faeff8206a0287", + "value": 547 + }, + { + "scriptpubkey": "a9146b70c8314c9ead9eb528bd1f0f88e60125b4dd8687", + "value": 547 + }, + { + "scriptpubkey": "a9141001fbaf8c01a0df2ea3120f0e7ed7c1f12b867387", + "value": 547 + }, + { + "scriptpubkey": "a914ce6abc49116bcfc01e3ccb1d8d3f0b0fa4f6dc7687", + "value": 547 + }, + { + "scriptpubkey": "76a9140d19ecf4bedf38da71f8877e042b65761742ded888ac", + "value": 547 + }, + { + "scriptpubkey": "a914601b9c4b6d6912df901726ca19b4322220a5841987", + "value": 547 + }, + { + "scriptpubkey": "a914e2bbe80f5614a7ce081674eb119db4b81bb5f9d287", + "value": 547 + }, + { + "scriptpubkey": "a914d4e8739d8d4cf246a62e79a31806de2342178f0a87", + "value": 547 + }, + { + "scriptpubkey": "a9140b1ce3ba0bd3059db9b37883e1f6e86dfae729bd87", + "value": 547 + }, + { + "scriptpubkey": "a914e55943a785950f4572a762ebf4d06376d8bce3ad87", + "value": 547 + }, + { + "scriptpubkey": "76a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac", + "value": 547 + }, + { + "scriptpubkey": "a914e6e1cfae0432b318d119a758abd47430a43903d487", + "value": 547 + }, + { + "scriptpubkey": "a91458d040eab0a572783afcd8989a21a0484879543287", + "value": 547 + }, + { + "scriptpubkey": "76a91448b6351ed99307be4109db2284db8fb9186ce14988ac", + "value": 547 + }, + { + "scriptpubkey": "a9141b0799b947d190cd48c29b2ba1cdc2855dbaf8f987", + "value": 547 + }, + { + "scriptpubkey": "76a914ceb6a0ca98b6a70c95981ac1b9819755f918374e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ef79002c3ada61373c3330203b92ec71f880469187", + "value": 547 + }, + { + "scriptpubkey": "76a914967e4a6869439539f20171d0822a1e5380b0c72f88ac", + "value": 547 + }, + { + "scriptpubkey": "a914badee2a0f8f6824b636f6da919cdd93e280a004287", + "value": 547 + }, + { + "scriptpubkey": "76a9148d2a64d73ed4f1c6535427cc24dc9cbaa409711888ac", + "value": 547 + }, + { + "scriptpubkey": "a91479d3bf91956b6f2a7c545a3d7f0bbdd84c085ddc87", + "value": 547 + }, + { + "scriptpubkey": "76a9142134dc390dbdbe1686ce1dfe73e03c150b88bb4f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914eb809c8f114e470219e3425acbc66db5cdf71c7987", + "value": 547 + }, + { + "scriptpubkey": "a914a6fff2fc08b657b4aff459a910c07088642c445887", + "value": 547 + }, + { + "scriptpubkey": "76a914848d5348ad4abb53aeceb1889326ea691f6ad99088ac", + "value": 547 + }, + { + "scriptpubkey": "a9146f4ef58823fc00d69dac01d5b964bdf1fffb118587", + "value": 547 + }, + { + "scriptpubkey": "76a914b770801054818fb88b126d6ce2d12b4b1a788b0f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91413599514a6b7c728d57f5c8cff51f6ff971ef90688ac", + "value": 547 + }, + { + "scriptpubkey": "a91494b57edf974a36ce5894088a79d91b9170a1d9e587", + "value": 547 + }, + { + "scriptpubkey": "76a914577d326af9d17f8803501e6daa33a483eb6efdb588ac", + "value": 547 + }, + { + "scriptpubkey": "a9144a7862252ad5abc097c3758988ccf1dac07e154587", + "value": 547 + }, + { + "scriptpubkey": "76a914e5a3fc2cd8b4ebc8cbd1d6100eeb100399cc01b988ac", + "value": 547 + }, + { + "scriptpubkey": "a914a3b8f4f16e8e3239c32d99aa2d29d365d4de0e9187", + "value": 547 + }, + { + "scriptpubkey": "76a91445a2f2557b1881aa43abe55021bdae472e739c9688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b172ce176c72ff41324cf773a811cbb8b63c8f4388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b77e68177d0fef51df52370af08f530cc8e149ec88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cde6fa90cfb3168082eee9a1f95c4a53d265458988ac", + "value": 547 + }, + { + "scriptpubkey": "76a91411f519dbdb8229bd8492d6ebafd19c1ae64c293e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144c72cdf3ebb66afe63f84d13b03bdb551f02e4c788ac", + "value": 547 + }, + { + "scriptpubkey": "a9146092a22788c79334f54b992188eb228b15f3515187", + "value": 547 + }, + { + "scriptpubkey": "76a9148d0331484de0aea32b2c5b6a0c8008b032adc7a188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d242a7cda498ae85e63ca0f93a34361df139680b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149dc7e095a01b123d1c99d8509243e51019dbf83388ac", + "value": 547 + }, + { + "scriptpubkey": "a914b93a83566618dbab54072aecb2146e0a3a23a51587", + "value": 547 + }, + { + "scriptpubkey": "76a914433f265f0805da0ed693fa7a8a0eb7e17481c5d688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91469cb35a4cd013f5b39dbc0756387a958d2e4611688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914164e4ad47e82e9c64d267740b1d8b19538a66dfb88ac", + "value": 547 + }, + { + "scriptpubkey": "0014c5bc4243749da6b6fadc232951c20f47bb9d0ba6", + "value": 547 + }, + { + "scriptpubkey": "76a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac", + "value": 547 + }, + { + "scriptpubkey": "a914e93d893ee8cba909026f99ef526adc721dfe6f1387", + "value": 547 + }, + { + "scriptpubkey": "a9147053557a392ccd2aa9d70874b00bd4ff35bb1be387", + "value": 547 + }, + { + "scriptpubkey": "76a914f677b6b832e0cb14bcf4da3852c76ef5e7d0a40588ac", + "value": 547 + }, + { + "scriptpubkey": "a91499bf9a21b39b4ae4ea75e0e65a396cc70d0abbeb87", + "value": 547 + }, + { + "scriptpubkey": "76a9146bd6545185c83e9ae7f4c5227c7a9afa34d3a41b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143977ad02e704f0c862b7dfa8349531fe5a563cc588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac", + "value": 547 + }, + { + "scriptpubkey": "76a91445110199352e60642095c72529405ca82803ee4588ac", + "value": 547 + }, + { + "scriptpubkey": "a914f6117e5bbef084bbcb261814bc3fdcccd83378e787", + "value": 547 + }, + { + "scriptpubkey": "a914787de31db40ea280da8d2766d74855d8b218b92f87", + "value": 547 + }, + { + "scriptpubkey": "76a914903c44cf021aaf16be037ff9fc97f06e5aee184188ac", + "value": 547 + }, + { + "scriptpubkey": "a914dc386f2e5ea9e9b0b3e02e174dc0c8152e54916987", + "value": 547 + }, + { + "scriptpubkey": "a914715dd7f5682b30a9a87736427b277fbfcfeb696b87", + "value": 547 + }, + { + "scriptpubkey": "a91433537888983cf93c65c6646a6331e55da5e9223087", + "value": 547 + }, + { + "scriptpubkey": "a91440099fe5ad396a7369c38c268616dbf98380fbbe87", + "value": 547 + }, + { + "scriptpubkey": "a91447c171df591d452c793bf22f76386ccbd556943187", + "value": 547 + }, + { + "scriptpubkey": "76a914e30d1ccfb05a0ad883cdc4982620952e225ebf0688ac", + "value": 547 + }, + { + "scriptpubkey": "a91460d9962367d98e5a11e7eeb522b1fc74750edcee87", + "value": 547 + }, + { + "scriptpubkey": "a91426856425267689b98f2fe376a8b83c5c41ac91be87", + "value": 547 + }, + { + "scriptpubkey": "76a914fc29603ed407951b9661a2a5493a3ba513c9022f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d0a33dce453f1d49282abc07219d8cd6791ded6588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140791f1f6600311c3043e4e247050833567bc2cdd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac", + "value": 547 + }, + { + "scriptpubkey": "a914632f6b718f50f1b5a2696d95f4f0782e10320c0387", + "value": 547 + }, + { + "scriptpubkey": "a914488eeb134c35f8ad7c88d649edc1d5ce3108484087", + "value": 547 + }, + { + "scriptpubkey": "a9147d0c3bc2eed630bbabeefff1173186a7b9ad95c087", + "value": 547 + }, + { + "scriptpubkey": "76a914656d55d286d2a59f57a70a1bc57a22edcffc967688ac", + "value": 547 + }, + { + "scriptpubkey": "a9149c3b1585c6d16360e44676ca0acdd6ee01d5eddb87", + "value": 547 + }, + { + "scriptpubkey": "0014005411d7233a8a125418e61d6c8c928b708b33f4", + "value": 600923 + } + ], + "size": 14090, + "weight": 56033, + "sigops": 889, + "fee": 504324, + "status": { + "confirmed": true, + "block_height": 646789, + "block_hash": "0000000000000000000095b7bce82d0d69abb7fcd077dc9b2bce4e0cb7ced0ff", + "block_time": 1599281769 + } + }, + { + "txid": "8eeacc40538b094b17f2e278dd53a2f6f68e7126ee81bff0ea3bec2fd9a42f66", + "version": 2, + "locktime": 642623, + "vin": [ + { + "txid": "c67344b7fc653d6eabb92fc35d53bad5b78d796a6490836fcccdc66a91dffd77", + "vout": 471, + "prevout": { + "scriptpubkey": "0014701db7691dffa2631a259f93c546ec12a562c8ba", + "value": 1673915 + }, + "scriptsig": "", + "witness": [ + "304402201b6d4d5a9a2b93c63807d0b3bad806786596828517f6edee8a2ff060e932b7ff022019903a46c1aabde2f6595591f13cbb0b5ce7bc3ce1c9c6a399e4c3c9169257d601", + "0394153b1dfd6e4277ba146841db452e1a687269fc162433fb087742c61ab822af" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a91403b7892656a4c3df81b2f3e974f8e5ed2dc78dee88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914075b7dfca1465daa6f51b8497af83c10042ef39988ac", + "value": 547 + }, + { + "scriptpubkey": "76a91408d2de7257e4f777653b939c6bcb7401aeabf1ff88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91404d9d15e67e6f20551992e03039711e59281f72888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91406f61b94f0e562e41e7137a8b0aa78db6102925788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91409cc4cb806f792fe235c1b8149c0267b12067c9788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140a9598557e4075d6543a51a33a6a84d6945b6a8e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914c8aac33fa02f6ce31b189f84cffdd94b629a994387", + "value": 547 + }, + { + "scriptpubkey": "a914bc271363437ebdeb214ec115f88363eb2365c66a87", + "value": 547 + }, + { + "scriptpubkey": "76a914c14a9ef3c372eaac5a6110b48522a04c61f1054088ac", + "value": 547 + }, + { + "scriptpubkey": "001467730e8d9efbbe6306dc481f67fbe71f95e36793", + "value": 547 + }, + { + "scriptpubkey": "76a9142210aa314ca4e1f4c5f615eb0ecba150e571765888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91466f369d83ae39366c08733f32cd2bde5f2eaebe388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c5b9b22336d6d8d64af50d9b951fd9026b624bd588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d99e0bc516631d93cd42ec5047fadb98c34fcf3388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a8dc2c8d167cbacb63db6c8080794b612248e76288ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144544d4a8bb281f6343f6ae7c4494d1213eea539888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91494663df695c07ca33b453bab9320776b2c8d894a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914654e15dd3d72c91ecf696d375404ab8b10e9819488ac", + "value": 547 + }, + { + "scriptpubkey": "76a91406ae5abdecef3cf94d9ff03e162126e9cf76009e88ac", + "value": 547 + }, + { + "scriptpubkey": "a91449c3f9a40d5ff5bbcf5b5a7e4003d8630f5c1b5587", + "value": 547 + }, + { + "scriptpubkey": "76a914fd59f4e0839d4498a4c29e474035a0218b27df0288ac", + "value": 547 + }, + { + "scriptpubkey": "a914ef99b01bbd57532d46e29fbe16b53c0ab180a04287", + "value": 547 + }, + { + "scriptpubkey": "00145ba7e1fc2123dc0cfd679a603258820c82caf46e", + "value": 547 + }, + { + "scriptpubkey": "76a914c810dbe2558e83509afd6e9a9d0f43f495bcc9b188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149e63d0e87134f67a72cbb25d926d718ff65bfddb88ac", + "value": 547 + }, + { + "scriptpubkey": "a914aad38c08b3fb8c6497855458053d86286612579887", + "value": 547 + }, + { + "scriptpubkey": "a914961d1208c7e7962948e4add21c36f6f76fc7545b87", + "value": 547 + }, + { + "scriptpubkey": "76a914d4a8831deb1487a5dda5d822b7967a4be0376bf888ac", + "value": 547 + }, + { + "scriptpubkey": "a9147b722453ecd8720dbd2426532f9b92bad3b2203487", + "value": 547 + }, + { + "scriptpubkey": "a914d895f3d9283b6e2009889a586ee7561ff47ca26e87", + "value": 547 + }, + { + "scriptpubkey": "a9149ed314ccda5f026fdda3090ceb8250d3633bf80187", + "value": 547 + }, + { + "scriptpubkey": "76a914eeb9bfae6970996e886bfa5d129a551c724baac888ac", + "value": 547 + }, + { + "scriptpubkey": "a91409f6552c125f95ab66845f29fc487d2e5c493dc187", + "value": 547 + }, + { + "scriptpubkey": "76a91435d31f84c9b0029d849c77e4de53439667a856d888ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146733fa09b089197b520faee941693a593dd808d188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146fbd758b9303220db76edfc69102a06f07546caa88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914780073621cc467a9bc2f377649d2a8d21681219788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142a7d0596a763aedb4b203c14ed8beeecf72eaf3788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b0d2e93bf8f240555d0bf6af3206a1826a43815f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f8ea45dfa8c4635b6aaa26383fe8c2ab463566db88ac", + "value": 547 + }, + { + "scriptpubkey": "a9141777603fc9ee07e1639b37a845a137c0122d8cae87", + "value": 547 + }, + { + "scriptpubkey": "76a91403a6c5052abc1f593f98d5d4a7a41409ec8cb63288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914fdaa114fe15a26c90018ae004e115ac5e8595c3e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914c9d287a3c3c4cbe914ac00728593c31b94707ad087", + "value": 547 + }, + { + "scriptpubkey": "76a91432e9d486f238fefdb91bfd0efdc91dd76a4c9b7f88ac", + "value": 547 + }, + { + "scriptpubkey": "a914b794c610fe2a25e47fb947a98ca219db2544601087", + "value": 547 + }, + { + "scriptpubkey": "76a914f32a622f13d9144a8cd240b557c12948310b217588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f0c8a73d7879df9cc691441c2f51257e0d1cb09388ac", + "value": 547 + }, + { + "scriptpubkey": "a914021b3723c6306502c0e5567c62093371dd92bcb887", + "value": 547 + }, + { + "scriptpubkey": "76a914a8d4983ddb4aeccc1ee0a868d8a91247ada901ea88ac", + "value": 547 + }, + { + "scriptpubkey": "001420b48eb0241d3a23b1685848d50942a5e18c54c9", + "value": 547 + }, + { + "scriptpubkey": "76a9143de5097d8b4ec74dd13a533993dfa6645e19878288ac", + "value": 547 + }, + { + "scriptpubkey": "76a91448abd76e1e05850d022aa983f0cee649db65fd9988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143137dee234aa07a80eb80674a9e47f6a29fb897988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149a1baceff12e8eace4e0c6ee48f591a05c939a4688ac", + "value": 547 + }, + { + "scriptpubkey": "0014750eeed48747c3a599f165d93bfb63859ff7a13e", + "value": 547 + }, + { + "scriptpubkey": "0014227cc0682276b286c28752e20a9e1ba518b08fba", + "value": 547 + }, + { + "scriptpubkey": "76a9148c02311bee1ffd987ead2b2ddf7bcfaf1126d7f088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b4328a68b970088a5a810a2739ec45100a58931988ac", + "value": 547 + }, + { + "scriptpubkey": "0014b02883a8c50dfb8714fc8700833af5eb82e6af29", + "value": 547 + }, + { + "scriptpubkey": "76a914d1a1b01257b8c3025ca8a6374513b1fc692bafdb88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91473c4493b05dcfa8147641cc05b71f8321610dcca88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914af182b20e495a2e1b8a041ce1a14ed7b33d877e488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914eba4a834c3a334e7d1e2fb40b3efbb2192be23a488ac", + "value": 547 + }, + { + "scriptpubkey": "a91469f377316b8ce9058bf10a39a8c72b69cfef482287", + "value": 547 + }, + { + "scriptpubkey": "a914fa22d16ff1fb8fef3a625a49688f92764988a20787", + "value": 547 + }, + { + "scriptpubkey": "76a9144135ca337c6b83fd20083fe6b678172d3b8e12d088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146eddbffac833e751740145e8b27b2b6bdfe3670a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914651840a7fd07379d035f9bbefa8fdcb79703ab1d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914637e4725f8fd24ca44b38cbd8e38581ae37470e588ac", + "value": 547 + }, + { + "scriptpubkey": "a914feb95d38b02d2ba34ee6528a597bbcb4be425ea887", + "value": 547 + }, + { + "scriptpubkey": "76a91459ddc146a69bba84368ca34083da1179ea5f296288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c080e9c542e8c104128da4cd86ba5e71710d96ab88ac", + "value": 547 + }, + { + "scriptpubkey": "a91456807aff9268b6a5ab82e4b8c4eb4b87b0d3ed4187", + "value": 547 + }, + { + "scriptpubkey": "76a9147cef5da9e49552b2c56073c859a4974e2823292388ac", + "value": 547 + }, + { + "scriptpubkey": "76a91433ef0a1835676b42ce72cd56d30ca6df0e20662b88ac", + "value": 547 + }, + { + "scriptpubkey": "a91449243c31e8c73ca3033f5ce995e313be6c82b63087", + "value": 547 + }, + { + "scriptpubkey": "76a914da8af24b7c75a65f0d69b64cbac32ac38c292dd788ac", + "value": 547 + }, + { + "scriptpubkey": "a914373e9e2ccc4531e0abe8a08e0cb5f3edb843649687", + "value": 547 + }, + { + "scriptpubkey": "a91472883a3d6ba033b9dfe0094324f129e70912739087", + "value": 547 + }, + { + "scriptpubkey": "76a914a10c673f0f157d701791af288b2f4be83540dd8688ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144f710ce31b85abaa47d5d064a85d843547680c3c88ac", + "value": 547 + }, + { + "scriptpubkey": "a914c02335212dd81ccbbcf798ecdda74531060f249787", + "value": 547 + }, + { + "scriptpubkey": "76a9148759f5967f73bbd7e3911356199d03d18dfe84a288ac", + "value": 547 + }, + { + "scriptpubkey": "0014a1cbe54b289c77e0de14d49db1cab7df4be89993", + "value": 547 + }, + { + "scriptpubkey": "a91469f373acc624791586a0a5e25bf56e7601b04bec87", + "value": 547 + }, + { + "scriptpubkey": "00141e3253c0e5da89493d25c239905fe221fdd50047", + "value": 547 + }, + { + "scriptpubkey": "a91491fdf28fcb2cd7538ed23dfc6b56581c192f61bb87", + "value": 547 + }, + { + "scriptpubkey": "a91410416ff841f8b1444b4c9d646c4571e45a6834bf87", + "value": 547 + }, + { + "scriptpubkey": "76a91424744a5ccdc2d1e73aa1fa5a96482fc96a9cdf8f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a51d1af712c255331b6cc900458d6cb74e4a14eb88ac", + "value": 547 + }, + { + "scriptpubkey": "0014b7e0e236b22fece167e7143fd4769a8373c15bc3", + "value": 547 + }, + { + "scriptpubkey": "a9143393c78de549a0d9dc77b91de4be75ee518ffc5c87", + "value": 547 + }, + { + "scriptpubkey": "76a91475cc58509c6571c76808661acd803dac8a5ea86988ac", + "value": 547 + }, + { + "scriptpubkey": "76a91411db9f1bdec9fcb5f131082a197da32c64e0c6f788ac", + "value": 547 + }, + { + "scriptpubkey": "a9141f7387352f6eee7bf1eed04ed475903b5adb53dd87", + "value": 547 + }, + { + "scriptpubkey": "a91498af20e112cba7d9c8820ea7aafd3e35241be6f187", + "value": 547 + }, + { + "scriptpubkey": "76a914a66a364606b5e4e8f01a63c12021f58f5aa7c41688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91477ed13d6ea179f7758d06792402740a2f5e3feb288ac", + "value": 547 + }, + { + "scriptpubkey": "0014e030e90659c435a17396087829e4551df69a4cf7", + "value": 547 + }, + { + "scriptpubkey": "76a91472ac12ffc3a6d061ce04eaca84d6ef5ffcffce5d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91422e74f00407e8b7e0da50d89611e0a54f1f36e7388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148644841d30bc75f67799cf21d8d2858639fc465488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914340fe45273b18bfab6d7da1e3941c561188541a088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145de14b18f356127e5f0ec8ec5513a2e1ab11775488ac", + "value": 547 + }, + { + "scriptpubkey": "a914d5fc5d311447945fc2b5e68a813d3c33954a361b87", + "value": 547 + }, + { + "scriptpubkey": "a914ca0e0fdf70bac2e68d3a80b1b8182b9746e3835c87", + "value": 547 + }, + { + "scriptpubkey": "76a914f340f146a357e457ae42b5588244495e3a37a4e288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c2e95ab2e3f67ce183931fa42160466a3e26142688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91432f4ed9674c4f3f954a9116289c30dc3e755eb8288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914e2ca88056f5b0aac2a247c13e79d73550ddbdca488ac", + "value": 547 + }, + { + "scriptpubkey": "a914a199e7ea1d5747271d0df63616fd323068c4d46f87", + "value": 547 + }, + { + "scriptpubkey": "001416b117a1cdf687229c910ac70c32976d6bfa0727", + "value": 547 + }, + { + "scriptpubkey": "76a91483068bc8913bb8fdadff3c8c5904442af64deae688ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140791f1f6600311c3043e4e247050833567bc2cdd88ac", + "value": 547 + }, + { + "scriptpubkey": "a91438683707dd6125db12ecdc8213bfe0012c14df5f87", + "value": 547 + }, + { + "scriptpubkey": "a9149b7739de6dd1ea74eed27a21a5f171eae9abf13887", + "value": 547 + }, + { + "scriptpubkey": "a914d2df9739fd4304cc8cfbb6718c93919ddc4422ad87", + "value": 547 + }, + { + "scriptpubkey": "76a91467142b2311a80233182c37a064b807f8513b6ce288ac", + "value": 547 + }, + { + "scriptpubkey": "a91409dafbd77d1fe4440dcadd5a0d56a270e0bf064787", + "value": 547 + }, + { + "scriptpubkey": "76a9148745551198a5b5ac2b0a56baec75a85e265b779088ac", + "value": 547 + }, + { + "scriptpubkey": "001454b140b3d77be62283b655c3ff5351ed5ff06f13", + "value": 547 + }, + { + "scriptpubkey": "76a914e0be570f0909a4eedc8e82652c7f391038f00ccc88ac", + "value": 547 + }, + { + "scriptpubkey": "a9140b76253add4f0c02b02b541d0d825adcf7c8bc6787", + "value": 547 + }, + { + "scriptpubkey": "76a914e0da6065ebea41bdac9e86a8785ebfbb6835399e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91416c6dd3f32a4f70baea941fb4e04fbb25725d62588ac", + "value": 547 + }, + { + "scriptpubkey": "a914c0c02e07ec311c906a2d5bda65479fe4e0a65bae87", + "value": 547 + }, + { + "scriptpubkey": "76a9142b24e4d40a9230c4e40c952c6911dcd8163b75ef88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148804c852ecd6d026a6aa913c6ded1c8365fabba488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d0b7646157335f64985416908aed1b23b07d487e88ac", + "value": 547 + }, + { + "scriptpubkey": "a91481ee7b0d88f7a2e8268a6d7d8afca895a6bf90b787", + "value": 547 + }, + { + "scriptpubkey": "76a914ad1550576f4d298fe6631a1a14d2351a9d143d4588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146e50675bce4b62d6bdf99670b2b1536b8605f02488ac", + "value": 547 + }, + { + "scriptpubkey": "a9142559538fc021fc79ebb36d1e645e19d5fe765a4087", + "value": 547 + }, + { + "scriptpubkey": "a9148d8b0e4fbd0323048fb862b2f607cacee1cec83b87", + "value": 547 + }, + { + "scriptpubkey": "76a914fa89380979e2045d96f4f4e0f9bf0a42617f61d288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c2c493174000385e6b66b57c115363434f96ab7388ac", + "value": 547 + }, + { + "scriptpubkey": "a9146c1ca21ee61c804a598d589e810d5231faf726c887", + "value": 547 + }, + { + "scriptpubkey": "76a9146ca4bdea9b6a4cc760f42c09a05bcaf42ccda97b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a2316314f56f42784a7eddbf0c96a95fb0f30daf88ac", + "value": 547 + }, + { + "scriptpubkey": "a914036d1057bdef87b17f3cff827e350001a6438c5687", + "value": 547 + }, + { + "scriptpubkey": "76a9149c1ba4e2993e8d0b2ff180c205bbec3fb59fc9dd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91454615beae9e8040f9e0da7f4d1eeac1c16eb700688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d92ccc2e4f3d3890f3f0437a2931da4447b8cbcd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91492af8342d5ee6f6b0e61f9053c4b971707573ba088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914946ad998c6c5b4888ed345d99e25fa773d09f51b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914386bdba1c0eaab78c98503bb0e45ab93aee0fc3e87", + "value": 547 + }, + { + "scriptpubkey": "76a9146372816c3fbf94740eb84a40c57346681543f3f088ac", + "value": 547 + }, + { + "scriptpubkey": "a9147ea7bfd3b57161fa96a8626a0f84a2b2bc71d91c87", + "value": 547 + }, + { + "scriptpubkey": "76a914b127faef1471c75dd361aeeb3ed1b74a0c9b56ed88ac", + "value": 547 + }, + { + "scriptpubkey": "00141bfbba09650aabb7ec28a4397c5c5bf94e5cbe04", + "value": 547 + }, + { + "scriptpubkey": "76a91467b4b3ab6004169178a10d53ce094f1120a23f9788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91493817fc5a7544f050968561cce1dd65b6fcb612b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914d53c0e5febbe7b0d88e73e7f69a6e3b8530a032387", + "value": 547 + }, + { + "scriptpubkey": "001444b31738b3df687c3db164d4cffd5f52db363272", + "value": 547 + }, + { + "scriptpubkey": "a91449d8f82bf0d2048e9c672c669e999607b19e942a87", + "value": 547 + }, + { + "scriptpubkey": "76a914d65fb84e0e0e14f5e22ea49a1adfe24700a3168488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914dec3ac2bad60a475e21ae691b287de6598b7d86088ac", + "value": 547 + }, + { + "scriptpubkey": "001441ce2dd73cd2bc3eeca37544393c7a693e028fba", + "value": 547 + }, + { + "scriptpubkey": "76a914e5951b8fa2147d67c1dc6b02b7dcd284f643e70988ac", + "value": 547 + }, + { + "scriptpubkey": "a914396d4f0aa1db54a7906615579b70d837716b300887", + "value": 547 + }, + { + "scriptpubkey": "a91447bfc46613f91710e342d4d3cd2cb9fa8f85272387", + "value": 547 + }, + { + "scriptpubkey": "a9149c00d6ed78844271e5c1c41de7f5878f2fc3152187", + "value": 547 + }, + { + "scriptpubkey": "76a91476c59a68f0640273c713797559b5690b933dcf9d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914ede19fbba27388ad2507febed524dc200276b49488ac", + "value": 547 + }, + { + "scriptpubkey": "a914d99d22b81b499a98c4ddd70699f604fdd865393d87", + "value": 547 + }, + { + "scriptpubkey": "76a914ee159f28d77af56b281c0101b52646f860604edc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91487375c512452a9d8a41865c60f5b241fa3520cde88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bc1634aebaaec3d12e2731777b6829cef66c348f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147fc8916d76f37e65e4cca88212d6337a1fe5d69488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146bd32aa9d4559852697d2a6b0b0ca45eb970abc888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b701e04a6ec31329868965beaa8892a13a202afc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a6a3bc028bab7c7e16c1554d8efa3e3cdb60c91d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a5904cbc55efee0bdb4b7eae8af511ca02f8006188ac", + "value": 547 + }, + { + "scriptpubkey": "a914084b858cc62a1b6d1a75707fc53fc77187ecb5a387", + "value": 547 + }, + { + "scriptpubkey": "76a914a0d752e21b08c32c012c6bc378e99899ec2f6a7e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914909fe17221a59ac2b6a55353a810492ad40f090888ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140e460dadd09eba856d2ba0b65c7897ebe188bd4188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145034d1bdaabdf22372642c1134a9a083b0bd823c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143652f68deaf3b549833cd102d1dbf9b8f566a50d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914fb0b9cfd608c02f610834157c65733e9534c618488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145c94a3816ea37ed47cf3ae8af2bc6a9ec7438bdf88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91451d2345854530988a47cce352413df0c009d6dad88ac", + "value": 547 + }, + { + "scriptpubkey": "a914d36820f42405bece04291b2a153351026eb58de187", + "value": 547 + }, + { + "scriptpubkey": "76a91476559c1c07448e1708531c62c068d7ab12b36ae788ac", + "value": 547 + }, + { + "scriptpubkey": "a914a706476a6aa99faea67733b4fc0867e2d719cbf487", + "value": 547 + }, + { + "scriptpubkey": "76a914be8bdb5ee21c1c9bb932dc9f8600086bb6d884be88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144990266f703d7d678358f2522b120a3d3c415b4488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147722a4a4f25a86d9bf030b2428850fa2d7236fca88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141702f435f0985e2425f41ea14445513ba8d718b388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bb7b7071487858a7d74094277ab5f7c0317a458e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140610d77af7fa5d507238e1e2cedaa49b12bf31c788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142795ae9798caf4d1031e6da4cbb538b3704546d188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914262b8f010039d7fc20758521704419895d0f397788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145d73398d15aa2c73047092f373d2482acb14620a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149c1a5c20ebdc5ea3f1c569b1c41434b0338800b388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148256439aebacb3a2972f18edf2550c583f43ce3e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914cc5a684e8c05ed87418d7419775ffc3ae831b22987", + "value": 547 + }, + { + "scriptpubkey": "76a91467e883e47b6148850c46005edccd46885780b55188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146008c4526ca972d4bdd11a91088e16f545ca68be88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91418275e0f841720c1059f8297186b983eb986903188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140bbbcfb584a7840c2fa750b9b99b6f2bae6eab0e88ac", + "value": 547 + }, + { + "scriptpubkey": "a91498a000b947276d10099da60a8248c554c1a1554687", + "value": 547 + }, + { + "scriptpubkey": "76a914a68aa9ff2abb5ec82b72afb1c79531ff40f005d788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914f1ddb8fd5a07d17bb0933f02e845a4f01f07cef988ac", + "value": 547 + }, + { + "scriptpubkey": "a9146aa286d095c5697ecc0da66641ac416303036ddf87", + "value": 547 + }, + { + "scriptpubkey": "a914f7601fb07c209aca9b9c9c698024315b3bfdf9f987", + "value": 547 + }, + { + "scriptpubkey": "76a9143ea91d556619662f06d671a562479291cd97421088ac", + "value": 547 + }, + { + "scriptpubkey": "a914e78171ef985a53e28245c8e5bca1609ebb97c88b87", + "value": 547 + }, + { + "scriptpubkey": "a914857abc30a304ce491a8b825584a17115aed2280487", + "value": 547 + }, + { + "scriptpubkey": "76a914f9a853e9ebd7092e66682714fb760d4aa954cca388ac", + "value": 547 + }, + { + "scriptpubkey": "76a91493f19e10ec04376ffe0b2de59c029c387923910088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145757915f0eed40ee98b2705d45b4079be70a6f9988ac", + "value": 547 + }, + { + "scriptpubkey": "a914d08958185aaa168fb490076a3c88097149e86e8987", + "value": 547 + }, + { + "scriptpubkey": "76a9149ad10e1140bb2d6271c357d7e4d6174e56ddd3b188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b77e68177d0fef51df52370af08f530cc8e149ec88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914721fa96ce32dddbde6fa329f716a8d9505be94df88ac", + "value": 547 + }, + { + "scriptpubkey": "0014a1d8ba16696309d941189947043882ed459d38c8", + "value": 547 + }, + { + "scriptpubkey": "76a914818ae62c3af88e75f7272bc93e5d8df012ac2bc788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146fd501f0acb1bc3c1fae5fbd13d50c8ba2d3ee6188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142b8c528bd2ab6223647ab92a5813b129ec2fe00888ac", + "value": 547 + }, + { + "scriptpubkey": "a91489c82536a9a585676fd059576ef16d5ed003867d87", + "value": 547 + }, + { + "scriptpubkey": "76a91472cab65a9eb3a36100f9107bfd87c7a5fd9a496c88ac", + "value": 547 + }, + { + "scriptpubkey": "001476da0eec310dccaa9a72f1904f484e919906a19d", + "value": 547 + }, + { + "scriptpubkey": "76a91410b734814e7fe83e2e961386a957443dd76dd3e788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143674c2327146339dd0c6a18222704c059a2417b288ac", + "value": 547 + }, + { + "scriptpubkey": "76a91461f639d51c4a1d7922fca16c9b95a51b0cc1bb7f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140e0ed983b3662da774636c3f41d304a3df82a79b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91492fd964b4823834d4c510ab4d4ae4067b1fad67188ac", + "value": 547 + }, + { + "scriptpubkey": "0014f2260443f374fc114cad27c12a266658135e7ecb", + "value": 547 + }, + { + "scriptpubkey": "a914aeb44898588bbb2f2ef6c1c916717337c03bd61387", + "value": 547 + }, + { + "scriptpubkey": "a914d8c9a8e4641f21067e986c19a41952a11706595187", + "value": 547 + }, + { + "scriptpubkey": "76a9145815f199571342a34a5cc389c1637607bb7768e288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914973742d7d2e371c08540234d73008fabb99096ac88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144fce53c1025c69b18635c4f075adec3871d468cc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91443b736e4722b29f84220d6d9a570a720054b521988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144841c24ad4add41ddb2a0c4057624cfe08d8ad6788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147f2186949ea07a2d877f3c06670956a172be90b088ac", + "value": 547 + }, + { + "scriptpubkey": "76a91451896a34d6469db638daa2b233058f8193a96d9888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91496ff60176c985e73606efd1a1ff2640318b9271688ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a4dcf4437276aca54864b97e3105e4837858142888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914dce19c16837b09a94c17f55a069e05cd8a618c4688ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147ccd678bffd280b6db6cf03a8df00ced84d5481c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91402a6e5c01bbfc6d7638d9cfd7ced0fd8e7f3477b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144c388152d1d380947df48121d189709b43ea3d0188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914756a03cabf6aaa4018a69fba608fa8fa22219e0988ac", + "value": 547 + }, + { + "scriptpubkey": "00146c35ba0aa9587faac50925653e83ecda6a0c2ab3", + "value": 547 + }, + { + "scriptpubkey": "76a914ad75880397169c6f584050e7072b39fe2e0b88ff88ac", + "value": 547 + }, + { + "scriptpubkey": "a9149bfd4e1c623bb413a7e2c571aae916cea48976e087", + "value": 547 + }, + { + "scriptpubkey": "76a914f4493cb6185988579db19fe22e8d02afc8d9346588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914de9e71d81e32b0091806b868e77066e7cff9dc5988ac", + "value": 547 + }, + { + "scriptpubkey": "a914de43c4a3566606f966e1446638f29aff696099dc87", + "value": 547 + }, + { + "scriptpubkey": "76a914a07deca0ce388e6eac6a009b63022bb1164bf82d88ac", + "value": 547 + }, + { + "scriptpubkey": "a914e9e581032de79c4bd8815ca6c00107b03608b1ca87", + "value": 547 + }, + { + "scriptpubkey": "76a9148c541f4054c2bb42ee79889b8fc4ef12497caa3b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b847a94efc698a501714276454877bb14fe12d0888ac", + "value": 547 + }, + { + "scriptpubkey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "value": 547 + }, + { + "scriptpubkey": "0014ff278079bc27e733b8b52a2bf2dd54895ef52482", + "value": 547 + }, + { + "scriptpubkey": "a91481dc9fbbe39b908c0bb8a20e52c0c8c998982e9687", + "value": 547 + }, + { + "scriptpubkey": "a914fd40a63e0ae5329f49201744d02ebc414acac46f87", + "value": 547 + }, + { + "scriptpubkey": "a9142e73dedee0677e1aa22b6be06524c29dc228351f87", + "value": 547 + }, + { + "scriptpubkey": "76a9147c5fa1dd1ce47b1f44ef80cf0d2633cb3b5268a488ac", + "value": 547 + }, + { + "scriptpubkey": "a914c9fef5d20504b36e6159a5a2cc9d5174b0a04ba387", + "value": 547 + }, + { + "scriptpubkey": "a914f06b1a268ecaa505a03f784fe41522f02ca8dfb487", + "value": 547 + }, + { + "scriptpubkey": "76a914b1b6036f4e7dc5e5ec3676eb8efb59d37b01fc5088ac", + "value": 547 + }, + { + "scriptpubkey": "a91407648206ebb8827c8739156278df9ca8195c5a0187", + "value": 547 + }, + { + "scriptpubkey": "a9149e376fdaef5115912bde5946cba135875b6e0e6087", + "value": 547 + }, + { + "scriptpubkey": "a91470d92063e779fbf7237cbfa3a825428fc3f84bff87", + "value": 547 + }, + { + "scriptpubkey": "76a914f9e01035fbc3a949e6a42457e1da5a286dccb6cc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b2b07a9e02ed19b2177c31004045828c8cc9429588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c7dd7f4b6409ca7ca97f120bc4ee0f625716064d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142e67012f348dd86238f724e3e977e3cadc8d5db188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146a8524fc7da13ac68445135295204e55e3805ebd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b144f5d508ca1a1a3f46b9c3175b36c6804a6a3f88ac", + "value": 547 + }, + { + "scriptpubkey": "a914e9a3576847752d551b36e86f22801cc972c5a27e87", + "value": 547 + }, + { + "scriptpubkey": "76a914a2d7d860ef5e78fd3cf8c4485af4aea48460f65f88ac", + "value": 547 + }, + { + "scriptpubkey": "a914fbde6edab2f589fe6e45ea4eed0fe83cee8649d887", + "value": 547 + }, + { + "scriptpubkey": "76a914164bc186dcadcf594afe5489e5a3f35b9035b0dd88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146564d2a3b7c578216dd566e01b5891d41ae6bae388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cadd828fa7d7fd7f0bf013aa5104bd43da99d83188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d0c58d61ce4b06f2d2298e60fdff4183569c26e988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141c0aebde42959e95f6aef9865124b73f92577e9688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91429de092bff44eb7d86079c7865c4899bd451ecf788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146c3bb729eabb92faba374edf5ecbc30c9d579e4088ac", + "value": 547 + }, + { + "scriptpubkey": "a914ee517272c0ba64faca2546b903eecb87c5b9e5fc87", + "value": 547 + }, + { + "scriptpubkey": "a914d816942aaee719ba4dde28de6daa401ed4db5be087", + "value": 547 + }, + { + "scriptpubkey": "76a914752bdd6714f3d711b73d255384dd6adeac2a75a588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143f1f25c07c9889744d699bc14802f1d8c3bdaf3088ac", + "value": 547 + }, + { + "scriptpubkey": "a9141f0486663b1d0024d56c19706d5733d21b1beb5a87", + "value": 547 + }, + { + "scriptpubkey": "76a914fbd52c1615139a753086474889045a9eaf2e285188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142733d2807f33b1546fe2b83c6c2e8373672d51de88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149a07d7fe95272da9518be00bd0fa152c9e2aafe188ac", + "value": 547 + }, + { + "scriptpubkey": "76a914885be2340ea7cc0aa2f8646137d922142d26474a88ac", + "value": 547 + }, + { + "scriptpubkey": "a9149af56242d9752549e49833bef76a46600a3d2ff087", + "value": 547 + }, + { + "scriptpubkey": "76a914ddd53b280cace9c9028d15865f619f55959969b088ac", + "value": 547 + }, + { + "scriptpubkey": "a9141b0d610e72bf1694cce003dafe7b63281012eda187", + "value": 547 + }, + { + "scriptpubkey": "a9147bc81232b0bcbe7cd56e3300a53ffb89f45e157387", + "value": 547 + }, + { + "scriptpubkey": "76a914ff973115b31f3e85a5ccbe34935e84665735eed088ac", + "value": 547 + }, + { + "scriptpubkey": "a914dbe702194fb530650e620337c671deb060fa829187", + "value": 547 + }, + { + "scriptpubkey": "76a91429dc431a103f399b97266ad67e527d9afbb3a08b88ac", + "value": 547 + }, + { + "scriptpubkey": "0014002e8643dd7fb0cdf7358cbabc00275b5e4a65d2", + "value": 547 + }, + { + "scriptpubkey": "a914b75bd07f3d696fc1301840767b8e37a86d22a6d387", + "value": 547 + }, + { + "scriptpubkey": "a9145c1f207c27b7724c862f8fd8fe85c6628888b84987", + "value": 547 + }, + { + "scriptpubkey": "76a9144b96a74e22154962ebd9acda1ef795f62661a67c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147581082908e7ccf5f8e3ef5aaee49dfe652fb64d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914fb10809be31c1684637e12aa766d06e463cd515388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914705b139f7e9e32a13b546f247caf7b9cd63dc66488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914df91c8b4a7ea2a7f1ceb71801e9e6913326a72dc88ac", + "value": 547 + }, + { + "scriptpubkey": "a914265d0796d7dc4b9864bbbfe5fcd0890e2b70d87d87", + "value": 547 + }, + { + "scriptpubkey": "76a914153cc57eb84289ccab848ed15b40232a3b36fe9c88ac", + "value": 547 + }, + { + "scriptpubkey": "a91490f1565f95bdba9cdb19ef3b67cbd775d055d38387", + "value": 547 + }, + { + "scriptpubkey": "76a9145b2b81c5afeccbacf0c0a8b00410b770b75e169e88ac", + "value": 547 + }, + { + "scriptpubkey": "a91493adcda4f3ee2bdb35421dc817a6e1b28896c3fe87", + "value": 547 + }, + { + "scriptpubkey": "76a9140099bc2889ff177003aab6d482c1fe5568d2a7bc88ac", + "value": 547 + }, + { + "scriptpubkey": "a914bb9e272c4417c669edaefa7f85ba57cea13dd74687", + "value": 547 + }, + { + "scriptpubkey": "76a914e247c564074c1534590850d0ad2ce10129f51abe88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149dacc4c22583429fff9bb4aa8a172228d99e292f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149241b03d6e375279afc6af2d7acd029e2894ed8d88ac", + "value": 547 + }, + { + "scriptpubkey": "a91469862f82ef8f6fb2eed83b7982aa1e13ad29bb3987", + "value": 547 + }, + { + "scriptpubkey": "a91440d69dc50dff7b0c3ab1b69e5289b0518b0121e987", + "value": 547 + }, + { + "scriptpubkey": "a9149499327ef0a2083257a55414339d255dc59fe5a387", + "value": 547 + }, + { + "scriptpubkey": "76a9146554f11d672fb59f03389b4c70439a6431485fa188ac", + "value": 547 + }, + { + "scriptpubkey": "a9145de528995e33e42451f84c715c76d9a3bffedb0887", + "value": 547 + }, + { + "scriptpubkey": "a914276fa159a226a1b27330b6ad2bd4170d61a02f5787", + "value": 547 + }, + { + "scriptpubkey": "76a9143c11bb69bcbb79f5b579ee9d03cef3bce3a57ef988ac", + "value": 547 + }, + { + "scriptpubkey": "a91474882fc22c925b58fe642acc7c21625beca873a287", + "value": 547 + }, + { + "scriptpubkey": "a914a6f85ccdac81d8ab2595c031c9db7829df00d21b87", + "value": 547 + }, + { + "scriptpubkey": "76a914053dcc648e056f9c8c9716738dbe681abde859de88ac", + "value": 547 + }, + { + "scriptpubkey": "a91452a6fc85fef64752363b27f6b33cf27b67b6411487", + "value": 547 + }, + { + "scriptpubkey": "76a9149e38b6f1bbaf1252e0f9e7b4f8b01ef60dae124c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914703685db243bf911135f28c2a81349f9ce02103b88ac", + "value": 547 + }, + { + "scriptpubkey": "00140cb2dd3ec9c2afc51d1fb9184f4f60ed8b3aafe0", + "value": 547 + }, + { + "scriptpubkey": "76a91459b180bd012069ff1d1bf333e32da2525c854b4188ac", + "value": 547 + }, + { + "scriptpubkey": "a914162d4a6316f55960e3e1778685db543500c2719587", + "value": 547 + }, + { + "scriptpubkey": "76a91402aa7a605300f3561a1ffd52bf125075aee33ab388ac", + "value": 547 + }, + { + "scriptpubkey": "a914e0ebc1a0fbb7cf5a643045d4a0316da7446e005287", + "value": 547 + }, + { + "scriptpubkey": "76a914e85fb60102581e2ecba5b3efca3bc7b1b1c2543d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914fa88abda67a0db10b767c50ce9eda477e7b2219b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914e5bd5ee9f3f1193e7206b0e2ab6fd669ee5716ce88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ae03f937e3023d0e0ab4320237a35294c1e0c7c987", + "value": 547 + }, + { + "scriptpubkey": "76a9141373f18df0ed977ba4c7a48d1e881364f5d228d388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144bbf568e878edc4d01a8c6a5c324ff47ec7cc53588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d534f3ee9d11ea9559ad803702319463e24f77be88ac", + "value": 547 + }, + { + "scriptpubkey": "a9142369be34d365e5bcb03e6bd9a73a975e85db117587", + "value": 547 + }, + { + "scriptpubkey": "76a9148f22a67213ef2d7704a7d8e8f4f88ff3b3d4270788ac", + "value": 547 + }, + { + "scriptpubkey": "a91476e2f479fe48c0a7a93f5e56fb464a31320920b187", + "value": 547 + }, + { + "scriptpubkey": "76a91458cc51d1d59194d959fca752e65236e3c138a85288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b2531e08a49620448a5bbfc7e2d405518b74d55c88ac", + "value": 547 + }, + { + "scriptpubkey": "a9140048f425b4104fcc90976b349be4f853b264e70387", + "value": 547 + }, + { + "scriptpubkey": "76a914aa745d87bdda28946bfa3e97b01b334e9df7320088ac", + "value": 547 + }, + { + "scriptpubkey": "a914277827d3808234237df4f97c62ca0bdaaf90c49f87", + "value": 547 + }, + { + "scriptpubkey": "a9146d8a14c0934e6effe1d4213e7d5b1edcbe51f5a387", + "value": 547 + }, + { + "scriptpubkey": "76a914ce8f3c82f062ac2e546530cfc107378e5ac07e3f88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147f3b321496dcb0a59c09adc403cc9ab2088799a888ac", + "value": 547 + }, + { + "scriptpubkey": "001467d77e9766b1dfc8c84a99fb958ebf695d390b01", + "value": 547 + }, + { + "scriptpubkey": "a914618b8a2f5558753e7e2df5ef0b97bd689a963ede87", + "value": 547 + }, + { + "scriptpubkey": "76a9143f1a425ab596163ac164f67f2eb3876df16d269888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914000b7001028a72d8188a9fc2886c6c754c94d68788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91458c286df31d44de5a369eecae97f7f61d2ff85c288ac", + "value": 547 + }, + { + "scriptpubkey": "a9141d1adf938502c39c6e7ef4223184e2c0cbca2e5187", + "value": 547 + }, + { + "scriptpubkey": "76a9141ee8bc579e5731502dcd6cc626cc0981738eb6cc88ac", + "value": 547 + }, + { + "scriptpubkey": "a9143b757a786bd5a5ec69b6e822165fc59e32ac4a0087", + "value": 547 + }, + { + "scriptpubkey": "a9142e62a0d42d83ac5350c9b7c8ba95155359aa9c6f87", + "value": 547 + }, + { + "scriptpubkey": "a914a52eddb33c58c3368d0c348e0f1e6e9a6d6b16e587", + "value": 547 + }, + { + "scriptpubkey": "76a914b5a6140e6e7e2d164c28760ab4a770ec1bd8220288ac", + "value": 547 + }, + { + "scriptpubkey": "0014f541bbb231d9f086ef18bc7b739cf7afd7680878", + "value": 547 + }, + { + "scriptpubkey": "a914d272e2b1ebc47ff35179db3442eda0c23449ae0d87", + "value": 547 + }, + { + "scriptpubkey": "a914660b914c2671c9c93e759c7bea6e907a6f0710bb87", + "value": 547 + }, + { + "scriptpubkey": "76a914cd879a594a99d25cde4c54b3185e1b0c33d0621588ac", + "value": 547 + }, + { + "scriptpubkey": "76a91493023916bfb7f730c5e0367c24a450e9cbcb165188ac", + "value": 547 + }, + { + "scriptpubkey": "a9147093495280495ad1ae5461753929c0a349f37c3087", + "value": 547 + }, + { + "scriptpubkey": "a914e452286598805cc17f731a4374bddf2ff0a18b5787", + "value": 547 + }, + { + "scriptpubkey": "76a9148c9a1d5ebaeed34ed859457d575891537f77f87088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143faaf5c434eb1c9ce5cf5e3dd44a6d0dcbe3e08088ac", + "value": 547 + }, + { + "scriptpubkey": "a91477c98c448ed5f6dd7c76ceb88f2d900e1093db1487", + "value": 547 + }, + { + "scriptpubkey": "76a9147c3c53f3bba113f7437543a140ba714a78a8bd0488ac", + "value": 547 + }, + { + "scriptpubkey": "76a91436a392ceb11ffce13cc235fb450380bb2bd168ca88ac", + "value": 547 + }, + { + "scriptpubkey": "a9146c386cb916f05d3243de43d6315433658baf1fda87", + "value": 547 + }, + { + "scriptpubkey": "a9143e97c0c8881108f37c429486e3ad298db3382f1b87", + "value": 547 + }, + { + "scriptpubkey": "a91441ec75586c737fef2d803bf474cc53b52166813c87", + "value": 547 + }, + { + "scriptpubkey": "a91433cd3292f8b3598cff5a3210b7137c59d53a7b6087", + "value": 547 + }, + { + "scriptpubkey": "76a914dd91d9fa14cc760cf67f7c65c031d89d5a65c97588ac", + "value": 547 + }, + { + "scriptpubkey": "0014d03a54c6f4c9bbe37f5a29bef75b4b95f7a4906c", + "value": 547 + }, + { + "scriptpubkey": "a914729bfa42a28018849c028e8a7ad53653b77430c387", + "value": 547 + }, + { + "scriptpubkey": "76a914207db13b11d6bdb713950ff1bad130013219de7e88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140dd75502ac89aa23dd3d278b0ed4ff4d08f8995088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141825b6d879d8509f9c4e3d3393ebedfd96d6718888ac", + "value": 547 + }, + { + "scriptpubkey": "76a914648d037e4556e72dce498c2876e7a0cf768259d988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a081e8c2e3250373d2e8b8acbbfcaac8cbe2737188ac", + "value": 547 + }, + { + "scriptpubkey": "a914d2ea32126a227fa7d2b9d925f55871016a514afc87", + "value": 547 + }, + { + "scriptpubkey": "76a91493c0bbd6e9cd123da75e2198ac45a91557023f0588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142607246affdf371fb08369bf157ec56d1858dc0b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91499b8e94a802ebf22eb1163d10856c37f087ff56588ac", + "value": 547 + }, + { + "scriptpubkey": "00149852c66ca896ef584e7badf97851040be2a5493e", + "value": 547 + }, + { + "scriptpubkey": "a91495e76670d715ca5cf777bf4607030bb31a78a8db87", + "value": 547 + }, + { + "scriptpubkey": "76a914457870a7bdf47f73a63cfe1910262c22cc2a2c5a88ac", + "value": 547 + }, + { + "scriptpubkey": "a91436f363df99f2610734f1f25dba8a947fe2fa68bf87", + "value": 547 + }, + { + "scriptpubkey": "76a914a09e37ddc9a6ddb3f940cfedd0c3fe3c07776c3b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149fe6574ea91c1a2239b728a58f55b0615598aedd88ac", + "value": 547 + }, + { + "scriptpubkey": "a9140824ab69a339d663d1be5a104a27a97435fd47eb87", + "value": 547 + }, + { + "scriptpubkey": "76a9146665caf1003a1b0694d66488b7f9f0d35e3d012c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d4e485f3a1ed505667f59ce054146664f0bff81288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914761a2698f767b271c78e26f05a23c207455ac68788ac", + "value": 547 + }, + { + "scriptpubkey": "a9142657ca64849d95a6cbf2a53b272191e5c6284f3487", + "value": 547 + }, + { + "scriptpubkey": "76a9145715d2ed3f764eada6d330f3405f87590536e3dc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914afd8bf863c7c0405b20407da88753ec8c2c45be088ac", + "value": 547 + }, + { + "scriptpubkey": "a91437cd6538f735c909e9f5cf0435d9ba8ed935443787", + "value": 547 + }, + { + "scriptpubkey": "76a91486f589bc4ada04ad3296367e4bff8ea97fbc347e88ac", + "value": 547 + }, + { + "scriptpubkey": "a9144242de3aaf3478d28a6bd0f39947c1357e86c56887", + "value": 547 + }, + { + "scriptpubkey": "a914648fc1f56d6467326ee3e6172811dd159e4648e887", + "value": 547 + }, + { + "scriptpubkey": "76a914327c591bbb6637218dc794788cda039052199c2a88ac", + "value": 547 + }, + { + "scriptpubkey": "a914bb43ee6eb0111982aba625e51e2503da2cdc7aa587", + "value": 547 + }, + { + "scriptpubkey": "76a914a6920fbcd9ca80fa363fc8066967c336ff25294588ac", + "value": 547 + }, + { + "scriptpubkey": "a914fc59a9558c4afdb5f3083d4dd17cb3993079bed087", + "value": 547 + }, + { + "scriptpubkey": "76a914713b2b3ef6c0c07c29be88f5f2a4cdc950e7645988ac", + "value": 547 + }, + { + "scriptpubkey": "a91491f7211c41ef7c4d3ed98053d97ae74235ce75bf87", + "value": 547 + }, + { + "scriptpubkey": "0014b85829a0a7e05abf0421765676e2375dc4ec47ab", + "value": 547 + }, + { + "scriptpubkey": "76a91490fa797ea3942d5b11eee231fe8b98cb35ec5d0288ac", + "value": 547 + }, + { + "scriptpubkey": "76a91433fa5e26cb6f3f44c6a953a36000a03717045a8b88ac", + "value": 547 + }, + { + "scriptpubkey": "a914315ccb1387b1f02598b0cb5fef5de482c6c8972687", + "value": 547 + }, + { + "scriptpubkey": "76a9149dfc9951c5c9d27a015475a34661c0fecbe101d188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142dca4d6fe3b1b6ebd4964bf3c1d45d84ed6272db88ac", + "value": 547 + }, + { + "scriptpubkey": "a91414e2da34a37c70482aa83341a58fa949510984f287", + "value": 547 + }, + { + "scriptpubkey": "76a914591189a8eb80158bd6ff7a88abefa236f8d3dfc588ac", + "value": 547 + }, + { + "scriptpubkey": "a91433a863287d9973295d0692506ee180228122a1e187", + "value": 547 + }, + { + "scriptpubkey": "a9147e1b8541a10da11452702655e2043845f30bbe9287", + "value": 547 + }, + { + "scriptpubkey": "76a914e72a8e43dcea5949d7893ba51f47ebb088f95a6788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91481a8975e9c01706c5c486bbc01c04c84658566b188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146c45c6f9fc3aa62ffbbe486c51a41ba07ce7dceb88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914030a81ac6fe80c9e77133178d889cbfade00b7a788ac", + "value": 547 + }, + { + "scriptpubkey": "a9148f27950716a2db5846ac2a6f0c8e5bf711afb4f887", + "value": 547 + }, + { + "scriptpubkey": "a9148e5acaa945a6e720098b9afb80e35c094a285f4787", + "value": 547 + }, + { + "scriptpubkey": "76a9146ceb56035a323841ce5760060c43fa519847b41c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9145793b29e331322034d9c6227b08f73cbf5f05f4388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914976c91d993c793d471d45b52977a59c67d0c6cc488ac", + "value": 547 + }, + { + "scriptpubkey": "0014211f0505c7e88147632ba8afc9554e6caa86e5c5", + "value": 547 + }, + { + "scriptpubkey": "a9145482207ebb6ebbec4470dac743a00f454e7b6cfa87", + "value": 547 + }, + { + "scriptpubkey": "76a9148bd694b1924956301617c7c866f5cf5bcc722b0d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147ee8f22667d3684894fb772e63cd380934c14c8688ac", + "value": 547 + }, + { + "scriptpubkey": "76a91495d0bb9cd9b0aff3d13d65a9c8686ab5c9541bb588ac", + "value": 547 + }, + { + "scriptpubkey": "76a91436dc5c2b04579de951166c376237363aee6fb27888ac", + "value": 547 + }, + { + "scriptpubkey": "a9149f31fc9721bbda203a7f2f9ae99ce1b7b50d9ffd87", + "value": 547 + }, + { + "scriptpubkey": "00145732b3fa599afa8ac4a703256a7465be8433bcbe", + "value": 547 + }, + { + "scriptpubkey": "76a914b5107766d16ee9a571201218c76a4093138d522988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914023e61462c28ce44a8df3db3f5930d938404143088ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c17f35bd0170873a837937a7a51bd87a8ef8338588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142c0471d464ba270a92440375da5b857ee460548488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d0383fbddc65ca84f05d2c81e3a3b4b47d0e67c288ac", + "value": 547 + }, + { + "scriptpubkey": "001453757b608fca6ecf4b306722579ae151cb1659d2", + "value": 547 + }, + { + "scriptpubkey": "76a914eeceac4055a21d40c98d5c09b46f242e1b50f06188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140c4b802d18389dfcb1f72d2827ea8180a3312c5588ac", + "value": 547 + }, + { + "scriptpubkey": "00148eb9202daeb4cd0006b37fed70456a8af2e838c7", + "value": 547 + }, + { + "scriptpubkey": "76a914b7d380d421a5ab6c8d626590316a8889563869b388ac", + "value": 547 + }, + { + "scriptpubkey": "76a914153c3bacc9ac792f51146587358b77e33a4b984e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914309dd8951ab8c3fbc5e25cfe93ad4980e3d4ba6d87", + "value": 547 + }, + { + "scriptpubkey": "a914475605b1e254e08c82d47fa1d3cc6dded38719ac87", + "value": 547 + }, + { + "scriptpubkey": "76a9141f9704f074cd95122b05ff16093ae0fbde3d476888ac", + "value": 547 + }, + { + "scriptpubkey": "a9149018a5b6dd832a0d281625c59afcd6ce9a00128587", + "value": 547 + }, + { + "scriptpubkey": "a9147bc9c50e4652bac25767b44656ed9978ef8abe1c87", + "value": 547 + }, + { + "scriptpubkey": "a9141edac297d0420f94bdff46b619ddf92d767c90f187", + "value": 547 + }, + { + "scriptpubkey": "76a914d5141b0e3ed413b4bb6142802e7cea14c0b8d7b388ac", + "value": 547 + }, + { + "scriptpubkey": "0014db17bc0d91ebbe70633b8e25e9ac70ea959f1ee6", + "value": 547 + }, + { + "scriptpubkey": "76a914c0f69c25f3a7ac71098a48fcb7cd2f3336b346d488ac", + "value": 547 + }, + { + "scriptpubkey": "76a914cc13ad9c2e1bb5ec793efad97bfbfcb3e0360d5088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148b34f43bc901790bf0c9f5f4612c48e2b23a9cd388ac", + "value": 547 + }, + { + "scriptpubkey": "a91413c0283eb2946aa9948ecbcc89d6df3416750a9387", + "value": 547 + }, + { + "scriptpubkey": "a9146cdb86ce23ace51da2ec567b1ae789cecb2d7b1487", + "value": 547 + }, + { + "scriptpubkey": "76a91455adf0b0d83148aa6dc5bb26c5e16c0c8c09394088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148c939130b81f5e32c9669e8e894a500c0054e49488ac", + "value": 547 + }, + { + "scriptpubkey": "001489f03057eee1009500cfff99ba68df75f7b19aec", + "value": 547 + }, + { + "scriptpubkey": "76a914c201f40d2b14170b4972390917bf63e4c217281788ac", + "value": 547 + }, + { + "scriptpubkey": "001493d09f5d60459ca96734f23895988d213e06fb6e", + "value": 547 + }, + { + "scriptpubkey": "a914a80b2e429c4fa4805f6a099365202152e09f506687", + "value": 547 + }, + { + "scriptpubkey": "76a914272644d0e4aa055586f7990f8b977859564862e788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914db92484123e28ae891498f70dfb58cf9e0da266188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9149c447f8892ba7cdd4396d33f9fc6c301dfe7c82a88ac", + "value": 547 + }, + { + "scriptpubkey": "a9144610a8820ec66a3ef939d6643d5c492b82bb653087", + "value": 547 + }, + { + "scriptpubkey": "76a9141077c3e12439566b2a2f5d792714b23b5e48509d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914c7ddd308e2945909777c52f026bc21e77c3cf15688ac", + "value": 547 + }, + { + "scriptpubkey": "a914f55459a6381a8dc1712103c3a4486da0b8caa66f87", + "value": 547 + }, + { + "scriptpubkey": "00146b97559c97156a3bceed7baf70bf6df203a2ebd4", + "value": 547 + }, + { + "scriptpubkey": "76a914bf269b513d70ba383d82c90cbf93bd3e45b0356088ac", + "value": 547 + }, + { + "scriptpubkey": "76a91464c3e4ef5fb1793c89c1fc49f903be8e6c3770bc88ac", + "value": 547 + }, + { + "scriptpubkey": "a914ec7e628f30f65d8155c6c41b366e75112e1c0a1f87", + "value": 547 + }, + { + "scriptpubkey": "76a9148be50f47acaaf0d02e3bf6068f6af466e6ff957c88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d0591f9ec23aef2a79a4b3051b6f6c060f336b4188ac", + "value": 547 + }, + { + "scriptpubkey": "0014ec79516243cb65090a7be1615e6f7aaf75f8c416", + "value": 547 + }, + { + "scriptpubkey": "76a914663887dfc75093588ebc41b62909667307607d3888ac", + "value": 547 + }, + { + "scriptpubkey": "a91412041e70d69b8e624284c725efbd85f3fbab733987", + "value": 547 + }, + { + "scriptpubkey": "76a914a3508626c07fab8d6b1c8a5197cba14bc121c60288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d0c0abbd045671f82cc0f90e62a9becc6f0d0c5288ac", + "value": 547 + }, + { + "scriptpubkey": "76a91476cc17a4904384270743814e53b778a71164bd8788ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146ddd607d351a2e20abac7117e370bba743194ee288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d23252ed274bc676ff9b7e2679e2a02f5217fe5e88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f5afd35c5e849bbd5943d0137a0cf8293c6f084687", + "value": 547 + }, + { + "scriptpubkey": "a9146bee70d1f733e31f310facdd5fe8079f63e0995487", + "value": 547 + }, + { + "scriptpubkey": "a914403e2bd10fed6070e17b094537d25f3ca355c93b87", + "value": 547 + }, + { + "scriptpubkey": "76a9146f8c44f1de4ccfcb44f521bfd451ab112c540b6188ac", + "value": 547 + }, + { + "scriptpubkey": "00146b40c955be150c7c21d5efe13a147818faf7a4e7", + "value": 547 + }, + { + "scriptpubkey": "a9143b45ce557d2cc6825d4f675ec860711e8e7fde3a87", + "value": 547 + }, + { + "scriptpubkey": "76a91489bab57f467c529bfa569b84ddd87759a5eb562c88ac", + "value": 547 + }, + { + "scriptpubkey": "a9145671f83465b1b64a6f4e128d1c565572b1324ffb87", + "value": 547 + }, + { + "scriptpubkey": "76a914958eebec21aa621680905795b12ea0934c9c324288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914a34aa1735514e197d459f0e6004f6e5c6916725188ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147d4be9ad0d33f63097a0d131f908d9c4934dbd5a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147d426bd2619f9fbd3677a2c435241f6eef96f3a588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140bdf6b6fa7bb795115830714a161f3af34dd787588ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143ee592c9df0ad4d5182241ce6d2ddd01055e421688ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147d9b7721645c954c0f8d2f96637da98b036c317588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d77d596aa6f308b7a2b42fc688820872daaad9dc88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b92a5e9462abf113510a702bfa4f44d259284c2b88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147ffd2e735f57a185a772220d13e54ca07f666e1988ac", + "value": 547 + }, + { + "scriptpubkey": "76a914eba4df958553fc51bd800fab11a173808966b27788ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d63e073aff0045db0b803feda0744072aeaba8a088ac", + "value": 547 + }, + { + "scriptpubkey": "76a9142938c5c2fbccac4fccc90461761b6c3492846d5a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91452e150992a5486318374d52140f08addb383273d88ac", + "value": 547 + }, + { + "scriptpubkey": "a91478940516012f7c7e2b749ddcf3074dc064811b6887", + "value": 547 + }, + { + "scriptpubkey": "76a914b4206caa53ddeb89b0fdcb958dd87dd6ab2f8cb988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9143d7f1bfebbb0a839350fca6d3f784b6abd6f37de88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9147e1be4e1a1192ff3088344a3b3d9db61df154cf288ac", + "value": 547 + }, + { + "scriptpubkey": "76a914d7df75efcf9e692e4ceb12f38b3dc44161933c1788ac", + "value": 547 + }, + { + "scriptpubkey": "00148089dd4198593ccc344aced7c4a7e9319386f8ed", + "value": 547 + }, + { + "scriptpubkey": "76a91497651ab1842deb3dc36aab97b4c49475c9ae31cc88ac", + "value": 547 + }, + { + "scriptpubkey": "001457122d6fd1947e7940e99fda6e6d30d50a9f7c68", + "value": 547 + }, + { + "scriptpubkey": "76a9146594a32b676c6eb505454ab0289c0e6f7e51cbd388ac", + "value": 547 + }, + { + "scriptpubkey": "001477e75ae49d81759f69da59c6318aeab60dccba2a", + "value": 547 + }, + { + "scriptpubkey": "76a91414bfa51624d8c52b34831de3ccd22a317ea5bafe88ac", + "value": 547 + }, + { + "scriptpubkey": "0014f85af58459bf628b835d200d77fa59de886c59f5", + "value": 547 + }, + { + "scriptpubkey": "76a91451a9fbc3f50abcf855555c774a65f1d7e6fe582a88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9140586f8cb26cfbfc780d06d4000e2e89941a3ef0d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a91416dda94269d62aebac059079117839c73862d1ea88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914fe551bed25282a60f6e0b20be8ae4e9baa808b6988ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148c1b5869c0d1003901df76a969628c5fa011be2888ac", + "value": 547 + }, + { + "scriptpubkey": "a914a0cb10e963b02387e3145682e33359fbfca4e84c87", + "value": 547 + }, + { + "scriptpubkey": "a914634b89deace122bc1f42ab29c600a0728ec0f3cc87", + "value": 547 + }, + { + "scriptpubkey": "76a914e991a5d6ab6ca1f3c8cf6fd0b572d1ee2451018f88ac", + "value": 547 + }, + { + "scriptpubkey": "a9141412beba31fe7e8e6f3ac06a198c11d988c3cbaf87", + "value": 547 + }, + { + "scriptpubkey": "a914f68e6310630b77b5e4c76291ac1e0d60d227792287", + "value": 547 + }, + { + "scriptpubkey": "a91407406cb43ef2714c27f481e88554d10ed29f4a1a87", + "value": 547 + }, + { + "scriptpubkey": "0014c75347fdb3f0417cf6b4dbe1f0d0dd46c4ab3e70", + "value": 547 + }, + { + "scriptpubkey": "76a914e420f157882616a242ed9d917221721db748947d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a914b24df93c61ab527976ce87f890e2e0e2ecd316ee88ac", + "value": 547 + }, + { + "scriptpubkey": "a91465bad95bad69a2a44c5a89dd17404efa5291cdb687", + "value": 547 + }, + { + "scriptpubkey": "a914417e242b03e30bdd2ed9eab014c3ec19aab5455387", + "value": 547 + }, + { + "scriptpubkey": "a914cb7ed6403771abce6a6ad7edc0a4fd2c5670a7c187", + "value": 547 + }, + { + "scriptpubkey": "76a914a6beb7bff47cc3764e1c415d4f41153686c6679788ac", + "value": 547 + }, + { + "scriptpubkey": "76a91404b5ac8e58e2487fb07c8ec6874103602262c4d388ac", + "value": 547 + }, + { + "scriptpubkey": "a9144b424ba5ee5f60bcf97e2fa5ef6759bbc9b8e4f987", + "value": 547 + }, + { + "scriptpubkey": "76a9141c3d15a4efc740d4009aba39ab7f5c327000e4a088ac", + "value": 547 + }, + { + "scriptpubkey": "0014a95180410857995212815e459b2f671b18cd3774", + "value": 547 + }, + { + "scriptpubkey": "76a914f354d0e047d4165fe41df08d2a7e268a7a2c8f2d88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9141c37ecf6febefa65f5cf45a969a7e86ebfd5803f88ac", + "value": 547 + }, + { + "scriptpubkey": "a914f1bfb83bb216c250278d84bfcaf643c5e478275c87", + "value": 547 + }, + { + "scriptpubkey": "a91471433db63e45f0c49ce57220d5b15240d488228a87", + "value": 547 + }, + { + "scriptpubkey": "76a91444bee5c21f50d0b5d24f01509a983809e36be73c88ac", + "value": 547 + }, + { + "scriptpubkey": "a9141e26c10be52aa22c36b3fdbb26c0c6c8805734be87", + "value": 547 + }, + { + "scriptpubkey": "76a9141f6e82b1dcac4c70310a5b68d06a7e828b0f82bb88ac", + "value": 547 + }, + { + "scriptpubkey": "76a9146e49a3bd9ce84a75306f1dd1d6b38700ac97ff9588ac", + "value": 547 + }, + { + "scriptpubkey": "76a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac", + "value": 547 + }, + { + "scriptpubkey": "a914648ddc5e3f615f141fc5e38fc36858fe330ce65e87", + "value": 547 + }, + { + "scriptpubkey": "76a9142560668c9e3e98ba2be673e506c8191bd8d500ff88ac", + "value": 547 + }, + { + "scriptpubkey": "a9146b0a45e28e924257f5773fc66da089fba92ba5f987", + "value": 547 + }, + { + "scriptpubkey": "76a914130c14369048df4e18fdc019d0ff790808a0451b88ac", + "value": 547 + }, + { + "scriptpubkey": "a9143d2256747f54766efbca2f505a3349f0148e162a87", + "value": 547 + }, + { + "scriptpubkey": "a914a231b2f85a26988d105cc5c3cf1f875e2fb5bf1087", + "value": 547 + }, + { + "scriptpubkey": "a9143ddcbfdbc7b7ea27bbb8539df4f9d7ba19f986a287", + "value": 547 + }, + { + "scriptpubkey": "0014a8aa7d50d0cc3447a3d20499714df8edf1289e3f", + "value": 547 + }, + { + "scriptpubkey": "76a914dd2bb57e29cade87fd4c161cc1ab9b9ff8a37cd388ac", + "value": 547 + }, + { + "scriptpubkey": "76a9144c46868c4f8887a1ef3b69b02f35d0f337cf4e5488ac", + "value": 547 + }, + { + "scriptpubkey": "76a9148ba0ec85482ca6534e11832f312e0d63fe84a5a988ac", + "value": 547 + }, + { + "scriptpubkey": "76a91427ac5fe37286399e94b13594ef3b7eff1511f92788ac", + "value": 547 + }, + { + "scriptpubkey": "00146b10cb743f308daa45cd418989d98473a8e0c502", + "value": 655071 + } + ], + "size": 19161, + "weight": 76317, + "sigops": 1417, + "fee": 705960, + "status": { + "confirmed": true, + "block_height": 642635, + "block_hash": "0000000000000000000362f4c59614eefbb6170fd0b1f3065b4b893cd9972b4a", + "block_time": 1596807777 + } + }, + { + "txid": "8f716720ef9caf72149e262748e543df1fc2996cb5ae95d6cec2678dd06601ce", + "version": 2, + "locktime": 564766, + "vin": [ + { + "txid": "0eb62995ed559370e7de5221fa323f584035364e3caedb7efbc97a0dd8397dd7", + "vout": 0, + "prevout": { + "scriptpubkey": "a9142efc57c4cf9db70b8c0361749768bca8caa4742c87", + "value": 97554 + }, + "scriptsig": "1600148570015261851d49cbcd9743f5be3da635ecae68", + "witness": [ + "3044022031be4012f13081e3a6eba5ff79ab2fe3fb992ace477ef51539a05ed0e08eb98102202ca01897e7fb47be7f0f35adfcbd9d6a4a033d63810ec4817c3cf9663a80619801", + "03e8b8adf67f56a4cf469cd11586feedd3b3ad3d154934cb5c39af9bfe2a892c24" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac", + "value": 588 + }, + { + "scriptpubkey": "76a91411b366edfc0a8b66feebae5c2e25a7b6a5d1cf3188ac", + "value": 588 + }, + { + "scriptpubkey": "a914fe7a977a9a166a868821bb81da33168ff4a2b18887", + "value": 86224 + }, + { + "scriptpubkey": "76a91436896b2798eeec0fc03c95b52a357448ed0dfd4688ac", + "value": 588 + }, + { + "scriptpubkey": "76a91406fe62c3b8e781c9ea3d103573c602e188f19d1488ac", + "value": 588 + }, + { + "scriptpubkey": "76a914f73acad809960ebe012964383b184f5c94a3f3ba88ac", + "value": 588 + }, + { + "scriptpubkey": "76a914482bb0b8f14aa24e50f18d2527046e413bb315df88ac", + "value": 588 + }, + { + "scriptpubkey": "76a914877717568a7e1d716aa7c696f2db7a6b4b79ee5788ac", + "value": 588 + }, + { + "scriptpubkey": "76a9147e92e66adf3e096ab4eef4fe7a128e9c7ac339e488ac", + "value": 588 + }, + { + "scriptpubkey": "76a914bb7f084e57f4f250cab45f73c62841f83bf1d5f688ac", + "value": 588 + }, + { + "scriptpubkey": "76a914119b098e2e980a229e139a9ed01a469e518e6f2688ac", + "value": 588 + }, + { + "scriptpubkey": "76a914b3407d4b4d1fca87fb930abe3fa6c2baed6e6fd888ac", + "value": 588 + }, + { + "scriptpubkey": "76a914a3c78d275195f05766a9b497d7838b27bacac77588ac", + "value": 588 + }, + { + "scriptpubkey": "76a91435d31d1dbc974770d456df632a44656a89bae80888ac", + "value": 588 + }, + { + "scriptpubkey": "76a914c1c6cb1b7d3c5a3f1dbd79ebd80d29bc6145e2fc88ac", + "value": 588 + }, + { + "scriptpubkey": "76a914acbf9c3dea6f2ad29fad5dbc4da6cbc3d7d3643288ac", + "value": 588 + }, + { + "scriptpubkey": "76a9143a9759a48cd85654ae8e9e64359d3d8570e444a288ac", + "value": 588 + }, + { + "scriptpubkey": "76a9143f1f25c07c9889744d699bc14802f1d8c3bdaf3088ac", + "value": 588 + }, + { + "scriptpubkey": "76a914d49c6f116e0e500a9dde898f4d0c2885048953f388ac", + "value": 588 + } + ], + "size": 827, + "weight": 2981, + "sigops": 73, + "fee": 746, + "status": { + "confirmed": true, + "block_height": 564789, + "block_hash": "0000000000000000001a7d2ca8dbec097dee5c4faac737b28758d19710caed57", + "block_time": 1551213432 + } + } + ], + "/address/bc1q0ht9tyks4vh7p5p904t340cr9nvahy7u3re7zg": { + "address": "bc1q0ht9tyks4vh7p5p904t340cr9nvahy7u3re7zg", + "chain_stats": { + "funded_txo_count": 1, + "funded_txo_sum": 1036, + "spent_txo_count": 1, + "spent_txo_sum": 1036, + "tx_count": 2 + }, + "mempool_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + } + }, + "/address/bc1q0ht9tyks4vh7p5p904t340cr9nvahy7u3re7zg/txs": [ + { + "txid": "be09fa7749193def059b7fc7fb1668a749c37d2d8ed7a83748dffd725e0e8cb5", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "552a0b8652bffa19d943bd3a48c92358d14a5a91a30d71cd8621162fdfe487d8", + "vout": 0, + "prevout": { + "scriptpubkey": "00148764c872ae9f31c0463278b4d4386646cfca20da", + "value": 312 + }, + "scriptsig": "", + "witness": [ + "30440220558b1fe2f97b5dc1ef59f282eb971187f9a4a451848713b14caefbbf7fdf4e06022049636dfb5b7db2b41400e7daab5db038f672df2ed4eec2ccd3fd2c748bbc7a7c01", + "02e8ac3ea5c5d42c40b59b2e623c70beccf39fe6280cfb128862fc5678983ef306" + ], + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "de9d4188f07f4b91d880cead9408eeeb2b63b83fa79df8e76088b6de3e2cbf1d", + "vout": 0, + "prevout": { + "scriptpubkey": "00147dd65592d0ab2fe0d0257d571abf032cd9db93dc", + "value": 1036 + }, + "scriptsig": "", + "witness": [ + "304402203d705d894ae01af40393675c863cea271026167141397e0f359d94195f7b296902201647b6c1bca54bd59326b7e33bc3766565a5c62dca04a6e6487b551061664d3901", + "02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9" + ], + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "00148764c872ae9f31c0463278b4d4386646cfca20da", + "value": 322 + } + ], + "size": 339, + "weight": 708, + "sigops": 2, + "fee": 1026, + "status": { + "confirmed": true, + "block_height": 919640, + "block_hash": "00000000000000000001896836e34a2853e536a0d2325d2d985bd69fad777a78", + "block_time": 1760789577 + } + }, + { + "txid": "de9d4188f07f4b91d880cead9408eeeb2b63b83fa79df8e76088b6de3e2cbf1d", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "f0b9235b72680842b38b5eb0d4d7877b278a921c88841d1223afdd7920d97d84", + "vout": 1, + "prevout": { + "scriptpubkey": "76a914093490c10d24cf52f56cf077c0b198e14e8c587188ac", + "value": 7156 + }, + "scriptsig": "483045022100d2ebb001d830309647ea244276b052c8c1a0657f3bb96895db6a106d4e95e06302202bb5aeaaadd7e39727182cbe5a1796ee5a4cc253c5db646a82ab2ba87fad98ff012103de505f92ea1a7b9e6ebce499efe4bacc62dd56ca25129f10772d1c053f11dc95", + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "00147dd65592d0ab2fe0d0257d571abf032cd9db93dc", + "value": 1036 + }, + { + "scriptpubkey": "76a914978a303fe8e579a2175ec79bbd98dbd7cae51b3288ac", + "value": 5616 + } + ], + "size": 223, + "weight": 892, + "sigops": 4, + "fee": 504, + "status": { + "confirmed": true, + "block_height": 919640, + "block_hash": "00000000000000000001896836e34a2853e536a0d2325d2d985bd69fad777a78", + "block_time": 1760789577 + } + } + ], + "/address/3C1aVMk3dHci3rn6DjhZGK5j7cp9nAD4S9": { + "address": "3C1aVMk3dHci3rn6DjhZGK5j7cp9nAD4S9", + "chain_stats": { + "funded_txo_count": 1, + "funded_txo_sum": 34723873, + "spent_txo_count": 1, + "spent_txo_sum": 34723873, + "tx_count": 2 + }, + "mempool_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + } + }, + "/address/3C1aVMk3dHci3rn6DjhZGK5j7cp9nAD4S9/txs": [ + { + "txid": "8881ba5fd4ba272864c14e793ba78eba6568d7e98a83c362ceed6461450d4e1c", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "848f85d740537fb6d3f3a2571ba4de0104bec984a5f44abe40865e72a31c6207", + "vout": 1, + "prevout": { + "scriptpubkey": "a9147133edffe96b69b15af7dc0964fa5f736949244787", + "value": 34723873 + }, + "scriptsig": "00483045022100cf1879f6e5ec0967282bb82397f3fd957a34934d2abe738acd76c8f12f23d4ad022003593d1e78fd37fefaa6e3456025b0a0239126fa7e3077be8755ad42d4dd47c001473044022073b4953f00716a81b8da8ee9cb487db3690acf2df71bdefe048a7cba8b26cb1e02202f86d707c5413ada3e40ce032bd5449b9842ff88c2fef12b240e603e16c27240014c695221034f3c0a6de1d4e626013fb08fd6b3111429f49964643cdf559915452fdcb5ffda21032331def40791226bcbf9d23d22243ce80aa05eded9b80d85cccdedb08c6a96522102f27cef9353803c27807ac9e21cb12efacac2f7c32e8278a823dfd7a16839bbe853ae", + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "0014ff5ebf5473569f4d4b6607947af72a914c7a4397", + "value": 299097 + }, + { + "scriptpubkey": "00147d9f9d488622c9fdbcba42383c148739949244c3", + "value": 10000 + }, + { + "scriptpubkey": "0014cb9fc048f7ae8a31ee16cced26a519c2724e5c89", + "value": 1195124 + }, + { + "scriptpubkey": "001432c57f15253b7d4231a1bb81e74ca85446f2b8bf", + "value": 50000 + }, + { + "scriptpubkey": "0014cb9fc048f7ae8a31ee16cced26a519c2724e5c89", + "value": 1196305 + }, + { + "scriptpubkey": "00147753b9ae389b6f94f929beb1373641270308a7c0", + "value": 1000000 + }, + { + "scriptpubkey": "0014c4b4531621dfe330c50fda4d8820eda3135fda06", + "value": 7192212 + }, + { + "scriptpubkey": "a91496cd57c85f4fc27db6ace43dbd45f5d3e558352e87", + "value": 1760000 + }, + { + "scriptpubkey": "a914cccf172f747cec2a3c16bed28fbb9e996e014e3687", + "value": 10000 + }, + { + "scriptpubkey": "0020a18a1f1ea0d4ad2aba38753573b3321455a20d3ae557cb41083da534d828f7e8", + "value": 22004825 + } + ], + "size": 630, + "weight": 2520, + "sigops": 12, + "fee": 6310, + "status": { + "confirmed": true, + "block_height": 970971, + "block_hash": "00000000000000000000228b012a916bc4b627109b95ab2c60cbf0a29ab57dec", + "block_time": 1791744946 + } + }, + { + "txid": "848f85d740537fb6d3f3a2571ba4de0104bec984a5f44abe40865e72a31c6207", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "7b97a7cf74742e5eb749b3ef00a41020991b5eba50a576f721b52850d3bf26e4", + "vout": 8, + "prevout": { + "scriptpubkey": "0014a1c8de1f88a62648d0a3925f8f8158c463e9796f", + "value": 5677171251 + }, + "scriptsig": "", + "witness": [ + "3044022011e6867abb65745dc69b94a942d29345b792eb44d79d54ee6527b12de619b4890220582a462e298afa9293cd430a9a64307513ab1373a2d40c23b48c522d97d6674001", + "033e645db065d4922b58b5dae11058a4da91d930233477f80f84a131942af9aacf" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "00140f3948e591cf8f53ad5122c74751a9021355e311", + "value": 31092 + }, + { + "scriptpubkey": "a9147133edffe96b69b15af7dc0964fa5f736949244787", + "value": 34723873 + }, + { + "scriptpubkey": "76a914d68de31e47ff6d147a983209ffce04c59586967288ac", + "value": 1541248 + }, + { + "scriptpubkey": "76a914f2c9b94e9ea9527aadd7eaa8fdb88fedf5ef93f488ac", + "value": 115459 + }, + { + "scriptpubkey": "0014acf3c02353ad1d01eae69fa197df7f9906497269", + "value": 279732 + }, + { + "scriptpubkey": "001491973223a15925ae41dbc5690be968ffa70d1080", + "value": 420000 + }, + { + "scriptpubkey": "0014fe70c68ef1b98cf093e34a634b661fa8c646a43b", + "value": 64576 + }, + { + "scriptpubkey": "001498a3be774c3301a0164d1acb84bafd636e91c2df", + "value": 21573 + }, + { + "scriptpubkey": "00145b1d77df3248e5109fa9ce807d0d8bd9a564ddf6", + "value": 35105 + }, + { + "scriptpubkey": "0014476b5f4f6be44459731aa741862bf09ddfefb306", + "value": 92539 + }, + { + "scriptpubkey": "001488d54f8f2ff939d07b252892109671e81f9a9489", + "value": 32129 + }, + { + "scriptpubkey": "001420349006e1f767a5ddbf52ad2eed66a2f00b3704", + "value": 5639812551 + } + ], + "size": 539, + "weight": 1829, + "sigops": 9, + "fee": 1374, + "status": { + "confirmed": true, + "block_height": 970969, + "block_hash": "0000000000000000000024f94fb2d34e2dc165261c7c1bbd234e517f307caaa0", + "block_time": 1791743016 + } + } + ], + "/address/bc1qm38emw4p965sjhd5h7ktxggrhe034n9a2c4rcr5gkwynjuadfh2q9amddu": { + "address": "bc1qm38emw4p965sjhd5h7ktxggrhe034n9a2c4rcr5gkwynjuadfh2q9amddu", + "chain_stats": { + "funded_txo_count": 1, + "funded_txo_sum": 46414104, + "spent_txo_count": 1, + "spent_txo_sum": 46414104, + "tx_count": 2 + }, + "mempool_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + } + }, + "/address/bc1qm38emw4p965sjhd5h7ktxggrhe034n9a2c4rcr5gkwynjuadfh2q9amddu/txs": [ + { + "txid": "2e08a73b48527afde28ffe2a0d81d34ec4e850f23512342ce43e3815eac8f92a", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "6f0f72c1578193e541c049f6f6e130c2ef87330e01e77efa9b3870ab0a15492b", + "vout": 15, + "prevout": { + "scriptpubkey": "0020dc4f9dbaa12ea9095db4bfacb32103be5f1accbd562a3c0e88b3893973ad4dd4", + "value": 46414104 + }, + "scriptsig": "", + "witness": [ + "", + "304402205106fa21f07128c11596eb6b56a19d7f6838fb24471565caef560f15ccab0b4902207e012c26ab7aebd86d1edd20ecffb13d131faf76d83a33ef58c98d8fb4ccc90401", + "3044022069af855ad802055161c9de6b77519f38807c32f38240cf9c5a7f8604d19f437802204e1ae819853e595d09fce0e55cb6cf8dcffda145554b30841efe26b4a5ea08cd01", + "522103bc922d363d0c92915c491a54af3ea52c45d961af90ba23d89116792dc44b3d1d2102c39703874cdfedccb4dcb9213817704ae6af5b2b776cac04acad8fdb4e92db982102fe94ffa820b900a2214eddad6076b4e74c2a1a13fc16cca0db76cfb919fba4d353ae" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a9144d12e06925bcf36e1d5b645c78177a24e133e1b088ac", + "value": 4787 + }, + { + "scriptpubkey": "001404303096e2d6cd9ddc90c7b70ac0881ee84fc126", + "value": 5509 + }, + { + "scriptpubkey": "001468ff17dead0bf2a0faf472ccdd3a9346c2b59ffe", + "value": 5989 + }, + { + "scriptpubkey": "00146332abc07abfcdd5b526146ba0adcf925ff56db9", + "value": 13167 + }, + { + "scriptpubkey": "0014d8d06e785f240931f122d943859daca35ea314cf", + "value": 76476 + }, + { + "scriptpubkey": "76a91464c303183967cb42d47c308727b5248d3353669988ac", + "value": 598314 + }, + { + "scriptpubkey": "76a914cf9b078ec6affa179c44c98adb80f6618f75acfb88ac", + "value": 602593 + }, + { + "scriptpubkey": "76a914d57b3e74547fbfb311da35b513be74a7f7d261bf88ac", + "value": 603014 + }, + { + "scriptpubkey": "76a9147576471afdba023366b0ff125aad4efabc7ea86988ac", + "value": 604297 + }, + { + "scriptpubkey": "00206330731a76119d946fc96d2f8935445cf4517c42ea59453acb2c89f03f54dc3c", + "value": 43854658 + } + ], + "size": 642, + "weight": 1806, + "sigops": 23, + "fee": 45300, + "status": { + "confirmed": true, + "block_height": 970984, + "block_hash": "000000000000000000007e610e49cf1087a77eeece833ee16c7f68a90f5cc009", + "block_time": 1791753450 + } + }, + { + "txid": "6f0f72c1578193e541c049f6f6e130c2ef87330e01e77efa9b3870ab0a15492b", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "5f44b011a27c3550c79c82948dfc326d8f2478661bbb6bb6d95421da56e823ee", + "vout": 16, + "prevout": { + "scriptpubkey": "0020c9e4f07f356455132f94458c147633af792ccb413f50fc43e3fe423b6311f8bd", + "value": 55046844 + }, + "scriptsig": "", + "witness": [ + "", + "30450221009d74ade5ffb4bcdc3d5b69e4d41f590d8b41975dee71f21ed70fe51e9d07cd980220789e6f184cbd7a29da3e8b067efc8a12e5abd4c09cf81a753e1ba9128417ba8f01", + "304402204f0ec3382f0aede0b5a776042e62c90cb33c7d3cf67d0a37aff7161b1181943a0220126cc07eba86da3247d3db669b6362ac76b427e29f2051139d972086c66f10cf01", + "522102fb0febddfa52fe16a81a7a8e066eb0a6c1b417c8f1b606152041d0810b3721af2103cb8a0131925c6ea3150684db74d4ee12dd4dd2616753ddaa370c553411cd50572103fe6bb580bb3b75fa7cc1aa72294086713387b7aff249dfec3fed40c2898b599053ae" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "001404303096e2d6cd9ddc90c7b70ac0881ee84fc126", + "value": 3289 + }, + { + "scriptpubkey": "76a9147f052496f8dfb8e99d850f491c0903d86daa6cc288ac", + "value": 3881 + }, + { + "scriptpubkey": "0014a69504712d29656c44d032f8fa4097be0276c242", + "value": 6222 + }, + { + "scriptpubkey": "001496b2ff42bc6a56341e85aa24e2911c9d85fe3bae", + "value": 9407 + }, + { + "scriptpubkey": "76a914812b1ac0dad59ddee3bd468d9f8dc5974006997188ac", + "value": 12052 + }, + { + "scriptpubkey": "0014a69504712d29656c44d032f8fa4097be0276c242", + "value": 23919 + }, + { + "scriptpubkey": "a914e3ae3388c6e8de67fdceb05bfb48b9d9df37f30c87", + "value": 119587 + }, + { + "scriptpubkey": "76a914a95587ae49638161ae30dcdbe43f8dab7482868d88ac", + "value": 596619 + }, + { + "scriptpubkey": "76a9143e13d3b3593135de8e6104c09cf0b0ccec1d4e1888ac", + "value": 608762 + }, + { + "scriptpubkey": "76a914278ebf9cc4abf4181e864a5139853575030882f488ac", + "value": 1193081 + }, + { + "scriptpubkey": "76a91434bc4bbdd25c00823aa724884ac7876bcca57ae388ac", + "value": 1193681 + }, + { + "scriptpubkey": "a914c609c2c97ea66879306b8028b9a51cfa621ea87e87", + "value": 1195827 + }, + { + "scriptpubkey": "a914c609c2c97ea66879306b8028b9a51cfa621ea87e87", + "value": 1196186 + }, + { + "scriptpubkey": "76a914cb3a7ed1013cfc89b43f35cd070831a21a1cce4288ac", + "value": 1197414 + }, + { + "scriptpubkey": "76a9149441d20253d030bfd392043190af5c2116bb41d388ac", + "value": 1207713 + }, + { + "scriptpubkey": "0020dc4f9dbaa12ea9095db4bfacb32103be5f1accbd562a3c0e88b3893973ad4dd4", + "value": 46414104 + } + ], + "size": 841, + "weight": 2599, + "sigops": 35, + "fee": 65100, + "status": { + "confirmed": true, + "block_height": 970981, + "block_hash": "000000000000000000015998bd57fad12c669b1eaa17247500894c224f001b6e", + "block_time": 1791752288 + } + } + ], + "/address/bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0": { + "address": "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0", + "chain_stats": { + "funded_txo_count": 14, + "funded_txo_sum": 105034, + "spent_txo_count": 14, + "spent_txo_sum": 105034, + "tx_count": 18 + }, + "mempool_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + } + }, + "/address/bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0/txs": [ + { + "txid": "f0e7351b7829826057a984fde7c03d1c67e8235224c5e3791122a072d1e1a3ff", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "31b5d8a7f86d897ac9a1724a9ddf7e40eeb1a5558212ef4bc0f5bf6fff852364", + "vout": 54, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 7913 + }, + "scriptsig": "", + "witness": [ + "68c65598d3b686745bb06022048dd77e4fe4645b3b50e95547e791a4e525d830aaa96deca3c72722c9760ee5dc30194b6a4f7e3332a5e93e73c23500b62f7f86" + ], + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "00147af71c0620309cef5d78e399c38ec15dfb931cf5", + "value": 6793 + } + ], + "size": 150, + "weight": 396, + "sigops": 0, + "fee": 1120, + "status": { + "confirmed": true, + "block_height": 918525, + "block_hash": "00000000000000000000eb2af8b76e952b9da026c4dc74da66ba4891b19d3bee", + "block_time": 1760162755 + } + }, + { + "txid": "31b5d8a7f86d897ac9a1724a9ddf7e40eeb1a5558212ef4bc0f5bf6fff852364", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "e033a1b2cd6e12c9cb3746575aa59479b60c46cea76871863b3656b982d1f9ba", + "vout": 71, + "prevout": { + "scriptpubkey": "0014f50fe03cbc5af199c38ab024e1bd083347859ec5", + "value": 51657475 + }, + "scriptsig": "", + "witness": [ + "304402200cc5cd35f53427db43e32a6d230845aa64c902ef8b0bf517285f062071b610c302204062ba83d02d48189c96edb1e822435870d9dd63b1cff8890db542026c2fd30001", + "0230e7f82076a78f3992c63246a68092f5e5296021f269ee2c0ac323c55c2803ef" + ], + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "00141cbc60e86cab2a081adc671f59b94eb31e6f070a", + "value": 8883 + }, + { + "scriptpubkey": "a914afa5b92a3302b4eab69a23c6b83253239743f24687", + "value": 126384 + }, + { + "scriptpubkey": "76a914d3566785c7828c01c6f9188b71c78cd0a6597c0488ac", + "value": 17764 + }, + { + "scriptpubkey": "00144650d0200eef90052f5d79a93141831a534f7d78", + "value": 23723 + }, + { + "scriptpubkey": "00142cb2561ba91b3574312d2cef62fda0034f21707c", + "value": 40584359 + }, + { + "scriptpubkey": "001403b0b13dafff395bca8006fa4c71b37716a4c85b", + "value": 48877 + }, + { + "scriptpubkey": "0014fe6a74be5f1a833b0fc27cf01059db06b938b8a1", + "value": 46388 + }, + { + "scriptpubkey": "a91427091a3927fce90b9ac60ee9e74b32344f25bc8387", + "value": 20423 + }, + { + "scriptpubkey": "0020aa6f7d1906d1f43d7e7cac3cc2c1525de51cf6248684f9504f868ad6f3ce85c9", + "value": 22121 + }, + { + "scriptpubkey": "0014be8c3ea53dfda51e4755e6732a9104697ca8cef3", + "value": 39785 + }, + { + "scriptpubkey": "0020293ca48c2052b0bda98822db4ee52ecf9f37544f5ad40ee7e8857a5a34fe9b22", + "value": 888296 + }, + { + "scriptpubkey": "0014ba463c0c9610f063615ef5f7480ec4b5e70ffd84", + "value": 9435 + }, + { + "scriptpubkey": "76a914aeb41fa3f2c3623df037c61a858bee5cd027f59c88ac", + "value": 91902 + }, + { + "scriptpubkey": "00140a75e8d6998392f2320366f90f407a26c499f8e7", + "value": 13329 + }, + { + "scriptpubkey": "76a9140a50d6504b42118345f4089cdd8e3b6a30089e0e88ac", + "value": 356340 + }, + { + "scriptpubkey": "00148194950ab9982d909eabdefe0fa48ff2f7377ea5", + "value": 122114 + }, + { + "scriptpubkey": "0014ab33419155c65f3bc3f3d8d4e625d6a67782264f", + "value": 30488 + }, + { + "scriptpubkey": "0014b0365359fbe2b23717b839d31a791d83df350c42", + "value": 25873 + }, + { + "scriptpubkey": "0014090f274c874a51e7666a04be6970adc5c12c627f", + "value": 18228 + }, + { + "scriptpubkey": "001484ce1a2361ca42db2aa0c59a2820e6c18f85b707", + "value": 26678 + }, + { + "scriptpubkey": "0014affeda7c6df0cf3c777f04782c05bafcf05de3b8", + "value": 7737 + }, + { + "scriptpubkey": "00200297ede6d96ec92e27d6b723c7f0ea8e6ae4cacbb381445b2d73c78e7b6fa745", + "value": 48063 + }, + { + "scriptpubkey": "00141667c968b936f2299843a2e04323ca9e276a9677", + "value": 16150 + }, + { + "scriptpubkey": "0014072ef19e9e90ff659107ccf784021f83dbeef166", + "value": 26596 + }, + { + "scriptpubkey": "0014e32decd13b42150a2a41be025000a01a7f190a5f", + "value": 222052 + }, + { + "scriptpubkey": "a9145e60a07eef9c52790aac8d6f6f01b4ceccfab24987", + "value": 5473 + }, + { + "scriptpubkey": "00148c65e20b855db4679e154f08ed8753ecd71a94ea", + "value": 13831 + }, + { + "scriptpubkey": "001402b0b257c7c197179e878d9c9e2392634b61db08", + "value": 8976 + }, + { + "scriptpubkey": "0014ffd5263b30478103d3172679669a648d70a378f2", + "value": 82450 + }, + { + "scriptpubkey": "001471dce581d4923fb893238eaf0f8018bc5b5b9d9b", + "value": 83348 + }, + { + "scriptpubkey": "00148d13e55e39e8eb327063c7c629e79f7912838ce6", + "value": 18000 + }, + { + "scriptpubkey": "00141573cfda7341dc8439b2eaedfc6d44ae4cd36d17", + "value": 8885 + }, + { + "scriptpubkey": "0014d1d3f0ce70cc2272cc1464d631c73bca18f7ce55", + "value": 26583 + }, + { + "scriptpubkey": "76a914228d4b3982ab0175057f69ad4e3c756904c8b05a88ac", + "value": 169511 + }, + { + "scriptpubkey": "a9141f96c465c8c432fbe635235dc6bb56a158af921287", + "value": 35358 + }, + { + "scriptpubkey": "76a91480ba44e47b3405fac3d32caf51f3fe912ae7f2fd88ac", + "value": 47231 + }, + { + "scriptpubkey": "001442cf55355a3a39d529860b1cc3174b34831bd32e", + "value": 437849 + }, + { + "scriptpubkey": "00149510bc3f06410d0475241c6940332ef3266ef833", + "value": 14715 + }, + { + "scriptpubkey": "001401d1e633e17ec4da888b72c40c8f5b768001ce10", + "value": 204393 + }, + { + "scriptpubkey": "00149a5a425f53e7fe44f7bf160cd65c39e9202baf4f", + "value": 83260 + }, + { + "scriptpubkey": "001415a1ee110841296536df86b0ed7c156535ee13a1", + "value": 22199 + }, + { + "scriptpubkey": "00145c4ef985172dd2afb41350feb0fccda33ea1926d", + "value": 26585 + }, + { + "scriptpubkey": "0014773e0acb61df37f4d662276ca0ea5ac167c6d219", + "value": 30984 + }, + { + "scriptpubkey": "001452ce1fd844a052b5fdb05990f7bcd8011f318575", + "value": 13329 + }, + { + "scriptpubkey": "0014da07e7322eb6810a731e0185df6ebbf154070541", + "value": 26138 + }, + { + "scriptpubkey": "0014fa85f2994fc42bf0691ce09588ca2bef440a86b6", + "value": 194282 + }, + { + "scriptpubkey": "0014a88fbe1a3c9aa90645bdd21be839695003aeaf06", + "value": 26659 + }, + { + "scriptpubkey": "76a91459db1434640ed902cfee39048d3c6c9c800e8b7b88ac", + "value": 61335 + }, + { + "scriptpubkey": "00144e0b71509573e23433c5bd7c5b4555196aa02b8b", + "value": 72322 + }, + { + "scriptpubkey": "0014644322ac6c4d43ea042d33ea99cf846a1b20fc0e", + "value": 39774 + }, + { + "scriptpubkey": "0014b3ed24bc574ec4c10227baf06d0c2d5878a4e991", + "value": 39785 + }, + { + "scriptpubkey": "00142fcbc45e349be18497d0ae9f9b7dbcef0c60f8f1", + "value": 84782 + }, + { + "scriptpubkey": "76a9143c1efaa6158b7988c1a1a36385824172ed7f0aaf88ac", + "value": 5460 + }, + { + "scriptpubkey": "a9140b5b58111f34c6c1a22498d38099a92a5282e7f087", + "value": 12726 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 7913 + }, + { + "scriptpubkey": "0020b9ef205271969aa898073e742dbc2ed32656ba17c5753cf1c9dc2fa56363a72a", + "value": 1224563 + }, + { + "scriptpubkey": "00142776984a10ff2b6cc3d53bc88bca4a8d492919cd", + "value": 79971 + }, + { + "scriptpubkey": "00144a5b7ed87defdb56d3002779979747b01341ab66", + "value": 34512 + }, + { + "scriptpubkey": "0014046bed34eb8f28ae30824efc95abd67e62538bee", + "value": 13793 + }, + { + "scriptpubkey": "76a9142537ec3e649147bad382cee675a5bd053d44124288ac", + "value": 22170 + }, + { + "scriptpubkey": "001491fb5f6be64df745630a4896aee407a6f9ec4328", + "value": 13323 + }, + { + "scriptpubkey": "002009be3f4fbf08d5d952a76b43ddf0b860afff74df4b9c47409924e50bace3e655", + "value": 18662 + }, + { + "scriptpubkey": "0014b09a1a562904c8a665dc2a63c14c9e86fbbf718a", + "value": 257585 + }, + { + "scriptpubkey": "a9144fbe8a97ba06f40c6ceafc81df0167390385e24787", + "value": 177730 + }, + { + "scriptpubkey": "00146fb2128385b04740f2115d680df2540e336f30f3", + "value": 1715135 + }, + { + "scriptpubkey": "0014d1f267e98dac8ad7bba82199ebe8eea4361eb888", + "value": 28579 + }, + { + "scriptpubkey": "76a91478ed6463838ec1588f2047968a423e9ec8f3760588ac", + "value": 23000 + }, + { + "scriptpubkey": "0014166720c6d31b82403701988c3c6702b12ead1bc1", + "value": 707078 + }, + { + "scriptpubkey": "76a91409c003393f95731a15b40bc25f6674055ddd2ada88ac", + "value": 22216 + }, + { + "scriptpubkey": "00142f7805a1bc480580b89ef2b537a74c3499f08511", + "value": 115481 + }, + { + "scriptpubkey": "0014cd3d7d7626e5538cc8109a95718d9e8091a6fa42", + "value": 445191 + }, + { + "scriptpubkey": "0014606dfcafb086783e4e9a46438a5caf8fdd2f9c85", + "value": 24870 + }, + { + "scriptpubkey": "0014ef913ef2276388cdd2c9ef7f6c0a24a31368d77c", + "value": 39742 + }, + { + "scriptpubkey": "76a914ebef974634c4825e68439c5ec625ff3d492d293588ac", + "value": 1741296 + }, + { + "scriptpubkey": "001437dead37f3631928a144f70f2f3166e4d22e7b1f", + "value": 22192 + }, + { + "scriptpubkey": "00141ff9db176dae945bbb8b29d31667df0d748152e5", + "value": 87649 + }, + { + "scriptpubkey": "0014cc0c685325b271f08486bc43db4e1347d5630afd", + "value": 84323 + }, + { + "scriptpubkey": "76a9147c345faddf3132f4dd0d57d58816f978bd6f1a7e88ac", + "value": 9417 + } + ], + "size": 2692, + "weight": 10441, + "sigops": 49, + "fee": 2873, + "status": { + "confirmed": true, + "block_height": 918525, + "block_hash": "00000000000000000000eb2af8b76e952b9da026c4dc74da66ba4891b19d3bee", + "block_time": 1760162755 + } + }, + { + "txid": "e9a495cede58be0f353626ae2a9bbce99087acc004bd3ca38198f27be15d9db1", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "58232615ba7fe958f53664dd9577c04af727f0a8a956007d3f9619edeca2fb29", + "vout": 18, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 19000 + }, + "scriptsig": "", + "witness": [ + "43e090ff78645eca17a48162536b58689bd3c861a7f8a7de74d881fd17fc1e6f00822fb67c840acc4759d6dc3e2f20bd1487a19af954d3721f892fd1bdd66c93" + ], + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "00147af71c0620309cef5d78e399c38ec15dfb931cf5", + "value": 17432 + } + ], + "size": 150, + "weight": 396, + "sigops": 0, + "fee": 1568, + "status": { + "confirmed": true, + "block_height": 917305, + "block_hash": "00000000000000000000e2283167cf9aed2a93afb337e866d7d04acaa7784b94", + "block_time": 1759365617 + } + }, + { + "txid": "58232615ba7fe958f53664dd9577c04af727f0a8a956007d3f9619edeca2fb29", + "version": 1, + "locktime": 0, + "vin": [ + { + "txid": "96c9e59ed184f6078f8a33ba9f1fe1c6f4815f81099967a18a2239f86e7c1f1b", + "vout": 47, + "prevout": { + "scriptpubkey": "00146367212615852e7dd5605a83e1f0f51c1ada16cf", + "value": 55944849 + }, + "scriptsig": "", + "witness": [ + "30450221009ccd56abfc84a18d805f28ac40d233ec66766b312b409b4c51de22cfe1370ae4022021056ddeb548ed4d9a078021272f77db6e1c450e4cf754717272e8f2b52d854001", + "03cb0876c3d8fddf069dd590722daccebe19dd59e02a44a7ad72eff22fb14610bf" + ], + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "0014f0e8e9fe3624695e8844a4ca4071d46d780325f2", + "value": 37000 + }, + { + "scriptpubkey": "76a91451e204c2537e072234681a3033f49e4784d4908188ac", + "value": 73000 + }, + { + "scriptpubkey": "001480fed2e15cd09ecb174f0420f1940786d39f941a", + "value": 112000 + }, + { + "scriptpubkey": "0014f323c09f8a5701c86da7cfacc192a07798a777c0", + "value": 15000 + }, + { + "scriptpubkey": "001410b575598deb6a85aac1b3d9eaa79d1d62e16307", + "value": 67000 + }, + { + "scriptpubkey": "76a91470657510ed248e033de1a11740e8c6b7705168a988ac", + "value": 22000 + }, + { + "scriptpubkey": "76a914451bffca3f62fe9ef64d4d13e3d2c66f0f7080d788ac", + "value": 26000 + }, + { + "scriptpubkey": "a91414025f47fb8ba53e4d9495a590cc4513df16303387", + "value": 140000 + }, + { + "scriptpubkey": "0014e96371688bc5fb16932f08b07982a4011e27697e", + "value": 75000 + }, + { + "scriptpubkey": "00144303aa51d78a0aa7dc79835a2bd42958c8fbf2a8", + "value": 93000 + }, + { + "scriptpubkey": "76a9147b4e6341e66db693c02ba1f9b3ec988698b895d088ac", + "value": 34000 + }, + { + "scriptpubkey": "a91476cde79d0a0b7fc65fe5c96880fff695ab5359fd87", + "value": 43000 + }, + { + "scriptpubkey": "76a914d1bddc995a6245fdd7868f1cae48cf8fd4d7fca488ac", + "value": 22000 + }, + { + "scriptpubkey": "76a914ccdae2d56342d02ecaa8592c0b31f40d535e263788ac", + "value": 23000 + }, + { + "scriptpubkey": "76a9144078fec902a6e05f773dcde676d2e8b11abdf8dd88ac", + "value": 73000 + }, + { + "scriptpubkey": "76a91431d9dbb4281a064e0e5f01549943249047cab77d88ac", + "value": 103000 + }, + { + "scriptpubkey": "76a914f45e81a437b41505ae854f8330b8c8b131dde95088ac", + "value": 20000 + }, + { + "scriptpubkey": "0014534af803f73c03aea2bd251d2e83c3ea2ab220f5", + "value": 19000 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 19000 + }, + { + "scriptpubkey": "0014403970fa2ac0ae7494066dd596b4c3db1cb49645", + "value": 74000 + }, + { + "scriptpubkey": "0014546bd88cb6824790fb900b2ffa0c311a52461331", + "value": 20000 + }, + { + "scriptpubkey": "00142249f297e8f60f9ae7cf86d2720dd9472343806c", + "value": 364000 + }, + { + "scriptpubkey": "00143e2b6ced47e6ddf610a7ea309d5aa13851010ae2", + "value": 69000 + }, + { + "scriptpubkey": "76a914f45e81a437b41505ae854f8330b8c8b131dde95088ac", + "value": 204000 + }, + { + "scriptpubkey": "0014ac36fc72ed3f6c222a58d0668fe3e2c1adab9292", + "value": 371000 + }, + { + "scriptpubkey": "76a9147670314b938810016ea95976beba2a58e7c6966a88ac", + "value": 73000 + }, + { + "scriptpubkey": "76a91402b760ff3b838e77ef947308ee369d68816391c788ac", + "value": 16000 + }, + { + "scriptpubkey": "001435d5273c38bd3901b2f4f763610c5e826a4f7c1a", + "value": 46000 + }, + { + "scriptpubkey": "76a9147dab99545af7e0388fe1ee648374ebc96e9e075188ac", + "value": 185000 + }, + { + "scriptpubkey": "0014bfd34ffcaea6751d8334f742114d75ef40e50254", + "value": 78000 + }, + { + "scriptpubkey": "76a91433e01a247155fdbebc4e690f7f932bd6cc77d37388ac", + "value": 26000 + }, + { + "scriptpubkey": "76a9140fb8efa73438e293dee7503e0146874168093bc688ac", + "value": 371000 + }, + { + "scriptpubkey": "0014cc2dd5932ad8c83ba2754c3140712351f15b83bd", + "value": 226000 + }, + { + "scriptpubkey": "0014b6c6eda6951099b14d798351c1525ed5adccb56b", + "value": 12000 + }, + { + "scriptpubkey": "00142bc68729560befe159ec6bc9800253a670e3252a", + "value": 47000 + }, + { + "scriptpubkey": "00149030caa51b205b8eb74299936eaffc11a2f709c9", + "value": 187000 + }, + { + "scriptpubkey": "00149bd5378f495b6b057701816d37d6aa111a6aaf9b", + "value": 227000 + }, + { + "scriptpubkey": "76a914def05832801059bf2d68ad6d27d902da025dc32c88ac", + "value": 12000 + }, + { + "scriptpubkey": "76a91480737d514ee291e804c7bc3e86a534fa9188f97988ac", + "value": 379000 + }, + { + "scriptpubkey": "001437bee253c61fb10f47b83c6df78f896959a92784", + "value": 35000 + }, + { + "scriptpubkey": "76a914c0051c939c9e08991dad66519e1abc0dcb5f43e888ac", + "value": 49000 + }, + { + "scriptpubkey": "76a9144cbc701c05879a480bf3e697f385f7ccc23818c488ac", + "value": 82000 + }, + { + "scriptpubkey": "76a91473d162928f9ea8e7308b49c11c3a21f3167ea39b88ac", + "value": 309000 + }, + { + "scriptpubkey": "a914ce8625b35279e36fb6967bb3af5b2f5164dedc0687", + "value": 52000 + }, + { + "scriptpubkey": "5120e58cb189543e0c8114d4a4c81ca7c474a69ca146d7eb835d9b8a6f58218f7719", + "value": 26000 + }, + { + "scriptpubkey": "76a91450b998404c9479957b83dcec6cfd71e196876a0a88ac", + "value": 26000 + }, + { + "scriptpubkey": "00144e0a52cbc9a0be4aa2a0a6262c8a6f9d1eb5bbd7", + "value": 69000 + }, + { + "scriptpubkey": "76a91434f861b84f56982a12d8870b5de92cdb99178ccd88ac", + "value": 129000 + }, + { + "scriptpubkey": "00140d4631d05da58d4cdcb2f0fd1d045fcde83b9c3a", + "value": 75000 + }, + { + "scriptpubkey": "0014b956aa8e71762342767629ea155ec441be3fdf44", + "value": 115000 + }, + { + "scriptpubkey": "00144a9cae40771cb5efd45786c42e2683c56f96370f", + "value": 86000 + }, + { + "scriptpubkey": "00146367212615852e7dd5605a83e1f0f51c1ada16cf", + "value": 50886708 + } + ], + "size": 1866, + "weight": 7134, + "sigops": 89, + "fee": 2141, + "status": { + "confirmed": true, + "block_height": 917305, + "block_hash": "00000000000000000000e2283167cf9aed2a93afb337e866d7d04acaa7784b94", + "block_time": 1759365617 + } + }, + { + "txid": "6f5b1bcacdeaa2dbcf6a9c99372c70f11a8195689fe7f9fdd90e1377d2e4e306", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "0a65e2d05443f42f280d1aafafb8b82669073e731f68bf0c74f542ba5eac1278", + "vout": 1, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 7131 + }, + "scriptsig": "", + "witness": [ + "088b1e9016f900cb06a1b90c565d9d31073fe21346e8f6b3149a917427a048cf5abcbb6539b42454c5b16af408322f68f70a719f46cbf165cfdd5304dcb8887301" + ], + "is_coinbase": false, + "sequence": 4294967293 + }, + { + "txid": "82c136ef46b7fab7401e30e2f3ee4acf17604ef5f234eb8f51e2852e6f4f4f0f", + "vout": 1, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 7111 + }, + "scriptsig": "", + "witness": [ + "0bea2b81680d9f923211e02f076cd8d39d211b89b5d4d57e2559c4914190079da895ad70572dc8733924befb73801150d66885b1fd6b6d2ae91e4695c64aa5ad01" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a914c07b9849fc9a4cffea518eaa3b956e3696fe71b888ac", + "value": 14082 + } + ], + "size": 262, + "weight": 640, + "sigops": 4, + "fee": 160, + "status": { + "confirmed": true, + "block_height": 719335, + "block_hash": "00000000000000000009087f9e91f6cdf2f430399743e58b86f4b20839e494df", + "block_time": 1642540065 + } + }, + { + "txid": "0a65e2d05443f42f280d1aafafb8b82669073e731f68bf0c74f542ba5eac1278", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "82c136ef46b7fab7401e30e2f3ee4acf17604ef5f234eb8f51e2852e6f4f4f0f", + "vout": 0, + "prevout": { + "scriptpubkey": "a91405166b9f98fbfde07be2bc8983e69a22c8ee542e87", + "value": 23699 + }, + "scriptsig": "160014bbc117b871b7e194eda4c690f297a222953f29f5", + "witness": [ + "3045022100abe786bfc153ce42b941a5b46b0a92336cbbcbd0b5aa2ab35fbe10ef194c1111022011643b9ee8d99b9a3492129f00e5ec5a8923667acb85eb6cc306ea6351631a6201", + "0388091aa89c8d9ffafebe0c3bb8e28563a4da7b488c6a35b97fba336347b75125" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "a91436c3fa9f5fd052c7b8da8496ac98cf44117d50e787", + "value": 16013 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 7131 + } + ], + "size": 259, + "weight": 706, + "sigops": 1, + "fee": 555, + "status": { + "confirmed": true, + "block_height": 719190, + "block_hash": "0000000000000000000544967e8daa1542db5d606c1f22e474ec90f00c8c6919", + "block_time": 1642445772 + } + }, + { + "txid": "82c136ef46b7fab7401e30e2f3ee4acf17604ef5f234eb8f51e2852e6f4f4f0f", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "2585ff6960489ad77bb4920a9f1a2750bc41eedf4ab59c512dfe5f9b2001ed59", + "vout": 2, + "prevout": { + "scriptpubkey": "0014879083a6b0e52f670e3964231cda26140c2c4cb6", + "value": 61476 + }, + "scriptsig": "", + "witness": [ + "30450221009789d4c27136d1249b078bba7d2033f561ea8e2e274a3e5ca0b399b30424960502206f5fc1f89b41d7e44aef59bd0eb59b214f5b6d2274c8507f5025b61d4c3d27f001", + "02b51f7d75fa1a672fda68dd115a9aef9dd1ae02808f7448a7d37eeb4b4669503d" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "a91405166b9f98fbfde07be2bc8983e69a22c8ee542e87", + "value": 23699 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 7111 + }, + { + "scriptpubkey": "001494e417d6f725c08e89cde98ae294310d920c59ce", + "value": 29694 + } + ], + "size": 267, + "weight": 738, + "sigops": 1, + "fee": 972, + "status": { + "confirmed": true, + "block_height": 719179, + "block_hash": "00000000000000000001301979723628387fdbfedaf597c46019650d2005c49b", + "block_time": 1642441346 + } + }, + { + "txid": "98287365f0e155caf9514334427dfa493d34d653fba5f833d75aed51c6415b8b", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "3b0221fc9ff715f7708c37f862b88339c5818d182ddf68669885d40dece9eb7b", + "vout": 0, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6907 + }, + "scriptsig": "", + "witness": [ + "099370c520b7064800f4b628b7d3c7ae1912aea1e84cce410cf1f382c53a0125d15bfcbee33a412c6d86735e3063fdb4f5ee0b71a4c49fa3b99105df66fe51f301" + ], + "is_coinbase": false, + "sequence": 4294967293 + }, + { + "txid": "1d0b2abccc57bc96e8d558304bf5d45ac1cc2f0f46501f3db57474654802b611", + "vout": 0, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6944 + }, + "scriptsig": "", + "witness": [ + "6839255a28794a3d0cdcb90a8b8c469e9c10d31982e7ac3bda87d0d4c2d956817309b79f6801861f03f219c2ece614e11954ff6097c1be5f802a874058a82d5b01" + ], + "is_coinbase": false, + "sequence": 4294967293 + }, + { + "txid": "4fdf1c4e23885904525b54ab382eb18fc75e3fbe42d820c690b4b764c10583a5", + "vout": 0, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 7068 + }, + "scriptsig": "", + "witness": [ + "954df424bfe16805896b7d270993c7d51dd104ee5d6b6e51ec0670c81f43aafd652f4cd914896f2cdc505e00fdac030101516a298aec2b9af24ac387a4ca2df401" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a914cb6c5405aa5f9db22ea7e635541e377be23ea51288ac", + "value": 20700 + } + ], + "size": 370, + "weight": 871, + "sigops": 4, + "fee": 219, + "status": { + "confirmed": true, + "block_height": 718811, + "block_hash": "00000000000000000001e4eb95645b931530ff029ef6995184d3ea448cbdd2df", + "block_time": 1642254945 + } + }, + { + "txid": "4fdf1c4e23885904525b54ab382eb18fc75e3fbe42d820c690b4b764c10583a5", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "b760f8f1de54e1b07b0a5a43447935c6a31627c57700b61549f85e16df36fce7", + "vout": 0, + "prevout": { + "scriptpubkey": "0014dc26e214809a0caaffdb1d6af6aefc5fd5d7f635", + "value": 6689834 + }, + "scriptsig": "", + "witness": [ + "3044022004b5b18f3358288a26562c90cdf928c3181ea96f627bf6ced68f4ff106ee602a02204eca473ba1ce7629715dc47bc76cf378330ee5430fd25770f1b57c223f30d88501", + "02042cade74cb9274d410b9244f0cf6cd071c7cd8209360092744eaae3956f56f1" + ], + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 7068 + }, + { + "scriptpubkey": "00148b9417b2c10dab845be1b45981ba84982d0a51df", + "value": 6680998 + } + ], + "size": 234, + "weight": 609, + "sigops": 1, + "fee": 1768, + "status": { + "confirmed": true, + "block_height": 712216, + "block_hash": "0000000000000000000441a0a1345ae0e424201c24b6bd5aed4b69842e203480", + "block_time": 1638440724 + } + }, + { + "txid": "1d0b2abccc57bc96e8d558304bf5d45ac1cc2f0f46501f3db57474654802b611", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "3b0221fc9ff715f7708c37f862b88339c5818d182ddf68669885d40dece9eb7b", + "vout": 1, + "prevout": { + "scriptpubkey": "0014465c3ad6358d94c2748bcf30daad2c385257ff31", + "value": 34357 + }, + "scriptsig": "", + "witness": [ + "304402207d86d9b8ce62c335e35c30561a5a30866dd89c672fec875cc70fbb1e2fbb30830220729a63d9a7406053bc415df5e9c726a006d2be7fe911a0f128865435b68c708501", + "033c7b3ef4dc28b574e3954be6100cdb7cd67c7c86eb74ea2831bd321f20fd9a3c" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6944 + }, + { + "scriptpubkey": "001430e597acd2700aa1d679dbcbbd51a0b0c2338fef", + "value": 24995 + } + ], + "size": 234, + "weight": 609, + "sigops": 1, + "fee": 2418, + "status": { + "confirmed": true, + "block_height": 711990, + "block_hash": "000000000000000000032b73c5d5ddc9b37d556810b214ba4a4f282824ea7d66", + "block_time": 1638301660 + } + }, + { + "txid": "3b0221fc9ff715f7708c37f862b88339c5818d182ddf68669885d40dece9eb7b", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "55bf42ed750f4c41173459bdacd404167b3729e6a2fad1afb67ee3997c1af278", + "vout": 1, + "prevout": { + "scriptpubkey": "0014bea31fd5f499952a2c0fb98515dfdf665322bda1", + "value": 57879 + }, + "scriptsig": "", + "witness": [ + "3044022011ff8c4bc4ff0ea1fa05a11e402cb0bde4c8fd2f290f852379fa4af84f69122d022035be34ef8cb47ac815a7566d11c8239c69944c7a098a100f13c6dba90e1d452d01", + "023e769ca1e8d525038e56c6d743cebb9c1dc0e6a0e08ee208a3c2970c4df8c3d6" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6907 + }, + { + "scriptpubkey": "0014465c3ad6358d94c2748bcf30daad2c385257ff31", + "value": 34357 + }, + { + "scriptpubkey": "00146151358e34f511faf5df5ef2440b56cd86f550a9", + "value": 12373 + } + ], + "size": 265, + "weight": 733, + "sigops": 1, + "fee": 4242, + "status": { + "confirmed": true, + "block_height": 711988, + "block_hash": "0000000000000000000408e1adb7bec32de6645ea300a3297bd7860f8dfa60fd", + "block_time": 1638299012 + } + }, + { + "txid": "d345d25cbf488e705dd26bec204e7d0dcf9fb04c12a56705c4a5c2baf256c8b5", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "6a787f03e47f549d656686c724badf519d199d0bb8e2f9cea70f84d39e8f35a3", + "vout": 1, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6244 + }, + "scriptsig": "", + "witness": [ + "183c95c393377f1c017f776634d8c2ba63af0ac135193c7ccffdbfc9d417dda593e82995548cd9dc4045546dfe56453d21bff0ae1f91efebc4817e98975a4fa001" + ], + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "0d7da19f74916cef900c4afc96b137a17ad6971946c5a483c3d32d80e009486f", + "vout": 2, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6220 + }, + "scriptsig": "", + "witness": [ + "c610cb9cc1aca9afb47d4cd3e626d9e8d7d2f979aa2ccd451160adf7861f27268f480964a8c425ea1102621a28ab902ce0424fe56eebcce5e3cd8b5efff489b601" + ], + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "88df0b22ff93e9d0c0b93227506957701f1588586e8aaae3e0f160494c631a89", + "vout": 0, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6083 + }, + "scriptsig": "", + "witness": [ + "3e06be7033b98c6b4484a38d21787fddd03762329667aab373c541c9d19b0ad795acfe9d2f278bf006875f91912df4bc37fbe26ca1653a30f4a3bb95545b1faf01" + ], + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "b8ef0b668eafb0f03f11c3af6ed7024a69c5f10a482e239b1179b8b293baa831", + "vout": 2, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6102 + }, + "scriptsig": "", + "witness": [ + "8119776097929215514f00b751dd854f9078e515172f601b5f098dd7aea1ce0fa13804ee6df7989a784592f19d77bc0ab8f2b795b9bf935b27f14d519f53fa5c01" + ], + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "b8ef0b668eafb0f03f11c3af6ed7024a69c5f10a482e239b1179b8b293baa831", + "vout": 3, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6103 + }, + "scriptsig": "", + "witness": [ + "36a09fce6e825be856c57075de4df1f616d4e7df447b970017eb76cae2e4cf8a47553f94c8b5566561e12cbec70e2bf10dd3c3484b9a42b67e9bb7b094c06fff01" + ], + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "20fd49b0dddcd9bef28a83f85381e06e6289af751fd8e010276a0b8a0ae39436", + "vout": 1, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6109 + }, + "scriptsig": "", + "witness": [ + "96e903589b866357ea63c3f10fe2a317ba5c1957a7098b09b79ae108d3fd62bfab3cfbeb20ee3b5f47724b6851ea5f3380c9f90f67726128834fdfde011deafa01" + ], + "is_coinbase": false, + "sequence": 4294967295 + }, + { + "txid": "cfc19eeb40b9a61356a6f24ca19d24ffe516ded6cf65142dea7f1de97fa9572e", + "vout": 1, + "prevout": { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6099 + }, + "scriptsig": "", + "witness": [ + "53c9795199d90b49eb2349027679d22bb4d088cd29b52998ea7fc5fc15e94a2299795e66dda90fa7d2f4f63bb1ba74b5d3e5b4fbf2ff795f8c61fd1c6765d65501" + ], + "is_coinbase": false, + "sequence": 4294967295 + } + ], + "vout": [ + { + "scriptpubkey": "76a9140d73163a05305840f3cf18358dd8acfe7cdfef1588ac", + "value": 42000 + } + ], + "size": 802, + "weight": 1795, + "sigops": 4, + "fee": 960, + "status": { + "confirmed": true, + "block_height": 711127, + "block_hash": "0000000000000000000ba42307498a20df63ab521d62d97ad059ec0666a909e1", + "block_time": 1637760613 + } + }, + { + "txid": "6a787f03e47f549d656686c724badf519d199d0bb8e2f9cea70f84d39e8f35a3", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "0d7da19f74916cef900c4afc96b137a17ad6971946c5a483c3d32d80e009486f", + "vout": 1, + "prevout": { + "scriptpubkey": "0014fa2570ed4dacc329f0c799b85c8ce985ea619099", + "value": 111371 + }, + "scriptsig": "", + "witness": [ + "3045022100939fbdc91673866899ae7c4a27dea3a41a1d9ee1a84a3918574fefa6077ec00c0220595be524ca2b58eefcf8259eb561c48ac3eaa92d6918212cff7da4fe17b758fe01", + "02f4d47f4fbd8e746943b4bc1fdf3a7eeed10bb78c7182c17d95b8d5ac1283ec8c" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "00148621713862f01d904692619c7233a2defe635ea5", + "value": 103199 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6244 + } + ], + "size": 235, + "weight": 610, + "sigops": 1, + "fee": 1928, + "status": { + "confirmed": true, + "block_height": 709423, + "block_hash": "000000000000000000041ba05acbd1dae91de5dc31bf5ca19a86a8474ca8b554", + "block_time": 1636749981 + } + }, + { + "txid": "0d7da19f74916cef900c4afc96b137a17ad6971946c5a483c3d32d80e009486f", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "9e592a7d9c620154c8c6c5bc6423e10a0b0b21582ab00c425e4bb4c0f4ccd194", + "vout": 0, + "prevout": { + "scriptpubkey": "001465c1dde35bef277a007362b5a7ada9fb0866c25c", + "value": 152297 + }, + "scriptsig": "", + "witness": [ + "3045022100bc1e80a4365bad4071567df629d02e0ca87a31fdc6a5b7a8e84e6bd4030fede902201c9175757e1e287464cebe35f5bca65090eca7b4b7c512cdf5b7ae4e27cfb50c01", + "0369b76a690a679ae7aab0aca30cd60fe2f20a150c5b59f28862d770f754d479f3" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "a9142bf41bc699c55454c5d930793c60a9f8378e4b3987", + "value": 31217 + }, + { + "scriptpubkey": "0014fa2570ed4dacc329f0c799b85c8ce985ea619099", + "value": 111371 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6220 + } + ], + "size": 267, + "weight": 738, + "sigops": 1, + "fee": 3489, + "status": { + "confirmed": true, + "block_height": 709422, + "block_hash": "0000000000000000000c98908fa682cd532dab8fcd70a045706376be759b7d9e", + "block_time": 1636749383 + } + }, + { + "txid": "88df0b22ff93e9d0c0b93227506957701f1588586e8aaae3e0f160494c631a89", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "4546fe5d64a4054be74d37b4424f2e532f749767e7ca4f9f6fd2743e6d479495", + "vout": 0, + "prevout": { + "scriptpubkey": "0014b920899cdcaff54e772f6d9a9c85a10c7b006878", + "value": 14306 + }, + "scriptsig": "", + "witness": [ + "3045022100bdd4b0bf8d9850a4e23da6d3a20b6471fbaef057dda881826d3ce4f59012d99202207990667db550b0de54d16aa95b66410e7e1e4797a68f5a2b636f97f83d69a05301", + "03272fd6d92028f4a63eb08810a8acc5fc1b6c93a0fe811c16b02a4d1eb85f5595" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6083 + } + ], + "size": 204, + "weight": 486, + "sigops": 1, + "fee": 8223, + "status": { + "confirmed": true, + "block_height": 700833, + "block_hash": "000000000000000000095b43d156c47a7a2966d9f3fe5af0091d1edf84265f20", + "block_time": 1631821007 + } + }, + { + "txid": "b8ef0b668eafb0f03f11c3af6ed7024a69c5f10a482e239b1179b8b293baa831", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "20fd49b0dddcd9bef28a83f85381e06e6289af751fd8e010276a0b8a0ae39436", + "vout": 0, + "prevout": { + "scriptpubkey": "00145785d937e06a63adcbe72789e3974d765cfc8327", + "value": 92539 + }, + "scriptsig": "", + "witness": [ + "3045022100cdbd671976a3377cb4537a7e612a5bca176de7d86dd4f4fca5395a15e580df3e0220626415a0935cb9d223a9478186dfb9f1c1bd22eaf6e5f992352b099e8c8f75cf01", + "03b7ee3a40205105b874840e80f859e8ab4434ab2a4a167e005770a19903294d53" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "0014e6914da8d026c51fc830e53718f885c13d7c0f92", + "value": 64343 + }, + { + "scriptpubkey": "a91471a0076e86d915d6e827ee4d46bff4b97790943287", + "value": 10519 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6102 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6103 + } + ], + "size": 310, + "weight": 910, + "sigops": 1, + "fee": 5472, + "status": { + "confirmed": true, + "block_height": 700832, + "block_hash": "0000000000000000000cf636d6b1da73fcefa5b1bd35f0fe548738c7d2f23cc3", + "block_time": 1631818909 + } + }, + { + "txid": "20fd49b0dddcd9bef28a83f85381e06e6289af751fd8e010276a0b8a0ae39436", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "cfc19eeb40b9a61356a6f24ca19d24ffe516ded6cf65142dea7f1de97fa9572e", + "vout": 0, + "prevout": { + "scriptpubkey": "0014264398b2fcab3459380cfc872a038df0c549b309", + "value": 100576 + }, + "scriptsig": "", + "witness": [ + "304402206fe8f3c3864cfd375899920a5ba145906f6cad6a8fc36ae617f0d9ad014953e2022052b89f0891dd5e48d299b3f2bf31e9f6ad2686434536c2d6663283eaaaea1f0b01", + "03954d00e6779936ce69a245d9dadb45b8d8f402bb283603dddb00373bb1f52a37" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "00145785d937e06a63adcbe72789e3974d765cfc8327", + "value": 92539 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6109 + } + ], + "size": 234, + "weight": 609, + "sigops": 1, + "fee": 1928, + "status": { + "confirmed": true, + "block_height": 700831, + "block_hash": "0000000000000000000629acaa6c6a42d823e50ceb98c39171aeec7e72ae5eb3", + "block_time": 1631816854 + } + }, + { + "txid": "cfc19eeb40b9a61356a6f24ca19d24ffe516ded6cf65142dea7f1de97fa9572e", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "aec83a4513e11a9dc86ee0e24bdaf6904d1d73c94e1efa0dba6d59745ce3c122", + "vout": 1, + "prevout": { + "scriptpubkey": "00142da4d91a1f29af9b5d932f67f45968dc4ef1804d", + "value": 101665 + }, + "scriptsig": "", + "witness": [ + "304402202b5bdb595f78befc13fdbe120713c329b8e172c48acc4caee8de435b2670661102201a66f06f17c5750561d750ce3f947fc2fa2b371153c3d8abe3155464b6390a4701", + "03dd4cdc64dc3bc80ba7acb0ab4310f5cb61cb83f99f6789f87136c2fdba05e84a" + ], + "is_coinbase": false, + "sequence": 4294967293 + }, + { + "txid": "18608d3494003d7c8c65133b3a8db5c2c821163e1cbe134278c90b12a0819470", + "vout": 2, + "prevout": { + "scriptpubkey": "0014ae12c4358a2032bdde76302803bc26d7d455a6fa", + "value": 7563 + }, + "scriptsig": "", + "witness": [ + "3045022100be1243e5c63e695360e0e0a46dcd80bf1f1c9887718a8c2083d0f7558c59b55602206d3d00ffb5df1ccce6309e6150a9d8cc0dfc1fbf19de0e736df68142efdffcb801", + "03cdb2a177c3f8185801a4d258e06ec987f24858a8b4c76d6113e863818951f570" + ], + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "0014264398b2fcab3459380cfc872a038df0c549b309", + "value": 100576 + }, + { + "scriptpubkey": "512079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", + "value": 6099 + } + ], + "size": 383, + "weight": 881, + "sigops": 2, + "fee": 2553, + "status": { + "confirmed": true, + "block_height": 700829, + "block_hash": "0000000000000000000b88f73eb1dc427aa254989eae625fa0de07a9ef43d161", + "block_time": 1631816191 + } + } + ], + "/address/bc1p725jqhdu6dnxf22rc8k6qxf6hhzl0m76z7g37x4lg22ufa3ln2psaq76sq": { + "address": "bc1p725jqhdu6dnxf22rc8k6qxf6hhzl0m76z7g37x4lg22ufa3ln2psaq76sq", + "chain_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + }, + "mempool_stats": { + "funded_txo_count": 0, + "funded_txo_sum": 0, + "spent_txo_count": 0, + "spent_txo_sum": 0, + "tx_count": 0 + } + }, + "/address/bc1p725jqhdu6dnxf22rc8k6qxf6hhzl0m76z7g37x4lg22ufa3ln2psaq76sq/txs": [], + "/block-height/967680": "0000000000000000000161354016172f2a377610d52dd46d0f68a919333458cd", + "/block-height/969696": "000000000000000000001e39df127cbab82a824ac43cfcdbf62e59f6a08b9f0b" + } +} diff --git a/exposure-report/fixturi/eth-rpc.json b/exposure-report/fixturi/eth-rpc.json new file mode 100644 index 0000000..fd42355 --- /dev/null +++ b/exposure-report/fixturi/eth-rpc.json @@ -0,0 +1,1927 @@ +{ + "_sursa": { + "baza": "https://ethereum-rpc.publicnode.com", + "cand": "2026-10-11T23:44:53.398Z", + "nota": "Ethereum JSON-RPC responses recorded verbatim from a public endpoint (method:params -> result); used only as a fixture of the mock adapter target. Account keys are lowercase addresses. 2026-10-12 (round 7 of the review): eth_syncing and the head block (eth_getBlockByNumber at the head number 0x18f5ca9, without transactions) were NOT recorded with these responses. eth_syncing answers false, what an endpoint that has caught up answers. The head block is given only its number and a timestamp, 0x6acc1f87 = 2026-10-11T23:45:11Z: the EARLIEST time block 26172585 can carry, since block 26172068 (recorded above, timestamp 2026-10-11T22:01:47Z) is 517 blocks earlier and every block after the merge sits in its own 12-second slot; its real time is this one or later. 2026-10-12 (round 8 of the review): the adapter reads an account at the HEAD block only, from eth_getProof at the head number (the nonce and the code hash, every node of the proof checked by its hash from the state root of the head block) and from eth_getCode at the same number (which must hash to the code hash proven). The STATE here is SYNTHETIC, not recorded: a Merkle-Patricia trie of the 4 accounts above (ethereum.mjs stareConturi; balance 0, empty storage), built from the code and the transaction count recorded at 'latest' with these responses (0x853c6b.. nonce 1; 0x000000.. nonce 0; 0xc02aaa.. nonce 1, code; 0xbc1c99.. nonce 562, code); its root is given as the stateRoot of the head block above, which was not recorded either. The eth_getTransactionCount answers and the eth_getCode answers of the accounts without code are no longer read and were removed; the code of the two accounts that have one is served at the head number. The test checks the trie builder against the known roots of the Ethereum trie test vectors, and the walker against the published one (verificator-falcon/mpt.mjs)." + }, + "raspunsuri": { + "eth_chainId:[]": "0x1", + "eth_blockNumber:[]": "0x18f5ca9", + "eth_getBlockByNumber:[\"0x18f5aa4\",true]": { + "baseFeePerGas": "0x4486461", + "blobGasUsed": "0x0", + "difficulty": "0x0", + "excessBlobGas": "0xa98f961", + "extraData": "0x457572656b612028657572656b616275696c6465722e78797a29", + "gasLimit": "0x3938700", + "gasUsed": "0xe251e7", + "hash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "logsBloom": "0x05f595f64b29d327bcd202bac63174d05f98021c3455100084b70423649e1a690c28abccf82f435113183bf0e0a20b645611d8018e023b393796054a8e2c594a176393400240009ac8934108d46836f101402552c86628a65c3266409af5552a1ad2a7398a7063c0a424b8822d0808058a12da3d961434148e925195504a5a8adb626ef855322508609d246c86c2c61252900c070100038af82026c04d3d10297f308c0afdc83a0e123124e2999169b82638585f1043604a64e5f97a041886d1e5fc5c7a4182b8d619da0d33cafa3c14106404c257bea11c48c403063030ec62517aec0abd85b984a54d10cb9466cc6ac53db0a0e588164e7016bb0fde973437", + "miner": "0xfb74767c1ce1aada0a0e114441173b57f8c1571b", + "mixHash": "0x452d7d2ca4fa07e6b3c2b1dc7f29d88054d2d6f3ac825f5b8f4bef9455b415f7", + "nonce": "0x0000000000000000", + "number": "0x18f5aa4", + "parentBeaconBlockRoot": "0x816c3a00a8f718a4f4da9dfca7b7d8461dd660b9b11f4fc6f26dde891926600a", + "parentHash": "0x7e94974c09e8853d2cbe1c4750cee1932da72d0cfb21c32188ccd59a34bc9ebc", + "receiptsRoot": "0x778dddbea85e0f399d63e15fb35c7c147fc78862946a502cb0179ce31e25f902", + "requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x138f2", + "stateRoot": "0x5ebe9397ddb36550a3b89fc28243fa6871585dd334b9d037700cda0997765799", + "timestamp": "0x6acc074b", + "transactions": [ + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xbee0f8cf8fc29bed73c96f4307dbfb15a1d27546", + "gas": "0x17859d", + "gasPrice": "0x4486461", + "hash": "0xd0ec6b693283bb8bb5674f48d32f4b084535514bd0a7e8d16a66f5f1629c4fca", + "input": "0x64f5e9e700000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000003b44fef27cea000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000005262865f904bd70c0000000000000000000000000000000000000000000000000000000000003a4000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000039200000000000000000000000000000000000000000000000000000545e80f9520d0000000000000000000000000000000000000000000000000000000000003a2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003844e21fd0e900000000000000000000000000000000000000000000000000000000000000200000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f996000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000035c00000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000350000000000000000005262865f904bd70c00000000000000005262865f904bd70c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000041aff38d64fdbaf178a9cd57668fcf2da890c66c630a573d2e039a5d4484f6794d6a1b3d72c2c23910e75521ee5d65acad29449194f44d04f9c9635f61815f54e51c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000beef02961503351625926ea9a11ae13b29f5c555000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000004e43ffa795e1a400000000000000000056810d178ab60c0000000000000000005262865f904bd70c0000000000000000526ae4e44da83e3c00000000000000ffffffffffffffffffffffffffffffff0000000f4240000000000000000000000000000000beef02961503351625926ea9a11ae13b29f5c5550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006acc087200000000000000000000000000000000000000000000000000000000000033e0000000000000000000000000000000000000000000000000000000000000000261f598cd00000000000000007b0e2e8300899b647d5ebc66f9d4fa3f16c5406191dd734600000000000000007b0e2e8300899b647d5ebc66f9d4fa3f16c54061000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000012600000000000000000000000000000000000000000000000000000000000001dc000000000000000000000000000000000000000000000000000000000000024c0000000000000000000000000000000000000000000000000000000000000264000000000000000000000000000000000000000000000000000000000000031a0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2ffffffffffffffffffffffffffffffff00000000000000005262865f904bd70c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000dbb166542b74e823b9d6e0900000000000000015455c918e405a2831fbff8595c0aae35ee3db9d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f9960000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e0554a476a092703abdb3ef35c80e0d76d32939f000000000000000000000000fffd8963efd1fc6a506488495d951d5263988d250000000000000000000000000000000000000000000000002931432fc825eb863b9d6e0900000000000000015455c918e405a2831fbff8595c0aae35ee3db9d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f9960000000000000000000000000000000000000000000000000000000000000040000000000000000000000000e0554a476a092703abdb3ef35c80e0d76d32939f000000000000000000000000fffd8963efd1fc6a506488495d951d5263988d250000000000000000000000000000000000000000000000001b762cca856e9d040000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48ffffffffffffffffffffffffffffffff000000000000000000000002549350350000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000952798cda008eba300000000000100065c9193efd0d9af71cf6bd812afc73a21978e5e7f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000beef02961503351625926ea9a11ae13b29f5c5550000000000000000000000000000000000000000000000000000000000000a20000000000000b535aeb27335b91e1b5bccbd64888ba7574efbf880000000000a0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000008e000000000000000000000000000000000000000000000000000000000018f5aac000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8551449d75c99fdc7944270a2d490ab7133b86d3fdeff72807a32f30c5ef0e3842909bd271b5d0c9a9cf99f50d08c18e32fc54174ce2211d8353038c9b107125e1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aaa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb88b870ef2160f756943d536624cbfea13bf4bcdb7528f6a29ceddf308a791324b4ff852ed7190de110a770a8902286fec4ba6b920365ed8ff314e01dd23307f9e1b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb82c323a94d6220de81dda124ecc83df4a91ae28182864f98d8319aa78cb882f5f79809111931907e7ab557a159dde64a91526ee47868a319eee8911fbd13672b31b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb890fb5bb158d62e57312b4bebb85c30ee149b92878dc600f4048c0db46680cdc65b45af99591cfe76e3a1afc808baf5abde5934096dfe57958ab9b79aa652d5d71c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aad000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb86937179c2f9cc6d18198bca60e9839de7f1167bcf68c5775428f0a95998c826d56d99b7b7f9d9afd5e398a6ef00d6d9ff7e053c83f85d1f6d14909bbd59a911d1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb873f25c6fb66b9fd3609014dfd51ef0b7e28d3ba049beb88b9bb84854583972b03982cef4e838c9064335fa3ef3bf73d3c69b614b0b23d337aaa0bb9da6d766551b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8ffa26ef827c23315d2debd53597c431d38c2a5c3494f5b7b86c3ad85d279c0dc363f0c228d67293a75a822b4b9583f5a9eca731742f160766058e2d5b044a87e1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa7000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8f0c7f232ca6b6422e83e14dc83045697349a0e2012c800d2886696f7935c5feb189b2d1779f59a0c0f442313db1a0522ea4d09b4be0718d7eeafc36e60925bf81c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8500ef3b48a9953448014b8468d74d1bda15cc0a19b2360c1c4cf564534adcc9810ff1f6114836a8154de945af1d4d294934f01858bf135c18d9816f7e5fc02141b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aab000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8672d641dca5f9a3f331476ab8270fcadf820c7a021d9d41563f6a080d497d041729393964e7c4e0857e038223bdca8f59efea41d13d3d2d235ca130063cde9cf1b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa8000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb82e359551b3f6a09e328d95e8385638a198bf351649f24486876b1873c13a79b87de9734a6840559fb2327d28e3b88892ed3b3825d1d5983add3fb678c87e7d691c000000000000000000000000000000000000000000000000000000000000000000000000000001bf6bb768736e774d0000000000000002069c11bfc769be175bfae2d20bddce34e46514cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f9960000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000004444c5dc75cb358380d2e3de08a900000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000001bf6bb768000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000113dcf4add69999fad8f20f2b63f979bfcc000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000400000000000000000000000000000001000276a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7ffffffffffffffffffffffffffffffff000000000000000000000001bfda9eb100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000001bfda9eb1a008eba300000000000100065c9193efd0d9af71cf6bd812afc73a21978e5e7f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000beef02961503351625926ea9a11ae13b29f5c5550000000000000000000000000000000000000000000000000000000000000a20000000000000b535aeb27335b91e1b5bccbd64888ba7574efbf880000000000a0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000008e000000000000000000000000000000000000000000000000000000000018f5aac000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8551449d75c99fdc7944270a2d490ab7133b86d3fdeff72807a32f30c5ef0e3842909bd271b5d0c9a9cf99f50d08c18e32fc54174ce2211d8353038c9b107125e1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aaa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb88b870ef2160f756943d536624cbfea13bf4bcdb7528f6a29ceddf308a791324b4ff852ed7190de110a770a8902286fec4ba6b920365ed8ff314e01dd23307f9e1b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb82c323a94d6220de81dda124ecc83df4a91ae28182864f98d8319aa78cb882f5f79809111931907e7ab557a159dde64a91526ee47868a319eee8911fbd13672b31b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb890fb5bb158d62e57312b4bebb85c30ee149b92878dc600f4048c0db46680cdc65b45af99591cfe76e3a1afc808baf5abde5934096dfe57958ab9b79aa652d5d71c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aad000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb86937179c2f9cc6d18198bca60e9839de7f1167bcf68c5775428f0a95998c826d56d99b7b7f9d9afd5e398a6ef00d6d9ff7e053c83f85d1f6d14909bbd59a911d1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb873f25c6fb66b9fd3609014dfd51ef0b7e28d3ba049beb88b9bb84854583972b03982cef4e838c9064335fa3ef3bf73d3c69b614b0b23d337aaa0bb9da6d766551b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8ffa26ef827c23315d2debd53597c431d38c2a5c3494f5b7b86c3ad85d279c0dc363f0c228d67293a75a822b4b9583f5a9eca731742f160766058e2d5b044a87e1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa7000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8f0c7f232ca6b6422e83e14dc83045697349a0e2012c800d2886696f7935c5feb189b2d1779f59a0c0f442313db1a0522ea4d09b4be0718d7eeafc36e60925bf81c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8500ef3b48a9953448014b8468d74d1bda15cc0a19b2360c1c4cf564534adcc9810ff1f6114836a8154de945af1d4d294934f01858bf135c18d9816f7e5fc02141b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aab000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8672d641dca5f9a3f331476ab8270fcadf820c7a021d9d41563f6a080d497d041729393964e7c4e0857e038223bdca8f59efea41d13d3d2d235ca130063cde9cf1b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa8000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb82e359551b3f6a09e328d95e8385638a198bf351649f24486876b1873c13a79b87de9734a6840559fb2327d28e3b88892ed3b3825d1d5983add3fb678c87e7d691c0000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffff00000000000000001b762cca856e9d040000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000001b762cca856e9d044f2d31ea00000000000000045455c918e405a2831fbff8595c0aae35ee3db9d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f99600000000000000000000000000000000000000000000000000000000000005c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000012a8a9cc600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001001a0f494d000000000004000070810e46a7b13436c4efccbde546a024cdde57cdb6ac8926000000000000000008b3d9b32b659d34a2899ad3e831ca81bf6fd066000000000000000000000000000000000000000000000000000000000000006000000000000000000000000068496db53bdb1000a3ab82b28d41156cd8901d8d0000000000000000000000005979458912f80b96d30d4220af8e2e4925a3332000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c05560ed8f000000000004000070810e46a7b13436c4efccbde546a024cdde57cd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000cf211b4dd0d2be5c173ea57bcf938fc61d1d3bd30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002c0736e774d0000000000000000069c11bfc769be175bfae2d20bddce34e46514cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b762cca856e9d04000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7ffffffffffffffffffffffffffffffff0000000000000000000000012a8a9cc6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000012a8a9cc63b9d6e0900000000000000055455c918e405a2831fbff8595c0aae35ee3db9d100000000000000000000000000000000000000000000000000000000000000800000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f99600000000000000000000000000000000000000000000000000000000000000400000000000000000000000003416cf6c708da44db2624d63ea0aaef7113527c6000000000000000000000000fffd8963efd1fc6a506488495d951d5263988d25000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48ffffffffffffffffffffffffffffffff0000000000000000000000012a3f8711000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000012a3f8711a008eba300000000000100065c9193efd0d9af71cf6bd812afc73a21978e5e7f0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000beef02961503351625926ea9a11ae13b29f5c5550000000000000000000000000000000000000000000000000000000000000a20000000000000b535aeb27335b91e1b5bccbd64888ba7574efbf880000000000a0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000008e000000000000000000000000000000000000000000000000000000000018f5aac000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8551449d75c99fdc7944270a2d490ab7133b86d3fdeff72807a32f30c5ef0e3842909bd271b5d0c9a9cf99f50d08c18e32fc54174ce2211d8353038c9b107125e1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aaa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb88b870ef2160f756943d536624cbfea13bf4bcdb7528f6a29ceddf308a791324b4ff852ed7190de110a770a8902286fec4ba6b920365ed8ff314e01dd23307f9e1b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb82c323a94d6220de81dda124ecc83df4a91ae28182864f98d8319aa78cb882f5f79809111931907e7ab557a159dde64a91526ee47868a319eee8911fbd13672b31b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb890fb5bb158d62e57312b4bebb85c30ee149b92878dc600f4048c0db46680cdc65b45af99591cfe76e3a1afc808baf5abde5934096dfe57958ab9b79aa652d5d71c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aad000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb86937179c2f9cc6d18198bca60e9839de7f1167bcf68c5775428f0a95998c826d56d99b7b7f9d9afd5e398a6ef00d6d9ff7e053c83f85d1f6d14909bbd59a911d1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb873f25c6fb66b9fd3609014dfd51ef0b7e28d3ba049beb88b9bb84854583972b03982cef4e838c9064335fa3ef3bf73d3c69b614b0b23d337aaa0bb9da6d766551b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8ffa26ef827c23315d2debd53597c431d38c2a5c3494f5b7b86c3ad85d279c0dc363f0c228d67293a75a822b4b9583f5a9eca731742f160766058e2d5b044a87e1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa7000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8f0c7f232ca6b6422e83e14dc83045697349a0e2012c800d2886696f7935c5feb189b2d1779f59a0c0f442313db1a0522ea4d09b4be0718d7eeafc36e60925bf81c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8500ef3b48a9953448014b8468d74d1bda15cc0a19b2360c1c4cf564534adcc9810ff1f6114836a8154de945af1d4d294934f01858bf135c18d9816f7e5fc02141b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aab000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8672d641dca5f9a3f331476ab8270fcadf820c7a021d9d41563f6a080d497d041729393964e7c4e0857e038223bdca8f59efea41d13d3d2d235ca130063cde9cf1b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa8000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb82e359551b3f6a09e328d95e8385638a198bf351649f24486876b1873c13a79b87de9734a6840559fb2327d28e3b88892ed3b3825d1d5983add3fb678c87e7d691c0000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000beef02961503351625926ea9a11ae13b29f5c5550000000000000000000000000000000000000000000000005262865f904bd70c000000000000000000000000000000000000000000000000526ae4e44da83e3b0000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f99600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000005262865f904bd70c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000085e84bd5c672f0000000000000000000000000000000000000000000000000000545e80f9520d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000001f401f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x523aba7", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x64", + "r": "0xd0c6119d3d21b844863e6a67b40c3dd0df75adea7c61bd651c8fe1e4afc9d1c9", + "s": "0x51711166a494a7969460af716a276776fc741a406c8311cd93fdbef5bb0ffc99", + "to": "0xbeef02961503351625926ea9a11ae13b29f5c555", + "transactionIndex": "0x0", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x80c8855f1369d53237b9328cff3a833ec8d1243b", + "gas": "0x1315f4", + "gasPrice": "0x24478588", + "hash": "0x2cf3f34b8f362cfb17c6943306b4309f632d4c3674dd4bf9f70dcbf56192b6de", + "input": "0x4d819a2a00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011c37937e0800000000000000000000000000000000000000000000000326181a04ddff47a4153f000000000000000000000000000000000000000000000000000000006acc07670000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000088e6a0c2ddd26feeb64f039a2c41296fcb3f564000000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000002d1f7226bd1f780af6b9a49dcc0ae00e8df4bdee000000000000000000000000c9b4bc7c15423fcfe6b75ab5118ba773945a3a460000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000002d1f7226bd1f780af6b9a49dcc0ae00e8df4bdee000000000000000000000000c354c1312e6c5ee0cbc0bd33c2645348ed4ec73c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000322dcec4958c14e021a9f1cd49df11b9457968cc0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000004444c5dc75cb358380d2e3de08a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x24478588", + "maxPriorityFeePerGas": "0x24478588", + "nonce": "0x28", + "r": "0xd0b6cac0ff446b3401c981beba52bd9cc1b1d3e66277e1e8f1750c9da0e62337", + "s": "0x1b4a4badba40191dcdcf4fc8c0997c4ae01ec239c439778dbf4e4aaa02b9b70f", + "to": "0x4313c378cc91ea583c91387b9216e2c03096b27f", + "transactionIndex": "0x1", + "type": "0x2", + "v": "0x0", + "value": "0x11c37937e080000", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x978e75381d64fb18af7112e42fa76a211a773456", + "gas": "0x186a0", + "gasPrice": "0x12e4e5661", + "hash": "0x6ac3ed32ba959f5683552d9d04d3bc8dc2e6bc8dc59fc576e7748a7580280433", + "input": "0xa9059cbb00000000000000000000000018a1049ee779703034f73f5511a0d88f4dcad6aa00000000000000000000000000000000000000000000000000000000085a8723", + "maxFeePerGas": "0x13014d274", + "maxPriorityFeePerGas": "0x12a05f200", + "nonce": "0x8714", + "r": "0x7f25d74303a67d2160394499d05864b1afe37591fc92e7f185c53699c6eda717", + "s": "0x3ba1ec449af903893defaec683287f87afa3edd86bb3943d7a839f979f112fb7", + "to": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "transactionIndex": "0x2", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x6928f3e126dbac9923d52300fdef714b280b305c", + "gas": "0x186a0", + "gasPrice": "0x12e4e5661", + "hash": "0x26eb5697629c93f20f477ffb13b3618a80ed4ebadb767c1331f11e4133090d20", + "input": "0xa9059cbb000000000000000000000000810bcf8c8cf3fb9f14366fcdee16c33711734b69000000000000000000000000000000000000000000000000000000000121eac0", + "maxFeePerGas": "0x13014d274", + "maxPriorityFeePerGas": "0x12a05f200", + "nonce": "0x26839", + "r": "0xfa4b74f2cbdd94bb9098e61a360aec468271613d1f3dab5eb73dcf4ef9de2da3", + "s": "0x383e5c37d92643c1dc1cde2c7f0a2f6ecd2719cedeeaeb30ae86106c3cf85e58", + "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "transactionIndex": "0x3", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x2777a74341a61567b831f7bd3d2a49f9b6a825ee", + "gas": "0x6954f", + "gasPrice": "0x280baa61", + "hash": "0xb53362bcd2e85a4a74e4566970ecf698976d625491ab8f065fe9b6a8a9c7965d", + "input": "0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006acc0e25000000000000000000000000000000000000000000000000000000000000000200100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000b85c28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000002b2260fac5e5542a773aa44fbcfedf7c193bc2c5990001f4dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030b070e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000060000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025747e5e100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000113dcf4add69999fad8f20f2b63f979bfcc000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000002777a74341a61567b831f7bd3d2a49f9b6a825ee0000000000000000000000000000000000000000000000000000000000000000756e6978000001a12cfbc64f8000a4bf0000000c0100", + "maxFeePerGas": "0x298b6040", + "maxPriorityFeePerGas": "0x23c34600", + "nonce": "0x9f", + "r": "0x25a80a5e3b7959c22aa869587f87cd0a3024fd76ce2935d880f92d94f54f88a9", + "s": "0x19e53433b937c7b72f91b191f6b41cddbfca610f878fc46436fefe5ea9285d74", + "to": "0x23617e59a5925b2a4bf75d73ff6711cd0b29de85", + "transactionIndex": "0x4", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xf7bf389531bea3ba0fdd3ecd63b8feeb37b039e3", + "gas": "0x212cf", + "gasPrice": "0x8b879a76", + "hash": "0x1bbade27a364bd61fbeff93e200f2ad15acb2904eaf9ff902fa55bd3159ca63c", + "input": "0x122067ed000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056534741cd8b152df6d48adf7ac51f75169a83b20000000000000000000000000000000000000000000000000000000432b92dbf000000000000000000000000000000000000000000000000000000000149d5700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006acc074e00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000014dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000", + "maxFeePerGas": "0x8b879a76", + "maxPriorityFeePerGas": "0x8b879a76", + "nonce": "0xe303", + "r": "0x105eb368622e5aa0e476046b8b500c337a8f695e345c9deec00dca939559cfff", + "s": "0x5390590f56158e34c045a063564f9d8c6d025c6377a079e15c70473afb7a56", + "to": "0x51c72848c68a965f66fa7a88855f9f7784502a7f", + "transactionIndex": "0x5", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x546c70fb7752de121278b1b61ec777bc98ddf7ec", + "gas": "0x7f310", + "gasPrice": "0x1d54d05e", + "hash": "0x642553b504bdfff5baa4d74fb558b5b26cf50b1e8fb6099253b5bc4f78bd9de1", + "input": "0x99e1d016000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac4436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044095ea7b3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008487517c450000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac4436000000000000000000000000bd216513d74c8cf14cf4747e6aaa6420ff64ee9e000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000006af3942b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008487517c45000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000bd216513d74c8cf14cf4747e6aaa6420ff64ee9e000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000006af3942b00000000000000000000000000000000000000000000000000000000000000000000000000000000bd216513d74c8cf14cf4747e6aaa6420ff64ee9e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000364dd46508f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000006acc0e390000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002020d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac4436000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe200000000000000000000000000000000000000000000000000000001bd1d45fb000000000000000000000000000000000000000000000000000000000407aab40000000000000000000000000000000000000000000000000000000003fb5c85000000000000000000000000546c70fb7752de121278b1b61ec777bc98ddf7ec0000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac4436000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x1d54d05e", + "maxPriorityFeePerGas": "0x190c6bfd", + "nonce": "0xeb", + "r": "0xae4619207bc7945355a1cbe82906c06ab5487224e8f6993376396b862befd095", + "s": "0x7fcfae2ef59d1cb4eaca6fd8342de7d8efdd2f611e067360a7b4ccdd30768531", + "to": "0x546c70fb7752de121278b1b61ec777bc98ddf7ec", + "transactionIndex": "0x6", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x76216333a291b13c7655b6237d9bff9a0bafcea6", + "gas": "0x7247c", + "gasPrice": "0x32d0dede", + "hash": "0x276180113eec1e816afe3dc8c742c31eb6ac0ca54f284219263f19f0c305f645", + "input": "0x5ae401dc000000000000000000000000000000000000000000000000000000006acc07d80000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000124b858183f0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000076216333a291b13c7655b6237d9bff9a0bafcea60000000000000000000000000000000000000000000001165a40cd196151b08e0000000000000000000000000000000000000000000000000000000010e4c7cb0000000000000000000000000000000000000000000000000000000000000042046eee2cc3188071c02bfc1745a6b17c656e3f3d000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000064a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x32d0dede", + "maxPriorityFeePerGas": "0x2e887a7d", + "nonce": "0x7e6", + "r": "0x566595d33165ea1a6d5e0e0376b4f9620535193cfba4b826234b9c270709f330", + "s": "0x764d087fcef77fb47c3cf2cb80479208508c36f1238dfe8b9355ab233d88167d", + "to": "0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45", + "transactionIndex": "0x7", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xc6acbee42e9e323140c1ed060c2f6ea9cc3b4b75", + "gas": "0x249f0", + "gasPrice": "0x662cd4bf", + "hash": "0x79ccda640123638f9140ac7d52b8d95c67b5eea32c414d88c61e1adbb26b6e75", + "input": "0xf3fef3a3000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000011213a", + "maxFeePerGas": "0x662cd4bf", + "maxPriorityFeePerGas": "0x61e4705e", + "nonce": "0x2aa7f", + "r": "0xeec628074e12c57a5bdaef786e699daf0e02f09058da1248e10041bc417d5d76", + "s": "0x2138d2f815c40e0d574147bb89571d24182e8b745b063508bac4b232b913bfe5", + "to": "0x7c5a71c9fefbc7691f9d4ac7baf70c743792f716", + "transactionIndex": "0x8", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x05ff6964d21e5dae3b1010d5ae0465b3c450f381", + "gas": "0x1db12", + "gasPrice": "0x7b7df861", + "hash": "0x4135249ffc69c5ab783488613d3b9541120950a6d4a7202ec65fedd5053cb9f4", + "input": "0xb61d27f6000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000009f0b6b3a2fc09ab816e9787009295ffbd4b2e68f000000000000000000000000000000000000000000000000000000008a762ac000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x7fd5c297", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0x1dda95", + "r": "0x4b2e26b5f9e7ad073a26c6aefd613bebdfa0d296c4e3095b6f218748baccdf28", + "s": "0x3d9e66fc298e09b653ce6e761791a0bf6cf1e78ee6889f39b99276d79e3344f1", + "to": "0x2744dfd9898f0babbc570cc594bbbc84b487a22b", + "transactionIndex": "0x9", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xd82c5660cac4169de051d7df34323f99c21176a7", + "gas": "0x160aa", + "gasPrice": "0x7b7df861", + "hash": "0x5958b5bf65d1c90c2ffc9dafda874566ac831cefdda7c19b934a7bdcdb4cbcd8", + "input": "0xe4c705e9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000010000000000000000000000003802c14a0ff357f1e0f36fcee4a9b8e9d73a8d9c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001976b7810000000000000000000000000000000000000000000000000000000000000000100000000000000000000000005ff6964d21e5dae3b1010d5ae0465b3c450f381", + "maxFeePerGas": "0x7fd5c297", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0xa1cc", + "r": "0xda593b04c326c3baf5029eed188316896ef0090ec55c22664948fa1216eb564", + "s": "0x450d0b34a1593c76cf872c6a39a4bea801b66c95b970c0a5ea2400b422e0d6c3", + "to": "0xee39678386f5bfc68df2c65656ec8e23f60063b5", + "transactionIndex": "0xa", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xa2a51ae49a7e5d7e2273849e56d3d7441ceaee52", + "gas": "0x249f0", + "gasPrice": "0x5386a655", + "hash": "0xb5ba2766286cdffe822f4a52fd1a0ea09e697557754743bb33259e3013e47be0", + "input": "0xfcfbd33a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb00000000000000000000000030f951aee859e6996bd863a005d3b605a55130bc000000000000000000000000000000000000000000000000000000000bebc20000000000000000000000000000000000000000000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000009968f86863cd0b7ce2f965fba2ed2749aa36416f00000000000000000000000000000000000000000000000000000000000d320c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412716bca418a95252ca3987015cc5f5780355b1c6a8e40b9237d85b35a8a3bda90764996cdc651a3e6d3ed9dcd2cc21618481b59e76bbf6a1c44c4585246f3fbd1c00000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x5386a655", + "maxPriorityFeePerGas": "0x5386a655", + "nonce": "0x64c9", + "r": "0x5a0b1f7fd00ca9c502268f225ca5036df75d65bac81c70d477be651c955acdd6", + "s": "0x64295c3def6f0d14da571f1f841c6b8ec1fc076ad41236b29e8fbe04a931faa1", + "to": "0xfbb49b3a1ccfd128bde3d4f8dc78980249ae4c15", + "transactionIndex": "0xb", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x93cac54b8250f3b1a2a5ed5f2fb88a40947d1586", + "gas": "0x17740", + "gasPrice": "0x7b7df861", + "hash": "0x6e9b9ed65b8f04dff98fb0553ac02378d86cbee2fa854d945484ee640ab75bf3", + "input": "0xa9059cbb00000000000000000000000087d62b44de2c62ce1b08ab5a782ed98cd3eb20b6000000000000000000000000000000000000000000000000000000000a21fe80", + "maxFeePerGas": "0x7c92de80", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0xa4", + "r": "0x5a66fc572e4ca7b3f18c1eb8a2ad60556dd9cf5bd936249c84367eb459164c49", + "s": "0x3dad026e960d6a8a821edecee215bf351364dbb767d80587c6a43b892a95caee", + "to": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "transactionIndex": "0xc", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x77d3742021b9e079c1c97aa5098d44f238e62bbe", + "gas": "0xfde8", + "gasPrice": "0xb2d05e00", + "hash": "0xee9a2620b3f4c568c3a2689fbf287409599f88c18136eda9811524ee889678a9", + "input": "0xa9059cbb000000000000000000000000a84e0206bc2b560defab945e44f47253e3ff8ded0000000000000000000000000000000000000000000000000000000004bd12e0", + "nonce": "0x0", + "r": "0x23e5d24ead79a9a48c4f5f05d8d5e58b2cee6d613fd144850b2d784e0aa54acb", + "s": "0x1ad504920cb5cdf4bc467a14545ce142214473441fbec3dd1c11b8a9c458cbe1", + "to": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "transactionIndex": "0xd", + "type": "0x0", + "v": "0x25", + "value": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x9aa8feacbb42659a806cdd6933ab3982586824f1", + "gas": "0x20f98", + "gasPrice": "0x3fe32e61", + "hash": "0xe837398a448a5f15ffcc465a10c0c7e19b253630b9636171397b00fbb83862f2", + "input": "0x01010002f9074de6a00265b3e3d001d0420c4206177819f1e929ec2cd762d1dd70512a629e19c64d5b84018f5a9df901cef901c9f901818001f9015bf842a009f07492ffc4ca447b7cbda3d13c8dafca0081accd9b2435178b5e87fdbd4ff9a020f15a82fc2bd4a990dd0b2e9083b637a0719bc88eff27d8385ab77bc1081dc8f888f842a0016a7966ee5ff2a3e4174c2413b53482b50b18d18c4d1ee29e964aca154711c5a01b480ccf1b7040940ca0a43335a3bde8556823bcd598f1a58a05ffb453c2cbe1f842a024e3222f933e8f08accea9c6de80aec598814c2293e211afa8df7377b6e8764ca007b5ee63d087e773666ff099665eeab23a7efb174c7074c576d2a0acfcbe9decf888f842a010fec3e6748bf8712c04287c8406f66fbf8c418831cd9b27a2109c8a2e0faa0ca006ded95b4ff1f6d41727a9b9ed242dfdfcb36485cf7ae7975587e5bdc8e1d83af842a0198a8650467903807fd90ffc5f7a698acbc324c7a0f36debc0d4a963a9aafdd8a006668cd1c357c7fc37769809fd8dd02ffefbe37ac40eab1cc6e0d31dff7489b5821000a022e33f21d0772cf329ee192354b7e7efa3dc848b0fd4839e2f1e76ad381aa500b841e4f06f74004f4a9130489068e9b6806473f34e267d750f4846949ca3cb6493700950b40e0044325a44ac9fd57ecbc60cacc8047e22002b918e8e4190960494cc01c1808080f9054ecd80058005800506018004030b02f90374f842a024dcef214ef2574c417bf53e06dfda392e2e99cf9d5f98780cc5e563bb0ed71ba003625a28b06a80a5055f3586f7b9cca89aa646493aa8aa32c3f4a46e8d905688f842a001e61af45602a20a30023bf3b116d25dfd7583e3f9d564b89a700a193c9b57fea00dd02d0aee75385909679de298f9a18b6b725dcddd1b3337843ca4fb9a277885f842a0042e9501f0ee733bef8867d77df380a28d359ba1c5aecf511179a6a1593ff2c1a014857adef158ea32ac79580476ae60d36c27758d535bb2891ef30f43f27b25cef842a02b4bb0af79fabfd5277a06636fe77e591bf6c2ea11ccaa3d9bed377759b1aa46a003406c8390f897530780c26e596cabd9fe8a2d3554e635635046209a6a3ee39df842a02156caa92915944254a0af78bfe2272a4eb0a483a5bb0e8e02ccee48b5782098a01095aacf244a4cec7944233365f4573b05351f39f85a3087864d5a6075875338f842a012c8f76223bb23ecdd63536b018473c16aaea39c317a8a7a56dea84b0184d28ba018c6d86916252c8f3322bbcb0f7cdcba2bb2691ee1cf5f059e848c49fd5a6ceaf842a02f9377c37865d76f41373f19620a721f72b4187781b5f845d7e022622e162588a01b4fce77b7a2376d39163c3d543058296f747a39eb9bc6268f4806a2929b3d25f842a00b95152d821db3d7a99f37ed90aa1cee9c137ede845f482894d93625140ecd1ca00437b263cbbd5c8950bd10e653adc69374e5c6372c5ac06e6a8bbe908bcc2edaf842a005c90194c1e505d019d7fae81d3cd1467e232ac026b8d0aed20d79adc80d627da01c20fe30551a51a691c654358b4dbe106f627d31d4b6a5649bc2dca3ae689409f842a018ab105fadd8ccf817a0ae516edd2952e2f620dd7d2a6e2d83d09df142c3c1c9a02e222d9a594f4d762b5b68f9dd9e0ccbb31e7554191edd9ec0a79456af55c855f842a0085a3575c76ff73ae738b9a0a6f4ed26f062be1684a05c2efca2979051432292a02344195e4f2be6161ec3c10c7cdb3f69e0c045414dfd0a032b7266456cfa46a7f842a010e3af926105d08302161bb2d17597f9b2b48f34a46437d298e092ede8faf74aa029479abcf9a76bc18af272e0d642688e648cd1767eddbf3d809b18cbb7642daef842a01f25331f9cc2783f4cd0b6afdad6d0db89767c87b11047bebc2c39bf7cf7b5d6a02b80544ff8ad00d97e8e56764917fcc9626a0546bcab534c1f0c51ddc3026363f8ccf842a026c14a2f42df3e995ac0fbbc142e6049e7f8d93f2ed513c46ce65e8b9f1d5c34a01404ddc5cd8b5415354b2f7e522cc85de5905a28d2258c070ba0d53e9e314e54f842a02eb895aa73a266f68b1a979cb952692c426ce14c3c141b54801972d186284f22a01c9de662b687fb66eb9daee2685680b0f168568eee32934f8edea97ab3cff74bf842a02873a3d252905830418e2f30867ed3afc16f8ce1caab8dcb5d64ed107ddc5c93a011147f8bad3d5eb8de9ed887f901f94d9f179346123f62514b2468ec423461d8f888f842a018afb479d109df69da9b11aa6342f63e879ed61fb7c683e39fff75dc0b64c8d5a011306dfb10057287927418a9c32a87c45290f8aa0b6678ae928015c60f86adeff842a02ea54319c5d7335a94f0215b552227fa72881553bf43f9fdab8e5fbce4315a14a00d91ecd249243f460f5d6af76213e5221f4679c00ea91a89883d75ae7c324c31f842a00b0be9ea6ef1b1ba7b39080a1a2027ec7527fb4ba0bb85eeee952b33b408c0b0a00936824c359c68e04cf1b76402bea8f8f18237d2d5319b6a25c615f8f2ea8aadc78202df8203b920c882049b8205168187dbcc051e07488201c967724781c7cb80080d178082013b59370ec18083000102", + "maxFeePerGas": "0xb2d05e00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x6cea", + "r": "0xd2d9c245df9b42c3bfda45ae0a01e82778c7f96a41afe3c25177363288c03c82", + "s": "0x3b0e446c164bf8cf2cdeb83bbacb6059d65418cbff17b5d7180792035a37be22", + "to": "0x003a7a2d3129838adb01c8d9b7da62ac6ec27961", + "transactionIndex": "0xe", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xf047b952225bf90cf65b1c0915a8b42c3556bacd", + "gas": "0x3d090", + "gasPrice": "0xa3e4561", + "hash": "0xd4f203b273522016f3e4f8996777ba2c81a983461d72edd7b143c1e31d7545be", + "input": "0x21edbbf70000000000000000000000004068038ab5490063a3ead93b3712ed082e62bd59000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bd00d0d2b64c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000358a037280000000000000000000000000000000000000000000000000000434813002316", + "maxFeePerGas": "0xe7856ee", + "maxPriorityFeePerGas": "0x5f5e100", + "nonce": "0x15a3", + "r": "0xb16a9deab49c2d4f1a4197ec435abc0e70eb59b1e151184159029c933985bbb2", + "s": "0x7038c27a36a1688d00362e5c58cd6a35ad32436250bb58f26b6c68bc03c95067", + "to": "0x99e4a3d58e11e0f314bbe7d0e8edfab554c9d664", + "transactionIndex": "0xf", + "type": "0x2", + "v": "0x0", + "value": "0x434813002316", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x76eeb4c8b149738a9b198d866c80e8087a0a4f17", + "gas": "0x124f8", + "gasPrice": "0x54ffca1b", + "hash": "0xe57be121d63e9932a7c9698ea7fb1deaf8fd6d0dfa993f918c2d2805c8acd4a6", + "input": "0xa9059cbb000000000000000000000000cf1089aa53792383d15f23f89aef74cd41197dd8000000000000000000000000000000000000000000000000000000000373a708", + "maxFeePerGas": "0x554d22ec", + "maxPriorityFeePerGas": "0x50b765ba", + "nonce": "0x109fc", + "r": "0x7f4786eb8229c3664d26d283d122b7639c2a9ca34667dea01c6a25e53d239401", + "s": "0x3369e3da6648984a08ceebd5f62cd6dadcea6b8c577a1407ee68f3289409a1e1", + "to": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "transactionIndex": "0x10", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xe614e05a11f28bc8bb7a4713780f048b3c6da9d3", + "gas": "0xb2be", + "gasPrice": "0x78f25768", + "hash": "0x206127c3afcea874c0b4438d68abefe5299ba4cc5dc9940e52d1931df47b4f1d", + "input": "0xa9059cbb0000000000000000000000000698d758d89e2f622f0a0e779be4280f0bbfb2a50000000000000000000000000000000000000000000000000000000002ebae40", + "maxFeePerGas": "0x78f25768", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0x0", + "r": "0x1810c97f81b562b1d7d5932638880d1c9dfb6f2f7119e73516409637d1934b46", + "s": "0x68d41dedf71a35d903bbcd67ba9c36d1d402cf772fd9ca59dfc1c1a9916d7080", + "to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "transactionIndex": "0x11", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x10b92fb6eecc5b691ee663acfcd47737ef59cbb4", + "gas": "0xb616c", + "gasPrice": "0x7b7df861", + "hash": "0x3729838ec5a75debe8a7461ea42db3df225a0b9a254b462368ec1a6aba224ca6", + "input": "0xe9ae5c53010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000d40000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000881d40237659c251811cec9c364ef91dc08d300c00000000000000000000000000000000000000000000000000648ab33724c00000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000c455f5755290000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000648ab33724c00000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000136f6e65496e6368563646656544796e616d6963000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057e114b691db790c35207b2e685d4a43181e60610000000000000000000000000000000000000000000000000063a97c86fb260000000000000000000000000000000000000000000000001030e081b18243fbc200000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000e136b0299a00000000000000000000000000f326e4de8f66a0bdc0970b79e0924e33c79f191500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2807ed2379000000000000000000000000111116053f09d34a7eae8102887004445176ca11000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000057e114b691db790c35207b2e685d4a43181e6061000000000000000000000000111116053f09d34a7eae8102887004445176ca1100000000000000000000000074de5d4fcbf63e00296fd95d33236b97940166310000000000000000000000000000000000000000000000000063a97c86fb2600000000000000000000000000000000000000000000000010317b259bc92747ae0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000008d90000000000000000000000000000000000000008bb00088d00087300001a4041c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2d0e30db000a0860a32ec0000000000000000000000000000000000000000000000000063a97c86fb26000008305121beb0009aca35087ce7ccf11637e24dd1aad3bf2ac02aaa39b223fe8d0a0e5c4f27ead9083c756cc200049586d0e80000000000000000000000000000000000000000000000000063a97c86fb26000000000000000000000000000000000000000000000000000063a97c86fb260000000000000000000000000000000000000000000000001045b49c12e21dbb6b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000057e114b691db790c35207b2e685d4a43181e6061000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000057e114b691db790c35207b2e685d4a43181e6061000000000000000000000000111116053f09d34a7eae8102887004445176ca11000000000000000000000000111116053f09d34a7eae8102887004445176ca11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037871395c8991ee611bbcd73f113b7fffb3479b10000000000000000000000005ee29974eb6b62599d9dbddcc204662aaafc99ff00000000000000000000000000000000000000006acc07750007a1200007a12000000000000000000000000000000000b10c237cf920152a219440afa41e532a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000034000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000000009a0056000000000000000000000000000000000000000000000000000055034371b9a3000ac35000010001121200000bb8c3db44adc1fcdfd5671f555236eae49f4a8eea18000000000000000000000000000000000000000000000001900167336cec42645f55059eff241cb02ea5cc52ff86c02aaa39b223fe8d0a0e5c4f27ead9083c756cc257e114b691db790c35207b2e685d4a43181e6061000000000000000000000000000000000000000000000000000000000000000000000000004199611b81815c1b2e4610b3311b3b1c71cfdcee45b9685411f92517784fb3b4080814ac1b50638c3c19ed143fd22475e8a93f5b8396afca460c940ad24c6e7ae91b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002644dcebcba000000000000000000000000000000000000000000000000000000006acc0775000000000000000000000000beb0009aca35087ce7ccf11637e24dd1aad3bf2a00000000000000000000000067336cec42645f55059eff241cb02ea5cc52ff860000000000000000000000000000000000000000000000002dadf08241945dc9000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000057e114b691db790c35207b2e685d4a43181e60610000000000000000000000000000000000000000000000000063a97c86fb260000000000000000000000000000000000000000000000001045b49c12e21dbb6b000000000000000000000000beb0009aca35087ce7ccf11637e24dd1aad3bf2a0000000000000000000000000000000000000000000000000000000000000000b10c237cf920152a219440afa41e53100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004171536a6714c67b564092ad64d233a100cbe94658ff552dcfeb47bdb3a3cbd1a12288d532793c1d23f7ca6874d7d5c68e3d2c1b81c01f6b3377511cab16299ef41c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000005ee29974eb6b62599d9dbddcc204662aaafc99ff00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000140000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840e3f98de0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003d0167336cec42645f55059eff241cb02ea5cc52ff86c02aaa39b223fe8d0a0e5c4f27ead9083c756cc257e114b691db790c35207b2e685d4a43181e60610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d6bdbf7857e114b691db790c35207b2e685d4a43181e606180a06c4eca2757e114b691db790c35207b2e685d4a43181e6061111111125421ca6dc452d289314280a0f8842a65000000000000007dcbea7c0000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x7d625371", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0x86", + "r": "0x680af11a5fd8ce78a45bbbc04a1c37e1dd31a297f2feda4761136c304d4efe82", + "s": "0x7b5311afd80866700c298cf06ceefcc812b72ce4570ed0a0eba3d0b5db7cfe59", + "to": "0x10b92fb6eecc5b691ee663acfcd47737ef59cbb4", + "transactionIndex": "0x12", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [ + { + "address": "0x31eda5529b8f219243e8248eff368bc36a3f5975", + "storageKeys": [ + "0xdeed1535480e32236295207fd5d99d1b60c00e2a00e3c8e130bc6bc6300cfd61" + ] + }, + { + "address": "0x6e9965973aebd5e3853255fcd84640b2b4c5a3f8", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + }, + { + "address": "0x2bfa9542b61ac7e91fe7802c07282bb22cdf0c89", + "storageKeys": [ + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de5d", + "0x1ddd6051140365a5a0114fc96157ea2a0df03876159705f1ed3c051c4f3f6d32", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de53", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de50", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de55", + "0x1ddd6051140365a5a0114fc96157ea2a0df03876159705f1ed3c051c4f3f6d33", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de5a", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de5e", + "0x14e620e36a77e8d2c9dd08d3b88b6176d4773d8bc9d77d7c565e6de1ee940c96", + "0x87f03c4be520a6605db1880f6b76fd246d2ea6cdedaffbdb5714ee9f30911a53", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de54", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad4", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de58", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de52", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de59", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de5c", + "0x14e620e36a77e8d2c9dd08d3b88b6176d4773d8bc9d77d7c565e6de1ee940c97", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de56", + "0xfa3458b510bde9a608a4f317b82460f4ce7f7e5cecc79b8881832f12d0759d5e", + "0x1ddd6051140365a5a0114fc96157ea2a0df03876159705f1ed3c051c4f3f6d31", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de51", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de57", + "0x8620490e3112d238b652c06b5b5220767476e9b7ffdf9fb7826f8cb412c3de5b" + ] + }, + { + "address": "0x27bb6d0c21a057b2ca52e3fcda2f801d17d5428c", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000004" + ] + }, + { + "address": "0x833f894f100958a26ca65c73101d026b95573b75", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x55dda8973e4870d103d7e2815978fb891f053e751d23dc0aaa4c432eb51b54c9" + ] + }, + { + "address": "0xc7bbec68d12a0d1830360f8ec58fa599ba1b0e9b", + "storageKeys": [ + "0x000000000000000000000000000000000000000000000000000000000000001d", + "0x4401e6dd46094f4ce5e0e28281b2af0a514405e33d73c9e9fa7ada3627f2d965", + "0x000000000000000000000000000000000000000000000000000000000000001c", + "0x4401e6dd46094f4ce5e0e28281b2af0a514405e33d73c9e9fa7ada3627f2d966", + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0x4401e6dd46094f4ce5e0e28281b2af0a514405e33d73c9e9fa7ada3627f2d968", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x4401e6dd46094f4ce5e0e28281b2af0a514405e33d73c9e9fa7ada3627f2d967", + "0xd1c9848fcee5b8769bc1e9944e599eafb6052b5c844a5921aba7770c43a8ca66" + ] + }, + { + "address": "0xde758db54c1b4a87b06b34b30ef0a710dc35388f", + "storageKeys": [ + "0x000000000000000000000000000000000000000000000000000000000000000c", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000009", + "0x0000000000000000000000000000000000000000000000000000000000000007", + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0x0000000000000000000000000000000000000000000000000000000000000005", + "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ] + }, + { + "address": "0x000000000004444c5dc75cb358380d2e3de08a90", + "storageKeys": [ + "0xc12c929f46af23339fb7e3e4ba2db269c4fc755bb309b67b52810a119edeb1be", + "0x81bc99d86a6b273f0c70dce94f5d9ff243f08912178558009cff3f062e8d8b6b", + "0xc4e543aca01822606713330e8427afc774d46516816573bd8d2b045209973709", + "0xdfde6a6e6f1eeb7b7debfd900588a777bdcd250b282e8731bc7458135683d2ac", + "0xa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49", + "0xc4e543aca01822606713330e8427afc774d46516816573bd8d2b045209973708", + "0x84893e0f271e5f8233d24aa85ba38e0d2ed8f0fc8f608c286ccee51e6c35dd6e", + "0x1a795c0a75d5ceaa26c7756c5e06ca05b5d59b2c41ceeb8fa4e3f09a6d0bc060", + "0xc12c929f46af23339fb7e3e4ba2db269c4fc755bb309b67b52810a119edeb1bd", + "0xdfde6a6e6f1eeb7b7debfd900588a777bdcd250b282e8731bc7458135683d2a9", + "0x5bcc8b36d87664ae0eb2b91cea36ac0e9295f8f56c78ede08e9d7bf46eb55c91", + "0xdfde6a6e6f1eeb7b7debfd900588a777bdcd250b282e8731bc7458135683d2aa", + "0x5865dad64d28c23217dfc1e90cbed6db6880f9529e6f0301059bab32f1c04e5f", + "0xc4e543aca01822606713330e8427afc774d46516816573bd8d2b045209973706", + "0xc12c929f46af23339fb7e3e4ba2db269c4fc755bb309b67b52810a119edeb1bb" + ] + }, + { + "address": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0xe8afbef606f9c1f5a0237a5c4fb54cef427f30633998ef02a15753397467a176", + "0xd8d10542f59f82e167831bca7bf3f0a90609ad8493e5a1f1607bc3dc604e238c", + "0x1073d0b88ff257d56e22c17e4713bb4395b316e61a45f1d3bf4923f90fbc927d", + "0x9ee34f2554ffe22ae19ea1cb794f114c757566288c8de8f0e33216262873e071", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000000000000000000000000000000000000000000a", + "0xd06ef82a07326a6e964ce1700825547c428fbc96deb2e33e7e20498001080d7d", + "0x7a464961c125fc990109c53fc6324f805cc788adf74934778792f1f7cfd292ba", + "0xd0fa2da32047813ccedc79eb162bcc5436db34e5426c60f684e73ebc09e55a38", + "0x0000000000000000000000000000000000000000000000000000000000000003" + ] + }, + { + "address": "0xcbe3fefdc43cdb24869097ebd55f881ce2b82065", + "storageKeys": [ + "0x00000000000000000000000000000000000000000000000000000000000018b8", + "0x0000000000000000000000000000000000000000000000000000000000010004", + "0x0000000000000000000000000000000000000000000000000000000000010005", + "0x00000000000000000000000000000000000000000000000000000000000018b9", + "0x0000000000000000000000000000000000000000000000000000000000001a02", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000010003", + "0x0000000000000000000000000000000000000000000000000000000000001a03", + "0x0000000000000000000000000000000000000000000000000000000000001a01", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000010006" + ] + }, + { + "address": "0x454e62e725ad5a47931043f7e6369cfbb879bdfd", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + }, + { + "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "storageKeys": [ + "0xe8cdfc6a5cf2eb5e30054f7f451d1fbd6257950768be7af60941fae5ca16ceb0", + "0x2a306d7595987ab10375e6e054d7489cc80c1cf5351587e21ffbd126573f06c6", + "0xf0bef342da2b79d58016a406cebfa82d46b48b63d70d17a133638ae428e23aa6" + ] + } + ], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x83a643f41da7046a6d04ffde5d9d5eca00485879", + "gas": "0x1117b4", + "gasPrice": "0x4486461", + "hash": "0x907eb5bab8e445aa06afc02e42a1aebcef04f1dd21008e39b1e869ed55fa1e31", + "input": "0xba77aa22000000000000000000000000000000000000000000000000000000000000004000002dc09f1de1310000537f43ecbb2c320a0a1770157c14b400000025e414b40000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000760200000000000000000303a64ef086a71000000000000000000000000000000000000181c7bbec68d12a0d1830360f8ec58fa599ba1b0e9bc02aaa39b223fe8d0a0e5c4f27ead9083c756cc20188de758db54c1b4a87b06b34b30ef0a710dc35388fdac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000000000000000000000000000000000000ee010000000000000000013cba6d5e97102d000000000000000000000000000000000304010000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000640000010400081599e4936d12c46bd48913b2329115cd26cbdda0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000006400000104080000000000000000000000000000000000000000081599e4936d12c46bd48913b2329115cd26cbdd0000000000000000000000000000000000000000000064000001000000000000000000000000000000000000", + "maxFeePerGas": "0x523aba7", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x309", + "r": "0x7de810e2c29aec3d36587d99188a634a167dc82fc14048d5a127f5b67dcbbe83", + "s": "0x3f035e37e9850a75272db28a9df5a329c7469c01b856b75e0a0435a68df3cdb5", + "to": "0xb281622dfe2980baaea97704036f0344d93e611c", + "transactionIndex": "0x13", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x651641299c7ec0aa44ad7ed9b7e12702fed2022f", + "gas": "0x15f90", + "gasPrice": "0x7b7df861", + "hash": "0xd9bf322f078dfffe1e05f92c405ff362131848179a919afb8ca173f7a28ffc94", + "input": "0xa9059cbb00000000000000000000000026bb2a7b5bd19375f1d4e03f5a8f61c13cfc57650000000000000000000000000000000000000000000000004facd3b527c06000", + "maxFeePerGas": "0xba43b7400", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0x1a1a0", + "r": "0x1d970a27822099b3a046b60a61647f892a40f0b2e85d8b5de0bca8907eee07f1", + "s": "0x6b284297c35fb9c920e4751060f78e83e6864d69a16cb8062b7da6273be5d7f", + "to": "0x514910771af9ca656af840dff83e8264ecf986ca", + "transactionIndex": "0x14", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x81b68e9261b170d965569c8a792a864679c11bad", + "gas": "0x12345a", + "gasPrice": "0x4486461", + "hash": "0x9d4fc302fc64c8b97e6e547e87c5681931cc7b30b5e1246c1d34db04a6f364aa", + "input": "0x00000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000004df744a8fe1a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000c7bbec68d12a0d1830360f8ec58fa599ba1b0e9b0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000111111125421ca6dc452d289314280a0f8842a65000000000000000000000000e0554a476a092703abdb3ef35c80e0d76d32939f0000000000000000000000003416cf6c708da44db2624d63ea0aaef7113527c60000000000000000000000000000000000000000000000000000000000000004000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000072407ed237900000000000000000000000011111605ef067242653c980b8f6f1ffe50305afe000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000011111605ef067242653c980b8f6f1ffe50305afe00000000000000000000000081b68e9261b170d965569c8a792a864679c11bad000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000005d92430085a2e66a055ecfb5cd87ce9cebc126348691fb2cf48e97f8f743de6ee10cb41fdc41842c3ff926045ca3800078ca82ee06084a0751129c1436ac6d47ae500000000000000000000000000000000000000057b00054d00053300001a0020d6bdbf78dac17f958d2ee523a2206206994597c13d831ec700a0860a32ec000000000000000000000000000000000000000000000000000000003b9aca000004f051214777a6b3a9a889abfd4c7666bdd2a7ab633293bedac17f958d2ee523a2206206994597c13d831ec700247083527c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef435b99c2108d0309211d0cc05b70d202c0b5df000000000000000000000000129b3d9a0a6e4beab88f5cb1e57995d72a6e24f100000000000000000000000011111605ef067242653c980b8f6f1ffe50305afe000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000057d36d93a69ade4000000000000000000000000000000000000000000000000057ccaed9780a2e8000000000000000000000000000000000000000000000000000000006acc076a0000000000000000000000000000000000000000000000006dceebbff496af3a000000000000000000000000000000000000000000000000000000006acc0717000000000000000000000000000000000000000000000000000000006acc07670000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053c86dd4bdbf4a2b9e89c599a04eae21000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003600000000000000000000000006044eef7179034319e2c8636ea885b37cbfa9aba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000000000000000000000000000000000000000000041641b60c76a8333934bae4a4242edab191e67e1ebc59115cfd21e5ffad7626b212dc2561463700a3b92f268597a0be8cf79f676040bfa32bfc2df4ea3d5303e471b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041399c9210d3461fe11107b00c34815ff7a5320077748f26c816f0cc2c83a388520debced102e842089b6157e03a6305e300ed1fd659390c7caf8f8049fcd16a451c000000000000000000000000000000000000000000000000000000000000000020d6bdbf78c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280a06c4eca27c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2111111125421ca6dc452d289314280a0f8842a650000000000000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x4d170ed", + "maxPriorityFeePerGas": "0x0", + "nonce": "0xa", + "r": "0xa5a4791f2105f929b16f209132c2ccd80608a40661e241fdd380679e70f3223b", + "s": "0x23d05c347e3962431b004b79c6cf98d85b2997b867c86c90212facb88294f4f8", + "to": "0x2f64ff8c5f2d2deeaf84b0a61208eadb07c2de72", + "transactionIndex": "0x15", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x370a7e2d300c14d79d4a7ee07aaca46c4b3012cf", + "gas": "0x206f5b", + "gasPrice": "0x6a67f78", + "hash": "0xae10c8b8445520a5722837711ee40e9e9bc2a832a22593281d249debb8a4cd15", + "input": "0x0a2b8f36000000000000000000000000f70da97812cb96acdf810712aa562db8dfa3dbef00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000e1e1ba22ab11e538ad1db0b8f1f20ae59a5ed431000000000000000000000000e1e1ba22ab11e538ad1db0b8f1f20ae59a5ed4310000000000000000000000000000000000000000000000000000000000001e800000000000000000000000000000000000000000000000000000000000001ee000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000169c9a67f594000000000000000000000000000000000000000000000000000000006acc155a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac443600000000000000000000000000000000000000000000000000000000dacc5a890000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000001a600000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac44360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000044095ea7b30000000000000000000000000000000000001ff3684f28c67538d4d072c2273400000000000000000000000000000000000000000000000000000000dacc5a89000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ff3684f28c67538d4d072c2273400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000018442213bc0b000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac443600000000000000000000000000000000000000000000000000000000dacc5a89000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000017641fff991f000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f0000000000000000000000004a220e6096b25eadb88358cb44068a3248254675000000000000000000000000000000000000000000000000c95b5dde9d5c782100000000000000000000000000000000000000000000000000000000000000a07c20383593b197250fb6d52d0af43c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000004a00000000000000000000000000000000000000000000000000000000000000660000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000009e00000000000000000000000000000000000000000000000000000000000000ba00000000000000000000000000000000000000000000000000000000000000cc00000000000000000000000000000000000000000000000000000000000000de00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000012e0000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000000e4c1fb425e000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac443600000000000000000000000000000000000000000000000000000000dacc5a890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006acc087600000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184af72634f000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac4436000000000000000000000000000000000000000000000000000000000003458400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000ffffffffffffffc50000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490f424000000000000000000000000000000001000276a401a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000bb800001e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184af72634f000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac4436000000000000000000000000000000000000000000000000000000000002076b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000ffffffffffffffc50000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490f424000000000000000000000000000000001000276a401a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800138800003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184af72634f000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac4436000000000000000000000000000000000000000000000000000000000002353700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000ffffffffffffffc50000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490f424000000000000000000000000000000001000276a401dac17f958d2ee523a2206206994597c13d831ec700c3500001f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184af72634f000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000009f6f3991d525015a6f8caf062c83b62fd3ac443600000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000ffffffffffffffc50000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490f424000000000000000000000000000000001000276a401dac17f958d2ee523a2206206994597c13d831ec700138800003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000184af72634f000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000ffffffffffffffc50000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490f424000000000000000000000000000000001000276a401dac17f958d2ee523a2206206994597c13d831ec78000000000010000113dcf4add69999fad8f20f2b63f979bfcc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e48d68a156000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a00000000000000000000000000000000000000000000000000000000000a3484000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040dac17f958d2ee523a2206206994597c13d831ec700000bb8fffd8963efd1fc6a506488495d951d5263988d25c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e48d68a156000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000000000000000000000000000000000000000012cac000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040dac17f958d2ee523a2206206994597c13d831ec701000064fffd8963efd1fc6a506488495d951d5263988d25c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e438c9c147000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000b73d900000000000000000000000072d63a5b080e1b89cc93f9b9f50cbfa5e291c8ac00000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001041679c792000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000001c798614ef4c6a8f8a1aab25785714933e59e963000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a000000000000000000000000000000000000000000000000000000006acc0876000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4103b48be000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000a33da00000000000000000000000006da0fd433c1a5d7a4faa01111c044910a1845530000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a4d92aadfb000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000004a220e6096b25eadb88358cb44068a32482546750000000000000000000000000000000000000000000000000537c54a0d45959e3de34b4902dd4896e539414d0abce2fd5ae5a5aa9394e35affdd00bc1d232238000000000000000000000000000000000000000000000000000000006acc0786000000000000000000000000bee3211ab312a8d065c4fef0247448e17a8da0000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000055edf1b0000000000000000000000000000000000000000000000000000000000000041fd3f35987430f76c1c17278a5d818c8ad9cde84ab691de3dbd5aa3dfae94a403610e23c8ef5087ece989da706b7e78318dca894cd0d40b61370e4c0e2fa135a81c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e48d68a156000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a00000000000000000000000000000000000000000000000000000000000009bc000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000bb8fffd8963efd1fc6a506488495d951d5263988d254a220e6096b25eadb88358cb44068a32482546750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a4d92aadfb000000000000000000000000666fedd4cdd4e890a5ad20e7b60975409435a64a0000000000000000000000004a220e6096b25eadb88358cb44068a3248254675000000000000000000000000000000000000000000000000c978cfc7de5d928921ca86957053138b93efdd23ae67915e29a5efddefe69d775560fa7171c3c4ee000000000000000000000000000000000000000000000000000000006acc0786000000000000000000000000c4d50263c1e89b65b63c830ff93fadc957064fa40000000000000000000000000000000000000000000000000000000000000120000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000130d71dcc024f492000000000000000000000000000000000000000000000000000000000000004164ff955ebe03628bc84c937696f31dc1157230a19b07950309167aeda3a83941110c254483de2bab765571f56ffd56aae762121e2fa084d72bfd60f18c1610111c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008434ee90ca000000000000000000000000f5c4f3dc02c3fb9279495a8fef7b0741da9561570000000000000000000000004a220e6096b25eadb88358cb44068a3248254675000000000000000000000000000000000000000000000000ceb097873080ac8000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49bb43718000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000004a220e6096b25eadb88358cb44068a32482546750000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e1e1ba22ab11e538ad1db0b8f1f20ae59a5ed43100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002154a02ad01ee38510ab19a8e50cf47fbfe4a85c02c56ef3fdf884795806571971000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002154a02ad01ee38510ab19a8e50cf47fbfe4a85c02c56ef3fdf884795806571971000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000419ff2264c784d7c6d6eba0302a41961e8cb53c5af13c610a416485aeccc05b6b54390ce7d32dc717f1711c6bb7100abb818281d8a613119a88b96094c1b58e4fb1b000000000000000000000000000000000000000000000000000000000000000747e83d64981d30927d073320f1b50b09fd35e8002029b48214d02520a22202", + "maxFeePerGas": "0x714231b", + "maxPriorityFeePerGas": "0x25e1b17", + "nonce": "0x93d49", + "r": "0x95a64d4bb66849f2c17e5813975064c0a5a000753b1455d4f17de33099bc4cb8", + "s": "0x4e7c4682f325aa65f670d386c723151a5d59b493e2233dd92fcfec12aabbc782", + "to": "0xccc88a9d1b4ed6b0eaba998850414b24f1c315be", + "transactionIndex": "0x16", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x21a31ee1afc51d94c2efccaa2092ad1028285549", + "gas": "0x35d14", + "gasPrice": "0x3fe32e61", + "hash": "0x83280e6cb94b80a2b582875ca7daba2dedad2efe3758dd759c2bda44a03f8327", + "input": "0xa9059cbb0000000000000000000000009213fe116022c38c5f23c60f763db974ab29182400000000000000000000000000000000000000000000000000000000016caf60", + "maxFeePerGas": "0x2794ca2400", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0xf6806f", + "r": "0x37541aead31e30795cd24007b50a8d20f81578b78bd7c04c8725f794d27ec267", + "s": "0x6705390dd22173d18d20a16287d013674adfae34ca62b68cfbd90024d776f533", + "to": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "transactionIndex": "0x17", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x9696f59e4d72e237be84ffd425dcad154bf96976", + "gas": "0x35d14", + "gasPrice": "0x3fe32e61", + "hash": "0x6b73556f4dc4a1934e1889129e5d1cc1971520f73e6526d0e9568e7052358fb8", + "input": "0xa9059cbb000000000000000000000000e18105f7ea276d6eb9a34403332034244371a58e00000000000000000000000000000000000000000000000000000000060cc460", + "maxFeePerGas": "0x2794ca2400", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x9b3d0e", + "r": "0xe13a570046400db63ed0ee2062d3f34a010e091bf8028baf30cc634d4a7186b4", + "s": "0x173ec71c6db8d14302f7a852172b7559da929cfe1d17c141fb2de53c3794b544", + "to": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "transactionIndex": "0x18", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x63eb96ee40777258ed4bcbb909ff0ef42a0ca0c2", + "gas": "0x5d52b", + "gasPrice": "0x2215c961", + "hash": "0x4bee516dca6f4d561f31a439b89175300380c81121924e6dc00fb31d8b56f4f7", + "input": "0x39ecce490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003160aa84306c2f478abc000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005cf5ddeadeb9557d0b03e5b1c8d6a4be8516a56f00000000000000000000000066a9893cc07d91d95644aedd05d03f95e1dba8af00000000000000000000000052f0e24d1c21c8a0cb1e5a5dd6198556bd9e12030000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000056f73a2c6d34696eff111fff94addf92a1bc6aec00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000019d12ec70204000000000004444c5dc75cb358380d2e3de08a900000000000000000000000000000000000000055084e948c715309821ccb285933e30b4d599883000000000000000000000000a5b89778c6c21905958240546a008f170717edac0000000000000000000000007f77bad9eb06373fe3aee84f85a9d701ff820eeb000000000000000000000000000000000000000000000000000000000000005500000000000000000000000000000000000000000000000000000000000009c40000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006acc074c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000004125e16a35bc1bf8ebe8e97319a8344588b41cf7a080937f05cdc8c69c49cb491d2f9519b408e40363260f0a0f46aa47b27640d1e9dcbb188f0a3612a0592e75a31c00000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x2ac2c9a8", + "maxPriorityFeePerGas": "0x1dcd6500", + "nonce": "0x1f9", + "r": "0x2653a7db4d9cf4584384db706d74fbb9443d4e3d0ced1e9e124b904399c11dad", + "s": "0x996eb4153a4a01e4e420d4d44de9a1592293c15fd3caed4251f6380b3d73bf4", + "to": "0x227be0f88ecb7899a0e6e0347888b909d622c8e1", + "transactionIndex": "0x19", + "type": "0x2", + "v": "0x1", + "value": "0x7c585087238000", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xbae8a5448840ba97281c2bd298e8f4f44957f8ec", + "gas": "0x7530", + "gasPrice": "0x4486461", + "hash": "0x9108c84128aa4fdede1fec54951e610c424606f0c7852a24b66b58abbdc946f6", + "input": "0x", + "maxFeePerGas": "0x4d170ed", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x1b9", + "r": "0xd7b393d2ae41853529b8497596ee4f300c6cd1a0dd463b8c5b3b8d0c6a49e0eb", + "s": "0x7bee89d990eed4b1b62e42cbabca3dfd69668c2c60f015ad6b0a8f1b23c0be78", + "to": "0xad6c623d5ea7776d8a3bead10a513ca6bccb5381", + "transactionIndex": "0x1a", + "type": "0x2", + "v": "0x0", + "value": "0x2386f26fc10000", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xad6c623d5ea7776d8a3bead10a513ca6bccb5381", + "gas": "0xe4c40", + "gasPrice": "0x4486461", + "hash": "0x4f6713a27efabb5a133a54a96cc6048b3b30d35cd1d01150b146c24268f88379", + "input": "0x00000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000003f31f0a70b700000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000111111125421ca6dc452d289314280a0f8842a65000000000000000000000000e0554a476a092703abdb3ef35c80e0d76d32939f0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000072407ed237900000000000000000000000011111605ef067242653c980b8f6f1ffe50305afe000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000011111605ef067242653c980b8f6f1ffe50305afe000000000000000000000000ad6c623d5ea7776d8a3bead10a513ca6bccb5381000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000005d9149ce28fcdc8b13ba9379789e76348caf275eec864be11d3cc4712e27a35654294f295b7cceb8e739cf47eb0f9e721ac0605f93d1ad87a60c4d14a393175abee00000000000000000000000000000000000000057b00054d00053300001a0020d6bdbf78a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800a0860a32ec000000000000000000000000000000000000000000000000000000003b9aca000004f051214777a6b3a9a889abfd4c7666bdd2a7ab633293bea0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800247083527c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef435b99c2108d0309211d0cc05b70d202c0b5df000000000000000000000000129b3d9a0a6e4beab88f5cb1e57995d72a6e24f100000000000000000000000011111605ef067242653c980b8f6f1ffe50305afe000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000057f0d6434b3dab0000000000000000000000000000000000000000000000000057c85058fbe6289000000000000000000000000000000000000000000000000000000006acc077c000000000000000000000000000000000000000000000000792121d6f141480f000000000000000000000000000000000000000000000000000000006acc0727000000000000000000000000000000000000000000000000000000006acc077700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b31ef4b04ead4205b396c083751af8bc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003600000000000000000000000006044eef7179034319e2c8636ea885b37cbfa9aba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000000412ff51f0ee9d310e40cb229a17bac2517db12fd53b750cfbf53d16156ba9bcc754d1a1fd3964679511e4454ca07bb716940cd3b44fb0c9e505adb36240df055aa1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a22cae7db796da498f794dfe66689bdf53d0129c2433dcc996af4199b821f2f10bfed3b89840a74ac50357c446e176573541e515f6f08c5b2844ebfb2f64043d1b000000000000000000000000000000000000000000000000000000000000000020d6bdbf78c02aaa39b223fe8d0a0e5c4f27ead9083c756cc280a06c4eca27c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2111111125421ca6dc452d289314280a0f8842a650000000000000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x4d170ed", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x6", + "r": "0xecb81a8e26ef6666d0d0a2ea3861714baee8568a30bf61467e3712ffea2eafe2", + "s": "0x5216725b6b7637b984f76208ba15ca47e5f108edb06145c7b3c48188afd918a3", + "to": "0x2f64ff8c5f2d2deeaf84b0a61208eadb07c2de72", + "transactionIndex": "0x1b", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x012182b03cf82e0f5339711c56fe9abdb3aa5dd4", + "gas": "0x62ba4", + "gasPrice": "0x4486461", + "hash": "0xd322976db341b5dcb6d5b3890994bcd4c56d2ccdac051401271a1bd4882403db", + "input": "0xdefe4b18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039772d019ed525f667a7cbbf8e64b07120378402000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e87b96b5ecaa60000000000000000000000000000000000000000000000000000000000022ab00000000000000000000000000000000000000000000000000000000000022b140000000000000000000000000000000000000000000000df4d3ccf9d277092c7", + "maxFeePerGas": "0x890c8c2", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x10d", + "r": "0x8a2fea0fc179500855713ef9b9626328f16c3131e4f9b82417cb0b77629b04f6", + "s": "0x1967e5ecae8fa191bcf203f0538f5fab0e470e42ec9b4349e13c27a8fc4a8552", + "to": "0xe5c83462262a5d32d12c2a835fa1c46f58400d0f", + "transactionIndex": "0x1c", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x719a143654a0c4621f49fa77077800ef3f5c3b40", + "gas": "0x4f930", + "gasPrice": "0x682d13e", + "hash": "0x65084b10171cfa32747042653684f0b1ed09945871d64552a044fab017b055a9", + "input": "0x34fcd5be0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008487517c45000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000023617e59a5925b2a4bf75d73ff6711cd0b29de85000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000006af394380000000000000000000000000000000000000000000000000000000000000000000000000000000023617e59a5925b2a4bf75d73ff6711cd0b29de8500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000067a3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006acc0e430000000000000000000000000000000000000000000000000000000000000004020c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000001bedd21da4879400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000001b5ed30891e10700000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000030b060e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039772d019ed525f667a7cbbf8e64b071203784020000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026aced607465f85cf8d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000039772d019ed525f667a7cbbf8e64b07120378402000000000000000000000000719a143654a0c4621f49fa77077800ef3f5c3b400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000039772d019ed525f667a7cbbf8e64b07120378402000000000000000000000000719a143654a0c4621f49fa77077800ef3f5c3b400000000000000000000000000000000000000000000000000000000000000000756e6978000001a12cfc32d6800096710000000c0200000000000000", + "maxFeePerGas": "0x7895bc6", + "maxPriorityFeePerGas": "0x23a6cdd", + "nonce": "0xd84", + "r": "0x818254c13a2093d76d1910b6553a228ec3766eddfccce28ba5dffc7a26ed8e20", + "s": "0x1fcdc520495b71c7ce48834850c5e65290a1ccf290d84b3ec666efbfb8bad3d4", + "to": "0x719a143654a0c4621f49fa77077800ef3f5c3b40", + "transactionIndex": "0x1d", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x012182b03cf82e0f5339711c56fe9abdb3aa5dd4", + "gas": "0x3b280", + "gasPrice": "0x1ae128bc", + "hash": "0xe9d67a6edee44d81ac7ecdb714c95ca8063f2857406b4e64c30458c7700b5c9a", + "input": "0x2578bb2a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039772d019ed525f667a7cbbf8e64b071203784020000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000164fb428455703c1960000000000000000000000000000000000000000000000000000000000022ab00000000000000000000000000000000000000000000000000000000000022b140000000000000000000000000000000000000000000000df4d3ccf9d277092c700000000000000000000000000000000000000000000000009c857271efbb6930000000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x1f298d1d", + "maxPriorityFeePerGas": "0x1698c45b", + "nonce": "0x10e", + "r": "0x1ee9493aa1e9b0c5b033ef2e0b4c3fd8f0262311d2b6f43d397c959797cf4276", + "s": "0x36320e275bd647c753262f1e00f72e8b0356a8251135da8d69827d74ebdb5840", + "to": "0xe5c83462262a5d32d12c2a835fa1c46f58400d0f", + "transactionIndex": "0x1e", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xfeed4c53d827aebebed6066788065ea1027c7e70", + "gas": "0x989680", + "gasPrice": "0x8bfceef", + "hash": "0x3adcfbcab8caef0056be087b8d6ac51f3b350e86c90abcb1bc54ba6b2211c883", + "input": "0x0af210a1000000000000000000000000549fad7794d331ea0e1675cd7e60ce6931914457", + "maxFeePerGas": "0xc8e3b24", + "maxPriorityFeePerGas": "0x4776a8e", + "nonce": "0x4062", + "r": "0x84e6b4b7be4eea4089a2a7f1162d0be71b791b7e698e75599efb33fe8632dc18", + "s": "0x2bdec3e98bd8ccc11d80be2f758e4d67126c503026144aadf95d2f5bcb1cfed8", + "to": "0x7583d7f36635e5642713accbded717ca59fdad07", + "transactionIndex": "0x1f", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x56eddb7aa87536c09ccc2793473599fd21a8b17f", + "gas": "0x35d14", + "gasPrice": "0x3fe32e61", + "hash": "0xf0b5b9724e1b7703280c896bb9728cfc5acdef88e026382faeec611dc5216f93", + "input": "0xa9059cbb000000000000000000000000cb95c8b5e59752212a1007f08e9bf29087dcf4d40000000000000000000000000000000000000000000000000000000000e52fe0", + "maxFeePerGas": "0x2794ca2400", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x9f7c05", + "r": "0x3f9aba381196f3837b07faccedca55ecd1557c1241dd56addb14d64b39be99e0", + "s": "0x1c1debc132918680d0bf4878cf8120c5b1ef2ac96c5da0e35c3b0ec116fe5141", + "to": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "transactionIndex": "0x20", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xf33368d19b095242f287b1264e97f51e29333301", + "gas": "0x7b0c", + "gasPrice": "0x7b7df861", + "hash": "0x1d5a2b0babab560e1d80139d3560c6316d3e191d64a771b345bff49faf4c9cbf", + "input": "0x", + "maxFeePerGas": "0x7fd5c297", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0x20da", + "r": "0xa9a339d8c14dad2e58963fabb9dfdfd45b6026ce25ad0e1141eaa12e99a79ac9", + "s": "0x7884b2ddfce464bbd9cd9c9b64066f749d7fc30195073b8147933c89123534b3", + "to": "0x200687b8ca8faa06e8e5195ca59e560f77ae371c", + "transactionIndex": "0x21", + "type": "0x2", + "v": "0x0", + "value": "0xa5293cf5489a", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xdfd5293d8e347dfe59e90efd55b2956a1343963d", + "gas": "0x32918", + "gasPrice": "0x3fe32e61", + "hash": "0xd6e3f6c2ab820eac08435656c3c2fae19694c17edf458838b89e2883e818c6b9", + "input": "0xa9059cbb0000000000000000000000000051cc1d8bbf0b3373b02e22ea5a2fe483266cea000000000000000000000000000000000000000000002a10abaa68904fb30000", + "maxFeePerGas": "0x2794ca2400", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0xed4511", + "r": "0x10a35d535584e4d9b30db116411ef65d9f773b7cd13f4e03f973c008d78dabcb", + "s": "0x651bce6daf411c1d2da7045f69704e04144495dccef28ff919ccd68c6d12ba7b", + "to": "0x57e114b691db790c35207b2e685d4a43181e6061", + "transactionIndex": "0x22", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xabb2acd3be814a80e502575d6c1dc5f789e9cd10", + "gas": "0xffa8f", + "gasPrice": "0x6a67f78", + "hash": "0xdf35818dd30d24f5e8a81d0a4e2758370dd4415ef24e7de2ac403e7925896726", + "input": "0x0a2b8f36000000000000000000000000f70da97812cb96acdf810712aa562db8dfa3dbef00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000f68a74b14f153691b47d3af277cb70e42689cb27000000000000000000000000f68a74b14f153691b47d3af277cb70e42689cb2700000000000000000000000000000000000000000000000000000000000021200000000000000000000000000000000000000000000000000000000000002180000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000001e1cdf38ce3a000000000000000000000000000000000000000000000000000000006acc15590000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000bd634d50000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000001d00000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000044095ea7b30000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000bd634d5000000000000000000000000000000000000000000000000000000000000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001ae4e21fd0e900000000000000000000000000000000000000000000000000000000000000200000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f996000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000017a000000000000000000000000000000000000000000000000000000000000019e000000000000000000000000000000000000000000000000000000000000016d4d7a5c6b52756e795f680b0f7e0c2f21281dde6ef0000000000000000000000000bd634d50000000000000000000000000bd634d5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000412a86b9dfb250c487a4234ab7e4e4dd8df097283f1f0818235bf7b913f272e2bf622b9f1183671914090d9314868532493b1983b97bdf3e4247efca0b3de9a8401b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015c0000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000b3eb2300000000000000000000000000c6db7790000000000000000000000000bd634d500000000000376fd4550ecfd1ced4c1c0000000000000000000000000000003a213633ddeba8910000000000000000000000000000000000000000001111110f0f73c0b2ef09ec012eae758b3e03a9020000000000000000000000001111110f0f73c0b2ef09ec012eae758b3e03a902000000000000000000000000000000000000000000000000000000006acc0bf800000000000000000000000000000000000000000000000000000000000015a0000000000000000000000000000000000000000000000000000000000000000261f598cd00000000000000007b0e2e8300899b647d5ebc66f9d4fa3f16c5406191dd734600000000000000007b0e2e8300899b647d5ebc66f9d4fa3f16c54061000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000be00000000000000000000000000000000000000000000000000000000000000d200000000000000000000000000000000000000000000000000000000000001360000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48800000000000000000000000000000c60000000000000000000000000bd634d5000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000bd634d5a008eba300000000000100015c9193efd0d9af71cf6bd812afc73a21978e5e7f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f9960000000000000000000000000000000000000000000000000000000000000a20000000000000b535aeb27335b91e1b5bccbd64888ba7574efbf880000000000a0000000000000000000000000000000aa232009084bd71a5797d089aa4edfad40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000052000000000000000000000000000000000000000000000000000000000000005e000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000000000000000000000000000000000000000000760000000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000008e000000000000000000000000000000000000000000000000000000000018f5aac000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8551449d75c99fdc7944270a2d490ab7133b86d3fdeff72807a32f30c5ef0e3842909bd271b5d0c9a9cf99f50d08c18e32fc54174ce2211d8353038c9b107125e1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aaa000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb88b870ef2160f756943d536624cbfea13bf4bcdb7528f6a29ceddf308a791324b4ff852ed7190de110a770a8902286fec4ba6b920365ed8ff314e01dd23307f9e1b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa4000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb82c323a94d6220de81dda124ecc83df4a91ae28182864f98d8319aa78cb882f5f79809111931907e7ab557a159dde64a91526ee47868a319eee8911fbd13672b31b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb890fb5bb158d62e57312b4bebb85c30ee149b92878dc600f4048c0db46680cdc65b45af99591cfe76e3a1afc808baf5abde5934096dfe57958ab9b79aa652d5d71c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aad000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb86937179c2f9cc6d18198bca60e9839de7f1167bcf68c5775428f0a95998c826d56d99b7b7f9d9afd5e398a6ef00d6d9ff7e053c83f85d1f6d14909bbd59a911d1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb873f25c6fb66b9fd3609014dfd51ef0b7e28d3ba049beb88b9bb84854583972b03982cef4e838c9064335fa3ef3bf73d3c69b614b0b23d337aaa0bb9da6d766551b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa3000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8ffa26ef827c23315d2debd53597c431d38c2a5c3494f5b7b86c3ad85d279c0dc363f0c228d67293a75a822b4b9583f5a9eca731742f160766058e2d5b044a87e1c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa7000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8f0c7f232ca6b6422e83e14dc83045697349a0e2012c800d2886696f7935c5feb189b2d1779f59a0c0f442313db1a0522ea4d09b4be0718d7eeafc36e60925bf81c000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8500ef3b48a9953448014b8468d74d1bda15cc0a19b2360c1c4cf564534adcc9810ff1f6114836a8154de945af1d4d294934f01858bf135c18d9816f7e5fc02141b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aab000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb8672d641dca5f9a3f331476ab8270fcadf820c7a021d9d41563f6a080d497d041729393964e7c4e0857e038223bdca8f59efea41d13d3d2d235ca130063cde9cf1b000000000000000000000000000000000000000000000000000000000000000000000000000000018f5aa8000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000552252f216f4a494a87025123425181ca1bb754fb82e359551b3f6a09e328d95e8385638a198bf351649f24486876b1873c13a79b87de9734a6840559fb2327d28e3b88892ed3b3825d1d5983add3fb678c87e7d691c0000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28000000000000000000000124be605a9000000000000000001172e9e9bde5d1400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000001172e9e9bde5d140000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8000000000000000000000124be605a9000000000000000001172e9e9bde5d14000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000001172e9e9bde5d14736e774d0000000000000003069c11bfc769be175bfae2d20bddce34e46514cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f9960000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000004444c5dc75cb358380d2e3de08a900000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172e9e9bde5d1400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000057bd63f35933ffdd5cc74d04564d0aeab16a85a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000a6cc4ffa9ebaefd8ab7d3d018b0ae31ec5b760cc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000050000000000000000000000000000000100eed0b5000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000001172e9e9bde5d14736e774d0000000000000003069c11bfc769be175bfae2d20bddce34e46514cc00000000000000000000000000000000000000000000000000000000000000800000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f9960000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000004444c5dc75cb358380d2e3de08a900000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172e9e9bde5d1400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000057bd63f35933ffdd5cc74d04564d0aeab16a85a4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000a6cc4ffa9ebaefd8ab7d3d018b0ae31ec5b760cc00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000050000000000000000000000000000000100eed0b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057bd63f35933ffdd5cc74d04564d0aeab16a85a48000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000057bd63f35933ffdd5cc74d04564d0aeab16a85a4000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f000000000000000000000000000000000000000000000000000000000bd634d500000000000000000000000000000000000000000002408b06a7cd3e1f9a3e440000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008f10b468b06c6fd214b65f87778827f7d113f9960000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000bd634d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb7b22536f75726365223a2272656c61792d666f6d6f222c22416d6f756e74496e555344223a223139372e343630343135222c22416d6f756e744f7574555344223a223139342e363030373536222c22416d6f756e744f7574223a2234313838363838373234383235373132373835393638313535222c22526f7574654944223a2236663665616636327644354562356e7a3a3530663831373732726a6442624c7744222c2254696d657374616d70223a313739313735363130347d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b92fe925dc43a0ecde6c8b1a2709c170ec4fff4f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a49bb43718000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000100000000000000000000000057bd63f35933ffdd5cc74d04564d0aeab16a85a40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f68a74b14f153691b47d3af277cb70e42689cb27000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021b5bdd0bdaeeb754dce92d550784a10c534f35f71fd98632963090e30165719710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021b5bdd0bdaeeb754dce92d550784a10c534f35f71fd98632963090e301657197100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041eb9a3e4619c45f3a2ece6eae69a415578d9959607423eef7bb6fde4cdf17419b61e54252b73e906f61b838cd5207d4df2e784304442dc63ceb21bcc6c7c8e3ec1c00000000000000000000000000000000000000000000000000000000000000afc97078fb96716334356346390001a91c78a1e9852b97d70dce2318dbcd2651", + "maxFeePerGas": "0x714231b", + "maxPriorityFeePerGas": "0x25e1b17", + "nonce": "0x76d2e", + "r": "0xfc6a986787cb765b69756e7e19ae438b639fd4d4900f139270b80ed80d1c83a1", + "s": "0x68a5068428b55c30cbef263d6eb77400c75a9972b72a46077670435bce66529d", + "to": "0xccc88a9d1b4ed6b0eaba998850414b24f1c315be", + "transactionIndex": "0x23", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xd9745c183dcf7b6945c514e97685826c5083a1b5", + "gas": "0x29ae4", + "gasPrice": "0x7b7df861", + "hash": "0x8bc4d81c8c474aa816c58a57ba7b16db7910d4e0c5f4fb0c43b654b8a96f4ad0", + "input": "0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006acc0df500000000000000000000000000000000000000000000000000000000000000020b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000008e1bc9bf0400000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000d9745c183dcf7b6945c514e97685826c5083a1b5000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000074ee873f208b34e33d88da48300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000026f45c6d6bfdd89d37a8856838c2141348334e0f0000000000000000000000000000000000000000000000000000000000000000756e6978000001a12cfaec08800097800000000c0100", + "maxFeePerGas": "0x7d0d0f50", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0xca", + "r": "0x37320d97c70b4d11d8f85bf90cc1e0c81c888f3a2eb7dc6e9ad2bd4ab401c6", + "s": "0x7fb64f40d9f008e2ce11a7963c1a440c48821d849f35e7cb63abefd81f58e7f2", + "to": "0x23617e59a5925b2a4bf75d73ff6711cd0b29de85", + "transactionIndex": "0x24", + "type": "0x2", + "v": "0x0", + "value": "0x8e1bc9bf040000", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x0c9a2c621bc7bae524143c515c78a6fd09a1d8bf", + "gas": "0xb5dd", + "gasPrice": "0x7b7df861", + "hash": "0x88fcb47f39883bb47028790c6bf2e7bbd3242371dfea96cddbee0418abd0b4ba", + "input": "0xa22cb4650000000000000000000000002f18f339620a63e43f0839eeb18d7de1e1be4dfb0000000000000000000000000000000000000000000000000000000000000001", + "maxFeePerGas": "0x7d625371", + "maxPriorityFeePerGas": "0x77359400", + "nonce": "0x241", + "r": "0x8709143267c7c8ac70203e5197bb2f171936151ed5c36c5258813b84d3960a0", + "s": "0x15813a516c0147733aad922fef87f3704a7d8dbb6831d9c8a694ab8e2ba3b181", + "to": "0xf4768ee87bd5e6a84c3bd4ae6cc9c3f4305bf376", + "transactionIndex": "0x25", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "authorizationList": [ + { + "address": "0x7702cb554e6bfb442cb743a7df23154544a7176c", + "chainId": "0x1", + "nonce": "0x22f", + "r": "0xa047a931fbb936ac2ef252c11d33ec68f6dfcdc96b15827065f2c6c234ec8512", + "s": "0x19ec963659e502ee2d125d8487650e341bec36ef0dba2b0ce841a3316f10f30d", + "yParity": "0x1" + } + ], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xbc1c99a2791a0b0829e80e0a21957045efb13d54", + "gas": "0x44c36", + "gasPrice": "0xa3e4561", + "hash": "0xe67fde7a9a29b3a6b835da29a455d23d961ded579bc9b85d36853bb3d0a08bc7", + "input": "0xda9c8680000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e7200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000079a33f950b90c7d07e66950daedf868bd0cdcf96ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001046f2de70e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000bc1c99a2791a0b0829e80e0a21957045efb13d540000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f85210b21cc50302f477ba56686d2019dc9b67ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041dfa7696122dd7193cdb86eb2a0a2a8dda8eab9f473ef1d8ba0df4f19af499c88282a1e2b67dc3d2822cf562ed52a8ce3e9242d7c9a95872a73f37cd0d18fcb6f1b00000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0xac06a35", + "maxPriorityFeePerGas": "0x5f5e100", + "nonce": "0x22e", + "r": "0x28f11c93be58e3afff8afe44c104a3e1efa1eda19eab89c8d01ea9df6c74852b", + "s": "0x5cca4624c51f73de8da5b1a50b133727cafb6ae7c441bd96078565a008357df5", + "to": "0xbc1c99a2791a0b0829e80e0a21957045efb13d54", + "transactionIndex": "0x26", + "type": "0x4", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x450bd857ca398d91625e199307d9591cb7c01969", + "gas": "0x8a31b", + "gasPrice": "0x3bcd63c9", + "hash": "0x28fbb52414acba35ef24ca1ad962ad5a596bd868623eb48af3c10572e16a44e9", + "input": "0xac9650d80000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000000c4f7020405000000000000000000000000641e9341e7d6c648973412460a63039888ad7b48000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000e7eef000000000000000000000000000000000000000000000000000000000000251c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b5d077e79ce20327c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e4002a3e3a000000000000000000000000450bd857ca398d91625e199307d9591cb7c01969000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000060000000000000000000000000bd216513d74c8cf14cf4747e6aaa6420ff64ee9e000000000000000000000000000000000000000000000000000000006acc0e4c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000641e9341e7d6c648973412460a63039888ad7b48000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000006af3944400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041ee2b09737597eb31244a104ad7d3d80b10d0c493717259eb6c768b954f59b0a52ffa009eb3d17d7152be07cf2c8741e18dc69d749f38ddd187f66942fac9d13c1c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000364dd46508f0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000006acc0e4f0000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002020d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000641e9341e7d6c648973412460a63039888ad7b48000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000e7eef000000000000000000000000000000000000000000000000000000000000251c0000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff284d400000000000000000000000000000000000000000000000000000000000d7b2c00000000000000000000000000000000000000000000000000004abb40dac3290000000000000000000000000000000000000000000006a908a60e8a2e51861b0000000000000000000000000000000000000000000000000000000000035bc1000000000000000000000000450bd857ca398d91625e199307d9591cb7c01969000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000641e9341e7d6c648973412460a63039888ad7b48000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x3ca36d01", + "maxPriorityFeePerGas": "0x3784ff68", + "nonce": "0x25f", + "r": "0xd34f1d657c56d2acf19262b91441bf52297c1b549ed232cc0a79cebf16396b47", + "s": "0x1a8c911b624560b7393fc9e770f6ffcb56c6112b008f7ddd8a0a0276146c9a4e", + "to": "0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e", + "transactionIndex": "0x27", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x6017f75108f251a488b045a7ce2a7c15b179d1f2", + "gas": "0x57d0", + "gasPrice": "0x3fe32e61", + "hash": "0x72e6c269b3a58e0e2634abdd1187078c436b733990b2366a973263226c21bf40", + "input": "0xfc01551220a853d245582b0eb0ae616f06737d67f2af7a855c027105fb1308f26e313f28a6", + "maxFeePerGas": "0xb2d05e00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0xce92", + "r": "0x6c4dd666a25a9b21e0653707abb1f9f2de9ec8d98c73bb3326c08fbbd4b2ee1e", + "s": "0x6fdb56927c0d7dbdc6250cc03a1e950191e07f115ffc3adf205d031ee1b16351", + "to": "0xff000000000000000000000000000000000420fc", + "transactionIndex": "0x28", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x28c6c06298d514db089934071355e5743bf21d60", + "gas": "0x32918", + "gasPrice": "0x3fe32e61", + "hash": "0x88fe5ac9628f5c0d65ba729d261e8c1bede69b574836f59d4c530663bbc72bde", + "input": "0x", + "maxFeePerGas": "0x2794ca2400", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x11d0c30", + "r": "0x3f96838679221b43ab050a8e8cf2c06dbc62a0c45db8578388fc8b53dde01b2a", + "s": "0x4cf0168d470c3f62e5e9fa422115ce37e7d40dcce7cbf927b275a075869de5e4", + "to": "0xbd356fdf50e273e646cfd865a6ab48e84dc20b5a", + "transactionIndex": "0x29", + "type": "0x2", + "v": "0x1", + "value": "0x90fc0283a383c00", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x28c6c06298d514db089934071355e5743bf21d60", + "gas": "0x35d14", + "gasPrice": "0x3fe32e61", + "hash": "0x5e3edc4eb5e65de3b8c928191d57382ea80f7bf558b72cbfff33c3c76861533d", + "input": "0xa9059cbb000000000000000000000000ce40ca8fe241adde08c5b4ffb7fbf64edcdd9ec200000000000000000000000000000000000000000000000000000000598c1668", + "maxFeePerGas": "0x2794ca2400", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x11d0c31", + "r": "0x6861d29b36cac0bc29bce5f8c5e1c30eafb2f10ce5f1baca40f1b673acb5b789", + "s": "0x64d80eb3694bda762dac43e2348872ad113cdfcda8dbb6ad2b935a6e687561f0", + "to": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "transactionIndex": "0x2a", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x28c6c06298d514db089934071355e5743bf21d60", + "gas": "0x32918", + "gasPrice": "0x3fe32e61", + "hash": "0xf968db64e5bc39409d83e6a6db5f22aefd150222e0b7a1e78556e65d8cf94fc6", + "input": "0xa9059cbb000000000000000000000000dfd5293d8e347dfe59e90efd55b2956a1343963d0000000000000000000000000000000000000000000012426a4763da85360000", + "maxFeePerGas": "0x2794ca2400", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x11d0c32", + "r": "0x94a7b32595304ca09dac328c4f75a319792953d49c8368d0ace4039f3cab5773", + "s": "0x31f9c388a014f787176026e3a97f2b89263253c727d14c4422a885f5fbd70eaf", + "to": "0x69af81e73a73b40adf4f3d4223cd9b1ece623074", + "transactionIndex": "0x2b", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x49b38424d3bef76c6b310305ffa0a6ec182b348b", + "gas": "0x6b4d1", + "gasPrice": "0x190e57c7", + "hash": "0x62bb4e908ab5b196112e5999da6e3a0c5e76bc7f5c6820750dbe6dc304ba14a8", + "input": "0x9ddba085000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000f2c295aaaf4ba8cda307e23edaf31fad0c0ac3840000000000000000000000000000000000000000000000000000000006422c40000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001242b5e16c4000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000006422c400000000000000000000000009d557f9a3867d0dc36e6241ff8a7313df0748a8000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000008f9b000000000000000000000000000000000000000000000000000000000000005268747470733a2f2f6170692e6d65726368616e74706179642e636f6d2f75706c6f6164732f6e66742f65386366636333622d306139652d343736372d393230612d3464393033323034373666662e6a736f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x4542", + "r": "0x84c73c1d871de8818f2ffb1599c2608bb68a55f7048e583a6c2f00f15258352c", + "s": "0x3dac6cc69ac1ca1d2fbb6f836785c2e2db648708a2eefda50de276b51050d2a5", + "to": "0x8cd81e14cd612fb5dab211a837b6f9ce191ad758", + "transactionIndex": "0x2c", + "type": "0x0", + "v": "0x25", + "value": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x969823e6ada482a0c908bf6ba1005e84726b3ae3", + "gas": "0x5b04", + "gasPrice": "0x3b9aca00", + "hash": "0xfbbdb4f6d431862d7de50f9faf1f3111a844788eff26489df3d446a210ec26c3", + "input": "0x", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x3b", + "r": "0xc4c3010f2eb718a6d0061c930ed30e0aacb5c05f69a8e07e2164aa4448081bc1", + "s": "0x2db43211a2e8e8f2d7b71026d66f18917355008582a10ab8be78806f879b6f34", + "to": "0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43", + "transactionIndex": "0x2d", + "type": "0x2", + "v": "0x0", + "value": "0x2c523ef81699779", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xa5ef56c2abbd32a8886eaed736a9ac1aa89e6db6", + "gas": "0x5b04", + "gasPrice": "0x3b9aca00", + "hash": "0xb793e797639549efdb068ba9d1918f23400e221dfc72adaf042448df931572f5", + "input": "0x", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0xbe", + "r": "0x213e18cdc3ab9c4b5aa953683206aec3cd15f0773ac256ca887a65b64abc3224", + "s": "0x20d5519f6196cd432228d6eb845fd663ace43eebb20f736ae2ef09d83c30086d", + "to": "0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43", + "transactionIndex": "0x2e", + "type": "0x2", + "v": "0x1", + "value": "0x2c4ffcec0dd7c30", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x2ab97f1caad221cd80adab1e8b8417f0902847fa", + "gas": "0x5b04", + "gasPrice": "0x3b9aca00", + "hash": "0x9470a335e2e0e05f54630373b9fdd0fa6d61107c9fe8b2785b47b4ba14bfccce", + "input": "0x", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x1c", + "r": "0xdc8ce05acd67fa267a14efadca4a61ae90643b7ddba66086e9c4d694aaf53ee9", + "s": "0x33a34d213a8b42263932db9998c3761af91afe131ff7f924e05db827a201a28e", + "to": "0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43", + "transactionIndex": "0x2f", + "type": "0x2", + "v": "0x1", + "value": "0x2c4f022f311940c", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x853c6b56f75f2f56132511b99d1793ea85542adb", + "gas": "0x5208", + "gasPrice": "0x3b9aca00", + "hash": "0xeb67b4eb32bc9adcb0ff2062a167d7501eb075bfe7f4198079aaba75d3d16a6c", + "input": "0x", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x0", + "r": "0x4b4ec7b6d2eed3ea7ffacca790c9585d88e80ef605e14df8883247f02af90090", + "s": "0x2aec012952c242ffbd8569a6b923f1c45d5c4699f906a843c22dc7542c7997bf", + "to": "0xb5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f511", + "transactionIndex": "0x30", + "type": "0x2", + "v": "0x1", + "value": "0x2c50c0b07a0b000", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xe5d93724d835ded71ca4b0bf3355136df8be91ca", + "gas": "0x5208", + "gasPrice": "0x3b9aca00", + "hash": "0xe450f3799d198e3cae02205d48f2d01b384242cd3fdfab75217822e15f8aa9cb", + "input": "0x", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0xa", + "r": "0x5322cc866a4b96ed7f462e8ea42ec28f31120a20be79ad6cdf38dd91e92381f0", + "s": "0x115183f002453d5dca51d0f5da20f78063b9c602863e66e22d424036b2d2fea4", + "to": "0xb5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f511", + "transactionIndex": "0x31", + "type": "0x2", + "v": "0x1", + "value": "0x2c504d750f4d53c", + "yParity": "0x1" + }, + { + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xdb6a8518192b1036705147dfcb40f07f3715925d", + "gas": "0x55f0", + "gasPrice": "0x3b9aca00", + "hash": "0x7b5a8771c204b11813186fd08d842ad3cb977bad43aebde1eb2e0542dfaf8199", + "input": "0x", + "nonce": "0x0", + "r": "0xfa034011283f00d688e3deb526cfefd79ad9a84eb6513ff35365481a9259c315", + "s": "0x53575f6a7dba4ab28366e56230dabd578ea998b18fc3cc89de1b096d175b8998", + "to": "0x3f3ee0a9cac2d01db44001eca3e8382fbe40207b", + "transactionIndex": "0x32", + "type": "0x0", + "v": "0x25", + "value": "0x3f1ad15a67a400" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x91887f7cda18a2f9c26a9f9b8f32549852719e34", + "gas": "0x5208", + "gasPrice": "0x3b9aca00", + "hash": "0x6c41ca8a2b108fe33ed932847e037fe2dd68e696a98daeeb56e2f3e4400a2a5f", + "input": "0x", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x0", + "r": "0x5485c4f3df28a7d347316f9c60a15afeb663d5b7b48646ca082d41f470c9fed0", + "s": "0x5679bdfd45abda0421fbc9c857bd2d2b46dcbdf008bf7a77d9e128668b5ed8e7", + "to": "0xb5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f511", + "transactionIndex": "0x33", + "type": "0x2", + "v": "0x0", + "value": "0x2c4e74f00067400", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x1dc7e43a8615b6eb57ef3f0cd6ba89a41802eea3", + "gas": "0x5208", + "gasPrice": "0x3b9aca00", + "hash": "0x55dc19dbc261f4882ae625a0ec615b5b156cc0f7dbe71eaca8a81aa4455132eb", + "input": "0x", + "maxFeePerGas": "0x3b9aca00", + "maxPriorityFeePerGas": "0x3b9aca00", + "nonce": "0x15", + "r": "0x1c7376f0e552b68599f3488385cf3885e8a53f21d6b3296817872eda49061aae", + "s": "0x2d57d802a56e3c11469c18d1d6ef1bc40633a4396b875293d5b53298abf5ae78", + "to": "0xb5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f511", + "transactionIndex": "0x34", + "type": "0x2", + "v": "0x0", + "value": "0x2c53985daed2480", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x42e7f5135742de29be932dc35b85c7563d96aabe", + "gas": "0xdec64", + "gasPrice": "0x5ec5400", + "hash": "0xc5074775506dd1e8bb3c919b9e7b31eed5a13405dab34ba675091698ddf4ebd4", + "input": "0x810c705b000000000000000000000000071e944d0ec39b4f8fdc3903824bb99c86cc41c000000000000000000000000069460570c93f9de5e2edbc3052bf10125f0ca22de00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746a52880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000964b6ba374a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000d074ca77d5d44ee0b911eb65c130e06a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000746a5288000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1cd55d8ecb7d881fe770fcbdac68a3489dacc810000000000000000000000000000000000000000000000000000000000004e510000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000032b0000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001142696e616e63655765623357616c6c65740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000040aa958dd87fc8305b97f2ba922cddca374bcd7f0000000000000000000000008feab81d36e7576107d5de0758c1b839be31b4f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746a528800000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001040d5f0e3b00000000000000003bbb542869460570c93f9de5e2edbc3052bf10125f0ca22d00000000000000000000000000000000000000000000000000000746a52880000000000000000000000000000000000000000000000000000000000000004eb600000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000c7bbec68d12a0d1830360f8ec58fa599ba1b0e9b7777777711118000000000000000000000000000000000000000000000004f1c7777777711110000000000647fc8fd8bb3192e2d62a3d8d97d9a7924d4bae58b00000000000000000000000000000000000000000000000000000000000000000000000000000000933597a323eb81cae705c5bc29985172fd5a3973000000000000000000000000000000000000000000000000000000000000759600000000000000000000000000000000000000000000000000000000000000380000000000000000000000007b35137a7c329b79c183848295947a68063cf5f10000000000000000000000000000000000000000000000000000000000004e5100000000000000000000000042e7f5135742de29be932dc35b85c7563d96aabe0000000000000000000000000000000000000000000000000000cf3b26f615fa000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000002c00030100110100000000000000000000000000055730010013030000000000000000000000000000000cf85000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000d074ca77d5d44ee0b911eb65c130e06a000000000000000000000000000000000000000000000000000000000000003800000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042e7f5135742de29be932dc35b85c7563d96aabe00000000000000000000000042e7f5135742de29be932dc35b85c7563d96aabe000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000032b00000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002000000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e000000000000000000000000000000000000000000000000000017e53e5437f80000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000006acc93e3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x6fe6d18", + "maxPriorityFeePerGas": "0x1a3ef9f", + "nonce": "0x11", + "r": "0x280ad802ce9fcad56fb18d82d5404718393295ce8ffe272b6f93679e1578464c", + "s": "0x272e48e1e408bc29ec4eba9c32f668d7c5ac10658d3ac9668e75ebc6b6dfb14e", + "to": "0xb300000b72deaeb607a12d5f54773d1c19c7028d", + "transactionIndex": "0x35", + "type": "0x2", + "v": "0x1", + "value": "0xd681cc1e95fa", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x00030021cefa00f00024ceeaad3bc9000055002d", + "gas": "0x489a8", + "gasPrice": "0x4486461", + "hash": "0xfa7ed674a3afc900b20d25cf208b05fde2128c62c13571cf0238f2772f79f0b8", + "input": "0x48c8949100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000086020489a821ca004dbc251c02dac17f958d2ee523a2206206994597c13d831ec7467bccd9d29f223bce8043b84e8c8b282827790f1103000000397b1803000064000001000002000000000000000000000000000003000d48000022000203000000000000000000000000000002f359492d26764481002ed88bd2acae83ca50b5c903010000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0x4b60804", + "maxPriorityFeePerGas": "0x0", + "nonce": "0xcf5", + "r": "0x1418653da7d2d6ba7398a6b5adc77fa4d11dc4b3290a25bedcebb0a2fa2f9c90", + "s": "0x6e03218748e321f8250af58749fe5be78c218e1b5f786d4d3158ba0bfec127b2", + "to": "0x000000000004444c5dc75cb358380d2e3de08a90", + "transactionIndex": "0x36", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xd1d3a3680ec8e326e6bd27bf325f90057bbc8969", + "gas": "0x11182", + "gasPrice": "0x15567ead", + "hash": "0x1d998f609cd208a82625c04170527677d3fadbe3cc2bc2393f744413b8ed51fc", + "input": "0x095ea7b300000000000000000000000040aa958dd87fc8305b97f2ba922cddca374bcd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "maxFeePerGas": "0x155f8551", + "maxPriorityFeePerGas": "0x110e1a4c", + "nonce": "0x71", + "r": "0xf209111a7e523c6616769a104c56ecff686be5ecb2d901227630b716f21aa1fc", + "s": "0x3f9795cd92e630f2349794ce8036adeed7241c23a25034481a305ef6ee576487", + "to": "0x53d0ea0a685220718dc6a0a6e4617194c6f37921", + "transactionIndex": "0x37", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xd1d3a3680ec8e326e6bd27bf325f90057bbc8969", + "gas": "0x57dce", + "gasPrice": "0x15567ead", + "hash": "0x66d5ab78de9196ffed9ca47264712600650e3f8094b629178b89bac4cbcb9225", + "input": "0x0c307f7600000000000000000000000000000000000000000000000000407faf37072000000000000000000000000000d1d3a3680ec8e326e6bd27bf325f90057bbc896900000000000000000000000053d0ea0a685220718dc6a0a6e4617194c6f37921000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000000000000000000000001a1d24d4d765046620a0000000000000000000000000000000000000000000000000027e0a3ee4bb1c1000000000000000000000000000000000000000000000000000000006acc099800000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000053d0ea0a685220718dc6a0a6e4617194c6f379210000000000000000000000000000000000000000000000000000000000000001000000000000000000000000caf0beadeaefc66fef60ac6526ab566d58c8647a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000caf0beadeaefc66fef60ac6526ab566d58c8647a0000000000000000000000000000000000000000000000000000000000000001800000000000000000012710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000053d0ea0a685220718dc6a0a6e4617194c6f3792100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009c400000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee3ca20afc2bbb0000004c4b407797c4a7f786f77dbce13d71d2c710310cb92aa3", + "maxFeePerGas": "0x155f8551", + "maxPriorityFeePerGas": "0x110e1a4c", + "nonce": "0x72", + "r": "0x6acba6c5df698596f27983190382b64a16ea120c9e143c472af9754de6c94442", + "s": "0x608f0c000d0ae6f1febcc2216adc8092d9ece88c31c8b112057c7a211d638241", + "to": "0x8feab81d36e7576107d5de0758c1b839be31b4f6", + "transactionIndex": "0x38", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x67a392c7d92005a91b79ddd2e7a231cc9d88fd01", + "gas": "0x927c0", + "gasPrice": "0xa3e4561", + "hash": "0x52742c65f95076f5bac167da0bff6df659224b251fbf30c1c1846ec107dbe5f0", + "input": "0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006acc0e49000000000000000000000000000000000000000000000000000000000000000210040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003060c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002000000000000000000000000014d6c649292c5c9790c5196d1a9ea039307947a100000000000000000000000095669a6589a81a6704bab1020722d0c4058418850000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dbe4f5f7e64000000000000000000000000000000000000000000001db742540d3270d2fdfd00000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000095669a6589a81a6704bab1020722d0c40584188500000000000000000000000000000000000000000000000000000dbe4f5f7e640000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000014d6c649292c5c9790c5196d1a9ea039307947a10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000095669a6589a81a6704bab1020722d0c40584188500000000000000000000000067a392c7d92005a91b79ddd2e7a231cc9d88fd010000000000000000000000000000000000000000000000000000000000000000", + "maxFeePerGas": "0xfe45725", + "maxPriorityFeePerGas": "0x5f5e100", + "nonce": "0x6", + "r": "0xa027152306a482270b98c59a2cab5bf4a9ab69cd6b73c20f9c95a3bcd13dc599", + "s": "0x305e9812222c2cc678d9e41106437710cfbc492c57d096f6674fa1f69251091a", + "to": "0x66a9893cc07d91d95644aedd05d03f95e1dba8af", + "transactionIndex": "0x39", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [ + { + "address": "0x6e9965973aebd5e3853255fcd84640b2b4c5a3f8", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + }, + { + "address": "0x833f894f100958a26ca65c73101d026b95573b75", + "storageKeys": [ + "0x55dda8973e4870d103d7e2815978fb891f053e751d23dc0aaa4c432eb51b54c9", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + }, + { + "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "storageKeys": [ + "0xec660e1e080fb1f28dab280c0cb6555838471a4a0a0e01e95c0406ebfaaf3f49", + "0xf340893e72982448967f3c332f0c36261437cc70d08c1b408bf9ecc5c74f68f9", + "0x9940617968d45f510fdd3fbe7e1293beb47f8e0a5ac90fb6a1fe78ed0c9ba323" + ] + }, + { + "address": "0x2bfa9542b61ac7e91fe7802c07282bb22cdf0c89", + "storageKeys": [ + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85031", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85028", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad4", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85033", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f8502a", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85032", + "0x4e1593e5aa4f9d9e691bea12e25a3342f90dbd2140915e4c9ff9f49e285f9d5e", + "0xfa3458b510bde9a608a4f317b82460f4ce7f7e5cecc79b8881832f12d0759d5e", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f8502b", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad3", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85027", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85034", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f8502d", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85030", + "0x4e1593e5aa4f9d9e691bea12e25a3342f90dbd2140915e4c9ff9f49e285f9d60", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85029", + "0x2212320300ae856d5a1bd51edb8c8f89d8ecaed8f67c2534036296885962e056", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x2212320300ae856d5a1bd51edb8c8f89d8ecaed8f67c2534036296885962e057", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f85035", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f8502f", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f8502e", + "0xdcbb09c2c59bf89ab4cd2fc8b084284471bc380a8b6dc7c6f03b6a5572bcabb2", + "0x405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2", + "0x4e1593e5aa4f9d9e691bea12e25a3342f90dbd2140915e4c9ff9f49e285f9d5f", + "0xcfeb298edfdff41c5f25ef1807163005b5b01d4338fd84c4217a03d470f8502c" + ] + }, + { + "address": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", + "storageKeys": [ + "0xc5f97796fce280efe20400e44b0f0176c26cab97d05a31019bb7216ac0842d3f", + "0xcfc54e8fcfde34198cafe627b21fcbfb2b8d7c0cc71c6def5eaf4ab4f5231475", + "0x72ed84c161946f627622700d5a9a9b5c7bd5bb3de6480b5eb052f957a91a5856", + "0x0000000000000000000000000000000000000000000000000000000000000005", + "0xb580fffe186ea679ec391a36abe34dcd53e8d8b908779ad7b219f82677e5aff6" + ] + }, + { + "address": "0x55347b4ab701ab54ee394f20020175bb385ca725", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000007", + "0x0000000000000000000000000000000000000000000000000000000000000005", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000009", + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0x000000000000000000000000000000000000000000000000000000000000000c" + ] + }, + { + "address": "0x454e62e725ad5a47931043f7e6369cfbb879bdfd", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000000" + ] + }, + { + "address": "0x31eda5529b8f219243e8248eff368bc36a3f5975", + "storageKeys": [ + "0xffe102d655c40d7f65c020a1b19bc035502d52c3cda43a417efa84f597e885b8" + ] + }, + { + "address": "0xe6ff8b9a37b0fab776134636d9981aa778c4e718", + "storageKeys": [ + "0x000000000000000000000000000000000000000000000000000000000000001a", + "0x0000000000000000000000000000000000000000000000000000000000000004", + "0x45535383af58844c9b7fdbadf71ca9b4ce52effab822ce042e9d1881c8a07805", + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000000000000000000000000000000000000000001b" + ] + }, + { + "address": "0xae8be68169c18cc6b35b3c62fbfeb372ea25c97d", + "storageKeys": [ + "0x000000000000000000000000000000000000000000000000000000000000417d", + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x000000000000000000000000000000000000000000000000000000000000417c", + "0x0000000000000000000000000000000000000000000000000000000000010005", + "0x0000000000000000000000000000000000000000000000000000000000010004", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000041ca", + "0x00000000000000000000000000000000000000000000000000000000000041cb", + "0x00000000000000000000000000000000000000000000000000000000000041cc", + "0x0000000000000000000000000000000000000000000000000000000000010006", + "0x000000000000000000000000000000000000000000000000000000000000417b", + "0x0000000000000000000000000000000000000000000000000000000000010003" + ] + }, + { + "address": "0xdb36b3bb54f4987b8b6710987019d30775f4d5fd", + "storageKeys": [ + "0x0000000000000000000000000000000000000000000000000000000000000004" + ] + } + ], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x0378916e819080c0393fb838f7f0569bdcf8f18e", + "gas": "0xd5adb", + "gasPrice": "0x4486461", + "hash": "0x6804a25eb535130b95a2c4691edda0069f96995b8af70f560b9532c5a2a48160", + "input": "0x0b620d5f0000000000000000000000000000000000000000000000000000000000000040000023bf6260282900000d69a82115f9320a0a1770157c14b400000025e414b400000000000000000000000000000000000000000000000000000000000000760200000000000000000167f1c81185bc5c00000000000000000000000000000000000180e6ff8b9a37b0fab776134636d9981aa778c4e718c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2018955347b4ab701ab54ee394f20020175bb385ca7252260fac5e5542a773aa44fbcfedf7c193bc2c59900000000000000000000", + "maxFeePerGas": "0x523aba7", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x183", + "r": "0x27973d11f274082455b86a4cc672f075e0c4beae61dc00ac7012d73a759c1e3a", + "s": "0x3a8d0cc3d875e61c939b1afd3000d38f50cc68d4ddebd631fa2b1b27fd147fb9", + "to": "0x11d0e4671f1d6069470af1069d33ff3f1b8930c7", + "transactionIndex": "0x3a", + "type": "0x2", + "v": "0x0", + "value": "0x0", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0x8d02bb7ffd0ae9f6cf9004f290edcc96cd58ba16", + "gas": "0x5208", + "gasPrice": "0x929e4d1ce", + "hash": "0x6135f5f834b23661069841db0ea59d46bfe02dddfcbe94dac325d36f2ef3c17e", + "input": "0x", + "maxFeePerGas": "0x929e4d1ce", + "maxPriorityFeePerGas": "0x9259c6d6d", + "nonce": "0x12447", + "r": "0x663c089a0521280d2c15c963a1d82d61ffd12e2333858d55c2638ecb24e150c9", + "s": "0x33fd623777f236a6c755adc382b11086fd27a899d4e375324c849f1435659e3c", + "to": "0x8d02bb7ffd0ae9f6cf9004f290edcc96cd58ba16", + "transactionIndex": "0x3b", + "type": "0x2", + "v": "0x1", + "value": "0x0", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xfb74767c1ce1aada0a0e114441173b57f8c1571b", + "gas": "0x715e", + "gasPrice": "0x4486461", + "hash": "0x2f546b270dd589108047fc59b6a523b7158b7377b584fe191ed86a34515952cd", + "input": "0x6acc074b99e096f18fbff2808f7388859b387fdd056a3589", + "maxFeePerGas": "0x4486461", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x5fc15", + "r": "0x3c7c733579e5a0d65947f2f8a1536b69d526cc5ce824aac6f026b21cd821cb9f", + "s": "0x7f6ff4f8e59146f7858bbb0f86a7912d1f0c13bdb5fd39be3e624723df36e691", + "to": "0xfeeeeee44046c3f61a8cc081e0918ef0de0a7ffc", + "transactionIndex": "0x3c", + "type": "0x2", + "v": "0x0", + "value": "0xe38c1ab5e8dd", + "yParity": "0x0" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xfb74767c1ce1aada0a0e114441173b57f8c1571b", + "gas": "0x715e", + "gasPrice": "0x4486461", + "hash": "0x33dd6bead16bcfb343cdde8be926a80ba464f6e5e53adc98565f0d1bab6de648", + "input": "0x6acc074b965df5ff6116c395187e288e5c87fb96cfb8141c", + "maxFeePerGas": "0x4486461", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x5fc16", + "r": "0xc3f7c7070fb3fceb50738c108af1392879d68d24e434a55453e3c546927752f8", + "s": "0x68f1059964faab5e2bc345aa701f4a95a27478675f545d8b54164fa774291f51", + "to": "0xfeeeeee44046c3f61a8cc081e0918ef0de0a7ffc", + "transactionIndex": "0x3d", + "type": "0x2", + "v": "0x1", + "value": "0x3753897277e2", + "yParity": "0x1" + }, + { + "accessList": [], + "blockHash": "0xcde2412ad5744cc0e92890f7867479cd4b8c4350a4ecc52b236c2e3fcfe338f5", + "blockNumber": "0x18f5aa4", + "blockTimestamp": "0x6acc074b", + "chainId": "0x1", + "from": "0xfb74767c1ce1aada0a0e114441173b57f8c1571b", + "gas": "0x715e", + "gasPrice": "0x4486461", + "hash": "0x328be2c929193a78eb8438a868a3fbbca87add4c391c2c4627c2511ff8a72fff", + "input": "0x6acc074be887312c0595a10ac88e32ebb8e9f660ad9ab7f7", + "maxFeePerGas": "0x4486461", + "maxPriorityFeePerGas": "0x0", + "nonce": "0x5fc17", + "r": "0x531d013663f88a15ce69060ea34c3afca5ad86e369acf6e21bdf9b0ce16e9f8b", + "s": "0x56a745ce4da6a60c41830f0dd9f15d1fecd11f03bc96f64ac9ac0493ecd983e7", + "to": "0xfeeeeee44046c3f61a8cc081e0918ef0de0a7ffc", + "transactionIndex": "0x3e", + "type": "0x2", + "v": "0x0", + "value": "0x146e9c1e8ed9a1", + "yParity": "0x0" + } + ], + "transactionsRoot": "0x34741d43350dcaac473c1f20ae5f594dcb5627ef7d52bedb3740b75f9c64aede", + "uncles": [], + "withdrawals": [ + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd1eecc", + "index": "0x8b6bd2b", + "validatorIndex": "0x212002" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd1e94f", + "index": "0x8b6bd2c", + "validatorIndex": "0x212003" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd20ef3", + "index": "0x8b6bd2d", + "validatorIndex": "0x212004" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd20747", + "index": "0x8b6bd2e", + "validatorIndex": "0x212005" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd1b9b4", + "index": "0x8b6bd2f", + "validatorIndex": "0x212006" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd21ed9", + "index": "0x8b6bd30", + "validatorIndex": "0x212007" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd20ea7", + "index": "0x8b6bd31", + "validatorIndex": "0x212008" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd1f7d9", + "index": "0x8b6bd32", + "validatorIndex": "0x212009" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd20edd", + "index": "0x8b6bd33", + "validatorIndex": "0x21200a" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd1f6ae", + "index": "0x8b6bd34", + "validatorIndex": "0x21200b" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd1fe02", + "index": "0x8b6bd35", + "validatorIndex": "0x21200c" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd1ffc7", + "index": "0x8b6bd36", + "validatorIndex": "0x21200d" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd226f5", + "index": "0x8b6bd37", + "validatorIndex": "0x21200e" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd1f730", + "index": "0x8b6bd38", + "validatorIndex": "0x21200f" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd206d6", + "index": "0x8b6bd39", + "validatorIndex": "0x212010" + }, + { + "address": "0xf02d53d62af4e5c1e0769c36ed0353b29b443c58", + "amount": "0xd226cc", + "index": "0x8b6bd3a", + "validatorIndex": "0x212011" + } + ], + "withdrawalsRoot": "0x8d587e41052f6aeed6c65301bd94237eae2cd12f68c98ae570e833f4eacf8377" + }, + "eth_getCode:[\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",\"0x18f5ca9\"]": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029", + "eth_getCode:[\"0xbc1c99a2791a0b0829e80e0a21957045efb13d54\",\"0x18f5ca9\"]": "0xef01007702cb554e6bfb442cb743a7df23154544a7176c", + "eth_syncing:[]": false, + "eth_getBlockByNumber:[\"0x18f5ca9\",false]": { + "number": "0x18f5ca9", + "timestamp": "0x6acc1f87", + "stateRoot": "0x19ab7a8a51a4ca980abb9b4921da3d749fe259866661de3b1bf33e18dcd0244e" + }, + "eth_getProof:[\"0x853c6b56f75f2f56132511b99d1793ea85542adb\",[],\"0x18f5ca9\"]": { + "address": "0x853c6b56f75f2f56132511b99d1793ea85542adb", + "accountProof": [ + "0xf8918080808080a03cb9c5288118490ffbd29c6527aa745765d4e501aafd210417eeaed608e3b4288080a0095563fdb9b37e5055c18e248381993e02a9277368c6895fd51c46277f8488458080808080a058df7bd631eb855ce853049de719942e02173ecc92b6251b2bd0d82f6cb14a43a0a1355462e4f9306d54f66a3385b11bcf8260a9cb87e5e628d2ba97636870039280", + "0xf869a0384c5ba2a0ed3f8eef89323f37cb1be17b8cdadf5282f902813f4a8749a046d0b846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + ], + "balance": "0x0", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "nonce": "0x1", + "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "storageProof": [] + }, + "eth_getProof:[\"0x000000000000000000000000000000000000dead\",[],\"0x18f5ca9\"]": { + "address": "0x000000000000000000000000000000000000dead", + "accountProof": [ + "0xf8918080808080a03cb9c5288118490ffbd29c6527aa745765d4e501aafd210417eeaed608e3b4288080a0095563fdb9b37e5055c18e248381993e02a9277368c6895fd51c46277f8488458080808080a058df7bd631eb855ce853049de719942e02173ecc92b6251b2bd0d82f6cb14a43a0a1355462e4f9306d54f66a3385b11bcf8260a9cb87e5e628d2ba97636870039280", + "0xf869a03e87802413d7ef2c0aca6eaaa9d44d0c79ccf07d8808832e4f05d1441a4f7af8b846f8448080a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" + ], + "balance": "0x0", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "nonce": "0x0", + "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "storageProof": [] + }, + "eth_getProof:[\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",[],\"0x18f5ca9\"]": { + "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "accountProof": [ + "0xf8918080808080a03cb9c5288118490ffbd29c6527aa745765d4e501aafd210417eeaed608e3b4288080a0095563fdb9b37e5055c18e248381993e02a9277368c6895fd51c46277f8488458080808080a058df7bd631eb855ce853049de719942e02173ecc92b6251b2bd0d82f6cb14a43a0a1355462e4f9306d54f66a3385b11bcf8260a9cb87e5e628d2ba97636870039280", + "0xf869a03679e8eda65bd257638cf8cf09b8238888947cc3c0bea2aa2cc3f1c4ac7a3002b846f8440180a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0d0a06b12ac47863b5c7be4185c2deaad1c61557033f56c7d4ea74429cbb25e23" + ], + "balance": "0x0", + "codeHash": "0xd0a06b12ac47863b5c7be4185c2deaad1c61557033f56c7d4ea74429cbb25e23", + "nonce": "0x1", + "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "storageProof": [] + }, + "eth_getProof:[\"0xbc1c99a2791a0b0829e80e0a21957045efb13d54\",[],\"0x18f5ca9\"]": { + "address": "0xbc1c99a2791a0b0829e80e0a21957045efb13d54", + "accountProof": [ + "0xf8918080808080a03cb9c5288118490ffbd29c6527aa745765d4e501aafd210417eeaed608e3b4288080a0095563fdb9b37e5055c18e248381993e02a9277368c6895fd51c46277f8488458080808080a058df7bd631eb855ce853049de719942e02173ecc92b6251b2bd0d82f6cb14a43a0a1355462e4f9306d54f66a3385b11bcf8260a9cb87e5e628d2ba97636870039280", + "0xf86ba03660f3e4ba2623057153320bfbe80c6d3a8b888389f71259646de244f87df296b848f84682023280a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0b69486085287804568fa5f5b2023f0433289dec044bae17ac71ac2d8225c64c6" + ], + "balance": "0x0", + "codeHash": "0xb69486085287804568fa5f5b2023f0433289dec044bae17ac71ac2d8225c64c6", + "nonce": "0x232", + "storageHash": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "storageProof": [] + } + } +} diff --git a/exposure-report/fixturi/vectori.txt b/exposure-report/fixturi/vectori.txt new file mode 100644 index 0000000..ec11f3a --- /dev/null +++ b/exposure-report/fixturi/vectori.txt @@ -0,0 +1,16 @@ +# Real, public vectors of the quantum exposure report, one per line; roles and provenance in alese.json (recorded 2026-10-11). +# A never-spent address is historical or ownerless; every other Bitcoin address had no remaining balance on the recording date. +# Ethereum: a sender from block 26172068 (type 0x2, balance zero on the recording date), the burn address 0x...dEaD, the WETH contract, and the +# authority of the EIP-7702 authorization in the same block. Nothing here says anything about who holds an address. +p2pk:0496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858ee # p2pk +19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA # p2pkh_cheltuit +1dyoBoF5vDmPCxwSsUZbbYhA5qjAfBTx9 # p2pkh_necheltuit +bc1q0ht9tyks4vh7p5p904t340cr9nvahy7u3re7zg # p2wpkh_cheltuit +3C1aVMk3dHci3rn6DjhZGK5j7cp9nAD4S9 # p2sh_multisig_cheltuit +bc1qm38emw4p965sjhd5h7ktxggrhe034n9a2c4rcr5gkwynjuadfh2q9amddu # p2wsh_multisig_cheltuit +bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0 # p2tr_cheltuit +bc1p725jqhdu6dnxf22rc8k6qxf6hhzl0m76z7g37x4lg22ufa3ln2psaq76sq # p2tr_nefinantat +0x853c6b56f75f2f56132511b99d1793ea85542adb # ethereum_expeditor +0x000000000000000000000000000000000000dead # ethereum_primitor +0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 # ethereum_contract +0xbc1c99a2791a0b0829e80e0a21957045efb13d54 # ethereum_autoritate7702 diff --git a/exposure-report/limbaj.mjs b/exposure-report/limbaj.mjs new file mode 100644 index 0000000..a8114d8 --- /dev/null +++ b/exposure-report/limbaj.mjs @@ -0,0 +1,31 @@ +// limbaj.mjs (quantum exposure report, C12): the LANGUAGE GATE. The report has exactly two classification labels, and a short list of +// words it must never use about an address, because each of them promises something that cannot be read from a chain (section 2.2, +// N8, of the project document). This is the one file that names those words, so the source scan of the test excludes it. +// +// verificaLimbaj(text) -> [] when clean, else the list of { word, index, context } hits (every hit, not the first) + +export const ETICHETA = Object.freeze({ + EXPUSA: 'exposed (on-chain evidence)', + FARA_DOVADA: 'no on-chain evidence of exposure', +}); +export const ETICHETE = Object.freeze([ETICHETA.EXPUSA, ETICHETA.FARA_DOVADA]); +/** the state of an address the tool could not classify; it is NOT a label, it says the measurement did not happen */ +export const NEMASURAT = 'unmeasured'; + +// case-insensitive patterns, bounded by letters and digits only: a hyphen or a space before or after does NOT shield a word ("PQ-safe", +// "fully-protected", "well-secured", "quantum-safe-signatures" are caught), and the compounds are caught written with a hyphen, a space or +// nothing ("quantum resistant", "quantumproof", "post-quantum-safe", "quantum-secure", "trust-less"); every form of "guarantee" / +// "guarantor"; "safely", "safer", "safest", "safety", "safekeeping"; "secure", "secured", "securely". The bare verb "protect", the noun +// "protection" and "security" (CNSA 2.0 is cited as a profile for "national security systems") are not on the list: the tool's own +// negations ("it does not protect ...") and citations must stay clean. Measured on 2026-10-12 before it was put here: zero hits on the +// tool's publishable sources (after one README negation was reworded) and on the reports of mode 1 and of the four adapters on the +// recorded fixtures; every form the previous list missed is caught +const INTERZISE = ['safe(?:ly|r|st|ty|keeping)?', 'unexposed', 'protect(?:ed|s|ing)', 'secure(?:d|ly)?', 'guarant\\w*', 'trust[\\s-]?less', '(?:post[\\s-]*)?(?:quantum|pq)[\\s-]*(?:safe|proof|resistant|secure)']; +const RX = new RegExp('(? --gata --contor [--port N] +// [--gol] every request is answered with an error / empty body (negative control: not "no evidence") +// [--mut] every connection is closed without an answer (negative control: a timeout is not "no evidence") +// [--suprascrie f] a JSON whose `raspunsuri` are merged over the fixture's (negative control: a planted spend); for +// Esplora, a value { "_status": N, "_corp": "text" } is served with that HTTP status and body; for +// Electrum (features, tip, history, a header at a height) and Ethereum, a value +// { "_eroare": { code, message } } is served as that JSON-RPC error +// [--plafon-s N] the mock exits by itself after N seconds (default 600) +// A script the fixture does not hold is answered as an index answers a script never used (Electrum: an empty history; Esplora: zero +// counts and an empty page for /address/:a and /scripthash/:h) and is counted in `unknown`: the sibling scripts the report reads beside +// each address were not recorded with the fixtures (README, Test). The tip (Electrum blockchain.headers.subscribe; Esplora +// /blocks/tip/height, /block-height/:h, /block/:hash/header), the genesis block (Electrum server.features; Esplora /block-height/0), the +// block at a checkpoint height (Electrum blockchain.block.header; Esplora /block-height/:h), the chain of a Bitcoin Core node +// (getblockhash, getblockcount) and the state of an Ethereum account at the head (eth_getProof, eth_getCode at the head number) are +// served from the fixture, or from --suprascrie; a height or a method the fixture does not hold is answered with an error. +// Listens on 127.0.0.1 only. Writes { port, pid } to --gata when listening. Nothing here reaches any network. +// A mock never outlives the process that started it: it checks every second that its parent is still alive (process.ppid changes when +// the parent dies on POSIX, where the orphan is adopted; on Windows the parent's pid is probed) and exits when it is not, and it exits in +// any case at the time cap; a test killed in the middle leaves no listener behind. +import fs from 'node:fs'; +import net from 'node:net'; +import http from 'node:http'; + +const arg = (k, d = null) => { const i = process.argv.indexOf(k); return i >= 0 ? process.argv[i + 1] : d; }; +const are = (k) => process.argv.includes(k); +const FEL = arg('--fel'); const FIX = arg('--fixtura'); const GATA = arg('--gata'); const CONTOR = arg('--contor'); const PORT = Number(arg('--port', '0')); +if (!FEL || !FIX || !GATA || !CONTOR) { console.error('usage: --fel electrum|esplora|bitcoind|eth --fixtura f --gata f --contor f [--port N] [--gol] [--mut] [--suprascrie f]'); process.exit(2); } +const fix = JSON.parse(fs.readFileSync(FIX, 'utf8')); +const R = { ...fix.raspunsuri }; +if (arg('--suprascrie')) Object.assign(R, JSON.parse(fs.readFileSync(arg('--suprascrie'), 'utf8')).raspunsuri || {}); +const GOL = are('--gol'), MUT = are('--mut'); +const PARINTE = process.ppid; +const parinteViu = () => { if (process.ppid !== PARINTE) return false; try { process.kill(PARINTE, 0); return true; } catch (e) { return e.code !== 'ESRCH'; } }; +setInterval(() => { if (!parinteViu()) process.exit(0); }, 1000).unref(); +setTimeout(() => process.exit(0), Math.max(5, Number(arg('--plafon-s', '600'))) * 1000).unref(); +const contor = { fel: FEL, connections: 0, requests: 0, unknown: [] }; +const scrieContor = () => fs.writeFileSync(CONTOR, JSON.stringify(contor) + '\n'); +scrieContor(); + +function raspunsElectrum(j) { + if (GOL) return { jsonrpc: '2.0', id: j.id, error: { code: -32000, message: 'mock: no answer (--gol)' } }; + if (j.method === 'server.version') return { jsonrpc: '2.0', id: j.id, result: ['mock-electrum/' + (fix._sursa ? fix._sursa.cand : '?'), '1.4'] }; + if (j.method === 'server.features') { const k = 'server.features'; if (R[k] && R[k]._eroare) return { jsonrpc: '2.0', id: j.id, error: R[k]._eroare }; if (R[k]) return { jsonrpc: '2.0', id: j.id, result: R[k] }; contor.unknown.push(k); return { jsonrpc: '2.0', id: j.id, error: { code: -32601, message: 'mock: no features in the fixture' } }; } + if (j.method === 'blockchain.scripthash.get_history') { const k = 'blockchain.scripthash.get_history:' + j.params[0]; if (R[k] && R[k]._eroare) return { jsonrpc: '2.0', id: j.id, error: R[k]._eroare }; if (R[k]) return { jsonrpc: '2.0', id: j.id, result: R[k] }; contor.unknown.push(k); return { jsonrpc: '2.0', id: j.id, result: [] }; } + if (j.method === 'blockchain.headers.subscribe') { const k = 'blockchain.headers.subscribe'; if (R[k] && R[k]._eroare) return { jsonrpc: '2.0', id: j.id, error: R[k]._eroare }; if (R[k]) return { jsonrpc: '2.0', id: j.id, result: R[k] }; contor.unknown.push(k); return { jsonrpc: '2.0', id: j.id, error: { code: -32601, message: 'mock: no tip in the fixture' } }; } + if (j.method === 'blockchain.transaction.get') { const k = 'blockchain.transaction.get:' + j.params[0]; if (R[k]) return { jsonrpc: '2.0', id: j.id, result: R[k] }; contor.unknown.push(k); return { jsonrpc: '2.0', id: j.id, error: { code: -32603, message: 'mock: unknown transaction' } }; } + if (j.method === 'blockchain.block.header') { const k = 'blockchain.block.header:' + (j.params && j.params[0]); if (R[k] && R[k]._eroare) return { jsonrpc: '2.0', id: j.id, error: R[k]._eroare }; if (Object.hasOwn(R, k)) return { jsonrpc: '2.0', id: j.id, result: R[k] }; contor.unknown.push(k); return { jsonrpc: '2.0', id: j.id, error: { code: 1, message: 'mock: no header at this height in the fixture' } }; } + return { jsonrpc: '2.0', id: j.id, error: { code: -32601, message: 'mock: unknown method' } }; +} +function raspunsBitcoind(j) { + if (GOL) return { result: null, error: { code: -32603, message: 'mock: no answer (--gol)' }, id: j.id }; + if (j.method === 'getblockhash') { const k = 'getblockhash:' + (j.params && j.params[0]); if (Object.hasOwn(R, k)) return { result: R[k], error: null, id: j.id }; contor.unknown.push(k); return { result: null, error: { code: -8, message: 'Block height out of range' }, id: j.id }; } + if (j.method === 'getblockcount') { const k = 'getblockcount'; if (Object.hasOwn(R, k)) return { result: R[k], error: null, id: j.id }; contor.unknown.push(k); return { result: null, error: { code: -32601, message: 'mock: no block count in the fixture' }, id: j.id }; } + if (j.method === 'scantxoutset') { const d = j.params && j.params[1] && j.params[1][0] ? String(j.params[1][0].desc || j.params[1][0]) : ''; const m = /^addr\(([^)]+)\)/.exec(d) || /^(raw\([0-9a-f]+\))/.exec(d); const k = 'scantxoutset:' + (m ? m[1] : d); if (R[k]) return { result: R[k], error: null, id: j.id }; contor.unknown.push(k); return { result: { success: true, unspents: [] }, error: null, id: j.id }; } + if (j.method === 'getrawtransaction') { const k = 'getrawtransaction:' + j.params[0]; if (R[k]) return { result: R[k], error: null, id: j.id }; contor.unknown.push(k); return { result: null, error: { code: -5, message: 'No such mempool or blockchain transaction' }, id: j.id }; } + return { result: null, error: { code: -32601, message: 'Method not found' }, id: j.id }; +} +function raspunsEth(j) { + if (GOL) return { jsonrpc: '2.0', id: j.id, result: null }; + const k = j.method + ':' + JSON.stringify(j.params || []); + if (Object.hasOwn(R, k) && R[k] && typeof R[k] === 'object' && R[k]._eroare) return { jsonrpc: '2.0', id: j.id, error: R[k]._eroare }; + if (Object.hasOwn(R, k)) return { jsonrpc: '2.0', id: j.id, result: R[k] }; + contor.unknown.push(k); + return { jsonrpc: '2.0', id: j.id, error: { code: -32000, message: 'mock: not in the fixture: ' + k.slice(0, 80) } }; +} + +if (FEL === 'electrum') { + const srv = net.createServer((sock) => { + contor.connections++; scrieContor(); + if (MUT) { sock.destroy(); return; } + let buf = ''; + sock.on('data', (d) => { buf += d.toString('utf8'); let i; while ((i = buf.indexOf('\n')) >= 0) { const line = buf.slice(0, i); buf = buf.slice(i + 1); if (!line.trim()) continue; contor.requests++; scrieContor(); let j; try { j = JSON.parse(line); } catch { sock.write(JSON.stringify({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'parse error' } }) + '\n'); continue; } sock.write(JSON.stringify(raspunsElectrum(j)) + '\n'); } }); + sock.on('error', () => {}); + }); + srv.listen(PORT, '127.0.0.1', () => fs.writeFileSync(GATA, JSON.stringify({ port: srv.address().port, pid: process.pid }) + '\n')); +} else { + const srv = http.createServer((req, res) => { + contor.requests++; scrieContor(); + const parts = []; req.on('data', (d) => parts.push(d)); + req.on('end', () => { + const body = Buffer.concat(parts).toString('utf8'); + if (MUT) { req.socket.destroy(); return; } + if (FEL === 'esplora') { + if (GOL) { res.writeHead(500, { 'content-type': 'text/plain' }); res.end(''); return; } + const p = req.url.split('?')[0]; + if (Object.hasOwn(R, p)) { const v = R[p]; if (v && typeof v === 'object' && Number.isInteger(v._status)) { res.writeHead(v._status, { 'content-type': 'text/plain' }); res.end(String(v._corp ?? '')); return; } res.writeHead(200, { 'content-type': typeof v === 'string' ? 'text/plain' : 'application/json' }); res.end(typeof v === 'string' ? v : JSON.stringify(v)); return; } + if (/^\/(address|scripthash)\/[^/]+\/txs\/chain\/[0-9a-f]{64}$/.test(p)) { res.writeHead(200, { 'content-type': 'application/json' }); res.end('[]'); return; } + // a script not in the fixture: as an index answers a script never used (zero counts, an empty page), counted in `unknown` + const nefolosit = /^\/(address|scripthash)\/([^/]+)(\/txs)?$/.exec(p); + if (nefolosit) { contor.unknown.push(p); scrieContor(); const zero = { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 }; res.writeHead(200, { 'content-type': 'application/json' }); res.end(JSON.stringify(nefolosit[3] ? [] : { [nefolosit[1]]: nefolosit[2], chain_stats: zero, mempool_stats: zero })); return; } + contor.unknown.push(p); res.writeHead(404, { 'content-type': 'text/plain' }); res.end('not found (mock)'); return; + } + let j; try { j = JSON.parse(body); } catch { res.writeHead(400); res.end(''); return; } + const r = FEL === 'bitcoind' ? raspunsBitcoind(j) : raspunsEth(j); + res.writeHead(200, { 'content-type': 'application/json' }); res.end(JSON.stringify(r)); + }); + }); + srv.on('connection', () => { contor.connections++; scrieContor(); }); + srv.listen(PORT, '127.0.0.1', () => fs.writeFileSync(GATA, JSON.stringify({ port: srv.address().port, pid: process.pid }) + '\n')); +} diff --git a/exposure-report/noble.mjs b/exposure-report/noble.mjs new file mode 100644 index 0000000..fd6fdd0 --- /dev/null +++ b/exposure-report/noble.mjs @@ -0,0 +1,35 @@ +// noble.mjs (quantum exposure report, C12): the ONE place the cryptographic dependencies are loaded. The tool needs +// @noble/hashes 1.x (keccak-256, RIPEMD-160) and @noble/curves 1.x (secp256k1: public-key recovery from a signature, point decoding). +// They are declared in package.json beside this file and resolved, in this order: from a `node_modules` reachable from this directory +// (`npm install --ignore-scripts` here, or in a parent directory that already holds them), then from the directory named by +// AERE_EXPUNERE_NODE_MODULES (the test sets it to the tool's own `node_modules` for the copies it runs, which have none), then from +// the AERE anchor verifier's own `node_modules` when this directory lives in the AERE development tree. A candidate is USED only when it has the exports the tool +// calls (secp256k1.Signature, secp256k1.ProjectivePoint.fromHex, secp256k1.CURVE.n, keccak_256, ripemd160): @noble/curves 2.x, for +// one, has neither ProjectivePoint nor CURVE, and a parent `node_modules` holding it is passed over for the next candidate. When no +// candidate fits, the error carries the code EAEREDEP, names what was found, and gives the command to run; the report tool and the +// test exit with 2 ("could not run") and say so, instead of crashing inside an import. +import path from 'node:path'; +import { fileURLToPath, pathToFileURL } from 'node:url'; + +const AICI = path.dirname(fileURLToPath(import.meta.url)); +export class LipsaDependenta extends Error { constructor(sub, gasite = []) { super(`DEPENDENCY MISSING: ${sub} is not installed in a usable version${gasite.length ? ' (found without the exports this tool calls, so not used: ' + gasite.join('; ') + ')' : ''}; run \`npm install --ignore-scripts --no-audit --no-fund\` in ${AICI} (dependencies are declared in its package.json)`); this.code = 'EAEREDEP'; } } +// the candidates outside this directory: the directory named by AERE_EXPUNERE_NODE_MODULES, then the AERE anchor verifier's node_modules +const dinAfara = (sub) => [process.env.AERE_EXPUNERE_NODE_MODULES, path.join(AICI, '..', '..', '..', 'verificator-falcon', 'node_modules')].filter(Boolean).map((d) => pathToFileURL(path.join(d, sub)).href); +async function incarca(sub, potrivit) { + const incercari = [sub, sub.replace(/\.js$/, ''), pathToFileURL(path.join(AICI, 'node_modules', sub)).href, ...dinAfara(sub)]; + const nepotrivite = []; + for (const s of incercari) { + let m; + try { m = await import(s); } catch (e) { if (e && e.code && !/ERR_MODULE_NOT_FOUND|ERR_PACKAGE_PATH_NOT_EXPORTED|ERR_UNSUPPORTED_DIR_IMPORT/.test(e.code)) throw e; continue; } + if (potrivit(m)) return m; + nepotrivite.push(s.startsWith('file:') ? path.relative(AICI, fileURLToPath(s)) : s); + } + throw new LipsaDependenta(sub, [...new Set(nepotrivite)]); +} +const sha3 = await incarca('@noble/hashes/sha3.js', (m) => typeof m.keccak_256 === 'function'); +const rmd = await incarca('@noble/hashes/ripemd160.js', (m) => typeof m.ripemd160 === 'function'); +const curbaPotrivita = (m) => { const c = m.secp256k1; return !!c && typeof c.Signature === 'function' && !!c.ProjectivePoint && typeof c.ProjectivePoint.fromHex === 'function' && !!c.CURVE && typeof c.CURVE.n === 'bigint' && typeof c.getPublicKey === 'function'; }; +const curves = await incarca('@noble/curves/secp256k1.js', curbaPotrivita); +export const keccak_256 = sha3.keccak_256; +export const ripemd160 = rmd.ripemd160; +export const secp256k1 = curves.secp256k1; diff --git a/exposure-report/package.json b/exposure-report/package.json new file mode 100644 index 0000000..67fb15f --- /dev/null +++ b/exposure-report/package.json @@ -0,0 +1,15 @@ +{ + "name": "aere-quantum-exposure-report", + "version": "1.0.0", + "private": true, + "type": "module", + "description": "Quantum exposure report for Bitcoin and Ethereum addresses: three declared modes, two labels, named evidence, AIP-23 compliance envelope", + "engines": { "node": ">=24" }, + "dependencies": { + "@noble/curves": "^1.9.7", + "@noble/hashes": "^1.8.0" + }, + "scripts": { + "test": "node proba-expunere.mjs" + } +} diff --git a/exposure-report/paza-retea.mjs b/exposure-report/paza-retea.mjs new file mode 100644 index 0000000..d0267fd --- /dev/null +++ b/exposure-report/paza-retea.mjs @@ -0,0 +1,262 @@ +// paza-retea.mjs (quantum exposure report, C12): the CONNECTION COUNTER loaded into the report process BEFORE the tool +// (`node --import ./paza-retea.mjs raport.mjs ...`). It writes every attempt to leave the process as one JSON line to the journal +// named by AERE_PAZA_JURNAL, and in blocking mode refuses any attempt outside the declared targets before a packet leaves. +// +// WHAT IT COVERS (measured by proba-expunere.mjs, control 5a: in blocking mode one planted exemplar of each path below, each named in the +// journal and refused, the pipe forms against a listening local pipe and the DNS queries against a listening loopback DNS port, both of +// which must receive nothing; in journal mode, where a planted call really runs, only toward 127.0.0.1: a worker's and a child's +// connection, a connected UDP socket, a connection with its own lookup): +// TCP net.Socket.prototype.connect, its arguments read as Node.js reads them: every TCP connection opened through net.Socket (net, +// tls, http, https, http2, fetch/undici, WebSocket) -> { ev: "connect", host, port, allowed } +// when the caller gives its own `lookup`, the address that lookup returns is journaled too -> { ev: "resolved", host, address } +// PIPES the same method with a path (a Windows named pipe, a Unix socket, http's socketPath, or a string that is not a port), judged +// on the path AS THE SYSTEM OPENS IT: on Windows it is normalized first (`\\.\pipe\..\UNC\host\pipe\x` is opened as +// `\\.\UNC\host\pipe\x`, over SMB), and only `\\.\pipe\` / `\\?\pipe\` (a name without a backslash) is local; +// every other form (UNC, `\??\UNC\...`, GLOBALROOT, a drive or relative path) is judged like a host +// -> { ev: "connect", path, normalized, allowed } +// UDP dgram.Socket.prototype.send, its arguments read as Node.js reads them (a connected socket: its remote address; a numeric +// string port; no address = loopback) -> { ev: "udp", host, port, allowed } +// addMembership / dropMembership and their source-specific forms (the system sends an IGMP / MLD report) +// -> { ev: "udp", method, group, allowed } +// DNS EVERY function of dns, dns.promises, dns.Resolver.prototype and dns.promises.Resolver.prototype that may query (all but +// getServers, get/setDefaultResultOrder, cancel, setLocalAddress), so a query function this file does not name is judged too +// -> { ev: "dns", method, host, allowed } +// permitted only as `lookup` of a declared target name or of an IP literal (getaddrinfo, which sends nothing for a literal); +// resolve*, reverse, lookupService and any other query go to a DNS server whatever host they name, and are refused +// setServers (module, promises, and the base prototype of the Resolver classes): it decides where later queries go +// -> { ev: "dns", method: "...setServers", allowed } +// HANDLES process.binding(name): the deprecated door to the internal TCP / UDP / c-ares handles (tcp_wrap, udp_wrap, cares_wrap), +// which connect without net.Socket; the CALL is journaled, and refused in blocking mode -> { ev: "binding", name, allowed } +// in journal mode the handle is handed out, and the connections made through it are NOT journaled +// ADDONS process.dlopen (what require() of a .node file calls): the LOAD is journaled, and refused in blocking mode +// -> { ev: "addon", file, allowed } +// WORKERS worker_threads.Worker (replaced by a constructor function, so the original is not its prototype): refused in blocking mode; +// in journal mode the worker is started with this guard preloaded through `--require` in its execArgv (`--import` is NOT +// applied to workers, measured on Node 24), so its own connections are journaled -> { ev: "worker", allowed } +// CHILDREN child_process spawn/spawnSync/exec/execSync/execFile/execFileSync/fork, the ChildProcess class itself +// (ChildProcess.prototype.spawn, where every asynchronous form ends) and process.execve: refused in blocking mode; in journal +// mode NODE_OPTIONS carries `--require` of this guard to child Node.js processes that INHERIT the environment +// -> { ev: "child", method, command, allowed } +// WHAT IT DOES NOT COVER (declared, not measured as zero): in journal mode, the connections of a handle taken through process.binding +// (only the call is seen), of a native addon (only the load is seen), of a child process started with its own `env` (the guard is not in +// it; the start is seen), of programs other than Node.js (curl, ...) started as children (the start is seen), and of the program that +// process.execve puts in place of this one on POSIX (the call is seen); in both modes any file opened on a path the system resolves over a +// network (a UNC path, a network mount), whatever opens it (fs, import, node:sqlite: none is wrapped), WHERE a declared target name +// resolves (the system's answer, or the caller's own `lookup`, whose answer is journaled for TCP and not judged), `internalBinding` (not +// reachable without --expose-internals), node:quic where a build offers it (not wrapped; the Node.js 24.14 measured here has no such +// module, with or without --experimental-quic), code written ON PURPOSE to reach the original functions some other way than the ones +// named here (the guard measures the ordinary calls of the tool and of its libraries, it is not a sandbox), and anything outside this +// Node.js process. In blocking mode every process.binding call, addon load, worker, child, execve, multicast membership and setServers +// is refused, so none of those runs. The report tool uses none of these paths (its sources import no child_process, worker_threads, +// native module, process.binding or lookupService; the test checks that). +// +// AERE_PAZA_TINTE "host:port,host:port" the declared targets; empty = nothing is allowed (mode 1); "*" = everything +// AERE_PAZA_MOD "jurnal" (count only) or "blocheaza" (count AND refuse any attempt outside the declared targets: the socket is +// destroyed with EAEREPAZA, a DNS query is answered with EAEREPAZA, a handle, an addon, a worker or a child process +// is not started) +// The journal's first line is { ev: "incarcat" }: a test that does not find it did not load the guard and measured nothing. +// This file is a measuring instrument for the test; the report tool does not depend on it. +import fs from 'node:fs'; +import path from 'node:path'; +import net from 'node:net'; +import dgram from 'node:dgram'; +import dns from 'node:dns'; +import cp from 'node:child_process'; +import wt from 'node:worker_threads'; +import { fileURLToPath } from 'node:url'; +import { syncBuiltinESMExports } from 'node:module'; + +const JURNAL = process.env.AERE_PAZA_JURNAL || ''; +const MOD = process.env.AERE_PAZA_MOD === 'blocheaza' ? 'blocheaza' : 'jurnal'; +const TINTE = String(process.env.AERE_PAZA_TINTE || '').split(',').map((x) => x.trim()).filter(Boolean); +const TOT = TINTE.includes('*'); +const PAZA_FISIER = fileURLToPath(import.meta.url); +const scrie = (o) => { if (JURNAL) fs.appendFileSync(JURNAL, JSON.stringify({ t: new Date().toISOString(), pid: process.pid, tid: wt.threadId, ...o }) + '\n'); }; +const permis = (host, port) => TOT || TINTE.includes(`${host}:${port}`) || TINTE.includes(String(host)); +/** a DNS call is permitted only as `lookup` (getaddrinfo, the resolver every connection of the tool uses), and only for a declared target + * name or an IP literal (getaddrinfo sends nothing for a literal). Every other DNS function (resolve*, reverse, lookupService, and any + * query function a later Node.js adds) is a query to a DNS server, whichever host it names, and is refused in blocking mode: a list of + * what is permitted, not of what is forbidden */ +const permisNume = (host, metoda) => TOT || (metoda === 'lookup' && (net.isIP(String(host)) !== 0 || TINTE.some((t) => t === String(host) || t.startsWith(String(host) + ':')))); +/** a LOCAL IPC path, judged on the path as the system will open it, not on the string given. On Windows the path is NORMALIZED first + * (forward slashes to backslashes, `.` and `..` resolved: path.win32.normalize, which gives what Windows itself opens for a `\\.\` path: + * `\\.\pipe\..\UNC\host\pipe\x` IS `\\.\UNC\host\pipe\x`, a connection over SMB), and only the local pipe namespace passes: + * `\\.\pipe\` or `\\?\pipe\`, the name without a backslash (a pipe name cannot hold one). Everything else (a UNC path, a + * `\??\` NT path such as `\??\UNC\host\...`, a GLOBALROOT device path, a drive or relative path, which may be a network mount) is judged + * like a host (a NUL inside the path is refused by libuv itself, EINVAL, measured on Node 24). On POSIX a Unix socket path is local, + * unless it starts with two slashes */ +const BS = String.fromCharCode(92); // a backslash, built so that no tool on the way unescapes it +const caleNormalizata = (p) => (process.platform === 'win32' ? path.win32.normalize(String(p).split('/').join(BS)) : String(p)); +const caleLocala = (p) => { + const s = String(p); + if (process.platform !== 'win32') return !s.split('/').join(BS).startsWith(BS + BS); + const n = caleNormalizata(s); const cap = n.slice(0, 9).toLowerCase(); const nume = n.slice(9); + return (cap === BS + BS + '.' + BS + 'pipe' + BS || cap === BS + BS + '?' + BS + 'pipe' + BS) && nume.length > 0 && !nume.includes(BS); +}; +const eroare = (ce) => Object.assign(new Error(`AERE-PAZA: ${ce} is outside the declared targets (${TINTE.join(',') || 'none'}) and was refused before any packet left`), { code: 'EAEREPAZA' }); +scrie({ ev: 'incarcat', mod: MOD, tinte: TINTE }); +// child Node.js processes that inherit the environment load the guard through NODE_OPTIONS (journal mode; in blocking mode they are not +// started at all). `--require` (not `--import`): it is applied synchronously, before the child's first line, and it is also what workers honour. +process.env.NODE_OPTIONS = ((process.env.NODE_OPTIONS || '') + ' --require=' + JSON.stringify(PAZA_FISIER)).trim(); + +// ---------------------------------------------------------------- TCP +/** the arguments of socket.connect read the way Node.js reads them (net.js normalizeArgs): an options object; a string that is not a + * non-negative number is a PIPE path (`socket.connect('\\.\pipe\x')`); anything else is a port, with an optional host string after it */ +const caNumar = (x) => { const n = Number(x); return n >= 0 ? n : false; }; +function desfa(args) { + const a0 = args[0]; + const o = Array.isArray(a0) ? a0[0] : (a0 && typeof a0 === 'object' ? a0 : typeof a0 === 'string' && caNumar(a0) === false ? { path: a0 } : { port: a0, host: typeof args[1] === 'string' ? args[1] : undefined }); + return { host: o.path ? null : String(o.host || 'localhost'), port: o.path ? null : Number(o.port), path: o.path || null, optiuni: o && typeof o === 'object' ? o : null }; +} +const connectOrig = net.Socket.prototype.connect; +net.Socket.prototype.connect = function (...args) { + const { host, port, path: cale, optiuni } = desfa(args); + const ok = cale ? (TOT || caleLocala(cale)) : permis(host, port); + scrie({ ev: 'connect', host, port, path: cale, ...(cale && process.platform === 'win32' ? { normalized: caleNormalizata(cale) } : {}), allowed: ok }); + if (!ok && MOD === 'blocheaza') { setImmediate(() => this.destroy(eroare(cale ? `pipe ${cale}` : `${host}:${port}`))); return this; } + // a caller-supplied lookup decides the address itself: journal what it returns, so that the reader knows where the socket went. + // net.connect() hands this method its NORMALIZED arguments, an array [options, cb] marked with an internal symbol: the options are + // replaced inside that same array (a new array would lose the mark), never mutated in the caller's object + if (optiuni && typeof optiuni.lookup === 'function') { + const lookupOrig = optiuni.lookup; + const cuJurnal = { ...optiuni, lookup: (h, o, cb) => lookupOrig(h, o, (e, adr, fam) => { scrie({ ev: 'resolved', host: String(h), address: e ? null : (Array.isArray(adr) ? adr.map((x) => x.address).join(',') : String(adr)), error: e ? String(e.code || e.message).slice(0, 60) : null }); cb(e, adr, fam); }) }; + if (Array.isArray(args[0])) args[0][0] = cuJurnal; else args[0] = cuJurnal; + } + return connectOrig.apply(this, args); +}; +// ---------------------------------------------------------------- UDP +/** where a datagram goes, read the way Node.js reads send(msg[, offset, length][, port][, address][, callback]) (dgram.js): a CONNECTED + * socket sends to its remote address (offset and length are not a port); an unconnected one takes (msg, offset, length, port, address) + * when an address or a non-function port follows the length, else (msg, port, address); the port may be a numeric string; no address + * means the loopback of the socket's family */ +function tintaUdp(sock, a) { + let r = null; try { r = sock.remoteAddress(); } catch { r = null; } + if (r) return { host: r.address, port: r.port }; + let [, offset, length, port, address] = a; + if (!(address || (port && typeof port !== 'function'))) { port = offset; address = length; } + if (typeof address === 'function') address = undefined; + return { host: address ? String(address) : (sock.type === 'udp6' ? '::1' : '127.0.0.1'), port: Number(port) }; +} +const sendOrig = dgram.Socket.prototype.send; +dgram.Socket.prototype.send = function (...args) { + const { host, port } = tintaUdp(this, args); + const ok = permis(host, port); + scrie({ ev: 'udp', host, port, allowed: ok }); + if (!ok && MOD === 'blocheaza') { const cb = args.find((x) => typeof x === 'function'); const e = eroare(`udp ${host}:${port}`); if (cb) setImmediate(() => cb(e)); else setImmediate(() => this.emit('error', e)); return; } + return sendOrig.apply(this, args); +}; +// multicast membership: joining or leaving a group makes the system send an IGMP / MLD report on the chosen interface, a packet that no +// send() call carries; it is journaled and refused in blocking mode, whatever the group +for (const nume of ['addMembership', 'dropMembership', 'addSourceSpecificMembership', 'dropSourceSpecificMembership']) { + const orig = dgram.Socket.prototype[nume]; if (typeof orig !== 'function') continue; + dgram.Socket.prototype[nume] = function (...args) { + scrie({ ev: 'udp', method: nume, group: args.map((x) => String(x)).join(' ').slice(0, 120), allowed: TOT }); + if (!TOT && MOD === 'blocheaza') throw eroare(`udp ${nume} ${args.map((x) => String(x)).join(' ').slice(0, 80)}`); + return orig.apply(this, args); + }; +} +// ---------------------------------------------------------------- DNS: module functions, promises, Resolver instances +// EVERY function of the module, of dns.promises and of the two Resolver prototypes is wrapped as a query, except the ones named here that +// send nothing (setServers is wrapped on its own, below): a query function a later Node.js adds (Node 24 has resolveTlsa, which a fixed +// list of names had missed) is judged too, instead of passing unseen +const FARA_INTEROGARE = new Set(['Resolver', 'constructor', 'getServers', 'getDefaultResultOrder', 'setDefaultResultOrder', 'cancel', 'setLocalAddress', 'setServers']); +function invelesteDns(obiect, eticheta, promisiuni) { + for (const nume of Object.getOwnPropertyNames(obiect)) { + if (FARA_INTEROGARE.has(nume)) continue; + const d = Object.getOwnPropertyDescriptor(obiect, nume); if (!d || typeof d.value !== 'function') continue; + const orig = d.value; + obiect[nume] = promisiuni + ? async function (host, ...rest) { const ok = permisNume(host, nume); scrie({ ev: 'dns', method: eticheta + nume, host: String(host), allowed: ok }); if (!ok && MOD === 'blocheaza') throw eroare(`dns ${nume} ${host}`); return orig.call(this, host, ...rest); } + : function (host, ...rest) { const ok = permisNume(host, nume); scrie({ ev: 'dns', method: eticheta + nume, host: String(host), allowed: ok }); if (!ok && MOD === 'blocheaza') { const cb = rest.find((x) => typeof x === 'function'); const e = eroare(`dns ${nume} ${host}`); if (cb) { setImmediate(() => cb(e)); return; } throw e; } return orig.call(this, host, ...rest); }; + } +} +invelesteDns(dns, 'dns.', false); +invelesteDns(dns.promises, 'dns.promises.', true); +invelesteDns(dns.Resolver.prototype, 'Resolver.', false); +invelesteDns(dns.promises.Resolver.prototype, 'promises.Resolver.', true); +// setServers decides WHERE every later query goes (any address and port, which no connection of this process shows): journaled and refused +// in blocking mode. Wrapped on the module, on dns.promises and on the shared base prototype of the Resolver classes, where the instances +// find it; a call that passes through one wrapper into another is journaled once +let inSetServers = 0; +const invelite = new WeakSet(); +function invelesteServere(obiect, eticheta) { + const orig = obiect && obiect.setServers; if (typeof orig !== 'function' || invelite.has(orig)) return; + const f = function (servere, ...rest) { + if (!inSetServers) { + scrie({ ev: 'dns', method: eticheta + 'setServers', host: (Array.isArray(servere) ? servere.map(String).join(',') : String(servere)).slice(0, 160), allowed: TOT }); + if (!TOT && MOD === 'blocheaza') throw eroare(`dns ${eticheta}setServers ${String(servere).slice(0, 80)}`); + } + inSetServers++; try { return orig.call(this, servere, ...rest); } finally { inSetServers--; } + }; + invelite.add(f); obiect.setServers = f; +} +invelesteServere(dns, 'dns.'); +invelesteServere(dns.promises, 'dns.promises.'); +invelesteServere(Object.getPrototypeOf(dns.Resolver.prototype), 'Resolver.'); +invelesteServere(Object.getPrototypeOf(dns.promises.Resolver.prototype), 'promises.Resolver.'); +// ---------------------------------------------------------------- internal handles: process.binding (tcp_wrap, udp_wrap, cares_wrap, ...) +const bindingOrig = process.binding; +if (typeof bindingOrig === 'function') { + process.binding = function (nume, ...rest) { + scrie({ ev: 'binding', name: String(nume).slice(0, 40), allowed: TOT }); + if (!TOT && MOD === 'blocheaza') throw eroare(`process.binding(${String(nume).slice(0, 40)})`); + return bindingOrig.call(this, nume, ...rest); + }; +} +// ---------------------------------------------------------------- native addons: process.dlopen (what require() of a .node file calls) +const dlopenOrig = process.dlopen; +if (typeof dlopenOrig === 'function') { + process.dlopen = function (modul, fisier, ...rest) { + scrie({ ev: 'addon', file: String(fisier).slice(0, 160), allowed: TOT }); + if (!TOT && MOD === 'blocheaza') throw eroare('native addon ' + String(fisier).slice(0, 80)); + return dlopenOrig.call(this, modul, fisier, ...rest); + }; +} +// ---------------------------------------------------------------- workers and child processes +const WorkerOrig = wt.Worker; +// a constructor FUNCTION, not a subclass: a subclass keeps the original as its prototype (Object.getPrototypeOf(Worker) would hand it out). +// Instances keep the original prototype (instanceof, methods), whose `constructor` now names the guarded one, and the statics come from +// EventEmitter as before +function WorkerPaza(fisier, optiuni = {}) { + if (!new.target) throw new TypeError("Class constructor Worker cannot be invoked without 'new'"); + scrie({ ev: 'worker', file: String(fisier).slice(0, 160), allowed: TOT }); + if (!TOT && MOD === 'blocheaza') throw eroare('worker ' + String(fisier).slice(0, 80)); + // `--require` of this file loads the guard synchronously in the worker before its first line (`--import` in execArgv is ignored by workers) + return Reflect.construct(WorkerOrig, [fisier, { ...optiuni, execArgv: [...(optiuni.execArgv || process.execArgv), '--require', PAZA_FISIER] }], new.target); +} +WorkerPaza.prototype = WorkerOrig.prototype; +Object.defineProperty(WorkerOrig.prototype, 'constructor', { value: WorkerPaza, writable: true, configurable: true, enumerable: false }); +Object.setPrototypeOf(WorkerPaza, Object.getPrototypeOf(WorkerOrig)); +Object.defineProperty(WorkerPaza, 'name', { value: 'Worker' }); +wt.Worker = WorkerPaza; +let inFunctieCopil = 0; // a start already journaled by a function below is not journaled again by ChildProcess.prototype.spawn +for (const nume of ['spawn', 'spawnSync', 'exec', 'execSync', 'execFile', 'execFileSync', 'fork']) { + const orig = cp[nume]; if (typeof orig !== 'function') continue; + cp[nume] = function (...args) { + scrie({ ev: 'child', method: nume, command: String(args[0]).slice(0, 160), allowed: TOT }); + if (!TOT && MOD === 'blocheaza') throw eroare(`child process ${nume} ${String(args[0]).slice(0, 80)}`); + inFunctieCopil++; try { return orig.apply(this, args); } finally { inFunctieCopil--; } + }; +} +// the class itself: `new ChildProcess().spawn({ file, args, envPairs })` starts a process without any of the functions above +if (cp.ChildProcess && typeof cp.ChildProcess.prototype.spawn === 'function') { + const spawnClasaOrig = cp.ChildProcess.prototype.spawn; + cp.ChildProcess.prototype.spawn = function (optiuni, ...rest) { + if (!inFunctieCopil) { + const fisier = String(optiuni && optiuni.file).slice(0, 160); + scrie({ ev: 'child', method: 'ChildProcess.spawn', command: fisier, allowed: TOT }); + if (!TOT && MOD === 'blocheaza') throw eroare(`child process ChildProcess.spawn ${fisier.slice(0, 80)}`); + } + return spawnClasaOrig.call(this, optiuni, ...rest); + }; +} +// process.execve (Node 23.11+, POSIX): replaces this process with another program; on Windows it throws, but the call is journaled first +if (typeof process.execve === 'function') { + const execveOrig = process.execve; + process.execve = function (fisier, ...rest) { + scrie({ ev: 'child', method: 'execve', command: String(fisier).slice(0, 160), allowed: TOT }); + if (!TOT && MOD === 'blocheaza') throw eroare(`process.execve ${String(fisier).slice(0, 80)}`); + return execveOrig.call(this, fisier, ...rest); + }; +} +syncBuiltinESMExports(); diff --git a/exposure-report/proba-expunere.mjs b/exposure-report/proba-expunere.mjs new file mode 100644 index 0000000..389d3eb --- /dev/null +++ b/exposure-report/proba-expunere.mjs @@ -0,0 +1,1762 @@ +#!/usr/bin/env node +// proba-expunere.mjs: proba raportului de expunere cuantica (C12), cu controale negative. Totul local: machetele asculta pe +// 127.0.0.1, nicio cerere nu pleaca spre afara (si asta e chiar unul din lucrurile masurate). +// +// Ce masoara, in ordine (vectorii reali se iau din fixturi/alese.json, dupa ROL, nu scrisi aici): +// 1. codecurile, cu control pozitiv si negativ: vectorii BIP-173/350 (valizi si invalizi), base58check, tipurile de script, TOATE +// tranzactiile reale din fixturi refacute octet cu octet si hashuite la id-ul lor, annex-ul BIP-341 (un singur element nu e annex), +// RLP contra verify-proof.mjs (publicat), vectorul EIP-155 din EIP, tranzactii 0x1/0x3 semnate cu o cheie de proba si recuperate, +// recuperarea cheii pe toate tranzactiile blocului Ethereum din fixtura (un bit schimbat in r -> alta adresa), autoritatea EIP-7702 +// recuperata din autorizatia reala a blocului, EIP-55 +// 2. fixturile: sursa si data scrise in fisier, fara CR, rolurile din alese.json +// 3. modul 1 (offline) pe vectorii reali, SUB PAZA DE RETEA: etichetele asteptate, ZERO conexiuni / DNS / UDP / procese in jurnal, +// plicul VALID la verificatorul de referinta, evidenceHash == amprenta canonica a raportului, intrebarile de declaratie si +// termenele citate in Markdown, zero cuvinte interzise +// 4. modul 2 prin cele patru machete (Electrum, Esplora, Bitcoin Core cu si FARA --txids, Ethereum JSON-RPC), cu raspunsuri +// INREGISTRATE de pe un index public (sursa si data in fixturi/*.json): etichetele si dovezile pe fiecare rol (EIP-7702 pe +// autoritatea reala, P2TR nefinantat = "no output exists yet" prin Electrum / Esplora si NEMASURAT prin Core, unde nicio tranzactie +// data nu il atinge; P2PKH-ul necheltuit = F prin Electrum / Esplora si NEMASURAT prin Core ("cannot check that it lists every +// transaction": prin Core niciodata F); pozitia Core e hash-ul INTREG al blocului; niciun istoric real nu trece de o pagina Esplora, paginarea se +// masoara in 5d pe un istoric sintetic); jurnalul pazei numara exact conexiunile ACCEPTATE de macheta (un ascultator real), toate +// spre tinta declarata; plicul VALID +// 5. controalele negative, fiecare in trei stari (o plantare care nu se poate pune e STRICAT, deci esec): +// a. cate un furnizor strain pe FIECARE drum numit de paza (fetch, dgram send, dns.promises.resolveTxt, dns.Resolver, +// dns.promises.Resolver, dns.lookupService, dns.promises.lookupService, dns.promises.reverse pe un literal, process.binding(tcp_wrap), +// process.dlopen, Worker, Worker-ul original cautat prin reflectie, child_process, clasa ChildProcess, process.execve, o teava cu +// NUME DE SERVER pe loopback) plantat intr-o COPIE a uneltei e PRINS de paza in modul blocheaza: jurnalul il numeste si il refuza; in +// modul jurnal un Worker si un copil Node (mediu mostenit) care SE CONECTEAZA local au conexiunea in jurnal (paza se incarca in ei +// prin --require), un socket UDP conectat e jurnalizat cu adresa lui, iar o conexiune cu lookup propriu are adresa intoarsa de +// lookup in jurnal; toate tintele modului jurnal sunt 127.0.0.1; unealta FARA paza nu produce jurnal (citirea spune NEMASURAT). +// Copia plantata NU se ruleaza niciodata fara paza: drumurile ei ar trimite pachete reale (DNS, TCP spre o adresa de documentatie). +// Trei controale numara ce AJUNGE la un ascultator al probei, fiecare cu plantari inverse intr-o COPIE A PAZEI: TEVI (formele care +// numesc un server prin '..', prin prefixul NT \??\, prin GLOBALROOT\Device\Mup sau ca sir dat lui socket.connect ajung prin SMB pe +// loopback la o teava ascultata aici; in blocare ajunge numai forma locala; judecata pe sirul brut si sirul citit ca port le lasa sa +// ajunga); DNS in configuratia modului 2 (tinta un literal si un nume: reverse / TXT / TLSA / A pe tinta si orice setServers -> +// zero datagrame la serverele DNS mutate, inainte de paza, pe un ascultator UDP pe 127.0.0.2; regula veche a literalului si lista +// fixa de nume lasa datagrame); UDP spre tinta declarata in cele trei forme de argumente si prin sendto (ajung 4), spre alt port si o aderare +// multicast pe loopback refuzate (citirea veche a argumentelor si aderarea neinvelita ies ROSII). Rularile acestea sunt asincrone: +// cu spawnSync bucla probei sta si teava ar primi numai cat are instante deschise dinainte +// b. raspuns gol / de eroare (macheta --gol) -> NEMASURAT numit, nu "no on-chain evidence"; PLANTAREA INVERSA (o copie in care +// raspunsul gol devine istoric gol) trebuie sa faca verificarea aceasta ROSIE, fara sa crape +// c. tinta muta (macheta --mut) -> NEMASURAT +// d. cheltuire PLANTATA (adresa sintetica): fara cheltuire F, cu cheltuire E; la fel prin redeem script P2SH in forma P2PKH si prin +// witness script P2WSH in forma P2PKH (cheia e un push separat); cheltuirea doar in MEMPOOL (Electrum height 0, Esplora +// status.confirmed false) -> NEMASURAT, iar dupa ce a fost INLOCUITA (RBF, istoricul mai are doar finantarea) -> F cu "broadcast +// and never confirmed" numit in "not seen" si in intrebarea de declaratie; un P2TR cu iesirea CONFIRMATA si o cheltuire +// script-path doar in mempool RAMANE E (cheltuirea din mempool nu scade dovada de pe lant), cu plantarea inversa (conditia veche) +// ROSIE; o IESIRE P2TR numai in mempool -> NEMASURAT, cu plantarea inversa ROSIE; Esplora cu mempool_stats care numara o +// cheltuire pe care pagina nu o poarta -> NEMASURAT; un witness script fara forma standard: un push de 33 de octeti care e punct +// valid pe curba dar NU e operandul unei verificari de semnatura -> NEMASURAT ("not verified as keys bound"), cheia legata de +// OP_CHECKSIG -> E; cheltuiri VAZUTE de tip hash cu cheia in forme rare (hibrida 06/07 in P2PKH si P2WPKH, OP_NOP) +// -> E, iar o hibrida cu paritatea gresita si o cheltuire fara nicio preimagine -> NEMASURAT, niciodata F, cu plantarea inversa +// ROSIE; Esplora cu id-ul unei tranzactii inlocuit sau cu o valoare schimbata (campurile re-serializate nu se hashuiesc la id) -> +// NEMASURAT, cu plantarea inversa ROSIE; pagina a doua Esplora lipsa -> NEMASURAT; o cheltuire VAZUTA numai prin egalitate de +// hash (P2SH-P2WPKH servita fara witness si fara finantare) -> NEMASURAT, cu witness-ul E, cu plantarea inversa ROSIE (F) +// e. eticheta interzisa plantata in limbaj.mjs al unei copii -> poarta de limbaj refuza raportul (cod 1, nimic scris); un --subiect +// care contine un cuvant interzis NU e refuzat (textul cerutului e consemnat, nu e promisiunea uneltei); un corp de eroare SERVIT +// de tinta cu un cuvant interzis e citat ca [served: ...] si raportul e scris, cu plantarea inversa (citatul judecat) refuzata; +// la fel un cuvant servit in locul unui IDENTIFICATOR (tx_hash Electrum, txid Esplora, iesire scantxoutset) si intr-un mesaj +// servit taiat la 200 de caractere, iar un blockhash Core care nu e unul refuza raspunsul; fiecare cu plantarea lui inversa +// f. modul 3 fara consimtamant -> refuz; modul 3 spre o tinta privata (loopback) -> refuz si ZERO conexiuni acceptate +// g. raport.json / plic schimbate dupa semnare -> verificaRaport refuza / verificatorul INVALID +// h. o intrare care cheltuie ALTA iesire P2TR nu e dovada pentru tinta; cheia altei adrese nu e dovada +// i. Bitcoin Core FARA --txids pe adrese cheltuite -> NEMASURAT numit (niciodata F); PLANTAREA INVERSA (copie in care scanul +// pretinde ca enumera cheltuirile) face verificarea ROSIE; Core cu --txids INCOMPLET (numai finantarile unei adrese cheltuite, +// scanul spune 0 necheltuite) -> NEMASURAT ("not among the --txids given"), cu plantarea inversa (spentNotRead fortat 0) ROSIE; +// Core cu --txids care NU ating o adresa (istoricul unei singure adrese, pe cei 8 vectori) -> zero F, fiecare adresa neatinsa +// NEMASURAT numit ("none of the N transaction(s) ... touches this address") sau E din scan, cu plantarea inversa (steagul global) +// ROSIE; un txid pe care nodul nu il serveste -> REFUZ numit inainte de orice masuratoare (id-ul intreg in mesaj, orice alt hex +// lung mascat); drumul FARA hex (forma decodata vin/vout, re-serializata si hashuita la id) -> aceleasi etichete E pe cele trei +// roluri (P2WPKH, P2SH multisig, P2WSH multisig), iar o forma decodata cu un camp schimbat -> REFUZ ("hashes to"); tranzactiile +// date se citesc O DATA (cereri servite = scanuri + txids, nu adrese x txids); o lista care atinge adresa NUMAI printr-o +// tranzactie din mempool -> NEMASURAT ("touches this address on chain", mempool numit), cu plantarea inversa ROSIE (si F cu plasa +// scoasa); finantarea unei iesiri inca necheltuite -> NEMASURAT ("cannot check that it lists every transaction"), cu plasa scoasa +// F; cheltuirea cu cheia intr-un bloc din AFARA lantului activ (blockhash, confirmations 0) -> NEMASURAT, pe lantul activ E, cu +// plantarea inversa (pe lant = are blockhash) ROSIE (E). Plantarile pe o garda Core scot si plasa de la capat (prin Core niciodata +// F), ca fiecare garda sa fie aratata singura +// j. un EOA cu designator EIP-7702 plantat (cod 0xef0100||adresa, nonce 1) -> E, cu tranzactia de autorizare "nevazuta" numita; +// o fereastra --eth-blocks care incepe dupa varf -> REFUZ (nicio eticheta pe nonce singur); tranzactia 0x4 care poarta autorizatia +// cu hash-ul inlocuit -> autorizatia nu e dovada (NEMASURAT cu codul gol, E numai prin designator), cu plantarea inversa ROSIE; +// un cuvant servit in locul hash-ului unei tranzactii, al lui eth_chainId, al r-ului unei semnaturi sau dupa cei 20 de octeti ai +// delegatului EIP-7702 nu ajunge necitat in raport, fiecare cu plantarea lui inversa (refuzata de poarta de limbaj) +// 6. textele publicabile: fara cuvintele interzise (limbaj.mjs, singurul care le numeste, e exclus), fara nimic din operarea noastra, +// fara child_process / worker_threads / process.binding / lookupService / module native in sursele uneltei; fisierele uneltei neatinse +// de proba; copiile-frate (.expunere-planta-*, .expunere-oglinda-*) sunt ignorate de git; curatenia de la pornire sterge o copie +// ORFANA (pid mort) si lasa in pace una a unui proces VIU (control pozitiv si negativ, pe doua dosare create aici); o macheta pornita +// DETASAT de un parinte care iese se opreste singura (paznicul de parinte), cu plantarea inversa (paznic scos) ROSIE; un @noble/curves +// in forma 2.x gasit primul e ocolit (cod 0 cu 1.x alaturi, cod 2 numit fara), cu plantarea inversa (crapare in import) ROSIE; +// dosarul de lucru din %TEMP% poarta pid-ul: al unei rulari moarte e sters, al acesteia lasat, cel de forma veche (fara pid) ramane +// La pornire proba sterge copiile-frate ORFANE (.expunere-planta--, .expunere-oglinda--) si dosarele de lucru ORFANE +// (expunere-proba--* in %TEMP%) lasate de o rulare OMORATA (un SIGKILL nu ruleaza finally) si spune cate; una a carei rulare (pid-ul +// din nume) inca traieste nu se atinge, fiindca doua probe (sau proba si oglinda ei) pot rula in acelasi timp, si nici dosarul din care +// ruleaza chiar aceasta proba. Dosarele de lucru de forma veche (fara pid) sunt numite si lasate: nu se poate spune ale cui sunt. +// Trei stari: VERDE / ROSU / STRICAT. O exceptie oriunde in proba e STRICAT (cod 1), niciodata 2. Iesire: 0 totul verde; 1 ceva ROSU +// sau STRICAT; 2 NUMAI cand proba nu poate porni (dependenta @noble, fixturi sau verificator lipsa), numit. +// 7. runda 6 (k.): varful tintei citit inaintea istoricului (Electrum blockchain.headers.subscribe, Esplora /blocks/tip/height + +// /block-height/:h + /block/:hash/header): cu varful inregistrat (971000) F, cu varful REAL vechi 969686 NEMASURAT "target behind the +// chain"; un antet cu un octet schimbat, sau care nu se hashuieste la hash-ul varfului, nu e varf; scripturile-surori (acelasi HASH160 +// ca P2PKH / P2WPKH / P2SH-P2WPKH, si cele trei ale cheii unei linii p2pk:): cheia dezvaluita numai la sora P2WPKH da E cu sora +// numita prin Electrum, Esplora si Core; un ascultator TLS al probei cu un certificat facut aici (SAN cu un cuvant interzis): raport +// scris, mesajul TLS citat intreg; Esplora care numara o cheltuire din mempool nepurtata langa alta tranzactie din mempool purtata: +// NEMASURAT. Fiecare cu plantarea inversa ROSIE (varful nejudecat, surori neinterogate, mesaj TLS necitat, regula veche). Sectiunile +// 3 si 4 cer in plus: a treia intrebare (aceeasi cheie pe alt lant), randul N8 si celelalte lanturi pe fiecare F, varful pe fiecare +// verdict Electrum / Esplora. Plantarile pe o garda Core si plantarea raspunsului gol scot si plasa "fara varf citit, niciodata F" +// 8. runda 7 (l.; revizia rundei 6, scratchpad c12rev7): (MEDIU-A) genezele celor cinci retele Bitcoin recalculate din campurile antetului +// == tabelul uneltei; o tinta cu geneza regtest si varf regtest -> NEMASURAT "serves another chain" pe o adresa mainnet, F pe o adresa +// bcrt1; un varf signet (minat o data) sub geneza mainnet -> NEMASURAT "above the limit of Bitcoin mainnet", iar sub geneza signet o +// adresa tb1 masurata si o linie p2pk: NEMASURAT ("mainnet only"); fiecare verdict pe fixturi numeste lantul. (MEDIU-B) un endpoint +// Ethereum cu capul la blocul 18.000.000 sau care raporteaza eth_syncing -> NEMASURAT "endpoint behind the chain", cu capul fixturii F +// care numeste capul. (MEDIU-C) --data intr-o zi viitoare -> REFUZ; o zi trecuta (2012-01-01) -> NEMASURAT pe fiecare adresa prin +// Electrum, Esplora, Ethereum, Core cu si fara --txids; prin Core un bloc cu ora in viitor sau fara ora -> NEMASURAT. (MIC-D) BIP-86 +// pe vectorul din BIP; o linie p2pk: E prin cealalta codificare (P2PKH necomprimat cheltuit, P2PK comprimat) si prin iesirea BIP-86, +// F cu 12 surori numite si randul N8 numai cu ce nu se poate deriva. (MIC-E) iesire / tranzactie numarata in mempool si nepurtata -> +// NEMASURAT. Fiecare cu plantarea inversa ROSIE. Rapoartele prin Bitcoin Core se dateaza cu ziua RULARII (scanul citeste nodul la rulare) +// 9. runda 8 (m.; revizia rundei 7, scratchpad c12rev8): (MEDIU-1) contul Ethereum se citeste NUMAI din eth_getProof la numarul capului, +// plimbat de la radacina de stare a blocului capului, si din eth_getCode la acelasi numar, hashuit la hash-ul de cod dovedit: o macheta +// care raspunde ca un echilibrator cu o masina in urma ("header not found" la cap, nonce 0 la 'latest') -> NEMASURAT, o stare de dupa +// cap la 'latest' (designator) nu eticheteaza contul la cap, un cod nehashuit / o dovada a altei stari / un furnizor fara eth_getProof +// -> NEMASURAT numit; constructorul de trie al probei pe vectorii Ethereum, plimbatorul uneltei == cel publicat. (MEDIU-2) punctele de +// control ale mainnet-ului (967680, 969696) == pinii lui btc/antete.mjs; o tinta a unui lant despartit (geneza si limita mainnet, alt +// bloc la 969696) -> NEMASURAT "serves another chain" prin Electrum, Esplora si Core; un lant care se termina sub 967680 -> NEMASURAT. +// (MIC) Core e intrebat ce lant serveste (un nod regtest -> NEMASURAT); numaratorile Esplora null / negative / lipsa si iesirile +// numarate peste cele purtate -> NEMASURAT; o tranzactie care nu atinge scriptul -> NEMASURAT (Esplora si Electrum). Fiecare cu +// plantarea inversa ROSIE; plantarea limitei de dovada de lucru (l.2) scoate si regula punctului de control, care o acopera +// Ce NU masoara (NEMASURAT, scris): modul 3 catre un furnizor real (ar trimite adrese unui tert) si adaptoarele pe servere reale; surorile +// vectorilor reali nu au fost inregistrate (machetele raspund la un script necunoscut ca un index la un script nefolosit: istoric gol), iar +// varful nu a fost inregistrat odata cu fixturile (e antetul real al blocului 971000, din lantul de antete validat de C6; _sursa.nota). +// Nici geneza (server.features, /block-height/0: constanta lantului, recalculata aici), nici capul Ethereum si eth_syncing (cea mai devreme +// ora pe care o poate purta blocul capului, derivata din blocul inregistrat; _sursa.nota). Un Esplora din spatele unui echilibrator poate +// servi varful si istoricul de pe masini diferite: nicio cerere nu o arata, si proba nu o masoara. Din runda 8: blocurile punctelor de +// control si lantul nodului Core din fixturi nu au fost inregistrate (sunt pinii lui btc/antete.mjs); forkul probei serveste la 969696 +// antetul REAL al altui bloc mainnet (969686), nu un antet Bitcoin Cash (nu se poate produce offline); starea Ethereum a fixturii e +// SINTETICA (trie-ul celor patru conturi inregistrate), deci un raspuns eth_getProof real al unui endpoint public nu e masurat; si capul +// Ethereum insusi nu e verificat fata de consensul lantului (unealta nu face asta). +// node proba-expunere.mjs +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import crypto from 'node:crypto'; +import { spawn, spawnSync } from 'node:child_process'; +import { fileURLToPath, pathToFileURL } from 'node:url'; +import { verificaLimbaj, ETICHETA } from './limbaj.mjs'; + +// ---------------------------------------------------------------- poate porni? +// the tool's own node_modules (after `npm install` here) is handed to every copy the test imports or runs, which has none of its own +{ const nm = path.join(path.dirname(fileURLToPath(import.meta.url)), 'node_modules'); if (!process.env.AERE_EXPUNERE_NODE_MODULES && fs.existsSync(nm)) process.env.AERE_EXPUNERE_NODE_MODULES = nm; } +let noble; try { noble = await import('./noble.mjs'); } catch (e) { console.log('NEMASURAT: ' + String((e && e.message) || e)); process.exit(2); } +const { secp256k1 } = noble; +const B = await import('./bitcoin.mjs'); +const E = await import('./ethereum.mjs'); +const AICI = path.dirname(fileURLToPath(import.meta.url)); +const RAD = path.resolve(AICI, '..', '..', '..'); +// the compliance-report module (deadlines, canonical hashing, report verification): cloud-gateway/control-plane/ in the AERE development +// tree, control-plane/ in the public copy (AERE_EXPUNERE_TERMENE names another file); without it the test cannot run at all +const RAPORT_CONF = [process.env.AERE_EXPUNERE_TERMENE, '../../../cloud-gateway/control-plane/raport-conformitate.mjs', '../control-plane/raport-conformitate.mjs'].filter(Boolean).map((p) => path.resolve(AICI, p)).find((p) => fs.existsSync(p)); +if (!RAPORT_CONF) { console.log('NEMASURAT: control-plane/raport-conformitate.mjs (the compliance-report module) is not beside this tool'); process.exit(2); } +const { sha256Canonic, verificaRaport } = await import(pathToFileURL(RAPORT_CONF).href); +// the AIP-23 reference verifier (aere-proof-protocol/verify.mjs): compared with, not required (AERE_PROOF_PROTOCOL_VERIFY names it) +const VERIFY = process.env.AERE_PROOF_PROTOCOL_VERIFY || path.join(RAD, 'tools', 'aere-proof-protocol', 'verify.mjs'); +// runda 8: pinii urmaritorului de antete Bitcoin al scutului (punctele de control ale uneltei se compara cu ei) si plimbatorul publicat de +// dovezi Merkle-Patricia (cel al uneltei se compara cu el, pe aceleasi dovezi) +const PINI = process.env.AERE_EXPUNERE_PINI || path.join(RAD, 'tools', 'aere-quantum-shield', 'btc', 'antete.mjs'); +// the anchor verifier (verify-proof.mjs, the published RLP encoder) and its MPT walker (mpt.mjs beside it): AERE_VERIFY_PROOF names it +const VERIFY_PROOF = process.env.AERE_VERIFY_PROOF || path.join(RAD, 'verificator-falcon', 'verify-proof.mjs'); +const MPT = path.join(path.dirname(VERIFY_PROOF), 'mpt.mjs'); +const PAZA = pathToFileURL(path.join(AICI, 'paza-retea.mjs')).href; +const MACHETE = path.join(AICI, 'machete.mjs'); +const FIX = path.join(AICI, 'fixturi'); +// data rapoartelor: ziua in care au fost inregistrate fixturile. Varful pe care il servesc machetele (blocul 971000, ora antetului +// 2026-10-11T22:53:11Z) se judeca fata de SFARSITUL zilei raportului (sau fata de ceasul rularii, daca acela vine primul), cu marja de +// 2 ore: cu 2026-10-11 referinta e fixa (2026-10-12T00:00:00Z, 67 de minute dupa varf) oricand ar rula proba; cu o data de azi, +// referinta ar fi ceasul si varful inregistrat ar iesi "target behind the chain" +const DATA = '2026-10-11'; +const E_ = ETICHETA.EXPUSA, F_ = ETICHETA.FARA_DOVADA, U_ = 'unmeasured'; +for (const f of ['vectori.txt', 'alese.json', 'electrum.json', 'esplora.json', 'bitcoind.json', 'eth-rpc.json'].map((f) => (path.isAbsolute(f) ? f : path.join(FIX, f)))) { + if (!fs.existsSync(f)) { console.log('NEMASURAT: lipseste ' + f); process.exit(2); } +} +// the neighbours of the AERE development tree (the AIP-23 verifier, the shield's Bitcoin header pins, the anchor verifier's RLP encoder +// and MPT walker) are compared with, not required: in a copy without them those rows are NEMASURAT, named (the exit code stays 0: it +// is 1 only on a red or broken row, see the end of this file) +const LIPSA = Object.entries({ VERIFY, PINI, VERIFY_PROOF, MPT }).filter(([, f]) => !fs.existsSync(f)).map(([k]) => k); +const NUMESTE = { VERIFY: 'AERE_PROOF_PROTOCOL_VERIFY', PINI: 'AERE_EXPUNERE_PINI', VERIFY_PROOF: 'AERE_VERIFY_PROOF', MPT: 'AERE_VERIFY_PROOF, mpt.mjs beside it' }; +const fara = (k) => (LIPSA.includes(k) ? k + ' is not beside this tool (' + NUMESTE[k] + ' names it): NEMASURAT' : null); +const ALESE = JSON.parse(fs.readFileSync(path.join(FIX, 'alese.json'), 'utf8')); +const A = ALESE.adrese; const ETHV = ALESE.eth; +const ROLURI_BTC = ['p2pk', 'p2pkh_cheltuit', 'p2pkh_necheltuit', 'p2wpkh_cheltuit', 'p2sh_multisig_cheltuit', 'p2wsh_multisig_cheltuit', 'p2tr_cheltuit', 'p2tr_nefinantat']; +if (ROLURI_BTC.some((r) => !A[r]) || !ETHV || !ETHV.expeditor || !ETHV.primitor || !ETHV.contract || !ETHV.autoritate7702) { console.log('NEMASURAT: alese.json nu numeste toate rolurile'); process.exit(2); } +// dosarul de lucru al probei (in %TEMP%) poarta pid-ul rularii, ca si copiile-frate: o rulare OMORATA il lasa, si urmatoarea il sterge +const numeT = (pid) => fs.mkdtempSync(path.join(os.tmpdir(), `expunere-proba-${pid}-`)); +const T = numeT(process.pid); +// copiile-frate ale unei rulari OMORATE (un SIGKILL nu ruleaza finally) ar ramane in arbore: se sterg la pornire, si se spune cate. Numele +// poarta pid-ul rularii care le-a facut; una al carei proces inca traieste (alta proba, oglinda) nu se atinge, nici dosarul acestei probe +const pidViu = (pid) => { try { process.kill(pid, 0); return true; } catch (e) { return e.code !== 'ESRCH'; } }; +/** par: dosarul de cercetat; tipar: numele care se cauta; pidDin: pid-ul din nume (null = fara pid, lasat in pace si numit) */ +function curataOrfane(par, tipar = /^\.expunere-(planta|oglinda)-/, pidDin = (f) => { const m = /-(\d+)$/.exec(f); return m ? Number(m[1]) : null; }) { + const eu = path.resolve(AICI); const sterse = [], lasate = []; + for (const f of fs.readdirSync(par).filter((x) => tipar.test(x))) { + const d = path.resolve(par, f); const pid = pidDin(f); + if (d === eu || d === path.resolve(T)) continue; + if (pid === null) { lasate.push(f + ' (fara pid in nume)'); continue; } + if (pidViu(pid)) { lasate.push(f + ' (procesul ' + pid + ' traieste)'); continue; } + try { fs.rmSync(d, { recursive: true, force: true }); sterse.push(f); } catch (e) { lasate.push(f + ' (nu s-a putut sterge: ' + String((e && e.code) || e).slice(0, 40) + ')'); } + } + return { sterse, lasate }; +} +// dosarele de lucru din %TEMP%: expunere-proba--; cele de forma veche (fara pid, inainte de 2026-10-12) sunt numite, nu sterse +const TIPAR_T = /^expunere-proba-/; +const pidDinT = (f) => { const m = /^expunere-proba-(\d+)-[A-Za-z0-9]+$/.exec(f); return m ? Number(m[1]) : null; }; +for (const [par, ce, tipar, pidDin] of [[path.join(AICI, '..'), 'copie(i)-frate', undefined, undefined], [os.tmpdir(), 'dosar(e) de lucru in ' + os.tmpdir(), TIPAR_T, pidDinT]]) { + const c = curataOrfane(par, tipar, pidDin); + if (c.sterse.length) console.log(`curatenie: ${c.sterse.length} ${ce} orfane din rulari omorate, sterse: ${c.sterse.join(', ')}`); + if (c.lasate.length) console.log(`curatenie: ${ce}, lasate in pace: ${c.lasate.join(', ')}`); +} + +// ---------------------------------------------------------------- contorul, cu trei stari +let verzi = 0, rosii = 0, stricate = 0, nemasurate = 0; +const cer = (eticheta, stare, detaliu = '') => { + if (stare === 'VERDE') verzi++; else if (stare === 'ROSU') rosii++; else if (stare === 'STRICAT') stricate++; else nemasurate++; + console.log(` [${stare.padEnd(9)}] ${eticheta}${detaliu ? ' ' + String(detaliu).slice(0, 220) : ''}`); +}; +const da = (c) => (c ? 'VERDE' : 'ROSU'); +const msg = (e) => String((e && e.message) || e).slice(0, 160); +/** o verificare: f intoarce true/false sau [bool, detaliu]; o exceptie e STRICAT (numarata ca esec) */ +const incearca = async (eticheta, f) => { try { const r = await f(); if (r && typeof r === 'object' && !Array.isArray(r) && r.nemasurat) { cer(eticheta, 'NEMASURAT', r.nemasurat); return; } const [ok, det] = Array.isArray(r) ? r : [r, '']; cer(eticheta, ok === true ? 'VERDE' : ok === false ? 'ROSU' : 'STRICAT', ok === true || ok === false ? det : String(ok)); } catch (e) { cer(eticheta, 'STRICAT', 'exceptie: ' + msg(e)); } }; +/** o sectiune intreaga: o exceptie in ea e un STRICAT numit, si proba merge mai departe */ +const pas = async (nume, f) => { console.log(nume); try { await f(); } catch (e) { cer(nume + ': sectiunea a aruncat', 'STRICAT', msg(e)); } }; +const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); +const vectori = fs.readFileSync(path.join(FIX, 'vectori.txt'), 'utf8').split(/\r?\n/).map((l) => l.replace(/#.*$/, '').trim()).filter(Boolean); +const scrieLista = (nume, lista) => { const f = path.join(T, nume + '.txt'); fs.writeFileSync(f, lista.join('\n') + '\n'); return f; }; +const LISTA_TOT = scrieLista('tot', vectori), LISTA_BTC = scrieLista('btc', vectori.filter((v) => !v.startsWith('0x'))), LISTA_ETH = scrieLista('eth', vectori.filter((v) => v.startsWith('0x'))); + +// ---------------------------------------------------------------- unelte: machete, rulare sub paza, citiri +const machete = []; let nMachete = 0; +async function porneste(fel, fixtura, extra = []) { + const n = ++nMachete; const gata = path.join(T, `gata-${n}.json`), contor = path.join(T, `contor-${n}.json`); + const ch = spawn(process.execPath, [MACHETE, '--fel', fel, '--fixtura', fixtura, '--gata', gata, '--contor', contor, ...extra], { stdio: 'ignore', windowsHide: true }); + machete.push(ch); + for (let i = 0; i < 100; i++) { if (fs.existsSync(gata) && fs.statSync(gata).size > 0) break; await sleep(100); } + if (!fs.existsSync(gata)) throw new Error('macheta ' + fel + ' nu a pornit'); + const { port } = JSON.parse(fs.readFileSync(gata, 'utf8')); + return { port, tinta: `127.0.0.1:${port}`, url: `http://127.0.0.1:${port}`, contor: () => JSON.parse(fs.readFileSync(contor, 'utf8')), opreste: () => { try { ch.kill(); } catch {} } }; +} +let nRulari = 0; +// pazaFisier: o COPIE a pazei (plantarile inverse pe paza); preincarcate: module CommonJS incarcate cu --require, care ruleaza INAINTEA +// pazei (--require vine inaintea lui --import, masurat pe Node 24), de exemplu serverele DNS mutate pe un ascultator local +// data: ziua raportului. Implicit DATA (ziua fixturilor, referinta fixa); prin Bitcoin Core ziua RULARII, fiindca scanul citeste multimea +// necheltuita a nodului la momentul rularii, si un raport datat cu o zi incheiata de peste 2 ore nu se mai sprijina pe el (runda 7, C) +function pregatesteRulare({ dir = AICI, args, tinte = '', mod = 'blocheaza', paza = true, pazaFisier = null, preincarcate = [], env = {}, data = null }) { + const n = ++nRulari; const jurnal = path.join(T, `jurnal-${n}.jsonl`); const iesire = path.join(T, `iesire-${n}`); + const zi = data ?? (args.includes('--bitcoind') ? new Date().toISOString().slice(0, 10) : DATA); + return { jurnal, iesire, argv: [...preincarcate.flatMap((f) => ['--require', f]), ...(paza ? ['--import', pazaFisier ? pathToFileURL(pazaFisier).href : PAZA] : []), path.join(dir, 'raport.mjs'), ...args, '--iesire', iesire, '--data', zi], env: { ...process.env, NODE_OPTIONS: '', AERE_PAZA_JURNAL: jurnal, AERE_PAZA_TINTE: tinte, AERE_PAZA_MOD: mod, ...env } }; +} +function ruleaza(o) { + const { jurnal, iesire, argv, env } = pregatesteRulare(o); + const r = spawnSync(process.execPath, argv, { encoding: 'utf8', timeout: 120000, windowsHide: true, env }); + return rezultatRulare(r, jurnal, iesire); +} +/** aceeasi rulare, fara sa blocheze bucla probei: un ascultator din proba (o teava locala) poate accepta conexiuni cat ruleaza unealta. + * Cu spawnSync bucla sta, iar o teava Windows primeste numai cat are instante deschise dinainte (4 la libuv), deci ar numara mai putin */ +function ruleazaAsincron(o) { + const { jurnal, iesire, argv, env } = pregatesteRulare(o); + return new Promise((res) => { + const ch = spawn(process.execPath, argv, { windowsHide: true, env }); let out = '', err = ''; + ch.stdout.on('data', (d) => { out += d; }); ch.stderr.on('data', (d) => { err += d; }); + const t = setTimeout(() => { try { ch.kill(); } catch {} }, 120000); + ch.on('close', (status) => { clearTimeout(t); res(rezultatRulare({ status, stdout: out, stderr: err }, jurnal, iesire)); }); + }); +} +function rezultatRulare(r, jurnal, iesire) { + const j = citesteJurnal(jurnal); + const are = fs.existsSync(path.join(iesire, 'raport.json')); + let raport = null; try { raport = are ? JSON.parse(fs.readFileSync(path.join(iesire, 'raport.json'), 'utf8')) : null; } catch { raport = null; } + return { cod: r.status, out: r.stdout || '', err: r.stderr || '', jurnal: j, iesire, scris: are, raport, md: are ? fs.readFileSync(path.join(iesire, 'raport.md'), 'utf8') : '', plic: are ? path.join(iesire, 'plic-aip23.json') : null }; +} +function citesteJurnal(f) { + if (!fs.existsSync(f)) return null; + const linii = fs.readFileSync(f, 'utf8').split('\n').filter(Boolean).map((l) => JSON.parse(l)); + if (!linii.some((x) => x.ev === 'incarcat')) return null; + const de = (ev) => linii.filter((x) => x.ev === ev); + return { conexiuni: de('connect'), dns: de('dns'), udp: de('udp'), worker: de('worker'), child: de('child'), nepermise: linii.filter((x) => x.allowed === false), toate: linii }; +} +// a row judged by the reference verifier: without the verifier the row is NEMASURAT (named), whatever the expression says +const cerVerif = (et, stare, det) => (fara('VERIFY') ? cer(et, 'NEMASURAT', fara('VERIFY')) : cer(et, stare, det)); +function verdictVerificator(plic) { + if (fara('VERIFY')) return 'FARA-VERIFICATOR'; + const r = spawnSync(process.execPath, [VERIFY, plic, '--json'], { encoding: 'utf8', timeout: 60000, windowsHide: true, env: { ...process.env, NODE_OPTIONS: '' } }); + try { return JSON.parse(r.stdout).verdict; } catch { return 'FARA-IESIRE(' + (r.stderr || '').slice(0, 80) + ')'; } +} +const gaseste = (rap, adresa) => (rap && Array.isArray(rap.addresses) ? rap.addresses.find((x) => x.input === adresa) : null) || null; +const eticheta = (rap, adresa) => { const a = gaseste(rap, adresa); return a ? (a.unmeasured ? U_ : a.label) : '(lipsa)'; }; +const dovada = (rap, adresa, fragment) => { const a = gaseste(rap, adresa); return !!a && Array.isArray(a.evidence) && a.evidence.some((e) => String(e).includes(fragment)); }; +const nevazut = (rap, adresa, re) => { const a = gaseste(rap, adresa); return !!a && Array.isArray(a.notSeen) && a.notSeen.some((n) => re.test(String(n))); }; +const nemasuratCu = (rap, adresa, fragment) => { const a = gaseste(rap, adresa); return !!a && !!a.unmeasured && String(a.unmeasured).includes(fragment); }; +const detaliu = (rap, adresa) => { const a = gaseste(rap, adresa); return a ? String(a.unmeasured ?? a.label ?? '') : '(lipsa)'; }; +/** etichetele asteptate, pe roluri -> { ok, rele } */ +function compara(rap, asteptari) { + const rele = Object.entries(asteptari).filter(([a, e]) => eticheta(rap, a) !== e).map(([a, e]) => `${a.slice(0, 14)}: ${eticheta(rap, a)} (asteptat ${e})`); + return { ok: rele.length === 0, rele: rele.join('; ') }; +} +const asteapta = (rap, asteptari, nume) => { const c = compara(rap, asteptari); cer(`${nume}: etichetele celor ${Object.keys(asteptari).length} vectori sunt cele asteptate`, da(c.ok), c.rele); }; +// copii ale uneltei pentru plantari: FRATE al dosarului (importurile relative raman valabile), sters la sfarsit +const copii = []; +function copie(nume) { const d = path.join(AICI, '..', `.expunere-planta-${nume}-${process.pid}`); fs.cpSync(AICI, d, { recursive: true, filter: (s) => !path.basename(s).startsWith('.expunere-planta-') && path.basename(s) !== 'node_modules' }); copii.push(d); return d; } +/** inlocuieste EXACT o data; intoarce numarul de potriviri gasite (1 = plantat) */ +function planteaza(fisier, vechi, nou) { const s = fs.readFileSync(fisier, 'utf8'); const n = s.split(vechi).length - 1; if (n !== 1) return n; fs.writeFileSync(fisier, s.replace(vechi, nou)); return 1; } +const amprenta = (f) => crypto.createHash('sha256').update(fs.readFileSync(f)).digest('hex'); +const FISIERE_UNEALTA = ['raport.mjs', 'limbaj.mjs', 'clasifica.mjs', 'adaptoare.mjs', 'bitcoin.mjs', 'ethereum.mjs', 'noble.mjs', 'paza-retea.mjs', 'machete.mjs']; +const amprenteInainte = Object.fromEntries(FISIERE_UNEALTA.map((f) => [f, amprenta(path.join(AICI, f))])); +// sintetice: chei AERE-SINTETIC, adrese si tranzactii construite aici (nicio cheie reala) +const cheie = (et) => { const priv = crypto.createHash('sha256').update('AERE-SINTETIC expunere ' + et).digest(); return { priv, pub: Buffer.from(secp256k1.getPublicKey(priv, true)) }; }; +const b58 = (b) => { const AL = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; let n = BigInt('0x' + b.toString('hex')); let s = ''; while (n > 0n) { s = AL[Number(n % 58n)] + s; n /= 58n; } for (const x of b) { if (x !== 0) break; s = '1' + s; } return s; }; +const b58check = (ver, h) => { const body = Buffer.concat([Buffer.from([ver]), h]); return b58(Buffer.concat([body, B.sha256d(body).subarray(0, 4)])); }; +const push = (d) => Buffer.concat([Buffer.from([d.length]), d]); +const SIG = Buffer.concat([Buffer.from([0x30, 0x44, 0x02, 0x20]), Buffer.alloc(32, 7), Buffer.from([0x02, 0x20]), Buffer.alloc(32, 9), Buffer.from([0x01])]); +const p2pkhSpk = (h) => Buffer.concat([Buffer.from([0x76, 0xa9, 0x14]), h, Buffer.from([0x88, 0xac])]); +const finantare = (spk, et) => { const tx = { version: 1, vin: [{ txid: crypto.createHash('sha256').update('finantare ' + et).digest('hex'), vout: 0, scriptSig: Buffer.from([0x51]), sequence: 0xffffffff, witness: [] }], vout: [{ value: 100000n, scriptPubKey: spk }], locktime: 0 }; const raw = B.serializeTx(tx); return { raw, id: B.parseTx(raw).txid }; }; +const cheltuire = (idF, scriptSig, witness) => { const tx = { version: 1, vin: [{ txid: idF, vout: 0, scriptSig, sequence: 0xffffffff, witness }], vout: [{ value: 90000n, scriptPubKey: Buffer.from('0014' + 'ab'.repeat(20), 'hex') }], locktime: 0 }; const raw = B.serializeTx(tx); return { raw, id: B.parseTx(raw).txid }; }; +const suprascriereElectrum = (nume, spk, lista) => { const sh = B.scripthash(spk); const r = { ['blockchain.scripthash.get_history:' + sh]: lista.map((x) => ({ tx_hash: x.id, height: x.height })) }; for (const x of lista) r['blockchain.transaction.get:' + x.id] = x.raw.toString('hex'); const f = path.join(T, nume + '.json'); fs.writeFileSync(f, JSON.stringify({ raspunsuri: r })); return f; }; +async function electrumCu(fisierSuprascriere, lista) { const m = await porneste('electrum', path.join(FIX, 'electrum.json'), ['--suprascrie', fisierSuprascriere]); const r = ruleaza({ args: ['--mod', '2', '--adrese', lista, '--electrum', m.tinta], tinte: m.tinta }); m.opreste(); return r; } +// o tranzactie in forma Esplora (/address/:a/txs), din octetii ei; height 0 = in mempool (status.confirmed false, fara block_height) +const esploraTx = (x) => { const tx = B.parseTx(x.raw); const conf = x.height > 0; return { txid: x.txid || x.id, version: tx.version, locktime: tx.locktime, size: x.raw.length, weight: x.raw.length * 4, fee: 0, status: conf ? { confirmed: true, block_height: x.height, block_hash: '00'.repeat(32), block_time: 0 } : { confirmed: false }, vin: tx.vin.map((v) => ({ txid: v.txid, vout: v.vout, scriptsig: B.hex(v.scriptSig), witness: v.witness.map(B.hex), prevout: null, is_coinbase: false, sequence: v.sequence })), vout: tx.vout.map((o) => ({ scriptpubkey: B.hex(o.scriptPubKey), value: Number(o.value) })) }; }; +/** an Esplora fixture override for one address: stats + the first page (mempool entries first, then confirmed, newest first), as the index serves them; + * funded_txo_count counts the confirmed outputs that pay the address (round 8: the adapter compares it with the outputs the pages carry) */ +const suprascriereEsplora = (nume, adresa, lista) => { const conf = lista.filter((x) => x.height > 0).sort((a, b) => b.height - a.height), neconf = lista.filter((x) => !(x.height > 0)); const tA = B.decodeazaIntrareBitcoin(adresa); const fin = conf.reduce((n, x) => n + B.parseTx(x.raw).vout.filter((v) => B.platesteTinta(tA, v.scriptPubKey)).length, 0); const stats = { address: adresa, chain_stats: { funded_txo_count: fin, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: conf.length }, mempool_stats: { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: neconf.length, spent_txo_sum: 0, tx_count: neconf.length } }; const f = path.join(T, nume + '.json'); fs.writeFileSync(f, JSON.stringify({ raspunsuri: { ['/address/' + adresa]: stats, ['/address/' + adresa + '/txs']: [...neconf, ...conf].map(esploraTx) } })); return f; }; +async function esploraCu(fisierSuprascriere, lista) { const m = await porneste('esplora', path.join(FIX, 'esplora.json'), ['--suprascrie', fisierSuprascriere]); const r = ruleaza({ args: ['--mod', '2', '--adrese', lista, '--esplora', m.url], tinte: m.tinta }); m.opreste(); return r; } +// predicatele reutilizate de plantarile inverse (aceeasi judecata pe iesirea reala si pe cea plantata) +const predicatGol = (r) => r.cod === 2 && !!r.raport && r.raport.summary.unmeasured === r.raport.addresses.length && r.raport.summary.noOnChainEvidence === 0 && r.raport.summary.exposed === 0 && r.raport.addresses.every((a) => /^not measured:/.test(String(a.unmeasured))); +const bitcoindFix = JSON.parse(fs.readFileSync(path.join(FIX, 'bitcoind.json'), 'utf8')); +const necheltuite = (rol) => { const k = rol === 'p2pk' ? 'scantxoutset:raw(' + B.hex(B.decodeazaIntrareBitcoin(A.p2pk).scriptPubKey) + ')' : 'scantxoutset:' + A[rol]; const v = bitcoindFix.raspunsuri[k]; return v && Array.isArray(v.unspents) ? v.unspents.length : 0; }; +const ASTEPT_CORE_FARA_TXIDS = Object.fromEntries(ROLURI_BTC.map((rol) => [A[rol], (rol === 'p2pk' || rol.startsWith('p2tr')) ? (necheltuite(rol) > 0 ? E_ : U_) : U_])); +// motivul cerut e chiar cel al lipsei listei ("spends not searched" / "sees only unspent outputs"), nu oricare motiv Core: plasa de la +// capat (prin Core niciodata F) ar tine eticheta si fara garda listei, dar cu un motiv care vorbeste despre o lista nedata +const predicatCoreFaraTxids = (r) => !!r.raport && compara(r.raport, ASTEPT_CORE_FARA_TXIDS).ok && r.raport.summary.noOnChainEvidence === 0 && ROLURI_BTC.filter((rol) => eticheta(r.raport, A[rol]) === U_).every((rol) => nemasuratCu(r.raport, A[rol], 'no address index') && nemasuratCu(r.raport, A[rol], '--txids') && (nemasuratCu(r.raport, A[rol], 'spends not searched') || nemasuratCu(r.raport, A[rol], 'sees only unspent outputs'))); +const ASTEPT_MOD1 = { [A.p2pk]: E_, [A.p2pkh_cheltuit]: F_, [A.p2pkh_necheltuit]: F_, [A.p2wpkh_cheltuit]: F_, [A.p2sh_multisig_cheltuit]: F_, [A.p2wsh_multisig_cheltuit]: F_, [A.p2tr_cheltuit]: E_, [A.p2tr_nefinantat]: E_, [ETHV.expeditor]: F_, [ETHV.primitor]: F_, [ETHV.contract]: F_, [ETHV.autoritate7702]: F_ }; +// P2TR nefinantat: fara nicio iesire pe lant eticheta e F ("no output exists yet"); daca intre timp cineva l-a finantat, fixtura o arata si asteptarea devine E +const P2TR_NEF_ARE_IESIRI = !!(ALESE.rezumat && ALESE.rezumat.p2tr_nefinantat && ALESE.rezumat.p2tr_nefinantat.txCount > 0); +const ASTEPT_BTC = { [A.p2pk]: E_, [A.p2pkh_cheltuit]: E_, [A.p2pkh_necheltuit]: F_, [A.p2wpkh_cheltuit]: E_, [A.p2sh_multisig_cheltuit]: E_, [A.p2wsh_multisig_cheltuit]: E_, [A.p2tr_cheltuit]: E_, [A.p2tr_nefinantat]: P2TR_NEF_ARE_IESIRI ? E_ : F_ }; +// Bitcoin Core cu TOATE txids din fixtura: P2TR-ul nefinantat nu e atins de nicio tranzactie data, iar scanul nu ii gaseste iesiri: Core +// nu are index de adrese, deci nu se stie daca a avut iesiri cheltuite -> NEMASURAT ("none of the N transaction(s) ... touches"), nu F. +// Si P2PKH-ul niciodata cheltuit: istoricul lui citit prin Core e lista data, pe care niciun raspuns al nodului nu o arata completa -> +// NEMASURAT ("cannot check that it lists every transaction"), nu F: prin Core o adresa e E sau NEMASURAT, niciodata F +const NU_E_COMPLETA = 'this tool cannot check that it lists every transaction of this address'; +const ASTEPT_CORE_TX = { ...ASTEPT_BTC, [A.p2pkh_necheltuit]: U_, [A.p2tr_nefinantat]: P2TR_NEF_ARE_IESIRI ? E_ : U_ }; +const ASTEPT_ETH = { [ETHV.expeditor]: E_, [ETHV.primitor]: F_, [ETHV.contract]: F_, [ETHV.autoritate7702]: E_ }; +// runda 8: STAREA pe care o serveste o macheta Ethereum la un cap: un trie al conturilor date (ethereum.mjs stareConturi), radacina lui in +// blocul capului, dovada eth_getProof a fiecarui cont la numarul capului si, pentru un cont cu cod, codul la acelasi numar. Unealta citeste +// un cont NUMAI asa (adaptoare.mjs ethRpc), deci o plantare de cont se scrie ca o stare, nu ca un raspuns la 'latest' +const ethFixR = JSON.parse(fs.readFileSync(path.join(FIX, 'eth-rpc.json'), 'utf8')).raspunsuri; +const CAP_ETH = ethFixR['eth_blockNumber:[]']; +const stareEth = (conturi, cap = CAP_ETH, timp = ethFixR[`eth_getBlockByNumber:${JSON.stringify([CAP_ETH, false])}`].timestamp) => { const st = E.stareConturi(conturi); const r = { [`eth_getBlockByNumber:${JSON.stringify([cap, false])}`]: { number: cap, timestamp: timp, stateRoot: st.stateRoot } }; for (const c of conturi) { r[`eth_getProof:${JSON.stringify([c.address, [], cap])}`] = st.dovada(c.address); if (c.code && c.code !== '0x') r[`eth_getCode:${JSON.stringify([c.address, cap])}`] = c.code; } return r; }; +let m1 = null; let txs = {}; +// istoricul unei adrese din tranzactiile reale ale fixturii (umplute in sectiunea 1): finantarile ei si cheltuirile iesirilor ei +const istoricCore = (adresa) => { const t = B.decodeazaIntrareBitcoin(adresa); const toate = Object.values(txs); const iesiri = new Set(); const fin = toate.filter((tx) => tx.vout.some((o) => B.platesteTinta(t, o.scriptPubKey))); for (const tx of fin) tx.vout.forEach((o, i) => { if (B.platesteTinta(t, o.scriptPubKey)) iesiri.add(tx.txid + ':' + i); }); const chelt = toate.filter((tx) => tx.vin.some((v) => iesiri.has(v.txid + ':' + v.vout))); return { fin: fin.map((x) => x.txid), chelt: chelt.map((x) => x.txid) }; }; + +try { + // ================================================================ 1. codecuri + await pas('1. codecurile', async () => { + cer('BIP-173: vectorii valizi (majuscule si minuscule) decodeaza', da(!!B.segwitDecode('BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4') && !!B.segwitDecode('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4'))); + cer('BIP-350: adresa v1 cu bech32m decodeaza, aceeasi cu constanta bech32 e REFUZATA', da(!!B.segwitDecode('bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kt5nd6y') && B.segwitDecode('bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7k7grplx') === null)); + cer('bech32: suma de control gresita si cazul amestecat sunt REFUZATE', da(B.segwitDecode('bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5') === null && B.segwitDecode('bc1qW508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4') === null)); + cer('base58check: adresa buna decodeaza, un caracter schimbat e REFUZAT', da(!!B.base58checkDecode('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa') && B.base58checkDecode('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNb') === null)); + const tipAsteptat = { p2pk: 'p2pk', p2pkh_cheltuit: 'p2pkh', p2pkh_necheltuit: 'p2pkh', p2wpkh_cheltuit: 'p2wpkh', p2sh_multisig_cheltuit: 'p2sh', p2wsh_multisig_cheltuit: 'p2wsh', p2tr_cheltuit: 'p2tr', p2tr_nefinantat: 'p2tr' }; + const tipuri = ROLURI_BTC.map((rol) => [rol, B.decodeazaIntrareBitcoin(A[rol]).type]); + cer('tipul de script derivat din octeti pentru cei 8 vectori Bitcoin', da(tipuri.every(([k, t]) => t === tipAsteptat[k])), tipuri.map(([k, t]) => k + '=' + t).join(' ')); + cer('intrari rele numite: adresa trunchiata, p2pk cu cheie scurta, script gol', da(!!B.decodeazaIntrareBitcoin('1Pg8BtbzJF7Th2wgPM8twBxWePHDrQ6vM').error && !!B.decodeazaIntrareBitcoin('p2pk:02ab').error && !!B.decodeazaIntrareBitcoin('script:').error)); + const el = JSON.parse(fs.readFileSync(path.join(FIX, 'electrum.json'), 'utf8')); + const brute = Object.entries(el.raspunsuri).filter(([k]) => k.startsWith('blockchain.transaction.get:')); + let refacute = 0, hashuite = 0; + for (const [k, hex] of brute) { const raw = Buffer.from(hex, 'hex'); const t = B.parseTx(raw); txs[t.txid] = t; if (B.serializeTx(t).equals(raw)) refacute++; if (t.txid === k.slice('blockchain.transaction.get:'.length)) hashuite++; } + cer(`toate cele ${brute.length} tranzactii reale din fixtura: refacute octet cu octet ${refacute}/${brute.length}, hashuite la id ${hashuite}/${brute.length}`, da(brute.length >= 30 && refacute === brute.length && hashuite === brute.length)); + cer('parserul refuza octeti in plus la coada si o tranzactie fara intrari', da((() => { const h = brute[0][1]; try { B.parseTx(Buffer.from(h + '00', 'hex')); return false; } catch { } try { B.parseTx(Buffer.from('01000000' + '00' + '00' + '00000000', 'hex')); return false; } catch { return true; } })())); + // annex BIP-341: un singur element care incepe cu 0x50 e o semnatura, nu un annex + const tTr = B.decodeazaIntrareBitcoin(A.p2tr_nefinantat); + const sig50 = Buffer.concat([Buffer.from([0x50]), Buffer.alloc(63, 1)]); + cer('BIP-341: o semnatura de 64 de octeti care incepe cu 0x50, singura in witness, e o cheltuire pe calea de cheie (nu un annex)', da(B.dovezileIntrarii(tTr, { scriptSig: Buffer.alloc(0), witness: [sig50] }, true).some((f) => f.what === 'taproot-key-path-spend') && B.dovezileIntrarii(tTr, { scriptSig: Buffer.alloc(0), witness: [sig50, Buffer.from([0x50, 1])] }, true).some((f) => f.what === 'taproot-key-path-spend'))); + // runda 7 (MEDIU-A): genezele celor cinci retele, recalculate AICI din campurile antetului de geneza (Bitcoin Core chainparams.cpp: + // versiunea 1, radacina merkle, ora, bits, nonce), trebuie sa fie exact hash-urile din tabelul uneltei (bitcoin.mjs RETELE_BTC), iar + // bits-ul fiecarei geneze trebuie sa stea sub limita de dovada de lucru pe care tabelul o da retelei ei (controlul limitelor) + await incearca('MEDIU-A: genezele Bitcoin (mainnet, testnet3, testnet4, signet, regtest) recalculate din campurile antetului == RETELE_BTC din unealta; bits-ul fiecarei geneze sub limita retelei ei, iar bits-ul signet / regtest PESTE limita mainnet', async () => { + const antet = (merkle, timp, bits, nonce) => { const b = Buffer.alloc(80); b.writeInt32LE(1, 0); Buffer.from(merkle, 'hex').reverse().copy(b, 36); b.writeUInt32LE(timp, 68); b.writeUInt32LE(bits, 72); b.writeUInt32LE(nonce >>> 0, 76); return b.toString('hex'); }; + const M = '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b'; + const geneze = { mainnet: antet(M, 1231006505, 0x1d00ffff, 2083236893), testnet3: antet(M, 1296688602, 0x1d00ffff, 414098458), testnet4: antet('7aa0a7ae1e223414cb807e40cd57e667b718e42aaf9306db9102fe28912b7b4e', 1714777860, 0x1d00ffff, 393743547), signet: antet(M, 1598918400, 0x1e0377ae, 52613770), regtest: antet(M, 1296688602, 0x207fffff, 2) }; + const rele = Object.entries(geneze).filter(([n, hx]) => { const a = B.antetBloc(hx); return a.eroare || a.hash !== B.RETELE_BTC[n].geneza || B.reteaDinGeneza(a.hash) !== n || B.tintaDinBits(a.bits) > B.RETELE_BTC[n].limita; }).map(([n]) => n); + const pesteMainnet = [0x1e0377ae, 0x207fffff].every((b) => B.tintaDinBits(b) > B.RETELE_BTC.mainnet.limita) && B.tintaDinBits(0x1d00ffff) <= B.RETELE_BTC.mainnet.limita; + return [rele.length === 0 && pesteMainnet && Object.keys(B.RETELE_BTC).length === 5 && B.reteaDinGeneza('00'.repeat(32)) === null, `geneze rele: ${rele.join(',') || 'niciuna'}; signet / regtest peste limita mainnet: ${pesteMainnet}`]; + }); + // runda 7 (MIC-D): iesirea P2TR fara arbore (BIP-86) a unei chei, pe vectorul din BIP-86 (contul 0, prima adresa de primire): cheia + // interna cc8a4bc6... da cheia de iesire a60869f0... si adresa bc1p5cyxnuxm...; un bit schimbat in cheia interna da alta cheie + await incearca('MIC-D: BIP-86, vectorul din BIP (cheia interna cc8a4bc6.. -> cheia de iesire a60869f0.., adresa bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr) refacut de cheieIesireBip86; o alta cheie interna da alta iesire', async () => { + const P = secp256k1.ProjectivePoint.fromHex('02cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115'); + const q = B.cheieIesireBip86(P); const q2 = B.cheieIesireBip86(secp256k1.ProjectivePoint.fromHex('03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115')); + const alta = B.cheieIesireBip86(secp256k1.ProjectivePoint.fromHex(Buffer.from(cheie('bip86-alta').pub))); + return [!!q && B.hex(q) === 'a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c' && B.segwitEncode('bc', 1, q) === 'bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr' && !!q2 && q2.equals(q) && !!alta && !alta.equals(q), `iesirea: ${q ? B.hex(q).slice(0, 16) : 'nimic'}..; aceeasi x cu y impar (BIP-340: x-only) da aceeasi iesire: ${!!q2 && q2.equals(q)}`]; + }); + await incearca('RLP: codificarea proprie == rlpEncode din verify-proof.mjs (publicat) pe 4 structuri', async () => { if (fara('VERIFY_PROOF')) return { nemasurat: fara('VERIFY_PROOF') }; const { rlpEncode } = await import(pathToFileURL(VERIFY_PROOF).href); const probe = [[], [Buffer.alloc(0)], [Buffer.from([1]), [Buffer.from('ab'.repeat(60), 'hex')]], Buffer.from('x'.repeat(1000))]; return probe.every((p) => E.rlpEncode(p).equals(rlpEncode(p))); }); + // runda 8 (MEDIU-2 al reviziei rundei 7): punctele de control ale uneltei (bitcoin.mjs RETELE_BTC.mainnet.puncte) == pinii urmaritorului + // de antete al scutului (btc/antete.mjs PUNCTE_PINATE: inaltimea, hash-ul, cei 80 de octeti); fiecare antet se hashuieste la hash-ul lui, + // atinge dovada de lucru a campului lui bits si sta sub limita mainnet; punctDeControl alege cel mai inalt punct <= capatul lantului, + // da { sub } sub cel mai jos si null pe o retea fara puncte + await incearca('MEDIU-2 (r8): punctele de control ale uneltei == pinii lui btc/antete.mjs, fiecare antet hashuit la hash-ul lui si sub limita mainnet; punctDeControl: 971000 -> 969696, 969686 -> 967680, 967679 -> sub 967680, regtest -> niciunul', async () => { + if (fara('PINI')) return { nemasurat: fara('PINI') }; + const { PUNCTE_PINATE } = await import(pathToFileURL(PINI).href); + const P = B.RETELE_BTC.mainnet.puncte || []; + const rele = P.filter((p) => { const q = PUNCTE_PINATE.find((x) => x.height === p.height); const a = B.antetBloc(p.header); return !q || q.hash !== p.hash || q.header !== p.header || a.eroare || a.hash !== p.hash || B.tintaDinBits(a.bits) > B.RETELE_BTC.mainnet.limita; }).map((p) => p.height); + const alege = [B.punctDeControl('mainnet', 971000), B.punctDeControl('mainnet', 969686), B.punctDeControl('mainnet', 967679), B.punctDeControl('regtest', 971000)]; + return [P.length === 2 && rele.length === 0 && alege[0].height === 969696 && alege[1].height === 967680 && alege[2].sub === 967680 && alege[3] === null, `puncte ${P.map((p) => p.height).join(',')}; rele: ${rele.join(',') || 'niciunul'}; alegerea: ${JSON.stringify(alege.map((x) => x && (x.height || x)))}`]; + }); + // runda 8 (MEDIU-1): constructorul de trie al probei pe vectorii Ethereum (trie gol, "dogs", "puppy": radacinile cunoscute), iar + // plimbatorul uneltei (ethereum.mjs mptGet / contDinDovada) da acelasi rezultat ca plimbatorul PUBLICAT (verificator-falcon/mpt.mjs) pe + // dovezile fixturii, pe dovada unui cont absent; un nod schimbat, o alta radacina si o dovada goala nu duc la cont (eroare numita) + await incearca('MEDIU-1 (r8): trieDin pe vectorii Ethereum (gol 56e81f17.., dogs 8aad789d.., puppy 5991bb8c..); contDinDovada == mptGet publicat pe toate dovezile fixturii si pe o absenta; un nod schimbat / alta radacina / dovada goala -> eroare', async () => { + if (fara('MPT')) return { nemasurat: fara('MPT') }; + const M = await import(pathToFileURL(MPT).href); + const t = (o) => E.trieDin(Object.entries(o).map(([k, v]) => ({ cheie: Buffer.from(k), valoare: Buffer.from(v) }))).radacina.toString('hex'); + const vectori = t({}) === '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' && t({ doe: 'reindeer', dog: 'puppy', dogglesworth: 'cat' }) === '8aad789dff2f538bca5d8ea56e8abe10f4c7ba3a5dea95fea4cd6e7c3a1168d3' && t({ do: 'verb', horse: 'stallion', doge: 'coin', dog: 'puppy' }) === '5991bb8c6514148a29db676a14ac506cd2cd5775ace63c30a4fe457715e9ac84'; + const fx = JSON.parse(fs.readFileSync(path.join(FIX, 'eth-rpc.json'), 'utf8')).raspunsuri; const cap = fx['eth_blockNumber:[]']; const radacina = fx[`eth_getBlockByNumber:${JSON.stringify([cap, false])}`].stateRoot; + const dovezi = Object.entries(fx).filter(([k]) => k.startsWith('eth_getProof:')).map(([k, v]) => [JSON.parse(k.slice('eth_getProof:'.length))[0], v]); + const absent = '0x' + '22'.repeat(20); const sAbs = E.stareConturi([{ address: ETHV.primitor.toLowerCase(), nonce: 0, code: '0x' }, { address: '0x' + '33'.repeat(20), nonce: 5, code: '0x' }]); + const laFel = (rad, adr, d) => { const a = E.contDinDovada(rad, adr, d); let p; try { const v = M.mptGet(rad, M.keccak(M.hexb(adr)), d.accountProof); p = v ? M.rlpDecode(v) : null; } catch { p = 'eroare'; } return a.eroare ? p === 'eroare' : (a.absent ? p === null : Array.isArray(p) && BigInt('0x' + (p[0].toString('hex') || '0')) === a.nonce && p[3].toString('hex') === a.codeHash); }; + const toate = dovezi.every(([adr, d]) => laFel(radacina, adr, d)) && laFel(sAbs.stateRoot, absent, sAbs.dovada(absent)) && E.contDinDovada(sAbs.stateRoot, absent, sAbs.dovada(absent)).absent === true; + const [adr0, d0] = dovezi[0]; const rau = [...d0.accountProof]; const u = rau.length - 1; rau[u] = rau[u].slice(0, -2) + (rau[u].endsWith('00') ? '01' : '00'); + const negative = [E.contDinDovada(radacina, adr0, { ...d0, accountProof: rau }), E.contDinDovada('0x' + '44'.repeat(32), adr0, d0), E.contDinDovada(radacina, adr0, { ...d0, accountProof: [] }), E.contDinDovada(radacina, adr0, { nonce: '0x0' })].map((x) => x.eroare || 'TRECUT'); + return [vectori && dovezi.length === 4 && toate && negative.every((x) => x !== 'TRECUT'), `vectori ${vectori}; ${dovezi.length} dovezi, la fel cu plimbatorul publicat: ${toate}; negative: ${negative.map((x) => x.slice(0, 30)).join(' | ')}`]; + }); + // EIP-155, vectorul din EIP: nonce 9, gasPrice 20 gwei, gas 21000, to 0x3535.., value 1e18, data gol, chain 1, cheia 0x46..46 + const k46 = Buffer.alloc(32, 0x46); const adr46 = E.adresaDinCheie(Buffer.from(secp256k1.getPublicKey(k46, false))); + const tx155 = { type: '0x0', nonce: '0x9', gasPrice: '0x4a817c800', gas: '0x5208', to: '0x3535353535353535353535353535353535353535', value: '0xde0b6b3a7640000', input: '0x', v: '0x25', r: '0x28ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276', s: '0x67cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83' }; + const h155 = E.hashuriTx(tx155); + cer('EIP-155: hash-ul de semnare al vectorului din EIP e daf5a779... si expeditorul recuperat e 0x9d8a62f6...', da(h155.signingHash.toString('hex') === 'daf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53' && E.recupereazaExpeditor(tx155).address === '0x9d8a62f656a8d1615c1294fd71e9cfb3e4855a4f')); + // tranzactii 0x1 si 0x3 semnate aici cu cheia 0x46..46 si recuperate + const semneaza = (tx) => { const h = E.hashuriTx(tx); const s = secp256k1.sign(h.signingHash, k46); return { ...tx, yParity: '0x' + s.recovery.toString(16), r: '0x' + s.r.toString(16), s: '0x' + s.s.toString(16) }; }; + const baza = { chainId: '0x1', nonce: '0x1', gas: '0x5208', to: '0x3535353535353535353535353535353535353535', value: '0x1', input: '0x', accessList: [{ address: '0x3535353535353535353535353535353535353535', storageKeys: ['0x' + '01'.repeat(32)] }], yParity: '0x0', r: '0x1', s: '0x1' }; + const t1 = semneaza({ ...baza, type: '0x1', gasPrice: '0x1' }); + const t3 = semneaza({ ...baza, type: '0x3', maxPriorityFeePerGas: '0x1', maxFeePerGas: '0x2', maxFeePerBlobGas: '0x1', blobVersionedHashes: ['0x01' + '00'.repeat(31)] }); + const rec = (t) => { const r = E.recupereazaExpeditor({ ...t, hash: E.hashuriTx(t).txHash }); return r.ok && r.address === adr46 && r.txHashMatches; }; + cer('tranzactii 0x1 (EIP-2930) si 0x3 (EIP-4844) semnate cu cheia de proba se recupereaza la adresa ei', da(rec(t1) && rec(t3))); + const ethFix = JSON.parse(fs.readFileSync(path.join(FIX, 'eth-rpc.json'), 'utf8')); + const blocKey = Object.keys(ethFix.raspunsuri).find((k) => k.startsWith('eth_getBlockByNumber:')); const bloc = ethFix.raspunsuri[blocKey]; + let recup = 0; const tipuriTx = {}; + for (const tx of bloc.transactions) { const r = E.recupereazaExpeditor(tx); tipuriTx[tx.type] = (tipuriTx[tx.type] || 0) + 1; if (r.ok && r.address === tx.from.toLowerCase() && r.txHashMatches) recup++; } + cer(`Ethereum: cheia recuperata si hash-ul refacut pe TOATE cele ${bloc.transactions.length} tranzactii ale blocului din fixtura`, da(recup === bloc.transactions.length && bloc.transactions.length >= 50), JSON.stringify(tipuriTx)); + const tx0 = bloc.transactions.find((t) => t.from.toLowerCase() === ETHV.expeditor.toLowerCase()); + const txRau = { ...tx0, r: '0x' + (BigInt(tx0.r) ^ 1n).toString(16).padStart(64, '0') }; const rRau = E.recupereazaExpeditor(txRau); + cer('Ethereum negativ: un bit schimbat in r -> alta adresa sau niciuna, niciodata expeditorul', da(!(rRau.ok && rRau.address === tx0.from.toLowerCase())), rRau.ok ? 'a dat ' + rRau.address.slice(0, 12) + '..' : rRau.reason); + const tx4 = bloc.transactions.find((t) => t.type === '0x4' && Array.isArray(t.authorizationList) && t.authorizationList.length); + const aut = tx4 ? E.recupereazaAutoritate(tx4.authorizationList[0]) : { ok: false, reason: 'nicio tranzactie 0x4 in bloc' }; + cer('EIP-7702: autoritatea recuperata din autorizatia reala a blocului e adresa din alese.json, iar un bit schimbat in r nu o mai da', da(aut.ok && aut.address === ETHV.autoritate7702.toLowerCase() && !(E.recupereazaAutoritate({ ...tx4.authorizationList[0], r: '0x' + (BigInt(tx4.authorizationList[0].r) ^ 1n).toString(16).padStart(64, '0') }).address === aut.address)), aut.ok ? '' : aut.reason); + cer('EIP-7702: designatorul 0xef0100||adresa e recunoscut, un cod de contract nu', da(E.esteDelegare7702('0xef0100' + '11'.repeat(20)) && !E.esteDelegare7702('0x6060604052') && !E.esteDelegare7702('0xef0100' + '11'.repeat(19)))); + cer('EIP-55: suma valida, minuscule acceptate ca neverificate, suma gresita REFUZATA', da(E.decodeazaAdresaEth('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2').checksum === 'valid' && E.decodeazaAdresaEth(ETHV.primitor).checksum === 'none' && !!E.decodeazaAdresaEth('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc3').error)); + }); + + // ================================================================ 2. fixturi + await pas('2. fixturile', async () => { + for (const f of ['esplora', 'electrum', 'bitcoind', 'eth-rpc']) { const j = JSON.parse(fs.readFileSync(path.join(FIX, f + '.json'), 'utf8')); cer(`${f}.json: sursa si data inregistrarii scrise in fisier, fara CR`, da(j._sursa && /^\d{4}-\d{2}-\d{2}T/.test(j._sursa.cand) && !!j._sursa.baza && !fs.readFileSync(path.join(FIX, f + '.json')).includes(0x0d)), j._sursa ? j._sursa.cand : ''); } + // runda 8: starea Ethereum a fixturii (SINTETICA, scris in _sursa.nota) e coerenta: fiecare dovada duce de la radacina de stare a + // capului la contul ei, iar codul servit la numarul capului se hashuieste la hash-ul de cod dovedit; punctele de control servite de + // fixturile Bitcoin sunt cele ale uneltei + { + const fx = JSON.parse(fs.readFileSync(path.join(FIX, 'eth-rpc.json'), 'utf8')).raspunsuri; const cap = fx['eth_blockNumber:[]']; const capB = fx[`eth_getBlockByNumber:${JSON.stringify([cap, false])}`]; + const conturi = Object.entries(fx).filter(([k]) => k.startsWith('eth_getProof:')).map(([k, v]) => { const adr = JSON.parse(k.slice('eth_getProof:'.length))[0]; const c = E.contDinDovada(capB && capB.stateRoot, adr, v); const cod = fx['eth_getCode:' + JSON.stringify([adr, cap])]; return { adr, c, codOk: c.eroare ? false : c.codeHash === E.HASH_COD_GOL ? cod === undefined : typeof cod === 'string' && E.keccak(Buffer.from(cod.slice(2), 'hex')).toString('hex') === c.codeHash }; }); + cer('eth-rpc.json (r8): fiecare dovada eth_getProof duce la radacina de stare a capului si codul servit la numarul capului se hashuieste la hash-ul de cod dovedit; nicio cerere la \'latest\' nu mai e in fixtura', da(conturi.length === 4 && conturi.every((x) => !x.c.eroare && x.codOk) && !Object.keys(fx).some((k) => k.includes('"latest"'))), conturi.map((x) => `${x.adr.slice(0, 8)}: ${x.c.eroare || 'nonce ' + x.c.nonce}${x.codOk ? '' : ' COD RAU'}`).join('; ')); + const el = JSON.parse(fs.readFileSync(path.join(FIX, 'electrum.json'), 'utf8')).raspunsuri, es = JSON.parse(fs.readFileSync(path.join(FIX, 'esplora.json'), 'utf8')).raspunsuri, bc = JSON.parse(fs.readFileSync(path.join(FIX, 'bitcoind.json'), 'utf8')).raspunsuri; + cer('electrum / esplora / bitcoind.json (r8): blocurile de la inaltimile punctelor de control sunt punctele uneltei; geneza si inaltimea Core sunt ale mainnet-ului si ale varfului fixturilor (971000)', da(B.RETELE_BTC.mainnet.puncte.every((p) => el['blockchain.block.header:' + p.height] === p.header && es['/block-height/' + p.height] === p.hash && bc['getblockhash:' + p.height] === p.hash) && bc['getblockhash:0'] === B.RETELE_BTC.mainnet.geneza && bc.getblockcount === 971000)); + } + cer('alese.json: fiecare rol are provenienta scrisa, si vectori.txt contine exact adresele rolurilor', da(ROLURI_BTC.every((r) => ALESE.provenienta && ALESE.provenienta[r]) && ['expeditor', 'primitor', 'contract', 'autoritate7702'].every((r) => ALESE.provenienta['ethereum_' + r]) && [...ROLURI_BTC.map((r) => A[r]), ETHV.expeditor, ETHV.primitor, ETHV.contract, ETHV.autoritate7702].every((a) => vectori.includes(a)) && vectori.length === 12)); + }); + + // ================================================================ 3. modul 1 + await pas('3. modul 1 (offline) sub paza de retea', async () => { + m1 = ruleaza({ args: ['--mod', '1', '--adrese', LISTA_TOT, '--xpub-partajat', 'nu', '--semnaturi-offchain', 'necunoscut', '--alte-lanturi', 'da'] }); + cer('modul 1 scrie raportul si iese 0', da(m1.cod === 0 && m1.scris), m1.err.slice(0, 120)); + if (!m1.raport) return; + asteapta(m1.raport, ASTEPT_MOD1, 'modul 1'); + cer('modul 1: paza incarcata, ZERO conexiuni / DNS / UDP / workeri / procese copil', da(!!m1.jurnal && m1.jurnal.toate.length === 1), m1.jurnal ? `${m1.jurnal.toate.length - 1} evenimente` : 'jurnal lipsa'); + cerVerif('modul 1: plicul compliance e VALID la verificatorul de referinta AIP-23', da(verdictVerificator(m1.plic) === 'VALID')); + const plic1 = JSON.parse(fs.readFileSync(m1.plic, 'utf8')); + cer('modul 1: evidenceHash din plic == amprenta canonica a raport.json (verificaRaport din raport-conformitate)', da(verificaRaport(m1.raport, plic1).ok && sha256Canonic(m1.raport) === plic1.statement.evidenceHash)); + cer('modul 1: Markdown-ul pune cele doua intrebari si consemneaza raspunsurile ca DECLARATII', da(/extended public key/.test(m1.md) && /off chain/.test(m1.md) && /Declared answer: \*\*no \(declared\)\*\*/.test(m1.md) && /Declared answer: \*\*unknown \(declared\)\*\*/.test(m1.md) && /not a measurement/.test(m1.md))); + cer('modul 1: termenele citate cu document, versiune si data (NIST IR 8547 ipd 2024-11-12: 2030/2035; UE 2025-06-23: 2030/2035)', da(/NIST IR 8547 ipd/.test(m1.md) && /initial public draft/.test(m1.md) && /2024-11-12/.test(m1.md) && /deprecated after 2030, disallowed after 2035/.test(m1.md) && /2025-06-23/.test(m1.md) && /2030-12-31/.test(m1.md) && /2035-12-31/.test(m1.md) && m1.raport.deadlines.regimes['nist-ir-8547'].read === '2026-09-28')); + cer('modul 1: raportul spune ce NU vede (cheltuirile) la fiecare adresa de tip hash', da(m1.raport.addresses.filter((a) => a.chain === 'bitcoin' && a.label === F_).every((a) => a.notSeen.some((n) => /spends from this address/.test(n))))); + cer('modul 1: zero cuvinte interzise in JSON si Markdown', da(verificaLimbaj(JSON.stringify(m1.raport)).length === 0 && verificaLimbaj(m1.md).length === 0)); + // MIC-1 (runda 6): a treia intrebare (aceeasi cheie pe alt lant) e pusa si consemnata; fiecare F numeste celelalte lanturi, fiecare F Bitcoin + // randul N8 (aceeasi cheie sub alt tip de script), fiecare F Ethereum semnaturile off-chain + const fM1 = m1.raport.addresses.filter((a) => a.label === F_); + cer('modul 1 (MIC-1): a treia intrebare (aceeasi cheie pe ALT lant) e pusa si consemnata; fiecare F numeste celelalte lanturi ("no chain was read"), fiecare F Bitcoin randul N8, fiecare F Ethereum semnaturile off-chain', da(/the same key, or the same address, signed on another chain/.test(m1.md) && m1.raport.declarations.otherChains && m1.raport.declarations.otherChains.answer === 'yes (declared)' && /Declared answer: \*\*yes \(declared\)\*\*/.test(m1.md) && fM1.length >= 6 && fM1.every((a) => a.notSeen.some((n) => /^other chains sharing this key: .*no chain was read \(mode 1\)/.test(n))) && fM1.filter((a) => a.chain === 'bitcoin').every((a) => a.notSeen.some((n) => /^the same key under another script type/.test(n))) && fM1.filter((a) => a.chain === 'ethereum').every((a) => a.notSeen.some((n) => /^keys disclosed off chain \(EIP-191/.test(n)))), `${fM1.length} F`); + cer('modul 1: nimic despre proprietar: subiectul e derivat din adrese, nu un nume', da(/^addresses:[0-9a-f]{16}$/.test(m1.raport.subject))); + }); + + // ================================================================ 4. modul 2 + await pas('4. modul 2 prin machete (raspunsuri inregistrate), sub paza', async () => { + const txids = Object.keys(bitcoindFix.raspunsuri).filter((k) => k.startsWith('getrawtransaction:')).map((k) => k.slice('getrawtransaction:'.length)); + const LISTA_TXIDS = scrieLista('txids', txids); + for (const [fel, fixtura, flag, extra] of [['electrum', 'electrum.json', '--electrum', []], ['esplora', 'esplora.json', '--esplora', []], ['bitcoind', 'bitcoind.json', '--bitcoind', ['--txids', LISTA_TXIDS]]]) { + const m = await porneste(fel, path.join(FIX, fixtura)); + const r = ruleaza({ args: ['--mod', '2', '--adrese', LISTA_BTC, flag, fel === 'electrum' ? m.tinta : m.url, ...extra], tinte: m.tinta }); + await sleep(150); const c = m.contor(); m.opreste(); + const codAsteptat = fel === 'bitcoind' ? 2 : 0; + cer(`${fel}: raportul e scris si iese ${codAsteptat}`, da(r.cod === codAsteptat && r.scris), r.err.slice(0, 120)); + if (!r.raport) continue; + asteapta(r.raport, fel === 'bitcoind' ? ASTEPT_CORE_TX : ASTEPT_BTC, fel); + if (fel !== 'bitcoind') { const fR = r.raport.addresses.filter((a) => a.label === F_); cer(`${fel} (MEDIU-1, MEDIU-2, MIC-1): fiecare verdict numeste pana unde merge istoricul ("history served up to height 971000 (tip header time 2026-10-11T22:53:11Z)"); fiecare F (${fR.length}) numeste randul N8 si celelalte lanturi, iar P2PKH-ul necheltuit si surorile citite (P2WPKH, P2SH-P2WPKH)`, da(r.raport.addresses.every((a) => a.evidence[0] === 'history served up to height 971000 (tip header time 2026-10-11T22:53:11Z)') && fR.length >= 2 && fR.every((a) => a.notSeen.some((n) => /^the same key under another script type that cannot be derived/.test(n)) && a.notSeen.some((n) => /^other chains sharing this key: .*only the Bitcoin chain served by the target was read/.test(n))) && dovada(r.raport, A.p2pkh_necheltuit, 'sibling scripts of the same HASH160 read through the same target: P2WPKH bc1q') && dovada(r.raport, A.p2pkh_necheltuit, ', P2SH-P2WPKH 3')), (gaseste(r.raport, A.p2pkh_necheltuit).evidence.find((e) => /^sibling/.test(e)) || '').slice(0, 120)); } + if (fel === 'bitcoind' && !P2TR_NEF_ARE_IESIRI) cer('bitcoind cu --txids: P2TR-ul pe care nicio tranzactie data nu il atinge (si fara iesiri necheltuite) iese NEMASURAT numit, nu F "no output exists yet"', da(nemasuratCu(r.raport, A.p2tr_nefinantat, `none of the ${txids.length} transaction(s) given with --txids touches this address`)), detaliu(r.raport, A.p2tr_nefinantat).slice(0, 120)); + cer(`${fel}: dovezile numesc ce s-a vazut (cheia in scriptSig, cheia in witness, m-of-n in redeem/witness script, cheltuirea P2TR, iesirea P2PK)`, da(dovada(r.raport, A.p2pkh_cheltuit, 'public key revealed in the scriptSig') && dovada(r.raport, A.p2wpkh_cheltuit, 'public key revealed in the witness') && gaseste(r.raport, A.p2sh_multisig_cheltuit).evidence.some((e) => /\d+-of-\d+ multisig/.test(e)) && gaseste(r.raport, A.p2wsh_multisig_cheltuit).evidence.some((e) => /\d+-of-\d+ multisig/.test(e)) && dovada(r.raport, A.p2tr_cheltuit, 'spend in') && dovada(r.raport, A.p2pk, 'P2PK output')), [A.p2sh_multisig_cheltuit, A.p2wsh_multisig_cheltuit, A.p2tr_cheltuit].map((a) => detaliu(r.raport, a)).join(' | ')); + if (fel === 'bitcoind') cer('bitcoind cu --txids: adresa P2PKH niciodata cheltuita iese NEMASURAT numit ("cannot check that it lists every transaction"), nu F: istoricul ei e lista data, nu o masuratoare', da(eticheta(r.raport, A.p2pkh_necheltuit) === U_ && nemasuratCu(r.raport, A.p2pkh_necheltuit, NU_E_COMPLETA)), detaliu(r.raport, A.p2pkh_necheltuit).slice(0, 120)); + else cer(`${fel}: adresa P2PKH niciodata cheltuita spune ce a vazut (iesiri, nicio cheltuire) si ce nu vede (off chain)`, da(dovada(r.raport, A.p2pkh_necheltuit, 'no spend of this address') && nevazut(r.raport, A.p2pkh_necheltuit, /off chain/))); + cer(`${fel}: jurnalul pazei == conexiunile ACCEPTATE de macheta (${r.jurnal ? r.jurnal.conexiuni.length : '?'} == ${c.connections}), toate spre tinta declarata, zero DNS / procese`, da(!!r.jurnal && r.jurnal.conexiuni.length === c.connections && c.connections > 0 && r.jurnal.nepermise.length === 0 && r.jurnal.dns.length === 0 && r.jurnal.child.length === 0 && r.jurnal.worker.length === 0 && r.jurnal.conexiuni.every((x) => x.host === '127.0.0.1' && x.port === m.port)), `cereri servite ${c.requests}, necunoscute ${c.unknown.length}`); + cerVerif(`${fel}: plicul VALID la verificatorul de referinta; zero cuvinte interzise`, da(verdictVerificator(r.plic) === 'VALID' && verificaLimbaj(r.md).length === 0 && verificaLimbaj(JSON.stringify(r.raport)).length === 0)); + if (fel === 'bitcoind') cer('bitcoind cu --txids: raportul spune ca nu exista index de adrese si ca s-au citit doar id-urile date', da(r.raport.addresses.every((a) => a.unmeasured || a.notSeen.some((n) => /no address index/.test(n))))); + if (fel === 'bitcoind') cer(`bitcoind cu --txids: lantul nodului (geneza, inaltimea, punctul de control: 3 cereri) si tranzactiile date se citesc O DATA pentru tot raportul (cereri servite ${c.requests} == 3 + 8 scanuri + ${txids.length} txids), pozitia e hash-ul INTREG al blocului (nu un prefix de zerouri, nu "confirmations")`, da(c.requests === 3 + 8 + txids.length && r.raport.adapterNotes.some((n) => /the chain the node serves was read once/.test(n)) && r.raport.adapterNotes.some((n) => /given with --txids were read once/.test(n)) && gaseste(r.raport, A.p2pkh_cheltuit).evidence.some((e) => /block [0-9a-f]{64}\)/.test(e)) && !JSON.stringify(r.raport).includes('confirmations')), (gaseste(r.raport, A.p2pkh_cheltuit).evidence.find((e) => /block /.test(e)) || '').slice(-90)); + } + // Bitcoin Core FARA --txids: scanul vede numai iesirile necheltuite; nicio adresa de tip hash nu are voie sa iasa F + { + const m = await porneste('bitcoind', path.join(FIX, 'bitcoind.json')); + const r = ruleaza({ args: ['--mod', '2', '--adrese', LISTA_BTC, '--bitcoind', m.url], tinte: m.tinta }); m.opreste(); + cer(`bitcoind FARA --txids: adresele de tip hash si scripturile fara iesiri necheltuite ies NEMASURAT numit ("no address index"), cele cu iesiri necheltuite si cheia in script ies E; zero F; cod 2`, da(r.cod === 2 && predicatCoreFaraTxids(r)), r.raport ? compara(r.raport, ASTEPT_CORE_FARA_TXIDS).rele || ROLURI_BTC.map((rol) => rol + '=' + eticheta(r.raport, A[rol])).join(' ') : r.err.slice(0, 100)); + } + { + const m = await porneste('eth', path.join(FIX, 'eth-rpc.json')); + const r = ruleaza({ args: ['--mod', '2', '--adrese', LISTA_ETH, '--eth-rpc', m.url, '--eth-blocks', `${ETHV.bloc}..${ETHV.bloc}`], tinte: m.tinta }); + await sleep(150); const c = m.contor(); m.opreste(); + cer('eth-rpc: raportul e scris si iese 0', da(r.cod === 0 && r.scris), r.err.slice(0, 120)); + if (!r.raport) return; + asteapta(r.raport, ASTEPT_ETH, 'eth-rpc'); + cer('eth-rpc: expeditorul e expus prin CHEIA RECUPERATA din semnatura (nu prin campul from), contractul si contul fara iesiri spun de ce', da(dovada(r.raport, ETHV.expeditor, 'public key recovered from the signature of transaction') && dovada(r.raport, ETHV.contract, 'contract account') && dovada(r.raport, ETHV.primitor, 'no code and nonce 0 at head block 26172585, both proven under its state root'))); + cer('eth-rpc: autoritatea EIP-7702 reala e expusa prin designatorul din cod SI prin autorizatia gasita in bloc (autoritatea recuperata din semnatura ei)', da(dovada(r.raport, ETHV.autoritate7702, 'EIP-7702 delegation designator') && dovada(r.raport, ETHV.autoritate7702, 'authorization signed by this account in transaction ' + ETHV.tx7702)), detaliu(r.raport, ETHV.autoritate7702)); + cer('eth-rpc (r8): raportul spune ce leaga dovada de stare (nonce-ul si codul, de radacina de stare a capului) si ce NU leaga (capul, de consensul lantului)', da(nevazut(r.raport, ETHV.primitor, /^the head block itself: .*does not check that block against the consensus of the chain/))); + cer('eth-rpc (MIC-1): fiecare F (contul fara iesiri, contractul) numeste semnaturile off-chain si celelalte lanturi ("only chain id 1 was read")', da([ETHV.primitor, ETHV.contract].every((a) => eticheta(r.raport, a) === F_ && nevazut(r.raport, a, /^keys disclosed off chain \(EIP-191/) && nevazut(r.raport, a, /^other chains sharing this key: every EVM chain .*only chain id 1 was read/)))); + cer(`eth-rpc: jurnalul pazei == conexiunile acceptate de macheta (${r.jurnal ? r.jurnal.conexiuni.length : '?'} == ${c.connections}), toate spre tinta`, da(!!r.jurnal && r.jurnal.conexiuni.length === c.connections && c.connections > 0 && r.jurnal.nepermise.length === 0)); + cerVerif('eth-rpc: plicul VALID; zero cuvinte interzise', da(verdictVerificator(r.plic) === 'VALID' && verificaLimbaj(r.md).length === 0)); + const m2 = await porneste('eth', path.join(FIX, 'eth-rpc.json')); + const r2 = ruleaza({ args: ['--mod', '2', '--adrese', LISTA_ETH, '--eth-rpc', m2.url, '--eth-blocks', `${ETHV.bloc + 1000000}..${ETHV.bloc + 1000009}`], tinte: m2.tinta }); m2.opreste(); + cer('eth-rpc: o fereastra --eth-blocks care incepe DUPA varf e REFUZATA (cod 1, nimic scris), nu o eticheta F pe nonce 0 cu "0 block(s) read"', da(r2.cod === 1 && !r2.scris && /REFUSED \(eth-blocks\)/.test(r2.err) && /after the head/.test(r2.err)), r2.err.slice(0, 120)); + } + }); + + // ================================================================ 5. controale negative + await pas('5. controalele negative', async () => { + // a. furnizor strain pe fiecare drum + await incearca('a. cate un furnizor strain pe fiecare drum numit de paza (fetch, dgram send, dns.promises.resolveTxt, dns.Resolver, dns.promises.Resolver, dns.lookupService, dns.promises.lookupService, dns.promises.reverse pe un literal, process.binding(tcp_wrap), process.dlopen, Worker, Worker luat prin reflectie, child_process, clasa ChildProcess, process.execve, o teava cu NUME DE SERVER pe loopback) plantat intr-o copie: TOATE PRINSE si refuzate inainte de orice pachet', async () => { + const d = copie('strain'); + // un Worker luat prin reflectie (prototipul clasei, constructorul prototipului) care a PORNIT lasa un semn intr-un fisier: semnul nu are voie sa apara + const semn = path.join(T, 'semn-worker-reflectie.txt'); + const teava = "process.platform === 'win32' ? [92, 92].map((c) => String.fromCharCode(c)).join('') + '127.0.0.1' + String.fromCharCode(92) + 'pipe' + String.fromCharCode(92) + 'aere-paza-proba-' + process.pid : '//127.0.0.1/aere-paza-proba-' + process.pid"; + // lookupService pe 127.0.0.1: un literal NU e permis pentru lookupService (e o interogare getnameinfo), deci paza trebuie sa-l refuze; + // tinta e loopback, nu o adresa straina, ca o oglinda care scoate paza de pe acest drum sa nu ceara numele unei adrese din afara + // (ce face resolverul masinii cu o cerere getnameinfo pentru loopback e NEMASURAT) + const planta = [ + "try { await fetch('http://198.51.100.9/', { signal: AbortSignal.timeout(3000) }); } catch {}", + "try { const dg = await import('node:dgram'); const s = dg.createSocket('udp4'); s.on('error', () => {}); await new Promise((res) => s.send(Buffer.from('aere'), 53, '198.51.100.9', () => res())); s.close(); } catch {}", + "try { const dnsP = await import('node:dns'); await dnsP.promises.resolveTxt('aere-paza-proba.198-51-100-9.invalid'); } catch {}", + "try { const dnsP = await import('node:dns'); await new Promise((res, rej) => new dnsP.Resolver().resolve4('aere-paza-proba2.198-51-100-9.invalid', (e, a) => (e ? rej(e) : res(a)))); } catch {}", + "try { const dnsP = await import('node:dns'); await new dnsP.promises.Resolver().resolve4('aere-paza-proba3.198-51-100-9.invalid'); } catch {}", + "try { const dnsP = await import('node:dns'); await new Promise((res, rej) => dnsP.lookupService('127.0.0.1', 9, (e, a) => (e ? rej(e) : res(a)))); } catch {}", + "try { const dnsP = await import('node:dns'); await dnsP.promises.lookupService('127.0.0.1', 7); } catch {}", + "try { const dnsP = await import('node:dns'); await dnsP.promises.reverse('198.51.100.9'); } catch {}", + "try { process.binding('tcp_wrap'); } catch {}", + "try { process.dlopen({ exports: {} }, 'aere-paza-addon-inexistent.node'); } catch {}", + "try { const wtP = await import('node:worker_threads'); const w = new wtP.Worker('setTimeout(() => {}, 10)', { eval: true }); await new Promise((res) => w.on('exit', res)); } catch {}", + "try { const cpP = await import('node:child_process'); cpP.spawnSync(process.execPath, ['-e', '0']); } catch {}", + // clasa ChildProcess, fara functiile modulului, cu mediu propriu (fara NODE_OPTIONS): pe aici pleaca orice spawn asincron + "try { const cpP = await import('node:child_process'); const c = new cpP.ChildProcess(); c.on('error', () => {}); c.spawn({ file: process.execPath, args: [process.execPath, '-e', '0'], envPairs: [], stdio: 'ignore' }); } catch {}", + // process.execve: pe Windows arunca ERR_FEATURE_UNAVAILABLE_ON_PLATFORM, dar paza il jurnalizeaza si il refuza INAINTE de apel + "try { process.execve(process.execPath, [process.execPath, '-e', '0'], {}); } catch {}", + // Worker-ul original cautat prin reflectie: prototipul clasei si constructorul prototipului + `try { const wtP = await import('node:worker_threads'); const fsP = await import('node:fs'); for (const W of [Object.getPrototypeOf(wtP.Worker), wtP.Worker.prototype.constructor]) { try { const w = new W('setTimeout(() => {}, 10)', { eval: true }); if (w && typeof w.threadId === 'number' && w.threadId > 0) { fsP.appendFileSync(${JSON.stringify(semn)}, 'worker-pornit;'); w.terminate(); } } catch {} } } catch {}`, + // o teava cu NUME DE SERVER (pe Windows o cale UNC, pe care sistemul o deschide prin SMB); serverul e loopback, deci nimic nu iese + `try { const netP = await import('node:net'); await new Promise((res) => { const s = netP.connect(${teava}); s.on('error', () => res()); s.on('connect', () => { s.destroy(); res(); }); setTimeout(res, 3000); }); } catch {}`, + ].join('\n '); + const n = planteaza(path.join(d, 'raport.mjs'), '/*PLANTA:furnizor-strain*/', planta); + if (n !== 1) return `marcajul apare de ${n} ori, nu o data`; + const r = ruleaza({ dir: d, args: ['--mod', '1', '--adrese', LISTA_TOT] }); + if (!r.jurnal) return 'jurnal lipsa'; + const ref = r.jurnal.nepermise; + const dnsM = (m, h) => ref.some((x) => x.ev === 'dns' && x.method === m && (!h || x.host === h)); + const copil = (m) => ref.some((x) => x.ev === 'child' && x.method === m); + const are = { connect: ref.some((x) => x.ev === 'connect' && x.host === '198.51.100.9'), udp: ref.some((x) => x.ev === 'udp' && x.host === '198.51.100.9' && x.port === 53), txt: dnsM('dns.promises.resolveTxt'), resolver: dnsM('Resolver.resolve4'), resolverP: dnsM('promises.Resolver.resolve4'), lookupService: dnsM('dns.lookupService', '127.0.0.1'), lookupServiceP: dnsM('dns.promises.lookupService', '127.0.0.1'), reverseLiteral: dnsM('dns.promises.reverse', '198.51.100.9'), binding: ref.some((x) => x.ev === 'binding' && x.name === 'tcp_wrap'), addon: ref.some((x) => x.ev === 'addon' && /aere-paza-addon-inexistent/.test(x.file)), worker: ref.some((x) => x.ev === 'worker'), workerReflectie: !fs.existsSync(semn) && ref.filter((x) => x.ev === 'worker').length >= 2, child: copil('spawnSync'), childClasa: copil('ChildProcess.spawn'), execve: copil('execve'), teavaServer: ref.some((x) => x.ev === 'connect' && typeof x.path === 'string' && /aere-paza-proba-/.test(x.path)) }; + return [Object.values(are).every(Boolean) && r.jurnal.toate.filter((x) => x.ev !== 'incarcat').every((x) => x.allowed === false), Object.entries(are).filter(([, v]) => !v).map(([k]) => k + '=SCAPAT').join(' ') + ` (refuzate ${ref.length} pe ${Object.keys(are).length} drumuri, cod ${r.cod})`]; + }); + // fara paza se ruleaza unealta NEPLANTATA: copia plantata ar trimite, fara paza, pachete reale (DNS, TCP spre o adresa de documentatie) + await incearca('a. unealta FARA paza: niciun jurnal, deci citirea spune NEMASURAT (nu "zero conexiuni")', async () => { const r2 = ruleaza({ args: ['--mod', '1', '--adrese', LISTA_TOT], paza: false, mod: 'jurnal' }); return [r2.jurnal === null && r2.cod === 0, `cod ${r2.cod}`]; }); + await incearca('a. modul JURNAL, numai tinte locale: un Worker si un copil Node (mediu mostenit) care se conecteaza la 127.0.0.1:1 au conexiunea LOR in jurnal (paza se incarca in ei prin --require); un socket UDP CONECTAT la 127.0.0.1:9 e jurnalizat cu adresa lui; o conexiune cu `lookup` propriu are in jurnal adresa intoarsa de lookup', async () => { + const d = copie('jurnal'); + const cod = "const net = require('node:net'); const s = net.connect(1, '127.0.0.1'); s.on('error', () => {}); setTimeout(() => {}, 300);"; + const planta = [ + `try { const wtP = await import('node:worker_threads'); const w = new wtP.Worker(${JSON.stringify(cod + " setTimeout(() => process.exit(0), 400);")}, { eval: true }); await new Promise((res) => w.on('exit', res)); } catch {}`, + `try { const cpP = await import('node:child_process'); cpP.spawnSync(process.execPath, ['-e', ${JSON.stringify(cod)}], { timeout: 8000 }); } catch {}`, + "try { const dg = await import('node:dgram'); const s = dg.createSocket('udp4'); s.on('error', () => {}); await new Promise((res) => s.connect(9, '127.0.0.1', res)); await new Promise((res) => s.send(Buffer.from('aere'), () => res())); s.close(); } catch {}", + "try { const netP = await import('node:net'); await new Promise((res) => { const s = netP.connect({ host: 'aere-paza-lookup.invalid', port: 1, lookup: (h, o, cb) => (o && o.all ? cb(null, [{ address: '127.0.0.1', family: 4 }]) : cb(null, '127.0.0.1', 4)) }); s.on('error', () => res()); s.on('connect', () => { s.destroy(); res(); }); setTimeout(res, 3000); }); } catch {}", + ].join('\n '); + const n = planteaza(path.join(d, 'raport.mjs'), '/*PLANTA:furnizor-strain*/', planta); + if (n !== 1) return `marcajul apare de ${n} ori, nu o data`; + const r = ruleaza({ dir: d, args: ['--mod', '1', '--adrese', LISTA_TOT], mod: 'jurnal' }); + if (!r.jurnal) return 'jurnal lipsa'; + const pidRaport = r.jurnal.toate[0].pid; + const conexiuni = r.jurnal.conexiuni.filter((x) => x.host === '127.0.0.1' && x.port === 1); + const dinWorker = conexiuni.some((x) => x.pid === pidRaport && x.tid !== 0), dinCopil = conexiuni.some((x) => x.pid !== pidRaport); + const incarcari = r.jurnal.toate.filter((x) => x.ev === 'incarcat').length; + const udp = r.jurnal.udp.some((x) => x.host === '127.0.0.1' && x.port === 9); + const rezolvat = r.jurnal.toate.some((x) => x.ev === 'resolved' && x.host === 'aere-paza-lookup.invalid' && x.address === '127.0.0.1'); + // numai tinte locale: nimic din modul jurnal nu are voie sa iasa din masina; singurul DNS admis e dns.lookup pe un literal IP (bind-ul + // si connect-ul socketului UDP il cer pentru 0.0.0.0 si 127.0.0.1; getaddrinfo nu trimite nimic pentru un literal), pe care paza il permite + const straine = r.jurnal.toate.filter((x) => (x.ev === 'connect' || x.ev === 'udp') && x.host !== '127.0.0.1' && x.host !== 'aere-paza-lookup.invalid'); + return [r.jurnal.worker.length === 1 && r.jurnal.child.length === 1 && dinWorker && dinCopil && incarcari >= 3 && udp && rezolvat && straine.length === 0 && r.jurnal.dns.every((x) => x.method === 'dns.lookup' && x.allowed === true), `conexiuni locale ${conexiuni.length} (worker ${dinWorker}, copil ${dinCopil}), incarcari ale pazei ${incarcari}, udp conectat ${udp}, adresa din lookup ${rezolvat}, straine ${straine.length}, dns ${r.jurnal.dns.length}${r.jurnal.dns.length ? ' (' + r.jurnal.dns.map((x) => x.method + ':' + x.host + '@' + x.pid + '/' + x.tid).join(', ') + ')' : ''}, cod ${r.cod}`]; + }); + // a. TEVI: paza judeca CALEA asa cum o deschide Windows (normalizata), nu sirul dat. O teava locala ascultata aici numara sosirile; + // formele care numesc un server (prin '..', prin prefixul NT \??\, prin GLOBALROOT\Device\Mup) ajung la ea prin SMB pe loopback daca + // sunt lasate sa treaca. In blocare trebuie sa ajunga numai forma locala (controlul pozitiv). Doua plantari inverse in copii ale PAZEI: + // judecata pe sirul brut (forma de dinainte) si citirea unui sir ca port (connect(sir) e o teava pentru Node), fiecare lasa sa ajunga + const pazaCu = (d, plantari) => { for (const [vechi, nou] of plantari) { const n = planteaza(path.join(d, 'paza-retea.mjs'), vechi, nou); if (n !== 1) return `tinta plantarii in paza (${vechi.slice(0, 40)}) apare de ${n} ori`; } return null; }; + if (process.platform !== 'win32') cer('a. tevile Windows: calea judecata dupa normalizare (forme cu .., \\??\\, GLOBALROOT, connect(sir))', 'NEMASURAT', 'formele de cale Windows se masoara numai pe Windows'); + else await incearca('a. TEVI: in blocare, din formele care numesc un server (\\\\.\\pipe\\..\\UNC\\.., //./pipe/../UNC/.., \\\\.\\pipe\\..\\GLOBALROOT\\Device\\Mup\\.., \\??\\UNC\\.., \\??\\GLOBALROOT\\Device\\Mup\\.., si un sir dat lui socket.connect) NICIUNA nu ajunge la teava locala ascultata si fiecare e numita refuzata in jurnal; forma locala ajunge (controlul pozitiv); PLANTARILE INVERSE (judecata pe sirul brut; sirul citit ca port, cu tinta "localhost") lasa sa ajunga si ies ROSII', async () => { + const B1 = String.fromCharCode(92); const nume = 'aere-paza-r6-' + process.pid; const j = (...p) => p.join(B1); + const forme = { local: j('', '', '.', 'pipe', nume), dotdotUNC: j('', '', '.', 'pipe', '..', 'UNC', '127.0.0.1', 'pipe', nume), slashDotdotUNC: '//./pipe/../UNC/127.0.0.1/pipe/' + nume, dotdotMup: j('', '', '.', 'pipe', '..', 'GLOBALROOT', 'Device', 'Mup', '127.0.0.1', 'pipe', nume), ntUNC: j('', '??', 'UNC', '127.0.0.1', 'pipe', nume), ntMup: j('', '??', 'GLOBALROOT', 'Device', 'Mup', '127.0.0.1', 'pipe', nume) }; + let sosiri = 0; const srv = (await import('node:net')).createServer((s) => { sosiri++; s.destroy(); }); + await new Promise((res, rej) => { srv.on('error', rej); srv.listen(forme.local, res); }); + try { + const lista = Object.entries(forme).map(([k, p]) => ({ k, p, sir: false })).concat([{ k: 'sirDotdotUNC', p: forme.dotdotUNC, sir: true }]); + // fiecare asteptare isi sterge ceasul cand se incheie: un ceas lasat armat tine procesul viu inca 4 s dupa ultima forma + const planta = `try { const netP = await import('node:net'); for (const x of ${JSON.stringify(lista)}) { await new Promise((res) => { const s = x.sir ? new netP.Socket() : null; const c = x.sir ? s.connect(x.p) : netP.connect(x.p); let t = null; const fin = () => { clearTimeout(t); res(); }; t = setTimeout(() => { c.destroy(); fin(); }, 4000); c.on('error', fin); c.on('connect', () => { c.destroy(); fin(); }); }); } } catch {}`; + const ruleazaTevi = async (dTeava) => { const n = planteaza(path.join(dTeava, 'raport.mjs'), '/*PLANTA:furnizor-strain*/', planta); if (n !== 1) return null; const inainte = sosiri; const r = await ruleazaAsincron({ dir: dTeava, args: ['--mod', '1', '--adrese', LISTA_TOT], tinte: 'localhost', pazaFisier: path.join(dTeava, 'paza-retea.mjs') }); await sleep(300); return { r, sosiri: sosiri - inainte }; }; + const judeca = (x) => { if (!x || !x.r.jurnal) return { ok: false, det: 'jurnal lipsa' }; const c = x.r.jurnal.conexiuni; const refuz = (p, nr = 1) => c.filter((e) => e.path === p && e.allowed === false).length === nr; const ok = c.some((e) => e.path === forme.local && e.allowed === true) && refuz(forme.dotdotUNC, 2) && ['slashDotdotUNC', 'dotdotMup', 'ntUNC', 'ntMup'].every((k) => refuz(forme[k])) && x.sosiri === 1; return { ok, det: `sosiri ${x.sosiri}, permise ${c.filter((e) => e.allowed).map((e) => e.path || e.host).map((p) => String(p).slice(-28)).join(' ; ') || '-'}` }; }; + const fwd = await ruleazaTevi(copie('teava')); if (!fwd) return 'marcajul nu apare o data'; + const jf = judeca(fwd); if (!jf.ok) return [false, 'paza: ' + jf.det]; + const dA = copie('teava-bruta'); const eA = pazaCu(dA, [['const n = caleNormalizata(s);', 'const n = s.split(\'/\').join(BS); if (!n.startsWith(BS + BS)) return true;'], [' && nume.length > 0 && !nume.includes(BS);', ';']]); if (eA) return eA; + const pA = await ruleazaTevi(dA); const jA = judeca(pA); + const dB = copie('teava-port'); const eB = pazaCu(dB, [["typeof a0 === 'string' && caNumar(a0) === false ? { path: a0 } : ", '']]); if (eB) return eB; + const pB = await ruleazaTevi(dB); const jB = judeca(pB); + return [jf.ok && !jA.ok && pA.sosiri > 1 && !jB.ok && pB.sosiri > 1, `paza: ${jf.det} | sirul brut: ${jA.det} | sirul ca port: ${jB.det}`]; + } finally { srv.close(); } + }); + // a. DNS: in configuratia modului 2 (tinta un literal IP si un nume), orice interogare in afara lui `lookup` pleaca spre un server DNS, + // oricare ar fi gazda numita. Serverele procesului sunt mutate, INAINTE de paza (--require), pe un ascultator UDP local care numara + // datagramele: nimic nu iese din masina, nici daca paza ar lasa sa treaca. setServers e refuzat (decide unde pleaca restul), iar o functie + // de interogare pe care o lista fixa nu o numea (resolveTlsa) e judecata si ea. Plantari inverse: regula veche (literalul tintei permis + // pentru orice metoda, setServers neinvelit) si lista fixa de nume; fiecare lasa datagrame sa ajunga + await incearca('a. DNS cu tinta declarata (literal 127.0.0.1 si un nume): reverse / resolveTxt / resolveTlsa / resolve4 pe tinta, setServers (modul, promises, Resolver, promises.Resolver, prototipul de baza) -> TOATE refuzate si ZERO datagrame la serverul DNS local; lookup pe literal permis (controlul pozitiv); PLANTARILE INVERSE (regula veche a literalului + setServers neinvelit; lista fixa de nume) lasa datagrame si ies ROSII', async () => { + // ascultatorul raspunde fiecarei interogari cu REFUSED (antetul intors, QR=1, RCODE=5): resolverul nu mai reincearca si procesul + // iese imediat, in loc sa astepte zeci de secunde dupa un server care tace + const dg = await import('node:dgram'); let datagrame = 0; const sv = dg.createSocket('udp4'); + sv.on('message', (msg, ri) => { datagrame++; if (msg.length >= 12) { const r = Buffer.from(msg); r[2] |= 0x80; r[3] = (r[3] & 0xf0) | 0x05; sv.send(r, ri.port, ri.address, () => {}); } }); + const port = await new Promise((res, rej) => { sv.on('error', rej); sv.bind(0, '127.0.0.2', () => res(sv.address().port)); }); + try { + const lo = '127.0.0.2:' + port; const pre = path.join(T, 'dns-local.cjs'); + fs.writeFileSync(pre, `const d = require('node:dns'); d.setServers([${JSON.stringify(lo)}]); d.promises.setServers([${JSON.stringify(lo)}]);\n`); + const cap = 'const cap = (p) => { let t = null; return Promise.race([p, new Promise((r) => { t = setTimeout(r, 1500); })]).catch(() => {}).finally(() => clearTimeout(t)); };'; + const planta = [ + `try { const dn = await import('node:dns'); ${cap}`, + "await cap(new Promise((r) => dn.reverse('127.0.0.1', () => r())));", + "await cap(dn.promises.resolveTxt('127.0.0.1'));", + "if (typeof dn.resolveTlsa === 'function') await cap(new Promise((r) => dn.resolveTlsa('127.0.0.1', () => r())));", + "await cap(new Promise((r) => dn.resolve4('provider.example.test', () => r())));", + `try { dn.setServers([${JSON.stringify(lo)}]); } catch {}`, + `try { dn.promises.setServers([${JSON.stringify(lo)}]); } catch {}`, + `for (const R of [dn.Resolver, dn.promises.Resolver]) { const r = new R({ timeout: 300, tries: 1 }); let ok = true; try { r.setServers([${JSON.stringify(lo)}]); } catch { ok = false; } if (ok) await cap(R === dn.Resolver ? new Promise((x) => r.resolve4('127.0.0.1', () => x())) : r.resolve4('127.0.0.1')); }`, + `try { Object.getPrototypeOf(dn.Resolver.prototype).setServers.call(new dn.Resolver(), [${JSON.stringify(lo)}]); } catch {}`, + "await cap(dn.promises.lookup('127.0.0.1'));", + '} catch {}', + ].join('\n '); + const ruleazaDns = async (d) => { const n = planteaza(path.join(d, 'raport.mjs'), '/*PLANTA:furnizor-strain*/', planta); if (n !== 1) return null; const inainte = datagrame; const r = await ruleazaAsincron({ dir: d, args: ['--mod', '1', '--adrese', LISTA_TOT], tinte: '127.0.0.1:9,provider.example.test:443', pazaFisier: path.join(d, 'paza-retea.mjs'), preincarcate: [pre] }); await sleep(400); return { r, datagrame: datagrame - inainte }; }; + const areTlsa = typeof (await import('node:dns')).resolveTlsa === 'function'; + const judeca = (x) => { if (!x || !x.r.jurnal) return { ok: false, det: 'jurnal lipsa' }; const dn = x.r.jurnal.dns; const refuz = (m, h) => dn.some((e) => e.method === m && (!h || e.host === h) && e.allowed === false); const servere = dn.filter((e) => /setServers$/.test(e.method) && e.allowed === false).length; const ok = refuz('dns.reverse', '127.0.0.1') && refuz('dns.promises.resolveTxt', '127.0.0.1') && (!areTlsa || refuz('dns.resolveTlsa', '127.0.0.1')) && refuz('dns.resolve4', 'provider.example.test') && servere >= 5 && dn.some((e) => e.method === 'dns.promises.lookup' && e.host === '127.0.0.1' && e.allowed === true) && x.datagrame === 0; return { ok, det: `datagrame ${x.datagrame}, setServers refuzate ${servere}, permise ${dn.filter((e) => e.allowed).map((e) => e.method + ':' + e.host).join(' ; ') || '-'}` }; }; + const fwd = await ruleazaDns(copie('dns')); if (!fwd) return 'marcajul nu apare o data'; + const jf = judeca(fwd); if (!jf.ok) return [false, 'paza: ' + jf.det]; + const dA = copie('dns-vechi'); const eA = pazaCu(dA, [["const permisNume = (host, metoda) => TOT || (metoda === 'lookup' && (net.isIP(String(host)) !== 0 || TINTE.some((t) => t === String(host) || t.startsWith(String(host) + ':'))));", "const permisNume = (host, metoda) => TOT || TINTE.some((t) => t === String(host) || t.startsWith(String(host) + ':')) || (metoda === 'lookup' && net.isIP(String(host)) !== 0);"], ['function invelesteServere(obiect, eticheta) {', 'function invelesteServere(obiect, eticheta) { return;']]); if (eA) return eA; + const pA = await ruleazaDns(dA); const jA = judeca(pA); + const dB = copie('dns-lista'); const eB = pazaCu(dB, [['for (const nume of Object.getOwnPropertyNames(obiect)) {', "for (const nume of ['lookup', 'lookupService', 'resolve', 'resolve4', 'resolve6', 'resolveAny', 'resolveCaa', 'resolveCname', 'resolveMx', 'resolveNaptr', 'resolveNs', 'resolvePtr', 'resolveSoa', 'resolveSrv', 'resolveTxt', 'reverse'].filter((x) => typeof obiect[x] === 'function')) {"]]); if (eB) return eB; + const pB = await ruleazaDns(dB); const jB = judeca(pB); + return [jf.ok && !jA.ok && pA.datagrame > 0 && !jB.ok && (!areTlsa || pB.datagrame > 0), `paza: ${jf.det} | regula veche: ${jA.det.slice(0, 60)} | lista fixa: ${jB.det.slice(0, 60)}${areTlsa ? '' : ' (resolveTlsa lipseste in acest Node: lista fixa nu se poate deosebi)'}`]; + } finally { sv.close(); } + }); + // a. UDP: unde pleaca o datagrama se citeste ca in Node (un socket CONECTAT trimite la adresa lui, offset/lungime nu sunt port; portul poate + // fi un sir; fara adresa = loopback), iar o aderare multicast (care face sistemul sa trimita un raport IGMP) e jurnalizata si refuzata. + // Ascultatorul local e tinta declarata: cele trei trimiteri spre el ajung, una spre alt port e refuzata + await incearca('a. UDP spre tinta declarata: send(buf, offset, lungime) pe un socket CONECTAT, send(buf, 0, 4, port, adresa), send(buf, "port", adresa), sendto(buf, 0, 4, port, adresa) -> PERMISE cu portul tintei, 4 datagrame primite; send spre alt port refuzat; addMembership (pe interfata loopback) refuzat; PLANTARILE INVERSE (citirea veche a argumentelor; aderarea neinvelita) ies ROSII', async () => { + const dg = await import('node:dgram'); let primite = 0; const sv = dg.createSocket('udp4'); sv.on('message', () => { primite++; }); + const port = await new Promise((res, rej) => { sv.on('error', rej); sv.bind(0, '127.0.0.1', () => res(sv.address().port)); }); + try { + const semn = path.join(T, 'semn-membership.txt'); + const trimite = '(s, ...a) => new Promise((r) => { let t = null; const fin = () => { clearTimeout(t); r(); }; t = setTimeout(fin, 1500); try { s.send(...a, fin); } catch { fin(); } })'; + const planta = [ + `try { const dgP = await import('node:dgram'); const fsP = await import('node:fs'); const trimite = ${trimite};`, + `const s = dgP.createSocket('udp4'); s.on('error', () => {}); await new Promise((r) => s.connect(${port}, '127.0.0.1', r)); await trimite(s, Buffer.from('aere-a'), 1, 2);`, + `const u = dgP.createSocket('udp4'); u.on('error', () => {}); await trimite(u, Buffer.from('aere-b'), 0, 4, ${port}, '127.0.0.1'); await trimite(u, Buffer.from('aere-c'), ${JSON.stringify(String(port))}, '127.0.0.1'); await trimite(u, Buffer.from('aere-d'), 9, '127.0.0.1');`, + // sendto (forma veche a API-ului, cu toti parametrii obligatorii) trece prin send: si ea e judecata + `await new Promise((r) => { let t = null; const fin = () => { clearTimeout(t); r(); }; t = setTimeout(fin, 1500); try { u.sendto(Buffer.from('aere-e'), 0, 4, ${port}, '127.0.0.1', fin); } catch { fin(); } });`, + `const mc = dgP.createSocket({ type: 'udp4', reuseAddr: true }); mc.on('error', () => {}); await new Promise((r) => mc.bind(0, '127.0.0.1', r)); try { mc.addMembership('239.255.0.77', '127.0.0.1'); fsP.appendFileSync(${JSON.stringify(semn)}, 'membership;'); mc.dropMembership('239.255.0.77', '127.0.0.1'); } catch {}`, + 's.close(); u.close(); mc.close(); } catch {}', + ].join('\n '); + const ruleazaUdp = async (d) => { const n = planteaza(path.join(d, 'raport.mjs'), '/*PLANTA:furnizor-strain*/', planta); if (n !== 1) return null; try { fs.rmSync(semn, { force: true }); } catch {} const inainte = primite; const r = await ruleazaAsincron({ dir: d, args: ['--mod', '1', '--adrese', LISTA_TOT], tinte: '127.0.0.1:' + port, pazaFisier: path.join(d, 'paza-retea.mjs') }); await sleep(300); return { r, primite: primite - inainte, aderat: fs.existsSync(semn) }; }; + const judeca = (x) => { if (!x || !x.r.jurnal) return { ok: false, det: 'jurnal lipsa' }; const u = x.r.jurnal.udp; const spreTinta = u.filter((e) => e.host === '127.0.0.1' && e.port === port && e.allowed === true).length; const ok = spreTinta >= 4 && u.some((e) => e.host === '127.0.0.1' && e.port === 9 && e.allowed === false) && u.some((e) => e.method === 'addMembership' && e.allowed === false) && !x.aderat && x.primite === 4 && u.every((e) => e.method || e.port === port || e.port === 9); return { ok, det: `primite ${x.primite}, permise spre tinta ${spreTinta}, aderat ${x.aderat}, porturi ${[...new Set(u.filter((e) => !e.method).map((e) => e.port))].join(',')}` }; }; + const fwd = await ruleazaUdp(copie('udp')); if (!fwd) return 'marcajul nu apare o data'; + const jf = judeca(fwd); if (!jf.ok) return [false, 'paza: ' + jf.det]; + const dA = copie('udp-vechi'); const eA = pazaCu(dA, [['const { host, port } = tintaUdp(this, args);', "let port = args.find((x, i) => i > 0 && typeof x === 'number'); let host = args.find((x, i) => i > 1 && typeof x === 'string') || null; if (!host) { try { const r = this.remoteAddress(); host = r.address; port = port || r.port; } catch { } }"]]); if (eA) return eA; + const pA = await ruleazaUdp(dA); const jA = judeca(pA); + const dB = copie('udp-aderare'); const eB = pazaCu(dB, [["for (const nume of ['addMembership', 'dropMembership', 'addSourceSpecificMembership', 'dropSourceSpecificMembership']) {", 'for (const nume of []) {']]); if (eB) return eB; + const pB = await ruleazaUdp(dB); const jB = judeca(pB); + return [jf.ok && !jA.ok && pA.primite < 4 && !jB.ok && pB.aderat, `paza: ${jf.det} | citirea veche: ${jA.det} | aderarea neinvelita: ${jB.det}`]; + } finally { sv.close(); } + }); + // b. raspuns gol / eroare, pe toate adaptoarele, cu plantarea inversa + for (const [fel, fixtura, flag] of [['electrum', 'electrum.json', '--electrum'], ['esplora', 'esplora.json', '--esplora'], ['bitcoind', 'bitcoind.json', '--bitcoind'], ['eth', 'eth-rpc.json', '--eth-rpc']]) { + const m = await porneste(fel, path.join(FIX, fixtura), ['--gol']); + const r = ruleaza({ args: ['--mod', '2', '--adrese', fel === 'eth' ? LISTA_ETH : LISTA_BTC, flag, fel === 'electrum' ? m.tinta : m.url], tinte: m.tinta }); + m.opreste(); + cer(`b. ${fel} --gol: fiecare adresa iese NEMASURAT numit (cod 2), niciuna "no on-chain evidence"`, da(predicatGol(r)), r.raport ? detaliu(r.raport, r.raport.addresses[0].input).slice(0, 100) : r.err.slice(0, 100)); + } + await incearca('b. PLANTAREA INVERSA: o copie in care un raspuns gol al tintei Electrum devine "istoric gol" face verificarea de mai sus ROSIE (nu o crapa)', async () => { + const d = copie('gol'); + const n = planteaza(path.join(d, 'adaptoare.mjs'), "} catch (e) { return { error: 'Electrum target ' + tinta.host + ':' + tinta.port + ': ' + taie(e.message), requests: cereri }; }", '} catch (e) { return observatieDinTranzactii(t, [], { requests: cereri }); }'); + // un raspuns gol nu aduce nici varful: plasa "fara varf citit, niciodata F" (runda 6) se scoate si ea, ca defectul vechi sa se vada + const n2 = planteaza(path.join(d, 'clasifica.mjs'), "} else if (r.label === ETICHETA.FARA_DOVADA) r = nem(r, 'not measured: the tip of the target was not read", "} else if (false) r = nem(r, 'not measured: the tip of the target was not read"); + if (n !== 1 || n2 !== 1) return `tinta plantarii apare de ${n} / ${n2} ori`; + const m = await porneste('electrum', path.join(FIX, 'electrum.json'), ['--gol']); + const r = ruleaza({ dir: d, args: ['--mod', '2', '--adrese', LISTA_BTC, '--electrum', m.tinta], tinte: m.tinta }); m.opreste(); + return [predicatGol(r) === false && !!r.raport && r.raport.summary.noOnChainEvidence > 0, `copia plantata a dat ${r.raport ? r.raport.summary.verdict : 'niciun raport'}`]; + }); + // c. tinta muta + { + const m = await porneste('electrum', path.join(FIX, 'electrum.json'), ['--mut']); + const r = ruleaza({ args: ['--mod', '2', '--adrese', scrieLista('unu', [A.p2pkh_necheltuit]), '--electrum', m.tinta], tinte: m.tinta, env: { AERE_EXPUNERE_TIMEOUT_MS: '1500' } }); m.opreste(); + cer('c. tinta muta (conexiune inchisa fara raspuns): NEMASURAT numit, nu "no on-chain evidence"', da(r.cod === 2 && nemasuratCu(r.raport, A.p2pkh_necheltuit, 'not measured:')), r.raport ? detaliu(r.raport, A.p2pkh_necheltuit).slice(0, 100) : ''); + } + // d. cheltuiri plantate pe adrese sintetice + await incearca('d. adresa sintetica P2PKH: numai finantarea -> F (controlul pozitiv al metodei); cu o cheltuire PLANTATA (cheia in scriptSig) -> E', async () => { + const k = cheie('p2pkh'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); + const f = finantare(spk, 'p2pkh'); const s = cheltuire(f.id, Buffer.concat([push(SIG), push(k.pub)]), []); + const lista = scrieLista('sintetic-p2pkh', [adresa]); + const r1 = await electrumCu(suprascriereElectrum('planta-fara', spk, [{ ...f, height: 1 }]), lista); + const r2 = await electrumCu(suprascriereElectrum('planta-cu', spk, [{ ...f, height: 1 }, { ...s, height: 2 }]), lista); + return [r1.cod === 0 && eticheta(r1.raport, adresa) === F_ && r2.cod === 0 && eticheta(r2.raport, adresa) === E_ && dovada(r2.raport, adresa, 'public key revealed in the scriptSig'), `${detaliu(r1.raport, adresa)} -> ${detaliu(r2.raport, adresa)}`]; + }); + await incearca('d. P2SH cu redeem script in forma P2PKH (scriptSig = ): cheia e un push separat si e gasita -> E', async () => { + const k = cheie('p2sh-p2pkh'); const redeem = p2pkhSpk(B.hash160(k.pub)); const hr = B.hash160(redeem); + const spk = Buffer.concat([Buffer.from([0xa9, 0x14]), hr, Buffer.from([0x87])]); const adresa = b58check(5, hr); + const f = finantare(spk, 'p2sh-p2pkh'); const s = cheltuire(f.id, Buffer.concat([push(SIG), push(k.pub), push(redeem)]), []); + const r = await electrumCu(suprascriereElectrum('planta-p2sh', spk, [{ ...f, height: 1 }, { ...s, height: 2 }]), scrieLista('sintetic-p2sh', [adresa])); + return [r.cod === 0 && eticheta(r.raport, adresa) === E_ && dovada(r.raport, adresa, 'commits to HASH160 of a key'), detaliu(r.raport, adresa)]; + }); + await incearca('d. P2WSH cu witness script in forma P2PKH (witness = [sig, cheie, script]): cheia e gasita -> E', async () => { + const k = cheie('p2wsh-p2pkh'); const ws = p2pkhSpk(B.hash160(k.pub)); const prog = B.sha256(ws); + const spk = Buffer.concat([Buffer.from([0x00, 0x20]), prog]); const intrare = 'script:' + B.hex(spk); + const f = finantare(spk, 'p2wsh-p2pkh'); const s = cheltuire(f.id, Buffer.alloc(0), [SIG, k.pub, ws]); + const r = await electrumCu(suprascriereElectrum('planta-p2wsh', spk, [{ ...f, height: 1 }, { ...s, height: 2 }]), scrieLista('sintetic-p2wsh', [intrare])); + return [r.cod === 0 && eticheta(r.raport, intrare) === E_ && dovada(r.raport, intrare, 'commits to HASH160 of a key'), detaliu(r.raport, intrare)]; + }); + await incearca('d. cheltuirea e doar in MEMPOOL (Electrum height 0; Esplora status.confirmed false): NEMASURAT numit ("public there but not yet on chain"), nu E si nu F, pe amandoua adaptoarele', async () => { + const k = cheie('mempool'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); + const f = finantare(spk, 'mempool'); const s = cheltuire(f.id, Buffer.concat([push(SIG), push(k.pub)]), []); + const lista = scrieLista('sintetic-mempool', [adresa]); const istoric = [{ ...f, height: 1 }, { ...s, height: 0 }]; + const r1 = await electrumCu(suprascriereElectrum('planta-mempool', spk, istoric), lista); + const r2 = await esploraCu(suprascriereEsplora('planta-mempool-es', adresa, istoric), lista); + // controlul pozitiv al machetei Esplora: aceeasi cheltuire CONFIRMATA (height 2) -> E + const r3 = await esploraCu(suprascriereEsplora('planta-mempool-es-conf', adresa, [{ ...f, height: 1 }, { ...s, height: 2 }]), lista); + return [r1.cod === 2 && nemasuratCu(r1.raport, adresa, 'public there but not yet on chain') && r2.cod === 2 && nemasuratCu(r2.raport, adresa, 'public there but not yet on chain') && r3.cod === 0 && eticheta(r3.raport, adresa) === E_, `electrum: ${detaliu(r1.raport, adresa).slice(0, 70)} | esplora: ${detaliu(r2.raport, adresa).slice(0, 70)} | esplora confirmata: ${detaliu(r3.raport, adresa)}`]; + }); + await incearca('d. RBF: cheltuirea difuzata a fost INLOCUITA (istoricul mai are doar finantarea) -> F, dar "a spend broadcast and never confirmed" e numit in "not seen" si in intrebarea de declaratie; Esplora cu mempool_stats care numara o cheltuire pe care pagina nu o poarta -> NEMASURAT', async () => { + const k = cheie('rbf'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); + const f = finantare(spk, 'rbf'); const lista = scrieLista('sintetic-rbf', [adresa]); + const r1 = await electrumCu(suprascriereElectrum('planta-rbf', spk, [{ ...f, height: 1 }]), lista); + const stats = { address: adresa, chain_stats: { funded_txo_count: 1, funded_txo_sum: 100000, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 1 }, mempool_stats: { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 1, spent_txo_sum: 100000, tx_count: 1 } }; + const fx = path.join(T, 'planta-rbf-es.json'); fs.writeFileSync(fx, JSON.stringify({ raspunsuri: { ['/address/' + adresa]: stats, ['/address/' + adresa + '/txs']: [esploraTx({ ...f, height: 1 })] } })); + const r2 = await esploraCu(fx, lista); + return [r1.cod === 0 && eticheta(r1.raport, adresa) === F_ && nevazut(r1.raport, adresa, /broadcast and never confirmed/) && /broadcast and never confirmed/.test(r1.md) && r2.cod === 2 && nemasuratCu(r2.raport, adresa, 'mempool_stats'), `electrum dupa RBF: ${detaliu(r1.raport, adresa)} | esplora mempool_stats: ${detaliu(r2.raport, adresa).slice(0, 90)}`]; + }); + await incearca('d. P2TR cu iesirea CONFIRMATA si o cheltuire script-path doar in MEMPOOL ramane E (cheltuirea din mempool nu scade dovada de pe lant), cu tranzactia neconfirmata numita in "not seen"', async () => { + const k = cheie('p2tr-mempool'); const spk = Buffer.concat([Buffer.from([0x51, 0x20]), k.pub.subarray(1)]); const intrare = 'script:' + B.hex(spk); + const f = finantare(spk, 'p2tr-mempool'); const cb = Buffer.concat([Buffer.from([0xc0]), Buffer.alloc(32, 2)]); + const s = cheltuire(f.id, Buffer.alloc(0), [Buffer.alloc(64, 1), Buffer.from([0x51]), cb]); + const r = await electrumCu(suprascriereElectrum('planta-p2tr-mempool', spk, [{ ...f, height: 1 }, { ...s, height: 0 }]), scrieLista('sintetic-p2tr-mempool', [intrare])); + return [r.cod === 0 && eticheta(r.raport, intrare) === E_ && nevazut(r.raport, intrare, /1 unconfirmed transaction/), detaliu(r.raport, intrare) + ' | ' + (gaseste(r.raport, intrare) || { notSeen: [] }).notSeen.filter((n) => /unconfirmed/.test(n)).join('; ').slice(0, 90)]; + }); + await incearca('d. PLANTAREA INVERSA: o copie cu conditia veche (cheltuirea din mempool da NEMASURAT si pe P2TR cu iesire confirmata) face verificarea de mai sus ROSIE', async () => { + const d = copie('p2tr'); const n = planteaza(path.join(d, 'clasifica.mjs'), 'if (!revel.length && obs.unconfirmedRevealing && !expusPrinTip)', 'if (!revel.length && obs.unconfirmedRevealing)'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const k = cheie('p2tr-mempool'); const spk = Buffer.concat([Buffer.from([0x51, 0x20]), k.pub.subarray(1)]); const intrare = 'script:' + B.hex(spk); + const f = finantare(spk, 'p2tr-mempool'); const cb = Buffer.concat([Buffer.from([0xc0]), Buffer.alloc(32, 2)]); + const s = cheltuire(f.id, Buffer.alloc(0), [Buffer.alloc(64, 1), Buffer.from([0x51]), cb]); + const m = await porneste('electrum', path.join(FIX, 'electrum.json'), ['--suprascrie', suprascriereElectrum('planta-p2tr-mempool-inv', spk, [{ ...f, height: 1 }, { ...s, height: 0 }])]); + const r = ruleaza({ dir: d, args: ['--mod', '2', '--adrese', scrieLista('sintetic-p2tr-mempool-inv', [intrare]), '--electrum', m.tinta], tinte: m.tinta }); m.opreste(); + return [!(r.cod === 0 && eticheta(r.raport, intrare) === E_), `copia plantata a dat ${detaliu(r.raport, intrare).slice(0, 80)} (cod ${r.cod})`]; + }); + await incearca('d. witness script P2WSH fara forma standard: un push de 33 de octeti care NU e operandul unei verificari de semnatura (chiar daca e punct valid) -> NEMASURAT ("not verified as keys bound"); OP_CHECKSIG intr-un script nestandard -> E', async () => { + const G = Buffer.from('0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 'hex'); + const fals = Buffer.concat([Buffer.from([2]), crypto.createHash('sha256').update('nu e cheie').digest()]); + const cazuri = [ + ['fals-drop', Buffer.concat([push(fals), Buffer.from([0x75, 0x51])]), U_, 'not verified as keys bound'], // <33 B> OP_DROP OP_1 + ['cheie-drop', Buffer.concat([push(G), Buffer.from([0x75, 0x51])]), U_, 'not verified as keys bound'], // OP_DROP OP_1 + ['cheie-checksig', Buffer.concat([Buffer.from([0x51, 0x75]), push(G), Buffer.from([0xac])]), E_, 'operand of a signature check'], // OP_1 OP_DROP OP_CHECKSIG + ]; + const rez = []; + for (const [nume, ws, asteptat, fragment] of cazuri) { + const spk = Buffer.concat([Buffer.from([0x00, 0x20]), B.sha256(ws)]); const intrare = 'script:' + B.hex(spk); + const f = finantare(spk, nume); const s = cheltuire(f.id, Buffer.alloc(0), [SIG, ws]); + const r = await electrumCu(suprascriereElectrum('planta-ws-' + nume, spk, [{ ...f, height: 1 }, { ...s, height: 2 }]), scrieLista('sintetic-ws-' + nume, [intrare])); + const a = gaseste(r.raport, intrare); const text = a ? String(a.unmeasured || '') + ' ' + (a.evidence || []).join(' ') : ''; + rez.push([eticheta(r.raport, intrare) === asteptat && text.includes(fragment), `${nume}=${eticheta(r.raport, intrare)}`]); + } + return [rez.every((x) => x[0]), rez.map((x) => x[1]).join(' ')]; + }); + await incearca('d. Esplora, istoric sintetic de 31 de tranzactii pe DOUA pagini (/txs apoi /txs/chain/): cheltuirea cu cheia e pe pagina a doua -> E; cu pagina a doua lipsa -> NEMASURAT ("served 25 ... of the 31")', async () => { + const k = cheie('paginare'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); + const fonduri = Array.from({ length: 30 }, (_, i) => ({ ...finantare(spk, 'paginare ' + i), height: 100 + i })); + const s = { ...cheltuire(fonduri[0].id, Buffer.concat([push(SIG), push(k.pub)]), []), height: 101 }; // veche: cade pe pagina a doua + const toate = [...fonduri, s].sort((x, y) => y.height - x.height); // Esplora serveste de la cea mai noua + const pagini = toate.map(esploraTx); const p1 = pagini.slice(0, 25), p2 = pagini.slice(25); + const stats = { address: adresa, chain_stats: { funded_txo_count: 30, funded_txo_sum: 3000000, spent_txo_count: 1, spent_txo_sum: 100000, tx_count: 31 }, mempool_stats: { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 } }; + const cu = path.join(T, 'planta-pag-cu.json'); fs.writeFileSync(cu, JSON.stringify({ raspunsuri: { ['/address/' + adresa]: stats, ['/address/' + adresa + '/txs']: p1, ['/address/' + adresa + '/txs/chain/' + p1[24].txid]: p2 } })); + const fara = path.join(T, 'planta-pag-fara.json'); fs.writeFileSync(fara, JSON.stringify({ raspunsuri: { ['/address/' + adresa]: stats, ['/address/' + adresa + '/txs']: p1 } })); + const lista = scrieLista('sintetic-pag', [adresa]); + const mA = await porneste('esplora', path.join(FIX, 'esplora.json'), ['--suprascrie', cu]); const r1 = ruleaza({ args: ['--mod', '2', '--adrese', lista, '--esplora', mA.url], tinte: mA.tinta }); await sleep(100); const c1 = mA.contor(); mA.opreste(); + const mB = await porneste('esplora', path.join(FIX, 'esplora.json'), ['--suprascrie', fara]); const r2 = ruleaza({ args: ['--mod', '2', '--adrese', lista, '--esplora', mB.url], tinte: mB.tinta }); mB.opreste(); + return [r1.cod === 0 && eticheta(r1.raport, adresa) === E_ && dovada(r1.raport, adresa, 'public key revealed in the scriptSig') && c1.requests >= 3 && r2.cod === 2 && nemasuratCu(r2.raport, adresa, 'served 25 confirmed transactions of the 31'), `${detaliu(r1.raport, adresa)} (${c1.requests} cereri) -> ${detaliu(r2.raport, adresa)}`]; + }); + // d. o cheltuire VAZUTA a unei adrese de tip hash dezvaluie, prin consens, preimaginea hash-ului: niciodata F. Cheia hibrida (06/07, valida + // in consens) si cheia urmata de un OP_NOP se citesc (E); o cheltuire in care nu se gaseste nicio preimagine iese NEMASURAT numit + const cazuriChei = (() => { + const k = cheie('chei-necitite'); const u = Buffer.from(secp256k1.getPublicKey(k.priv, false)); + const hibrid = Buffer.concat([Buffer.from([(u[64] & 1) ? 7 : 6]), u.subarray(1)]); const hibridRau = Buffer.concat([Buffer.from([hibrid[0] ^ 1]), u.subarray(1)]); + const p2wpkh = (h) => Buffer.concat([Buffer.from([0x00, 0x14]), h]); + return [ + // [nume, intrarea din lista, scriptPubKey, scriptSig, witness, eticheta asteptata, fragment] + ['P2PKH, cheie HIBRIDA in scriptSig', b58check(0, B.hash160(hibrid)), p2pkhSpk(B.hash160(hibrid)), Buffer.concat([push(SIG), push(hibrid)]), [], E_, 'public key revealed in the scriptSig'], + ['P2PKH, OP_NOP', b58check(0, B.hash160(u)), p2pkhSpk(B.hash160(u)), Buffer.concat([push(SIG), push(u), Buffer.from([0x61])]), [], E_, 'public key revealed in the scriptSig'], + ['P2WPKH, cheie HIBRIDA in witness', 'script:' + B.hex(p2wpkh(B.hash160(hibrid))), p2wpkh(B.hash160(hibrid)), Buffer.alloc(0), [SIG, hibrid], E_, 'public key revealed in the witness'], + ['P2PKH, hibrida cu PARITATEA gresita (nu e cheie: libsecp256k1 o refuza)', b58check(0, B.hash160(hibridRau)), p2pkhSpk(B.hash160(hibridRau)), Buffer.concat([push(SIG), push(hibridRau)]), [], U_, 'not decoded as a public key'], + ['P2PKH, cheltuire fara nicio preimagine ( OP_NOP)', b58check(0, B.hash160(k.pub)), p2pkhSpk(B.hash160(k.pub)), Buffer.concat([push(SIG), Buffer.from([0x61])]), [], U_, 'in a form this tool does not read'], + ]; + })(); + const ruleazaCazChei = async (dir, [nume, intrare, spk, ss, w]) => { const f = finantare(spk, 'chei ' + nume); const s = cheltuire(f.id, ss, w); const m = await porneste('electrum', path.join(FIX, 'electrum.json'), ['--suprascrie', suprascriereElectrum('planta-chei-' + nume.replace(/\W+/g, '-'), spk, [{ ...f, height: 1 }, { ...s, height: 2 }])]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('chei-' + nume.replace(/\W+/g, '-'), [intrare]), '--electrum', m.tinta], tinte: m.tinta }); m.opreste(); return r; }; + const judecaCazChei = (r, [nume, intrare, , , , asteptat, fragment]) => { const a = gaseste(r.raport, intrare); const text = a ? String(a.unmeasured || '') + ' ' + (a.evidence || []).join(' ') : ''; return eticheta(r.raport, intrare) === asteptat && text.includes(fragment); }; + await incearca('d. cheltuiri VAZUTE ale adreselor de tip hash, cu cheia in forme rare: cheia hibrida 06/07 (P2PKH si P2WPKH) si OP_NOP -> E; o hibrida cu paritatea gresita si o cheltuire fara nicio preimagine -> NEMASURAT numit; niciuna F', async () => { + const rez = []; for (const c of cazuriChei) { const r = await ruleazaCazChei(AICI, c); rez.push([judecaCazChei(r, c) && eticheta(r.raport, c[1]) !== F_, `${c[0]}=${eticheta(r.raport, c[1])}`]); } + return [rez.every((x) => x[0]), rez.map((x) => x[1]).join(' | ')]; + }); + await incearca('d. PLANTAREA INVERSA: o copie fara regula "cheltuire vazuta fara preimagine citita -> NEMASURAT" da F pe cheltuirea fara preimagine, si verificarea de mai sus iese ROSIE', async () => { + const d = copie('chei'); const n = planteaza(path.join(d, 'clasifica.mjs'), 'if (!revel.length && !tipExpus && spendsVazute.length) return nem(', 'if (false) return nem('); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const c = cazuriChei[cazuriChei.length - 1]; const r = await ruleazaCazChei(d, c); + return [!judecaCazChei(r, c) && eticheta(r.raport, c[1]) === F_, `copia plantata a dat ${detaliu(r.raport, c[1]).slice(0, 80)} (cod ${r.cod})`]; + }); + // d. o cheltuire VAZUTA prin egalitate de hash, fara finantarea ei: adresa P2SH-P2WPKH, cheltuirea servita FARA witness (id-ul nu + // acopera witness-ul), istoricul serverului fara tranzactia de finantare. Redeem-ul din scriptSig se hashuieste la adresa: preimaginea + // e pe lant, deci nu F; cu witness-ul (cheia) aceeasi cheltuire e E + const k12 = (() => { + const k = cheie('k12'); const redeem = Buffer.concat([Buffer.from([0x00, 0x14]), B.hash160(k.pub)]); const hr = B.hash160(redeem); + const spk = Buffer.concat([Buffer.from([0xa9, 0x14]), hr, Buffer.from([0x87])]); const adresa = b58check(5, hr); + const idF = crypto.createHash('sha256').update('k12 finantare nedata').digest('hex'); + return { adresa, spk, fara: cheltuire(idF, push(redeem), []), cu: cheltuire(idF, push(redeem), [SIG, k.pub]) }; + })(); + const ruleazaK12 = async (dir, x, nume) => { const m = await porneste('electrum', path.join(FIX, 'electrum.json'), ['--suprascrie', suprascriereElectrum('planta-k12-' + nume, k12.spk, [{ ...x, height: 2 }])]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('k12-' + nume, [k12.adresa]), '--electrum', m.tinta], tinte: m.tinta }); m.opreste(); return r; }; + await incearca('d. o cheltuire VAZUTA prin egalitate de hash (P2SH-P2WPKH: redeem-ul se hashuieste la adresa), servita FARA witness si FARA finantare -> NEMASURAT ("spend(s) of this address seen"), nu F; cu witness-ul -> E (controlul pozitiv); PLANTAREA INVERSA (numai cheltuirile cu finantarea citita conteaza) da F si iese ROSIE', async () => { + const r = await ruleazaK12(AICI, k12.fara, 'fara'), rc = await ruleazaK12(AICI, k12.cu, 'cu'); + const bun = r.cod === 2 && eticheta(r.raport, k12.adresa) === U_ && nemasuratCu(r.raport, k12.adresa, 'spend(s) of this address seen') && rc.cod === 0 && eticheta(rc.raport, k12.adresa) === E_; + if (!bun) return [false, `fara witness: ${detaliu(r.raport, k12.adresa).slice(0, 90)} | cu witness: ${detaliu(rc.raport, k12.adresa)}`]; + const d = copie('k12'); if (planteaza(path.join(d, 'clasifica.mjs'), 'const spendsVazute = ins.filter((i) => i.spendsTarget || (!tipExpus && i.findings.length > 0));', 'const spendsVazute = spends;') !== 1) return 'tinta plantarii nu apare o data'; + const p = await ruleazaK12(d, k12.fara, 'inv'); + return [bun && eticheta(p.raport, k12.adresa) === F_, `${detaliu(r.raport, k12.adresa).slice(0, 90)} | cu witness: ${eticheta(rc.raport, k12.adresa)} | copia plantata: ${eticheta(p.raport, k12.adresa)}`]; + }); + // d. o iesire P2TR numai in MEMPOOL: cheia de iesire e publica acolo, dar nu pe lant -> NEMASURAT, nu F "no output exists yet" + const p2trMempool = async (dir) => { const k = cheie('p2tr-iesire-mempool'); const spk = Buffer.concat([Buffer.from([0x51, 0x20]), k.pub.subarray(1)]); const intrare = 'script:' + B.hex(spk); const f = finantare(spk, 'p2tr-iesire-mempool'); const m = await porneste('electrum', path.join(FIX, 'electrum.json'), ['--suprascrie', suprascriereElectrum('planta-p2tr-iesire-mempool', spk, [{ ...f, height: 0 }])]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('p2tr-iesire-mempool', [intrare]), '--electrum', m.tinta], tinte: m.tinta }); m.opreste(); return { r, intrare }; }; + await incearca('d. o iesire P2TR numai in MEMPOOL (Electrum height 0, nicio iesire confirmata): NEMASURAT numit ("public there but not yet on chain"), nu F "no output exists yet"; PLANTAREA INVERSA (regula scoasa) da F si face verificarea ROSIE', async () => { + const { r, intrare } = await p2trMempool(AICI); + const bun = r.cod === 2 && nemasuratCu(r.raport, intrare, 'in the target\'s mempool') && nemasuratCu(r.raport, intrare, 'not yet on chain'); + if (!bun) return [false, `unealta a dat ${detaliu(r.raport, intrare).slice(0, 90)} (cod ${r.cod})`]; + const d = copie('p2tr-iesire'); const n = planteaza(path.join(d, 'clasifica.mjs'), 'if (tipExpus && !outs.length && obs.unconfirmedOutputs > 0) return nem(', 'if (false) return nem('); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await p2trMempool(d); + const prins = !(p.r.cod === 2 && nemasuratCu(p.r.raport, p.intrare, 'in the target\'s mempool')) && eticheta(p.r.raport, p.intrare) === F_; + return [bun && prins, `${detaliu(r.raport, intrare).slice(0, 90)} | copia plantata: ${detaliu(p.r.raport, p.intrare).slice(0, 40)}`]; + }); + // d. Esplora serveste CAMPURI, nu octeti: fiecare tranzactie e re-serializata si trebuie sa se hashuiasca la id-ul dat de index + const esploraId = (() => { + const k = cheie('esplora-id'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); + const f = finantare(spk, 'esplora-id'); const s = cheltuire(f.id, Buffer.concat([push(SIG), push(k.pub)]), []); + const stats = { address: adresa, chain_stats: { funded_txo_count: 1, funded_txo_sum: 100000, spent_txo_count: 1, spent_txo_sum: 100000, tx_count: 2 }, mempool_stats: { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 } }; + const fisier = (nume, schimba) => { const sp = esploraTx({ ...s, height: 2 }); schimba(sp); const fx = path.join(T, nume + '.json'); fs.writeFileSync(fx, JSON.stringify({ raspunsuri: { ['/address/' + adresa]: stats, ['/address/' + adresa + '/txs']: [sp, esploraTx({ ...f, height: 1 })] } })); return fx; }; + return { adresa, idBun: s.id, exact: fisier('esplora-id-exact', () => {}), idSchimbat: fisier('esplora-id-schimbat', (x) => { x.txid = 'ab'.repeat(32); }), valoareSchimbata: fisier('esplora-id-valoare', (x) => { x.vout[0].value += 1; }) }; + })(); + const ruleazaEsploraId = async (dir, fx) => { const m = await porneste('esplora', path.join(FIX, 'esplora.json'), ['--suprascrie', fx]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('esplora-id', [esploraId.adresa]), '--esplora', m.url], tinte: m.tinta }); m.opreste(); return r; }; + await incearca('d. Esplora: tranzactiile servite EXACT -> E; cu id-ul cheltuirii inlocuit (ab..ab, campurile neschimbate) sau cu o valoare schimbata cu 1 satoshi (id-ul vechi) -> NEMASURAT ("does not hash to its id"), niciodata o dovada care citeaza un id inventat', async () => { + const r0 = await ruleazaEsploraId(AICI, esploraId.exact), r1 = await ruleazaEsploraId(AICI, esploraId.idSchimbat), r2 = await ruleazaEsploraId(AICI, esploraId.valoareSchimbata); + const a = esploraId.adresa; + return [r0.cod === 0 && eticheta(r0.raport, a) === E_ && dovada(r0.raport, a, esploraId.idBun) && r1.cod === 2 && nemasuratCu(r1.raport, a, 'does not hash to its id') && r2.cod === 2 && nemasuratCu(r2.raport, a, 'does not hash to its id'), `exact: ${detaliu(r0.raport, a)} | id schimbat: ${detaliu(r1.raport, a).slice(0, 70)} | valoare schimbata: ${detaliu(r2.raport, a).slice(0, 70)}`]; + }); + await incearca('d. PLANTAREA INVERSA: o copie in care Esplora nu mai compara id-ul re-serializat face verificarea de mai sus ROSIE (id-ul inventat ajunge in dovada)', async () => { + const d = copie('esplora-id'); const n = planteaza(path.join(d, 'adaptoare.mjs'), 'if (id.txid !== x.txid) return { partial:', 'if (false) return { partial:'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const r = await ruleazaEsploraId(d, esploraId.idSchimbat); + return [!(r.cod === 2 && nemasuratCu(r.raport, esploraId.adresa, 'does not hash to its id')) && dovada(r.raport, esploraId.adresa, 'ab'.repeat(32)), `copia plantata a dat ${detaliu(r.raport, esploraId.adresa).slice(0, 80)} (cod ${r.cod})`]; + }); + // e. eticheta interzisa + await incearca('e. eticheta interzisa plantata in limbaj.mjs al unei copii: poarta de limbaj REFUZA raportul (cod 1, nimic scris, cuvantul numit)', async () => { + const d = copie('limbaj'); const n = planteaza(path.join(d, 'limbaj.mjs'), "FARA_DOVADA: 'no on-chain evidence of exposure'", "FARA_DOVADA: 'safe'"); + if (n !== 1) return `tinta apare de ${n} ori`; + const r = ruleaza({ dir: d, args: ['--mod', '1', '--adrese', LISTA_TOT] }); + return [r.cod === 1 && !r.scris && /REFUSED \(language\)/.test(r.err) && /forbidden word/.test(r.err), r.err.slice(0, 120)]; + }); + await incearca('e. un --subiect dat de cerut care contine un cuvant interzis ("treasury safe 2026") NU e refuzat: e consemnat ca atare, poarta judeca textul uneltei', async () => { + const r = ruleaza({ args: ['--mod', '1', '--adrese', LISTA_BTC, '--subiect', 'treasury safe 2026'] }); + return [r.cod === 0 && r.scris && r.raport.subject === 'treasury safe 2026' && /Subject: treasury safe 2026/.test(r.md), r.err.slice(0, 100) || 'cod ' + r.cod]; + }); + // e. textul SERVIT de tinta (un corp de eroare) nu e textul uneltei: e citat ca [served: ...] si poarta nu il judeca + const tintaCuvant = async (dir) => { const fx = path.join(T, 'planta-401.json'); fs.writeFileSync(fx, JSON.stringify({ raspunsuri: { ['/address/' + A.p2pkh_necheltuit]: { _status: 401, _corp: 'Authorization required: this endpoint is protected' } } })); const m = await porneste('esplora', path.join(FIX, 'esplora.json'), ['--suprascrie', fx]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('unu-401', [A.p2pkh_necheltuit]), '--esplora', m.url], tinte: m.tinta }); m.opreste(); return r; }; + await incearca('e. un corp de eroare SERVIT de tinta care contine un cuvant interzis (HTTP 401 "this endpoint is protected"): raportul e scris (cod 2, adresa NEMASURAT, corpul citat ca [served: ...]); PLANTAREA INVERSA (citatul judecat ca text al uneltei) il refuza si face verificarea ROSIE', async () => { + const r = await tintaCuvant(AICI); + const bun = r.cod === 2 && r.scris && nemasuratCu(r.raport, A.p2pkh_necheltuit, '[served: Authorization required: this endpoint is protected]'); + if (!bun) return [false, `unealta a dat cod ${r.cod}: ${(r.raport ? detaliu(r.raport, A.p2pkh_necheltuit) : r.err).slice(0, 110)}`]; + const d = copie('servit'); const n = planteaza(path.join(d, 'raport.mjs'), ", '[served: ]')", ', (m) => m)'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await tintaCuvant(d); + return [bun && p.cod === 1 && !p.scris && /REFUSED \(language\)/.test(p.err), `${r.cod}: ${detaliu(r.raport, A.p2pkh_necheltuit).slice(0, 90)} | copia plantata: cod ${p.cod} ${p.err.slice(0, 50)}`]; + }); + // e. un IDENTIFICATOR servit care nu e unul (un tx_hash, un txid, o pozitie) si un mesaj servit taiat la 200 de caractere sunt tot textul + // tintei: fiecare e citat ca [served: ...] (sau refuza raspunsul), si raportul se scrie; o plantare per drum (validarea scoasa) il + // lasa necitat, iar poarta de limbaj refuza tot raportul (cod 1, "REFUSED (language)"), ceea ce face verificarea ROSIE + const servitCazuri = (() => { + const k = cheie('servit'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); const f = finantare(spk, 'servit'); + const kt = cheie('servit-p2tr'); const spkTr = Buffer.concat([Buffer.from([0x51, 0x20]), kt.pub.subarray(1)]); const intrareTr = 'script:' + B.hex(spkTr); + const fisier = (nume, raspunsuri) => { const fx = path.join(T, 'servit-' + nume + '.json'); fs.writeFileSync(fx, JSON.stringify({ raspunsuri })); return fx; }; + const sh = B.scripthash(spk); + const hc = istoricCore(A.p2pkh_cheltuit); const vSpend = bitcoindFix.raspunsuri['getrawtransaction:' + hc.chelt[0]]; + return [ + { nume: 'Electrum tx_hash', fel: 'electrum', adrese: [adresa], cuvant: 'safe protected', fx: fisier('el-txhash', { ['blockchain.scripthash.get_history:' + sh]: [{ tx_hash: 'safe protected', height: 1 }], ['blockchain.transaction.get:safe protected']: f.raw.toString('hex') }), cod: 2, + planta: [['adaptoare.mjs', 'if (!ID_BTC.test(h.tx_hash)) return', 'if (false) return']] }, + { nume: 'Esplora txid', fel: 'esplora', adrese: [adresa], cuvant: 'trustless', fx: fisier('es-txid', { ['/address/' + adresa]: { address: adresa, chain_stats: { funded_txo_count: 1, funded_txo_sum: 100000, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 1 }, mempool_stats: { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 } }, ['/address/' + adresa + '/txs']: [esploraTx({ ...f, height: 1, txid: 'trustless' })] }), cod: 2, + planta: [['adaptoare.mjs', 'if (rau !== undefined) throw', 'if (false) throw']] }, + { nume: 'Core scantxoutset txid', fel: 'bitcoind', adrese: [intrareTr], cuvant: 'guaranteed', fx: fisier('core-scan', { ['scantxoutset:raw(' + B.hex(spkTr) + ')']: { success: true, unspents: [{ txid: 'guaranteed', vout: 0, scriptPubKey: B.hex(spkTr), desc: 'raw(' + B.hex(spkTr) + ')', amount: 0.001, height: 5 }] } }), cod: 2, + planta: [['adaptoare.mjs', 'if (uRau) return', 'if (false) return']] }, + { nume: 'Core blockhash', fel: 'bitcoind', adrese: [A.p2pkh_cheltuit], txids: [...hc.fin, ...hc.chelt], cuvant: 'safe', fx: fisier('core-bloc', { ['getrawtransaction:' + hc.chelt[0]]: { ...vSpend, blockhash: 'safe' } }), cod: 1, refuz: /REFUSED \(txids\)/, + planta: [['adaptoare.mjs', "if (v.blockhash !== undefined && v.blockhash !== null && !ID_BTC.test(String(v.blockhash))) throw", 'if (false) throw']] }, + { nume: 'mesaj servit taiat la 200 de caractere', fel: 'electrum', adrese: [adresa], cuvant: 'protected', fx: fisier('el-taiat', { ['blockchain.scripthash.get_history:' + sh]: { _eroare: { code: -32000, message: 'protected ' + 'x'.repeat(190) } } }), cod: 2, + planta: [['adaptoare.mjs', "if (x.length > 200) { x = x.slice(0, 200); const i = x.lastIndexOf('[served: '); if (i >= 0 && x.indexOf(']', i) < 0) x += ']'; } return x;", 'return x.slice(0, 200);'], ['raport.mjs', '(?:\\]|$)', '\\]']] }, + ]; + })(); + const ruleazaServit = async (dir, c) => { const m = await porneste(c.fel, path.join(FIX, c.fel === 'electrum' ? 'electrum.json' : c.fel === 'esplora' ? 'esplora.json' : 'bitcoind.json'), ['--suprascrie', c.fx]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('servit-' + c.nume.replace(/\W+/g, '-'), c.adrese), c.fel === 'electrum' ? '--electrum' : '--' + c.fel, c.fel === 'electrum' ? m.tinta : m.url, ...(c.txids ? ['--txids', scrieLista('servit-txids-' + c.nume.replace(/\W+/g, '-'), c.txids)] : [])], tinte: m.tinta }); m.opreste(); return r; }; + // raportul e scris si adresa NEMASURAT cu textul tintei CITAT (sau, pentru un raspuns la --txids, refuzul numit, nu cel de limbaj) + const servitBun = (r, c) => (c.refuz ? r.cod === 1 && !r.scris && c.refuz.test(r.err) && !/REFUSED \(language\)/.test(r.err) && r.err.includes('[served: ' + c.cuvant) : r.cod === c.cod && r.scris && c.adrese.every((a) => eticheta(r.raport, a) === U_ && nemasuratCu(r.raport, a, '[served: ')) && JSON.stringify(r.raport).includes(c.cuvant)); + for (const c of servitCazuri) { + await incearca(`e. textul tintei citat: ${c.nume} cu "${c.cuvant}" -> ${c.refuz ? 'refuzul raspunsului numit (nu cel de limbaj)' : 'raport scris, adresa NEMASURAT, textul citat [served: ...]'}; PLANTAREA INVERSA (citarea scoasa) e refuzata de poarta de limbaj si iese ROSIE`, async () => { + const r = await ruleazaServit(AICI, c); + const bun = servitBun(r, c); + if (!bun) return [false, `unealta a dat cod ${r.cod}: ${(r.raport ? detaliu(r.raport, c.adrese[0]) : r.err).slice(0, 120)}`]; + const d = copie('servit-' + c.nume.replace(/\W+/g, '-').toLowerCase()); + for (const [f, vechi, nou] of c.planta) { const n = planteaza(path.join(d, f), vechi, nou); if (n !== 1) return `tinta plantarii in ${f} apare de ${n} ori`; } + const p = await ruleazaServit(d, c); + return [bun && !servitBun(p, c) && p.cod === 1 && /REFUSED \(language\)/.test(p.err), `${(r.raport ? detaliu(r.raport, c.adrese[0]) : r.err.replace(/[0-9a-f]{64}/g, (x) => x.slice(0, 8) + '..')).slice(0, 90)} | copia plantata: cod ${p.cod} ${p.err.slice(0, 40)}`]; + }); + } + // f. modul 3 + { + const r0 = ruleaza({ args: ['--mod', '3', '--adrese', LISTA_BTC, '--esplora', 'http://127.0.0.1:9/'] }); + cer('f. modul 3 fara consimtamant scris: REFUZAT (cod 1), nimic scris, nicio conexiune', da(r0.cod === 1 && !r0.scris && /REFUSED \(consent\)/.test(r0.err) && !!r0.jurnal && r0.jurnal.conexiuni.length === 0), r0.err.slice(0, 100)); + const m = await porneste('esplora', path.join(FIX, 'esplora.json')); + const r1 = ruleaza({ args: ['--mod', '3', '--adrese', LISTA_BTC, '--esplora', m.url, '--consimtamant-tert', 'I consent to sending these addresses to a third-party provider'], tinte: m.tinta }); + await sleep(100); const c = m.contor(); m.opreste(); + cer('f. modul 3 cu consimtamant spre o tinta PRIVATA (loopback): REFUZAT ca tinta privata, zero conexiuni acceptate de macheta', da(r1.cod === 1 && !r1.scris && /target-private/.test(r1.err) && c.connections === 0 && !!r1.jurnal && r1.jurnal.conexiuni.length === 0), r1.err.slice(0, 100)); + const r6 = ruleaza({ args: ['--mod', '3', '--adrese', LISTA_BTC, '--esplora', 'https://[2001:db8::1]/', '--consimtamant-tert', 'I consent to sending these addresses to a third-party provider'] }); + cer('f. modul 3 spre un literal IPv6 de documentatie: REFUZAT ca tinta privata (nu "does not resolve"), nicio conexiune', da(r6.cod === 1 && /target-private/.test(r6.err) && !!r6.jurnal && r6.jurnal.conexiuni.length === 0 && r6.jurnal.dns.length === 0), r6.err.slice(0, 100)); + cer('f. modul 3 catre un furnizor real', 'NEMASURAT', 'ar trimite adrese unui tert; nu se ruleaza in proba fara consimtamant'); + const r2 = ruleaza({ args: ['--mod', '1', '--adrese', LISTA_BTC, '--esplora', 'http://127.0.0.1:9/'] }); + cer('f. modul 1 cu o sursa de date data: REFUZAT (modul 1 e offline prin definitie)', da(r2.cod === 1 && !r2.scris && /offline/.test(r2.err))); + } + // g. raport / plic schimbate + if (m1 && m1.raport) { + const schimbat = JSON.parse(JSON.stringify(m1.raport)); schimbat.addresses[0].label = F_; + const plic = JSON.parse(fs.readFileSync(m1.plic, 'utf8')); + cer('g. raport.json cu o eticheta schimbata dupa semnare: verificaRaport REFUZA (amprenta != evidenceHash)', da(verificaRaport(schimbat, plic).ok === false)); + const plicRau = JSON.parse(JSON.stringify(plic)); plicRau.statement.result = plicRau.statement.result.replace(/\d+ exposed/, '0 exposed'); + const f = path.join(T, 'plic-rau.json'); fs.writeFileSync(f, JSON.stringify(plicRau)); + cerVerif('g. plic cu rezultatul schimbat: verificatorul de referinta spune INVALID', da(verdictVerificator(f) === 'INVALID')); + } else cer('g. raport / plic schimbate', 'STRICAT', 'modul 1 nu a produs un raport'); + // h. dovezi care NU sunt ale tintei + await incearca('h. o intrare care cheltuie ALTA iesire taproot nu e dovada pentru tinta P2TR; aceeasi intrare, daca ar cheltui tinta, ar fi', async () => { + const t = B.decodeazaIntrareBitcoin(A.p2tr_nefinantat); + const alt = Object.values(txs).find((tx) => tx.vin.some((v) => v.witness.length >= 2 && !tx.vout.some((o) => false) && B.dovezileIntrarii(t, v, true).some((f) => f.what === 'taproot-internal-key-revealed'))); + if (!alt) { const sint = { scriptSig: Buffer.alloc(0), witness: [Buffer.alloc(64, 1), Buffer.from([0x51]), Buffer.concat([Buffer.from([0xc0]), Buffer.alloc(32, 2)])] }; return [B.dovezileIntrarii(t, sint, false).length === 0 && B.dovezileIntrarii(t, sint, true).length === 1, 'pe o intrare sintetica de cale de script']; } + const vin = alt.vin.find((v) => B.dovezileIntrarii(t, v, true).length); + return [B.dovezileIntrarii(t, vin, false).length === 0 && B.dovezileIntrarii(t, vin, true).length === 1, 'pe o intrare reala din fixtura']; + }); + await incearca('h. cheia dezvaluita in cheltuirea unei adrese P2PKH nu e dovada pentru ALTA adresa P2PKH (HASH160 diferit)', async () => { + const tS = B.decodeazaIntrareBitcoin(A.p2pkh_cheltuit), tN = B.decodeazaIntrareBitcoin(A.p2pkh_necheltuit); + const spend = Object.values(txs).find((tx) => tx.vin.some((v) => B.dovezileIntrarii(tS, v, true).some((f) => f.what === 'public-key-revealed'))); + if (!spend) return 'nicio cheltuire a adresei P2PKH cheltuite in fixtura'; + return spend.vin.every((v) => B.dovezileIntrarii(tN, v, true).length === 0); + }); + // i. Core fara --txids: plantarea inversa. Plasa de la capat (prin Core niciodata F, verificata separat mai jos) ar ascunde ce face + // fiecare garda in parte, deci plantarile pe o garda Core o scot si pe ea: fiecare arata ca F-ul se intoarce fara garda ei + const PLASA_CORE = 'if (obs.historyFromRequesterList && (tipExpus ? !outs.length : !revel.length)) return nem('; + // din runda 6 o a doua plasa tine si ea: fara un varf citit (Core nu citeste niciunul) nu se da F; plantarea le scoate pe amandoua + const PLASA_VARF = "} else if (r.label === ETICHETA.FARA_DOVADA) r = nem(r, 'not measured: the tip of the target was not read"; + // din runda 7: indexul numara in mempool mai multe tranzactii ale scriptului decat a purtat pagina -> NEMASURAT (plasa regulilor mempool) + const PLASA_TX_MEMPOOL = 'if (!revel.length && !expusPrinTip && obs.mempoolTxNotServed) return nem('; + const faraPlasaCore = (d) => (planteaza(path.join(d, 'clasifica.mjs'), PLASA_CORE, 'if (false) return nem(') === 1 && planteaza(path.join(d, 'clasifica.mjs'), PLASA_VARF, "} else if (false) r = nem(r, 'not measured: the tip of the target was not read") === 1 ? 1 : 0); + await incearca('i. PLANTAREA INVERSA: o copie in care scanul Core pretinde ca a enumerat cheltuirile (si fara plasa de la capat) face verificarea "Core fara --txids" ROSIE', async () => { + const d = copie('core'); const n = planteaza(path.join(d, 'adaptoare.mjs'), 'obs.spendsNotEnumerable = nTxids === 0 || !atinsa;', 'obs.spendsNotEnumerable = false;'); + if (n !== 1 || faraPlasaCore(d) !== 1) return `tinta plantarii apare de ${n} ori (sau plasa nu apare o data)`; + const m = await porneste('bitcoind', path.join(FIX, 'bitcoind.json')); + const r = ruleaza({ dir: d, args: ['--mod', '2', '--adrese', LISTA_BTC, '--bitcoind', m.url], tinte: m.tinta }); m.opreste(); + return [predicatCoreFaraTxids(r) === false && !!r.raport && r.raport.summary.noOnChainEvidence > 0, `copia plantata a dat ${r.raport ? r.raport.summary.verdict : 'niciun raport'}`]; + }); + // i. Core cu --txids INCOMPLET: numai finantarile unei adrese cheltuite; scanul spune 0 necheltuite -> cheltuirea NU a fost citita + const predicatCoreIncomplet = (r, adresa) => r.cod === 2 && nemasuratCu(r.raport, adresa, 'not among the --txids') && r.raport.summary.noOnChainEvidence === 0; + await incearca('i. Core cu --txids INCOMPLET (numai finantarile adresei P2PKH cheltuite; scanul da 0 necheltuite): NEMASURAT numit ("not among the --txids given"), niciodata F; cu lista COMPLETA aceeasi adresa e E (controlul pozitiv)', async () => { + const h = istoricCore(A.p2pkh_cheltuit); if (!h.fin.length || !h.chelt.length) return `istoricul din fixtura nu are finantari (${h.fin.length}) si cheltuiri (${h.chelt.length})`; + const lista = scrieLista('unu-core', [A.p2pkh_cheltuit]); + const m1 = await porneste('bitcoind', path.join(FIX, 'bitcoind.json')); const r1 = ruleaza({ args: ['--mod', '2', '--adrese', lista, '--bitcoind', m1.url, '--txids', scrieLista('txids-fin', h.fin)], tinte: m1.tinta }); m1.opreste(); + const m2 = await porneste('bitcoind', path.join(FIX, 'bitcoind.json')); const r2 = ruleaza({ args: ['--mod', '2', '--adrese', lista, '--bitcoind', m2.url, '--txids', scrieLista('txids-tot', [...h.fin, ...h.chelt])], tinte: m2.tinta }); m2.opreste(); + return [predicatCoreIncomplet(r1, A.p2pkh_cheltuit) && r2.cod === 0 && eticheta(r2.raport, A.p2pkh_cheltuit) === E_, `incomplet (${h.fin.length} txids): ${detaliu(r1.raport, A.p2pkh_cheltuit).slice(0, 90)} | complet (${h.fin.length + h.chelt.length}): ${detaliu(r2.raport, A.p2pkh_cheltuit)}`]; + }); + await incearca('i. PLANTAREA INVERSA: o copie in care numaratoarea iesirilor cheltuite necitite e fortata la 0 (si fara plasa de la capat) face verificarea "Core cu --txids incomplet" ROSIE', async () => { + const d = copie('core2'); const n = planteaza(path.join(d, 'adaptoare.mjs'), "obs.spentNotRead = obs.outputs.filter((x) => !unspentSet.has(x.txid + ':' + x.vout) && !spentRead.has(x.txid + ':' + x.vout)).length;", 'obs.spentNotRead = 0;'); + if (n !== 1 || faraPlasaCore(d) !== 1) return `tinta plantarii apare de ${n} ori (sau plasa nu apare o data)`; + const h = istoricCore(A.p2pkh_cheltuit); + const m = await porneste('bitcoind', path.join(FIX, 'bitcoind.json')); const r = ruleaza({ dir: d, args: ['--mod', '2', '--adrese', scrieLista('unu-core-inv', [A.p2pkh_cheltuit]), '--bitcoind', m.url, '--txids', scrieLista('txids-fin-inv', h.fin)], tinte: m.tinta }); m.opreste(); + return [predicatCoreIncomplet(r, A.p2pkh_cheltuit) === false && !!r.raport && r.raport.summary.noOnChainEvidence > 0, `copia plantata a dat ${r.raport ? r.raport.summary.verdict : 'niciun raport'}`]; + }); + // i. Core cu --txids care NU ating o adresa: lista unui custode spune ceva numai despre adresele pe care le atinge; pentru celelalte, + // informatia e aceeasi ca fara --txids (scanul vede numai iesirile necheltuite), deci la fel NEMASURAT + const ids1 = (() => { const h = istoricCore(A.p2pkh_cheltuit); return [...h.fin, ...h.chelt]; })(); + const neatinse1 = ROLURI_BTC.filter((rol) => { const x = istoricCore(A[rol]); return ![...x.fin, ...x.chelt].some((id) => ids1.includes(id)); }); + const coreLista1 = async (dir) => { const m = await porneste('bitcoind', path.join(FIX, 'bitcoind.json')); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', LISTA_BTC, '--bitcoind', m.url, '--txids', scrieLista('txids-c1-' + path.basename(dir), ids1)], tinte: m.tinta }); m.opreste(); return r; }; + const predicatNeatinse = (r) => !!r.raport && r.raport.summary.noOnChainEvidence === 0 && eticheta(r.raport, A.p2pkh_cheltuit) === E_ && neatinse1.every((rol) => (eticheta(r.raport, A[rol]) === U_ && nemasuratCu(r.raport, A[rol], `none of the ${ids1.length} transaction(s) given with --txids touches this address`)) || (eticheta(r.raport, A[rol]) === E_ && (rol === 'p2pk' || rol.startsWith('p2tr')) && necheltuite(rol) > 0)); + await incearca('i. Core cu --txids = istoricul COMPLET al adresei P2PKH cheltuite, pe cei 8 vectori: zero F; fiecare adresa pe care nicio tranzactie data nu o atinge iese NEMASURAT numit ("none of the N transaction(s) given with --txids touches this address") sau E din scan (cheia in iesire); adresa atinsa iese E', async () => { + if (neatinse1.length < 5) return `fixtura nu are destule adrese neatinse de lista (${neatinse1.length})`; + const r = await coreLista1(AICI); + return [r.cod === 2 && predicatNeatinse(r), `${ids1.length} txids, neatinse ${neatinse1.length}: ${neatinse1.map((rol) => rol + '=' + eticheta(r.raport, A[rol])).join(' ')}`]; + }); + await incearca('i. PLANTAREA INVERSA: o copie cu steagul GLOBAL (o lista data pentru o adresa "enumera" cheltuirile tuturor; si fara plasa de la capat) da F pe adresele neatinse si face verificarea de mai sus ROSIE', async () => { + const d = copie('core-atinsa'); const n = planteaza(path.join(d, 'adaptoare.mjs'), 'obs.spendsNotEnumerable = nTxids === 0 || !atinsa;', 'obs.spendsNotEnumerable = nTxids === 0;'); + if (n !== 1 || faraPlasaCore(d) !== 1) return `tinta plantarii apare de ${n} ori (sau plasa nu apare o data)`; + const r = await coreLista1(d); + return [predicatNeatinse(r) === false && !!r.raport && r.raport.summary.noOnChainEvidence > 0, `copia plantata a dat ${r.raport ? r.raport.summary.verdict : 'niciun raport'}`]; + }); + await incearca('i. un txid pe care nodul NU il serveste in --txids: REFUZ numit (cod 1, nimic scris, id-ul INTREG in mesaj si niciun alt hex lung), inainte de orice masuratoare (cereri servite <= 3 pentru lantul nodului + txids, zero scanuri)', async () => { + const h = istoricCore(A.p2pkh_cheltuit); const rau = 'ff'.repeat(32); + // in capitale in fisier: acelasi id (se compara cu id-urile calculate din octeti, in minuscule) + const m = await porneste('bitcoind', path.join(FIX, 'bitcoind.json')); const r = ruleaza({ args: ['--mod', '2', '--adrese', LISTA_BTC, '--bitcoind', m.url, '--txids', scrieLista('txids-rau', [...h.fin, rau.toUpperCase()])], tinte: m.tinta }); await sleep(100); const c = m.contor(); m.opreste(); + const hexLung = r.err.match(/[0-9a-fA-F]{40,}/g) || []; + return [r.cod === 1 && !r.scris && /REFUSED \(txids\)/.test(r.err) && r.err.includes(rau) && hexLung.every((x) => x.toLowerCase() === rau) && c.requests <= 3 + h.fin.length + 1 && c.unknown.every((k) => k.startsWith('getrawtransaction:')), `cod ${r.cod}, cereri servite ${c.requests} (txids ${h.fin.length + 1}), hex lung in mesaj ${hexLung.length}: ${r.err.replace(/[0-9a-f]{64}/g, (x) => x.slice(0, 8) + '..').slice(0, 110)}`]; + }); + await incearca('i. drumul FARA hex (getrawtransaction cu forma decodata vin/vout, cum raspunde un nod fara hex; tranzactia RE-SERIALIZATA din ea si hashuita la id): aceleasi etichete E pe P2WPKH, P2SH multisig si P2WSH multisig; un camp schimbat in forma decodata (o valoare) -> REFUZ "hashes to"', async () => { + const roluri = ['p2wpkh_cheltuit', 'p2sh_multisig_cheltuit', 'p2wsh_multisig_cheltuit']; const ids = [], adrese = []; + for (const rol of roluri) { const h = istoricCore(A[rol]); ids.push(...h.fin, ...h.chelt); adrese.push(A[rol]); } + const sup = {}; for (const id of new Set(ids)) { const v = bitcoindFix.raspunsuri['getrawtransaction:' + id]; if (!v || !v.vin || !v.vout) return `fixtura nu are forma decodata pentru ${id.slice(0, 12)}`; const { hex, ...fara } = v; sup['getrawtransaction:' + id] = fara; } + const f = path.join(T, 'planta-fara-hex.json'); fs.writeFileSync(f, JSON.stringify({ raspunsuri: sup })); + const m = await porneste('bitcoind', path.join(FIX, 'bitcoind.json'), ['--suprascrie', f]); const r = ruleaza({ args: ['--mod', '2', '--adrese', scrieLista('trei-fara-hex', adrese), '--bitcoind', m.url, '--txids', scrieLista('txids-fara-hex', [...new Set(ids)])], tinte: m.tinta }); m.opreste(); + const bune = r.cod === 0 && adrese.every((a) => eticheta(r.raport, a) === E_) && dovada(r.raport, A.p2wpkh_cheltuit, 'public key revealed in the witness') && [A.p2sh_multisig_cheltuit, A.p2wsh_multisig_cheltuit].every((a) => gaseste(r.raport, a).evidence.some((e) => /\d+-of-\d+ multisig/.test(e))); + // controlul negativ: valoarea primei iesiri a unei tranzactii schimbata cu un satoshi in forma decodata -> alt id -> refuz + const idSchimbat = [...new Set(ids)][0]; const sup2 = JSON.parse(JSON.stringify(sup)); const vs = sup2['getrawtransaction:' + idSchimbat]; vs.vout[0].value = Number((Number(vs.vout[0].value) + 0.00000001).toFixed(8)); + const f2 = path.join(T, 'planta-fara-hex-rau.json'); fs.writeFileSync(f2, JSON.stringify({ raspunsuri: sup2 })); + const m2 = await porneste('bitcoind', path.join(FIX, 'bitcoind.json'), ['--suprascrie', f2]); const r2 = ruleaza({ args: ['--mod', '2', '--adrese', scrieLista('trei-fara-hex-rau', adrese), '--bitcoind', m2.url, '--txids', scrieLista('txids-fara-hex-rau', [...new Set(ids)])], tinte: m2.tinta }); m2.opreste(); + const refuz = r2.cod === 1 && !r2.scris && /REFUSED \(txids\)/.test(r2.err) && /without its hex/.test(r2.err) && /hashes to/.test(r2.err) && r2.err.includes(idSchimbat); + return [bune && refuz, `${new Set(ids).size} tranzactii fara hex: ${adrese.map((a) => eticheta(r.raport, a)).join(', ')} | o valoare schimbata: cod ${r2.cod} ${r2.err.replace(/[0-9a-f]{64}/g, (x) => x.slice(0, 8) + '..').slice(0, 90)}`]; + }); + // i. Core: o tranzactie data care atinge adresa NUMAI in mempool nu e o atingere pe lant. Adresa X (P2WPKH) a fost finantata si + // cheltuita PE LANT (cheltuirea dezvaluie cheia; nu e data), scanul nu ii gaseste iesiri; --txids = [M], o plata catre X numai in mempool + const coreSintetic = async (dir, nume, raspunsuri, adrese, txids) => { const f = path.join(T, 'core-' + nume + '.json'); fs.writeFileSync(f, JSON.stringify({ raspunsuri })); const m = await porneste('bitcoind', path.join(FIX, 'bitcoind.json'), ['--suprascrie', f]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('core-' + nume, adrese), '--bitcoind', m.url, ...(txids.length ? ['--txids', scrieLista('txids-' + nume, txids)] : [])], tinte: m.tinta }); m.opreste(); return r; }; + const blocSintetic = (et) => crypto.createHash('sha256').update('bloc sintetic ' + et).digest('hex'); + // forma verbose a lui getrawtransaction: blockhash + confirmations >= 1 pe lantul ACTIV, confirmations 0 intr-un bloc din afara lui + // (runda 7) cu blocktime: ora blocului, judecata fata de data raportului; implicit 2026-10-11T21:17:30Z, cea mai noua din fixtura Core + const verbose = (x, bloc, confirmari = 1, blocktime = 1791753450) => ({ hex: x.raw.toString('hex'), txid: x.id, ...(bloc ? { blockhash: bloc, confirmations: confirmari, ...(blocktime === null ? {} : { blocktime }) } : {}) }); + const k9 = (() => { + const k = cheie('k9'); const spk = Buffer.concat([Buffer.from([0x00, 0x14]), B.hash160(k.pub)]); const intrare = 'script:' + B.hex(spk); + const m = finantare(spk, 'k9-mempool'); const strain = finantare(p2pkhSpk(B.hash160(cheie('k9-strain').pub)), 'k9-strain'); + const scan = { ['scantxoutset:raw(' + B.hex(spk) + ')']: { success: true, unspents: [] } }; + return { intrare, m, strain, mempool: { ...scan, ['getrawtransaction:' + m.id]: verbose(m, null) }, ref: { ...scan, ['getrawtransaction:' + strain.id]: verbose(strain, blocSintetic('k9')) } }; + })(); + const ATINSA = 'const atinsa = obs.outputs.length > 0 || obs.inputs.length > 0;'; + const atinsaCuMempool = (d) => planteaza(path.join(d, 'adaptoare.mjs'), ATINSA, 'const atinsa = obs.outputs.length > 0 || obs.inputs.length > 0 || obs.unconfirmedOutputs > 0 || obs.unconfirmedInputs > 0;'); + const predicatK9 = (r) => !!r.raport && eticheta(r.raport, k9.intrare) === U_ && nemasuratCu(r.raport, k9.intrare, 'none of the 1 transaction(s) given with --txids touches this address on chain') && nemasuratCu(r.raport, k9.intrare, 'only in its mempool'); + await incearca('i. Core: o lista care atinge adresa NUMAI printr-o tranzactie din MEMPOOL (adresa cheltuita pe lant, cheltuirea nedata, scanul fara iesiri) -> NEMASURAT numit ("touches this address on chain", atingerea din mempool numita), niciodata F; lista cu o tranzactie straina CONFIRMATA -> acelasi motiv, fara mempool (controlul pozitiv); PLANTAREA INVERSA (atingerea socoteste mempool) iese ROSIE, iar cu plasa de la capat scoasa si ea da chiar F', async () => { + const r1 = await coreSintetic(AICI, 'k9', k9.mempool, [k9.intrare], [k9.m.id]); + const r2 = await coreSintetic(AICI, 'k9-ref', k9.ref, [k9.intrare], [k9.strain.id]); + const bun = predicatK9(r1) && r1.cod === 2 && eticheta(r2.raport, k9.intrare) === U_ && nemasuratCu(r2.raport, k9.intrare, 'touches this address on chain') && !nemasuratCu(r2.raport, k9.intrare, 'mempool'); + if (!bun) return [false, `mempool: ${detaliu(r1.raport, k9.intrare).slice(0, 110)} | strain: ${detaliu(r2.raport, k9.intrare).slice(0, 80)}`]; + const d1 = copie('k9'); if (atinsaCuMempool(d1) !== 1) return 'tinta plantarii (atinsa) nu apare o data'; + const p1 = await coreSintetic(d1, 'k9-inv', k9.mempool, [k9.intrare], [k9.m.id]); + const d2 = copie('k9-f'); if (atinsaCuMempool(d2) !== 1 || faraPlasaCore(d2) !== 1) return 'tintele plantarii (atinsa, plasa) nu apar o data'; + const p2 = await coreSintetic(d2, 'k9-inv-f', k9.mempool, [k9.intrare], [k9.m.id]); + return [bun && !predicatK9(p1) && !predicatK9(p2) && eticheta(p2.raport, k9.intrare) === F_, `${detaliu(r1.raport, k9.intrare).slice(0, 100)} | atingerea cu mempool: ${eticheta(p1.raport, k9.intrare)} | si fara plasa: ${eticheta(p2.raport, k9.intrare)}`]; + }); + // i. Core: o tranzactie data care numeste un bloc din AFARA lantului activ (confirmations 0: un bloc vechi pe care txindex inca il + // numeste) nu e pe lant, exact ca una din mempool. Adresa P2PKH: finantarea pe lantul activ, cheltuirea (cu cheia) numai intr-un astfel + // de bloc -> NEMASURAT numit ("block off its active chain"), nu E "on-chain evidence"; aceeasi cheltuire pe lantul activ -> E + const kStale = (() => { + const k = cheie('k-stale'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); + const f = finantare(spk, 'k-stale'); const s = cheltuire(f.id, Buffer.concat([push(SIG), push(k.pub)]), []); + const baza = { ['scantxoutset:' + adresa]: { success: true, unspents: [] }, ['getrawtransaction:' + f.id]: verbose(f, blocSintetic('k-stale-f'), 7) }; + return { adresa, ids: [f.id, s.id], vechi: { ...baza, ['getrawtransaction:' + s.id]: verbose(s, blocSintetic('k-stale-s'), 0) }, activ: { ...baza, ['getrawtransaction:' + s.id]: verbose(s, blocSintetic('k-stale-s'), 3) } }; + })(); + await incearca('i. Core: cheltuirea care dezvaluie cheia e intr-un bloc din AFARA lantului activ (blockhash, confirmations 0) -> NEMASURAT numit ("block off its active chain"), nu E "on-chain evidence"; pe lantul activ (confirmations 3) -> E (controlul pozitiv); PLANTAREA INVERSA (pe lant = are blockhash) da E si iese ROSIE', async () => { + const r = await coreSintetic(AICI, 'k-stale', kStale.vechi, [kStale.adresa], kStale.ids); + const ra = await coreSintetic(AICI, 'k-stale-activ', kStale.activ, [kStale.adresa], kStale.ids); + const bun = r.cod === 2 && eticheta(r.raport, kStale.adresa) === U_ && nemasuratCu(r.raport, kStale.adresa, 'block off its active chain') && eticheta(ra.raport, kStale.adresa) === E_; + if (!bun) return [false, `bloc vechi: ${detaliu(r.raport, kStale.adresa).slice(0, 100)} | lant activ: ${detaliu(ra.raport, kStale.adresa)}`]; + const d = copie('k-stale'); if (planteaza(path.join(d, 'adaptoare.mjs'), "const peLant = typeof v.blockhash === 'string' && Number.isInteger(v.confirmations) && v.confirmations >= 1;", "const peLant = typeof v.blockhash === 'string';") !== 1) return 'tinta plantarii nu apare o data'; + const p = await coreSintetic(d, 'k-stale-inv', kStale.vechi, [kStale.adresa], kStale.ids); + return [bun && eticheta(p.raport, kStale.adresa) === E_, `${detaliu(r.raport, kStale.adresa).slice(0, 90)} | lant activ: ${eticheta(ra.raport, kStale.adresa)} | copia plantata: ${eticheta(p.raport, kStale.adresa)}`]; + }); + // i. plasa de la capat: prin Core istoricul unei adrese e lista data, pe care niciun raspuns al nodului nu o arata completa -> niciodata F + const k4 = (() => { + const k = cheie('k4'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); const f = finantare(spk, 'k4'); + return { adresa, f, raspunsuri: { ['scantxoutset:' + adresa]: { success: true, unspents: [{ txid: f.id, vout: 0, scriptPubKey: B.hex(spk), desc: 'addr(' + adresa + ')', amount: 0.001, height: 100 }] }, ['getrawtransaction:' + f.id]: verbose(f, blocSintetic('k4')) } }; + })(); + await incearca('i. Core cu --txids = finantarea unei adrese P2PKH a carei iesire e INCA necheltuita (scanul o gaseste): NEMASURAT numit ("cannot check that it lists every transaction"), nu F; PLANTAREA INVERSA (plasa de la capat scoasa) da F si iese ROSIE', async () => { + const r = await coreSintetic(AICI, 'k4', k4.raspunsuri, [k4.adresa], [k4.f.id]); + const bun = r.cod === 2 && eticheta(r.raport, k4.adresa) === U_ && nemasuratCu(r.raport, k4.adresa, NU_E_COMPLETA) && nemasuratCu(r.raport, k4.adresa, 'finds 1 of its output(s) unspent'); + if (!bun) return [false, `unealta a dat ${detaliu(r.raport, k4.adresa).slice(0, 110)} (cod ${r.cod})`]; + const d = copie('k4'); if (faraPlasaCore(d) !== 1) return 'tinta plantarii (plasa) nu apare o data'; + const p = await coreSintetic(d, 'k4-inv', k4.raspunsuri, [k4.adresa], [k4.f.id]); + return [bun && eticheta(p.raport, k4.adresa) === F_ && !nemasuratCu(p.raport, k4.adresa, NU_E_COMPLETA), `${detaliu(r.raport, k4.adresa).slice(0, 100)} | copia plantata: ${eticheta(p.raport, k4.adresa)}`]; + }); + // j. EIP-7702 plantat pe contul fara iesiri + await incearca('j. un EOA cu designator EIP-7702 plantat (cod 0xef0100||adresa, nonce 1), fara autorizatia in fereastra: E, cu tranzactia de autorizare numita ca nevazuta', async () => { + const f = path.join(T, 'planta-7702.json'); + fs.writeFileSync(f, JSON.stringify({ raspunsuri: stareEth([{ address: ETHV.primitor, nonce: 1, code: '0xef0100' + '11'.repeat(20) }]) })); + const m = await porneste('eth', path.join(FIX, 'eth-rpc.json'), ['--suprascrie', f]); + const r = ruleaza({ args: ['--mod', '2', '--adrese', scrieLista('unu-eth', [ETHV.primitor]), '--eth-rpc', m.url, '--eth-blocks', `${ETHV.bloc}..${ETHV.bloc}`], tinte: m.tinta }); m.opreste(); + return [r.cod === 0 && eticheta(r.raport, ETHV.primitor) === E_ && dovada(r.raport, ETHV.primitor, 'EIP-7702 delegation designator') && nevazut(r.raport, ETHV.primitor, /authorizing transaction itself/), detaliu(r.raport, ETHV.primitor)]; + }); + // j. tranzactia 0x4 care poarta autorizatia: hash-ul ei se re-deriva din campurile servite, ca la o tranzactie trimisa. Ca sa se ajunga la + // ramura "numai autorizatia", expeditorul tranzactiei 0x4 e mutat pe alt cont (autorizatia se recupereaza din semnatura EI, nu din `from`) + const ethAut = (() => { + const fx = JSON.parse(fs.readFileSync(path.join(FIX, 'eth-rpc.json'), 'utf8')).raspunsuri; const blocKey = Object.keys(fx).find((k) => k.startsWith('eth_getBlockByNumber:')); + const autor = ETHV.autoritate7702.toLowerCase(); const codFixtura = fx['eth_getCode:' + JSON.stringify([autor, CAP_ETH])]; + const fisier = (nume, { hash, cod }) => { const bloc = JSON.parse(JSON.stringify(fx[blocKey])); const t4 = bloc.transactions.find((t) => t.type === '0x4' && Array.isArray(t.authorizationList)); t4.from = '0x' + '11'.repeat(20); if (hash) t4.hash = hash; const r = { [blocKey]: bloc, ...stareEth([{ address: autor, nonce: 1, code: cod || codFixtura }]) }; const f = path.join(T, nume + '.json'); fs.writeFileSync(f, JSON.stringify({ raspunsuri: r })); return f; }; + return { autor, golBun: fisier('eth-aut-gol-bun', { cod: '0x' }), golRau: fisier('eth-aut-gol-rau', { cod: '0x', hash: '0x' + 'ab'.repeat(32) }), delegatRau: fisier('eth-aut-delegat-rau', { hash: '0x' + 'ab'.repeat(32) }) }; + })(); + const ruleazaEthAut = async (dir, fx) => { const m = await porneste('eth', path.join(FIX, 'eth-rpc.json'), ['--suprascrie', fx]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('eth-aut', [ethAut.autor]), '--eth-rpc', m.url, '--eth-blocks', `${ETHV.bloc}..${ETHV.bloc}`], tinte: m.tinta }); m.opreste(); return r; }; + await incearca('j. autorizatia EIP-7702 a unui cont cu codul gol: tranzactia 0x4 servita exact -> E (hash-ul re-derivat se potriveste); cu hash-ul inlocuit (ab..ab) -> NEMASURAT ("do not hash to that hash"); cu designatorul in cod si hash-ul inlocuit -> E prin designator, autorizatia numita ca nefolosita, id-ul inventat nicaieri in dovezi', async () => { + const a = ethAut.autor; const r0 = await ruleazaEthAut(AICI, ethAut.golBun), r1 = await ruleazaEthAut(AICI, ethAut.golRau), r2 = await ruleazaEthAut(AICI, ethAut.delegatRau); + const inventat = 'ab'.repeat(32); + return [r0.cod === 0 && eticheta(r0.raport, a) === E_ && dovada(r0.raport, a, 'authorization signed by this account in transaction ' + ETHV.tx7702) && dovada(r0.raport, a, 'code at the head block is empty') && r1.cod === 2 && nemasuratCu(r1.raport, a, 'do not hash to that hash') && r2.cod === 0 && eticheta(r2.raport, a) === E_ && dovada(r2.raport, a, 'EIP-7702 delegation designator') && nevazut(r2.raport, a, /not used as evidence/) && !gaseste(r2.raport, a).evidence.some((e) => e.includes(inventat)), `exact: ${detaliu(r0.raport, a)} | hash inlocuit: ${detaliu(r1.raport, a).slice(0, 70)} | designator + hash inlocuit: ${detaliu(r2.raport, a)}`]; + }); + await incearca('j. PLANTAREA INVERSA: o copie care nu mai re-deriva hash-ul tranzactiei 0x4 (potrivire fortata) da E citand hash-ul inventat si face verificarea de mai sus ROSIE', async () => { + const d = copie('eth-aut'); const n = planteaza(path.join(d, 'adaptoare.mjs'), "txHashMatches: h !== null && String(t4.hash || '').toLowerCase() === h", 'txHashMatches: true'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const r = await ruleazaEthAut(d, ethAut.golRau); + return [!(r.cod === 2 && nemasuratCu(r.raport, ethAut.autor, 'do not hash to that hash')) && dovada(r.raport, ethAut.autor, 'ab'.repeat(32)), `copia plantata a dat ${detaliu(r.raport, ethAut.autor).slice(0, 80)} (cod ${r.cod})`]; + }); + // j. textul unui endpoint Ethereum care nu e o valoare (un hash, o cantitate, adresa delegatului) ajunge in raport numai citat sau + // refacut din octeti; o plantare per drum il lasa necitat, si poarta de limbaj refuza raportul + const ethServit = (() => { + const fx = JSON.parse(fs.readFileSync(path.join(FIX, 'eth-rpc.json'), 'utf8')).raspunsuri; const blocKey = Object.keys(fx).find((k) => k.startsWith('eth_getBlockByNumber:')); + const scrie = (nume, schimba) => { const r = {}; const bloc = JSON.parse(JSON.stringify(fx[blocKey])); schimba(bloc, r); r[blocKey] = bloc; const f = path.join(T, 'eth-servit-' + nume + '.json'); fs.writeFileSync(f, JSON.stringify({ raspunsuri: r })); return f; }; + const exp = (b) => b.transactions.find((t) => typeof t.from === 'string' && t.from.toLowerCase() === ETHV.expeditor.toLowerCase()); + const t4 = (b) => b.transactions.find((t) => t.type === '0x4' && Array.isArray(t.authorizationList)); + const autor = ETHV.autoritate7702.toLowerCase(); + const delegatReal = String(t4(JSON.parse(JSON.stringify(fx[blocKey]))).authorizationList[0].address).toLowerCase(); + return [ + { nume: 'hash-ul tranzactiei trimise', adresa: ETHV.expeditor, fx: scrie('hash', (b) => { exp(b).hash = 'safe'; }), bun: (r) => r.cod === 2 && eticheta(r.raport, ETHV.expeditor) === U_ && nemasuratCu(r.raport, ETHV.expeditor, '[served: safe]'), + planta: [['adaptoare.mjs', 'obs.sentTx = { hash: idSauCitat(tx.hash, HASH_ETH), block: n', 'obs.sentTx = { hash: tx.hash, block: n']] }, + { nume: 'r-ul semnaturii (eroarea de conversie)', adresa: ETHV.expeditor, fx: scrie('r', (b) => { exp(b).r = 'safe'; }), bun: (r) => r.cod === 2 && eticheta(r.raport, ETHV.expeditor) === U_ && nemasuratCu(r.raport, ETHV.expeditor, 'r is not a JSON-RPC quantity'), + planta: [['ethereum.mjs', 'catch { throw new Error(`${nume} is not a JSON-RPC quantity`); }', 'catch (e) { throw e; }']] }, + { nume: 'eth_chainId', adresa: ETHV.expeditor, fx: scrie('chainid', (b, r) => { r['eth_chainId:[]'] = 'safe'; }), bun: (r) => r.cod === 2 && eticheta(r.raport, ETHV.expeditor) === U_ && nemasuratCu(r.raport, ETHV.expeditor, '[served: '), + planta: [['adaptoare.mjs', "const cantitate = (x) => (typeof x === 'string' && /^0x[0-9a-fA-F]{1,64}$/.test(x) ? BigInt(x) : null);", 'const cantitate = (x) => BigInt(x);']] }, + { nume: 'adresa delegatului cu text dupa cei 20 de octeti', adresa: autor, fx: scrie('delegat', (b, r) => { const t = t4(b); t.from = '0x' + '11'.repeat(20); t.authorizationList[0].address = t.authorizationList[0].address + ' safe'; Object.assign(r, stareEth([{ address: autor, nonce: 1, code: '0x' }])); }), + bun: (r) => r.cod === 0 && eticheta(r.raport, autor) === E_ && dovada(r.raport, autor, 'delegate ' + delegatReal + ')') && !JSON.stringify(r.raport).includes('safe'), + planta: [['ethereum.mjs', "delegate: '0x' + delegat.toString('hex') }", 'delegate: String(au.address).toLowerCase() }']] }, + ]; + })(); + for (const c of ethServit) { + await incearca(`j. textul endpoint-ului Ethereum: ${c.nume} cu "safe" -> raportul e scris si textul nu ajunge necitat in el; PLANTAREA INVERSA il lasa necitat, poarta de limbaj refuza raportul si verificarea iese ROSIE`, async () => { + const run = async (dir) => { const m = await porneste('eth', path.join(FIX, 'eth-rpc.json'), ['--suprascrie', c.fx]); const x = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('eth-servit-' + c.nume.replace(/\W+/g, '-'), [c.adresa]), '--eth-rpc', m.url, '--eth-blocks', `${ETHV.bloc}..${ETHV.bloc}`], tinte: m.tinta }); m.opreste(); return x; }; + const f = await run(AICI); + if (!c.bun(f)) return [false, `unealta a dat cod ${f.cod}: ${(f.raport ? detaliu(f.raport, c.adresa) : f.err).slice(0, 120)}`]; + const d = copie('eth-servit-' + c.nume.replace(/\W+/g, '-').toLowerCase().slice(0, 20)); + for (const [fis, vechi, nou] of c.planta) { const n = planteaza(path.join(d, fis), vechi, nou); if (n !== 1) return `tinta plantarii in ${fis} apare de ${n} ori`; } + const p = await run(d); + return [!c.bun(p) && p.cod === 1 && /REFUSED \(language\)/.test(p.err), `${detaliu(f.raport, c.adresa).slice(0, 90)} | copia plantata: cod ${p.cod} ${p.err.slice(0, 40)}`]; + }); + } + // ================================================================ k. runda 6 (revizia rundei 5, scratchpad c12rev6): varful tintei, + // scripturile-surori, mesajul TLS, cheltuirea din mempool numarata. Fiecare cu plantarea ei inversa (defectul pus inapoi intr-o copie) + const fisierSupra = (nume, raspunsuri) => { const f = path.join(T, nume + '.json'); fs.writeFileSync(f, JSON.stringify({ raspunsuri })); return f; }; + // k.1 MEDIU-1: o tinta RAMASA IN URMA lantului. Varful vechi e antetul REAL al blocului 969686 (2026-10-03T06:29:12Z), primul antet din + // lantul de antete validat prin P2P de urmaritorul C6 pe 2026-10-11 (dovezi-l1/ots-noi/btc/antete.bin), acelasi lant din care vine varful + // fixturilor (971000); hash-ul lui il recalculeaza unealta din octeti + const VARF_VECHI = { height: 969686, hash: '00000000000000000001cb826a16ccfa8ab913f5346f8c387cfe65c16629fee3', hex: '004066219a8c00261cf0e47cb6e04c184202657330567bcdaed10100000000000000000020ff2db82f76d9fcea70a32806a47904803eb88ea51794caddc65feea6264383b8a0c06ac51e02178b4b1801' }; + const varfSupra = (fel, v) => (fel === 'electrum' ? { 'blockchain.headers.subscribe': { height: v.height, hex: v.hex } } : { '/blocks/tip/height': String(v.height), ['/block-height/' + v.height]: v.hash, ['/block/' + v.hash + '/header']: v.hex }); + const LISTA_NECH = scrieLista('k1-necheltuit', [A.p2pkh_necheltuit]); + const ruleazaCu = async (dir, fel, supra, lista) => { const m = await porneste(fel, path.join(FIX, fel + '.json'), supra ? ['--suprascrie', supra] : []); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', lista, fel === 'electrum' ? '--electrum' : '--esplora', fel === 'electrum' ? m.tinta : m.url], tinte: m.tinta }); m.opreste(); return r; }; + const predicatVarf = (rProaspat, rVechi) => rProaspat.cod === 0 && eticheta(rProaspat.raport, A.p2pkh_necheltuit) === F_ && dovada(rProaspat.raport, A.p2pkh_necheltuit, 'history served up to height 971000 (tip header time 2026-10-11T22:53:11Z)') && rVechi.cod === 2 && nemasuratCu(rVechi.raport, A.p2pkh_necheltuit, 'target behind the chain: tip 969686 at 2026-10-03T06:29:12Z') && dovada(rVechi.raport, A.p2pkh_necheltuit, 'history served up to height 969686 (tip header time 2026-10-03T06:29:12Z)'); + await incearca('k. MEDIU-1: adresa P2PKH reala niciodata cheltuita, cu varful inregistrat (971000, 2026-10-11T22:53:11Z, in marja de 2 ore fata de sfarsitul zilei raportului) -> F care numeste pana unde merge istoricul; cu o tinta RAMASA IN URMA (varful real 969686, 2026-10-03) -> NEMASURAT "target behind the chain: tip 969686 at ...", pe Electrum si pe Esplora; PLANTAREA INVERSA (varful nejudecat) da F si iese ROSIE', async () => { + const rez = []; + for (const fel of ['electrum', 'esplora']) { const supra = fisierSupra('k1-vechi-' + fel, varfSupra(fel, VARF_VECHI)); rez.push({ fel, supra, r1: await ruleazaCu(AICI, fel, null, LISTA_NECH), r2: await ruleazaCu(AICI, fel, supra, LISTA_NECH) }); } + const det = rez.map((x) => `${x.fel}: ${detaliu(x.r1.raport, A.p2pkh_necheltuit).slice(0, 35)} / ${detaliu(x.r2.raport, A.p2pkh_necheltuit).slice(13, 80)}`).join(' | '); + if (!rez.every((x) => predicatVarf(x.r1, x.r2))) return [false, det]; + const d = copie('k1-varf'); const n = planteaza(path.join(d, 'clasifica.mjs'), 'else if (obs.tip.time * 1000 < ctx.referinta - MARJA_VARF_ORE * 3600 * 1000) r = nem(', 'else if (false) r = nem('); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await ruleazaCu(d, 'electrum', rez[0].supra, LISTA_NECH); + return [!predicatVarf(rez[0].r1, p) && eticheta(p.raport, A.p2pkh_necheltuit) === F_, `${det} | copia cu varful nejudecat: ${detaliu(p.raport, A.p2pkh_necheltuit).slice(0, 40)}`]; + }); + await incearca('k. MEDIU-1: un antet de varf cu UN octet schimbat (ora) nu mai e un antet (nu atinge dovada de lucru din campul lui bits) -> NEMASURAT; Esplora: un antet care nu se hashuieste la hash-ul pe care indexul il da pentru varf -> NEMASURAT; aici antetul e judecat numai fata de propriul lui camp bits (lantul caruia ii poate apartine, prin geneza si limita de dovada de lucru a acestuia, se judeca in l. MEDIU-A)', async () => { + const elV = JSON.parse(fs.readFileSync(path.join(FIX, 'electrum.json'), 'utf8')).raspunsuri['blockchain.headers.subscribe']; + const rau = Buffer.from(elV.hex, 'hex'); rau[68] ^= 1; + const r1 = await ruleazaCu(AICI, 'electrum', fisierSupra('k1-antet-rau', { 'blockchain.headers.subscribe': { height: elV.height, hex: rau.toString('hex') } }), LISTA_NECH); + const hashVarf = JSON.parse(fs.readFileSync(path.join(FIX, 'esplora.json'), 'utf8')).raspunsuri['/block-height/971000']; + const r2 = await ruleazaCu(AICI, 'esplora', fisierSupra('k1-antet-strain', { ['/block/' + hashVarf + '/header']: VARF_VECHI.hex }), LISTA_NECH); + return [r1.cod === 2 && nemasuratCu(r1.raport, A.p2pkh_necheltuit, 'is not a block header') && nemasuratCu(r1.raport, A.p2pkh_necheltuit, 'proof of work') && r2.cod === 2 && nemasuratCu(r2.raport, A.p2pkh_necheltuit, 'hashes to ' + VARF_VECHI.hash), `electrum: ${detaliu(r1.raport, A.p2pkh_necheltuit).slice(13, 110)} | esplora: ${detaliu(r2.raport, A.p2pkh_necheltuit).slice(13, 90)}`]; + }); + // k.2 MEDIU-2: aceeasi cheie in spatele mai multor tipuri de script. Cheia sintetica e dezvaluita NUMAI de cheltuirea adresei P2WPKH a + // ei; se cer adresa P2PKH a aceluiasi HASH160 si linia p2pk: a cheii. Surorile se citesc prin aceeasi tinta (Electrum: scripthash; + // Esplora: /scripthash/, fiindca unealta citeste o sora dupa script, nu dupa numele ei); prin Core, pe tranzactiile date + const sora = (() => { + const k = cheie('k2-sora'); const h = B.hash160(k.pub); const spkW = Buffer.concat([Buffer.from([0x00, 0x14]), h]); + const adresaW = B.segwitEncode('bc', 0, h), adresaP = b58check(0, h), intrareK = 'p2pk:' + B.hex(k.pub); + const f = finantare(spkW, 'k2-sora'); const s = cheltuire(f.id, Buffer.alloc(0), [SIG, k.pub]); + const shEs = B.hex(B.sha256(spkW)); + const stats = { scripthash: shEs, chain_stats: { funded_txo_count: 1, funded_txo_sum: 100000, spent_txo_count: 1, spent_txo_sum: 100000, tx_count: 2 }, mempool_stats: { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 } }; + return { adresaW, adresaP, intrareK, numeK: 'script:' + B.hex(spkW), f, s, lista: scrieLista('k2-sora', [adresaP, intrareK]), el: suprascriereElectrum('k2-sora-el', spkW, [{ ...f, height: 1 }, { ...s, height: 2 }]), + es: fisierSupra('k2-sora-es', { ['/scripthash/' + shEs]: stats, ['/scripthash/' + shEs + '/txs']: [{ ...s, height: 2 }, { ...f, height: 1 }].map(esploraTx) }) }; + })(); + const predicatSora = (r) => !!r.raport && [[sora.adresaP, sora.adresaW], [sora.intrareK, sora.numeK]].every(([a, numeSora]) => eticheta(r.raport, a) === E_ && dovada(r.raport, a, 'the same HASH160 of the key under another script type, P2WPKH ' + numeSora + ':') && dovada(r.raport, a, 'public key revealed in the witness')); + await incearca('k. MEDIU-2: cheia dezvaluita NUMAI la adresa-sora P2WPKH: adresa P2PKH a aceluiasi HASH160 si linia p2pk: a cheii ies E cu sora numita, prin Electrum, Esplora si Bitcoin Core (pe tranzactiile date); PLANTAREA INVERSA (surorile neinterogate) da F si iese ROSIE', async () => { + const r1 = await ruleazaCu(AICI, 'electrum', sora.el, sora.lista), r2 = await ruleazaCu(AICI, 'esplora', sora.es, sora.lista); + const r3 = await coreSintetic(AICI, 'k2-sora', { ['getrawtransaction:' + sora.f.id]: verbose(sora.f, blocSintetic('k2-f')), ['getrawtransaction:' + sora.s.id]: verbose(sora.s, blocSintetic('k2-s')) }, [sora.adresaP, sora.intrareK], [sora.f.id, sora.s.id]); + const det = [r1, r2, r3].map((r, i) => `${['electrum', 'esplora', 'core'][i]}: ${detaliu(r.raport, sora.adresaP).slice(0, 30)} / ${detaliu(r.raport, sora.intrareK).slice(0, 30)}`).join(' | '); + if (!(r1.cod === 0 && r2.cod === 0 && predicatSora(r1) && predicatSora(r2) && predicatSora(r3))) return [false, det]; + const d = copie('k2-surori'); const n = planteaza(path.join(d, 'bitcoin.mjs'), " if (t.type === 'p2pkh') h = t.hash; else if (t.type === 'p2wpkh') h = t.program; else if (t.type === 'p2pk') h = hash160(t.key); else return [];", ' return [];'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await ruleazaCu(d, 'electrum', sora.el, sora.lista); + return [!predicatSora(p) && eticheta(p.raport, sora.adresaP) === F_ && eticheta(p.raport, sora.intrareK) === F_, `${det} | copia fara surori: ${detaliu(p.raport, sora.adresaP).slice(0, 34)} / ${detaliu(p.raport, sora.intrareK).slice(0, 34)}`]; + }); + await incearca('k. MEDIU-2: o adresa-sora care NU se poate masura (eroare servita la istoricul ei) lasa adresa P2PKH (numai finantata, altfel F) NEMASURAT, cu sora numita; fara eroare -> F cu surorile citite numite (controlul pozitiv); PLANTAREA INVERSA (sora nemasurata ignorata) da F si iese ROSIE', async () => { + const k = cheie('k2-sora-rea'); const h = B.hash160(k.pub); const spkP = p2pkhSpk(h), spkW = Buffer.concat([Buffer.from([0x00, 0x14]), h]); const adresaP = b58check(0, h), adresaW = B.segwitEncode('bc', 0, h); + const fin = finantare(spkP, 'k2-sora-rea'); const lista = scrieLista('k2-sora-rea', [adresaP]); + const bun = suprascriereElectrum('k2-sora-buna', spkP, [{ ...fin, height: 1 }]); + const rea = fisierSupra('k2-sora-rea', { ...JSON.parse(fs.readFileSync(bun, 'utf8')).raspunsuri, ['blockchain.scripthash.get_history:' + B.scripthash(spkW)]: { _eroare: { code: -32000, message: 'mock: sibling history not served' } } }); + const predicat = (r) => r.cod === 2 && nemasuratCu(r.raport, adresaP, 'the sibling script P2WPKH ' + adresaW) && nemasuratCu(r.raport, adresaP, '[served: -32000 mock: sibling history not served]'); + const r1 = await ruleazaCu(AICI, 'electrum', rea, lista), r0 = await ruleazaCu(AICI, 'electrum', bun, lista); + const det = `sora rea: ${detaliu(r1.raport, adresaP).slice(13, 110)} | sora buna: ${detaliu(r0.raport, adresaP)}`; + if (!(predicat(r1) && r0.cod === 0 && eticheta(r0.raport, adresaP) === F_ && dovada(r0.raport, adresaP, 'sibling scripts of the same HASH160 read through the same target: P2WPKH ' + adresaW))) return [false, det]; + const d = copie('k2-sora-rea'); const n = planteaza(path.join(d, 'clasifica.mjs'), 'if (nem_) r = nem(', 'if (false) r = nem('); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await ruleazaCu(d, 'electrum', rea, lista); + return [!predicat(p) && eticheta(p.raport, adresaP) === F_, `${det} | copia care ignora sora nemasurata: ${detaliu(p.raport, adresaP)}`]; + }); + // k.3 MIC-2: textul unei erori TLS e al TINTEI (ERR_TLS_CERT_ALTNAME_INVALID numeste toate numele din certificatul ei). Un ascultator TLS + // al probei, pe 127.0.0.1, cu un certificat facut AICI (cheie EC noua la fiecare rulare, nimic in arbore) al carui SAN e un nume cu un + // cuvant interzis; certificatul e de incredere numai pentru procesul raportului (NODE_EXTRA_CA_CERTS), deci eroarea e cea a numelui + const der = (tag, ...p) => { const b = Buffer.concat(p); const n = b.length; return Buffer.concat([Buffer.from([tag]), n < 128 ? Buffer.from([n]) : n < 256 ? Buffer.from([0x81, n]) : Buffer.from([0x82, n >> 8, n & 255]), b]); }; + const oid = (s) => { const a = s.split('.').map(Number); const o = [40 * a[0] + a[1]]; for (const x of a.slice(2)) { const t = []; let v = x; do { t.unshift((v & 127) | (t.length ? 128 : 0)); v = Math.floor(v / 128); } while (v); o.push(...t); } return der(0x06, Buffer.from(o)); }; + const certificatProba = (san) => { + const { publicKey, privateKey } = crypto.generateKeyPairSync('ec', { namedCurve: 'prime256v1' }); + const seq = (...p) => der(0x30, ...p); const alg = seq(oid('1.2.840.10045.4.3.2')); + const nume = seq(der(0x31, seq(oid('2.5.4.3'), der(0x0c, Buffer.from('aere-proba-expunere'))))); + const ext = der(0xa3, seq(seq(oid('2.5.29.19'), der(0x01, Buffer.from([0xff])), der(0x04, seq(der(0x01, Buffer.from([0xff]))))), seq(oid('2.5.29.17'), der(0x04, seq(der(0x82, Buffer.from(san))))))); + const serie = crypto.randomBytes(8); serie[0] = 0x11; + const tbs = seq(der(0xa0, der(0x02, Buffer.from([2]))), der(0x02, serie), alg, nume, seq(der(0x17, Buffer.from('260101000000Z')), der(0x17, Buffer.from('361231235959Z'))), nume, publicKey.export({ type: 'spki', format: 'der' }), ext); + const cert = seq(tbs, alg, der(0x03, Buffer.concat([Buffer.from([0]), crypto.sign('sha256', tbs, privateKey)]))); + return { pem: '-----BEGIN CERTIFICATE-----\n' + cert.toString('base64').match(/.{1,64}/g).join('\n') + '\n-----END CERTIFICATE-----\n', cheie: privateKey.export({ type: 'pkcs8', format: 'pem' }) }; + }; + await incearca('k. MIC-2: o tinta TLS (Electrum tls://, Esplora https://) al carei certificat numeste "secure.example": raportul e SCRIS (cod 2), adresa NEMASURAT cu mesajul TLS citat intreg [served: ...] (numele din certificat inauntru); PLANTAREA INVERSA (mesajul TLS necitat) e refuzata de poarta de limbaj si iese ROSIE', async () => { + const c = certificatProba('secure.example'); + if (!new crypto.X509Certificate(c.pem).subjectAltName.includes('secure.example')) return 'certificatul probei nu poarta SAN-ul cerut'; + const fCert = path.join(T, 'k3-cert.pem'); fs.writeFileSync(fCert, c.pem); + const tls = await import('node:tls'); let acceptate = 0; + const srv = tls.createServer({ cert: c.pem, key: c.cheie }, (s) => { s.on('error', () => {}); s.end(); }); + srv.on('connection', () => { acceptate++; }); srv.on('tlsClientError', () => {}); + await new Promise((res) => srv.listen(0, '127.0.0.1', res)); const port = srv.address().port; + const lista = scrieLista('k3-tls', [A.p2pkh_necheltuit]); + const env = { NODE_EXTRA_CA_CERTS: fCert, AERE_EXPUNERE_TIMEOUT_MS: '5000' }; + const caz = (dir, fel) => ruleazaAsincron({ dir, args: ['--mod', '2', '--adrese', lista, fel === 'electrum' ? '--electrum' : '--esplora', (fel === 'electrum' ? 'tls://localhost:' : 'https://localhost:') + port], tinte: 'localhost:' + port, env }); + const bun = (r) => r.cod === 2 && r.scris && nemasuratCu(r.raport, A.p2pkh_necheltuit, 'ERR_TLS_CERT_ALTNAME_INVALID [served: ') && nemasuratCu(r.raport, A.p2pkh_necheltuit, 'secure.example'); + try { + const r1 = await caz(AICI, 'electrum'), r2 = await caz(AICI, 'esplora'); + const det = `electrum: cod ${r1.cod} ${(r1.raport ? detaliu(r1.raport, A.p2pkh_necheltuit) : r1.err).slice(13, 110)} | esplora: cod ${r2.cod}`; + if (!(bun(r1) && bun(r2) && acceptate >= 2)) return [false, det + ` | conexiuni acceptate ${acceptate}`]; + const d = copie('k3-tls'); const n = planteaza(path.join(d, 'adaptoare.mjs'), "(eroareTls(e) ? e.code + ' ' + servit(e.message) :", "(false ? '' :"); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await caz(d, 'electrum'); + return [!bun(p) && p.cod === 1 && /REFUSED \(language\)/.test(p.err), `${det} | copia cu mesajul necitat: cod ${p.cod} ${p.err.slice(0, 40)}`]; + } finally { srv.close(); } + }); + // k.4 MIC-3: indexul numara in mempool o cheltuire a adresei pe care pagina NU o poarta, dar pagina poarta ALTA tranzactie din mempool a + // adresei (finantarea). Regula: numaratoarea se compara cu intrarile neconfirmate servite care CHELTUIE adresa (aici 0) + const mpl = (() => { + const k = cheie('k4-mempool'); const h = B.hash160(k.pub); const adresa = b58check(0, h); const f = finantare(p2pkhSpk(h), 'k4-mempool'); + const stats = (n) => ({ address: adresa, chain_stats: { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 }, mempool_stats: { funded_txo_count: 1, funded_txo_sum: 100000, spent_txo_count: n, spent_txo_sum: 0, tx_count: 1 + n } }); + const fx = (nume, n) => fisierSupra(nume, { ['/address/' + adresa]: stats(n), ['/address/' + adresa + '/txs']: [esploraTx({ ...f, height: 0 })] }); + return { adresa, lista: scrieLista('k4-mempool', [adresa]), a: fx('k4-a', 1), zero: fx('k4-zero', 0) }; + })(); + const predicatMempool = (r) => r.cod === 2 && nemasuratCu(r.raport, mpl.adresa, 'mempool_stats') && nemasuratCu(r.raport, mpl.adresa, 'carried 0 unconfirmed spend(s)'); + await incearca('k. MIC-3: Esplora numara in mempool o cheltuire a adresei pe care pagina nu o poarta, langa ALTA tranzactie din mempool a adresei pe care o poarta (finantarea) -> NEMASURAT ("mempool_stats ... carried 0 unconfirmed spend(s)"); aceeasi pagina cu numaratoarea 0 -> F (controlul pozitiv); PLANTAREA INVERSA (regula veche: numai o pagina fara mempool) da F si iese ROSIE', async () => { + const r1 = await ruleazaCu(AICI, 'esplora', mpl.a, mpl.lista), r0 = await ruleazaCu(AICI, 'esplora', mpl.zero, mpl.lista); + const det = `numarata 1: ${detaliu(r1.raport, mpl.adresa).slice(13, 120)} | numarata 0: ${detaliu(r0.raport, mpl.adresa)}`; + if (!(predicatMempool(r1) && r0.cod === 0 && eticheta(r0.raport, mpl.adresa) === F_)) return [false, det]; + const d = copie('k4-mempool'); const n = planteaza(path.join(d, 'adaptoare.mjs'), 'obs.mempoolSpendNotServed = obs.mempoolSpendsCounted > obs.unconfirmedSpends;', 'obs.mempoolSpendNotServed = obs.mempoolSpendsCounted > 0 && neconf.length === 0;'); + // din runda 7 tine si plasa tranzactiilor numarate in mempool (tx_count 2, pagina poarta 1): plantarea o scoate si pe ea, ca regula + // cheltuirilor sa fie aratata singura + const n2 = planteaza(path.join(d, 'clasifica.mjs'), PLASA_TX_MEMPOOL, 'if (false) return nem('); + if (n !== 1 || n2 !== 1) return `tinta plantarii apare de ${n} / ${n2} ori`; + const p = await ruleazaCu(d, 'esplora', mpl.a, mpl.lista); + return [!predicatMempool(p) && eticheta(p.raport, mpl.adresa) === F_, `${det} | copia cu regula veche: ${detaliu(p.raport, mpl.adresa).slice(0, 40)}`]; + }); + + // ================================================================ l. runda 7 (revizia rundei 6, scratchpad c12rev7): lantul pe care il + // serveste tinta (MEDIU-A), capul unui endpoint Ethereum (MEDIU-B), data raportului (MEDIU-C), surorile unei linii p2pk: (MIC-D), + // numaratorile din mempool ale unui index (MIC-E). Fiecare cu plantarea ei inversa (defectul pus inapoi intr-o copie) + // tintele plantarilor: sirurile EXACTE din unealta (o plantare care nu-si gaseste tinta e STRICAT) + const PLANTA_GENEZA = 'if (!R || !permise.includes(retea)) return'; + const PLANTA_LIMITA = 'if (obs.tip && (tintaVarf === null || tintaVarf > R.limita)) return {'; + const PLANTA_CAP_ETH = 'else if (obs.head.time * 1000 < ctx.referinta - MARJA_CAP_ETH_MIN * 60 * 1000) r = nem('; + const PLANTA_SYNC_ETH = 'if (obs.syncing) r = nem('; + const PLANTA_DATA = 'if (timp * 1000 > ctx.referinta + MARJA_VARF_ORE * 3600 * 1000) return'; + const PLANTA_BLOCKTIME = 'if (obs.blocktimeLipsa) return numaiTinta('; + const PLANTA_IESIRI_MEMPOOL = 'if (tipExpus && !outs.length && obs.mempoolOutputNotServed) return nem('; + // o ora PROASPATA fata de referinta fixa a probei (sfarsitul zilei DATA, 2026-10-12T00:00:00Z): 30 de minute inainte, in marja de 2 ore + const ORA_PROASPATA = Date.parse('2026-10-11T23:30:00Z') / 1000; + // un antet care atinge dovada de lucru a PROPRIULUI camp bits; prev / merkle din etichete AERE-SINTETIC (bits regtest: ~2 incercari) + const mineaza = (bits, timp, eticheta, inaltime) => { + const b = Buffer.alloc(80); b.writeInt32LE(0x20000000, 0); crypto.createHash('sha256').update('AERE-SINTETIC prev ' + eticheta).digest().copy(b, 4); crypto.createHash('sha256').update('AERE-SINTETIC merkle ' + eticheta).digest().copy(b, 36); + b.writeUInt32LE(timp >>> 0, 68); b.writeUInt32LE(bits >>> 0, 72); const T_ = B.tintaDinBits(bits); + for (let nonce = 0; nonce < 1e7; nonce++) { b.writeUInt32LE(nonce, 76); const h = B.hex(Buffer.from(B.sha256d(b)).reverse()); if (BigInt('0x' + h) <= T_) return { height: inaltime, hash: h, hex: b.toString('hex') }; } + throw new Error('nu s-a gasit un nonce pentru ' + eticheta); + }; + const VARF_REGTEST = mineaza(0x207fffff, ORA_PROASPATA, 'l-regtest', 300); + // antetul signet (bits 0x1e0377ae, dificultatea de pornire a signet-ului) e minat O DATA, nu la fiecare rulare (cateva milioane de + // incercari): scratchpad c12r8/mineaza-signet.mjs, ora 2026-10-11T23:30:00Z, prev / merkle din etichete AERE-SINTETIC c12r8. Unealta + // ii recalculeaza hash-ul si dovada de lucru din octeti; proba cere aici ca el sa fie chiar un antet al campului lui bits + const VARF_SIGNET = { height: 270000, hash: '000002fade4eff66ab627804c0864252d516aa7e125693450f49099498e9ed40', hex: '0000002095869373f6ad2d63ae26780334b4915914b365bd39306ae08bb035fd82b38cc839cbfd5104e99020ff8c55820b09dc2b99ade9450e483e54b23efdb4e0ab352ff81bcc6aae77031ee8d20900' }; + /** suprascrierea tintei: geneza (null = cea a fixturii, mainnet) si varful */ + const supraLant = (fel, geneza, v) => (fel === 'electrum' + ? { ...(geneza ? { 'server.features': { genesis_hash: geneza, hash_function: 'sha256', protocol_max: '1.4', protocol_min: '1.4' } } : {}), 'blockchain.headers.subscribe': { height: v.height, hex: v.hex } } + : { ...(geneza ? { '/block-height/0': geneza } : {}), '/blocks/tip/height': String(v.height), ['/block-height/' + v.height]: v.hash, ['/block/' + v.hash + '/header']: v.hex }); + // l.1 MEDIU-A: o tinta pe ALT LANT (regtest: geneza ei, un varf regtest proaspat). O adresa mainnet nu primeste nicio eticheta de + // acolo; o adresa regtest (bcrt1) prin aceeasi tinta e masurata (controlul pozitiv: garda nu inseamna "numai mainnet") + const ADR_REGTEST = B.segwitEncode('bcrt', 0, B.hash160(cheie('l1-regtest').pub)); + const LISTA_L1 = scrieLista('l1-lant', [A.p2pkh_necheltuit, ADR_REGTEST]); + const predicatGeneza = (r) => r.cod === 2 && nemasuratCu(r.raport, A.p2pkh_necheltuit, 'the target serves another chain: Bitcoin regtest, and this is a mainnet address') && eticheta(r.raport, ADR_REGTEST) === F_ && dovada(r.raport, ADR_REGTEST, 'chain served: Bitcoin regtest (genesis block ' + B.RETELE_BTC.regtest.geneza + '; the tip header states a target within its proof-of-work limit; no checkpoint is held for Bitcoin regtest'); + await incearca('l. MEDIU-A: o tinta care serveste ALT LANT (geneza regtest, varf regtest minat aici cu ora proaspata): adresa P2PKH mainnet iese NEMASURAT "the target serves another chain: Bitcoin regtest", iar o adresa regtest (bcrt1) prin aceeasi tinta e masurata (F cu lantul numit: controlul pozitiv), pe Electrum si pe Esplora; PLANTAREA INVERSA (geneza necomparata cu reteaua adresei) da F pe adresa mainnet si iese ROSIE', async () => { + const rez = []; for (const fel of ['electrum', 'esplora']) rez.push(await ruleazaCu(AICI, fel, fisierSupra('l1-' + fel, supraLant(fel, B.RETELE_BTC.regtest.geneza, VARF_REGTEST)), LISTA_L1)); + const det = rez.map((r, i) => `${['electrum', 'esplora'][i]}: ${detaliu(r.raport, A.p2pkh_necheltuit).slice(13, 95)} / bcrt1: ${eticheta(r.raport, ADR_REGTEST)}`).join(' | '); + if (!rez.every(predicatGeneza)) return [false, det]; + const d = copie('l1-geneza'); const n = planteaza(path.join(d, 'clasifica.mjs'), PLANTA_GENEZA, 'if (!R) return'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await ruleazaCu(d, 'electrum', fisierSupra('l1-electrum-inv', supraLant('electrum', B.RETELE_BTC.regtest.geneza, VARF_REGTEST)), LISTA_L1); + return [!predicatGeneza(p) && eticheta(p.raport, A.p2pkh_necheltuit) === F_, `${det} | copia fara comparatia genezei: ${detaliu(p.raport, A.p2pkh_necheltuit).slice(0, 40)}`]; + }); + // l.2 MEDIU-A: un varf SIGNET (bits 0x1e0377ae, minat) sub geneza mainnet a fixturii: niciun antet mainnet nu poate purta acel bits + // (limita de dovada de lucru a mainnet-ului e 0x00000000ff..ff). Cu geneza signet, acelasi varf e legitim pentru o adresa tb1, iar o + // linie p2pk: (fara retea) se citeste numai pe mainnet + const ADR_TB = B.segwitEncode('tb', 0, B.hash160(cheie('l2-signet').pub)); + const LISTA_L2 = scrieLista('l2-mainnet', [A.p2pkh_necheltuit, A.p2pk]), LISTA_L2_TB = scrieLista('l2-signet', [ADR_TB, A.p2pk]); + const predicatLimita = (r) => r.cod === 2 && [A.p2pkh_necheltuit, A.p2pk].every((a) => nemasuratCu(r.raport, a, 'the target serves another chain: the tip header it serves (height 270000, bits 0x1e0377ae) states a proof-of-work target above the limit of Bitcoin mainnet')); + const predicatSignet = (r) => eticheta(r.raport, ADR_TB) === F_ && dovada(r.raport, ADR_TB, 'chain served: Bitcoin signet (genesis block ' + B.RETELE_BTC.signet.geneza + '; the tip header states a target within its proof-of-work limit; no checkpoint is held for Bitcoin signet') && nemasuratCu(r.raport, A.p2pk, 'the target serves another chain: Bitcoin signet, and this is a p2pk: line, which this tool reads on Bitcoin mainnet only'); + await incearca('l. MEDIU-A: varf SIGNET (minat, bits 0x1e0377ae, ora proaspata) sub geneza MAINNET: adresa P2PKH si linia p2pk: ies NEMASURAT ("above the limit of Bitcoin mainnet"), pe Electrum si pe Esplora; acelasi varf sub geneza signet: adresa tb1 e masurata (F, controlul pozitiv), linia p2pk: NEMASURAT ("on Bitcoin mainnet only"); PLANTAREA INVERSA (limita de dovada de lucru nejudecata) da F pe adresa mainnet si iese ROSIE', async () => { + const a = B.antetBloc(VARF_SIGNET.hex); if (a.eroare || a.hash !== VARF_SIGNET.hash || a.bits !== 0x1e0377ae || a.time !== ORA_PROASPATA) return `antetul signet al probei nu e ce spune (${a.eroare || a.hash.slice(0, 16)})`; + const rez = []; for (const fel of ['electrum', 'esplora']) rez.push(await ruleazaCu(AICI, fel, fisierSupra('l2-' + fel, supraLant(fel, null, VARF_SIGNET)), LISTA_L2)); + const rTb = await ruleazaCu(AICI, 'electrum', fisierSupra('l2-tb', supraLant('electrum', B.RETELE_BTC.signet.geneza, VARF_SIGNET)), LISTA_L2_TB); + const det = rez.map((r, i) => `${['electrum', 'esplora'][i]}: ${detaliu(r.raport, A.p2pkh_necheltuit).slice(13, 70)}..`).join(' | ') + ` | geneza signet: tb1 ${eticheta(rTb.raport, ADR_TB)}, p2pk: ${detaliu(rTb.raport, A.p2pk).slice(13, 80)}`; + if (!(rez.every(predicatLimita) && predicatSignet(rTb))) return [false, det]; + // din runda 8 tine si regula punctului de control (varful signet, la 270000, e sub cel mai jos punct, 967680): plantarea o scoate si pe + // ea, ca limita de dovada de lucru sa fie aratata singura + const d = copie('l2-limita'); const n = planteaza(path.join(d, 'clasifica.mjs'), PLANTA_LIMITA, 'if (false) return {'), n2 = planteaza(path.join(d, 'clasifica.mjs'), 'if (c.sub !== undefined) return {', 'if (false) return {'); + if (n !== 1 || n2 !== 1) return `tinta plantarii apare de ${n} / ${n2} ori`; + const p = await ruleazaCu(d, 'electrum', fisierSupra('l2-electrum-inv', supraLant('electrum', null, VARF_SIGNET)), LISTA_L2); + return [!predicatLimita(p) && eticheta(p.raport, A.p2pkh_necheltuit) === F_, `${det} | copia fara limita: ${detaliu(p.raport, A.p2pkh_necheltuit).slice(0, 40)}`]; + }); + // l.3 MEDIU-B: capul unui endpoint Ethereum. Ramas in urma (capul la blocul 18.000.000, 2023-09-07; nonce 0 acolo) sau care spune ca se + // sincronizeaza (eth_syncing) -> NEMASURAT "endpoint behind the chain"; cu capul fixturii (2026-10-11T23:45:11Z, cea mai devreme ora pe + // care o poate purta blocul 26172585: _sursa.nota) -> F care numeste capul. Doua plantari inverse, fiecare pe garda ei + const CAP_VECHI = '0x112a880'; + const supraCapVechi = fisierSupra('l3-cap-vechi', { 'eth_blockNumber:[]': CAP_VECHI, ...stareEth([{ address: ETHV.primitor, nonce: 0, code: '0x' }], CAP_VECHI, '0x64fa4a17'), [`eth_getBlockByNumber:${JSON.stringify([CAP_VECHI, true])}`]: { number: CAP_VECHI, timestamp: '0x64fa4a17', hash: '0x' + '11'.repeat(32), transactions: [] } }); + const supraSync = fisierSupra('l3-sync', { 'eth_syncing:[]': { startingBlock: '0x0', currentBlock: '0x18f5ca9', highestBlock: '0x18f6000' } }); + const ruleazaEth = async (dir, supra, fereastra, extra = {}) => { const m = await porneste('eth', path.join(FIX, 'eth-rpc.json'), supra ? ['--suprascrie', supra] : []); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', scrieLista('l3-eth', [ETHV.primitor]), '--eth-rpc', m.url, '--eth-blocks', fereastra], tinte: m.tinta, ...extra }); m.opreste(); return r; }; + const FER = `${ETHV.bloc}..${ETHV.bloc}`; + const predicatCapVechi = (r) => r.cod === 2 && nemasuratCu(r.raport, ETHV.primitor, 'endpoint behind the chain: head block 18000000 at 2023-09-07T22:09:27Z, more than 30 minutes before'); + const predicatSync = (r) => r.cod === 2 && nemasuratCu(r.raport, ETHV.primitor, 'endpoint behind the chain: it reports that it is syncing (eth_syncing: current block 26172585, highest block 26173440'); + await incearca('l. MEDIU-B: un endpoint Ethereum RAMAS IN URMA (capul la blocul 18.000.000, 2023-09-07, nonce 0 acolo) sau care raporteaza ca se sincronizeaza (eth_syncing) -> NEMASURAT "endpoint behind the chain", nu F pe nonce 0; cu capul fixturii -> F care numeste capul si ora lui; PLANTARILE INVERSE (ora capului nejudecata; eth_syncing ignorat) dau F si ies ROSII', async () => { + const r0 = await ruleazaEth(AICI, null, FER), r1 = await ruleazaEth(AICI, supraCapVechi, '1'), r2 = await ruleazaEth(AICI, supraSync, FER); + const det = `capul fixturii: ${detaliu(r0.raport, ETHV.primitor)} | cap vechi: ${detaliu(r1.raport, ETHV.primitor).slice(13, 100)} | sync: ${detaliu(r2.raport, ETHV.primitor).slice(13, 90)}`; + if (!(r0.cod === 0 && eticheta(r0.raport, ETHV.primitor) === F_ && dovada(r0.raport, ETHV.primitor, 'head block 26172585 served by the endpoint (block time 2026-10-11T23:45:11Z)') && predicatCapVechi(r1) && predicatSync(r2))) return [false, det]; + const d1 = copie('l3-cap'), d2 = copie('l3-sync'); + const n1 = planteaza(path.join(d1, 'clasifica.mjs'), PLANTA_CAP_ETH, 'else if (false) r = nem('), n2 = planteaza(path.join(d2, 'clasifica.mjs'), PLANTA_SYNC_ETH, 'if (false) r = nem('); + if (n1 !== 1 || n2 !== 1) return `tinta plantarii apare de ${n1} / ${n2} ori`; + const p1 = await ruleazaEth(d1, supraCapVechi, '1'), p2 = await ruleazaEth(d2, supraSync, FER); + return [!predicatCapVechi(p1) && eticheta(p1.raport, ETHV.primitor) === F_ && !predicatSync(p2) && eticheta(p2.raport, ETHV.primitor) === F_, `${det} | copia cu ora capului nejudecata: ${eticheta(p1.raport, ETHV.primitor)}; copia fara eth_syncing: ${eticheta(p2.raport, ETHV.primitor)}`]; + }); + // l.4 MEDIU-C: data raportului. O zi care NU a venit e refuzata (fara raport si fara plic cu createdAt in viitor); o zi din TRECUT nu + // poate purta nicio eticheta sprijinita pe ce a servit tinta dupa ea (varful / capul / blocul unei tranzactii date / scanul Core, citit la + // rulare). Prin Core, intr-un raport datat azi, un bloc cu ora la 400 de zile in viitor si un bloc servit fara ora -> NEMASURAT + const ZI_VIITOARE = '2030-01-01', ZI_TRECUTA = '2012-01-01'; + const predicatViitor = (r) => r.cod === 1 && !r.scris && /REFUSED \(usage\)/.test(r.err) && /after the day of this run/.test(r.err); + await incearca('l. MEDIU-C: --data intr-o zi care nu a venit (2030-01-01) e REFUZATA (cod 1, nimic scris: niciun raport, niciun plic AIP-23 cu createdAt in viitor), in modul 1 si in modul 2; PLANTAREA INVERSA (refuzul scos) scrie raportul si plicul si iese ROSIE', async () => { + const r1 = ruleaza({ args: ['--mod', '1', '--adrese', LISTA_TOT], data: ZI_VIITOARE }); + const r2 = await ruleazaEth(AICI, null, FER, { data: ZI_VIITOARE }); + const det = `modul 1: cod ${r1.cod} ${r1.err.slice(0, 60)} | eth: cod ${r2.cod}`; + if (!(predicatViitor(r1) && predicatViitor(r2))) return [false, det]; + const d = copie('l4-viitor'); const n = planteaza(path.join(d, 'raport.mjs'), 'if (date > azi) throw new Refuz(', 'if (false) throw new Refuz('); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = ruleaza({ dir: d, args: ['--mod', '1', '--adrese', LISTA_TOT], data: ZI_VIITOARE }); + return [!predicatViitor(p) && p.cod === 0 && p.scris, `${det} | copia fara refuz: cod ${p.cod}, scris ${p.scris}`]; + }); + const txidsFix = Object.keys(bitcoindFix.raspunsuri).filter((k) => k.startsWith('getrawtransaction:')).map((k) => k.slice('getrawtransaction:'.length)); + const ruleazaTrecut = async (dir, fel) => { + const fx = { electrum: 'electrum.json', esplora: 'esplora.json', bitcoind: 'bitcoind.json', 'bitcoind-fara': 'bitcoind.json', eth: 'eth-rpc.json' }[fel]; + const m = await porneste(fel.startsWith('bitcoind') ? 'bitcoind' : fel, path.join(FIX, fx)); + const args = fel === 'eth' ? ['--mod', '2', '--adrese', LISTA_ETH, '--eth-rpc', m.url, '--eth-blocks', FER] : ['--mod', '2', '--adrese', LISTA_BTC, ...(fel === 'electrum' ? ['--electrum', m.tinta] : fel === 'esplora' ? ['--esplora', m.url] : ['--bitcoind', m.url, ...(fel === 'bitcoind' ? ['--txids', scrieLista('l4-txids', txidsFix)] : [])])]; + const r = ruleaza({ dir, args, tinte: m.tinta, data: ZI_TRECUTA }); m.opreste(); return r; + }; + const predicatTrecut = (r) => r.cod === 2 && !!r.raport && r.raport.addresses.length > 0 && r.raport.addresses.every((a) => a.unmeasured && /serves blocks after the report date/.test(a.unmeasured)) && r.raport.summary.exposed === 0 && r.raport.summary.noOnChainEvidence === 0; + await incearca('l. MEDIU-C: --data intr-o zi din TRECUT (2012-01-01): Electrum si Esplora (varful din 2026), Ethereum (capul din 2026), Bitcoin Core cu --txids (blocuri din 2026) si FARA (scanul, citit la rulare) dau NEMASURAT "serves blocks after the report date" pe FIECARE adresa, si pe cele care altfel ies E; PLANTAREA INVERSA (data nejudecata) da E / F si iese ROSIE', async () => { + const feluri = ['electrum', 'esplora', 'eth', 'bitcoind', 'bitcoind-fara']; + const rez = []; for (const fel of feluri) rez.push(await ruleazaTrecut(AICI, fel)); + const det = rez.map((r, i) => `${feluri[i]}: cod ${r.cod} ${r.raport ? r.raport.summary.verdict.replace(/address\(es\), /, '').slice(0, 60) : r.err.slice(0, 40)}`).join(' | '); + if (!rez.every(predicatTrecut)) return [false, det + ' | ' + (rez.find((r) => !predicatTrecut(r)) && rez.find((r) => !predicatTrecut(r)).raport ? detaliu(rez.find((r) => !predicatTrecut(r)).raport, rez.find((r) => !predicatTrecut(r)).raport.addresses[0].input).slice(0, 100) : '')]; + const d = copie('l4-trecut'); const n = planteaza(path.join(d, 'clasifica.mjs'), PLANTA_DATA, 'if (false) return'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await ruleazaTrecut(d, 'electrum'); + return [!predicatTrecut(p) && !!p.raport && p.raport.summary.exposed > 0, `${det} | copia cu data nejudecata (electrum): ${p.raport ? p.raport.summary.verdict : p.err.slice(0, 60)}`]; + }); + // prin Core, intr-un raport datat AZI: cheltuirea care dezvaluie cheia e intr-un bloc al lantului activ cu ora la 400 de zile in + // viitor (mainnet nu primeste un antet cu peste 2 ore in viitor), sau servita fara ora blocului + const coreTimp = (() => { + const k = cheie('l4-core-timp'); const h = B.hash160(k.pub); const spk = p2pkhSpk(h); const adresa = b58check(0, h); + const f = finantare(spk, 'l4-core-timp'); const s = cheltuire(f.id, Buffer.concat([push(SIG), push(k.pub)]), []); + const baza = { ['scantxoutset:' + adresa]: { success: true, unspents: [] }, ['getrawtransaction:' + f.id]: verbose(f, blocSintetic('l4-f')) }; + const cu = (bt) => ({ ...baza, ['getrawtransaction:' + s.id]: verbose(s, blocSintetic('l4-s'), 1, bt) }); + return { adresa, ids: [f.id, s.id], s, bun: cu(1791753450), viitor: cu(Math.floor(Date.now() / 1000) + 400 * 86400), faraOra: cu(null) }; + })(); + await incearca('l. MEDIU-C: Bitcoin Core intr-un raport datat AZI: cheltuirea care dezvaluie cheia intr-un bloc cu ora la 400 de zile in viitor -> NEMASURAT "serves blocks after the report date: the block of transaction ..."; cu ora blocului in trecut -> E (controlul pozitiv)', async () => { + const r0 = await coreSintetic(AICI, 'l4-bun', coreTimp.bun, [coreTimp.adresa], coreTimp.ids), r1 = await coreSintetic(AICI, 'l4-viitor', coreTimp.viitor, [coreTimp.adresa], coreTimp.ids); + return [r0.cod === 0 && eticheta(r0.raport, coreTimp.adresa) === E_ && r1.cod === 2 && nemasuratCu(r1.raport, coreTimp.adresa, 'the target serves blocks after the report date: the block of transaction ' + coreTimp.s.id + ' given with --txids carries the time'), `ora in trecut: ${detaliu(r0.raport, coreTimp.adresa)} | ora in viitor: ${detaliu(r1.raport, coreTimp.adresa).slice(13, 120)}`]; + }); + await incearca('l. MEDIU-C: Bitcoin Core: o tranzactie data, pe lantul activ, servita FARA ora blocului (blocktime) -> NEMASURAT numit (nu poate fi asezata fata de data raportului), nu E; PLANTAREA INVERSA (lipsa orei ignorata) da E si iese ROSIE', async () => { + const pred = (r) => r.cod === 2 && nemasuratCu(r.raport, coreTimp.adresa, 'without the time of that block (blocktime)'); + const r1 = await coreSintetic(AICI, 'l4-fara-ora', coreTimp.faraOra, [coreTimp.adresa], coreTimp.ids); + if (!pred(r1)) return [false, detaliu(r1.raport, coreTimp.adresa)]; + const d = copie('l4-fara-ora'); const n = planteaza(path.join(d, 'clasifica.mjs'), PLANTA_BLOCKTIME, 'if (false) return numaiTinta('); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await coreSintetic(d, 'l4-fara-ora-inv', coreTimp.faraOra, [coreTimp.adresa], coreTimp.ids); + return [!pred(p) && eticheta(p.raport, coreTimp.adresa) === E_, `${detaliu(r1.raport, coreTimp.adresa).slice(13, 110)} | copia care ignora lipsa orei: ${eticheta(p.raport, coreTimp.adresa)}`]; + }); + // l.5 MIC-D: o linie p2pk: si cheia ei in CEALALTA codificare / iesirea ei BIP-86. Trei chei sintetice, fiecare expusa NUMAI acolo: + // D1 P2PKH-ul formei necomprimate cheltuit (cheia necomprimata in scriptSig) pentru linia comprimata; D2 o iesire P2PK cu forma + // comprimata pentru linia necomprimata; D3 iesirea P2TR BIP-86 a cheii pentru linia comprimata. A patra cheie, fara istoric: F cu cele + // 12 surori citite numite, si randul N8 numeste numai ce nu se poate deriva + const ist = (() => { + const k1 = B.codificariCheie(cheie('l5-d1').pub), k2 = B.codificariCheie(cheie('l5-d2').pub), k3 = B.codificariCheie(cheie('l5-d3').pub), k4 = B.codificariCheie(cheie('l5-f').pub); + const spk1 = p2pkhSpk(B.hash160(k1.uncompressed)), spk2 = Buffer.concat([push(k2.compressed), Buffer.from([0xac])]), spk3 = Buffer.concat([Buffer.from([0x51, 0x20]), B.cheieIesireBip86(k3.P)]); + const f1 = finantare(spk1, 'l5-d1'), s1 = cheltuire(f1.id, Buffer.concat([push(SIG), push(k1.uncompressed)]), []), f2 = finantare(spk2, 'l5-d2'), f3 = finantare(spk3, 'l5-d3'); + const linii = { d1: 'p2pk:' + B.hex(k1.compressed), d2: 'p2pk:' + B.hex(k2.uncompressed), d3: 'p2pk:' + B.hex(k3.compressed), f: 'p2pk:' + B.hex(k4.compressed) }; + const el = (spk, l) => { const r = { ['blockchain.scripthash.get_history:' + B.scripthash(spk)]: l.map((x) => ({ tx_hash: x.id, height: x.height })) }; for (const x of l) r['blockchain.transaction.get:' + x.id] = x.raw.toString('hex'); return r; }; + const es = (spk, l, chelt) => { const sh = B.hex(B.sha256(spk)); return { ['/scripthash/' + sh]: { scripthash: sh, chain_stats: { funded_txo_count: 1, funded_txo_sum: 100000, spent_txo_count: chelt, spent_txo_sum: 0, tx_count: l.length }, mempool_stats: { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 } }, ['/scripthash/' + sh + '/txs']: [...l].sort((a, b) => b.height - a.height).map(esploraTx) }; }; + return { spk1, spk2, spk3, linii, lista: scrieLista('l5-p2pk', Object.values(linii)), + el: fisierSupra('l5-el', { ...el(spk1, [{ ...f1, height: 900000 }, { ...s1, height: 900001 }]), ...el(spk2, [{ ...f2, height: 900002 }]), ...el(spk3, [{ ...f3, height: 900003 }]) }), + es: fisierSupra('l5-es', { ...es(spk1, [{ ...f1, height: 900000 }, { ...s1, height: 900001 }], 1), ...es(spk2, [{ ...f2, height: 900002 }], 0), ...es(spk3, [{ ...f3, height: 900003 }], 0) }) }; + })(); + const predicatP2pk = (r) => !!r.raport && eticheta(r.raport, ist.linii.d1) === E_ && dovada(r.raport, ist.linii.d1, 'the same key in its uncompressed encoding, under P2PKH script:' + B.hex(ist.spk1) + ': public key revealed in the scriptSig') + && eticheta(r.raport, ist.linii.d2) === E_ && dovada(r.raport, ist.linii.d2, 'the same key in its compressed encoding, under P2PK script:' + B.hex(ist.spk2) + ':') && dovada(r.raport, ist.linii.d2, 'P2PK output: the public key is the script') + && eticheta(r.raport, ist.linii.d3) === E_ && dovada(r.raport, ist.linii.d3, 'a P2TR output with no script tree (BIP-86) whose internal key is this key, P2TR script:' + B.hex(ist.spk3) + ':') && nevazut(r.raport, ist.linii.d3, /output key Q = P \+ t\*G .*not this key itself/) + && eticheta(r.raport, ist.linii.f) === F_ && (gaseste(r.raport, ist.linii.f).evidence.find((e) => e.startsWith('sibling scripts of the same key read through the same target')) || '').split(' confirmed transaction(s))').length - 1 === 12 + && nevazut(r.raport, ist.linii.f, /^the same key under another script type that cannot be derived from this input: a P2TR output whose key commits to a script tree, a P2SH or P2WSH script holding the key, and a bare-multisig output holding it/) && !gaseste(r.raport, ist.linii.f).notSeen.some((n) => /other encoding|a P2TR output or script/.test(n)); + await incearca('l. MIC-D: o linie p2pk: si aceeasi cheie in CEALALTA codificare (P2PKH-ul formei necomprimate cheltuit; o iesire P2PK comprimata) sau in iesirea ei P2TR BIP-86: E cu sora numita, prin Electrum si Esplora; o cheie fara istoric: F cu cele 12 surori citite numite, iar randul N8 numeste numai ce nu se poate deriva (P2TR cu arbore, P2SH/P2WSH, multisig); PLANTAREA INVERSA (numai HASH160 al codificarii date, ca inainte) da F si iese ROSIE', async () => { + const r1 = await ruleazaCu(AICI, 'electrum', ist.el, ist.lista), r2 = await ruleazaCu(AICI, 'esplora', ist.es, ist.lista); + const det = [r1, r2].map((r, i) => `${['electrum', 'esplora'][i]}: ${['d1', 'd2', 'd3', 'f'].map((k) => k + '=' + eticheta(r.raport, ist.linii[k]).slice(0, 8)).join(' ')}`).join(' | '); + if (!(predicatP2pk(r1) && predicatP2pk(r2))) return [false, det]; + const d = copie('l5-p2pk'); const n = planteaza(path.join(d, 'bitcoin.mjs'), "if (t.type === 'p2pk') {", 'if (false) {'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await ruleazaCu(d, 'electrum', ist.el, ist.lista); + return [!predicatP2pk(p) && ['d1', 'd2', 'd3'].every((k) => eticheta(p.raport, ist.linii[k]) === F_), `${det} | copia cu surorile de dinainte: ${['d1', 'd2', 'd3'].map((k) => k + '=' + eticheta(p.raport, ist.linii[k]).slice(0, 8)).join(' ')}`]; + }); + // l.6 MIC-E: indexul numara in mempool o IESIRE a unui P2TR fara iesiri pe lant, iar pagina nu o poarta; si numara o TRANZACTIE din + // mempool a unei adrese P2PKH pe care pagina nu o poarta. Fiecare cu controlul ei (pagina o poarta) si plantarea ei inversa + const mpE = (() => { + const prog = crypto.createHash('sha256').update('AERE-SINTETIC l6 p2tr').digest(); const adr = B.segwitEncode('bc', 1, prog); const f = finantare(Buffer.concat([Buffer.from([0x51, 0x20]), prog]), 'l6-p2tr'); + const k = cheie('l6-p2pkh'); const h = B.hash160(k.pub); const adrP = b58check(0, h); const fc = finantare(p2pkhSpk(h), 'l6-p2pkh-conf'), fm = finantare(p2pkhSpk(h), 'l6-p2pkh-mempool'); + const zero = { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 }, unu = { funded_txo_count: 1, funded_txo_sum: 100000, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 1 }; + const sTr = { address: adr, chain_stats: zero, mempool_stats: unu }, sP = { address: adrP, chain_stats: unu, mempool_stats: unu }; + return { adr, adrP, listaTr: scrieLista('l6-p2tr', [adr]), listaP: scrieLista('l6-p2pkh', [adrP]), + trNeservit: fisierSupra('l6-tr-neservit', { ['/address/' + adr]: sTr, ['/address/' + adr + '/txs']: [] }), trServit: fisierSupra('l6-tr-servit', { ['/address/' + adr]: sTr, ['/address/' + adr + '/txs']: [esploraTx({ ...f, height: 0 })] }), + pNeservit: fisierSupra('l6-p-neservit', { ['/address/' + adrP]: sP, ['/address/' + adrP + '/txs']: [esploraTx({ ...fc, height: 5 })] }), pServit: fisierSupra('l6-p-servit', { ['/address/' + adrP]: sP, ['/address/' + adrP + '/txs']: [esploraTx({ ...fm, height: 0 }), esploraTx({ ...fc, height: 5 })] }) }; + })(); + const predicatIesireMempool = (r) => r.cod === 2 && nemasuratCu(r.raport, mpE.adr, 'the target counts 1 output(s) of this script in its mempool (mempool_stats) and its transaction page carried 0 unconfirmed output(s) of it'); + await incearca('l. MIC-E: Esplora numara in mempool o IESIRE a unui P2TR fara iesiri pe lant (mempool_stats.funded_txo_count 1) pe care pagina nu o poarta -> NEMASURAT numit, nu F "no output exists yet"; pagina care o poarta -> NEMASURAT (iesirea din mempool, controlul); PLANTAREA INVERSA (regula iesirilor numarate scoasa, cu plasa tranzactiilor) da F si iese ROSIE', async () => { + const r1 = await ruleazaCu(AICI, 'esplora', mpE.trNeservit, mpE.listaTr), r0 = await ruleazaCu(AICI, 'esplora', mpE.trServit, mpE.listaTr); + const det = `nepurtata: ${detaliu(r1.raport, mpE.adr).slice(13, 110)} | purtata: ${detaliu(r0.raport, mpE.adr).slice(13, 80)}`; + if (!(predicatIesireMempool(r1) && r0.cod === 2 && nemasuratCu(r0.raport, mpE.adr, "output(s) of this script are in the target's mempool, unconfirmed"))) return [false, det]; + const d = copie('l6-iesiri'); const n = planteaza(path.join(d, 'clasifica.mjs'), PLANTA_IESIRI_MEMPOOL, 'if (false) return nem('), n2 = planteaza(path.join(d, 'clasifica.mjs'), PLASA_TX_MEMPOOL, 'if (false) return nem('); + if (n !== 1 || n2 !== 1) return `tinta plantarii apare de ${n} / ${n2} ori`; + const p = await ruleazaCu(d, 'esplora', mpE.trNeservit, mpE.listaTr); + return [!predicatIesireMempool(p) && eticheta(p.raport, mpE.adr) === F_, `${det} | copia fara regula: ${detaliu(p.raport, mpE.adr).slice(0, 40)}`]; + }); + const predicatTxMempool = (r) => r.cod === 2 && nemasuratCu(r.raport, mpE.adrP, 'the target counts 1 transaction(s) of this address in its mempool (mempool_stats) and its transaction page carried 0'); + await incearca('l. MIC-E: Esplora numara in mempool o TRANZACTIE a unei adrese P2PKH (mempool_stats.tx_count 1) pe care pagina nu o poarta -> NEMASURAT numit; pagina care o poarta (o plata primita) -> F (controlul pozitiv); PLANTAREA INVERSA (regula tranzactiilor numarate scoasa) da F si iese ROSIE', async () => { + const r1 = await ruleazaCu(AICI, 'esplora', mpE.pNeservit, mpE.listaP), r0 = await ruleazaCu(AICI, 'esplora', mpE.pServit, mpE.listaP); + const det = `nepurtata: ${detaliu(r1.raport, mpE.adrP).slice(13, 110)} | purtata: ${detaliu(r0.raport, mpE.adrP)}`; + if (!(predicatTxMempool(r1) && r0.cod === 0 && eticheta(r0.raport, mpE.adrP) === F_)) return [false, det]; + const d = copie('l6-tx'); const n = planteaza(path.join(d, 'clasifica.mjs'), PLASA_TX_MEMPOOL, 'if (false) return nem('); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await ruleazaCu(d, 'esplora', mpE.pNeservit, mpE.listaP); + return [!predicatTxMempool(p) && eticheta(p.raport, mpE.adrP) === F_, `${det} | copia fara regula: ${detaliu(p.raport, mpE.adrP).slice(0, 40)}`]; + }); + // l.7: fiecare verdict Electrum / Esplora numeste lantul servit (al doilea rand de dovada), pe vectorii reali + await incearca('l. MEDIU-A: pe vectorii reali (fixturile, geneza mainnet), fiecare verdict Electrum si Esplora numeste lantul: al doilea rand de dovada e "chain served: Bitcoin mainnet (genesis block 000000000019d668...; at height 969696 the block ..., the checkpoint this tool holds; ...; whether it is the chain with the most work is not verified)" (r8: punctul de control si ce nu se verifica)', async () => { + const rez = []; for (const fel of ['electrum', 'esplora']) rez.push(await ruleazaCu(AICI, fel, null, LISTA_BTC)); + const P_ = B.RETELE_BTC.mainnet.puncte[B.RETELE_BTC.mainnet.puncte.length - 1]; + const linie = 'chain served: Bitcoin mainnet (genesis block ' + B.RETELE_BTC.mainnet.geneza + '; at height ' + P_.height + ' the block ' + P_.hash + ', the checkpoint this tool holds; the tip header states a target within its proof-of-work limit; whether it is the chain with the most work is not verified)'; + return [rez.every((r) => r.cod === 0 && r.raport.addresses.length === 8 && r.raport.addresses.every((a) => a.evidence[1] === linie)), rez.map((r, i) => `${['electrum', 'esplora'][i]}: cod ${r.cod}, ${r.raport ? r.raport.addresses.filter((a) => a.evidence[1] === linie).length : 0}/8`).join(' | ')]; + }); + // ================================================================ m. runda 8 (revizia rundei 7, scratchpad c12rev8): starea Ethereum + // legata de capul judecat (MEDIU-1), un lant DESPARTIT de Bitcoin cu aceeasi geneza si limita (MEDIU-2), lantul nodului Bitcoin Core, + // numaratorile Esplora citite numai ca numere, iesirile numarate si tranzactiile care nu ating scriptul (MIC). Fiecare cu plantarea ei + // inversa (defectul pus inapoi intr-o copie) + const PLANTA_PUNCT = 'if (c.servit !== c.asteptat) return {'; + const PLANTA_SUB = 'if (c.sub !== undefined) return {'; + const PLANTA_ETH_LATEST = 'const st = await stareLaCap(rpc, a.address, laCap, radacina, varf);'; + const PLANTA_ETH_DOVADA = 'const cont = E.contDinDovada(radacina, adresa, dovada);'; + const PLANTA_ETH_COD = "if (E.keccak(Buffer.from(code.slice(2), 'hex')).toString('hex') !== cont.codeHash) return {"; + const PLANTA_CORE_LANT = 'obs.chain = o.lantCore;'; + const PLANTA_NUMARATOR = 'const numarator = (x) => (Number.isSafeInteger(x) && x >= 0 ? x : null);'; + const PLANTA_MEMPOOL_NECITIT = 'if (!revel.length && !expusPrinTip && obs.mempoolNecitit) return nem('; + const PLANTA_FINANTATE = 'if (!revel.length && !expusPrinTip && Number.isFinite(obs.fundedOutputsServed) && obs.fundedOutputsServed > outs.length) return nem('; + const PLANTA_NEATINSE = 'export function neatinse(t, txs) {'; + const PC = B.RETELE_BTC.mainnet.puncte, PC_SUS = PC[PC.length - 1]; + // m.1 MEDIU-1: o macheta Ethereum care raspunde ca un echilibrator cu o masina in urma. Fereastra e numai capul (servit fara tranzactii), + // ca o tranzactie gasita sa nu acopere eticheta. Cinci conturi, fiecare pe drumul lui; in fixtura, starea capului e trie-ul conturilor + // fixturii (sintetic, _sursa.nota) + const CAP_NR = Number(BigInt(CAP_ETH)); const TS_CAP = ethFixR[`eth_getBlockByNumber:${JSON.stringify([CAP_ETH, false])}`].timestamp; + const ALT1 = '0x' + '21'.repeat(20), ALT2 = '0x' + '22'.repeat(20); + const stareStraina = E.stareConturi([{ address: ALT1, nonce: 0, code: '0x' }, { address: '0x' + '23'.repeat(20), nonce: 3, code: '0x' }]); + const supraM1 = fisierSupra('m1-eth', { + [`eth_getBlockByNumber:${JSON.stringify([CAP_ETH, true])}`]: { number: CAP_ETH, timestamp: TS_CAP, hash: '0x' + '55'.repeat(32), transactions: [] }, + // expeditorul: masina B, ramasa in urma, nu are blocul capului ("header not found" la numarul lui, cum raspunde geth) si are la + // 'latest' starea ei veche (nonce 0, fara cod); la masina A contul a trimis o tranzactie (in starea fixturii, nonce 1) + [`eth_getProof:${JSON.stringify([ETHV.expeditor, [], CAP_ETH])}`]: { _eroare: { code: -32000, message: 'header not found' } }, + [`eth_getTransactionCount:${JSON.stringify([ETHV.expeditor, 'latest'])}`]: '0x0', [`eth_getCode:${JSON.stringify([ETHV.expeditor, 'latest'])}`]: '0x', + // contul fara iesiri: invers, la 'latest' o stare de DUPA cap (un designator EIP-7702 pus mai tarziu); la cap, dovada fixturii + [`eth_getTransactionCount:${JSON.stringify([ETHV.primitor, 'latest'])}`]: '0x1', [`eth_getCode:${JSON.stringify([ETHV.primitor, 'latest'])}`]: '0xef0100' + '11'.repeat(20), + // contractul: codul servit la cap NU se hashuieste la hash-ul de cod dovedit + [`eth_getCode:${JSON.stringify([ETHV.contract, CAP_ETH])}`]: '0x6060', + // ALT1: dovada ALTEI stari (nu duce la radacina capului), cu campurile servite langa ea spunand nonce 0, fara cod + [`eth_getProof:${JSON.stringify([ALT1, [], CAP_ETH])}`]: stareStraina.dovada(ALT1), + // ALT2: un furnizor fara eth_getProof + [`eth_getProof:${JSON.stringify([ALT2, [], CAP_ETH])}`]: { _eroare: { code: -32601, message: 'the method eth_getProof does not exist/is not available' } }, + }); + const LISTA_M1 = scrieLista('m1-eth', [ETHV.expeditor, ETHV.primitor, ETHV.contract, ETHV.autoritate7702, ALT1, ALT2]); + const ruleazaM1 = async (dir) => { const m = await porneste('eth', path.join(FIX, 'eth-rpc.json'), ['--suprascrie', supraM1]); const r = ruleaza({ dir, args: ['--mod', '2', '--adrese', LISTA_M1, '--eth-rpc', m.url, '--eth-blocks', '1'], tinte: m.tinta }); m.opreste(); return r; }; + const m1Masini = (r) => r.cod === 2 && nemasuratCu(r.raport, ETHV.expeditor, `did not serve the account proof (eth_getProof) at its head block ${CAP_NR}`) && nemasuratCu(r.raport, ETHV.expeditor, 'header not found'); + const m1Invers = (r) => eticheta(r.raport, ETHV.primitor) === F_ && dovada(r.raport, ETHV.primitor, `no code and nonce 0 at head block ${CAP_NR}, both proven under its state root`); + const m1Cod = (r) => nemasuratCu(r.raport, ETHV.contract, `the code served at the head block ${CAP_NR} does not hash to the code hash proven under the state root of that block`); + const m1Straina = (r) => nemasuratCu(r.raport, ALT1, `the account proof served at the head block ${CAP_NR} does not lead to the state root of that block`); + const m1FaraDovada = (r) => nemasuratCu(r.raport, ALT2, 'did not serve the account proof (eth_getProof)') && nemasuratCu(r.raport, ALT2, '-32601'); + const m1Pozitiv = (r) => eticheta(r.raport, ETHV.autoritate7702) === E_ && dovada(r.raport, ETHV.autoritate7702, `EIP-7702 delegation designator in the account code at head block ${CAP_NR}`); + await incearca('m. MEDIU-1 (r8): starea unui cont Ethereum se citeste NUMAI din eth_getProof la numarul capului, verificat fata de radacina de stare a blocului capului: o masina in urma ("header not found" la cap, nonce 0 la \'latest\') -> NEMASURAT, nu F; o stare de dupa cap la \'latest\' (designator EIP-7702) -> F pe starea capului, nu E; un cod care nu se hashuieste la hash-ul dovedit, o dovada a altei stari si un furnizor fara eth_getProof -> NEMASURAT numit; designatorul real -> E (controlul); PLANTARILE INVERSE (starea la \'latest\'; campurile servite in locul dovezii; codul nehashuit) ies ROSII', async () => { + const r = await ruleazaM1(AICI); + const det = ['expeditor', 'primitor', 'contract', 'autoritate7702'].map((k) => `${k}: ${detaliu(r.raport, ETHV[k]).slice(0, 70)}`).join(' | ') + ` | alt1: ${detaliu(r.raport, ALT1).slice(13, 80)} | alt2: ${detaliu(r.raport, ALT2).slice(13, 80)}`; + if (!(m1Masini(r) && m1Invers(r) && m1Cod(r) && m1Straina(r) && m1FaraDovada(r) && m1Pozitiv(r))) return [false, det]; + const d1 = copie('m1-latest'), d2 = copie('m1-campuri'), d3 = copie('m1-cod'); + const n1 = planteaza(path.join(d1, 'adaptoare.mjs'), PLANTA_ETH_LATEST, "const st = { code: await rpc('eth_getCode', [a.address, 'latest']), nonce: await rpc('eth_getTransactionCount', [a.address, 'latest']) };"); + const n2 = planteaza(path.join(d2, 'adaptoare.mjs'), PLANTA_ETH_DOVADA, 'const cont = { nonce: BigInt(dovada.nonce), codeHash: String(dovada.codeHash).slice(2), absent: false };'); + const n3 = planteaza(path.join(d3, 'adaptoare.mjs'), PLANTA_ETH_COD, 'if (false) return {'); + if (n1 !== 1 || n2 !== 1 || n3 !== 1) return `tintele plantarii apar de ${n1} / ${n2} / ${n3} ori`; + const p1 = await ruleazaM1(d1), p2 = await ruleazaM1(d2), p3 = await ruleazaM1(d3); + return [!m1Masini(p1) && eticheta(p1.raport, ETHV.expeditor) === F_ && !m1Invers(p1) && eticheta(p1.raport, ETHV.primitor) === E_ && !m1Straina(p2) && eticheta(p2.raport, ALT1) === F_ && !m1Cod(p3) && eticheta(p3.raport, ETHV.contract) === F_, + `${det} | starea la 'latest': expeditor ${eticheta(p1.raport, ETHV.expeditor)}, primitor ${eticheta(p1.raport, ETHV.primitor)}; campurile servite: alt1 ${eticheta(p2.raport, ALT1)}; codul nehashuit: contract ${eticheta(p3.raport, ETHV.contract)}`]; + }); + // m.2 MEDIU-2: un lant DESPARTIT de Bitcoin (Bitcoin Cash, Bitcoin SV, eCash: aceeasi geneza, aceeasi limita de dovada de lucru) serveste + // la inaltimea punctului de control ALT bloc. Antetul REAL al blocului 969686 (VARF_VECHI, din lantul validat de C6) tine locul blocului + // forkului acolo: un antet cu dovada de lucru buna si alt hash (un antet BCH real nu se poate produce offline; garda compara hash-ul de la + // acea inaltime cu punctul uneltei, deci orice alt bloc o pune la lucru la fel) + const supraFork = (fel) => (fel === 'electrum' ? { ['blockchain.block.header:' + PC_SUS.height]: VARF_VECHI.hex } : { ['/block-height/' + PC_SUS.height]: VARF_VECHI.hash }); + const MOTIV_FORK = `the target serves another chain: one that shares the genesis block of Bitcoin mainnet and split from it before height ${PC_SUS.height}, where it serves the block ${VARF_VECHI.hash} and Bitcoin mainnet has the block ${PC_SUS.hash}`; + const predicatFork = (r, adr = A.p2pkh_necheltuit) => r.cod === 2 && nemasuratCu(r.raport, adr, MOTIV_FORK) && dovada(r.raport, adr, `chain served: genesis block ${B.RETELE_BTC.mainnet.geneza}, that of Bitcoin mainnet, but at height ${PC_SUS.height}`) && !dovada(r.raport, adr, 'chain served: Bitcoin mainnet'); + await incearca('m. MEDIU-2 (r8): o tinta a unui lant DESPARTIT de Bitcoin (geneza mainnet, limita mainnet, varful real 971000) care serveste la inaltimea punctului de control 969696 ALT bloc -> NEMASURAT "serves another chain: ... split from it before height 969696", pe Electrum si pe Esplora, fara "chain served: Bitcoin mainnet"; varful real 969686 alege punctul 967680 si il numeste (controlul alegerii); PLANTAREA INVERSA (punctul necomparat) da F si iese ROSIE', async () => { + const rez = []; for (const fel of ['electrum', 'esplora']) rez.push(await ruleazaCu(AICI, fel, fisierSupra('m2-fork-' + fel, supraFork(fel)), LISTA_NECH)); + const rV = await ruleazaCu(AICI, 'electrum', fisierSupra('m2-vechi', varfSupra('electrum', VARF_VECHI)), LISTA_NECH); + const linieV = `at height ${PC[0].height} the block ${PC[0].hash}, the checkpoint this tool holds`; + const det = rez.map((r, i) => `${['electrum', 'esplora'][i]}: ${detaliu(r.raport, A.p2pkh_necheltuit).slice(13, 110)}`).join(' | ') + ` | varful 969686: punctul ${PC[0].height} numit: ${dovada(rV.raport, A.p2pkh_necheltuit, linieV)}`; + if (!(rez.every((r) => predicatFork(r)) && dovada(rV.raport, A.p2pkh_necheltuit, linieV) && nemasuratCu(rV.raport, A.p2pkh_necheltuit, 'target behind the chain'))) return [false, det]; + const d = copie('m2-punct'); const n = planteaza(path.join(d, 'clasifica.mjs'), PLANTA_PUNCT, 'if (false) return {'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await ruleazaCu(d, 'electrum', fisierSupra('m2-fork-inv', supraFork('electrum')), LISTA_NECH); + return [!predicatFork(p) && eticheta(p.raport, A.p2pkh_necheltuit) === F_, `${det} | copia cu punctul necomparat: ${detaliu(p.raport, A.p2pkh_necheltuit).slice(0, 40)}`]; + }); + // m.3 MEDIU-2: un lant care se termina SUB cel mai jos punct de control, cu geneza si limita mainnet si un varf proaspat: nimic nu poate + // deosebi acolo un lant despartit. Clasificarea direct, fara retea (un antet minat la dificultatea mainnet nu se poate face aici) + const obsSub = () => ({ outputs: [{ txid: 'aa'.repeat(32), vout: 0, height: 900000 }], inputs: [], spentOutputs: 0, txCount: 1, unconfirmedCount: 0, tip: { height: 960000, time: ORA_PROASPATA, hash: '00'.repeat(32), bits: 0x1d00ffff }, chain: { geneza: B.RETELE_BTC.mainnet.geneza, retea: 'mainnet', control: { sub: PC[0].height, inaltime: 960000 } }, siblings: [] }); + const CTX_FIX = { referinta: Date.parse('2026-10-12T00:00:00Z'), referintaText: 'the end of the report date 2026-10-11' }; + await incearca('m. MEDIU-2 (r8): un lant cu geneza si limita mainnet care se termina SUB cel mai jos punct de control (960000 < 967680), cu varful proaspat -> NEMASURAT "below height 967680, the lowest checkpoint" (clasificarea direct); PLANTAREA INVERSA (regula scoasa) da F si iese ROSIE', async () => { + const t = B.decodeazaIntrareBitcoin(A.p2pkh_necheltuit); const C0 = await import(pathToFileURL(path.join(AICI, 'clasifica.mjs')).href); + const pred = (x) => x.label === null && /below height 967680, the lowest checkpoint this tool holds for Bitcoin mainnet/.test(String(x.unmeasured)); + const r = C0.clasificaBitcoinObservat(t, obsSub(), 2, CTX_FIX); + if (!pred(r)) return [false, String(r.unmeasured || r.label)]; + const d = copie('m3-sub'); const n = planteaza(path.join(d, 'clasifica.mjs'), PLANTA_SUB, 'if (false) return {'); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const Cp = await import(pathToFileURL(path.join(d, 'clasifica.mjs')).href); + const p = Cp.clasificaBitcoinObservat(t, obsSub(), 2, CTX_FIX); + return [!pred(p) && p.label === F_, `${String(r.unmeasured).slice(13, 120)} | copia fara regula: ${p.label || p.unmeasured}`]; + }); + // m.4 MIC (r8): Bitcoin Core e intrebat ce lant serveste, O DATA pe raport (getblockhash 0, getblockcount, getblockhash la punctul de + // control). Linia p2pk: a cheii blocului 1 iese E din scan pe fixtura (iesirea necheltuita); pe un nod regtest sau al unui lant despartit, + // nicio eticheta + const LISTA_P2PK = [A.p2pk]; + const predCoreReg = (r) => r.cod === 2 && nemasuratCu(r.raport, A.p2pk, 'the target serves another chain: Bitcoin regtest, and this is a p2pk: line, which this tool reads on Bitcoin mainnet only'); + await incearca('m. MIC (r8): Bitcoin Core e intrebat ce lant serveste (o data pe raport): pe fixtura linia p2pk: iese E cu lantul numit (controlul); un nod REGTEST -> NEMASURAT "serves another chain: Bitcoin regtest"; un nod al unui lant despartit (alt bloc la 969696) -> NEMASURAT "split from it before height 969696"; PLANTAREA INVERSA (lantul nodului netrecut clasificarii) da E pe nodul regtest si iese ROSIE', async () => { + const r0 = await coreSintetic(AICI, 'm4-mainnet', {}, LISTA_P2PK, []), r1 = await coreSintetic(AICI, 'm4-regtest', { 'getblockhash:0': B.RETELE_BTC.regtest.geneza, getblockcount: 300 }, LISTA_P2PK, []), r2 = await coreSintetic(AICI, 'm4-fork', { ['getblockhash:' + PC_SUS.height]: VARF_VECHI.hash }, LISTA_P2PK, []); + const det = `fixtura: ${detaliu(r0.raport, A.p2pk).slice(0, 40)} | regtest: ${detaliu(r1.raport, A.p2pk).slice(13, 90)} | fork: ${detaliu(r2.raport, A.p2pk).slice(13, 90)}`; + if (!(eticheta(r0.raport, A.p2pk) === E_ && dovada(r0.raport, A.p2pk, `chain served: Bitcoin mainnet (genesis block ${B.RETELE_BTC.mainnet.geneza}; at height ${PC_SUS.height} the block ${PC_SUS.hash}, the checkpoint this tool holds;`) && predCoreReg(r1) && predicatFork(r2, A.p2pk))) return [false, det]; + const d = copie('m4-core'); const n = planteaza(path.join(d, 'adaptoare.mjs'), PLANTA_CORE_LANT, ''); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const p = await coreSintetic(d, 'm4-regtest-inv', { 'getblockhash:0': B.RETELE_BTC.regtest.geneza, getblockcount: 300 }, LISTA_P2PK, []); + return [!predCoreReg(p) && eticheta(p.raport, A.p2pk) === E_, `${det} | copia fara lantul nodului: ${detaliu(p.raport, A.p2pk).slice(0, 40)}`]; + }); + // m.5 MIC (r8): ce serveste un index Esplora se citeste ca NUMERE si se compara: o numaratoare null (Number(null) e 0), mempool_stats lipsa + // sau cu o numaratoare negativa, un index care numara mai multe iesiri decat poarta paginile, o tranzactie care nu atinge scriptul. Cinci + // adrese sintetice, fiecare finantata o data (altfel F), fiecare pe drumul ei + const mic = (() => { + const zero = { funded_txo_count: 0, funded_txo_sum: 0, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 }, unu = { funded_txo_count: 1, funded_txo_sum: 100000, spent_txo_count: 0, spent_txo_sum: 0, tx_count: 1 }; + const adr = (et) => { const k = cheie('m5-' + et); const h = B.hash160(k.pub); const a = b58check(0, h); const f = finantare(p2pkhSpk(h), 'm5-' + et); return { a, f }; }; + const nul = adr('nul'), memLipsa = adr('mem-lipsa'), memNeg = adr('mem-neg'), fin = adr('fin'); + const progTr = crypto.createHash('sha256').update('AERE-SINTETIC m5 p2tr').digest(); const tr = B.segwitEncode('bc', 1, progTr); + const straina = finantare(p2pkhSpk(B.hash160(cheie('m5-straina').pub)), 'm5-straina'); + const pag = (x, h = 7) => [esploraTx({ ...x.f, height: h })]; + const r = { + ['/address/' + nul.a]: { address: nul.a, chain_stats: { ...unu, tx_count: null, funded_txo_count: null, spent_txo_count: null }, mempool_stats: zero }, ['/address/' + nul.a + '/txs']: [], + ['/address/' + memLipsa.a]: { address: memLipsa.a, chain_stats: unu }, ['/address/' + memLipsa.a + '/txs']: pag(memLipsa), + ['/address/' + memNeg.a]: { address: memNeg.a, chain_stats: unu, mempool_stats: { ...zero, spent_txo_count: -1 } }, ['/address/' + memNeg.a + '/txs']: pag(memNeg), + ['/address/' + fin.a]: { address: fin.a, chain_stats: { ...unu, funded_txo_count: 2 }, mempool_stats: zero }, ['/address/' + fin.a + '/txs']: pag(fin), + ['/address/' + tr]: { address: tr, chain_stats: { ...zero, tx_count: 1 }, mempool_stats: zero }, ['/address/' + tr + '/txs']: [esploraTx({ ...straina, height: 7 })], + }; + return { nul: nul.a, memLipsa: memLipsa.a, memNeg: memNeg.a, fin: fin.a, tr, lista: scrieLista('m5-esplora', [nul.a, memLipsa.a, memNeg.a, fin.a, tr]), es: fisierSupra('m5-es', r), + // aceeasi tranzactie straina in istoricul Electrum al P2TR-ului (fara iesiri) + el: suprascriereElectrum('m5-el', Buffer.concat([Buffer.from([0x51, 0x20]), progTr]), [{ ...straina, height: 7 }]), listaTr: scrieLista('m5-tr', [tr]) }; + })(); + const p5 = { + nul: (r) => nemasuratCu(r.raport, mic.nul, 'served chain_stats counts that are not counts') && nemasuratCu(r.raport, mic.nul, '"tx_count":null'), + memLipsa: (r) => nemasuratCu(r.raport, mic.memLipsa, 'served no mempool counts for this script that are counts (mempool_stats: absent)'), + memNeg: (r) => nemasuratCu(r.raport, mic.memNeg, 'served no mempool counts for this script that are counts (mempool_stats: [served: '), + tr: (r) => nemasuratCu(r.raport, mic.tr, 'transaction(s) that neither pay it nor spend it'), + fin: (r) => nemasuratCu(r.raport, mic.fin, 'the target counts 2 output(s) to this script on chain (chain_stats) but its pages carried 1'), + }; + await incearca('m. MIC (r8): Esplora: o numaratoare null (chain_stats.tx_count, spent_txo_count), mempool_stats lipsa, o numaratoare mempool negativa, un index care numara 2 iesiri cand paginile poarta 1, o tranzactie in istoric care nu atinge scriptul (si prin Electrum) -> NEMASURAT numit fiecare, nu F; PLANTARILE INVERSE (Number(x); mempool necitit ignorat; iesirile numarate necomparate; tranzactiile straine acceptate) dau F si ies ROSII', async () => { + const r = await ruleazaCu(AICI, 'esplora', mic.es, mic.lista), re = await ruleazaCu(AICI, 'electrum', mic.el, mic.listaTr); + const det = Object.keys(p5).map((k) => `${k}: ${detaliu(r.raport, mic[k]).slice(13, 70)}`).join(' | ') + ` | electrum tr: ${detaliu(re.raport, mic.tr).slice(13, 70)}`; + if (!(r.cod === 2 && Object.values(p5).every((f) => f(r)) && p5.tr(re))) return [false, det]; + const plantari = [['nul', 'adaptoare.mjs', PLANTA_NUMARATOR, 'const numarator = (x) => Number(x);'], ['memLipsa', 'clasifica.mjs', PLANTA_MEMPOOL_NECITIT, 'if (false) return nem('], ['fin', 'clasifica.mjs', PLANTA_FINANTATE, 'if (false) return nem('], ['tr', 'adaptoare.mjs', PLANTA_NEATINSE, 'export function neatinse(t, txs) { return [];']]; + const rezP = []; + for (const [k, fis, vechi, nou] of plantari) { + const d = copie('m5-' + k.toLowerCase()); const n = planteaza(path.join(d, fis), vechi, nou); if (n !== 1) return `tinta plantarii ${k} apare de ${n} ori`; + const p = await ruleazaCu(d, 'esplora', mic.es, mic.lista); rezP.push([k, !p5[k](p) && eticheta(p.raport, mic[k]) === F_, eticheta(p.raport, mic[k])]); + } + return [rezP.every(([, ok]) => ok), `${det} | copiile plantate: ${rezP.map(([k, , e]) => k + '=' + e.slice(0, 8)).join(' ')}`]; + }); + }); + + // ================================================================ 6. textele publicabile + await pas('6. textele publicabile', async () => { + const fisiere = fs.readdirSync(AICI).filter((f) => /\.(mjs|md|json)$/.test(f) && f !== 'limbaj.mjs' && f !== 'proba-expunere.mjs'); + const hits = fisiere.flatMap((f) => verificaLimbaj(fs.readFileSync(path.join(AICI, f), 'utf8')).map((h) => f + ': ' + h.word)); + cer(`zero cuvinte interzise in cele ${fisiere.length} fisiere publicabile (limbaj.mjs, singurul care le numeste, si proba sunt excluse)`, da(fisiere.length >= 10 && hits.length === 0), hits.slice(0, 5).join('; ')); + // poarta de limbaj: cratima si spatiul nu mai ascund un cuvant, iar compusele se prind scrise in orice fel; negatiile uneltei raman curate + await incearca('poarta de limbaj prinde formele pe care lista de dinainte le scapa (cu cratima inainte sau dupa, cu spatiu sau lipite: post-quantum-safe, PQ-safe, quantum resistant, quantumproof, fully-protected, protecting, well-secured, guaranteeing, guarantor, trust-less, ...) si lasa curate negatiile uneltei ("it does not protect", "protection", "unsafe", "safeguard"); PLANTAREA INVERSA (tiparul si lista de dinainte, intr-o copie) le scapa si iese ROSIE', async () => { + const forme = ['post-quantum-safe', 'PQ-safe', 'quantum resistant', 'post-quantum-resistant', 'quantum proof', 'quantumproof', 'fully-protected', 'protecting', 'well-secured', 'guaranteeing', 'guarantor', 'trust-less', 'quantum-safe-signatures', 'stored safely', 'safer', 'safety', 'a secure address', 'securely', 'quantum-secure']; + const curate = ['It does not protect, move or recover any coins', 'post-quantum readiness', 'unsafe', 'safeguard', 'a quantum computer', 'no on-chain evidence of exposure', 'protection', 'an optional profile for national security systems']; + const judeca = (vl) => forme.filter((f) => vl(f).length === 0).concat(curate.filter((c) => vl(c).length > 0).map((c) => 'murdar: ' + c)); + const scapate = judeca(verificaLimbaj); + if (scapate.length) return [false, 'poarta: ' + scapate.join(', ')]; + const d = copie('limbaj-vechi'); + if (planteaza(path.join(d, 'limbaj.mjs'), 'const INTERZISE = [', "const INTERZISE = ['safe', 'protected', 'protects', 'secured', 'quantum-proof', 'quantum-resistant', 'unexposed', 'guarantee', 'guarantees', 'guaranteed', 'trustless', 'quantum-safe']; const INTERZISE_NOI = [") !== 1) return 'tinta plantarii (lista) nu apare o data'; + if (planteaza(path.join(d, 'limbaj.mjs'), "const RX = new RegExp('(?= 17 && !scapateVechi.some((x) => x.startsWith('murdar')), `poarta: 0 scapate din ${forme.length}, ${curate.length} negatii curate | copia de dinainte scapa ${scapateVechi.length}: ${scapateVechi.slice(0, 4).join(', ')}...`]; + }); + // numele interne se DERIVA din inventar (adrese si nume de gazde) si se asambleaza din bucati, ca acest fisier sa poata fi scanat si el + let gazde = [], nume = []; + try { const cfg = JSON.parse(fs.readFileSync(path.join(RAD, 'monitoring', 'config.json'), 'utf8')); const l = (cfg.hosts && cfg.hosts.list) || []; gazde = l.map((h) => h.ip).filter(Boolean); nume = l.map((h) => h.name).filter(Boolean); } catch { gazde = []; } + const interne = [...gazde, ...nume, ['rpc', '2'].join(''), ['aere', 'infra'].join('-'), ['/opt', 'aere'].join('/'), ['aere', 'architect'].join('_')]; + const tot = [...fs.readdirSync(AICI).filter((f) => /\.(mjs|md|txt|json)$/.test(f)).map((f) => path.join(AICI, f)), ...fs.readdirSync(FIX).map((f) => path.join(FIX, f))].map((p) => [path.basename(p), fs.readFileSync(p, 'utf8')]); + const scurgeri = tot.flatMap(([f, s]) => interne.filter((x) => s.includes(x)).map((x) => f + ': ' + x)); + if (!gazde.length) cer('nimic din operarea noastra in dosar si in fixturi (scanarea dupa inventar)', 'NEMASURAT', 'no inventory beside this tool (a copy outside the development tree): the names to look for are not known here'); + else cer(`nimic din operarea noastra in dosar si in fixturi (${gazde.length} adrese si ${nume.length} nume de gazde din inventar + nume interne, cautate in ${tot.length} fisiere, proba inclusa)`, da(gazde.length >= 9 && nume.length >= 9 && scurgeri.length === 0), scurgeri.join('; ')); + const surseUnealta = ['raport.mjs', 'clasifica.mjs', 'adaptoare.mjs', 'bitcoin.mjs', 'ethereum.mjs', 'limbaj.mjs', 'noble.mjs'].map((f) => fs.readFileSync(path.join(AICI, f), 'utf8')).join('\n'); + cer('sursele uneltei nu folosesc child_process, worker_threads, process.binding, internalBinding, lookupService sau module native (drumurile pe care paza le vede numai refuzandu-le, sau deloc)', da(!/child_process|worker_threads|\.node['"]|process\.dlopen|process\.binding|internalBinding|lookupService/.test(surseUnealta))); + cer('fisierele uneltei nu au fost atinse de proba (amprente egale inainte si dupa)', da(FISIERE_UNEALTA.every((f) => amprenta(path.join(AICI, f)) === amprenteInainte[f]))); + // copiile-frate: git le ignora (o rulare omorata nu lasa fisiere neurmarite pe care `git add -A` sa le ia), si curatenia de la pornire + // sterge numai orfanele: un dosar al unui proces MORT dispare, unul al unui proces VIU (chiar aceasta proba) ramane + { + const et = 'copiile-frate .expunere-planta-* si .expunere-oglinda-* sunt ignorate de git (si un frate oarecare, controlul negativ, nu e)'; + const rel = (n) => path.relative(RAD, path.join(AICI, '..', n)).split(path.sep).join('/'); + // un FISIER din copie, nu "dosar/": git 2.53 raspunde 0 (ignorat) la orice cale cu bara la coada, pe o linie goala din .gitignore + // (masurat 2026-10-12, controlul negativ de mai jos a iesit si el 0), iar o cale de dosar inexistent fara bara nu e vazuta ca dosar + const ign = (n) => spawnSync('git', ['-C', RAD, 'check-ignore', '-q', '--no-index', rel(n) + '/raport.mjs'], { encoding: 'utf8', windowsHide: true }).status; + const r = [ign('.expunere-planta-x-1'), ign('.expunere-oglinda-x-1'), ign('expunere-alt-frate')]; + // fara git sau in afara unui arbore git (o copie publicata a uneltei) intrebarea nu are raspuns: NEMASURAT numit, nu verde si nu rosu + if (r.some((x) => x !== 0 && x !== 1)) cer(et, 'NEMASURAT', `git check-ignore nu a raspuns (${r.join(',')}): git lipsa sau nu e un arbore git`); + else cer(et, da(r[0] === 0 && r[1] === 0 && r[2] === 1), `coduri check-ignore ${r.join(',')} (0 = ignorat)`); + } + await incearca('curatenia de la pornire: o copie-frate a unui proces MORT e stearsa, una a unui proces VIU (aceasta proba) e lasata, si se spune de ce', async () => { + const ch = spawnSync(process.execPath, ['-e', 'process.stdout.write(String(process.pid))'], { encoding: 'utf8', windowsHide: true, env: { ...process.env, NODE_OPTIONS: '' } }); + const mort = Number(ch.stdout); if (!(mort > 0) || pidViu(mort)) return `nu s-a gasit un pid mort (${ch.stdout})`; + const par = path.join(AICI, '..'); const dMort = path.join(par, `.expunere-planta-curatenie-${mort}`), dViu = path.join(par, `.expunere-planta-curatenie-${process.pid}`); + fs.mkdirSync(dMort, { recursive: true }); fs.mkdirSync(dViu, { recursive: true }); copii.push(dMort, dViu); + const c = curataOrfane(par); + return [!fs.existsSync(dMort) && fs.existsSync(dViu) && c.sterse.includes(path.basename(dMort)) && c.lasate.some((x) => x.startsWith(path.basename(dViu)) && /traieste/.test(x)), `sterse ${c.sterse.length}, lasate ${c.lasate.length}`]; + }); + // dosarul de lucru din %TEMP%: poarta pid-ul rularii (numeT), deci curatenia de la pornire il recunoaste ca orfan cand procesul a murit; + // forma de dinainte (mkdtemp fara pid) nu poate fi judecata si ramane pe veci: PLANTAREA INVERSA o creeaza si cere ca ea sa ramana + await incearca('dosarul de lucru al probei (%TEMP%) poarta pid-ul: al unei rulari MOARTE e sters la pornire, al acesteia (VIE) e lasat; PLANTAREA INVERSA (numele de dinainte, fara pid) ramane dupa curatenie si iese ROSIE', async () => { + const ch = spawnSync(process.execPath, ['-e', 'process.stdout.write(String(process.pid))'], { encoding: 'utf8', windowsHide: true, env: { ...process.env, NODE_OPTIONS: '' } }); + const mort = Number(ch.stdout); if (!(mort > 0) || pidViu(mort)) return `nu s-a gasit un pid mort (${ch.stdout})`; + const dMort = numeT(mort); const dVechi = fs.mkdtempSync(path.join(os.tmpdir(), 'expunere-proba-')); + try { + const eu = path.basename(T); + const c = curataOrfane(os.tmpdir(), TIPAR_T, pidDinT); + const bun = !fs.existsSync(dMort) && c.sterse.includes(path.basename(dMort)) && fs.existsSync(T) && pidDinT(eu) === process.pid; + const vechiulRamane = fs.existsSync(dVechi) && c.lasate.some((x) => x.startsWith(path.basename(dVechi)) && /fara pid/.test(x)); + return [bun && vechiulRamane, `al rularii moarte sters: ${!fs.existsSync(dMort)}; al acesteia lasat: ${fs.existsSync(T)} (${eu.slice(0, 26)}); cel de forma veche lasat (nu poate fi judecat): ${vechiulRamane}`]; + } finally { for (const d of [dMort, dVechi]) { try { fs.rmSync(d, { recursive: true, force: true }); } catch {} } } + }); + // o macheta nu traieste mai mult decat procesul care a pornit-o: un parinte intermediar o porneste DETASAT (in afara jobului care pe + // Windows ii omoara pe copii odata cu parintele) si iese; paznicul de parinte trebuie sa o opreasca in cateva secunde + const machetaDupaParinte = async (fisierMachete, nume) => { + const gata = path.join(T, `gata-paznic-${nume}.json`), contor = path.join(T, `contor-paznic-${nume}.json`); + const argv = [fisierMachete, '--fel', 'electrum', '--fixtura', path.join(FIX, 'electrum.json'), '--gata', gata, '--contor', contor, '--plafon-s', '120']; + const cod = `const { spawn } = require('node:child_process'); const fs = require('node:fs'); const c = spawn(process.execPath, ${JSON.stringify(argv)}, { detached: true, stdio: 'ignore', windowsHide: true }); c.unref(); const t0 = Date.now(); const h = setInterval(() => { if (fs.existsSync(${JSON.stringify(gata)}) && fs.statSync(${JSON.stringify(gata)}).size > 0) { clearInterval(h); process.exit(0); } if (Date.now() - t0 > 10000) process.exit(3); }, 50);`; + const r = spawnSync(process.execPath, ['-e', cod], { encoding: 'utf8', timeout: 20000, windowsHide: true, env: { ...process.env, NODE_OPTIONS: '' } }); + if (r.status !== 0 || !fs.existsSync(gata)) throw new Error(`parintele intermediar a iesit cu ${r.status}, fara macheta pornita`); + const { pid } = JSON.parse(fs.readFileSync(gata, 'utf8')); + for (let i = 0; i < 60 && pidViu(pid); i++) await sleep(100); + const ramasa = pidViu(pid); if (ramasa) { try { process.kill(pid); } catch {} } + return { ramasa, pid }; + }; + await incearca('machetele nu supravietuiesc parintelui: pornita DETASAT de un parinte care iese, macheta se opreste singura in 6 s (paznicul de parinte); PLANTAREA INVERSA (paznicul scos, intr-o copie) o lasa vie, si proba o opreste', async () => { + const bun = await machetaDupaParinte(MACHETE, 'bun'); + if (bun.ramasa) return [false, 'macheta cu paznic e vie la 6 s dupa ce parintele a iesit (oprita de proba)']; + const d = copie('paznic'); const n = planteaza(path.join(d, 'machete.mjs'), 'setInterval(() => { if (!parinteViu()) process.exit(0); }, 1000).unref();', ''); + if (n !== 1) return `tinta plantarii apare de ${n} ori`; + const plantat = await machetaDupaParinte(path.join(d, 'machete.mjs'), 'plantat'); + return [!bun.ramasa && plantat.ramasa, `macheta cu paznic vie dupa 6 s: ${bun.ramasa}; fara paznic: ${plantat.ramasa} (oprita de proba)`]; + }); + // @noble/curves 2.x (fara ProjectivePoint si CURVE) intr-un node_modules gasit INAINTEA celui bun: incarcatorul il ocoleste; fara alt + // candidat, raportul se opreste cu cod 2 si numeste dependenta, nu crapa in import + await incearca('@noble/curves in forma 2.x gasit primul (un node_modules al copiei): incarcatorul il ocoleste si raportul merge pe 1.x (cod 0); fara alt candidat -> cod 2 "DEPENDENCY MISSING ... found without the exports"; PLANTAREA INVERSA (verificarea exporturilor scoasa) crapa in import (cod 1) si verificarea iese ROSIE', async () => { + const fals = (d) => { const p = path.join(d, 'node_modules', '@noble', 'curves'); fs.mkdirSync(p, { recursive: true }); fs.writeFileSync(path.join(p, 'package.json'), JSON.stringify({ name: '@noble/curves', version: '2.0.0-fals', type: 'module', exports: { './secp256k1.js': './secp256k1.js', './secp256k1': './secp256k1.js' } })); fs.writeFileSync(path.join(p, 'secp256k1.js'), 'export const secp256k1 = { Signature: class Signature {}, getPublicKey: () => new Uint8Array(33), Point: class Point {} };\n'); }; + const fara1x = (d) => planteaza(path.join(d, 'noble.mjs'), "const dinAfara = (sub) => [process.env.AERE_EXPUNERE_NODE_MODULES, path.join(AICI, '..', '..', '..', 'verificator-falcon', 'node_modules')]", "const dinAfara = (sub) => (sub.startsWith('@noble/curves') ? ['nu-exista'] : [process.env.AERE_EXPUNERE_NODE_MODULES, path.join(AICI, '..', '..', '..', 'verificator-falcon', 'node_modules')])"); + const d1 = copie('noble-2x'); fals(d1); const r1 = ruleaza({ dir: d1, args: ['--mod', '1', '--adrese', LISTA_BTC] }); + const d2 = copie('noble-2x-singur'); fals(d2); if (fara1x(d2) !== 1) return 'tinta plantarii (noble.mjs) nu apare o data'; + const r2 = ruleaza({ dir: d2, args: ['--mod', '1', '--adrese', LISTA_BTC] }); + const numit0 = (r) => r.cod === 2 && !r.scris && /DEPENDENCY MISSING/.test(r.err) && /found without the exports/.test(r.err) && /@noble\/curves/.test(r.err); + if (!(r1.cod === 0 && r1.scris && numit0(r2))) return [false, `cu 1.x alaturi: cod ${r1.cod} | numai 2.x: cod ${r2.cod} ${r2.err.replace(/\s+/g, ' ').replace(/[A-Za-z]*Error/g, 'eroare').slice(0, 90)}`]; + const d3 = copie('noble-2x-inv'); fals(d3); if (fara1x(d3) !== 1) return 'tinta plantarii (noble.mjs) nu apare o data'; + if (planteaza(path.join(d3, 'noble.mjs'), "const curves = await incarca('@noble/curves/secp256k1.js', curbaPotrivita);", "const curves = await incarca('@noble/curves/secp256k1.js', (m) => !!m.secp256k1);") !== 1) return 'tinta plantarii inverse nu apare o data'; + const r3 = ruleaza({ dir: d3, args: ['--mod', '1', '--adrese', LISTA_BTC] }); + const numit = (r) => r.cod === 2 && !r.scris && /DEPENDENCY MISSING/.test(r.err) && /found without the exports/.test(r.err) && /@noble\/curves/.test(r.err) && !/TypeError/.test(r.err); + // inversa trebuie sa cada EXACT pe defectul plantat (o crapare in import, TypeError), nu pe o plantare care nu compileaza + // (clasa erorii nu se tipareste: oglinda probei citeste iesirea si un nume de eroare acolo ar arata ca o crapare a probei) + const eroare3 = (r3.err.split('\n').find((l) => /Error/.test(l)) || r3.err).trim().replace(/^[A-Za-z]*Error: /, ''); + return [r1.cod === 0 && r1.scris && numit(r2) && !numit(r3) && r3.cod === 1 && /TypeError/.test(r3.err), `cu 1.x alaturi: cod ${r1.cod} | numai 2.x: cod ${r2.cod} ${r2.err.slice(0, 60)} | copia fara verificarea exporturilor: cod ${r3.cod}, crapare in import: ${eroare3.slice(0, 60)}`]; + }); + }); +} catch (e) { + cer('proba a aruncat in afara sectiunilor', 'STRICAT', msg(e)); +} finally { + for (const m of machete) { try { m.kill(); } catch {} } + for (const d of copii) { try { fs.rmSync(d, { recursive: true, force: true }); } catch {} } + try { fs.rmSync(T, { recursive: true, force: true }); } catch {} +} +console.log(`\nEXPUNERE-PROBA: verzi=${verzi} rosii=${rosii} stricate=${stricate} nemasurate=${nemasurate}`); +process.exitCode = rosii || stricate ? 1 : 0; diff --git a/exposure-report/raport.mjs b/exposure-report/raport.mjs new file mode 100644 index 0000000..3bbe50b --- /dev/null +++ b/exposure-report/raport.mjs @@ -0,0 +1,277 @@ +#!/usr/bin/env node +// raport.mjs (quantum exposure report, C12): the command line that produces the QUANTUM EXPOSURE REPORT of a list of Bitcoin and +// Ethereum addresses, in one of three DECLARED modes, as a machine-readable JSON, a human-readable Markdown and an AIP-23 +// `compliance` envelope whose evidenceHash binds the JSON (verifiable with the published reference verifier). +// +// mode 1 offline: by script / address type only. Reads no chain data, opens no connection. Cannot see spends. +// mode 2 with the client's OWN node or index, through one adapter: --electrum host:port | --esplora url | --bitcoind url +// [--txids file] | --eth-rpc url [--eth-blocks N|a..b]. Connections go only to that declared target. +// mode 3 with a THIRD-PARTY provider: the same adapters, only with --consimtamant-tert ""; the target must +// be a public service (a private or loopback target is refused) and the addresses are sent to it. +// Every address gets exactly one of two labels, "exposed (on-chain evidence)" or "no on-chain evidence of exposure", or the state +// "unmeasured" with a named reason; each verdict lists what was seen and what was not. Three questions about what no chain read here +// shows (shared extended public keys; signed messages, PSBTs, EIP-191/712 signatures; the same key on another chain) are asked and the +// answers are recorded as DECLARATIONS, never as measurements. The deadlines cited come from the compliance-report module beside the control plane, with +// the document, its version and the date it was read. +// +// node raport.mjs --mod 1|2|3 --adrese [adapter flags] [--consimtamant-tert "text"] --iesire +// [--data YYYY-MM-DD] [--subiect ] [--xpub-partajat da|nu|necunoscut] +// [--semnaturi-offchain da|nu|necunoscut] [--alte-lanturi da|nu|necunoscut] [--cnsa] [--json] +// : one line per address: a Bitcoin address (base58check, bech32, bech32m), `script:`, +// `p2pk:`, or an Ethereum address (0x + 40 hex; mixed case is checked as EIP-55). `#` starts a comment. +// --data: the day the report records (default: the UTC day of the run); a day after the UTC day of the run is refused, and with a day +// in the past no verdict rests on a block the target served after the end of that day (clasifica.mjs) +// Exit: 0 report written, every address classified; 2 report written, some addresses unmeasured; 1 refused (nothing written). +// Nothing about the owner is recorded: the addresses appear, nothing else. No value of any environment variable is printed. +import fs from 'node:fs'; +import path from 'node:path'; +import crypto from 'node:crypto'; +import { fileURLToPath, pathToFileURL } from 'node:url'; +import { ETICHETA, NEMASURAT, verificaLimbaj } from './limbaj.mjs'; +// the cryptographic dependencies (package.json) are loaded first, through noble.mjs: when they are missing the tool names them and +// exits 2 ("could not run") instead of failing inside an import +try { await import('./noble.mjs'); } catch (e) { console.error(String((e && e.message) || e)); process.exit(2); } +const { decodeazaIntrareBitcoin } = await import('./bitcoin.mjs'); +const { decodeazaAdresaEth } = await import('./ethereum.mjs'); +const C = await import('./clasifica.mjs'); +const { ADAPTOARE, Refuz, rezolvaPublic, tintaAdaptorului, tranzactiiCore, lantulCore } = await import('./adaptoare.mjs'); + +const AICI = path.dirname(fileURLToPath(import.meta.url)); +const primul = (lista) => lista.filter(Boolean).map((p) => path.resolve(AICI, p)).find((p) => fs.existsSync(p)); +const TERMENE = primul([process.env.AERE_EXPUNERE_TERMENE, '../../../cloud-gateway/control-plane/raport-conformitate.mjs', '../../../aere-quantum/control-plane/raport-conformitate.mjs', '../control-plane/raport-conformitate.mjs']); +const PK = primul([process.env.AERE_EXPUNERE_PROOF_KINDS, '../../proof-kinds/proof-kinds.mjs', '../../../aere-quantum/proof-kinds/proof-kinds.mjs', '../proof-kinds/proof-kinds.mjs']); +if (!TERMENE || !PK) { console.error('raport.mjs: the compliance-report module (deadlines) or the proof-kinds builder is not beside this tool'); process.exit(1); } +const { REGIMURI, canonicJson, sha256Canonic } = await import(pathToFileURL(TERMENE).href); +const { buildProof } = await import(pathToFileURL(PK).href); + +export const VERSIUNE = 'aere-quantum/exposure-report/1 (2026-10-12)'; +export const INTREBARI = Object.freeze({ + sharedXpub: 'Has an extended public key (xpub / ypub / zpub, or any account-level public key) of a wallet holding any of these addresses ever been given to a third party: a service, an exchange, a companion application, a co-signer, a backup? With such a key, once a quantum computer recovers one non-hardened child key, the parent private key and every sibling key follow (BIP-32).', + offChainSignatures: 'Have any of the keys behind these addresses signed anything off chain: Bitcoin signed messages (BIP-137, BIP-322), PSBTs or partially signed transactions sent to others, Ethereum EIP-191 or EIP-712 signatures (token permits, exchange orders, sign-in messages), or a transaction that was broadcast and never confirmed (replaced by fee, dropped from mempools)? Such a signature discloses the public key exactly as a confirmed spend would, and no chain shows it.', + otherChains: 'Has the same key, or the same address, signed on another chain: any other EVM chain where the same address is the same account (a layer 2, a sidechain, a test network), a Bitcoin fork that shares the history before its split, a Bitcoin test network, or a chain of another kind that uses the same secp256k1 key? A signature there discloses the public key exactly as one here would, and this report read only the chain named in each verdict.', +}); +const RASPUNS = { da: 'yes (declared)', nu: 'no (declared)', necunoscut: 'unknown (declared)' }; + +// ---------------------------------------------------------------- arguments +function argumente(argv) { + const o = { _: [] }; + for (let i = 0; i < argv.length; i++) { + const t = argv[i]; + const val = (k) => { if (i + 1 >= argv.length) throw new Refuz('usage', `${k} needs a value`); return argv[++i]; }; + if (t === '--mod') o.mod = val(t); else if (t === '--adrese') o.adrese = val(t); else if (t === '--iesire') o.iesire = val(t); + else if (t === '--electrum') o.electrum = val(t); else if (t === '--esplora') o.esplora = val(t); else if (t === '--bitcoind') o.bitcoind = val(t); else if (t === '--eth-rpc') o['eth-rpc'] = val(t); + else if (t === '--eth-blocks') o.ethBlocks = val(t); else if (t === '--txids') o.txids = val(t); + else if (t === '--consimtamant-tert') o.consimtamant = val(t); else if (t === '--data') o.data = val(t); else if (t === '--subiect') o.subiect = val(t); + else if (t === '--xpub-partajat') o.xpub = val(t); else if (t === '--semnaturi-offchain') o.offchain = val(t); else if (t === '--alte-lanturi') o.alteLanturi = val(t); + else if (t === '--cnsa') o.cnsa = true; else if (t === '--json') o.json = true; else if (t === '--help' || t === '-h') o.help = true; + else throw new Refuz('usage', 'unknown argument ' + t); + } + return o; +} +const USAGE = `usage: node raport.mjs --mod 1|2|3 --adrese --iesire + [--electrum host:port | --esplora | --bitcoind [--txids ] | --eth-rpc [--eth-blocks N|a..b]] + [--consimtamant-tert ""] [--data YYYY-MM-DD] [--subiect