From 21e3fc11c0177f3887b265d39cbbc61c978eab79 Mon Sep 17 00:00:00 2001 From: Runchao Han Date: Mon, 9 Sep 2024 12:33:28 +1000 Subject: [PATCH] staking: verifying staker's signature over slashing tx (#56) Part of #7 This PR adds verifications on staker's signature over the slashing tx in BTC delegation requests. This includes: - replacing rust secp256k1 with k256 for verifying Schnorr signatures and key pairs. This prevents bloating wasm binary size - adding an assertion ensuring the full validation version of btc staking contract is less than 1 MB. This checks whether rust-bitcoin stuff bloats the contract size or not. - verifying staker's Schnorr signature over its slashing tx in `handle_btc_delegation` (the version with `full-validation` feature) - fixing `datagen` to use 1st FP's secret key for generating pub rand commit and finality sig --- Cargo.lock | 6 + Cargo.toml | 1 + contracts/babylon/tests/integration.rs | 13 +- contracts/btc-staking/src/contract.rs | 2 + contracts/btc-staking/src/finality.rs | 32 +-- contracts/btc-staking/src/staking.rs | 87 ++++++-- contracts/btc-staking/src/state/config.rs | 6 + contracts/btc-staking/tests/integration.rs | 17 +- datagen/utils/btcstaking.go | 17 +- datagen/utils/finality.go | 1 - packages/bitcoin/Cargo.toml | 4 + packages/bitcoin/src/error.rs | 9 + packages/bitcoin/src/lib.rs | 4 + packages/bitcoin/src/schnorr.rs | 62 ++++++ packages/btcstaking/Cargo.toml | 16 +- packages/btcstaking/src/adaptor_sig.rs | 25 ++- packages/btcstaking/src/error.rs | 4 + packages/btcstaking/src/scripts_utils.rs | 49 ++--- packages/btcstaking/src/sig_verify.rs | 21 +- packages/btcstaking/src/tx_verify.rs | 54 ++--- .../testdata/add_finality_sig_1_msg.dat | 5 +- .../testdata/add_finality_sig_2_msg.dat | 6 +- .../testdata/btc_delegation_1_{1,3}.dat | Bin 2196 -> 2196 bytes .../testdata/btc_delegation_1_{1}.dat | Bin 1748 -> 1748 bytes .../testdata/btc_delegation_1_{2}.dat | Bin 1748 -> 1748 bytes .../testdata/btc_delegation_2_{1}.dat | Bin 1748 -> 1748 bytes .../testdata/btc_delegation_2_{2}.dat | Bin 1748 -> 1748 bytes .../testdata/btc_delegation_3_{1}.dat | Bin 1748 -> 1748 bytes .../testdata/btc_delegation_3_{2}.dat | Bin 1748 -> 1748 bytes .../test-utils/testdata/btc_light_client.dat | 200 +++++++++--------- .../testdata/btc_light_client_fork.dat | 22 +- .../testdata/btc_light_client_fork_msg.json | 2 +- .../test-utils/testdata/btc_timestamp.dat | Bin 5835 -> 5867 bytes .../testdata/btc_timestamp_header0.dat | Bin 80 -> 80 bytes .../testdata/btc_timestamp_header1.dat | 2 +- .../test-utils/testdata/btcstaking_params.dat | Bin 222 -> 222 bytes .../testdata/commit_pub_rand_msg.dat | 4 +- .../test-utils/testdata/eots_testdata.json | 2 +- .../testdata/finality_provider_1.dat | Bin 202 -> 202 bytes .../testdata/finality_provider_2.dat | Bin 202 -> 202 bytes .../testdata/finality_provider_3.dat | 6 +- .../test-utils/testdata/pub_rand_value.dat | 2 +- packages/test-utils/testdata/raw_ckpt.dat | Bin 102 -> 102 bytes 43 files changed, 439 insertions(+), 242 deletions(-) create mode 100644 packages/bitcoin/src/error.rs create mode 100644 packages/bitcoin/src/schnorr.rs diff --git a/Cargo.lock b/Cargo.lock index f5f1577c..05ba7aa4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -120,17 +120,23 @@ version = "0.9.0" dependencies = [ "bitcoin", "cosmwasm-std", + "digest 0.10.7", "hex", + "k256", "schemars", "serde", + "sha2 0.10.8", + "thiserror", ] [[package]] name = "babylon-btcstaking" version = "0.9.0" dependencies = [ + "babylon-bitcoin", "babylon-proto", "bitcoin", + "digest 0.10.7", "eots", "hex", "k256", diff --git a/Cargo.toml b/Cargo.toml index 38bd628d..d91f0df2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,6 +50,7 @@ cw-multi-test = "2.0.1" cw-storage-plus = "2.0.0" cw-utils = "2.0.0" derivative = "2" +digest = "0.10" hex = "0.4.3" ics23 = { version = "0.9.0", default-features = false, features = [ "host-functions", diff --git a/contracts/babylon/tests/integration.rs b/contracts/babylon/tests/integration.rs index 7a4ce26f..56c71f07 100644 --- a/contracts/babylon/tests/integration.rs +++ b/contracts/babylon/tests/integration.rs @@ -30,7 +30,7 @@ use babylon_contract::ibc::IBC_VERSION; use babylon_contract::msg::btc_header::{BtcHeader, BtcHeadersResponse}; use babylon_contract::msg::contract::{ExecuteMsg, InstantiateMsg}; -static WASM: &[u8] = include_bytes!("../../../artifacts/babylon_contract.wasm"); +static BABYLON_CONTRACT_WASM: &[u8] = include_bytes!("../../../artifacts/babylon_contract.wasm"); /// Wasm size limit: https://github.com/CosmWasm/wasmd/blob/main/x/wasm/types/validation.go#L24-L25 const MAX_WASM_SIZE: usize = 800 * 1024; // 800 KB @@ -38,7 +38,7 @@ const CREATOR: &str = "creator"; #[track_caller] fn setup() -> Instance { - let mut deps = mock_instance_with_gas_limit(WASM, 2_250_000_000_000); + let mut deps = mock_instance_with_gas_limit(BABYLON_CONTRACT_WASM, 2_250_000_000_000); let msg = InstantiateMsg { network: babylon_bitcoin::chain_params::Network::Regtest, babylon_tag: "01020304".to_string(), @@ -80,15 +80,16 @@ fn get_fork_msg_test_headers() -> Vec { #[test] fn wasm_size_limit_check() { assert!( - WASM.len() < MAX_WASM_SIZE, - "Wasm file too large: {}", - WASM.len() + BABYLON_CONTRACT_WASM.len() < MAX_WASM_SIZE, + "Babylon contract wasm binary is too large: {} (target: {})", + BABYLON_CONTRACT_WASM.len(), + MAX_WASM_SIZE ); } #[test] fn instantiate_works() { - let mut deps = mock_instance(WASM, &[]); + let mut deps = mock_instance(BABYLON_CONTRACT_WASM, &[]); let msg = InstantiateMsg { network: babylon_bitcoin::chain_params::Network::Regtest, diff --git a/contracts/btc-staking/src/contract.rs b/contracts/btc-staking/src/contract.rs index 62b001fa..fe152ec5 100644 --- a/contracts/btc-staking/src/contract.rs +++ b/contracts/btc-staking/src/contract.rs @@ -304,6 +304,8 @@ pub(crate) mod tests { fn new_params(params: ProtoParams) -> Params { Params { + covenant_pks: params.covenant_pks.iter().map(hex::encode).collect(), + covenant_quorum: params.covenant_quorum, btc_network: Network::Regtest, // TODO: fix this max_active_finality_providers: params.max_active_finality_providers, min_pub_rand: 10, // TODO: fix this diff --git a/contracts/btc-staking/src/finality.rs b/contracts/btc-staking/src/finality.rs index f517de7f..80c257fd 100644 --- a/contracts/btc-staking/src/finality.rs +++ b/contracts/btc-staking/src/finality.rs @@ -589,9 +589,11 @@ pub(crate) mod tests { // Read public randomness commitment test data let (pk_hex, pub_rand, pubrand_signature) = get_public_randomness_commitment(); - // Register one FP with a valid pubkey first - let mut new_fp = create_new_finality_provider(1); - new_fp.btc_pk_hex.clone_from(&pk_hex); + // Register one FP + // NOTE: the test data ensures that pub rand commit / finality sig are + // signed by the 1st FP + let new_fp = create_new_finality_provider(1); + assert_eq!(new_fp.btc_pk_hex, pk_hex); let msg = ExecuteMsg::BtcStaking { new_fp: vec![new_fp.clone()], @@ -643,9 +645,11 @@ pub(crate) mod tests { ) .unwrap(); - // Register one FP with a valid pubkey first - let mut new_fp = create_new_finality_provider(1); - new_fp.btc_pk_hex.clone_from(&pk_hex); + // Register one FP + // NOTE: the test data ensures that pub rand commit / finality sig are + // signed by the 1st FP + let new_fp = create_new_finality_provider(1); + assert_eq!(new_fp.btc_pk_hex, pk_hex); let msg = ExecuteMsg::BtcStaking { new_fp: vec![new_fp.clone()], @@ -781,9 +785,11 @@ pub(crate) mod tests { ) .unwrap(); - // Register one FP with a valid pubkey first - let mut new_fp = create_new_finality_provider(1); - new_fp.btc_pk_hex.clone_from(&pk_hex); + // Register one FP + // NOTE: the test data ensures that pub rand commit / finality sig are + // signed by the 1st FP + let new_fp = create_new_finality_provider(1); + assert_eq!(new_fp.btc_pk_hex, pk_hex); let msg = ExecuteMsg::BtcStaking { new_fp: vec![new_fp.clone()], @@ -942,9 +948,11 @@ pub(crate) mod tests { ) .unwrap(); - // Register one FP with a valid pubkey first - let mut new_fp = create_new_finality_provider(1); - new_fp.btc_pk_hex.clone_from(&pk_hex); + // Register one FP + // NOTE: the test data ensures that pub rand commit / finality sig are + // signed by the 1st FP + let new_fp = create_new_finality_provider(1); + assert_eq!(new_fp.btc_pk_hex, pk_hex); let msg = ExecuteMsg::BtcStaking { new_fp: vec![new_fp.clone()], diff --git a/contracts/btc-staking/src/staking.rs b/contracts/btc-staking/src/staking.rs index 72e21fa1..1af5c359 100644 --- a/contracts/btc-staking/src/staking.rs +++ b/contracts/btc-staking/src/staking.rs @@ -1,11 +1,11 @@ -use hex::ToHex; -use std::str::FromStr; - use bitcoin::absolute::LockTime; use bitcoin::consensus::deserialize; use bitcoin::hashes::Hash; use bitcoin::{Transaction, Txid}; use cosmwasm_std::{DepsMut, Env, Event, MessageInfo, Order, Response, Storage}; +use hex::ToHex; + +use std::str::FromStr; use crate::error::ContractError; use crate::msg::FinalityProviderInfo; @@ -24,8 +24,7 @@ use babylon_bindings::BabylonMsg; #[cfg(feature = "full-validation")] use bitcoin::Address; -#[cfg(feature = "full-validation")] -use bitcoin::XOnlyPublicKey; +use k256::schnorr::VerifyingKey; /// handle_btc_staking handles the BTC staking operations pub fn handle_btc_staking( @@ -86,6 +85,9 @@ pub fn handle_new_fp( new_fp.validate()?; // get DB object let fp = FinalityProvider::from(new_fp); + + // TODO: Verify proof of possession + // save to DB FPS.save(storage, &fp.btc_pk_hex, &fp)?; // Set its voting power to zero @@ -106,6 +108,36 @@ fn verify_active_delegation( active_delegation: &ActiveBtcDelegation, staking_tx: &Transaction, ) -> Result<(), ContractError> { + // get staker's public key + + let staker_pk_bytes = hex::decode(&active_delegation.btc_pk_hex) + .map_err(|e| ContractError::SecP256K1Error(e.to_string()))?; + let staker_pk = VerifyingKey::from_bytes(&staker_pk_bytes) + .map_err(|e| ContractError::SecP256K1Error(e.to_string()))?; + + // get all FP's public keys + let fp_pks: Vec = active_delegation + .fp_btc_pk_list + .iter() + .map(|pk_hex| { + let pk_bytes = + hex::decode(pk_hex).map_err(|e| ContractError::SecP256K1Error(e.to_string()))?; + VerifyingKey::from_bytes(&pk_bytes) + .map_err(|e| ContractError::SecP256K1Error(e.to_string())) + }) + .collect::, ContractError>>()?; + // get all covenant members' public keys + let cov_pks: Vec = params + .covenant_pks + .iter() + .map(|pk_hex| { + let pk_bytes = + hex::decode(pk_hex).map_err(|e| ContractError::SecP256K1Error(e.to_string()))?; + VerifyingKey::from_bytes(&pk_bytes) + .map_err(|e| ContractError::SecP256K1Error(e.to_string())) + }) + .collect::, ContractError>>()?; + // Check if data provided in request, matches data to which staking tx is // committed @@ -128,8 +160,6 @@ fn verify_active_delegation( .assume_checked(); // Check slashing tx and staking tx are valid and consistent - let staker_btc_pk = XOnlyPublicKey::from_str(&active_delegation.btc_pk_hex) - .map_err(|e| ContractError::SecP256K1Error(e.to_string()))?; let slashing_rate = params .slashing_rate .parse::() @@ -141,10 +171,45 @@ fn verify_active_delegation( params.min_slashing_tx_fee_sat, slashing_rate, &slashing_address, - &staker_btc_pk, + &staker_pk, active_delegation.unbonding_time as u16, )?; + // TODO: Verify proof of possession + + /* + verify staker signature against slashing path of the staking tx script + */ + + // get the slashing path script + let staking_output = &staking_tx.output[active_delegation.staking_output_idx as usize]; + let staking_time = (active_delegation.end_height - active_delegation.start_height) as u16; + let babylon_script_paths = babylon_btcstaking::scripts_utils::BabylonScriptPaths::new( + &staker_pk, + &fp_pks, + &cov_pks, + params.covenant_quorum as usize, + staking_time, + )?; + let slashing_path_script = babylon_script_paths.slashing_path_script; + + // get the staker's signature on the slashing tx + let staker_sig = + k256::schnorr::Signature::try_from(active_delegation.delegator_slashing_sig.as_slice()) + .map_err(|e| ContractError::SecP256K1Error(e.to_string()))?; + + // Verify the signature + babylon_btcstaking::sig_verify::verify_transaction_sig_with_output( + &slashing_tx, + staking_output, + slashing_path_script.as_script(), + &staker_pk, + &staker_sig, + ) + .map_err(|e| ContractError::SecP256K1Error(e.to_string()))?; + + // TODO: verify covenant signatures + // TODO: Check unbonding time (staking time from unbonding tx) is larger than min unbonding time // which is larger value from: // - MinUnbondingTime @@ -154,10 +219,6 @@ fn verify_active_delegation( // - is larger than min unbonding time // - is smaller than math.MaxUint16 (due to check in req.ValidateBasic()) - // TODO: Verify proof of possession - - // TODO: Verify staker signature against slashing path of the staking tx script - /* TODO: Early unbonding logic */ @@ -176,6 +237,8 @@ fn verify_active_delegation( // TODO: Check staker signature against slashing path of the unbonding tx + // TODO: Verify covenant signatures over unbonding slashing tx + // TODO: Check unbonding tx fees against staking tx // - Fee is greater than 0. // - Unbonding output value is at least `MinUnbondingValue` percentage of staking output value. diff --git a/contracts/btc-staking/src/state/config.rs b/contracts/btc-staking/src/state/config.rs index cf714fa6..cf3dbfa5 100644 --- a/contracts/btc-staking/src/state/config.rs +++ b/contracts/btc-staking/src/state/config.rs @@ -30,7 +30,13 @@ pub struct Config { #[derive(Derivative)] #[derivative(Default)] pub struct Params { + // covenant_pks is the list of public keys held by the covenant committee each PK + // follows encoding in BIP-340 spec on Bitcoin + pub covenant_pks: Vec, + // covenant_quorum is the minimum number of signatures needed for the covenant multi-signature + pub covenant_quorum: u32, #[derivative(Default(value = "Network::Regtest"))] + // ntc_network is the network the BTC staking protocol is running on pub btc_network: Network, // `min_commission_rate` is the chain-wide minimum commission rate that a finality provider // can charge their delegators diff --git a/contracts/btc-staking/tests/integration.rs b/contracts/btc-staking/tests/integration.rs index a7153cfc..bbdbfb8a 100644 --- a/contracts/btc-staking/tests/integration.rs +++ b/contracts/btc-staking/tests/integration.rs @@ -3,18 +3,31 @@ use cosmwasm_vm::testing::{instantiate, mock_env, mock_info, mock_instance}; use btc_staking::msg::InstantiateMsg; +// wasm binary lite version static WASM: &[u8] = include_bytes!("../../../artifacts/btc_staking.wasm"); /// Wasm size limit: https://github.com/CosmWasm/wasmd/blob/main/x/wasm/types/validation.go#L24-L25 const MAX_WASM_SIZE: usize = 800 * 1024; // 800 KB +// wasm binary with full validation +// TODO: optimise to 800 KB +static WASM_FULL: &[u8] = include_bytes!("../../../artifacts/btc_staking-full-validation.wasm"); +const MAX_WASM_SIZE_FULL: usize = 1024 * 1024; // 1 MB + const CREATOR: &str = "creator"; #[test] fn wasm_size_limit_check() { assert!( WASM.len() < MAX_WASM_SIZE, - "Wasm file too large: {}", - WASM.len() + "BTC staking contract (lite version) wasm binary is too large: {} (target: {})", + WASM.len(), + MAX_WASM_SIZE + ); + assert!( + WASM_FULL.len() < MAX_WASM_SIZE_FULL, + "BTC staking contract (with full validation) wasm binary is too large: {} (target: {})", + WASM_FULL.len(), + MAX_WASM_SIZE_FULL ); } diff --git a/datagen/utils/btcstaking.go b/datagen/utils/btcstaking.go index 033f64c4..af79ef6d 100644 --- a/datagen/utils/btcstaking.go +++ b/datagen/utils/btcstaking.go @@ -21,6 +21,11 @@ const ( BTCSTAKING_PARAMS_FILENAME = "btcstaking_params.dat" ) +var ( + fpSK *btcec.PrivateKey + fpPK *btcec.PublicKey +) + func GenParams(dir string) ([]*btcec.PrivateKey, uint32) { t := &testing.T{} @@ -63,7 +68,17 @@ func GenFinalityProviders(dir string, numFPs int) { t := &testing.T{} for i := 1; i <= numFPs; i++ { - fp, err := datagen.GenRandomFinalityProvider(r) + fpBTCSK, fpBTCPK, err := datagen.GenRandomBTCKeyPair(r) + require.NoError(t, err) + + // set the first FP's BTC key pair as the global BTC key pair + // they will be used for generating public randomness and finality signatures + if i == 1 { + fpSK = fpBTCSK + fpPK = fpBTCPK + } + + fp, err := datagen.GenRandomFinalityProviderWithBTCSK(r, fpBTCSK, "") require.NoError(t, err) fp.ConsumerId = fmt.Sprintf("consumer-%d", i) fpBytes, err := fp.Marshal() diff --git a/datagen/utils/finality.go b/datagen/utils/finality.go index b4c36e12..605b996d 100644 --- a/datagen/utils/finality.go +++ b/datagen/utils/finality.go @@ -183,7 +183,6 @@ func GenRandomEvidence(r *rand.Rand, sk *btcec.PrivateKey, height uint64) (*ftyp func GenFinalityData(dir string) { GenEOTSTestData(dir) - fpSK, _, _ := datagen.GenRandomBTCKeyPair(r) randListInfo := GenCommitPubRandListMsg(commitPubRandHeight, commitPubRandAmount, pubRandIndex, fpSK, dir) GenAddFinalitySig(commitPubRandHeight, pubRandIndex, randListInfo, fpSK, dir, 1) // Conflicting signature / double signing diff --git a/packages/bitcoin/Cargo.toml b/packages/bitcoin/Cargo.toml index 003aadf0..d98d70fe 100644 --- a/packages/bitcoin/Cargo.toml +++ b/packages/bitcoin/Cargo.toml @@ -6,9 +6,13 @@ edition.workspace = true [dependencies] bitcoin = { workspace = true } +digest = { workspace = true } +sha2 = { workspace = true } serde = { workspace = true } schemars = { workspace = true } cosmwasm-std = { workspace = true } +k256 = { workspace = true } +thiserror = { workspace = true } [dev-dependencies] hex = { workspace = true } diff --git a/packages/bitcoin/src/error.rs b/packages/bitcoin/src/error.rs new file mode 100644 index 00000000..0466ddff --- /dev/null +++ b/packages/bitcoin/src/error.rs @@ -0,0 +1,9 @@ +use thiserror::Error; + +#[derive(Error, Debug, PartialEq)] +pub enum Error { + #[error("Failed to parse public key")] + FailedToParsePublicKey(String), + #[error("Invalid schnorr signature")] + InvalidSchnorrSignature(String), +} diff --git a/packages/bitcoin/src/lib.rs b/packages/bitcoin/src/lib.rs index 892f5107..9dcc12d9 100644 --- a/packages/bitcoin/src/lib.rs +++ b/packages/bitcoin/src/lib.rs @@ -10,9 +10,13 @@ pub use bitcoin::{ pub use cosmwasm_std::Uint256; pub mod chain_params; +pub mod error; pub mod merkle; pub mod op_return; pub mod pow; +pub mod schnorr; + +pub type Result = std::result::Result; #[cfg(test)] mod tests { diff --git a/packages/bitcoin/src/schnorr.rs b/packages/bitcoin/src/schnorr.rs new file mode 100644 index 00000000..835ab641 --- /dev/null +++ b/packages/bitcoin/src/schnorr.rs @@ -0,0 +1,62 @@ +//! Dummy 256-bits Digest impl. +//! This digest stores/accepts a value of the proper length. +//! To be used for / with already hashed values, just to comply with the Digest contract. +//! +//! Adapted from `sha2` [sha256.rs](https://github.com/RustCrypto/hashes/blob/master/sha2/src/sha256.rs) +//! and https://github.com/CosmWasm/cosmwasm/blob/main/packages/crypto/src/identity_digest.rs +use crate::error::Error; +use crate::Result; +use digest::consts::U32; +use digest::generic_array::GenericArray; +use digest::{FixedOutput, HashMarker, Output, OutputSizeUser, Reset, Update}; +use k256::schnorr::signature::DigestVerifier; +use k256::schnorr::Signature as SchnorrSignature; +use k256::schnorr::VerifyingKey; +use sha2::Digest; + +/// The 256-bits identity container +#[derive(Clone, Default)] +pub struct Identity256 { + array: GenericArray, +} + +impl Update for Identity256 { + fn update(&mut self, hash: &[u8]) { + assert_eq!(hash.as_ref().len(), 32); + self.array = *GenericArray::from_slice(hash); + } +} + +impl OutputSizeUser for Identity256 { + type OutputSize = U32; +} + +impl FixedOutput for Identity256 { + fn finalize_into(self, out: &mut Output) { + *out = self.array; + } +} + +impl HashMarker for Identity256 {} + +impl Reset for Identity256 { + fn reset(&mut self) { + *self = Self::default(); + } +} + +pub fn new_digest(msg_hash: &[u8; 32]) -> Identity256 { + Identity256::new().chain(msg_hash) +} + +pub fn verify_digest( + pub_key: &VerifyingKey, + msg_hash: &[u8; 32], + signature: &SchnorrSignature, +) -> Result<()> { + let digest = new_digest(msg_hash); + + pub_key + .verify_digest(digest, signature) + .map_err(|e| Error::InvalidSchnorrSignature(e.to_string())) +} diff --git a/packages/btcstaking/Cargo.toml b/packages/btcstaking/Cargo.toml index 7b165ec3..2999d517 100644 --- a/packages/btcstaking/Cargo.toml +++ b/packages/btcstaking/Cargo.toml @@ -5,13 +5,15 @@ version.workspace = true edition.workspace = true [dependencies] -bitcoin = { workspace = true } -rust_decimal = { workspace = true } -hex = { workspace = true } -sha2 = { workspace = true } -k256 = { workspace = true } -thiserror = { workspace = true } -eots = { path = "../eots" } +babylon-bitcoin = { workspace = true } +bitcoin = { workspace = true } +digest = { workspace = true } +rust_decimal = { workspace = true } +hex = { workspace = true } +sha2 = { workspace = true } +k256 = { workspace = true } +thiserror = { workspace = true } +eots = { path = "../eots" } [dev-dependencies] test-utils = { path = "../test-utils" } diff --git a/packages/btcstaking/src/adaptor_sig.rs b/packages/btcstaking/src/adaptor_sig.rs index dd3fc9a5..0ac52d11 100644 --- a/packages/btcstaking/src/adaptor_sig.rs +++ b/packages/btcstaking/src/adaptor_sig.rs @@ -1,8 +1,8 @@ use crate::error::Error; use crate::Result; -use bitcoin::secp256k1::Parity; -use bitcoin::XOnlyPublicKey; + use k256::elliptic_curve::group::prime::PrimeCurveAffine; +use k256::schnorr::VerifyingKey; use k256::{ elliptic_curve::{ ops::{MulByGenerator, Reduce}, @@ -44,10 +44,9 @@ fn tagged_hash(tag: &[u8]) -> Sha256 { } pub fn bytes_to_point(bytes: &[u8]) -> Result { - let is_y_odd = bytes[0] == 0x03; let r_option = AffinePoint::decompress( - k256::FieldBytes::from_slice(&bytes[1..]), - k256::elliptic_curve::subtle::Choice::from(is_y_odd as u8), + k256::FieldBytes::from_slice(bytes), + k256::elliptic_curve::subtle::Choice::from(false as u8), ); let r = if r_option.is_some().into() { r_option.unwrap() @@ -61,15 +60,15 @@ pub fn bytes_to_point(bytes: &[u8]) -> Result { impl AdaptorSignature { pub fn verify( &self, - pub_key: &XOnlyPublicKey, - enc_key: &XOnlyPublicKey, + pub_key: &VerifyingKey, + enc_key: &VerifyingKey, msg: [u8; 32], ) -> Result<()> { // Convert public keys to points - let pk = pub_key.public_key(Parity::Even); - let p = bytes_to_point(&pk.serialize())?; - let ek = enc_key.public_key(Parity::Even); - let t = bytes_to_point(&ek.serialize())?; + let pk = pub_key.to_bytes(); + let p = bytes_to_point(pk.as_slice())?; + let ek = enc_key.to_bytes(); + let t = bytes_to_point(ek.as_slice())?; // Calculate R' = R - T (or R + T if negation is needed) let r_hat = if self.needs_negation { @@ -83,11 +82,11 @@ impl AdaptorSignature { // Calculate e = tagged_hash("BIP0340/challenge", bytes(R) || bytes(P) || m) // mod n let r_bytes = self.r.to_affine().x(); - let p_bytes = pub_key.serialize(); + let p_bytes = pub_key.to_bytes(); let e = >::reduce_bytes( &tagged_hash(CHALLENGE_TAG) .chain_update(r_bytes) - .chain_update(p_bytes) + .chain_update(p_bytes.as_slice()) .chain_update(msg) .finalize(), ); diff --git a/packages/btcstaking/src/error.rs b/packages/btcstaking/src/error.rs index 28541537..7bef9e94 100644 --- a/packages/btcstaking/src/error.rs +++ b/packages/btcstaking/src/error.rs @@ -2,6 +2,8 @@ use thiserror::Error; #[derive(Error, Debug, PartialEq)] pub enum Error { + #[error("Bitcoin error: {0}")] + BitcoinError(#[from] babylon_bitcoin::error::Error), #[error("Failed to decompress bytes to a projective point")] DecompressPointFailed {}, #[error("Point {0} is at infinity")] @@ -16,6 +18,8 @@ pub enum Error { InvalidAdaptorSignatureFirstByte(u8), #[error("Failed to parse bytes as a mod n scalar")] FailedToParseScalar {}, + #[error("Failed to parse public key: {0}")] + FailedToParsePublicKey(String), #[error("Cannot create multisig script with less than 2 keys")] InsufficientMultisigKeys {}, #[error("Duplicate key in list of keys")] diff --git a/packages/btcstaking/src/scripts_utils.rs b/packages/btcstaking/src/scripts_utils.rs index 4696394a..8f467b6b 100644 --- a/packages/btcstaking/src/scripts_utils.rs +++ b/packages/btcstaking/src/scripts_utils.rs @@ -5,6 +5,7 @@ use bitcoin::opcodes::all::{ OP_CHECKSIG, OP_CHECKSIGADD, OP_CHECKSIGVERIFY, OP_CSV, OP_NUMEQUAL, OP_NUMEQUALVERIFY, OP_PUSHNUM_1, }; + use bitcoin::secp256k1::PublicKey; use bitcoin::taproot::LeafVersion; use bitcoin::ScriptBuf; @@ -12,6 +13,7 @@ use bitcoin::{TapNodeHash, TapTweakHash, XOnlyPublicKey}; use k256::elliptic_curve::sec1::ToEncodedPoint; use k256::elliptic_curve::subtle::Choice; +use k256::schnorr::VerifyingKey; use k256::{ elliptic_curve::{ops::MulByGenerator, point::DecompressPoint, PrimeField}, AffinePoint, ProjectivePoint, Scalar, @@ -29,16 +31,16 @@ fn unspendable_key_path_internal_pub_key() -> XOnlyPublicKey { } // sort_keys sorts public keys in lexicographical order -pub fn sort_keys(keys: &mut [XOnlyPublicKey]) { +pub fn sort_keys(keys: &mut [VerifyingKey]) { keys.sort_by(|a, b| { - let a_serialized = a.serialize(); - let b_serialized = b.serialize(); + let a_serialized = a.to_bytes(); + let b_serialized = b.to_bytes(); a_serialized.cmp(&b_serialized) }); } /// prepare_keys_for_multisig_script prepares keys for multisig, ensuring there are no duplicates -pub fn prepare_keys_for_multisig_script(keys: &[XOnlyPublicKey]) -> Result> { +pub fn prepare_keys_for_multisig_script(keys: &[VerifyingKey]) -> Result> { if keys.len() < 2 { return Err(Error::InsufficientMultisigKeys {}); } @@ -58,7 +60,7 @@ pub fn prepare_keys_for_multisig_script(keys: &[XOnlyPublicKey]) -> Result Result { @@ -68,7 +70,8 @@ fn assemble_multisig_script( let mut builder = Builder::new(); for (i, key) in pubkeys.iter().enumerate() { - builder = builder.push_slice(key.serialize()); + let pk_bytes: [u8; 32] = key.to_bytes().into(); + builder = builder.push_slice(pk_bytes); if i == 0 { builder = builder.push_opcode(OP_CHECKSIG); } else { @@ -88,7 +91,7 @@ fn assemble_multisig_script( /// build_multisig_script creates a multisig script pub fn build_multisig_script( - keys: &[XOnlyPublicKey], + keys: &[VerifyingKey], quorum: usize, with_verify: bool, ) -> Result { @@ -97,9 +100,10 @@ pub fn build_multisig_script( } /// build_time_lock_script creates a timelock script -pub fn build_time_lock_script(pub_key: &XOnlyPublicKey, lock_time: u16) -> Result { +pub fn build_time_lock_script(pub_key: &VerifyingKey, lock_time: u16) -> Result { + let pk_bytes: [u8; 32] = pub_key.to_bytes().into(); let builder = Builder::new() - .push_slice(pub_key.serialize()) + .push_slice(pk_bytes) .push_opcode(OP_CHECKSIGVERIFY) .push_int(lock_time as i64) .push_opcode(OP_CSV); @@ -108,11 +112,10 @@ pub fn build_time_lock_script(pub_key: &XOnlyPublicKey, lock_time: u16) -> Resul } /// build_single_key_sig_script builds a single key signature script -pub fn build_single_key_sig_script( - pub_key: &XOnlyPublicKey, - with_verify: bool, -) -> Result { - let mut builder = Builder::new().push_slice(pub_key.serialize()); +pub fn build_single_key_sig_script(pub_key: &VerifyingKey, with_verify: bool) -> Result { + let pk_bytes: [u8; 32] = pub_key.to_bytes().into(); + + let mut builder = Builder::new().push_slice(pk_bytes); if with_verify { builder = builder.push_opcode(OP_CHECKSIGVERIFY); @@ -158,10 +161,7 @@ fn compute_tweaked_key_bytes(merkle_root: TapNodeHash) -> [u8; 32] { /// build_relative_time_lock_pk_script builds a relative timelocked taproot script /// NOTE: this function is heavily optimised by manually computing the tweaked key /// This is to avoid using any secp256k1 FFI that will bloat the binary size -pub fn build_relative_time_lock_pk_script( - pk: &XOnlyPublicKey, - lock_time: u16, -) -> Result { +pub fn build_relative_time_lock_pk_script(pk: &VerifyingKey, lock_time: u16) -> Result { // build timelock script let script = build_time_lock_script(pk, lock_time)?; @@ -210,9 +210,9 @@ pub struct BabylonScriptPaths { impl BabylonScriptPaths { pub fn new( - staker_key: &XOnlyPublicKey, - fp_keys: &[XOnlyPublicKey], - covenant_keys: &[XOnlyPublicKey], + staker_key: &VerifyingKey, + fp_keys: &[VerifyingKey], + covenant_keys: &[VerifyingKey], covenant_quorum: usize, lock_time: u16, ) -> Result { @@ -244,11 +244,12 @@ mod tests { use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey}; // Function to generate a public key from a secret key - fn generate_public_key(data: &[u8]) -> XOnlyPublicKey { + fn generate_public_key(data: &[u8]) -> VerifyingKey { let secp = Secp256k1::new(); let secret_key = SecretKey::from_slice(data).expect("slice with correct length"); let (pk_x, _) = PublicKey::from_secret_key(&secp, &secret_key).x_only_public_key(); - pk_x + + VerifyingKey::from_bytes(pk_x.serialize().as_slice()).unwrap() } #[test] @@ -265,7 +266,7 @@ mod tests { // Serialize the keys to compare them easily let serialized_keys: Vec> = - keys.iter().map(|key| key.serialize().to_vec()).collect(); + keys.iter().map(|key| key.to_bytes().to_vec()).collect(); // Ensure they are sorted lexicographically assert!( diff --git a/packages/btcstaking/src/sig_verify.rs b/packages/btcstaking/src/sig_verify.rs index 68c23fb5..15609639 100644 --- a/packages/btcstaking/src/sig_verify.rs +++ b/packages/btcstaking/src/sig_verify.rs @@ -1,13 +1,14 @@ use crate::adaptor_sig::AdaptorSignature; use crate::error::Error; use crate::Result; +use babylon_bitcoin::schnorr; use bitcoin::hashes::Hash; -use bitcoin::key::Secp256k1; -use bitcoin::secp256k1::schnorr::Signature as SchnorrSignature; -use bitcoin::secp256k1::Message; use bitcoin::sighash::{Prevouts, SighashCache}; use bitcoin::Transaction; -use bitcoin::{Script, TxOut, XOnlyPublicKey}; +use bitcoin::{Script, TxOut}; + +use k256::schnorr::Signature as SchnorrSignature; +use k256::schnorr::VerifyingKey; fn calc_sighash( transaction: &Transaction, @@ -41,17 +42,13 @@ pub fn verify_transaction_sig_with_output( transaction: &Transaction, funding_output: &TxOut, path_script: &Script, - pub_key: &XOnlyPublicKey, + pub_key: &VerifyingKey, signature: &SchnorrSignature, ) -> Result<()> { // calculate the sig hash of the tx for the given spending path let sighash = calc_sighash(transaction, funding_output, path_script)?; - let sighash_msg = Message::from_digest(sighash); - // verify the signature w.r.t. the signature, the sig hash, and the public key - let secp = Secp256k1::verification_only(); - secp.verify_schnorr(signature, &sighash_msg, pub_key) - .map_err(|e| Error::InvalidSchnorrSignature(e.to_string())) + schnorr::verify_digest(pub_key, &sighash, signature).map_err(Error::BitcoinError) } /// enc_verify_transaction_sig_with_output verifies the validity of a Schnorr adaptor signature for a given transaction @@ -59,8 +56,8 @@ pub fn enc_verify_transaction_sig_with_output( transaction: &Transaction, funding_output: &TxOut, path_script: &Script, - pub_key: &XOnlyPublicKey, - enc_key: &XOnlyPublicKey, + pub_key: &VerifyingKey, + enc_key: &VerifyingKey, signature: &AdaptorSignature, ) -> Result<()> { // calculate the sig hash of the tx for the given spending path diff --git a/packages/btcstaking/src/tx_verify.rs b/packages/btcstaking/src/tx_verify.rs index 6873b232..575a1d61 100644 --- a/packages/btcstaking/src/tx_verify.rs +++ b/packages/btcstaking/src/tx_verify.rs @@ -1,8 +1,9 @@ use crate::error::Error; use crate::scripts_utils; use crate::Result; -use bitcoin::XOnlyPublicKey; + use bitcoin::{address::Address, Transaction}; +use k256::schnorr::VerifyingKey; use rust_decimal::{prelude::*, Decimal}; /// Checks if a transaction has exactly one input and one output. @@ -43,7 +44,7 @@ fn validate_slashing_tx( slashing_rate: f64, slashing_tx_min_fee: u64, staking_output_value: u64, - staker_pk: &XOnlyPublicKey, + staker_pk: &VerifyingKey, slashing_change_lock_time: u16, ) -> Result<()> { if slashing_tx.input.len() != 1 { @@ -140,7 +141,7 @@ pub fn check_transactions( slashing_tx_min_fee: u64, slashing_rate: f64, slashing_address: &Address, - staker_pk: &XOnlyPublicKey, + staker_pk: &VerifyingKey, slashing_change_lock_time: u16, ) -> Result<()> { // Check if slashing tx min fee is valid @@ -201,8 +202,7 @@ mod tests { }; use bitcoin::address::Address; use bitcoin::consensus::deserialize; - use bitcoin::secp256k1::schnorr::Signature; - use bitcoin::{Transaction, XOnlyPublicKey}; + use test_utils::{get_btc_delegation, get_params}; #[test] @@ -218,7 +218,7 @@ mod tests { let slashing_address: Address = Address::from_str(¶ms.slashing_address) .unwrap() .assume_checked(); - let staker_pk: XOnlyPublicKey = XOnlyPublicKey::from_slice(&btc_del.btc_pk).unwrap(); + let staker_pk: VerifyingKey = VerifyingKey::from_bytes(&btc_del.btc_pk).unwrap(); let slashing_change_lock_time: u16 = 101; // test check_transactions @@ -242,17 +242,17 @@ mod tests { let staking_tx: Transaction = deserialize(&btc_del.staking_tx).unwrap(); let funding_out_idx: u32 = 0; - let staker_pk: XOnlyPublicKey = XOnlyPublicKey::from_slice(&btc_del.btc_pk).unwrap(); + let staker_pk: VerifyingKey = VerifyingKey::from_bytes(&btc_del.btc_pk).unwrap(); - let fp_pks: Vec = btc_del + let fp_pks: Vec = btc_del .fp_btc_pk_list .iter() - .map(|bytes| XOnlyPublicKey::from_slice(bytes).expect("Invalid public key bytes")) + .map(|bytes| VerifyingKey::from_bytes(bytes).expect("Invalid public key bytes")) .collect(); - let cov_pks: Vec = params + let cov_pks: Vec = params .covenant_pks .iter() - .map(|bytes| XOnlyPublicKey::from_slice(bytes).expect("Invalid public key bytes")) + .map(|bytes| VerifyingKey::from_bytes(bytes).expect("Invalid public key bytes")) .collect(); let babylon_script_paths = BabylonScriptPaths::new( @@ -270,8 +270,10 @@ mod tests { let staking_out = &staking_tx.output[funding_out_idx as usize]; let unbonding_pk_script = babylon_script_paths.unbonding_path_script; for cov_unbonding_tx_sig_info in &btc_undel_info.covenant_unbonding_sig_list { - let cov_pk = XOnlyPublicKey::from_slice(&cov_unbonding_tx_sig_info.pk).unwrap(); - let cov_sig = Signature::from_slice(&cov_unbonding_tx_sig_info.sig).unwrap(); + let cov_pk = VerifyingKey::from_bytes(&cov_unbonding_tx_sig_info.pk).unwrap(); + + let cov_sig = + k256::schnorr::Signature::try_from(&cov_unbonding_tx_sig_info.sig[..]).unwrap(); verify_transaction_sig_with_output( &unbonding_tx, staking_out, @@ -291,18 +293,18 @@ mod tests { let staking_tx: Transaction = deserialize(&btc_del.staking_tx).unwrap(); let slashing_tx: Transaction = deserialize(&btc_del.slashing_tx).unwrap(); let funding_out_idx: u32 = 0; - let staker_pk: XOnlyPublicKey = XOnlyPublicKey::from_slice(&btc_del.btc_pk).unwrap(); + let staker_pk: VerifyingKey = VerifyingKey::from_bytes(&btc_del.btc_pk).unwrap(); let staking_out = &staking_tx.output[funding_out_idx as usize]; - let fp_pks: Vec = btc_del + let fp_pks: Vec = btc_del .fp_btc_pk_list .iter() - .map(|bytes| XOnlyPublicKey::from_slice(bytes).expect("Invalid public key bytes")) + .map(|bytes| VerifyingKey::from_bytes(bytes).expect("Invalid public key bytes")) .collect(); - let cov_pks: Vec = params + let cov_pks: Vec = params .covenant_pks .iter() - .map(|bytes| XOnlyPublicKey::from_slice(bytes).expect("Invalid public key bytes")) + .map(|bytes| VerifyingKey::from_bytes(bytes).expect("Invalid public key bytes")) .collect(); let babylon_script_paths = BabylonScriptPaths::new( @@ -316,7 +318,7 @@ mod tests { // test verifying adaptor signature, i.e., covenant signatures over slashing tx for cov_slashing_tx_info in btc_del.covenant_sigs { - let cov_pk = XOnlyPublicKey::from_slice(&cov_slashing_tx_info.cov_pk).unwrap(); + let cov_pk = VerifyingKey::from_bytes(&cov_slashing_tx_info.cov_pk).unwrap(); for (idx, cov_asig_bytes) in cov_slashing_tx_info.adaptor_sigs.iter().enumerate() { let cov_asig = AdaptorSignature::new(cov_asig_bytes).unwrap(); enc_verify_transaction_sig_with_output( @@ -340,20 +342,19 @@ mod tests { let btc_undel = btc_del.btc_undelegation.unwrap(); let unbonding_tx: Transaction = deserialize(&btc_undel.unbonding_tx).unwrap(); let unbonding_slashing_tx: Transaction = deserialize(&btc_undel.slashing_tx).unwrap(); - let funding_out_idx: u32 = 0; - let staker_pk: XOnlyPublicKey = XOnlyPublicKey::from_slice(&btc_del.btc_pk).unwrap(); + let staker_pk: VerifyingKey = VerifyingKey::from_bytes(&btc_del.btc_pk).unwrap(); let unbonding_out = &unbonding_tx.output[funding_out_idx as usize]; - let fp_pks: Vec = btc_del + let fp_pks: Vec = btc_del .fp_btc_pk_list .iter() - .map(|bytes| XOnlyPublicKey::from_slice(bytes).expect("Invalid public key bytes")) + .map(|bytes| VerifyingKey::from_bytes(bytes).expect("Invalid public key bytes")) .collect(); - let cov_pks: Vec = params + let cov_pks: Vec = params .covenant_pks .iter() - .map(|bytes| XOnlyPublicKey::from_slice(bytes).expect("Invalid public key bytes")) + .map(|bytes| VerifyingKey::from_bytes(bytes).expect("Invalid public key bytes")) .collect(); let babylon_unbonding_script_paths = BabylonScriptPaths::new( @@ -367,8 +368,7 @@ mod tests { // test verifying adaptor signature, i.e., covenant signatures over slashing tx for cov_unbonding_slashing_tx_info in btc_undel.covenant_slashing_sigs { - let cov_pk = - XOnlyPublicKey::from_slice(&cov_unbonding_slashing_tx_info.cov_pk).unwrap(); + let cov_pk = VerifyingKey::from_bytes(&cov_unbonding_slashing_tx_info.cov_pk).unwrap(); for (idx, cov_asig_bytes) in cov_unbonding_slashing_tx_info .adaptor_sigs .iter() diff --git a/packages/test-utils/testdata/add_finality_sig_1_msg.dat b/packages/test-utils/testdata/add_finality_sig_1_msg.dat index 6d051443..554305eb 100644 --- a/packages/test-utils/testdata/add_finality_sig_1_msg.dat +++ b/packages/test-utils/testdata/add_finality_sig_1_msg.dat @@ -1,3 +1,4 @@ -*bbn1gvr4x7rws5zt2dlxpqul34e4ygknhcf3fzm5g3 c;d7ےnd&ElYe" &]:s1S,1FK5f r* - e V@?x h@|Q@ BCr" {/eL[$U[=2@ح V" cÁkΐQ1'{}Qz2" ȨX7Oho ""eE/9" n Pb_GT/G6!v/jF2 S5 덡p^[a* + Yk] ltwr,)Gg" GnsޮͿPBBlQ\eF3]" _rN ++* Ec?b" uhِI)\zk)18" 4Vsa)n"=,҃qϗ92 E'*͍2!;\4Ǚ`\&+V: k}{ZA54<"Ke@EO \ No newline at end of file diff --git a/packages/test-utils/testdata/add_finality_sig_2_msg.dat b/packages/test-utils/testdata/add_finality_sig_2_msg.dat index e74a13db..04ee20f4 100644 --- a/packages/test-utils/testdata/add_finality_sig_2_msg.dat +++ b/packages/test-utils/testdata/add_finality_sig_2_msg.dat @@ -1,4 +1,4 @@ -*bbn1w4jg52kmcmr6nsmfrwukgc0zz2vskuedvt0saw c;d7ےnd&ElYe" &]:s1S,1FK5f r* - e V@?x h@|Q@ BCr" {/eL[$U[=2@ح V" cÁkΐQ1'{}Qz2" ȨX7Oho ""eE/9" n Pb_GT/G6!v/jF2 %p -zVcWeo)d: 'sYXR"*¡YxȹLL[:9 \ No newline at end of file +*bbn135nx9hs9qy5zfev89m27v3awmyygxvc0lw2ezw G&;I# K33~MHlfe" m=6$I%rib;!5>^[a* + Yk] ltwr,)Gg" GnsޮͿPBBlQ\eF3]" _rN ++* Ec?b" uhِI)\zk)18" 4Vsa)n"=,҃qϗ92 =}OFpqTjtM]^+: ?clKxКq,Sed( \ No newline at end of file diff --git a/packages/test-utils/testdata/btc_delegation_1_{1,3}.dat b/packages/test-utils/testdata/btc_delegation_1_{1,3}.dat index 039535e1d86f525ff6745a30b6730a8f7676ffac..f7d6826fd4f9fc46a92a8ddd43a09890e6a4e8fe 100644 GIT binary patch literal 2196 zcmb7^cU03^7RP^KkSZ;rKma!ckRnB@Fo0$QNGJg*8bm2Vq;C>J3?NDqqzDG2OA~3K zdBA0r^ANCwtPNPGMWm5Asjxt=9+nsV9>29ldJ`f3wpz*2}#n>_HFa&5sg-jknkB4 z(s$yMI|mHvJ360o5b21@SDwySOJ7Xkua65%Pd#tQ#F{{?3pBpV(>X6OICa7(qYa#h zFc2F603b&8)wAC)Qbc}h-hG{b$${|ntm}wM8*kG>pW14(Xy)h+76*JkUTi>$R>1KK z0A>wUtZnjE;pE<#wkPKZ)4p`p$_OjBlexO&GQ0sLxt`a8ax5VLh>=Q#m8u(S+8B*m zNvi27+|Yzho(ni2rh;{A69xhuZ=jM5M;H5RmoZ>kh!w)9AnUESf_ilM;x2n_)z|kE zim@#1-xgk5D6}6|&W+CYhINadW?XeO!@TOS z1N|@?q-Dux9M!Q~CJ-=rF8;RCj?y8=m2&;m*X8k}$qT*MV za@mi48~46vq32Hd0YA*X%Xt#Ca@S2jZYA=&zYm+!EB0l|gF3an{r&)v%QxkBjuYuw z(k>d-Tcg+C3hxu7YEpm!DXfG_GZLG*^`9d|5)<+`cCjJZ%OD`i>$$_#Fo_b!s!6<+ zU{gF^9KRHi($6wm7%Sbw_?^4XVuZkjv$Xg6RPnf3z5C6t&aKuJ`U|4rv1%89(r0WB zHSpL0F-p7cpiX(`6eKFgYWr7)xqk>A@VrNu;^J}ofz*lT86=wcKcs}Ny?GT7$byizNK$BSUkcn!AB8wC zVqn)}XJF3K{sl~A#m|6gpZLFkfx+#9CYj)1=@|!z__x`Mi@cnQzFK>Pkrn@5wCU1N zG)lp&44x*-M}AKky|iR|I4%(Gp^cJ1qT*-Xsu>y9$SIx>n9)xDp`FVahd$%$XGo%o z!M(evp%-Wu^++OfwQ^`&+3Uao$Z;(fT@uXX9s7L&nt6W>DgJ;gIKb6iSO~^uvf3)W zKxz_tI2if~!yTdbIPag&#WdJ+))`b}>~@E~h?CI2v%3lfxowLpb```R)f8Dm|GMc* z?ug_%_1ZNzI>+C-%C$^`9gr&! zG7W533PnAHaQq|g!p}}G7HitYy7~8HwXOX!WALtRYq!f%p2y0E)7<1QvnK%N2CWOT z(UXRcZcHLKVrhqBD+IAndW1?r>roV3K>8Lpr%P3li6_6yBd^*z(vb|gYj?`tScQIT z##nyb4rj=!EIw(|EF=q-h}UhuUcS0U>^0si{FnK>&9$^~YLe+wgSvzN3Q)>_JCkM< zFi0XgpKzu7Q^5oMFrNAfmr-ci=r^eI_?NSSB>6+Xel=Kayg%JS3p!6nAoMe3#3 z7@>rhljV!gzA4-&ga4MkWv0pWzF#$Fj}E&-`|#qAy@`w!ejQcz?suRun594yY;o(W zaZZa$$Pz2dPwNgBr@a>_5vJZ0b}lkV@BI)PCqi@czUSzU5wIT7{Vr3|s91KZi0OpV cb$+z_3XmQNCUdbL@=B_z)vK5-`yj0T1m9-ut^fc4 literal 2196 zcmb7^dpy%^AICSRNhxiPlS2-7B4XHs=pNaejTY`y7;|WC%sCQkNJt`wgis@`g(wR- zWWyXfFw`98uAFa&ctoMwW1jo<{F~?Z&-MDfuFv)Td|uz{`@Y09y}bkVjH3)-M1%0i zU|k#m7w&J23(=4C@x>FuBLZ-+D1Ck7U@QUd2UdM7*Q(>9T#!8N91xDvi<{2oae5obDr%AXS@RJy0k%WYlu;TV$8*$ zBat>m&zeMu*UTPF$6_CZ^~Cpd$c?cZ;#HKJYHni|o-ep_A8DBx20NrApv`Iei#Jx= zb49EdKTe=jluvWUg3XC7gWR&vH)(-GP##=v_CSWTr-Zmc}$lcOGO!E+4D| zS&)GO00013C3m#}HtKI!#@#5LKxKWH`29kb7AMyHx|iCZ#PSK69_VNiU~Bsm0Av|P zZl3_CI4g(O%%Wn0MAuthJQXbQDtSkpMj6~)5whV8KbyW=^h8PG2ww;Q$VEJsEa~@` zm!wM*-4ZiA41Bxj>y#u(| zXmf}dzSWZQgVobu>+CAW!mJ-4Y_c{^O_lqBEd<0nUjDHm7cX*iuiIO%$+l|anv`i1 zs_%+XYOwoHR_4VZAwzXB;|Pq|rGc6LE5*jXl7Hq*|n;2nC}u5Zc#w`-XEJ(O|D zM!nKE0Ck^iuI4)TAWpTS8q4jO;4y{!N1i6KG^aYy&vHgjfxdH=3X)X}rPvyf3r>2P z-qvRmO_YH zfR2WhcD_XY*E+DQv@9}+(B8LV`aK3Ly?Hv(}7uzqm*9SR5f|8b$X}*<{|0;A+(a-4v}TH zjgE$NvOlnJsFwt7NNu>l2@tZ-PYZ=l%>sZY0tJ}NHiK{ ze9Y_x`7yyBfisiB*(ED2Y4ShDGcG5qC)G6r1AIexqGBF9NbP!_fwH&%ht!eH5=iJ8 z4E}m~_LOPaaTWR_{~EAX;^?&Vwf_YsbKzIO)aLzPz^EYfVsd_vJKZV1SMqA7>eP98I%cfpg2FF0 z(#LBat#+QXKpevrSAM1`QtqgQz-I-v9!JX?v_81?0*Ne;m-6)1+$Au2DdUhD9n@XN z%lM&SzxwwN+6;plDOCTuupvlX51q~{m>(fdZ9n;+$^um z3au&dXK+jf3|Zlf>mRDFy>FX6lD6RDQ)1AaCX-tsYP#H)ei!T>o`w0mu1J+n%UCjy zIc%Qx=4Z4-nHE;gkV#!l!V?~P_DgCgyV4XpD>Y{MHHs_V z(Z@Oup;g6Nar&a&K3OhRn2-{LjK)+YjyiZ-UkFPdCg<{J(D(Q{^h7ZIqzu^H9m@Pm z07c0fPjLL(^2supLi;fzi^k_rDNpX7G)62d? zJYkg0t^8?Qwp5a)ovMA4ouu0(ZUa@~jkf||xLrJ(2;+@f(=g-eulq1WM5Fmj&O!@~1agp{TyA32&gJA>eQ5ttqtNbh^>Gp4bZM<+v?<@^m)D0V zu+e5_nj9F)8MR;!DmVy?RwZMo`Zp$&ie?Q-up)LW6cg1Q;nBnb>dY5IS6;ZhJHwc} zpNADo|GjTY$@gD;mtXcBaSPI(Oga&rw146n38u=-)}U8JffcgpwAqa(lIiv3o}fqF hy{lLQ*FO~)cD>Rul{213XU-s=b#1inS*oYb{|9_F@Xr7M diff --git a/packages/test-utils/testdata/btc_delegation_1_{1}.dat b/packages/test-utils/testdata/btc_delegation_1_{1}.dat index 0f6f30dc62d06367fab3c99307cbe7853a9281b8..5f651f84aa3d970b41b0566371cae8f92424c47e 100644 GIT binary patch literal 1748 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 B3xWUu diff --git a/packages/test-utils/testdata/btc_delegation_1_{2}.dat b/packages/test-utils/testdata/btc_delegation_1_{2}.dat index 9dc331063800875d8e655ab1b737732ba5bde095..2a2904b4e113e38207cf73885ac535567f36ffbc 100644 GIT binary patch literal 1748 zcmb7@dpHwn9LG0@)=?drxr7cOcjg*GjVM#DM{bKAn>(?T%|aVX2jw)ztMYV01J#%pYfl z#bIz)jZ9-gV*(6~LxT*X41!`J0#KoP!4Vj+;`DK;RV!{k1zG5_Y(HWpa@srgRrX=P z2>3AckjB#`Gg)geOg_!xX@^vvnvyP?uWe4y@OYwwUN7GwTh^YGscjzwq3806KZw?| zSqBHgaD57N8*YZO+pMtIpxv}Fj;$lCq)3&k%Y1*n48IQ8Tr(`{@VcsO6%<=rj~m+f z)Q0i#!K=@J^yWdPgt7rH$eI8Y0ssKO&|4Xvmj@K4MWb)yM>{Z*cvUUR=uQ4(M$U>~ zdSwW@D!w%su)Q;c0GYa}aFo!^X8l8VN{rXsuU?7+7@agN zVV8)j34#E?Aq*1&qR3CN(zW5+unEbz91>>_m3BF~La^&f00MU=ASEKo{4**=ssOJ- zXi%Y{uzm*6z3BG4Kuu_8+FMGmAp5O^W~icIA-Ff)W6k?vn!cQF z=yi*D2ogI*b}rA9qyBJShfjI#Q_;5ZO@mh#UXPW7CIpT1urmkC1u<`!Bez>z-wx7s zf|zn{;;h6Xa!p4&rZCf|I<@l4jVDfB8ryYc#v;i}^$a)msnGSLA6KN0&Fc{Cn_G(7 zz-8$P$Usp=E$NNazmi>+CD4&G7G^74O9buXe%b2&wCdnZrP?S5u(c3XAuXl*QDB)V zr)vLbh8(fA0o{^a+#C?@50dFkOj@>;fZuYk;V3Ly9PM{KUP;}PHz6*`kSdkGoTB^X z&6SS;0S9O7c)&L4(HE8&c2w#%LVHbnYtM;ti!5>h$hV1FO4#8{VEq|nH>{eG2E84` zbgB0sG8e=7&ln+2LnJq6>hQ<`XAkN0s0VWCU*S@n_3_UN{hZ&`7~oYnl6}&rFSr5) zoEGX$9N!NmrpCXqeI-oDw^(?t>>68ted8ro+QeObZHI%4U$CFdDi$Ro`QdH}_bM8U zVzZPaa|h<_mS3bd{brC=LKUZKM*6k*k3u>yZ8nP}fYt`KE5F-J6-hm&7rY;CaE{4C`6g zkR7>=W%Jmr1+B*xJHa2eUh^`}>3_)XyC0gF_m?31uVE`q-!sg;>wg)h1dD&BtFC(l z;+WXr0j@}DSG~?F^1in?zcQ;l`G9R}C0W3;8P9I+JNk=r&z31a&@n(o36sMZv>nNG z?t&n3Q<}RoteYc0q{Tg{(VR(kKsrZIiE4q)kP#D=evi1>p}AQZf+9+l;S#Rmk5Q|E zZ-&Lcev5uk9V~iX`a6@0OtVzy($-hCKwq^fxn1y8n!4(X zwtVRxC*R~08}GhI1L@JkeT@NLf0kN`)my1=Ga3Cat6YZ_1eEXg3?}QP0kUlNjFI(6 zRB4`i5}JxQM~Y&Bp!$tjWCFqp{M@7lrhbtpmeS3YZE;i1D!c?mF!S6uISl*wPqab) E-~ZGd{{R30 literal 1748 zcmb7@dpHwn9LF~t%jLMt{XPk!hD&$r;9Y!rw%!EXU zxpRbhvWFGPrH(OYVJ*UOI95I9-<MCAG71z_5nw0hna@^GH9tIqK>!@6V|c3kLtbgj)GI+V8^(RRKD|JljBZlKb0n1m zV21BzO8eQ#>`cu2JT}bA)u0#@cTfis;v<)%!#;Fmkk@kUuTv#7fA_WDZDZ|Lmvbd5 z9qT0r3>HA9A3#<~6|80uA_*u2004kUKR{aA!bey($NsdzVSCZZ_%ax&hUZAp)-Ie~ z@vV^X(>Ms&*&RZFd^l?e`DY$1-+PG?ctQBE#EQ=0kI zL`Gi_1OQZGsPe33ET-kb6!G1Pcq!8ABV&fezn4}e*!4~V0(U3i>Ovzuc|WA@Oo-IP zT`-a33_U*1;@E9V*R%LCVvzHK?6(pI$hLxo;9jwKcb}19)C3_AioM__9O*IY4oa&s z?fRP7EfVjED>hFSrpb!PPEM;Y%|)WU;M)_PHd)NIPjHc+lS}~$1AC*QMWEI8 zjd1;M$MH+_GNLV+`e0PEs+P&Jazd6hI`dtk4Nlj;)m&dU9bIDnKy#-jtgr=bpU?rr z;KU)1^8k4IG4=51osOFuJwq+Wy-uq1pf{z%wtD_{nXkZs5kfMrF!$6{y{Yye5-Evm zAb;piG5(BOdACRcM`^u)_o3SQqD^iFcdgQ{-TCdhYlE#ah$ZaT*DDVGJiU0SMHMLE zq<~jPYFbZZ@Zsc(L%s1>bJh;3u$?Vh+by?xT?Em*%US7_hYsNH)_GBnGR-WwS8!?k zd#1kV98jCG`y(b+hV?jXId* zMs`-_pS*ZgNxGA>7NT(>i>Eb4+!AEJ8YbEQJ;Ure{+D4oPVXr?{KqlY-W)>( z)D>tehM{Nlu==)f!a|&HAVh!AN;8ITdz!it`#ilDMOeC?GJ{}fow#47QQM?aMarP{ z8Sc$69Yjh|q~&tSx>ix6WqdPjKJ!ys*rF9u^CoJ`gKErtCch*p@4M2TiyQ`#xf`k6 zxA|&)vOz!IZhbBGCgAc900CzYh9wd27I)!?p(Q61CP#e;wzZcx6*otVDNj15nPDbV z$UEi#gu@nen`pL=^mN@4Gy=dmQuD}EijlAd*5<+eFkg6-&0_P;(_RcW@<-1*TipYH{%WEOdLYdA}LQQ#{AsC(v#bcOWRYw|Rz?pte zX}Q-}Zw4eD4rQ4Wr5sdfCO3&!&89R$bbOd5>Cxu|l<)S;3D@mTFYhV*)Way&8*sYA z1)iY?>~Hue8q8)#rDZbJgQWaRN7@3FCg5X%@uIj{Xtv8?4W*`RE1_di2%PlRzZpIl AdjJ3c diff --git a/packages/test-utils/testdata/btc_delegation_2_{1}.dat b/packages/test-utils/testdata/btc_delegation_2_{1}.dat index e08800ada8ed5fad63945b6231f499921fc02905..bc3e286609c508ba4fcc904267f2abdb2ae53832 100644 GIT binary patch literal 1748 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 literal 1748 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 CPY0j? literal 1748 zcmb7@dpHwn9LF~kH99g8!WK@7DYjguWt-e1*_fi-w&XgRFpm3Wc63{aY{zM?AvI2z zIC7WL&0Ld%^AOSshskk0*6BI_=Dh#B&-=XJ_x=2y-}`yN+TPw2{V)o`IEohOg$y+g zj0~dap-@4{V<;*q5<#Nq`65wXzP@3X!y&MVu0sCwXFxr{ej#{h@bob9jA|FtuJ{N( zfnT?t6ZJsZ41&dVYs)4yU(w$fY`Lw#tFJHYZHlnSL!(DH2|E4Jz|UnjYn>XZ5wUGw$HA6@e9yIC(~AE%*(v*}W0 zm@4V#ho&XZp{0RRACvo_uP(d7qGQpIfvnN)0zq4T~(!V`LBoG>*+ z&F~F-$Ub8du(>tF0GS36TPFbOj_G;=ufawoC~UJS?eDf1^|p>gr8dHfOyFAE>dC1RABdUQU9cVtdbL%D zn9M$iwqh64%d#ZSS>~&nz!?Uktq3@`#%|9kV53Sv!(yyKp`DLLbiGoCt!lLYOwXR` zBjL&b5hn>E?B@P{=IVk0%l}1tG#S~y>5$VnDN)fXCrlAHd%VTT?&aT@RP=;-gi(a3 zHMA~UtUAKu+!f;eHs1bp-++&N)t{6b+@Sff*hQL<`$e%O4lTo2TDN5Lrxbv!=UG4z z$9mbqqt(8(gq&Cuu%==1Mh8Fi5aGVlUM{dDJyu7nkEC?D}5l5r~4H@?y0@i`P7pXTT z!R}uj+_nHfMdp7FHfl(h;1U>J{DzjRnBkE-owYw)7Nc<>1xs`AN-fD;(epyS8P<5i ze;O8L;d7Tt!1d&pNDz5G^PVQNh5Ic0Rxur`QKIa>hE30W&oIy2|7DmumU`(_wY+S? zA@>3oa0Dra<@qzdud4@JRNy>PKKcT$=q2Wx&g}1S?7yQtmP2dVJ7iR8^duy;AchRKx%_{K|sB`PP#O0t+&?ix_t1Cg8*l!>O_b~ zxA~w`1H5@9sSgDjkag2bV|w@iM4W9HHokLrd}Rloy_(5{dalj%jTE-?z_fGkYrdsFKP>4A=9W_{g%nt{ zzw^gk$p^zwD6Zzmwni>fMEP#luN# zt*)n36ZhUqPW&0=^}S2$)Npf@(Yq$sv5u!3T!HCf9}(rdJ;ScX^;4EBQz$vc+z|Q* z5KizN-fbl_k+*pt_v^@0+aC-r0&96E(HI-6>;$=()uvzm!VZMyH+Sy$>!y31^0)d2 DBoi6o diff --git a/packages/test-utils/testdata/btc_light_client.dat b/packages/test-utils/testdata/btc_light_client.dat index 0a92eea6..16b8093d 100644 --- a/packages/test-utils/testdata/btc_light_client.dat +++ b/packages/test-utils/testdata/btc_light_client.dat @@ -1,202 +1,202 @@  -04000000f67ad7695d9b662a72ff3d8edbbb2de0bfa67b13974bb9910d116d5cbd863e68b37ad144be3944313f2c629732a5c9c1d0daf9e84b8de4cf23840a901102b15ca2088653ffff7f20f2ffffef@28fd27d4d7d6d634e245d01ee5434bd1da08e058c444f39ec63a3e8dba448ff1"18446744073709551617 +04000000f67ad7695d9b662a72ff3d8edbbb2de0bfa67b13974bb9910d116d5cbd863e68d6f97c892215e92ef6e3f012cff490fed4c43d1d06448aa75ac2fa89f48a58e57d078653ffff7f2002000000@696b9f5ab87c860422f8cf144690b0b5516c0f790129a8e6b571798bbd0a0a9f"18446744073709551617  -04000000f18f44ba8d3e3ac69ef344c458e008dad14b43e51ed045e234d6d6d7d427fd2893d3e93904e005bf3712b7fe66671d285195c13a4b7f4525522b8cd1c2dd253a390b8653ffff7f20f4ffffef@10d679a60a780df456d2232b07d7defd6609045efb71ac749b13a9a55b3b7b2e"18446744073709551619 +040000009f0a0abd8b7971b5e6a82901790f6c51b5b0904614cff82204867cb85a9f6b692aabbdaa81232a20fc79f611b748b9dd96b4250346373709d16650dced197d2794088653ffff7f2000000010@494e0594460b6162ee7a35cea8e080190caf569d65569aab48213966c6466088"18446744073709551619  -040000002e7b3b5ba5a9139b74ac71fb5e040966fdded7072b23d256f40d780aa679d610a276751d541cba358ef12f386cbb0ff485f49b80f630c8aba87b9aaac2019399410d8653ffff7f2001000000@4211f1101dbc206c70eb98e44f47cea86bbabb98f2e6b28bd4fd4cb77bb62ca5"18446744073709551621 +04000000886046c666392148ab9a56659d56af0c1980e0a8ce357aee62610b4694054e498a5e07b5d387462eee9564979af3c4e2562e4d102e7ac53550ab244fd916711e4c0b8653ffff7f20f4ffffef@0d4ce7c116b3e639f41ba5e6e22a2a33b8fe5791a7f05e649c3acc113643aa6d"18446744073709551621  -04000000a52cb67bb74cfdd48bb2e6f298bbba6ba8ce474fe498eb706c20bc1d10f1114253cd8e8db28f214d60de578d40a7c5a4adccbb696c1d44098371344051a326d5a20e8653ffff7f2000000020@2c8863e899f3de99501857e6283994967670836aa07c554ca3365dee9704692e"18446744073709551623 +040000006daa433611cc3a9c645ef0a79157feb8332a2ae2e6a51bf439e6b316c1e74c0d0355038afe3b7359b060ab1bab84caf96feab47151308d2b6fa1260d6c8e225dbe0d8653ffff7f20f2ffffef@642ddbdc2a1c45957e0b3e0a5f80adf63c8a36a6a77244e0d433a8d2096bc5ef"18446744073709551623  -040000002e690497ee5d36a34c557ca06a83707696943928e657185099def399e863882c382f0d8bbd2c48034dda7ac4697b3394b890f8796cce0945c8368cb9d48088dc6d118653ffff7f20feffff2f@582e5915a88f2afdbb6ccc71d6c9d6dc4d5da34459bf4136b4af7d5b3a89950b"18446744073709551625 +04000000efc56b09d2a833d4e04472a7a6368a3cf6ad805f0a3e0b7e95451c2adcdb2d649bee1fb62199f08aeff783a68ca867291540c77f323554f8cc58911e74fd38c56f0f8653ffff7f20f2ffffef@2089f1333b4a323915efe3a48e9d2fb7e727f0d603eacb6d4475c89b049a2d28"18446744073709551625  -040000000b95893a5b7dafb43641bf5944a35d4ddcd6c9d671cc6cbbfd2a8fa815592e588511e75273aa31bd616ee3665ac1f5ac30565aa326ef2884552e99117b161604ee138653ffff7f20f3ffffef@793b011df349a473954931edadebf80fc08c6779bd12fe91bbfe7e709c2ea4c0"18446744073709551627 +04000000282d9a049bc875446dcbea03d6f027e7b72f9d8ea4e3ef1539324a3b33f18920cdd5f2a45d0057c6ef6d367099a490691be080aebdace067b38a72183121c29931118653ffff7f20f3ffffef@6612a2175830cc8f30cf94653b883d8f6be939f264f779ad914c07684fa5366d"18446744073709551627  -04000000c0a42e9c707efebb91fe12bd79678cc00ff8ebaded31499573a449f31d013b79b7814e9c8fda459aa2b4553e29f4f2d9976b2e3c6f18c1bd3a3104e9189d431fbd158653ffff7f20f3ffffef@09c758fe100855802c23ba6dad6e841f49ca97f34f4b480b5aa0f06a45c117e0"18446744073709551629 +040000006d36a54f68074c91ad79f764f239e96b8f3d883b6594cf308fcc305817a2126659b948b04a95b2c035f7d1e225b27a8e37d2d1103ae71e53699ae92b383eeaf03d128653ffff7f20f3ffffef@75865e7e551d0d8b28fa189cd646fef2847e670147b5955b03310d87120ddeba"18446744073709551629  -04000000e017c1456af0a05a0b484b4ff397ca491f846ead6dba232c80550810fe58c709fb4564c1860c1a9a78e0a5a8463ee8b365439bb2857735398f3f80c5a362b9b670178653ffff7f20f4ffffef@4a7f76d44e7d47246952b3338714b82c84ba3f2e710f70ce9b8521679fd9288e"18446744073709551631 +04000000bade0d12870d31035b95b54701677e84f2fe46d69c18fa288b0d1d557e5e8675a3359380aeee95b0c48a58fde7d8fe4abebcb4735aa4cca114063063fe9b13e8e7148653ffff7f20f2ffffef@4574a98de10e803849420249b25593ee3fcb2fd5e7963e766c4c520a6d7054d7"18446744073709551631  -040000008e28d99f6721859bce700f712e3fba842cb8148733b3526924477d4ed4767f4aa0f1d5f64b1e73e1fbea3de23042fa0fa3e281dd635201f4bb0a48ec45fd8a0a4d198653ffff7f2000000010@089ee60a8e8fe315e7659c3268d66b0d426c77899d8a6b99b474a6c22776f1af "18446744073709551633 +04000000d754706d0a524c6c763e96e7d52fcb3fee9355b24902424938800ee18da97445db54c8dd5c9ca93b34087f848b861d1151d790b92d81eb5ed2415592ce36bcd826178653ffff7f20f2ffffef@60a4230c6d35bc4723ba9a4fd62e4c5462c476ca82fe565bbf03d60b9a09592d "18446744073709551633  -04000000aff17627c2a674b4996b8a9d89776c420d6bd668329c65e715e38f8e0ae69e08d79cefd545f13efcd8c3b158cfad3cc7b65585aa6548f09b3481b7b78f68117bc61b8653ffff7f20f7ffffef@233c4ba9bfdb6667cbd911c69e14c15ea51b2949f4a3c8db9849c222cac602bb +040000002d59099a0bd603bf5b56fe82ca76c462544c2ed64f9aba2347bc356d0c23a4607d03033ae843f27ff7427f47810ff6776654905352f60c3926da282859d0392dda198653ffff7f20f3ffffef@217dcb5511c8bb1726ee4fe5baf073c7264f2033e2ffa1d5eb46200a29529929 "18446744073709551635  -04000000bb02c6ca22c24998dbc8a3f449291ba55ec1149ec611d9cb6766dbbfa94b3c2316e365c291ccb05a3bbe9d6afed7087faabb654476434a2bd2357db825c6d53ac21c8653ffff7f2002000000@48000f06ec52549e7f9f194bdc7686b38cb6fe6e4fc2805997fe39a891fd71da "18446744073709551637 +04000000299952290a2046ebd5a1ffe233204f26c773f0bae54fee2617bbc81155cb7d21d9b21b5848f185b209a998d4cc30615c76f4e1004aee2d46d00e543b3f3e2959d81a8653ffff7f20f3ffffef@72b6cd427be31e08a27cbfa56f160a30742e4994b0c111abe638ddc2243dd1d8 "18446744073709551637  -04000000da71fd91a839fe975980c24f6efeb68cb38676dc4b199f7f9e5452ec060f0048a2c88959b11e20cb4f0567ae2f3a26b301e0e91b208673018b04f04b211337deca1d8653ffff7f20fcffffef@21b0b4c003b51b6af053e0a1bdb72190728f2c10a69ef087c70deed62f348fa8 "18446744073709551639 +04000000d8d13d24c2dd38e6ab11c1b094492e74300a166fa5bf7ca2081ee37b42cdb672f0ea84ca5f1595ba17ce8d7d9c9a104c4badea627ccb321c6c96d1c8587cd36e141d8653ffff7f20ffffff1f@435a5b465f3bda10afc49ae55e475fbc79021c9a1418521367cb617b24677d99 "18446744073709551639  -04000000a88f342fd6ee0dc787f09ea6102c8f729021b7bda1e053f06a1bb503c0b4b021d044f225d23bebc048d11c80b06763f903bcd51c6f3ccb8dc4e1f7b261a58427c71f8653ffff7f2000000020@1f1b9a8a16b706d0deb1e3a7c51a97f3a9f8438914f114da355590235fc15e86 "18446744073709551641 +04000000997d67247b61cb67135218149a1c0279bc5f475ee59ac4af10da3b5f465b5a43894840b38b264e28927d1eb1d0dc0f9857261d5752d78e7d553a918d99a6ebe1121e8653ffff7f2000000020@175eb30678986f62302b997567b6afa7d7a78fccded15891b37502f1306fab64 "18446744073709551641  -04000000865ec15f23905535da14f1148943f8a9f3971ac5a7e3b1ded006b7168a9a1b1f9fadfb8dc1b828786be5c8c8f976d3558e3d430872fb803db3d7f95337d28425eb218653ffff7f20f2ffffef@5f006a6a24e62afcc79da9d220cbe26165b615af132df02e7f36e972f5c1cc90"18446744073709551643 +0400000064ab6f30f10275b39158d1decc8fa7d7a7afb66775992b30626f987806b35e17ed91de12d6189fee54db85255e4e00b9322728d78ca43b56f82946d9a4077e54d1208653ffff7f2003000000@73c406f5ccbba1591567fe65e6b5180395589898acc216ca1d43087721f0d606"18446744073709551643  -0400000090ccc1f572e9367f2ef02d13af15b66561e2cb20d2a99dc7fc2ae6246a6a005f2e7570709c58285ffdeb3aed155346004f0cc380da45c6d0d28753506be6ddbd12248653ffff7f2002000000@2cd17a7fd99eae5492d3fae149b6516fe1af463fdcd41b4a9f808368381433f1"18446744073709551645 +0400000006d6f0217708431dca16c2ac989858950318b5e665fe671559a1bbccf506c473a4fb039842e9f0694dde6c91eb44eae78f765c2a148e488e22ca2e4b763a181aa9228653ffff7f2000000030@24c33cc33f4638574276c13f3a2173f50f38ae7ed56aa9c5ebe2e46b60aee2da"18446744073709551645  -04000000f13314386883809f4a1bd4dc3f46afe16f51b649e1fad39254ae9ed97f7ad12c291ce4d4dcfe6feb935599f5d2dda61f00f4e812cc0b99c82485d557133b71df7a258653ffff7f20f2ffffef@6be253196afb85712308d8d9cb47f9b58c9028c64043c8d95b91c7681c96b0c0"18446744073709551647 +04000000dae2ae606be4e2ebc5a96ad57eae380ff573213a3fc176425738463fc33cc324822289339b6d4ad74127b91fff1918c2b26034b081d63074351879c0060ab0010f258653ffff7f2000000010@2496850de0630f81dc76db0ddf941f9bf6fadfa80a7a50c2edb64c7ae2de43fe"18446744073709551647  -04000000c0b0961c68c7915bd9c84340c628908cb5f947cbd9d808237185fb6a1953e26bf7ec19fb4d3d986c2f25483cab5c71be2e6bfdf9b39a5b306a65d0b6a20577ffe0278653ffff7f20f2ffffef@0523c97cd73f090fd1e672f67271c771460f108b8ed60ec7c10f28fa2fa4d4ab"18446744073709551649 +04000000fe43dee27a4cb6edc2507a0aa8dffaf69b1f94df0ddb76dc810f63e00d8596249f3e6593b15b41440984a948af6f50f52a23593d51d183a37b2c6c63f06e4fdfc9268653ffff7f20faffff6f@655ddf5fd178a4994c50d9656573aeb0afb319391543d4280737a470cd44dd91"18446744073709551649  -04000000abd4a42ffa280fc1c70ed68e8b100f4671c77172f672e6d10f093fd77cc9230512cb8a9f29e58aff5b26ac509d798b640b3cfbfda7c4b43cc11d6a9f8e83c1b6cb298653ffff7f20feffff2f@455d03905bfb5520ac35a38b791918d05d66a67e4dc788ffc898795db3e7febd"18446744073709551651 +0400000091dd44cd70a4370728d443153919b3afb0ae736565d9504c99a478d15fdf5d65dfb9e46c38f9c909b4340cd9377c9e98983bfe55dc7e9ee9abb134ff83cd5480ff278653ffff7f20ffffff1f@0bb2b71750d3f08831d27d9d4058066f225c5d256300199e0980e1013de5c2a3"18446744073709551651  -04000000bdfee7b35d7998c8ff88c74d7ea6665dd01819798ba335ac2055fb5b90035d45acd3dc4847b8690efa7a09db33fe08d56804ccb69c238c19f8cfd0b5c07e81e2b92b8653ffff7f2003000000@2cc884673792b29e7cec528814feeda0bbd4cca891793c5a4ea68fe24d4caef8"18446744073709551653 +04000000a3c2e53d01e180099e190063255d5c226f0658409d7dd23188f0d35017b7b20b5a2cce3c2d5b3554bbd74e77834d5ea2982f109fbb6751c42e4e02085009b8be36298653ffff7f20f2ffffef@66c880d9064a09fd902d69b4cdfaf349d2963656d7b9df9e7461f202ab986960"18446744073709551653  -04000000f8ae4c4de28fa64e5a3c7991a8ccd4bba0edfe148852ec7c9eb292376784c82c3e1e0c6ffc1db88ea7fd7ab8c63d5c609457f7d405edd77717de326da187dc0af12c8653ffff7f20f2ffffef@360ba063c24929d3954d06eb9c2276636e212d7e473c1e8898e0bd0efb879a87"18446744073709551655 +04000000606998ab02f261749edfb9d7563696d249f3facdb4692d90fd094a06d980c86630861bec492a76cff96703ec940c984e476b42c5fb1fbda2d9e9b207147de512622b8653ffff7f2000000010@36cb58a3df3fceb45c78df01c20f029eac08c1c763b1dfe529e60ef13a6cbbab"18446744073709551655  -04000000879a87fb0ebde098881e3c477e2d216e6376229ceb064d95d32949c263a00b3688b3812f1a4028464dd5f814e42437643c706bc19f221eee50dd92de803bea28152e8653ffff7f20f3ffffef@04490ec7a960fbe634905e212372afcef918dfa90210578c45dc7c6d7fb83549"18446744073709551657 +04000000abbb6c3af10ee629e5dfb163c7c108ac9e020fc201df785cb4ce3fdfa358cb36f7f583d65e23f46055e44e06669691d0099bcc95fa44809d8ff43d73fac073f4ec2c8653ffff7f2004000000@4066dd7999533565973997d2533160b1b35e455940073605778291586abb1f85"18446744073709551657  -040000004935b87f6d7cdc458c571002a9df18f9ceaf7223215e9034e6fb60a9c70e4904776795d79f52b991cdcddfdd4755576b583c58623343c4e5c092c2381d9987c8562f8653ffff7f20ffffff1f@36e0fdbeb4c9db481e188180c4ed7a1cba46fb7092b70c3456612b7e43ff30b5"18446744073709551659 +04000000851fbb6a589182770536074059455eb3b1603153d29739976535539979dd66405f3f6fbdf4e90da7d7434e7f2017d11fba5c89aaf09e556e5b336826beaac957fe2e8653ffff7f2002000000@1f60cd2d19440f94f12190f0829091a39f3cd2282bc8393807593429ee1e5c4f"18446744073709551659  -04000000b530ff437e2b6156340cb79270fb46ba1c7aedc48081181e48dbc9b4befde036d16f07fda8b804dcfe22b2f1cbf193678d98d56a212fed16d7106e790baa02a0b0308653ffff7f2000000010@27db3a69a9335dff16692e061664f40bf7c570d64638749999a11659703f6973"18446744073709551661 +040000004f5c1eee293459073839c82b28d23c9fa3919082f09021f1940f44192dcd601f35e27733e4f455c8b895761644d72ce245a388266b0d10f9eaa4fd493160be54aa318653ffff7f2000000010@0cfa8a692ec483d7eddf4567c3fc9ba46f12d16220bac7a80285ef52fcff83a9"18446744073709551661  -0400000073693f705916a19999743846d670c5f70bf46416062e6916ff5d33a9693adb27079ced55e4a9012389d70ec2e0d5811616a4ebdba48584af57e9a6b54aa3b08da3318653ffff7f20f4ffffef@279730e26f32c1746b3809e7a930d71b65f45fb2a1f4dff2543ea187ac99fee6"18446744073709551663 +04000000a983fffc52ef8502a8c7ba2062d1126fa49bfcc36745dfedd783c42e698afa0c2275ced7aa672d97f13b0129cdb42d6ab0ac83251c3401468b966cb65dcfe9b8ab338653ffff7f20f2ffffef@02eca0f5ad4b8b245ffd8946297dfed0230ed717b53f04eb1a9be2f933fa3889"18446744073709551663  -04000000e6fe99ac87a13e54f2dff4a1b25ff4651bd730a9e709386b74c1326fe2309727e23d379e324518b6c4af25e9f9134ca349c035b532bc6254c3c9cf92cf44fb03f5338653ffff7f2002000000@60d01cde6e541de59cf04aca6add9deeb4811aafacf28d479b35d99336815060"18446744073709551665 +040000008938fa33f9e29b1aeb043fb517d70e23d0fe7d294689fd5f248b4badf5a0ec02bbcd8377dc1fa1161db6500b3fb6e620ad270c3ba2a9e39a89db9ff9ca2470cbf7348653ffff7f20f2ffffef@43d30d7cfb5ca29756769fadb5a0f6d754174e543d3efa270777c2cf23317930"18446744073709551665  -040000006050813693d9359b478df2acaf1a81b4ee9ddd6aca4af09ce51d546ede1cd060219f8d2a00f7d6790ce6a92a43ea04efa9045495c8e45bab532c9a0288e3c1ffde358653ffff7f20feffff2f@281dd973ef03a2ca8109d720f968c43391da96df3161be682a4b9fb07639f9a2"18446744073709551667 +0400000030793123cfc2770727fa3e3d544e1754d7f6a0b5ad9f765697a25cfb7c0dd34365217d8e0840da491ccfb1ff92105cd0e28b34bb842ee7ccc57aea8f33cd48f207368653ffff7f20f2ffffef@2435b329e717871bbe8a1da324571e741455e9fc0228072585d56a60808462ab"18446744073709551667  -04000000a2f93976b09f4b2a68be6131df96da9133c468f920d70981caa203ef73d91d286492f3c7b96acd2f052893ff62e7ec1653a5f8dfa17f5b8201110f8c856a65bde0368653ffff7f20f3ffffef@763b82964401f1e5685f866549e96d1fc7e444625a6bac2812efad29fbe8e021"18446744073709551669 +04000000ab628480606ad58525072802fce95514741e5724a31d8abe1b8717e729b335241ed3d9327afa4fc39fe35c27498127c65677ac12f40681ecc4ed0445180f00b060388653ffff7f20f3ffffef@6f943d44cb2db2af476e93e16b4f8c50828e662e5b7a4aab536b198ea8a19373"18446744073709551669  -0400000021e0e8fb29adef1228ac6b5a6244e4c71f6de94965865f68e5f1014496823b76f0d09c2c1a02e74ec44ebd4159c71ce271129514f6e16cb8abcaddba0999eaeb93398653ffff7f2000000030@7e782b861d55fffd072a8a54a9709d3eb44aa5f0ca0dead044cce33acd84550a"18446744073709551671 +040000007393a1a88e196b53ab4a7a5b2e668e82508c4f6be1936e47afb22dcb443d946f833ff08b3d8fe1075ae63c70f4a2c4c8e628f63d4323059197327f017f71586182398653ffff7f20f4ffffef@25a4a371ca8b5ee46a2db56f27b8255b87605c2a26d34547b8451615bb9b3683"18446744073709551671  -040000000a5584cd3ae3cc44d0ea0dcaf0a54ab43e9d70a9548a2a07fdff551d862b787e86fdb4fad7d676ff2650adb30fbb8deb3674121c2de01402ddfec22535cf74fdb13a8653ffff7f2002000010@11c6d8ab6c838ed64b91a71aa83b0ed0bcc598d47796009333816c2ce2feb2d3"18446744073709551673 +0400000083369bbb151645b84745d3262a5c60875b25b8276fb52d6ae45e8bca71a3a425d344de9b73ca7eaf357e7b8f595bd51e2781802bc791410fcb963f15fa539e658c3a8653ffff7f20f2ffffef@403d5fe929bd05fe6b7ee3fb6d991f6046e41a1e0c8b89b2adfc189b3632c86b"18446744073709551673  -04000000d3b2fee22c6c813393009677d498c5bcd00e3ba81aa7914bd68e836cabd8c611f9b762d5c3116c62c4b7574e11cde2d652041c1d1c81ba2262be0be97a476968ab3b8653ffff7f20f2ffffef@5b3d715cdb823b9b96cf617473c5a9e92025789f9a5666642c098c615d1d6d81"18446744073709551675 +040000006bc832369b18fcadb2898b0c1e1ae446601f996dfbe37e6bfe05bd29e95f3d40d4a5b6c6ed062733059b3a4b5541f0bc91cab2cc6037b2cff09aa7dac3519b46303c8653ffff7f2001000020@7de54580a329dae57448fbe1596833b6864b0b442627ed5556505de5872ea053"18446744073709551675  -04000000816d1d5d618c092c6466569a9f782520e9a9c5737461cf969b3b82db5c713d5b47b470b1e5b10cc0d308c8d3d69e38975e0d70d628fc0d1967b4ad22208cdb6c0a3e8653ffff7f20f2ffffef@1e5de3df1de9d04e33d10d32e5b140dd9fd949e726f4c0f25d3c778333acca6f"18446744073709551677 +0400000053a02e87e55d505655ed2726440b4b86b6336859e1fb4874e5da29a38045e57d571f280f53d3e87b42e0e91f683611a36e9cf09212fb68e70f51f19c67710ad7cf3e8653ffff7f20f2ffffef@2543af4a6a9039f6e1a185fa257b587a6097e96ef324e39cc9a62658a9d8dd7d"18446744073709551677  -040000006fcaac3383773c5df2c0f426e749d99fdd40b1e5320dd1334ed0e91ddfe35d1e28c3192550b11b276670f175c29c09167f9056a551c8a16d40ca79e6450e93a242408653ffff7f2001000000@5b4033a52565d09b0affc07d6b4c95e818c41714476c3e1c7a049c4bf679c2ba "18446744073709551679 +040000007dddd8a95826a6c99ce324f36ee997607a587b25fa85a1e1f639906a4aaf43250c632d9c3710f3eb4bb7ce6956b6f222f8df82ae2b61a55fa0e0100c8d9cfad719408653ffff7f20f4ffffef@6378eecda00cb62445d15ca366a78d660faff516ce505366792348f22934c630 "18446744073709551679  -04000000bac279f64b9c047a1c3e6c471417c418e8954c6b7dc0ff0a9bd06525a533405bd7b234c7f5de54f121d31914bdd17348aadef573ab49bddadb5a885d7d73258953428653ffff7f20f3ffffef@4cdd11eeeeab2b17a107aab1cd4c29054b0502e612caa68bbfa9c2de85c0ff61!"18446744073709551681 +0400000030c63429f2482379665350ce16f5af0f668da766a35cd14524b60ca0cdee7863a5313e681a4e8109c07ebee9404f3031731524eb44cee3029c4e1870799a32a145418653ffff7f20f2ffffef@14a2f6c9d4751d4e719aac23dadc0ef2e9cfd820748b2ab096e21fa9ae98c0e5!"18446744073709551681  -0400000061ffc085dec2a9bf8ba6ca12e602054b05294ccdb1aa07a1172babeeee11dd4cbc0d06227947c7c5ff26548a1f8650902d7a2455cf1906a1cfff64ac61e12f586d448653ffff7f20f2ffffef@3ea5242b2db58f8324a1e89c3f3d14605bd8ae49e154b4fc937a90e5f373951d""18446744073709551683 +04000000e5c098aea91fe296b02a8b7420d8cfe9f20edcda23ac9a714e1d75d4c9f6a214744b40c25765a91f40ceb2fe9a58827e22beebda7560cb747d61bcc46fcd42f868438653ffff7f20fcffff5f@7dd1f0298f296d8ed535d191279b250289950cd60fa0b3ccc6a613b8a4f48236""18446744073709551683  -040000001d9573f3e5907a93fcb454e149aed85b60143d3f9ce8a124838fb52d2b24a53e872380e88ff9b9d37562e87abc7a71369e317e016782e4f11b4c02857416edd128468653ffff7f20f2ffffef@78f908fb52139555f8428833b2e2dc06960d595ac63e23de2ed38ce902052394#"18446744073709551685 +040000003682f4a4b813a6c6ccb3a00fd60c958902259b2791d135d58e6d298f29f0d17d9c5b827124777cec59b89f7dc0bd57074848f4932edf3ac01d1c230ff91e63bd08468653ffff7f2001000000@5abf512a807c3e095ce877cb12ae73dd7666c61e38d3f5c3c425827807ce9fe9#"18446744073709551685  -0400000094230502e98cd32ede233ec65a590d9606dce2b2338842f855951352fb08f978a02ce78463c91b9e628c1e5f8ed85d3eed98bc22b75c223427c63e0dac25cb6789478653ffff7f2001000000@43b746cf60b4c02128bdb8511dd797704c119aea5d9b71af14fb4e1a5a9a3f0b$"18446744073709551687 +04000000e99fce07788225c4c3f5d3381ec66676dd73ae12cb77e85c093e7c802a51bf5aa56ddc7d517fedd379311947ee27b933c7bb414dfe9c5aa24845ccdb20374c94ac478653ffff7f20f2ffffef@6231eb79f1cd97d4b1e6cab3f0a2f88b289c6ee8002158cd7e0e7bd163ccb2a3$"18446744073709551687  -040000000b3f9a5a1a4efb14af719b5dea9a114c7097d71d51b8bd2821c0b460cf46b743b92af5d333ac2bcb0bf643fb82c28da1ae2c05d54e54a95ad56cca5a89cda151d2498653ffff7f20feffff2f@42a992db6419a0877c8f6e84e3bdcf99efbb54169a562180a96140ba01d6a7a3%"18446744073709551689 +04000000a3b2cc63d17b0e7ecd582100e86e9c288bf8a2f0b3cae6b1d497cdf179eb31621312e9c57bff7f0b36298fd988a99d097f3e316cf430b56a59ed0a305fedfb3b96498653ffff7f20f4ffffef@668c4875691c9dd1bc959e2dba332e65b0b723e824f41d43f271b14656736378%"18446744073709551689  -04000000a3a7d601ba4061a98021569a1654bbef99cfbde3846e8f7c87a01964db92a9427da649c2b3e3023b1f645755bd25652064e67f83c7de222f1157c0ef94668804034b8653ffff7f20f4ffffef@627c39d441aaab05ec1e865239c218701d6a44be3d4ff599520b39ec8e5ad174&"18446744073709551691 +040000007863735646b171f2431df424e823b7b0652e33ba2d9e95bcd19d1c6975488c66992cc927417520f43e0ea324068d19a9d25512bde5552f40eac862491b7565295a4c8653ffff7f2001000010@3d147ebc2fdc075632a413600ab4350a251e4b62e2a81ca40480ed807f7dbf93&"18446744073709551691  -0400000074d15a8eec390b5299f54f3dbe446a1d7018c23952861eec05abaa41d4397c6236cc487b6f33c9e805c2158ef1ee6922d0723d78f45044908e67f3b6cd0a83d2084c8653ffff7f20feffff2f@74587150d81d5a249e96070469737936a74ff317a43f5802cb30e7ba2e6b0e22'"18446744073709551693 +0400000093bf7d7f80ed8004a41ca8e2624b1e250a35b40a6013a4325607dc2fbc7e143d5bf009eeab7459a7b163da617086180aac68c6945e1b16cb338c9772f07c4a00714e8653ffff7f20f3ffffef@3de369e856e9566f7cdd8e9053eca61a185c7c20cd7dbbd2191cbafb0cef4457'"18446744073709551693  -04000000220e6b2ebae730cb02583fa417f34fa7367973690407969e245a1dd850715874d47099e6445bcb0c3cb3159aa160d0ccc6383c850d6a1462eec538cac44e7bc3944e8653ffff7f20f2ffffef@7cc5302f89f5d05c7329ef9e530d9bf62bdc1d5e161a776afb6c6750f3d97c9a("18446744073709551695 +040000005744ef0cfbba1c19d2bb7dcd207c5c181aa6ec53908edd7c6f56e956e869e33d30a61de4b61137cb75a72c36e9b161c93f6103e577b072573b87f6d464481b2bc54f8653ffff7f20f2ffffef@2711fd167d851bfb245c97f36b3cf56bcf830ee104bb55737036c13ae923f4ec("18446744073709551695  -040000009a7cd9f350676cfb6a771a165e1ddc2bf69b0d539eef29735cd0f5892f30c57c6681076a70ddac986397ec889dc29605b74ebed9ba0a43daa76fe4e601ae27c7864f8653ffff7f20f2ffffef@7ab25a745984d79b00838329c22723fc154346f812b7f8753c5a573c9c2d650e)"18446744073709551697 +04000000ecf423e93ac136707355bb04e10e83cf6bf53c6bf3975c24fb1b857d16fd1127a1455825951815362840e1e0355c221ae8fd07c4e8fd6a3dac1222b6620579d51b518653ffff7f20f2ffffef@083c94d1e9aab73015ca451cde310d96114d852902cda66ec275dc50bead5f52)"18446744073709551697  -040000000e652d9c3c575a3c75f8b712f8464315fc2327c2298383009bd78459745ab27aaed8d680b94a228fd1f53818d6b8bbfef330ba310e459ba659af6e30ae2edc8648528653ffff7f20f2ffffef@1514748207a69bf85b39e094ab8832f817afd7c178b8ab3b33567ad18a614534*"18446744073709551699 +04000000525fadbe50dc75c26ea6cd0229854d11960d31de1c45ca1530b7aae9d1943c082b2e31e46221cd380572572fbf8508b53a7c78d683af6e17f43b4ae8da6526e0cb538653ffff7f20f6ffffef@358d86ac483b120499130723cd6fa1cfa0a1c85183ec4b4e1b4ce94118e07340*"18446744073709551699  -040000003445618ad17a56333babb878c1d7af17f83288ab94e0395bf89ba60782741415249a60f79cd30798291c7bc4de94f9722ff59daa0e66af4eb734db9d6b8c63eab0548653ffff7f20f3ffffef@6843cc0f1b3df911e37967b0c81551ee00d4af6042bbe4c210812483bc1bfafe+"18446744073709551701 +040000004073e01841e94c1b4e4bec8351c8a1a0cfa16fcd2307139904123b48ac868d353982a60a9259edc7b5a289637a8d16daa857331f1a07fe7cec31f960445195ec07568653ffff7f20f4ffffef@4bbfb4f88a9ca3db23e2434c314427079240bbc5bb4cd0617d106a8218c8d65b+"18446744073709551701  -04000000fefa1bbc83248110c2e4bb4260afd400ee5115c8b06779e311f93d1b0fcc43689f25a887a23a890210873f1321d0556299aab7280ee96d019df2d230d0418d509b568653ffff7f2001000000@1a694a8d8209e42d55c6222f2c8cf553934fd193277946401df33a6d5d07aa1a,"18446744073709551703 +040000005bd6c818826a107d61d04cbbc5bb4092072744314c43e223dba39c8af8b4bf4b4f901ab4e7c819c024697809a74a98a6d60953b239f8d0cf072afa0e02a14fff52588653ffff7f20f3ffffef@5cdf48093ed9163c135a1048bddda4fd609d0ca804315decdb63d755087970f7,"18446744073709551703  -040000001aaa075d6d3af31d4046792793d14f9353f58c2c2f22c6552de409828d4a691a3c56d5551eacfc9545f5f864704a603d15d5995f2833dd22c54ac612c366432892578653ffff7f20f2ffffef@571fe47b58fb292bdd6da91e48c8fb10a1c5c4ecde147b79e66d8cbb6aef9f4d-"18446744073709551705 +04000000f770790855d763dbec5d3104a80c9d60fda4ddbd48105a133c16d93e0948df5cf00afba45e61ddc3b44eb9970eba577df135fc6677381211750d881012d8ea6c355a8653ffff7f20f5ffffef@29331c24f2207953537c6ce1561c3aa89671d9bcc2f08cb688c78f79c0671319-"18446744073709551705  -040000004d9fef6abb8c6de6797b14deecc4c5a110fbc8481ea96ddd2b29fb587be41f576b84bfd48d9579056f6c715ce6ae297f887a29f5bf2f18b684fdae724d481797d4598653ffff7f20f2ffffef@6dee23537f49b0568fb0a61a7faa01af62fda22fba0b835206c5120c98ed7451."18446744073709551707 +04000000191367c0798fc788b68cf0c2bcd97196a83a1c56e16c7c53537920f2241c332905c2fad784194bbf12688cb0df118feac74d95fa78181e2632d3feaa3fecaca6325c8653ffff7f20f2ffffef@0bb723cf4da8204a96685d3c70cca0e7a1e70c9c44a23066856fe2d5295fc3d2."18446744073709551707  -040000005174ed980c12c50652830bba2fa2fd62af01aa7f1aa6b08f56b0497f5323ee6d7b71b6a3dda4f3df534879e8c176cb65fc69aea327a56a4515adf3dfa9d210205c5c8653ffff7f2000000010@116f81ad5bdb87017acb0797be53c17a3b65126bee05c66e5e05b9ef62b7a74b/"18446744073709551709 +04000000d2c35f29d5e26f856630a2449c0ce7a1e7a0cc703c5d68964a20a84dcf23b70bfaa093b99d38f3d8f461d2bce6258c75863cf51f9edce3f002d0772077869dae385d8653ffff7f20f2ffffef@649cafc262d123861cb6826a50880e9659e7ca97a14036f0518ac42b1ff2ad25/"18446744073709551709  -040000004ba7b762efb9055e6ec605ee6b12653b7ac153be9707cb7a0187db5bad816f11a839bf051ac7b0ae454d398d1d2305bc0ebe55a4ce1b3b230671efc40ee83e29635e8653ffff7f20feffff2f@6487b8984d09c88ba2d07a661a2491d9f4a7a55a18491f923e7d33cb181b41800"18446744073709551711 +0400000025adf21f2bc48a51f03640a197cae759960e88506a82b61c8623d162c2af9c64e3ce8739e181a772f7ec91e0b0323938bd5c0ab64882857196f26d141d73d75e345e8653ffff7f20f2ffffef@3e967131b9a8f15f856ee092a21498dd363013a1935c62d64cc30d7718c4a7990"18446744073709551711  -0400000080411b18cb337d3e921f49185aa5a7f4d991241a667ad0a28bc8094d98b8876477f65174015066077c63d6ac8c2ae89388313e95b2b6b822237378ddca4dc490e95f8653ffff7f20f3ffffef@35aeb5883cfbabb878afab91adb1ec2063ff232e115a580dbf39edf031795c271"18446744073709551713 +0400000099a7c418770dc34cd6625c93a1133036dd9814a292e06e855ff1a8b93171963e8f13e55d25a0e1a90e141699b4cae87ff819da1bdeb5b4f9bef89d93eccf28b19a5f8653ffff7f20f2ffffef@7d71919e05e138857cee2e3e96f357ee95f62db22f997244006d2a91b491bf551"18446744073709551713  -04000000275c7931f0ed39bf0d585a112e23ff6320ecb1ad91abaf78b8abfb3c88b5ae358293d00da058b215d59f508c18d5cb4c8d50cea03d87925e476c4e247f66ad606c628653ffff7f20f4ffffef@016232ce7ef9e9cb458e0336ec4f32822fc452734c9cf8ff968c49f94ec461172"18446744073709551715 +0400000055bf91b4912a6d004472992fb22df695ee57f3963e2eee7c8538e1059e91717d58f2b2ab6b949ffb025ae2fc205a4aa743531549fa7c67fba3249daf269052a300618653ffff7f20fdffff3f@52c30d53ff19bc6617a6d6aed541d5530d5593f91139d50a39c32c69650d75f62"18446744073709551715  -040000001761c44ef9498c96fff89c4c7352c42f82324fec36038e45cbe9f97ece3262016220bf0931f878f731ef3d32a19fa796d3134b395224d9c89a3bcc9639d4bedd63638653ffff7f20ffffff1f@49dd26a3d6f3cd7452d6adde754c5a5c19ab719f1f3cb072a803cc94726261c93"18446744073709551717 +04000000f6750d65692cc3390ad53911f993550d53d541d5aed6a61766bc19ff530dc352f154becd973b08fff886453139dd8ede795089f5c95a3c2f7e15778cdceed556c6628653ffff7f20f2ffffef@031f055f8f236fc79f0778e9b881bea8e70534188b4e643dc2d73eeeaa9731153"18446744073709551717  -04000000c961627294cc03a872b03c1f9f71ab195c5a4c75deadd65274cdf3d6a326dd49277e7cb51aac7ce737df99b78f174248f83e20f54393de8548b817145179474abc658653ffff7f2003000010@68c77ecf15f703aa7c6ac3e96cb6813ec1175eaa51e17d86e60c2f9aa26e53044"18446744073709551719 +04000000153197aaee3ed7c23d644e8b183405e7a8be81b8e978079fc76f238f5f051f03fdf9472fa7a6b0d01f72b5df5a1fa0287ead6325438ba75eb82ed8ce8f53dbcc6b648653ffff7f20f4ffffef@67b6795906eaffb80c01ab436deabe481f22202c6e2e7fb1ccd82e7bd70b74dd4"18446744073709551719  -0400000004536ea29a2f0ce6867de151aa5e17c13e81b66ce9c36a7caa03f715cf7ec76861e500468c9e93ef3d6a791b824e34b6c025f5d58959e83dd01e32e817b7545460688653ffff7f20f3ffffef@0f43fc37e17fd4321e833fc1f989929520225202c48ad3cfc1502096d1b92d0b5"18446744073709551721 +04000000dd740bd77b2ed8ccb17f2e6e2c20221f48beea6d43ab010cb8ffea065979b667d5640f6ce7b5e42db67dccbf67c12f138504a35ad91bab251224dd4ccbea387942668653ffff7f20f2ffffef@3315dafec7dcc6294957e9b3fc4fac2fec7fe902d6afbbf298eda13cc6fb172d5"18446744073709551721  -040000000b2db9d1962050c1cfd38ac402522220959289f9c13f831e32d47fe137fc430f19a875a05220dcddf88b524dde1e0005e79bdd535b3b3dd01e1c8cd995c9321f626a8653ffff7f20fcffff4f@37bd78026d0e6d787b0cb9316eff371a032e77d3d28dc7db5604a1fb6dac955f6"18446744073709551723 +040000002d17fbc63ca1ed98f2bbafd602e97fec2fac4ffcb3e9574929c6dcc7feda15335148ed500170db7d5761d0f27760bba565fa8af59e4e7ec871ff4576608ab38aef688653ffff7f20f2ffffef@48ec57c2aec0cebc59d41d72d036eb15f529b3ed6eda5018da493da58bf35bf26"18446744073709551723  -040000005f95ac6dfba10456dbc78dd2d3772e031a37ff6e31b90c7b786d0e6d0278bd37df2d56ecdc2e81a7a26bf9cff31ba4842f4ba3603f00bdc2f0afeb39afb72762016c8653ffff7f2002000010@2c4473838400f146b874ae79c1b08e1ec650fed38d326e1bb534467d5668e59c7"18446744073709551725 +04000000f25bf38ba53d49da1850da6eedb329f515eb36d0721dd459bccec0aec257ec48a601b10286a275206b0afece369049cecca67a368891b82513a55757da8a51f6676b8653ffff7f20f2ffffef@6be0dc51d81b26575ef15ebd02d9284ce868b20f481bf97e9d75ded4566a00797"18446744073709551725  -040000009ce568567d4634b51b6e328dd3fe50c61e8eb0c179ae74b846f100848373442c9c175ed9c882780d7e7e7616dae2240c25cae374bfdc8b7d3299d9eccca7e17f1d6d8653ffff7f20fdffff3f@50e7c5e66accce51776c686c0b9792320aeba1e9b98c968dc25d5e146719cb4e8"18446744073709551727 +0400000079006a56d4de759d7ef91b480fb268e84c28d902bd5ef15e57261bd851dce06bd25323c30c9245945e7ed71f372271cfca740174f293afa4c462024c58ae54a2906d8653ffff7f20f5ffffef@3f5a0430f7dace4642782755507b60aacc6ecd2269e7f4f2005bfd8311a2fe318"18446744073709551727  -040000004ecb1967145e5dc28d968cb9e9a1eb0a3292970b6c686c7751cecc6ae6c5e7504af4507c20a93f89eee3cab629a411f05f886d5738b9f10a6773b7f9d3c3cdc2c06e8653ffff7f20f2ffffef@5bc19fc9956bd38b9659acce3d121c5e4a9145dd65663655ad676e75c9f1c56d9"18446744073709551729 +0400000031fea21183fd5b00f2f4e76922cd6eccaa607b505527784246cedaf730045a3f0e21b5161d1b8a624335801f3f61c872636c816be70f4473e9fbe61907f12b58db6f8653ffff7f20f2ffffef@6338d16f92980389bedef9b0a4556510d6d0cf86b58e866c7f84be15df6301a69"18446744073709551729  -040000006dc5f1c9756e67ad55366665dd45914a5e1c123dceac59968bd36b95c99fc15b7df895a2408d2095d4bcb4a34f1cbc63598989871deec59f8adcb760b1a4eaf766718653ffff7f20f3ffffef@62d83fdfac9adb6414938d292f597a0f78a0cc77695c32c9e15a9801d50c1b83:"18446744073709551731 +04000000a60163df15be847f6c868eb586cfd0d6106555a4b0f9debe890398926fd138639b749f4c185ab26e9a773d385b9b358b3c0292831e9bd26e5412c8be8cf863166a728653ffff7f20f2ffffef@2231410e16307d27a604c8b165f5e2ccab417d6dff646a765931d35c6418f048:"18446744073709551731  -04000000831b0cd501985ae1c9325c6977cca0780f7a592f298d931464db9aacdf3fd8622152a2d70c1260e9c18cadc976a8e6efd3d99b3e95a9f4a814b77d9b101e389b00738653ffff7f20f2ffffef@7c23d4e11a93d3b8ed0a8e8df0f00ead84f3eee55183519d7c51ae1c77c46315;"18446744073709551733 +0400000048f018645cd33159766a64ff6d7d41abcce2f565b1c804a6277d30160e41312278188274e44eba59c0b6254b091578f965686625ad05d4349aaa791ff1eda6ba91748653ffff7f20f2ffffef@70fcaf733d430eae040b452bcfb5a177ff4b0dbfee9a3659608e52dbc66bdc09;"18446744073709551733  -040000001563c4771cae517c9d518351e5eef384ad0ef0f08d8e0aedb8d3931ae1d4237c2ee75c4bcce00054f885ea1d285805f93cc351fc76b7f91b81b1eda740baf933fe748653ffff7f20f2ffffef@28c7b6abfee32346cbce054658f6f03f294a537f998f960d704b2b13eb3ab34e<"18446744073709551735 +0400000009dc6bc6db528e6059369aeebf0d4bff77a1b5cf2b450b04ae0e433d73affc70b7c7d4904fa171fa7e51ba8154eab96ba903311d9de808782c1560e32e7ac30792758653ffff7f20faffff6f@7a0b201ab40b53ff479e2a6dc706772abd69ba12846ed41f2e959b7f70caa5f4<"18446744073709551735  -040000004eb33aeb132b4b700d968f997f534a293ff0f6584605cecb4623e3feabb6c728976015a1120790ba03eedb15566e985dd10a1d4f0f0afc2a5546432627ebba983e768653ffff7f2002000000@215f540d0cb0bf7d1250c45dd2d03ed706434fab948a301e66d1dcca9454a076="18446744073709551737 +04000000f4a5ca707f9b952e1fd46e8412ba69bd2a7706c76d2a9e47ff530bb41a200b7acc02dd1dc2f5b05379be7e7e648cb0c12a033002f0d5cb6b7a880d9bfcfe2cf9c5768653ffff7f20f2ffffef@1cee0cebe4a1eebe4f87e25cccac881b450867611c094ede91e8123343106196="18446744073709551737  -0400000076a05494cadcd1661e308a94ab4f4306d73ed0d25dc450127dbfb00c0d545f219086ac0f8f2a139dce7112cdd607354ae80c4be66d8aa6b5415c0eb92a88293219788653ffff7f20f3ffffef@7aa27f5122c6d554a94bb761e36eb7a59d39ba2300cbc5f582547f6ee616a871>"18446744073709551739 +04000000966110433312e891de4e091c616708451b88accc5ce2874fbeeea1e4eb0cee1c7ed74aa939f52bd5cc47ccab9c72f1a1871b3832cbdad6eb82aef720aff3804190788653ffff7f20f2ffffef@63db9e9d34e0f62691b15d50241c83182b4e55751d239fc1d55dcb1cff24c4d9>"18446744073709551739  -0400000071a816e66e7f5482f5c5cb0023ba399da5b76ee361b74ba954d5c622517fa27a82cfa7b35ec336f818804a665c84da80504530ca0a577632ee468b42ae7cfa565f7a8653ffff7f20f5ffffef@6f18a42c3a92c48a03cf9c6331de7d673ac8028d5324a341e8192d9458f272e8?"18446744073709551741 +04000000d9c424ff1ccb5dd5c19f231d75554e2b18831c24505db19126f6e0349d9edb63bbd535cbe076203528a9a834aa3191c48cb03817174e7aaf8a30f0bbc456f287ac7a8653ffff7f20fdffff3f@33a8e586d43277b0aac45746add5ec270d2a6c09bae3d7a62d98b63dcc458371?"18446744073709551741  -04000000e872f258942d19e841a324538d02c83a677dde31639ccf038ac4923a2ca4186f6e76ec4c39c69518c7b7b68da9fcf239ae4f2634157278934e1345641def5e21a37c8653ffff7f20f2ffffef@54f09ba20704c59a5ab15bd2049af18afe7788081a7d2bae431a505d2198798b@"18446744073709551743 +04000000718345cc3db6982da6d7e3ba096c2a0d27ecd5ad4657c4aab07732d486e5a833b96ef91b02d4e80003483754b850b6bb738200b0a2d86568c845fb9d65902584d07b8653ffff7f2000000010@3ed82afacf17d50ccd93381c051117f828318e3339d3dd5bb7c836465c6ae28c@"18446744073709551743  -040000008b7998215d501a43ae2b7d1a088877fe8af19a04d25bb15a9ac50407a29bf05477782d8593c8cda2c3b5ffffde47c2e598bc3b60835573b796872ce740fbb7e3d47d8653ffff7f2001000000@48e99f99eda40a564d621c7c6c3ec673c2ae89eedb7a8021f03808f0e3402095A"18446744073709551745 +040000008ce26a5c4636c8b75bddd339338e3128f81711051c3893cd0cd517cffa2ad83eda373ecb0d70b620435ae4b56f6ba317e8184adc14a69dca657c126b66d453c1697d8653ffff7f2001000000@2ad787c8d377a479f9c3c12e4e91a43eae0873c919b2ab8cfb9bd862d8fdbb16A"18446744073709551745  -04000000952040e3f00838f021807adbee89aec273c63e6c7c1c624d560aa4ed999fe9482ee009d9414545d54c2fc3da8fb0c060ddaf9186bf4e247938add75b71d8f45637808653ffff7f20f2ffffef@06bd9d747a067062382139c51306f156eb3422b8fcddce100b36786995b41a97B"18446744073709551747 +0400000016bbfdd862d89bfb8cabb219c97308ae3ea4914e2ec1c3f979a477d3c887d72a8a859dae90d8c4a9b7afb5a854ad5c4daf3cd2262fa5dedb91571c3bb7f6055dc87f8653ffff7f20f2ffffef@60ad0d6a0b2c3c840f83b91fed2cdf89753ce497b867b24cf09b8f903b62ceedB"18446744073709551747  -04000000971ab4956978360b10ceddfcb82234eb56f10613c53921386270067a749dbd061b8341c06408d76cc6ffa36014d17f0aee21ca6b6e9c572b70a9e4b718fe50ff41818653ffff7f20f5ffffef@19abdb89091b0388a9107ce01ec9cd2cc7491c014353b8e1bcf80a575a506a6fC"18446744073709551749 +04000000edce623b908f9bf04cb267b897e43c7589df2ced1fb9830f843c2c0b6a0dad608e8564873d2237c544a1bb102262a413e2d087c8a13307fea38b518a170074bfaf818653ffff7f20f5ffffef@1706ddec967ab1a8be773aa26482a4837ba3943431622455fd240839a3ec3403C"18446744073709551749  -040000006f6a505a570af8bce1b85343011c49c72ccdc91ee07c10a988031b0989dbab19e6799ef57dbb9e5cb7b1f13f2f55404129cd792fe3cea92a65f53fbcd66fa6c78d828653ffff7f20fdffff3f@3fd976b0795fe4279110bad123f7d298133e613f333beb588c54cc0280b11aedD"18446744073709551751 +040000000334eca3390824fd552462313494a37b83a48264a23a77bea8b17a96ecdd0617a4ff7bdb5153c6e2962f3ad2b8e5d3e388e963302b8ced8c7b46fbaf5ff33624d7828653ffff7f20f2ffffef@7bb11fa2e49c86446762fbab6927feb0974c2fe9a6cf0e938395bad1324489e6D"18446744073709551751  -04000000ed1ab18002cc548c58eb3b333f613e1398d2f723d1ba109127e45f79b076d93fafa0fee9f48b748787286ba989f9c72c4eefb12101f34c5690e1ee352ddc796c17848653ffff7f20fdffff3f@45a0f51f0bc6dbad4431206802817d896ed9cb07fed98cd22b4ca4826d2a8235E"18446744073709551753 +04000000e6894432d1ba9583930ecfa6e92f4c97b0fe2769abfb626744869ce4a21fb17b1b4773f27a491bf2fd720cee9a449aab2c64548cc52c1d526ca6c4b8e72fa93159858653ffff7f20f2ffffef@24b02f8c40b1a7f367de9e74eb4af74e730db806df42e530b0ac06c7c69321f6E"18446744073709551753  -0400000035822a6d82a44c2bd28cd9fe07cbd96e897d810268203144addbc60b1ff5a04580e26f08abfd947df6001a8ce397f4560a69d7735cc1ec0365743711c056bfb787868653ffff7f20fbffff5f@6df8cef133173638393a690656ffb3339fc22d3615ab915f458889a9acb34cd3F"18446744073709551755 +04000000f62193c6c706acb030e542df06b80d734ef74aeb749ede67f3a7b1408c2fb024b8d9bb3b30f4dc45d97e455facfe74fe249be4a094a26d48af0d25d4a76a16d18a868653ffff7f20f3ffffef@25b09e1d86dee966f03663c17c5f95661ec0974e226bd9e9ba9c30c61bc5384fF"18446744073709551755  -04000000d34cb3aca98988455f91ab15362dc29f33b3ff5606693a3938361733f1cef86d189dcad598a227c01912dd0e8231238595e0d0c8c05acbc58c7f3cffb8e0fe8239898653ffff7f20f2ffffef@632ed4c825a3c1f5371a4bf263ee471d0cbb5e768910d9bcd8d7802113c0eeeaG"18446744073709551757 +040000004f38c51bc6309cbae9d96b224e97c01e66955f7cc16336f066e9de861d9eb025ff41b7d07941b45db158a93b57d4e15b52c163524686b9c44366343d471bece0d5888653ffff7f20f2ffffef@253c4b1c49cbcd7ec76575e3c9c84f64f742323d9313aa3643d2798968ffa3e0G"18446744073709551757  -04000000eaeec0132180d7d8bcd91089765ebb0c1d47ee63f24b1a37f5c1a325c8d42e637556e132c1620a6e8e9fd523264183104faadd76f0bb038984cccdfda6ed03a8238b8653ffff7f20f3ffffef@0113306ee49ca3606642b484403fa078b18507541d8ef5c744d7b177b4aba7c5H"18446744073709551759 +04000000e0a3ff688979d24336aa13933d3242f7644fc8c9e37565c77ecdcb491c4b3c25322c01f99923b094307cc7fd111631aa142e6b6379994b48675a2c41f388959d768b8653ffff7f20f2ffffef@28f52b91576b0a49258c3597003cb3d2b963bb00129afd48f32cadf9a0e5506dH"18446744073709551759  -04000000c5a7abb477b1d744c7f58e1d540785b178a03f4084b4426660a39ce46e30130145cdc99f15ec14eeb60da6719608b095e8b938151ae027c7f6e9b7ada00a643f398d8653ffff7f20f2ffffef@114b17fa958f2762b2bd61161d7ec1ea9d63452792515c43c69cd91f2f362fccI"18446744073709551761 +040000006d50e5a0f9ad2cf348fd9a1200bb63b9d2b33c0097358c25490a6b57912bf528d7e5c9e1016dd9dc5bbccc9a588c44e14c44560f9ed57921cc5ce6388f4ff999798c8653ffff7f20f2ffffef@2a6d1f18126174c0e707e61998c2a3bab7ce9d6d35bc1e72f1df55ef74a59a66I"18446744073709551761  -04000000cc2f362f1fd99cc6435c51922745639deac17e1d1661bdb262278f95fa174b11b37e15e22d1e81d8a9b9587fecd65de8bca0508778f2af88c8bb0129fc5dc017888e8653ffff7f20f2ffffef@39de088d414b3ab96e7baeade2541ba7dd36a4657c0f19261e764715e8a7aed6J"18446744073709551763 +04000000669aa574ef55dff1721ebc356d9dceb7baa3c29819e607e7c0746112181f6d2a9fd9d1fd807330c7d422457fb16fd0d3fd0aaaa0561bef598243c5b0564ab10df08e8653ffff7f20ffffff1f@380460db48c695a24a09efa8ab23c307c145c8f00bbf5798de2c53b8577b210aJ"18446744073709551763  -04000000d6aea7e81547761e26190f7c65a436dda71b54e2adae7b6eb93a4b418d08de39c9614627822b7590e6125ab71875ec64bafe74b6f01b28286dca2d4a2043c1d736908653ffff7f20f2ffffef@63afb2aae6bab6cbbb11ee83d8b35b8ffc13d4cdb87ac76fbbb2195430effb56K"18446744073709551765 +040000000a217b57b8532cde9857bf0bf0c845c107c323aba8ef094aa295c648db6004386e98b7d6122ec458cdf2a38e3b3a573ccb8a776b77701d6c9e2012d996950e8b93918653ffff7f2001000000@4f28d75f8ddf9cf880cd9bcd5bee9d00b6cf166c3bf77c1fa5d9321359584d13K"18446744073709551765  -0400000056fbef305419b2bb6fc77ab8cdd413fc8f5bb3d883ee11bbcbb6bae6aab2af63cdae5843eb8396acab7bf6d9a0f57a800206cd457d3a0e25d1a77fa131a10dc0bd918653ffff7f20f5ffffef@26b5d88fbbd7661e59f456505b73cd293f2489e9b93cf62b202e76dc4a604866L"18446744073709551767 +04000000134d58591332d9a51f7cf73b6c16cfb6009dee5bcd9bcd80f89cdf8d5fd7284fd960bec8d490cdcd7f1324ded314f6e68ed46b1de05a62541320ac22c3b99a3570938653ffff7f2001000000@3a4656113a1ae127e105755c3c2cba58e92fb929fb85a1b3ddb6db841fee5375L"18446744073709551767  -040000006648604adc762e202bf63cb9e989243f29cd735b5056f4591e66d7bb8fd8b526666dacb684626551487cfafb1ca3886e9d38c0033391606e2f20636bdcbe2eac0b948653ffff7f20f2ffffef@530b79557b287f6ab5a22541c54c4340f8515eb8796d60919100d00b7451c2ceM"18446744073709551769 +040000007553ee1f84dbb6ddb3a185fb29b92fe958ba2c3c5c7505e127e11a3a1156463a8a217aa14a9298c433896e68ad5b67ab0d31bd8fe522d4d440150a111ef4c179d2948653ffff7f20f6ffffef@7bee236566109af4b41ef6e7c424f65bebde0c2afb1fd460d734b137c82a1746M"18446744073709551769  -04000000cec251740bd0009191606d79b85e51f840434cc54125a2b56a7f287b55790b538805010b22c9c23f802d2da16a6f26eeb65ea5ecc21eff8f685b95a1860c4dcf49958653ffff7f20f3ffffef@2356276b4d64c1492e944cefb782e87db70b0e2d3645f50fb4061def6214f806N"18446744073709551771 +0400000046172ac837b134d760d41ffb2a0cdeeb5bf624c4e7f61eb4f49a10666523ee7bac513c657d0865c7afc86cee2876d3d7616f9f7a158c819d29cccf45ab8bc060d1968653ffff7f20f6ffffef@24aac85636c004d34a278a2bbfcdf2934eead4da4fe3506ec41d3f78f48325a5N"18446744073709551771  -0400000006f81462ef1d06b40ff545362d0e0bb77de882b7ef4c942e49c1644d6b275623b21df606fe61afdb010e792c09270dc70e1315336ab4de5c88e3a93d7dd74e69aa968653ffff7f20f2ffffef@2bb67159ea1dcc7c72877155be913549586cf2bf62d04cdcfb2e40fe2881884eO"18446744073709551773 +04000000a52583f4783f1dc46e50e34fdad4ea4e93f2cdbf2b8a274ad304c03656c8aa24722185189949c089e93b923ef0366518f79980d8903f09de7c09e510ba3173bb69998653ffff7f20f2ffffef@46528623b99a8983a93393fab065b9cc7db7ee9698acf082264e035ffc5488a8O"18446744073709551773  -040000004e888128fe402efbdc4cd062bff26c58493591be557187727ccc1dea5971b62b6fc8c85ed368d79b781c0f20997c2b531128d599166e338b1804162a6d8e254ab4988653ffff7f20f3ffffef@35af5fe2e2f0293aefaf99c5983aaa7af0cea3f29c910ac9b0832a11089625e9P"18446744073709551775 +04000000a88854fc5f034e2682f0ac9896eeb77dccb965b0fa9333a983899ab923865246e53f9c8f6578788a0ffcd5c46f80959b0eb451f7d0dc8a47791aa368fbfa86b5e99b8653ffff7f20f4ffffef@6015007b318b56a00cdbe847a46287f7d84fcf592429011c4b0a60045e92a1fcP"18446744073709551775  -04000000e9259608112a83b0c90a919cf2a3cef07aaa3a98c599afef3a29f0e2e25faf35226d9411ccd1fc7098e3aa9dfcc6ae86bcd7f246e9af8d836b49bf18acad006f7d9a8653ffff7f20f2ffffef@66c84310e77d13ce6c77fb53c55add8bc7031a6d635b215924a8d16e7c1c4b91Q"18446744073709551777 +04000000fca1925e04600a4b1c01292459cf4fd8f78762a447e8db0ca0568b317b001560437f819d7e4d88921adc62d5d70625201e97bf9cd2a36239118bb938a47ac6e0b09e8653ffff7f20f3ffffef@3dcedf4cfa32006ceae8ca2f8b106b0fbe6104718b5d75924d1435ebbcafb476Q"18446744073709551777  -04000000914b1c7c6ed1a82459215b636d1a03c78bdd5ac553fb776cce137de71043c866ef8994ffece80ed45182ae5498a05aafc6f1d821d9750fd3d69811a797e7bf98fb9b8653ffff7f20f4ffffef@4faa3a0f9d2022a8d3eaf9d8c62d90e3b90397421dacaa0dbeed21824b8903e6R"18446744073709551779 +0400000076b4afbceb35144d92755d8b710461be0f6b108b2fcae8ea6c0032fa4cdfce3df9909c1ced13e55712c642b25263c8ae8d7586a2239c0d28b5fa7e26040116bf1da08653ffff7f20f2ffffef@481fdb10da0d4807f32acf911163a1fa6662c455f9e2950d6dc158dfac041b9eR"18446744073709551779  -04000000e603894b8221edbe0daaac1d429703b9e3902dc6d8f9ead3a822209d0f3aaa4f65f105c7d7a7132ed4e000e8f78940ae2d8529c59a74fa4e475243b27cd1cbc43b9e8653ffff7f20f2ffffef@0ba7e6ecfe632917947d3033ce3a9758d0d808d7541931c6bc3871d3d969665dS"18446744073709551781 +040000009e1b04acdf58c16d0d95e2f955c46266faa1631191cf2af307480dda10db1f486494a840552b1e703fd9cfc92361911107b1e9af1f3dd7014a3e29d64741c277aca18653ffff7f20f3ffffef@5154c3f62ef63755a073a6138bc2e61b69d860624a0fdf68917c85d987e5bb17S"18446744073709551781  -040000005d6669d9d37138bcc6311954d708d8d058973ace33307d94172963feece6a70ba7710aaffc7870a9d256b1d97f627341a795b2205fc71299d933baeaeca9923f07a08653ffff7f20f2ffffef@61e8bdbd77a7f4b4bb3a6a90bfcab4abf4ec8daac757eba968d1c5ae50d21df0T"18446744073709551783 +0400000017bbe587d9857c9168df0f4a6260d8691be6c28b13a673a05537f62ef6c3545150e58d781d158c6f8971a22399ea97ed68f158e7ccf556335762ec8db7ee235e67a48653ffff7f20f3ffffef@5e9e16955ab9a04b25d7bb39b0bd24153c03b7ba80f9877f56993e422ee87b9aT"18446744073709551783  -04000000f01dd250aec5d168a9eb57c7aa8decf4abb4cabf906a3abbb4f4a777bdbde8610b27ddcd865726c5947d713cd6705e8c9cdacd6a58e95d3de5e49da8e6598fbcc0a18653ffff7f20f4ffffef@032cf81eb8e346146fa8689fc6b23dd42678db653fb520cdae9ff7a9ccaa56a0U"18446744073709551785 +040000009a7be82e423e99567f87f980bab7033c1524bdb039bbd7254ba0b95a95169e5e7927c2ca2a01faba9ebc23dbe3dea7e61380d2891af54c075cf0363a55bd53a3d4a58653ffff7f20f3ffffef@0da0adbaac821c082d0f8bde85baf635f32917d819e498aa4c9b87f76e7ca634U"18446744073709551785  -04000000a056aacca9f79faecd20b53f65db7826d43db2c69f68a86f1446e3b81ef82c034038a5d4a09b9e2915d50821ff93f8c65c6d49aab865de787e5545284142df06f3a28653ffff7f20f3ffffef@261ea0a6ad7269ff1fb31885799dbf8ad78db8cccbafd28648527e9996e2cb71V"18446744073709551787 +0400000034a67c6ef7879b4caa98e419d81729f335f6ba85de8b0f2d081c82acbaada00dc8c06a7159d79cc9c795337ddff4f6ae8549c016e684f6491e0070ca09ea97dd38a78653ffff7f20f3ffffef@0fae08b1ad8cb7ff46a8c04ed647101c073fb90d8695e57b5fcdce7d48d1a89aV"18446744073709551787  -0400000071cbe296997e524886d2afcbccb88dd78abf9d798518b31fff6972ada6a01e2617945bced66b2ab98de2564825aed0118d9d495a27a5c7ef6416e3b948270dcd8ea48653ffff7f20f3ffffef@6969f0db62a778f0372b382d7d448e7ee36bd1a0a1b37ebb3c5d48b2a02a4627W"18446744073709551789 +040000009aa8d1487dcecd5f7be595860db93f071c1047d64ec0a846ffb78cadb108ae0f43f1467e60656d91e8b0e142f0a8a1546297b38d989bb1bebb57a2d9e2e005893da88653ffff7f2001000000@2052025bc391917b11b0bd63f4342df6e4e7736ef15f0b083cc02bbc30445dcfW"18446744073709551789  -0400000027462aa0b2485d3cbb7eb3a1a0d16be37e8e447d2d382b37f078a762dbf069694352b3f387055ca020d025eaaa63fd1145859159519359bb8e7c66f68f47a351f6a68653ffff7f20f2ffffef@2958e99b822a5a7683fd7e761174d2fee2e43b1b482f7f02b44f832c5148a101X"18446744073709551791 +04000000cf5d4430bc2bc03c080b5ff16e73e7e4f62d34f463bdb0117b9191c35b025220bae10cbfdcedf5b3115b61b940f303d47965d4020a79e3f9fafce6d1e0b198b04fa98653ffff7f2003000000@241e874738eca9e233720e7d937a137c0b6f4ccc250c9b85f0c57267fceb33d3X"18446744073709551791  -0400000001a148512c834fb4027f2f481b3be4e2fed27411767efd83765a2a829be958291193551658c89742237f512b91e2e36f51b09b2d9db6e3b47ee7c5f0252b55ec32a88653ffff7f20f2ffffef@034a3802b5853465f51fcc2617846eb00ea49f0fa8778afd3a7a41bf58cecf90Y"18446744073709551793 +04000000d333ebfc6772c5f0859b0c25cc4c6f0b7c137a937d0e7233e2a9ec3847871e2463bac0e88e37c49c07ddfc157f4cb2401531ce9c22e559916e2c3d656cac72e458aa8653ffff7f20f2ffffef@114e036c50cba05491a2ad5c0e9146a7a98d4ce85782e66cda9dad2e5ec99383Y"18446744073709551793  -0400000090cfce58bf417a3afd8a77a80f9fa40eb06e841726cc1ff5653485b502384a03cd76d9cd112685cb313c051784679a240223271789c2d5c4f1cee045f20afdc5c3a98653ffff7f20fcffff6f@4ce9a34c0ea54f0f420f0c8eead6b5821f6aea285b409fb9b7ee0763c14bac6eZ"18446744073709551795 +040000008393c95e2ead9dda6ce68257e84c8da9a746910e5cada29154a0cb506c034e11f9c3890a04bad3f83f7b53fd24f9fb57a5d06acf142b646b208ff487c48a88a3a3ac8653ffff7f20f4ffffef@3213e37e30774a550bcd02b34f810a39aca2d231a0028dc81c833c53e6191f61Z"18446744073709551795  -040000006eac4bc16307eeb7b99f405b28ea6a1f82b5d6ea8e0c0f420f4fa50e4ca3e94c8fb9f04bc40feec6029454093e9beec0ca9cbf6365471d3bc8b2df7e9d4f4cd428ac8653ffff7f20fbffff5f@7a5986de5bbad20e605c6edd19ea1d892f92477dd61d39567e54cd4967aa94fe["18446744073709551797 +04000000611f19e6533c831cc88d02a031d2a2ac390a814fb302cd0b554a77307ee313327ff4c3883ad87f7714933320753721fc9f2c36f635de833aab1653cc9ea6b8efa2ae8653ffff7f20f4ffffef@77515d15349ba7fb477be0df225aa10aa2da6bd763bd60be749e7616e68a5c5e["18446744073709551797  -04000000fe94aa6749cd547e56391dd67d47922f891dea19dd6e5c600ed2ba5bde86597a989194589d725cab3115e9afc1f813da215cb6c22fa271b0635d3a12ef318dcc42ae8653ffff7f20f3ffffef@39d2a77813c5820a8dae6f3335b9811f922a4f1edaca0f50ad726b4d6c323e01\"18446744073709551799 +040000005e5c8ae616769e74be60bd63d76bdaa20aa15a22dfe07b47fba79b34155d5177644ec66b66501377861eaa252dc53a2fcc242e0f9a37f42b7a7062d9b51178d0b0b08653ffff7f20f5ffffef@38d5f29eb40a88b2268c10ac9e81d71b898493701a08587cf4e48f53323c4fbf\"18446744073709551799  -04000000013e326c4d6b72ad500fcada1e4f2a921f81b935336fae8d0a82c51378a7d23933b1dca295196ac3b7b4e78da4161fa3fd494b80bdd0181f97fe1ad6f173eafcc0af8653ffff7f20f2ffffef@591ca89a10b958605dbbdd7f095f3a58f0ee228e23c9cfcabeaae4780e73f5c9]"18446744073709551801 +04000000bf4f3c32538fe4f47c58081a709384891bd7819eac108c26b2880ab49ef2d5382b299b8828215a4585c40d1608df80715d02e2010e712a2b81ecebb0ce9cac8d20b28653ffff7f20f3ffffef@0d956610fa10849d1bdea8d54568e0fc6f9ff912399243a39d557116e3475154]"18446744073709551801  -04000000c9f5730e78e4aabecacfc9238e22eef0583a5f097fddbb5d6058b9109aa81c59a24f18283c9a7459d02ead57fdf30616bd2db0a213d97dff78e120923fea3e0ccbb08653ffff7f20f2ffffef@6006bf0663fb14d86d5472671489ef0111e8923bf224a162ec56cda6e6cb57f3^"18446744073709551803 +04000000545147e31671559da343923912f99f6ffce06845d5a8de1b9d8410fa1066950dcb7fa476b844ee08cc173f57857efd8d3da01d41170b191704b8c254c2bb985b1fb48653ffff7f20f2ffffef@35af71edce8f0b638e87f62813c0e384b903c32664605a4c1b53bfb9fd854007^"18446744073709551803  -04000000f357cbe6a6cd56ec62a124f23b92e81101ef89146772546dd814fb6306bf066030e1398f0f670fee7c99b43077ea49fc2b7103511aad9dd7948c0834914f9fab4fb28653ffff7f20fbffff5f@2747659d8f13d81b3f86816caf776d950254069ea46a77a5e44545533e81653a_"18446744073709551805 +04000000074085fdb9bf531b4c5a606426c303b984e3c01328f6878e630b8fceed71af35cf607991696bc6fcb7b6b92dd2e347d0336f5d2b3e2509dfefeb07df36cf47e485b68653ffff7f20f2ffffef@00e558e89117fc6846aebb2e367a5fde6b10b059c401945b23f69f22f82815da_"18446744073709551805  -040000003a65813e534545e4a5776aa49e065402956d77af6c81863f1bd8138f9d65472762dea21274eb7c2104806abf612170e382b31a3e41ff5b6a6bbf5a433641f00f03b48653ffff7f20f3ffffef@091fa0fae6589eafd57c1be3e7d67d72919eb64597fc21632a8827eeac380776`"18446744073709551807 +04000000da1528f8229ff6235b9401c459b0106bde5f7a362ebbae4668fc1791e858e50008f775996c0ebe0b9c36933484fc4450356667fa3117ca8c925d8a8aac56bef2f3b88653ffff7f20f8ffffef@6dc0e7ded70882bb7f98b10fd5edb0b3656b6828dd55e507be21d15f27d7ab30`"18446744073709551807  -04000000760738acee27882a6321fc9745b69e91727dd6e7e31b7cd5af9e58e6faa01f096706c53d6c584afc572738ef4338e23eb1895b4a7c4b051778b1a7b8e2552a280ab68653ffff7f20fbffff5f@3962d6b2af0b80eb8245e93f2a86b31eaa61b1c392a828cdf2a7046e23947647a"18446744073709551809 +0400000030abd7275fd121be07e555dd28686b65b3b0edd50fb1987fbb8208d7dee7c06de4ab7c20d52dabe260a515d5ead17da144028a68b9dc3598e0222d60a12b337ab8ba8653ffff7f20f3ffffef@63f51d9f85dd11c60b77c68c668bdd9741db4b6ac05c11f82f68e714ea003890a"18446744073709551809  -04000000477694236e04a7f2cd28a892c3b161aa1eb3862a3fe94582eb800bafb2d662397cbdfd467868fd7158f33f5131d1f3c7db604838b5875480b57b01a994a83e858eb78653ffff7f20ffffff1f@637e7e2f02efbeb187583e50c5fa5a9ea036a14398ac77b12dc9be4eb1500ca4b"18446744073709551811 +04000000903800ea14e7682ff8115cc06a4bdb4197dd8b668cc6770bc611dd859f1df563badad8eb5a0793ac3f089b432ba1f80a5e303de6735554f054f998438a82d74c67bc8653ffff7f20f2ffffef@4208a04b4e158cbb16ce3d5f3185e19a24364dd850c3ae2e851e598509cb09f4b"18446744073709551811  -04000000a40c50b14ebec92db177ac9843a136a09e5afac5503e5887b1beef022f7e7e63d5b67e6e14ccc829494c40a1b80140168f4d00b38fd34e26d4c87e651661e62f3eb98653ffff7f20fdffff3f@22b9ff28d567e9bfb9b6c98e1a9204b5421aa5b7fba0526f9ced24fd6a334737c"18446744073709551813 +04000000f409cb0985591e852eaec350d84d36249ae185315f3dce16bb8c154e4ba00842bee1f83e291ddb52119fabeb8709b94d8f0679c93b2211985a29e12051ea240194bd8653ffff7f20f2ffffef@52d60b4113ce0b6dff84788535bd795c9630892cec3586c035b2f40932cddb30c"18446744073709551813  -040000003747336afd24ed9c6f52a0fbb7a51a42b504921a8ec9b6b9bfe967d528ffb9225bc152845f4d63127e86c31f9ab0990595fc3445a56103f6c7fb7001c8e1ad34ebba8653ffff7f20f2ffffef@4a6ef46b43e0718fd2ab1ad7eaefae0eb3cd0e29e1fa928061295c57eac8ed55d"18446744073709551815 \ No newline at end of file +0400000030dbcd3209f4b235c08635ec2c8930965c79bd35857884ff6d0bce13410bd652e643e3fc7999aa5c094e5cfb254e84e79ae3c4c277f8e822b9a0a5471c3e49498ebf8653ffff7f20ffffff1f@1d5dc15919f350b57e392ea9a91bdb615a1e9c58ddbdf9f056f81a6e9db9550ad"18446744073709551815 \ No newline at end of file diff --git a/packages/test-utils/testdata/btc_light_client_fork.dat b/packages/test-utils/testdata/btc_light_client_fork.dat index 4fd4f43f..bcd9c4b1 100644 --- a/packages/test-utils/testdata/btc_light_client_fork.dat +++ b/packages/test-utils/testdata/btc_light_client_fork.dat @@ -1,23 +1,23 @@  -040000006eac4bc16307eeb7b99f405b28ea6a1f82b5d6ea8e0c0f420f4fa50e4ca3e94cc791705ad90fa3beebffed3a5b80fd78d95d225d00b048aa1c9aa35a30e856343dab8653ffff7f20f3ffffef@68b6fff9600425b2f2e051c4bc453693c645b7818c75ad46afebbd3aa56e8fb8["18446744073709551797 +04000000611f19e6533c831cc88d02a031d2a2ac390a814fb302cd0b554a77307ee313325ce63eff3da92119e83a63ec3146e226c07f09afa4520bf3466f1333634d442133af8653ffff7f20f2ffffef@39b574494a8f0c5c095f94d5f49fbe0ee38ca9525cd60d83bc47c7c2c0368639["18446744073709551797  -04000000b88f6ea53abdebaf46ad758c81b745c6933645bcc451e0f2b2250460f9ffb6687e2eba328b8a8b991bab0a999f6fe3f05381708ed5d59d3e603291ddc8bce6dfcaac8653ffff7f2000000010@2bbde31bf524742a6620c83cbcbf28dc74391d6935b2eba0cc318ce18d37788c\"18446744073709551799 +04000000398636c0c2c747bc830dd65c52a98ce30ebe9ff4d5945f095c0c8f4a4974b53911914a833c7f22451c2e1005fd557f6e1c86735d619374fad2e22657b00ef06968b18653ffff7f20fcffff4f@5fcbab886cd71206eb9289376e9ceac408a5a226d7cc7120b7029d09d28d057d\"18446744073709551799  -040000008c78378de18c31cca0ebb235691d3974dc28bfbc3cc820662a7424f51be3bd2bc0a0ccdeead203cabe84523c99642acb1562ecbca2bfd1b406a07e20559b2de936af8653ffff7f2000000010@21e6481c222856cc0f4862f92e1bcdf8b26b20e67111f327688e3ad621a7d72b]"18446744073709551801 +040000007d058dd2099d02b72071ccd726a2a508c4ea9c6e378992eb0612d76c88abcb5f74c8f0957effa10a86122add1796b3f686378e8c9aabf0b075d0ae86df7d51acf2b38653ffff7f2000000010@365352a7a10f5a7f8c338585fa8e84f5e726bd5fcbf975a51f4483b8bb79ea09]"18446744073709551801  -040000002bd7a721d63a8e6827f31171e6206bb2f8cd1b2ef962480fcc5628221c48e62104acb034b50a7f25cbb96feabd143768bb14a61edbbe57036a49307f707c7fbf1bb18653ffff7f20f3ffffef@7ee9a141ba406ec3cff758dac096543e98df97cc18dcb70e2c126f2c5016112e^"18446744073709551803 +0400000009ea79bbb883441fa575f9cb5fbd26e7f5848efa8585338c7f5a0fa1a75253366ea9e36242cd3b4506fb04fec1d6a6d688314597f0b6978fef3b8d190197a57c24b68653ffff7f20f2ffffef@6956adc0b09b8577737b94830ce4d1c437c5b79151a3a9acb3dcd0a6c52e4fe1^"18446744073709551803  -040000002e1116502c6f122c0eb7dc18cc97df983e5496c0da58f7cfc36e40ba41a1e97ed53f903d2bd191e69e2eb15d7c0376a0dd028ab16ea10fad9d328c39892137159bb38653ffff7f20f5ffffef@2a576654a1baff27727a484ff9c6f509c557cbb99e3955643b082b87a03355b7_"18446744073709551805 +04000000e14f2ec5a6d0dcb3aca9a35191b7c537c4d1e40c83947b7377859bb0c0ad5669c3e3b827873363953af67998a7d491a1c1aae746eecf575cca01927dccdf9da2ebb78653ffff7f2002000010@67cf42deb41cbffdb697e208ee56c580e4bfc49cd826615b4e4d7455a17921d9_"18446744073709551805  -04000000b75533a0872b083b6455399eb9cb57c509f5c6f94f487a7227ffbaa15466572abc7ddcfc6c2e480b9948eddc9dceca31ca2dfd2b79384e4bec9462e5aa8698de6ab58653ffff7f20f2ffffef@53ad45fa523ef0e3f0e5703148b6843ff7f4ac62a5e5f2d88332d080f3cd6cff`"18446744073709551807 +04000000d92179a155744d4e5b6126d89cc4bfe480c556ee08e297b6fdbf1cb4de42cf67c8ea6462fad26d51fb100f5e76a63d8233015c722b105a31961d6ae77b2bff07b2b98653ffff7f2001000000@5a561bcc6d22959234a477911a939d1de0702982f351445e8ae8453710124c87`"18446744073709551807  -04000000ff6ccdf380d03283d8f2e5a562acf4f73f84b6483170e5f0e3f03e52fa45ad5313bb60fc743e3587451a5c5cfed4af2c2801ef1b18236db700e51e20697cbb5cb7b68653ffff7f2001000020@44089678f2b1511c12b04baef99471a3dc6b98dd6655ce071fc46212ac874aaea"18446744073709551809 +04000000874c12103745e88a5e4451f3822970e01d9d931a9177a4349295226dcc1b565a4a728da07969f14f78cddd9eadeaa27245d3f448621c0dda4718442a8b36966cfebb8653ffff7f2002000020@718d29619a7eb94b44b77774d9f9409a1b044b8c5bba8613d05cbc77ca3b60f7a"18446744073709551809  -04000000ae4a87ac1262c41f07ce5566dd986bdca37194f9ae4bb0121c51b1f27896084424bfa1447493a4ec667d31a464b85f91de8ed82e1e02cd1ab2f211f3462c2a84ceb78653ffff7f2001000000@1c3cdc95f94da749d355e046ae26a21526db16aa50f498d3dc4b9aec58a22198b"18446744073709551811 +04000000f7603bca77bc5cd01386ba5b8c4b041b9a40f9d97477b7444bb97e9a61298d71b109e638363d146d2ea862ad3e685f079575961ffa2785a6ee5378acf988a03433be8653ffff7f2000000010@537d908bd28d39f0bf954470ac3b70ce60d02e3d14cfe2cb721a6862db691517b"18446744073709551811  -040000009821a258ec9a4bdcd398f450aa16db2615a226ae46e055d349a74df995dc3c1c7e097eb4844a62915c79c6284b9c09e2120da53befa4dc17ca1b697b595be20a7ab98653ffff7f20f3ffffef@0e72508e2520e136f54fb64ba14e358808edad4460bd0775412575411e914d2bc"18446744073709551813 +04000000171569db62681a72cbe2cf143d2ed060ce703bac704495bff0398dd28b907d53f6eb786de3527610c9a7b3e41e0a990998e5515768778dab234433b7810bfac7f5c08653ffff7f2002000010@4c914afcc14e3c95c3414f8ee17e2c657ecc651024f1fbc17d56bbc66574f40bc"18446744073709551813  -040000002b4d911e417525417507bd6044aded0888354ea14bb64ff536e120258e50720e260f0462263a0fd77cb738567504fbdea420a8683d6be8592a56afa1fe141aa9dfba8653ffff7f20ffffff1f@53ea789135156209f303443610cf3f4eb2e90b39758fd3be86be98360693fb44d"18446744073709551815 +040000000bf47465c6bb567dc1fbf1241065cc7e652c7ee18e4f41c3953c4ec1fc4a914cafdb452e96ed021d2247f4a205941dc320536885730164e448c0577c90c3bc53b9c38653ffff7f2001000010@009c7b4e3c9065c32497cff257ad822922af6a0cb498e8311a5eac4b653d1ec7d"18446744073709551815  -0400000044fb93063698be86bed38f75390be9b24e3fcf10364403f3096215359178ea5327982a9c124185cc90791fe85280c78b3bd4ab585fa5c31a02e69f7df023ed636fbc8653ffff7f20f2ffffef@2b84a6ad5276471263a8139cb3953fc3512380ec50cc799ace1f529ab3582d7ae"18446744073709551817 \ No newline at end of file +04000000c71e3d654bac5e1a31e898b40c6aaf222982ad57f2cf9724c365903c4e7b9c00e41dbfbd7cba2d36a5cf97f58624a55bb60fb000e25a0108d958ff43dc93ec3f76c68653ffff7f2001000010@495044c8976c8235a7ae3af20f1cfed661ed55c2da1b97987b185bf3e3b897b7e"18446744073709551817 \ No newline at end of file diff --git a/packages/test-utils/testdata/btc_light_client_fork_msg.json b/packages/test-utils/testdata/btc_light_client_fork_msg.json index df81f854..0eab0ba0 100644 --- a/packages/test-utils/testdata/btc_light_client_fork_msg.json +++ b/packages/test-utils/testdata/btc_light_client_fork_msg.json @@ -1 +1 @@ -{"btc_headers":{"headers":[{"version":4,"prev_blockhash":"4ce9a34c0ea54f0f420f0c8eead6b5821f6aea285b409fb9b7ee0763c14bac6e","merkle_root":"463a18f1f5833cc2ca9ba13bba4513ed4d25094c61d9bcb79e54c21518aeaf6b","time":1401334725,"bits":545259519,"nonce":805306367},{"version":4,"prev_blockhash":"18597ed9554bf35b0c7ea3045e8cd5609b61007ebfa7e3002f02e27e6ac47108","merkle_root":"ef6aa4d1edda86f8703b9bd84b22c806b0c20cf42451420af44661317fe54fbd","time":1401335408,"bits":545259519,"nonce":4026531826},{"version":4,"prev_blockhash":"0b0551b9231da1c0e2a0164f3783149ae1ee68b30f4274f75a0787f287a606d1","merkle_root":"3cb07501a422d0f010b9b3f376bd0bed9e974eaee72fda4622033d20b1318e08","time":1401335820,"bits":545259519,"nonce":4026531826},{"version":4,"prev_blockhash":"5cf99f705624f3a67c3cf9888d1c2a09d56986a8b04f1971b8385aab7f27b211","merkle_root":"f59473a48b24fff4f2e85afe626b57164ae413d26bd8ae83ee2b707a02633da2","time":1401336214,"bits":545259519,"nonce":4026531826},{"version":4,"prev_blockhash":"647d388e749c936d124dd502df0a10c2c748eba22ea0446d3095865e1f6de366","merkle_root":"9a309d7cda9fdb8c303eac65f28254efa1fcac45e68a5fd1e740ae6a4a6ad9b2","time":1401336886,"bits":545259519,"nonce":4026531828},{"version":4,"prev_blockhash":"11c0cb45798c235110975040795df6182f7144e378f092a387865b0cd61d197b","merkle_root":"b2109d881254851bece3f3ad0b73a61fd5aa812c3d236334eafe81a1ca9d793d","time":1401337179,"bits":545259519,"nonce":4026531826},{"version":4,"prev_blockhash":"7a75d90785d3489301b7bd79f2743719a7e67281df9bd7b70f5570f223202466","merkle_root":"6b0f6b85a5ca4d6a4e81ac5f15b68131313b3a67b23d02c48394ffbcea427d7a","time":1401337527,"bits":545259519,"nonce":268435459},{"version":4,"prev_blockhash":"2746e89a84aadd92b4be9669bf2342a75338e1a3a9efa0cbfe72bc8c21c022f8","merkle_root":"08e34b1bd73bcdace2b56aed427bed897031b1e372988cd638c6c3b1ead8107b","time":1401337841,"bits":545259519,"nonce":536870913},{"version":4,"prev_blockhash":"4560b5a2fd482c32d703e62ca5e2b60d6d1ba0d319f18a394f5d6e74d39b82df","merkle_root":"65f130c9417a6637dbbe595ddf476b21f94a05df8eb21cc791f68eaca7db7937","time":1401338138,"bits":545259519,"nonce":2147483641},{"version":4,"prev_blockhash":"6df08c89ee36c2a7df6b14ad245ea98d5f5d58a5c63f83c92cd93950c6e7718b","merkle_root":"f6737655a6e9e82202f550bbb0ad79f8ca2d97eed969f69e8013047420a6001f","time":1401338551,"bits":545259519,"nonce":536870912},{"version":4,"prev_blockhash":"6f58f835f88f8d15b44f2b90ebcf3fa017db8782d9c34f0d0a4de9e54b68d418","merkle_root":"a224b95a177c8905ee1cc56bdf349a6307d4542c170dc3f54a7b87836981805f","time":1401339082,"bits":545259519,"nonce":1}]}} \ No newline at end of file +{"btc_headers":{"headers":[{"version":4,"prev_blockhash":"3213e37e30774a550bcd02b34f810a39aca2d231a0028dc81c833c53e6191f61","merkle_root":"34316062408e6036c39949cd26d779c05e01acf851f28b85e4eec3ef6e5d176c","time":1401335367,"bits":545259519,"nonce":4026531830},{"version":4,"prev_blockhash":"3d7d5d050aafada290aaa656b41b838497fc326d171ab17a7b8a93acf6bb57be","merkle_root":"9199e8f7572c4fa68faca180d02e575bf15cc8e9e3f68b69f1a32a030056678b","time":1401335772,"bits":545259519,"nonce":4026531829},{"version":4,"prev_blockhash":"5b9c1f0305a2bc8104a2de2dfd5342553276650a40e0fe57f7d03f625ed51625","merkle_root":"7a5ea3eba3f6cf4318ba8f0951d30fe5ca3cab82f23d4e4e5032c7c5180fab08","time":1401336334,"bits":545259519,"nonce":4026531828},{"version":4,"prev_blockhash":"2fed0c7a8fca6e1e5aca8807a145e641819e0b0cd666479a015ec9c21b8e8461","merkle_root":"397f1f0ce388bcba492cd6f26406021403629bb53f9bf3c5f9853c8f62599d06","time":1401336625,"bits":545259519,"nonce":4026531826},{"version":4,"prev_blockhash":"67bec98b290eeb52de94204b650170a686cf6f97232e298f99864fbc002bd387","merkle_root":"80883622e59daf0f3b25dc224d212caf2573e819622a4fbb1b046ebe119a4c94","time":1401336908,"bits":545259519,"nonce":4026531827},{"version":4,"prev_blockhash":"345265dc0c0cf5b61f3db95167aa4894114159ddf2c8dcb848aff5b720322fe7","merkle_root":"b59b70b3497ca97392c09f81fd717a54d0e4c895f80f224a7cfefe2b5243da9e","time":1401337288,"bits":545259519,"nonce":4026531826},{"version":4,"prev_blockhash":"1af7600b27e26a0aa7dc8b395fb11edf11e48b5456d1c5ed05f38413958d9178","merkle_root":"f4e81260072bbe031aa90db76a66ae5f15edf890e30318d7035649fbd95a5bdf","time":1401337807,"bits":545259519,"nonce":4026531829},{"version":4,"prev_blockhash":"62927d3afb36ef776c42700bd75a7b32bb95453adc4408422f78ff559020cd20","merkle_root":"9824557b355ebef20ee8a00f063bfc082442c13829c38678db2b65a607ab4410","time":1401338376,"bits":545259519,"nonce":4026531826},{"version":4,"prev_blockhash":"07180f6ddb7921b05e1f01c474e9e8fcdd975dcfbc5fe3ab0ab5f0d6018a674c","merkle_root":"21c036832f92e4ff60cabe5aa607b76fe777807ba22d3fa4858f98858671b93d","time":1401338694,"bits":545259519,"nonce":4026531826},{"version":4,"prev_blockhash":"7e4f02f8ea642354c25474e4cda089becd45fcb4c48286497f5a33b1566f631f","merkle_root":"63af2017e790a347751298415a86c95b49f9dbc512460dd6bd31d6ed543b6e96","time":1401339211,"bits":545259519,"nonce":268435456},{"version":4,"prev_blockhash":"200ff3d850a0ca3f4ebbe7494dbac050c6709a22b79cb628e0308a527c6fa424","merkle_root":"525497cb67267bb2a13e24ed8f02fb20f48a67eecdc846523b95827897c01990","time":1401339540,"bits":545259519,"nonce":1073741821}]}} \ No newline at end of file diff --git a/packages/test-utils/testdata/btc_timestamp.dat b/packages/test-utils/testdata/btc_timestamp.dat index b250c6057e2d6fc9e357c2c9c9d4dffeb5462ee6..8d21d41e36e8d8ed5175fa80e516e075714ec676 100644 GIT binary patch literal 5867 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 literal 5835 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 PJtb0K|2V|PXx!o-+JJT8 diff --git a/packages/test-utils/testdata/btc_timestamp_header0.dat b/packages/test-utils/testdata/btc_timestamp_header0.dat index 72c3e461fa3eca03bd3b2a3b74f3459fd8693a5c..527b2f2c76fe7fbb9a358aa993be65f164531f6c 100644 GIT binary patch literal 80 zcmV-W0I&bFz|Nrj@;4IMq literal 80 zcmV-W0I&ZbZKq1T>G|r4_uyIZyRCgLGpjGl?P8@~`zT=U5&=AE4~eTqEgtr)iKxmz mN1O^c?pel!S=A7*l77?FZVYxv1>mthMbcUS|9>Fz|Nrm687mtA diff --git a/packages/test-utils/testdata/btc_timestamp_header1.dat b/packages/test-utils/testdata/btc_timestamp_header1.dat index c28594c8..526fd58d 100644 --- a/packages/test-utils/testdata/btc_timestamp_header1.dat +++ b/packages/test-utils/testdata/btc_timestamp_header1.dat @@ -1 +1 @@ -*-Wg7树R۶sf45۬6moSgDX$Ϋh.= `F\"%;9=! \ No newline at end of file +{Z߯K7s̠@o*c\J6 ] :0>`AEXZ6>!@QS- \ No newline at end of file diff --git a/packages/test-utils/testdata/btcstaking_params.dat b/packages/test-utils/testdata/btcstaking_params.dat index d2574bf338f04d6d9e072d2e7d4bc2aaa44a4319..bd0e942e86499a964330841e1f3b7089aafb9f73 100644 GIT binary patch literal 222 zcmV<403rVhAS)O8ivEaE@e^=w=sY>{xjkE<^9&lW)Qzxc`y#S(O$s1+HBJphg~j-) z4|m-bj9V=CEc^yOt2~vHo(EpNou+^aAi$l5dF)|h4=3z||8r{sUZMo+sCu_C`TEay z7dKWY_X;4wozVq_4#+-s`RKj=ihxbMJioTD<>0zE^3x&46sIr>ATd$Fh0{;02}r;j z&(CV!)<4<>q2J$OpqHx^TjkPj01yKjB5ibSRAqBgPHlKoZ8mZ>K}Aq7na9L#_=m#nRFfsu!IAlrzF#8E(%K!iX literal 222 zcmV<403rVhAgz-CX}w7tZFT>^iuuIMyGl`38N^fi4{ZFz`$OlbW(pvK67|uqyikkt zHJWP7#e8Hl*8fkLzvc$8!xQy|1VXtAAV~N{U&BqqsAPhrYy2ZR&?{2ft}>B(mFE91g zn;QL)5>gNt64NGDLUDE0ue43XVh{rwB5h|-H%B#XWmtE1R5^M!XK*=YVPbV*R!veh YLrZQ~I5bTl=m#nRFfsu!IAlrzFjARfxBvhE diff --git a/packages/test-utils/testdata/commit_pub_rand_msg.dat b/packages/test-utils/testdata/commit_pub_rand_msg.dat index f6399f37..be340032 100644 --- a/packages/test-utils/testdata/commit_pub_rand_msg.dat +++ b/packages/test-utils/testdata/commit_pub_rand_msg.dat @@ -1,3 +1,3 @@ -*bbn1lz2u7tzj7amtj75tuv39gnyggwg4ynv35axl3d c;d7ےnd&ElYd -* KVúyq.e*$ W޴&5qW42@w\tzW#N:G7$p.(pErXgLW i KVmɂ \ No newline at end of file +*bbn1jq22yfmz80uqkrusfg6etkvcfp5x5ff6k07p55 G&;I# K33~MHlfd +* C<Owk'C GҡF+,72@ oBP$Гĩ7#ⶹiS^HkֹZ1;ov`.< \ No newline at end of file diff --git a/packages/test-utils/testdata/eots_testdata.json b/packages/test-utils/testdata/eots_testdata.json index 5900d578..4327fd9c 100644 --- a/packages/test-utils/testdata/eots_testdata.json +++ b/packages/test-utils/testdata/eots_testdata.json @@ -1 +1 @@ -{"sk":"ea91af716d2b9b518727d30e9f72efd6c1c0f051c8c52da12aaca9b871bcbfae","pk":"e96d990484434dbcdfd81a708e15f70b076025e33278c3ff7d18e9b1ad71721b","sr":"8cfb33315cd4eda40bda9fba1aa7e50da2d2f16daace6b33a03e01b3df1ed8c3","pr":"c094593587a898c9c74164d9e16818878f495875c34bc7d8d27609d408dda423","msg1":"68656c6c6f20776f726c642031","msg2":"68656c6c6f20776f726c642032","sig1":"a6d4a015f53592f632a7f2fee158322e9544644eadf92f72d9de5617ae13fc57","sig2":"cd1afb586896aaf0687eb38404af7d60ff9a7549321e81472b4edaf50903fe3a"} \ No newline at end of file +{"sk":"70747e865315b7c7d25a63291e659285f642ae14f8342c70ddb18fa739e2226a","pk":"1e4fea05188da78ceef1a991543a6d6ac824dbeec6e43e07e752c056af72e6b1","sr":"527dd073b0560d3635ed6c667f9d86deb58471abc34dca4781a4d3c6b3090ac1","pr":"be46a7b838bc98a07a2398b152034365d84f7849d81e4aa6b6f184926e02854c","msg1":"68656c6c6f20776f726c642031","msg2":"68656c6c6f20776f726c642032","sig1":"049eeb82799359a198204fec5f24a6e967590b7dc9112fd6fc589147573ec77e","sig2":"3daff7e91556d19ab7048573b22fc4cb81cfa19dda89b429a7dfaed122b80349"} \ No newline at end of file diff --git a/packages/test-utils/testdata/finality_provider_1.dat b/packages/test-utils/testdata/finality_provider_1.dat index dc65fc81367ebf1d6c24b2cda848fba659280c66..4f819002e0b335dbf2282ba3be02e9d0ce1a80ef 100644 GIT binary patch literal 202 zcmd)8SN=zwB%`Pi1u`Dbqu&^-7$*w3Z$SV{Q;}S_R zNi;T1H8M3dHcL%Tw6I7sNHmZVGBGkh14;_}HctqCx8+^b&E?v*riH#;E&h(HjNf;B zJ2suos$l1(wI9q}R)$QAmDt5?;>DGmpI2O(n_8r62ml(cP&WVo diff --git a/packages/test-utils/testdata/finality_provider_2.dat b/packages/test-utils/testdata/finality_provider_2.dat index 0e0225741138f0d9c6d8813dd2ea1f2d27ccaa17..cca9fd3ed67bf4826607c63e4de2ca4a6081ad0a 100644 GIT binary patch literal 202 zcmdjNwYLcO-?hlFg1`8GPX2814;^Wr8iG`7P_MTC&TaW#tV)_mMA->S8v){ zdGpuTLuIkC^;%9s4ku;vZJ26yX{<|Q6ntZ5TQM{1M{oW+jI(*^kXpe8xtt)K4 zzMsUs%6<#aDJ>@<2L^M6%(V5@&67gutAUU6w|YLTuH0I)+#?*IS* diff --git a/packages/test-utils/testdata/finality_provider_3.dat b/packages/test-utils/testdata/finality_provider_3.dat index 3983f0c0..9d038fa9 100644 --- a/packages/test-utils/testdata/finality_provider_3.dat +++ b/packages/test-utils/testdata/finality_provider_3.dat @@ -1,5 +1,5 @@ -*bbn1lutrn57v36xdnqvrnlcz8gm597wruacd8vgdxh -b7ca5795c3156ba7c85f150000000000000000" RqAm٦s͍n6,8(*B@k1 -eL;~qQGr5{k3m Rpܭ Z+^œNzv$J +*bbn1778l5l0uzad6ufnk0j3gvsmdez4s2zkaymged9 +c7a50edfdb8c29d9ae5d400000000000000000" l]M-1xCnGQ3*B@|d _#Є +oH0gnE)vif.#Q9I1 .i_Ɣ!w[P-J consumer-3 \ No newline at end of file diff --git a/packages/test-utils/testdata/pub_rand_value.dat b/packages/test-utils/testdata/pub_rand_value.dat index 465e2063..3a2601e8 100644 --- a/packages/test-utils/testdata/pub_rand_value.dat +++ b/packages/test-utils/testdata/pub_rand_value.dat @@ -1 +1 @@ -&]:s1S,1FK5f r \ No newline at end of file +m=6$I%rib;!5>^[a \ No newline at end of file diff --git a/packages/test-utils/testdata/raw_ckpt.dat b/packages/test-utils/testdata/raw_ckpt.dat index 141b5c63da3e972bb3597c4544dbb5f3b01fd0da..bfcdc3579b6534006110d5e8afd3d1b480c82dd9 100644 GIT binary patch literal 102 zcmdkb#oHHuaO) z7CSw}T#g^#;+`UWNoq5+M}|>+4O~vwG^5x4SP-j{C#|0QZY8 Aod5s;