From d58ac5bf5b00f2f68045eb71f3ccc1978322d3a6 Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 10 Jan 2023 14:01:04 +0200 Subject: [PATCH 01/85] minor update --- .../src/transaction/components/orchard.rs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 180466323c..e9c17e2f1d 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -274,11 +274,15 @@ pub mod testing { testing::{self as t_orch}, Authorized, Bundle, }; + use orchard::note::TransmittedNoteCiphertext; + use rand_core::OsRng; use crate::transaction::{ components::amount::{testing::arb_amount, Amount}, TxVersion, }; + use crate::transaction::components::orchard::{read_note_ciphertext, write_note_ciphertext}; + use crate::transaction::util::sha256d::{HashReader, HashWriter}; prop_compose! { pub fn arb_bundle(n_actions: usize)( @@ -300,4 +304,29 @@ pub mod testing { Strategy::boxed(Just(None)) } } + + #[test] + fn serialize() { + let mut writer = HashWriter::default(); + + let mut rng = OsRng; + + let mut nc = TransmittedNoteCiphertext{ + epk_bytes: [0u8; 32], + enc_ciphertext: [0u8; 580], + out_ciphertext: [0u8; 80], + }; + + rng.fill_bytes(nc.epk_bytes.as_mut()); + rng.fill_bytes(nc.enc_ciphertext.as_mut()); + rng.fill_bytes(nc.out_ciphertext.as_mut()); + + write_note_ciphertext(&mut writer, &nc)?; + + let mut reader = HashReader::new(writer.into()); + + let nc_out = read_note_ciphertext(&mut reader).unwrap(); + + assert_eq!(nc_out, nc); + } } From f34dd02dbcd5903de5ba18ba28b85b50580428a8 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 12 Jan 2023 17:35:12 +0100 Subject: [PATCH 02/85] updated version --- Cargo.lock | 28 ++++--- .../src/proto/compact_formats.rs | 1 + zcash_client_backend/src/proto/proposal.rs | 1 + zcash_client_backend/src/proto/service.rs | 1 + .../src/transaction/components/orchard.rs | 73 +++++++++++++++++-- 5 files changed, 87 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4781d8af86..c5d4c3809b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -364,7 +364,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" dependencies = [ "ciborium-io", - "half", + "half 1.8.2", ] [[package]] @@ -759,10 +759,19 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + [[package]] name = "halo2_gadgets" version = "0.3.0" -source = "git+https://github.com/QED-it/halo2?branch=zsa1#5f436dc3387665fe3201d381791a62a8233b2171" +source = "git+https://github.com/QED-it/halo2?rev=7f5c0babd61f8ca46c9165a1adfac298d3fd3a11#7f5c0babd61f8ca46c9165a1adfac298d3fd3a11" dependencies = [ "arrayvec", "bitvec", @@ -785,7 +794,7 @@ checksum = "47716fe1ae67969c5e0b2ef826f32db8c3be72be325e1aa3c1951d06b5575ec5" [[package]] name = "halo2_proofs" version = "0.3.0" -source = "git+https://github.com/QED-it/halo2?branch=zsa1#5f436dc3387665fe3201d381791a62a8233b2171" +source = "git+https://github.com/QED-it/halo2?rev=7f5c0babd61f8ca46c9165a1adfac298d3fd3a11#7f5c0babd61f8ca46c9165a1adfac298d3fd3a11" dependencies = [ "blake2b_simd", "ff", @@ -833,9 +842,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -926,7 +935,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.3.9", "rustix", "windows-sys", ] @@ -1186,7 +1195,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.3.9", "libc", ] @@ -1220,7 +1229,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=zsa1#78c8efc23a37dc1d64ded53fab231098681966c0" +source = "git+https://github.com/QED-it/orchard?branch=zsa1#39b479ea81045e5c5ac719821fe2feb2bfce5f36" dependencies = [ "aes", "bitvec", @@ -1228,6 +1237,7 @@ dependencies = [ "ff", "fpe", "group", + "half 2.2.1", "halo2_gadgets", "halo2_proofs", "hex", @@ -2491,7 +2501,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#8b6b31dcea4a883a606425c4b644fca213e78b3b" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#b8bd2a186fc04ec4f55b2db44df7374f03ab5725" dependencies = [ "chacha20", "chacha20poly1305", diff --git a/zcash_client_backend/src/proto/compact_formats.rs b/zcash_client_backend/src/proto/compact_formats.rs index 44455378f7..334a4c44ba 100644 --- a/zcash_client_backend/src/proto/compact_formats.rs +++ b/zcash_client_backend/src/proto/compact_formats.rs @@ -1,3 +1,4 @@ +// This file is @generated by prost-build. /// Information about the state of the chain as of a given block. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/zcash_client_backend/src/proto/proposal.rs b/zcash_client_backend/src/proto/proposal.rs index a17b83bf8b..0a664d5cde 100644 --- a/zcash_client_backend/src/proto/proposal.rs +++ b/zcash_client_backend/src/proto/proposal.rs @@ -1,3 +1,4 @@ +// This file is @generated by prost-build. /// A data structure that describes a series of transactions to be created. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/zcash_client_backend/src/proto/service.rs b/zcash_client_backend/src/proto/service.rs index ccfd3fed7a..03ea1b93ec 100644 --- a/zcash_client_backend/src/proto/service.rs +++ b/zcash_client_backend/src/proto/service.rs @@ -1,3 +1,4 @@ +// This file is @generated by prost-build. /// A BlockID message contains identifiers to select a block: a height or a /// hash. Specification by hash is not implemented, but may be in the future. #[allow(clippy::derive_partial_eq_without_eq)] diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index e9c17e2f1d..220f1e5dbb 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -75,7 +75,7 @@ pub fn read_v5_bundle( actions, flags, value_balance, - vec![], // TODO implement "burn" reading and writing + vec![], anchor, authorization, ))) @@ -137,7 +137,7 @@ pub fn read_cmx(mut reader: R) -> io::Result { pub fn read_note_ciphertext(mut reader: R) -> io::Result { let mut tnc = TransmittedNoteCiphertext { epk_bytes: [0u8; 32], - enc_ciphertext: [0u8; 612], + enc_ciphertext: [0u8; 580], out_ciphertext: [0u8; 80], }; @@ -266,6 +266,48 @@ pub fn write_action_without_auth( Ok(()) } + + +#[derive(Clone, Debug)] +pub enum EncCiphertext { + NoteV2([u8; orchard::note_encryption::ENC_CIPHERTEXT_SIZE_V2]), + NoteV3([u8; orchard::note_encryption_v3::ENC_CIPHERTEXT_SIZE_V3]), +} + +#[derive(Clone)] +pub struct TransmittedNoteCiphertextNew { + /// The serialization of the ephemeral public key + pub epk_bytes: [u8; 32], + /// The encrypted note ciphertext + pub enc_ciphertext: EncCiphertext, + /// An encrypted value that allows the holder of the outgoing cipher + /// key for the note to recover the note plaintext. + pub out_ciphertext: [u8; 80], +} + +pub fn write_note_ciphertext2( + mut writer: W, + nc: &TransmittedNoteCiphertextNew, +) -> io::Result<()> { + writer.write_all(&nc.epk_bytes)?; + writer.write_all(&nc.enc_ciphertext)?; + writer.write_all(&nc.out_ciphertext) +} + +pub fn read_note_ciphertext2(mut reader: R) -> io::Result { + let mut tnc = TransmittedNoteCiphertextNew { + epk_bytes: [0u8; 32], + enc_ciphertext: [0u8; 580], + out_ciphertext: [0u8; 80], + }; + + reader.read_exact(&mut tnc.epk_bytes)?; + reader.read_exact(&mut tnc.enc_ciphertext)?; + reader.read_exact(&mut tnc.out_ciphertext)?; + + Ok(tnc) +} + #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { use proptest::prelude::*; @@ -275,6 +317,8 @@ pub mod testing { Authorized, Bundle, }; use orchard::note::TransmittedNoteCiphertext; + use orchard::note_encryption::{ENC_CIPHERTEXT_SIZE_V2, NoteCiphertextBytes}; + use orchard::note_encryption_v3::ENC_CIPHERTEXT_SIZE_V3; use rand_core::OsRng; use crate::transaction::{ @@ -282,7 +326,6 @@ pub mod testing { TxVersion, }; use crate::transaction::components::orchard::{read_note_ciphertext, write_note_ciphertext}; - use crate::transaction::util::sha256d::{HashReader, HashWriter}; prop_compose! { pub fn arb_bundle(n_actions: usize)( @@ -305,9 +348,14 @@ pub mod testing { } } + + #[test] - fn serialize() { - let mut writer = HashWriter::default(); + fn backward_compatible_roundtest() { + const TEST_DATA_SIZE: usize = + 32 + //epk_bytes + 580 + // enc_ciphertext + 80; // out_ciphertext let mut rng = OsRng; @@ -321,12 +369,21 @@ pub mod testing { rng.fill_bytes(nc.enc_ciphertext.as_mut()); rng.fill_bytes(nc.out_ciphertext.as_mut()); - write_note_ciphertext(&mut writer, &nc)?; + let mut writer = Vec::with_capacity(TEST_DATA_SIZE); + + write_note_ciphertext(&mut writer, &nc).unwrap(); + - let mut reader = HashReader::new(writer.into()); + + let mut reader = writer.as_slice(); let nc_out = read_note_ciphertext(&mut reader).unwrap(); - assert_eq!(nc_out, nc); + assert_eq!(nc_out.epk_bytes, nc.epk_bytes); + assert_eq!(nc_out.enc_ciphertext, nc.enc_ciphertext); + assert_eq!(nc_out.out_ciphertext, nc.out_ciphertext); + + //print!(nc) + } } From b8901835b044d4a4a226749f686b2ffbc8fd93ac Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 12 Jan 2023 18:37:49 +0200 Subject: [PATCH 03/85] commented out test code --- .../src/transaction/components/orchard.rs | 79 +++++++++---------- 1 file changed, 39 insertions(+), 40 deletions(-) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 220f1e5dbb..a1f82c91d6 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -268,45 +268,45 @@ pub fn write_action_without_auth( -#[derive(Clone, Debug)] -pub enum EncCiphertext { - NoteV2([u8; orchard::note_encryption::ENC_CIPHERTEXT_SIZE_V2]), - NoteV3([u8; orchard::note_encryption_v3::ENC_CIPHERTEXT_SIZE_V3]), -} - -#[derive(Clone)] -pub struct TransmittedNoteCiphertextNew { - /// The serialization of the ephemeral public key - pub epk_bytes: [u8; 32], - /// The encrypted note ciphertext - pub enc_ciphertext: EncCiphertext, - /// An encrypted value that allows the holder of the outgoing cipher - /// key for the note to recover the note plaintext. - pub out_ciphertext: [u8; 80], -} - -pub fn write_note_ciphertext2( - mut writer: W, - nc: &TransmittedNoteCiphertextNew, -) -> io::Result<()> { - writer.write_all(&nc.epk_bytes)?; - writer.write_all(&nc.enc_ciphertext)?; - writer.write_all(&nc.out_ciphertext) -} - -pub fn read_note_ciphertext2(mut reader: R) -> io::Result { - let mut tnc = TransmittedNoteCiphertextNew { - epk_bytes: [0u8; 32], - enc_ciphertext: [0u8; 580], - out_ciphertext: [0u8; 80], - }; - - reader.read_exact(&mut tnc.epk_bytes)?; - reader.read_exact(&mut tnc.enc_ciphertext)?; - reader.read_exact(&mut tnc.out_ciphertext)?; - - Ok(tnc) -} +// #[derive(Clone, Debug)] +// pub enum EncCiphertext { +// NoteV2([u8; orchard::note_encryption::ENC_CIPHERTEXT_SIZE_V2]), +// NoteV3([u8; orchard::note_encryption_v3::ENC_CIPHERTEXT_SIZE_V3]), +// } +// +// #[derive(Clone)] +// pub struct TransmittedNoteCiphertextNew { +// /// The serialization of the ephemeral public key +// pub epk_bytes: [u8; 32], +// /// The encrypted note ciphertext +// pub enc_ciphertext: EncCiphertext, +// /// An encrypted value that allows the holder of the outgoing cipher +// /// key for the note to recover the note plaintext. +// pub out_ciphertext: [u8; 80], +// } +// +// pub fn write_note_ciphertext2( +// mut writer: W, +// nc: &TransmittedNoteCiphertextNew, +// ) -> io::Result<()> { +// writer.write_all(&nc.epk_bytes)?; +// writer.write_all(&nc.enc_ciphertext)?; +// writer.write_all(&nc.out_ciphertext) +// } +// +// pub fn read_note_ciphertext2(mut reader: R) -> io::Result { +// let mut tnc = TransmittedNoteCiphertextNew { +// epk_bytes: [0u8; 32], +// enc_ciphertext: [0u8; 580], +// out_ciphertext: [0u8; 80], +// }; +// +// reader.read_exact(&mut tnc.epk_bytes)?; +// reader.read_exact(&mut tnc.enc_ciphertext)?; +// reader.read_exact(&mut tnc.out_ciphertext)?; +// +// Ok(tnc) +// } #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { @@ -374,7 +374,6 @@ pub mod testing { write_note_ciphertext(&mut writer, &nc).unwrap(); - let mut reader = writer.as_slice(); let nc_out = read_note_ciphertext(&mut reader).unwrap(); From f62a230cff9b84f1a4d98a3330c5b50aef5b20d9 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 23 Jan 2023 13:16:45 +0200 Subject: [PATCH 04/85] updated test and cleanup --- .../src/transaction/components/orchard.rs | 87 +------------------ 1 file changed, 1 insertion(+), 86 deletions(-) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index a1f82c91d6..d1ea8cae5e 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -137,7 +137,7 @@ pub fn read_cmx(mut reader: R) -> io::Result { pub fn read_note_ciphertext(mut reader: R) -> io::Result { let mut tnc = TransmittedNoteCiphertext { epk_bytes: [0u8; 32], - enc_ciphertext: [0u8; 580], + enc_ciphertext: [0u8; 612], out_ciphertext: [0u8; 80], }; @@ -266,48 +266,6 @@ pub fn write_action_without_auth( Ok(()) } - - -// #[derive(Clone, Debug)] -// pub enum EncCiphertext { -// NoteV2([u8; orchard::note_encryption::ENC_CIPHERTEXT_SIZE_V2]), -// NoteV3([u8; orchard::note_encryption_v3::ENC_CIPHERTEXT_SIZE_V3]), -// } -// -// #[derive(Clone)] -// pub struct TransmittedNoteCiphertextNew { -// /// The serialization of the ephemeral public key -// pub epk_bytes: [u8; 32], -// /// The encrypted note ciphertext -// pub enc_ciphertext: EncCiphertext, -// /// An encrypted value that allows the holder of the outgoing cipher -// /// key for the note to recover the note plaintext. -// pub out_ciphertext: [u8; 80], -// } -// -// pub fn write_note_ciphertext2( -// mut writer: W, -// nc: &TransmittedNoteCiphertextNew, -// ) -> io::Result<()> { -// writer.write_all(&nc.epk_bytes)?; -// writer.write_all(&nc.enc_ciphertext)?; -// writer.write_all(&nc.out_ciphertext) -// } -// -// pub fn read_note_ciphertext2(mut reader: R) -> io::Result { -// let mut tnc = TransmittedNoteCiphertextNew { -// epk_bytes: [0u8; 32], -// enc_ciphertext: [0u8; 580], -// out_ciphertext: [0u8; 80], -// }; -// -// reader.read_exact(&mut tnc.epk_bytes)?; -// reader.read_exact(&mut tnc.enc_ciphertext)?; -// reader.read_exact(&mut tnc.out_ciphertext)?; -// -// Ok(tnc) -// } - #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { use proptest::prelude::*; @@ -316,16 +274,11 @@ pub mod testing { testing::{self as t_orch}, Authorized, Bundle, }; - use orchard::note::TransmittedNoteCiphertext; - use orchard::note_encryption::{ENC_CIPHERTEXT_SIZE_V2, NoteCiphertextBytes}; - use orchard::note_encryption_v3::ENC_CIPHERTEXT_SIZE_V3; - use rand_core::OsRng; use crate::transaction::{ components::amount::{testing::arb_amount, Amount}, TxVersion, }; - use crate::transaction::components::orchard::{read_note_ciphertext, write_note_ciphertext}; prop_compose! { pub fn arb_bundle(n_actions: usize)( @@ -347,42 +300,4 @@ pub mod testing { Strategy::boxed(Just(None)) } } - - - - #[test] - fn backward_compatible_roundtest() { - const TEST_DATA_SIZE: usize = - 32 + //epk_bytes - 580 + // enc_ciphertext - 80; // out_ciphertext - - let mut rng = OsRng; - - let mut nc = TransmittedNoteCiphertext{ - epk_bytes: [0u8; 32], - enc_ciphertext: [0u8; 580], - out_ciphertext: [0u8; 80], - }; - - rng.fill_bytes(nc.epk_bytes.as_mut()); - rng.fill_bytes(nc.enc_ciphertext.as_mut()); - rng.fill_bytes(nc.out_ciphertext.as_mut()); - - let mut writer = Vec::with_capacity(TEST_DATA_SIZE); - - write_note_ciphertext(&mut writer, &nc).unwrap(); - - - let mut reader = writer.as_slice(); - - let nc_out = read_note_ciphertext(&mut reader).unwrap(); - - assert_eq!(nc_out.epk_bytes, nc.epk_bytes); - assert_eq!(nc_out.enc_ciphertext, nc.enc_ciphertext); - assert_eq!(nc_out.out_ciphertext, nc.out_ciphertext); - - //print!(nc) - - } } From a56c5da45d8526046b23ba8f563771062e963da1 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Sun, 18 Dec 2022 13:55:31 +0100 Subject: [PATCH 05/85] New orchard version --- Cargo.toml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index cb1347f1ad..f48370c92a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,8 +6,8 @@ members = [ "components/zcash_encoding", "components/zcash_protocol", "components/zip321", -# "zcash_client_backend", -# "zcash_client_sqlite", + "zcash_client_backend", + "zcash_client_sqlite", "zcash_extensions", "zcash_history", "zcash_keys", @@ -31,7 +31,7 @@ categories = ["cryptography::cryptocurrencies"] # Intra-workspace dependencies equihash = { version = "0.2", path = "components/equihash" } zcash_address = { version = "0.3", path = "components/zcash_address" } -#zcash_client_backend = { version = "0.12", path = "zcash_client_backend" } +zcash_client_backend = { version = "0.12", path = "zcash_client_backend" } zcash_encoding = { version = "0.2", path = "components/zcash_encoding" } zcash_keys = { version = "0.2", path = "zcash_keys" } zcash_protocol = { version = "0.1", path = "components/zcash_protocol" } @@ -95,7 +95,7 @@ maybe-rayon = { version = "0.1.0", default-features = false } rayon = "1.5" # Protobuf and gRPC -prost = "=0.12.3" +prost = "0.12" tonic = { version = "0.10", default-features = false } tonic-build = { version = "0.10", default-features = false } @@ -124,4 +124,7 @@ panic = 'abort' codegen-units = 1 [patch.crates-io] -orchard = { version = "0.8.0", git = "https://github.com/QED-it/orchard", branch = "zsa1" } +schemer = { git = "https://github.com/aschampion/schemer.git", rev = "6726b60f43f72c6e24a18d31be0ec7d42829e5e1" } +schemer-rusqlite = { git = "https://github.com/aschampion/schemer.git", rev = "6726b60f43f72c6e24a18d31be0ec7d42829e5e1" } +group = { git = "https://github.com/zkcrypto/group.git", rev = "f61e3e420ed1220c8f1f80988f8c6c5e202d8715" } +orchard = { version = "0.3", git = "https://github.com/QED-it/orchard", rev = "5a50fb8d11361d3f7d1f3b2f6c0a468f88c0db49" } From d670033f0ac050b7977613ed63c2c89f21072615 Mon Sep 17 00:00:00 2001 From: alexeykoren Date: Sun, 18 Dec 2022 13:57:11 +0100 Subject: [PATCH 06/85] Add TODO for burn reading/writing --- zcash_primitives/src/transaction/components/orchard.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index d1ea8cae5e..180466323c 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -75,7 +75,7 @@ pub fn read_v5_bundle( actions, flags, value_balance, - vec![], + vec![], // TODO implement "burn" reading and writing anchor, authorization, ))) From c6175b8548202485d3d4490952eef56fcae10c42 Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 24 Jan 2023 11:23:38 +0200 Subject: [PATCH 07/85] fixed zcash_client_backend and simplified cargo.toml --- Cargo.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f48370c92a..3276e0167b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -126,5 +126,4 @@ codegen-units = 1 [patch.crates-io] schemer = { git = "https://github.com/aschampion/schemer.git", rev = "6726b60f43f72c6e24a18d31be0ec7d42829e5e1" } schemer-rusqlite = { git = "https://github.com/aschampion/schemer.git", rev = "6726b60f43f72c6e24a18d31be0ec7d42829e5e1" } -group = { git = "https://github.com/zkcrypto/group.git", rev = "f61e3e420ed1220c8f1f80988f8c6c5e202d8715" } -orchard = { version = "0.3", git = "https://github.com/QED-it/orchard", rev = "5a50fb8d11361d3f7d1f3b2f6c0a468f88c0db49" } +orchard = { version = "0.3", git = "https://github.com/QED-it/orchard", rev = "c6e048a4474f0bef5182ed56e5d2ecff6fea0389" } From af4d4bbc9325245d09d692013cb40987ed4628e8 Mon Sep 17 00:00:00 2001 From: Paul Date: Tue, 31 Jan 2023 14:43:41 +0200 Subject: [PATCH 08/85] updated Cargo.toml --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 3276e0167b..4fd719c0b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -126,4 +126,4 @@ codegen-units = 1 [patch.crates-io] schemer = { git = "https://github.com/aschampion/schemer.git", rev = "6726b60f43f72c6e24a18d31be0ec7d42829e5e1" } schemer-rusqlite = { git = "https://github.com/aschampion/schemer.git", rev = "6726b60f43f72c6e24a18d31be0ec7d42829e5e1" } -orchard = { version = "0.3", git = "https://github.com/QED-it/orchard", rev = "c6e048a4474f0bef5182ed56e5d2ecff6fea0389" } +orchard = { version = "0.3", git = "https://github.com/QED-it/orchard", rev = "35da288c7867c5b0fb0ae84e444915689e49084c" } From fbbd6553e710607cc7198a88694b2fec0c03185c Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 13 May 2024 14:01:43 +0200 Subject: [PATCH 09/85] Fix post-rebase problems --- Cargo.lock | 881 +++++++++++++++++++- Cargo.toml | 4 +- zcash_primitives/src/transaction/builder.rs | 1 + 3 files changed, 857 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c5d4c3809b..f17ea93e40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,12 +60,24 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + [[package]] name = "anes" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + [[package]] name = "arrayref" version = "0.3.7" @@ -84,6 +96,39 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "async-trait" +version = "0.1.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + [[package]] name = "atty" version = "0.2.14" @@ -101,6 +146,51 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + [[package]] name = "backtrace" version = "0.3.69" @@ -286,6 +376,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + [[package]] name = "cast" version = "0.3.0" @@ -364,7 +460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" dependencies = [ "ciborium-io", - "half 1.8.2", + "half", ] [[package]] @@ -441,7 +537,7 @@ dependencies = [ "ciborium", "clap", "criterion-plot", - "itertools", + "itertools 0.10.5", "lazy_static", "num-traits", "oorandom", @@ -462,7 +558,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools", + "itertools 0.10.5", ] [[package]] @@ -537,6 +633,15 @@ dependencies = [ "typenum", ] +[[package]] +name = "daggy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91a9304e55e9d601a39ae4deaba85406d5c0980e106f65afcf0460e9af1e7602" +dependencies = [ + "petgraph", +] + [[package]] name = "debugid" version = "0.8.0" @@ -649,6 +754,18 @@ dependencies = [ "proptest", ] +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + [[package]] name = "fastrand" version = "2.0.1" @@ -687,6 +804,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + [[package]] name = "fnv" version = "1.0.7" @@ -713,6 +836,58 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-macro" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -754,24 +929,54 @@ dependencies = [ ] [[package]] -name = "half" -version = "1.8.2" +name = "gumdrop" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +checksum = "5bc700f989d2f6f0248546222d9b4258f5b02a171a431f8285a81c08142629e3" +dependencies = [ + "gumdrop_derive", +] [[package]] -name = "half" -version = "2.2.1" +name = "gumdrop_derive" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +checksum = "729f9bd3449d77e7831a18abfb7ba2f99ee813dfd15b8c2167c9a54ba20aa99d" dependencies = [ - "crunchy", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "halo2_gadgets" version = "0.3.0" -source = "git+https://github.com/QED-it/halo2?rev=7f5c0babd61f8ca46c9165a1adfac298d3fd3a11#7f5c0babd61f8ca46c9165a1adfac298d3fd3a11" +source = "git+https://github.com/QED-it/halo2?branch=zsa1#5f436dc3387665fe3201d381791a62a8233b2171" dependencies = [ "arrayvec", "bitvec", @@ -794,7 +999,7 @@ checksum = "47716fe1ae67969c5e0b2ef826f32db8c3be72be325e1aa3c1951d06b5575ec5" [[package]] name = "halo2_proofs" version = "0.3.0" -source = "git+https://github.com/QED-it/halo2?rev=7f5c0babd61f8ca46c9165a1adfac298d3fd3a11#7f5c0babd61f8ca46c9165a1adfac298d3fd3a11" +source = "git+https://github.com/QED-it/halo2?branch=zsa1#5f436dc3387665fe3201d381791a62a8233b2171" dependencies = [ "blake2b_simd", "ff", @@ -817,6 +1022,19 @@ name = "hashbrown" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hashlink" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +dependencies = [ + "hashbrown 0.14.2", +] [[package]] name = "hdwallet" @@ -831,6 +1049,12 @@ dependencies = [ "thiserror", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -842,9 +1066,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -870,6 +1094,76 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-timeout" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] + [[package]] name = "incrementalmerkletree" version = "0.5.1" @@ -935,7 +1229,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.3.3", "rustix", "windows-sys", ] @@ -949,6 +1243,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -1022,6 +1325,17 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +[[package]] +name = "libsqlite3-sys" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linux-raw-sys" version = "0.4.11" @@ -1050,6 +1364,12 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "maybe-rayon" version = "0.1.1" @@ -1093,6 +1413,12 @@ dependencies = [ "nonempty", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1121,6 +1447,23 @@ dependencies = [ "webpki-roots", ] +[[package]] +name = "mio" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + [[package]] name = "nix" version = "0.26.4" @@ -1195,7 +1538,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.3.3", "libc", ] @@ -1229,7 +1572,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=zsa1#39b479ea81045e5c5ac719821fe2feb2bfce5f36" +source = "git+https://github.com/QED-it/orchard?branch=zsa1#78c8efc23a37dc1d64ded53fab231098681966c0" dependencies = [ "aes", "bitvec", @@ -1237,7 +1580,6 @@ dependencies = [ "ff", "fpe", "group", - "half 2.2.1", "halo2_gadgets", "halo2_proofs", "hex", @@ -1338,12 +1680,48 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] + +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + [[package]] name = "pin-project-lite" version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pkcs8" version = "0.10.2" @@ -1354,6 +1732,12 @@ dependencies = [ "spki", ] +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + [[package]] name = "plotters" version = "0.3.5" @@ -1421,6 +1805,16 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +[[package]] +name = "prettyplease" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +dependencies = [ + "proc-macro2", + "syn 2.0.53", +] + [[package]] name = "primitive-types" version = "0.12.2" @@ -1460,6 +1854,60 @@ dependencies = [ "unarray", ] +[[package]] +name = "prost" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bdf592881d821b83d471f8af290226c8d51402259e9bb5be7f9f8bdebbb11ac" +dependencies = [ + "bytes", + "heck", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.53", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "prost-types" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf" +dependencies = [ + "prost", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -1681,6 +2129,21 @@ dependencies = [ "digest", ] +[[package]] +name = "rusqlite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2" +dependencies = [ + "bitflags 2.4.2", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", + "time", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -1722,6 +2185,12 @@ dependencies = [ "untrusted 0.9.0", ] +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + [[package]] name = "rusty-fork" version = "0.3.0" @@ -1782,6 +2251,29 @@ dependencies = [ "zip32", ] +[[package]] +name = "schemer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835d8f9478fd2936195fc941a8666b0d0894d5bf3631cbb884a8ce8ba631f339" +dependencies = [ + "daggy", + "log", + "thiserror", + "uuid", +] + +[[package]] +name = "schemer-rusqlite" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fb5ac1fa52c58e2c6a618e3149d464e7ad8d0effca74990ea29c1fe2338b3b1" +dependencies = [ + "rusqlite", + "schemer", + "uuid", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -1856,7 +2348,7 @@ checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.53", ] [[package]] @@ -1881,6 +2373,20 @@ dependencies = [ "digest", ] +[[package]] +name = "shardtree" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d766257c56a1bdd75479c256b97c92e72788a9afb18b5199f58faf7188dc99d9" +dependencies = [ + "assert_matches", + "bitflags 2.4.2", + "either", + "incrementalmerkletree", + "proptest", + "tracing", +] + [[package]] name = "signature" version = "2.2.0" @@ -1891,12 +2397,41 @@ dependencies = [ "rand_core", ] +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "spin" version = "0.5.2" @@ -1966,6 +2501,17 @@ dependencies = [ "symbolic-common", ] +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.53" @@ -1977,6 +2523,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "tap" version = "1.0.1" @@ -2019,7 +2571,34 @@ checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.53", +] + +[[package]] +name = "time" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" +dependencies = [ + "itoa", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "time-macros" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" +dependencies = [ + "time-core", ] [[package]] @@ -2047,6 +2626,129 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.35.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2 0.5.5", + "windows-sys", +] + +[[package]] +name = "tokio-io-timeout" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +dependencies = [ + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tonic" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +dependencies = [ + "async-stream", + "async-trait", + "axum", + "base64", + "bytes", + "h2", + "http", + "http-body", + "hyper", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "tokio", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tonic-build" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889" +dependencies = [ + "prettyplease", + "proc-macro2", + "prost-build", + "quote", + "syn 2.0.53", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "indexmap 1.9.3", + "pin-project", + "pin-project-lite", + "rand", + "slab", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + [[package]] name = "tracing" version = "0.1.40" @@ -2066,7 +2768,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.53", ] [[package]] @@ -2078,6 +2780,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + [[package]] name = "typenum" version = "1.17.0" @@ -2145,6 +2853,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" @@ -2220,6 +2934,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2247,7 +2970,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.53", "wasm-bindgen-shared", ] @@ -2269,7 +2992,7 @@ checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.53", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2296,6 +3019,18 @@ version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2421,6 +3156,100 @@ dependencies = [ "zcash_protocol", ] +[[package]] +name = "zcash_client_backend" +version = "0.12.1" +dependencies = [ + "assert_matches", + "async-trait", + "base64", + "bech32", + "bls12_381", + "bs58", + "byteorder", + "crossbeam-channel", + "document-features", + "futures-util", + "group", + "gumdrop", + "hdwallet", + "hex", + "incrementalmerkletree", + "jubjub", + "memuse", + "nom", + "nonempty", + "orchard", + "percent-encoding", + "proptest", + "prost", + "rand_core", + "rayon", + "sapling-crypto", + "secrecy", + "shardtree", + "subtle", + "time", + "tokio", + "tonic", + "tonic-build", + "tracing", + "which", + "zcash_address", + "zcash_encoding", + "zcash_keys", + "zcash_note_encryption 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "zcash_primitives", + "zcash_proofs", + "zcash_protocol", + "zip32", + "zip321", +] + +[[package]] +name = "zcash_client_sqlite" +version = "0.10.3" +dependencies = [ + "assert_matches", + "bls12_381", + "bs58", + "byteorder", + "document-features", + "group", + "hdwallet", + "incrementalmerkletree", + "jubjub", + "maybe-rayon", + "nonempty", + "orchard", + "pasta_curves", + "proptest", + "prost", + "rand_chacha", + "rand_core", + "regex", + "rusqlite", + "sapling-crypto", + "schemer", + "schemer-rusqlite", + "secrecy", + "shardtree", + "subtle", + "tempfile", + "time", + "tracing", + "uuid", + "zcash_address", + "zcash_client_backend", + "zcash_encoding", + "zcash_keys", + "zcash_note_encryption 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "zcash_primitives", + "zcash_proofs", + "zcash_protocol", + "zip32", +] + [[package]] name = "zcash_encoding" version = "0.2.0" @@ -2501,7 +3330,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#b8bd2a186fc04ec4f55b2db44df7374f03ab5725" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#8b6b31dcea4a883a606425c4b644fca213e78b3b" dependencies = [ "chacha20", "chacha20poly1305", @@ -2613,7 +3442,7 @@ checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.53", ] [[package]] @@ -2633,7 +3462,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.53", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 4fd719c0b2..a135ff26a1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -124,6 +124,4 @@ panic = 'abort' codegen-units = 1 [patch.crates-io] -schemer = { git = "https://github.com/aschampion/schemer.git", rev = "6726b60f43f72c6e24a18d31be0ec7d42829e5e1" } -schemer-rusqlite = { git = "https://github.com/aschampion/schemer.git", rev = "6726b60f43f72c6e24a18d31be0ec7d42829e5e1" } -orchard = { version = "0.3", git = "https://github.com/QED-it/orchard", rev = "35da288c7867c5b0fb0ae84e444915689e49084c" } +orchard = { version = "0.8.0", git = "https://github.com/QED-it/orchard", branch = "zsa1" } diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 6e43bc4612..a93b108b5c 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -35,6 +35,7 @@ use crate::transaction::components::transparent::builder::TransparentInputInfo; use orchard::note::AssetBase; #[cfg(not(feature = "transparent-inputs"))] use std::convert::Infallible; +use orchard::note::AssetBase; #[cfg(zcash_unstable = "zfuture")] use crate::{ From 424bf1ab5ec38dc41beca1cee1a33b7c1707ee7f Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 10 Jan 2024 14:45:06 +0100 Subject: [PATCH 10/85] Make BlockHeader from_data public --- zcash_primitives/src/block.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zcash_primitives/src/block.rs b/zcash_primitives/src/block.rs index e24dc1d2d3..18e20a5b87 100644 --- a/zcash_primitives/src/block.rs +++ b/zcash_primitives/src/block.rs @@ -92,7 +92,7 @@ impl BlockHeaderData { } impl BlockHeader { - fn from_data(data: BlockHeaderData) -> io::Result { + pub fn from_data(data: BlockHeaderData) -> io::Result { let mut header = BlockHeader { hash: BlockHash([0; 32]), data, From b0b0f655c7dd1ad69c89c3d4a0243eb8246b55f5 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:02:26 +0100 Subject: [PATCH 11/85] Make txid bytes public --- zcash_primitives/src/transaction/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index b7e9943295..f0c19b8f15 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -68,7 +68,7 @@ const ZFUTURE_TX_VERSION: u32 = 0x0000FFFF; /// - For v5 transactions onwards, this identifier is derived only from "effecting" data, /// and is non-malleable in all contexts. #[derive(Clone, Copy, PartialOrd, Ord, PartialEq, Eq, Hash)] -pub struct TxId([u8; 32]); +pub struct TxId(pub [u8; 32]); memuse::impl_no_dynamic_usage!(TxId); From dac8d1fe19231c40621e7a68de10e1a310c17186 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:19:01 +0100 Subject: [PATCH 12/85] Note serialization --- .../src/transaction/components.rs | 1 + .../src/transaction/components/note.rs | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 zcash_primitives/src/transaction/components/note.rs diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index f239b0ba01..9d0bff3d8d 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -18,6 +18,7 @@ pub mod sprout; pub mod transparent; #[cfg(zcash_unstable = "zfuture")] pub mod tze; +pub mod note; pub use self::{ amount::Amount, diff --git a/zcash_primitives/src/transaction/components/note.rs b/zcash_primitives/src/transaction/components/note.rs new file mode 100644 index 0000000000..2994eb7113 --- /dev/null +++ b/zcash_primitives/src/transaction/components/note.rs @@ -0,0 +1,42 @@ +use std::io; +use std::io::{Read, Write}; +use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; +use orchard::{Address, Note}; +use orchard::note::{Nullifier, RandomSeed}; +use orchard::value::NoteValue; +use crate::transaction::components::orchard::read_nullifier; + +/// This will be a part of the 'issuance' component in ZSA release +fn read_recipient(mut reader: R) -> io::Result
{ + let mut bytes = [0u8; 43]; + reader.read_exact(&mut bytes)?; + Ok(Option::from(Address::from_raw_address_bytes(&bytes)).unwrap()) +} + +fn read_rseed(mut reader: R, nullifier: &Nullifier) -> io::Result { + let mut bytes = [0u8; 32]; + reader.read_exact(&mut bytes)?; + Ok(Option::from(RandomSeed::from_bytes(bytes, nullifier)).unwrap()) +} + +pub fn read_note(mut reader: R) -> io::Result { + let recipient = read_recipient(&mut reader)?; + let value = reader.read_u64::()?; + let rho = read_nullifier(&mut reader)?; + let rseed = read_rseed(&mut reader, &rho)?; + Ok(Option::from(Note::from_parts( + recipient, + NoteValue::from_raw(value), + rho, + rseed, + )) + .unwrap()) +} + +pub fn write_note(note: &Note, writer: &mut W) -> io::Result<()> { + writer.write_all(¬e.recipient().to_raw_address_bytes())?; + writer.write_u64::(note.value().inner())?; + writer.write_all(¬e.rho().to_bytes())?; + writer.write_all(note.rseed().as_bytes())?; + Ok(()) +} From cd8524b28e71ad03a7b254c9d6c57ac99d45e75d Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 29 Feb 2024 15:31:22 +0100 Subject: [PATCH 13/85] Update zcash_primitives to use the generalised version of orchard crate (which supports Vanilla and ZSA) - but for now zcash_primitives is not generalised itself and pinned to Vanilla only --- zcash_primitives/src/transaction/builder.rs | 22 +++++++------ .../src/transaction/components/note.rs | 13 ++++---- .../src/transaction/components/orchard.rs | 33 +++++++++++++------ zcash_primitives/src/transaction/mod.rs | 18 ++++++---- zcash_primitives/src/transaction/txid.rs | 10 +++--- 5 files changed, 58 insertions(+), 38 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index a93b108b5c..f6c08093aa 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -49,8 +49,7 @@ use crate::{ }, }; -use super::components::amount::NonNegativeAmount; -use super::components::sapling::zip212_enforcement; +use orchard::{note::AssetBase, note_encryption_vanilla::OrchardDomainVanilla}; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -796,14 +795,17 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< let orchard_bundle = unauthed_tx .orchard_bundle .map(|b| { - b.create_proof(&orchard::circuit::ProvingKey::build(), &mut rng) - .and_then(|b| { - b.apply_signatures( - &mut rng, - *shielded_sig_commitment.as_ref(), - &self.orchard_saks, - ) - }) + b.create_proof( + &orchard::circuit::ProvingKey::build::(), + &mut rng, + ) + .and_then(|b| { + b.apply_signatures( + &mut rng, + *shielded_sig_commitment.as_ref(), + &self.orchard_saks, + ) + }) }) .transpose() .map_err(Error::OrchardBuild)?; diff --git a/zcash_primitives/src/transaction/components/note.rs b/zcash_primitives/src/transaction/components/note.rs index 2994eb7113..ea2f19e4ab 100644 --- a/zcash_primitives/src/transaction/components/note.rs +++ b/zcash_primitives/src/transaction/components/note.rs @@ -1,10 +1,10 @@ -use std::io; -use std::io::{Read, Write}; +use crate::transaction::components::orchard::read_nullifier; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; -use orchard::{Address, Note}; -use orchard::note::{Nullifier, RandomSeed}; +use orchard::note::{AssetBase, Nullifier, RandomSeed}; use orchard::value::NoteValue; -use crate::transaction::components::orchard::read_nullifier; +use orchard::{Address, Note}; +use std::io; +use std::io::{Read, Write}; /// This will be a part of the 'issuance' component in ZSA release fn read_recipient(mut reader: R) -> io::Result
{ @@ -27,10 +27,11 @@ pub fn read_note(mut reader: R) -> io::Result { Ok(Option::from(Note::from_parts( recipient, NoteValue::from_raw(value), + AssetBase::native(), // FIXME: pass burns here for ZSA rho, rseed, )) - .unwrap()) + .unwrap()) } pub fn write_note(note: &Note, writer: &mut W) -> io::Result<()> { diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 180466323c..d17c71bc77 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -7,6 +7,7 @@ use nonempty::NonEmpty; use orchard::{ bundle::{Authorization, Authorized, Flags}, note::{ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, + note_encryption_vanilla::{NoteCiphertextBytes, OrchardDomainVanilla, ENC_CIPHERTEXT_SIZE}, primitives::redpallas::{self, SigType, Signature, SpendAuth, VerificationKey}, value::ValueCommitment, Action, Anchor, @@ -47,7 +48,7 @@ impl MapAuth for () { /// Reads an [`orchard::Bundle`] from a v5 transaction format. pub fn read_v5_bundle( mut reader: R, -) -> io::Result>> { +) -> io::Result>> { #[allow(clippy::redundant_closure)] let actions_without_auth = Vector::read(&mut reader, |r| read_action_without_auth(r))?; if actions_without_auth.is_empty() { @@ -134,21 +135,33 @@ pub fn read_cmx(mut reader: R) -> io::Result { }) } -pub fn read_note_ciphertext(mut reader: R) -> io::Result { - let mut tnc = TransmittedNoteCiphertext { +pub fn read_note_ciphertext( + mut reader: R, +) -> io::Result> { + /* + let mut epk_bytes = [0u8; 32] + // FIXME: use another ENC_CIPHERTEXT_SIZE for ZSA + let enc_ciphertext = [0u8; ENC_CIPHERTEXT_SIZE]; + let out_ciphertext = [0u8; 80]; + + enc_ciphertext: [0u8; ENC_CIPHERTEXT_SIZE], + */ + let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: [0u8; 612], + enc_ciphertext: NoteCiphertextBytes([0u8; ENC_CIPHERTEXT_SIZE]), out_ciphertext: [0u8; 80], }; reader.read_exact(&mut tnc.epk_bytes)?; - reader.read_exact(&mut tnc.enc_ciphertext)?; + reader.read_exact(&mut tnc.enc_ciphertext.0)?; reader.read_exact(&mut tnc.out_ciphertext)?; Ok(tnc) } -pub fn read_action_without_auth(mut reader: R) -> io::Result> { +pub fn read_action_without_auth( + mut reader: R, +) -> io::Result> { let cv_net = read_value_commitment(&mut reader)?; let nf_old = read_nullifier(&mut reader)?; let rk = read_verification_key(&mut reader)?; @@ -195,7 +208,7 @@ pub fn read_signature(mut reader: R) -> io::Result( - bundle: Option<&orchard::Bundle>, + bundle: Option<&orchard::Bundle>, mut writer: W, ) -> io::Result<()> { if let Some(bundle) = &bundle { @@ -247,16 +260,16 @@ pub fn write_cmx(mut writer: W, cmx: &ExtractedNoteCommitment) -> io:: pub fn write_note_ciphertext( mut writer: W, - nc: &TransmittedNoteCiphertext, + nc: &TransmittedNoteCiphertext, ) -> io::Result<()> { writer.write_all(&nc.epk_bytes)?; - writer.write_all(&nc.enc_ciphertext)?; + writer.write_all(nc.enc_ciphertext.as_ref())?; writer.write_all(&nc.out_ciphertext) } pub fn write_action_without_auth( mut writer: W, - act: &Action<::SpendAuth>, + act: &Action<::SpendAuth, OrchardDomainVanilla>, ) -> io::Result<()> { write_value_commitment(&mut writer, act.cv_net())?; write_nullifier(&mut writer, act.nullifier())?; diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index f0c19b8f15..884ee0a527 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -41,6 +41,8 @@ use self::{ #[cfg(zcash_unstable = "zfuture")] use self::components::tze::{self, TzeIn, TzeOut}; +use orchard::note_encryption_vanilla::OrchardDomainVanilla; + const OVERWINTER_VERSION_GROUP_ID: u32 = 0x03C48270; const OVERWINTER_TX_VERSION: u32 = 3; const SAPLING_VERSION_GROUP_ID: u32 = 0x892F2085; @@ -292,7 +294,7 @@ impl Authorization for Unauthorized { type SaplingAuth = sapling_builder::InProgress; type OrchardAuth = - orchard::builder::InProgress; + orchard::builder::InProgress, orchard::builder::Unauthorized>; #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::builder::Unauthorized; @@ -329,7 +331,7 @@ pub struct TransactionData { transparent_bundle: Option>, sprout_bundle: Option, sapling_bundle: Option>, - orchard_bundle: Option>, + orchard_bundle: Option>, #[cfg(zcash_unstable = "zfuture")] tze_bundle: Option>, } @@ -345,7 +347,7 @@ impl TransactionData { transparent_bundle: Option>, sprout_bundle: Option, sapling_bundle: Option>, - orchard_bundle: Option>, + orchard_bundle: Option>, ) -> Self { TransactionData { version, @@ -419,7 +421,9 @@ impl TransactionData { self.sapling_bundle.as_ref() } - pub fn orchard_bundle(&self) -> Option<&orchard::Bundle> { + pub fn orchard_bundle( + &self, + ) -> Option<&orchard::Bundle> { self.orchard_bundle.as_ref() } @@ -487,8 +491,8 @@ impl TransactionData { Option>, ) -> Option>, f_orchard: impl FnOnce( - Option>, - ) -> Option>, + Option>, + ) -> Option>, #[cfg(zcash_unstable = "zfuture")] f_tze: impl FnOnce( Option>, ) @@ -955,7 +959,7 @@ pub trait TransactionDigest { fn digest_orchard( &self, - orchard_bundle: Option<&orchard::Bundle>, + orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; #[cfg(zcash_unstable = "zfuture")] diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 84941271c9..bc18b462b3 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -5,7 +5,7 @@ use std::io::Write; use blake2b_simd::{Hash as Blake2bHash, Params, State}; use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; -use orchard::bundle::{self as orchard}; +use orchard::{bundle, note_encryption_vanilla::OrchardDomainVanilla}; use crate::{ consensus::{BlockHeight, BranchId}, @@ -335,7 +335,7 @@ impl TransactionDigest for TxIdDigester { fn digest_orchard( &self, - orchard_bundle: Option<&orchard::Bundle>, + orchard_bundle: Option<&bundle::Bundle>, ) -> Self::OrchardDigest { orchard_bundle.map(|b| b.commitment().0) } @@ -390,7 +390,7 @@ pub(crate) fn to_hash( .unwrap(); h.write_all( orchard_digest - .unwrap_or_else(orchard::commitments::hash_bundle_txid_empty) + .unwrap_or_else(bundle::commitments::hash_bundle_txid_empty) .as_bytes(), ) .unwrap(); @@ -492,9 +492,9 @@ impl TransactionDigest for BlockTxCommitmentDigester { fn digest_orchard( &self, - orchard_bundle: Option<&orchard::Bundle>, + orchard_bundle: Option<&bundle::Bundle>, ) -> Self::OrchardDigest { - orchard_bundle.map_or_else(orchard::commitments::hash_bundle_auth_empty, |b| { + orchard_bundle.map_or_else(bundle::commitments::hash_bundle_auth_empty, |b| { b.authorizing_commitment().0 }) } From 3c83b72a431622e2a534674aaac8554fbeb000c2 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Mon, 4 Mar 2024 08:22:05 +0100 Subject: [PATCH 14/85] Fix tests accordingly to modifications in orchard --- .../src/transaction/components/orchard.rs | 15 +++++++++------ zcash_primitives/src/transaction/mod.rs | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index d17c71bc77..e98bfae348 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -283,9 +283,12 @@ pub fn write_action_without_auth( pub mod testing { use proptest::prelude::*; - use orchard::bundle::{ - testing::{self as t_orch}, - Authorized, Bundle, + use orchard::{ + bundle::{ + testing::{self as t_orch}, + Authorized, Bundle, + }, + note_encryption_vanilla::OrchardDomainVanilla, }; use crate::transaction::{ @@ -296,8 +299,8 @@ pub mod testing { prop_compose! { pub fn arb_bundle(n_actions: usize)( orchard_value_balance in arb_amount(), - bundle in t_orch::arb_bundle(n_actions) - ) -> Bundle { + bundle in t_orch::BundleArb::arb_bundle(n_actions) + ) -> Bundle { // overwrite the value balance, as we can't guarantee that the // value doesn't exceed the MAX_MONEY bounds. bundle.try_map_value_balance::<_, (), _>(|_| Ok(orchard_value_balance)).unwrap() @@ -306,7 +309,7 @@ pub mod testing { pub fn arb_bundle_for_version( v: TxVersion, - ) -> impl Strategy>> { + ) -> impl Strategy>> { if v.has_orchard() { Strategy::boxed((1usize..100).prop_flat_map(|n| prop::option::of(arb_bundle(n)))) } else { diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 884ee0a527..84296459b5 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -375,7 +375,7 @@ impl TransactionData { transparent_bundle: Option>, sprout_bundle: Option, sapling_bundle: Option>, - orchard_bundle: Option>, + orchard_bundle: Option>, tze_bundle: Option>, ) -> Self { TransactionData { From aac4840bf55f7c8ecfe1f7d68482337332b40fac Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 5 Mar 2024 15:14:33 +0100 Subject: [PATCH 15/85] Minor fix or Rust code format (because of cargo fmt error) --- zcash_primitives/src/transaction/components.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index 9d0bff3d8d..f239b0ba01 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -18,7 +18,6 @@ pub mod sprout; pub mod transparent; #[cfg(zcash_unstable = "zfuture")] pub mod tze; -pub mod note; pub use self::{ amount::Amount, From 6da0474940595a39b56f0c7d941ceacfd8cba962 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 13 May 2024 15:49:40 +0200 Subject: [PATCH 16/85] Fix post-rebase problems --- Cargo.lock | 18 +++++++--- Cargo.toml | 7 ++-- zcash_primitives/src/transaction/builder.rs | 7 ++-- .../src/transaction/components/orchard.rs | 35 ++++++++++--------- zcash_primitives/src/transaction/mod.rs | 19 +++++----- zcash_primitives/src/transaction/txid.rs | 7 ++-- 6 files changed, 51 insertions(+), 42 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f17ea93e40..a90e1ffb07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -460,7 +460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" dependencies = [ "ciborium-io", - "half", + "half 1.8.2", ] [[package]] @@ -973,10 +973,19 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + [[package]] name = "halo2_gadgets" version = "0.3.0" -source = "git+https://github.com/QED-it/halo2?branch=zsa1#5f436dc3387665fe3201d381791a62a8233b2171" +source = "git+https://github.com/QED-it/halo2?branch=orchardzsa-backward-compatability#4cc147385e7cf106b9fab6d6951d66a343899e38" dependencies = [ "arrayvec", "bitvec", @@ -999,7 +1008,7 @@ checksum = "47716fe1ae67969c5e0b2ef826f32db8c3be72be325e1aa3c1951d06b5575ec5" [[package]] name = "halo2_proofs" version = "0.3.0" -source = "git+https://github.com/QED-it/halo2?branch=zsa1#5f436dc3387665fe3201d381791a62a8233b2171" +source = "git+https://github.com/QED-it/halo2?branch=orchardzsa-backward-compatability#4cc147385e7cf106b9fab6d6951d66a343899e38" dependencies = [ "blake2b_simd", "ff", @@ -1572,7 +1581,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=zsa1#78c8efc23a37dc1d64ded53fab231098681966c0" +source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0#c99c043d0705a8d12264ca03303163f9850a70b5" dependencies = [ "aes", "bitvec", @@ -1580,6 +1589,7 @@ dependencies = [ "ff", "fpe", "group", + "half 2.2.1", "halo2_gadgets", "halo2_proofs", "hex", diff --git a/Cargo.toml b/Cargo.toml index a135ff26a1..f2df5c554e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,7 +34,7 @@ zcash_address = { version = "0.3", path = "components/zcash_address" } zcash_client_backend = { version = "0.12", path = "zcash_client_backend" } zcash_encoding = { version = "0.2", path = "components/zcash_encoding" } zcash_keys = { version = "0.2", path = "zcash_keys" } -zcash_protocol = { version = "0.1", path = "components/zcash_protocol" } +zcash_protocol = { version = "0.1", path = "components/zcash_protocol", features = ["test-dependencies"] } zip321 = { version = "0.0", path = "components/zip321" } zcash_note_encryption = "0.4" @@ -58,7 +58,7 @@ sapling = { package = "sapling-crypto", version = "0.1.3" } # - Orchard nonempty = "0.7" -orchard = { version = "0.8.0", default-features = false } +orchard = { version = "0.8.0", default-features = false, git = "https://github.com/QED-it/orchard", branch = "orchardzsa-backward-compatability-0.8.0" } pasta_curves = "0.5" # - Transparent @@ -122,6 +122,3 @@ zip32 = "0.1.1" lto = true panic = 'abort' codegen-units = 1 - -[patch.crates-io] -orchard = { version = "0.8.0", git = "https://github.com/QED-it/orchard", branch = "zsa1" } diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index f6c08093aa..e3dfadae6d 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -36,6 +36,7 @@ use orchard::note::AssetBase; #[cfg(not(feature = "transparent-inputs"))] use std::convert::Infallible; use orchard::note::AssetBase; +use orchard::orchard_flavor::OrchardVanilla; #[cfg(zcash_unstable = "zfuture")] use crate::{ @@ -48,8 +49,8 @@ use crate::{ fees::FutureFeeRule, }, }; - -use orchard::{note::AssetBase, note_encryption_vanilla::OrchardDomainVanilla}; +use crate::transaction::components::amount::NonNegativeAmount; +use crate::transaction::components::sapling::zip212_enforcement; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -796,7 +797,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .orchard_bundle .map(|b| { b.create_proof( - &orchard::circuit::ProvingKey::build::(), + &orchard::circuit::ProvingKey::build::(), &mut rng, ) .and_then(|b| { diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index e98bfae348..e4ee49871b 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -7,11 +7,12 @@ use nonempty::NonEmpty; use orchard::{ bundle::{Authorization, Authorized, Flags}, note::{ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, - note_encryption_vanilla::{NoteCiphertextBytes, OrchardDomainVanilla, ENC_CIPHERTEXT_SIZE}, primitives::redpallas::{self, SigType, Signature, SpendAuth, VerificationKey}, value::ValueCommitment, Action, Anchor, }; +use orchard::note_encryption::OrchardDomain; +use orchard::orchard_flavor::OrchardVanilla; use zcash_encoding::{Array, CompactSize, Vector}; use super::Amount; @@ -48,7 +49,7 @@ impl MapAuth for () { /// Reads an [`orchard::Bundle`] from a v5 transaction format. pub fn read_v5_bundle( mut reader: R, -) -> io::Result>> { +) -> io::Result>> { #[allow(clippy::redundant_closure)] let actions_without_auth = Vector::read(&mut reader, |r| read_action_without_auth(r))?; if actions_without_auth.is_empty() { @@ -137,7 +138,7 @@ pub fn read_cmx(mut reader: R) -> io::Result { pub fn read_note_ciphertext( mut reader: R, -) -> io::Result> { +) -> io::Result> { /* let mut epk_bytes = [0u8; 32] // FIXME: use another ENC_CIPHERTEXT_SIZE for ZSA @@ -146,9 +147,11 @@ pub fn read_note_ciphertext( enc_ciphertext: [0u8; ENC_CIPHERTEXT_SIZE], */ - let mut tnc = TransmittedNoteCiphertext:: { + let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: NoteCiphertextBytes([0u8; ENC_CIPHERTEXT_SIZE]), + enc_ciphertext: ::NoteCiphertextBytes::from( + [0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref(), + ), out_ciphertext: [0u8; 80], }; @@ -161,7 +164,7 @@ pub fn read_note_ciphertext( pub fn read_action_without_auth( mut reader: R, -) -> io::Result> { +) -> io::Result> { let cv_net = read_value_commitment(&mut reader)?; let nf_old = read_nullifier(&mut reader)?; let rk = read_verification_key(&mut reader)?; @@ -208,7 +211,7 @@ pub fn read_signature(mut reader: R) -> io::Result( - bundle: Option<&orchard::Bundle>, + bundle: Option<&orchard::Bundle>, mut writer: W, ) -> io::Result<()> { if let Some(bundle) = &bundle { @@ -260,7 +263,7 @@ pub fn write_cmx(mut writer: W, cmx: &ExtractedNoteCommitment) -> io:: pub fn write_note_ciphertext( mut writer: W, - nc: &TransmittedNoteCiphertext, + nc: &TransmittedNoteCiphertext, ) -> io::Result<()> { writer.write_all(&nc.epk_bytes)?; writer.write_all(nc.enc_ciphertext.as_ref())?; @@ -269,7 +272,7 @@ pub fn write_note_ciphertext( pub fn write_action_without_auth( mut writer: W, - act: &Action<::SpendAuth, OrchardDomainVanilla>, + act: &Action<::SpendAuth, OrchardVanilla>, ) -> io::Result<()> { write_value_commitment(&mut writer, act.cv_net())?; write_nullifier(&mut writer, act.nullifier())?; @@ -288,19 +291,17 @@ pub mod testing { testing::{self as t_orch}, Authorized, Bundle, }, - note_encryption_vanilla::OrchardDomainVanilla, - }; - - use crate::transaction::{ - components::amount::{testing::arb_amount, Amount}, - TxVersion, }; + use orchard::orchard_flavor::OrchardVanilla; + use crate::transaction::components::Amount; + use crate::transaction::components::amount::testing::arb_amount; + use crate::transaction::TxVersion; prop_compose! { pub fn arb_bundle(n_actions: usize)( orchard_value_balance in arb_amount(), bundle in t_orch::BundleArb::arb_bundle(n_actions) - ) -> Bundle { + ) -> Bundle { // overwrite the value balance, as we can't guarantee that the // value doesn't exceed the MAX_MONEY bounds. bundle.try_map_value_balance::<_, (), _>(|_| Ok(orchard_value_balance)).unwrap() @@ -309,7 +310,7 @@ pub mod testing { pub fn arb_bundle_for_version( v: TxVersion, - ) -> impl Strategy>> { + ) -> impl Strategy>> { if v.has_orchard() { Strategy::boxed((1usize..100).prop_flat_map(|n| prop::option::of(arb_bundle(n)))) } else { diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 84296459b5..61c557b27e 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -19,6 +19,7 @@ use std::fmt; use std::fmt::Debug; use std::io::{self, Read, Write}; use std::ops::Deref; +use orchard::orchard_flavor::OrchardVanilla; use zcash_encoding::{CompactSize, Vector}; use crate::{ @@ -41,8 +42,6 @@ use self::{ #[cfg(zcash_unstable = "zfuture")] use self::components::tze::{self, TzeIn, TzeOut}; -use orchard::note_encryption_vanilla::OrchardDomainVanilla; - const OVERWINTER_VERSION_GROUP_ID: u32 = 0x03C48270; const OVERWINTER_TX_VERSION: u32 = 3; const SAPLING_VERSION_GROUP_ID: u32 = 0x892F2085; @@ -294,7 +293,7 @@ impl Authorization for Unauthorized { type SaplingAuth = sapling_builder::InProgress; type OrchardAuth = - orchard::builder::InProgress, orchard::builder::Unauthorized>; + orchard::builder::InProgress, orchard::builder::Unauthorized>; #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::builder::Unauthorized; @@ -331,7 +330,7 @@ pub struct TransactionData { transparent_bundle: Option>, sprout_bundle: Option, sapling_bundle: Option>, - orchard_bundle: Option>, + orchard_bundle: Option>, #[cfg(zcash_unstable = "zfuture")] tze_bundle: Option>, } @@ -347,7 +346,7 @@ impl TransactionData { transparent_bundle: Option>, sprout_bundle: Option, sapling_bundle: Option>, - orchard_bundle: Option>, + orchard_bundle: Option>, ) -> Self { TransactionData { version, @@ -375,7 +374,7 @@ impl TransactionData { transparent_bundle: Option>, sprout_bundle: Option, sapling_bundle: Option>, - orchard_bundle: Option>, + orchard_bundle: Option>, tze_bundle: Option>, ) -> Self { TransactionData { @@ -423,7 +422,7 @@ impl TransactionData { pub fn orchard_bundle( &self, - ) -> Option<&orchard::Bundle> { + ) -> Option<&orchard::Bundle> { self.orchard_bundle.as_ref() } @@ -491,8 +490,8 @@ impl TransactionData { Option>, ) -> Option>, f_orchard: impl FnOnce( - Option>, - ) -> Option>, + Option>, + ) -> Option>, #[cfg(zcash_unstable = "zfuture")] f_tze: impl FnOnce( Option>, ) @@ -959,7 +958,7 @@ pub trait TransactionDigest { fn digest_orchard( &self, - orchard_bundle: Option<&orchard::Bundle>, + orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; #[cfg(zcash_unstable = "zfuture")] diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index bc18b462b3..69fca722cc 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -5,7 +5,8 @@ use std::io::Write; use blake2b_simd::{Hash as Blake2bHash, Params, State}; use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; -use orchard::{bundle, note_encryption_vanilla::OrchardDomainVanilla}; +use orchard::bundle; +use orchard::orchard_flavor::OrchardVanilla; use crate::{ consensus::{BlockHeight, BranchId}, @@ -335,7 +336,7 @@ impl TransactionDigest for TxIdDigester { fn digest_orchard( &self, - orchard_bundle: Option<&bundle::Bundle>, + orchard_bundle: Option<&bundle::Bundle>, ) -> Self::OrchardDigest { orchard_bundle.map(|b| b.commitment().0) } @@ -492,7 +493,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { fn digest_orchard( &self, - orchard_bundle: Option<&bundle::Bundle>, + orchard_bundle: Option<&bundle::Bundle>, ) -> Self::OrchardDigest { orchard_bundle.map_or_else(bundle::commitments::hash_bundle_auth_empty, |b| { b.authorizing_commitment().0 From 0049a3b7b2e1320685d48200d056e9f7e300087a Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:19:01 +0100 Subject: [PATCH 17/85] Note serialization --- zcash_primitives/src/transaction/components.rs | 1 + zcash_primitives/src/transaction/components/note.rs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index f239b0ba01..9d0bff3d8d 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -18,6 +18,7 @@ pub mod sprout; pub mod transparent; #[cfg(zcash_unstable = "zfuture")] pub mod tze; +pub mod note; pub use self::{ amount::Amount, diff --git a/zcash_primitives/src/transaction/components/note.rs b/zcash_primitives/src/transaction/components/note.rs index ea2f19e4ab..9c06097272 100644 --- a/zcash_primitives/src/transaction/components/note.rs +++ b/zcash_primitives/src/transaction/components/note.rs @@ -1,10 +1,15 @@ use crate::transaction::components::orchard::read_nullifier; +use std::io; +use std::io::{Read, Write}; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use orchard::note::{AssetBase, Nullifier, RandomSeed}; +use orchard::{Address, Note}; +use orchard::note::{Nullifier, RandomSeed}; use orchard::value::NoteValue; use orchard::{Address, Note}; use std::io; use std::io::{Read, Write}; +use crate::transaction::components::orchard::read_nullifier; /// This will be a part of the 'issuance' component in ZSA release fn read_recipient(mut reader: R) -> io::Result
{ From 98f4747f06ed27e222033457c0c972917f64b363 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Thu, 29 Feb 2024 15:31:22 +0100 Subject: [PATCH 18/85] Update zcash_primitives to use the generalised version of orchard crate (which supports Vanilla and ZSA) - but for now zcash_primitives is not generalised itself and pinned to Vanilla only --- zcash_primitives/src/transaction/builder.rs | 2 ++ zcash_primitives/src/transaction/components/orchard.rs | 1 + zcash_primitives/src/transaction/mod.rs | 2 ++ 3 files changed, 5 insertions(+) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index e3dfadae6d..754db889dc 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -52,6 +52,8 @@ use crate::{ use crate::transaction::components::amount::NonNegativeAmount; use crate::transaction::components::sapling::zip212_enforcement; +use orchard::{note::AssetBase, note_encryption_vanilla::OrchardDomainVanilla}; + /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// const DEFAULT_TX_EXPIRY_DELTA: u32 = 40; diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index e4ee49871b..0e818c6b8b 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -7,6 +7,7 @@ use nonempty::NonEmpty; use orchard::{ bundle::{Authorization, Authorized, Flags}, note::{ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, + note_encryption_vanilla::{NoteCiphertextBytes, OrchardDomainVanilla, ENC_CIPHERTEXT_SIZE}, primitives::redpallas::{self, SigType, Signature, SpendAuth, VerificationKey}, value::ValueCommitment, Action, Anchor, diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 61c557b27e..df0920e6e6 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -42,6 +42,8 @@ use self::{ #[cfg(zcash_unstable = "zfuture")] use self::components::tze::{self, TzeIn, TzeOut}; +use orchard::note_encryption_vanilla::OrchardDomainVanilla; + const OVERWINTER_VERSION_GROUP_ID: u32 = 0x03C48270; const OVERWINTER_TX_VERSION: u32 = 3; const SAPLING_VERSION_GROUP_ID: u32 = 0x892F2085; From 2365c2b54a3797459bb7c46e73c174fa9974feab Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 6 Mar 2024 13:32:56 +0100 Subject: [PATCH 19/85] Introduce issue bundle --- components/zcash_protocol/src/consensus.rs | 11 +- zcash_primitives/src/transaction/builder.rs | 8 + .../src/transaction/components.rs | 1 + .../src/transaction/components/issuance.rs | 150 ++++++++++++++++++ zcash_primitives/src/transaction/mod.rs | 96 ++++++++++- zcash_primitives/src/transaction/sighash.rs | 3 + .../src/transaction/sighash_v5.rs | 40 +++++ zcash_primitives/src/transaction/tests.rs | 2 + zcash_primitives/src/transaction/txid.rs | 32 ++++ 9 files changed, 333 insertions(+), 10 deletions(-) create mode 100644 zcash_primitives/src/transaction/components/issuance.rs diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index 32af0be70b..26b2692528 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -355,7 +355,7 @@ impl Parameters for MainNetwork { NetworkUpgrade::Canopy => Some(BlockHeight(1_046_400)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_687_104)), #[cfg(zcash_unstable = "nu6")] - NetworkUpgrade::Nu6 => None, + NetworkUpgrade::Nu6 => Some(BlockHeight(1_687_104)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -385,7 +385,7 @@ impl Parameters for TestNetwork { NetworkUpgrade::Canopy => Some(BlockHeight(1_028_500)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_842_420)), #[cfg(zcash_unstable = "nu6")] - NetworkUpgrade::Nu6 => None, + NetworkUpgrade::Nu6 => Some(BlockHeight(1_842_420)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -664,6 +664,13 @@ impl BranchId { let upper = None; (lower, upper) }), + BranchId::V6 => params.activation_height(NetworkUpgrade::V6).map(|lower| { + #[cfg(feature = "zfuture")] + let upper = params.activation_height(NetworkUpgrade::ZFuture); + #[cfg(not(feature = "zfuture"))] + let upper = None; + (lower, upper) + }), #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => None, #[cfg(zcash_unstable = "zfuture")] diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 754db889dc..dbcd9a0dad 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -53,6 +53,7 @@ use crate::transaction::components::amount::NonNegativeAmount; use crate::transaction::components::sapling::zip212_enforcement; use orchard::{note::AssetBase, note_encryption_vanilla::OrchardDomainVanilla}; +use orchard::issuance::{IssueBundle, Signed}; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -739,6 +740,9 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< None => (None, orchard::builder::BundleMetadata::empty()), }; + + let issue_bundle: Option> = None; // TODO + #[cfg(zcash_unstable = "zfuture")] let (tze_bundle, tze_signers) = self.tze_builder.build(); @@ -751,6 +755,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: None, sapling_bundle, orchard_bundle, + issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, }; @@ -813,6 +818,8 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .transpose() .map_err(Error::OrchardBuild)?; + let issue_bundle = None; // TODO + let authorized_tx = TransactionData { version: unauthed_tx.version, consensus_branch_id: unauthed_tx.consensus_branch_id, @@ -822,6 +829,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: unauthed_tx.sprout_bundle, sapling_bundle, orchard_bundle, + issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, }; diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index 9d0bff3d8d..4b6983b92b 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -19,6 +19,7 @@ pub mod transparent; #[cfg(zcash_unstable = "zfuture")] pub mod tze; pub mod note; +pub mod issuance; pub use self::{ amount::Amount, diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs new file mode 100644 index 0000000000..63f31d20e9 --- /dev/null +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -0,0 +1,150 @@ +use crate::transaction::components::orchard::{read_nullifier}; +use bitvec::macros::internal::funty::Fundamental; +use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; +use nonempty::NonEmpty; +use orchard::issuance::{IssueAction, IssueBundle, Signed}; +use orchard::keys::IssuanceValidatingKey; +use orchard::note::{AssetBase, Nullifier, RandomSeed}; +use orchard::value::NoteValue; +use orchard::{Address, Note}; +/// Functions for parsing & serialization of the issuance bundle components. +use std::io; +use std::io::{Read, Write}; +use zcash_encoding::{CompactSize, Vector}; + +/// Reads an [`orchard::Bundle`] from a v5 transaction format. +pub fn read_v5_bundle(mut reader: R) -> io::Result>> { + let actions = Vector::read(&mut reader, |r| read_action(r))?; + + if actions.is_empty() { + Ok(None) + } else { + let ik = read_ik(&mut reader); + let authorization = read_authorization(&mut reader); + + Ok(Some(IssueBundle::from_parts( + ik?, + NonEmpty::from_vec(actions).unwrap(), + authorization?, + ))) + } +} + +fn read_ik(mut reader: R) -> io::Result { + let mut bytes = [0u8; 32]; + reader.read_exact(&mut bytes)?; + Ok(IssuanceValidatingKey::from_bytes(&bytes).unwrap()) +} + +fn read_authorization(mut reader: R) -> io::Result { + let mut bytes = [0u8; 64]; + reader.read_exact(&mut bytes)?; + Ok(Signed::from_data(bytes)) +} + +fn read_action(mut reader: R) -> io::Result { + let finalize = reader.read_u8()?.as_bool(); + let notes = Vector::read(&mut reader, |r| read_note(r))?; + let asset_descr_bytes = Vector::read(&mut reader, |r| r.read_u8())?; + let asset_descr: String = String::from_utf8(asset_descr_bytes).unwrap(); + Ok(IssueAction::from_parts(asset_descr, notes, finalize)) +} + +fn read_note(mut reader: R) -> io::Result { + let recipient = read_recipient(&mut reader)?; + let value = reader.read_u64::()?; + let asset = read_asset(&mut reader)?; + let rho = read_nullifier(&mut reader)?; + let rseed = read_rseed(&mut reader, &rho)?; + Ok(Option::from(Note::from_parts( + recipient, + NoteValue::from_raw(value), + asset, + rho, + rseed, + )) + .unwrap()) +} + +fn read_recipient(mut reader: R) -> io::Result
{ + let mut bytes = [0u8; 43]; + reader.read_exact(&mut bytes)?; + Ok(Option::from(Address::from_raw_address_bytes(&bytes)).unwrap()) +} + +fn read_asset(mut reader: R) -> io::Result { + let mut bytes = [0u8; 32]; + reader.read_exact(&mut bytes)?; + Ok(Option::from(AssetBase::from_bytes(&bytes)).unwrap()) +} + +fn read_rseed(mut reader: R, nullifier: &Nullifier) -> io::Result { + let mut bytes = [0u8; 32]; + reader.read_exact(&mut bytes)?; + Ok(Option::from(RandomSeed::from_bytes(bytes, nullifier)).unwrap()) +} + +/// Writes an [`IssueBundle`] in the v5 transaction format. +pub fn write_v5_bundle( + bundle: Option<&IssueBundle>, + mut writer: W, +) -> io::Result<()> { + if let Some(bundle) = &bundle { + Vector::write_nonempty(&mut writer, bundle.actions(), |w, action| { + write_action(action, w) + })?; + writer.write_all(&bundle.ik().to_bytes())?; + writer.write_all(&<[u8; 64]>::from(bundle.authorization().signature()))?; + } else { + CompactSize::write(&mut writer, 0)?; + } + Ok(()) +} + +fn write_action(action: &IssueAction, mut writer: W) -> io::Result<()> { + writer.write_u8(action.is_finalized().as_u8())?; + Vector::write(&mut writer, action.notes(), |w, note| write_note(note, w))?; + Vector::write(&mut writer, action.asset_desc().as_bytes(), |w, b| { + w.write_u8(*b) + })?; + Ok(()) +} + +fn write_note(note: &Note, writer: &mut W) -> io::Result<()> { + writer.write_all(¬e.recipient().to_raw_address_bytes())?; + writer.write_u64::(note.value().inner())?; + writer.write_all(¬e.asset().to_bytes())?; + writer.write_all(¬e.rho().to_bytes())?; + writer.write_all(note.rseed().as_bytes())?; + Ok(()) +} + +#[cfg(any(test, feature = "test-dependencies"))] +pub mod testing { + use proptest::prelude::*; + + use orchard::issuance::{ + testing::{self as t_issue}, + IssueBundle, Signed, + }; + + use crate::transaction::TxVersion; + + prop_compose! { + pub fn arb_issue_bundle(n_actions: usize)( + bundle in t_issue::arb_signed_issue_bundle(n_actions) + ) -> IssueBundle { + bundle + } + } + + pub fn arb_bundle_for_version( + v: TxVersion, + ) -> impl Strategy>> { + if v.has_orchard() { + Strategy::boxed((1usize..100).prop_flat_map(|n| prop::option::of(arb_issue_bundle(n)))) + } else { + Strategy::boxed(Just(None)) + } + } +} diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index df0920e6e6..9f820cc2a6 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -19,8 +19,9 @@ use std::fmt; use std::fmt::Debug; use std::io::{self, Read, Write}; use std::ops::Deref; +use orchard::issuance::{IssueBundle, Signed}; +use zcash_encoding::{Array, CompactSize, Vector}; use orchard::orchard_flavor::OrchardVanilla; -use zcash_encoding::{CompactSize, Vector}; use crate::{ consensus::{BlockHeight, BranchId}, @@ -52,6 +53,9 @@ const SAPLING_TX_VERSION: u32 = 4; const V5_TX_VERSION: u32 = 5; const V5_VERSION_GROUP_ID: u32 = 0x26A7270A; +const V6_TX_VERSION: u32 = 6; +const V6_VERSION_GROUP_ID: u32 = 0x26A7270B; // TODO ??? + /// These versions are used exclusively for in-development transaction /// serialization, and will never be active under the consensus rules. /// When new consensus transaction versions are added, all call sites @@ -134,6 +138,7 @@ pub enum TxVersion { Overwinter, Sapling, Zip225, + Zsa, // TODO do we need this or shall we use Zip225? #[cfg(zcash_unstable = "zfuture")] ZFuture, } @@ -149,6 +154,7 @@ impl TxVersion { (OVERWINTER_TX_VERSION, OVERWINTER_VERSION_GROUP_ID) => Ok(TxVersion::Overwinter), (SAPLING_TX_VERSION, SAPLING_VERSION_GROUP_ID) => Ok(TxVersion::Sapling), (V5_TX_VERSION, V5_VERSION_GROUP_ID) => Ok(TxVersion::Zip225), + (V6_TX_VERSION, V6_VERSION_GROUP_ID) => Ok(TxVersion::Zsa), #[cfg(zcash_unstable = "zfuture")] (ZFUTURE_TX_VERSION, ZFUTURE_VERSION_GROUP_ID) => Ok(TxVersion::ZFuture), _ => Err(io::Error::new( @@ -179,6 +185,7 @@ impl TxVersion { TxVersion::Overwinter => OVERWINTER_TX_VERSION, TxVersion::Sapling => SAPLING_TX_VERSION, TxVersion::Zip225 => V5_TX_VERSION, + TxVersion::Zsa => V6_TX_VERSION, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_TX_VERSION, } @@ -190,6 +197,7 @@ impl TxVersion { TxVersion::Overwinter => OVERWINTER_VERSION_GROUP_ID, TxVersion::Sapling => SAPLING_VERSION_GROUP_ID, TxVersion::Zip225 => V5_VERSION_GROUP_ID, + TxVersion::Zsa => V6_VERSION_GROUP_ID, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_VERSION_GROUP_ID, } @@ -208,7 +216,7 @@ impl TxVersion { match self { TxVersion::Sprout(v) => *v >= 2u32, TxVersion::Overwinter | TxVersion::Sapling => true, - TxVersion::Zip225 => false, + TxVersion::Zip225 | TxVersion::Zsa => false, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -224,6 +232,7 @@ impl TxVersion { TxVersion::Sprout(_) | TxVersion::Overwinter => false, TxVersion::Sapling => true, TxVersion::Zip225 => true, + TxVersion::Zsa => true, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -233,12 +242,16 @@ impl TxVersion { pub fn has_orchard(&self) -> bool { match self { TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => false, - TxVersion::Zip225 => true, + TxVersion::Zip225 | TxVersion::Zsa => true, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } } + pub fn has_zsa(&self) -> bool { + matches!(self, TxVersion::Zsa) + } + #[cfg(zcash_unstable = "zfuture")] pub fn has_tze(&self) -> bool { matches!(self, TxVersion::ZFuture) @@ -254,7 +267,7 @@ impl TxVersion { } BranchId::Nu5 => TxVersion::Zip225, #[cfg(zcash_unstable = "nu6")] - BranchId::Nu6 => TxVersion::Zip225, + BranchId::Nu6 => TxVersion::Zsa, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => TxVersion::ZFuture, } @@ -333,6 +346,7 @@ pub struct TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, + issue_bundle: Option>, #[cfg(zcash_unstable = "zfuture")] tze_bundle: Option>, } @@ -349,6 +363,7 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, + issue_bundle: Option>, ) -> Self { TransactionData { version, @@ -359,6 +374,7 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, + issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, } @@ -377,6 +393,7 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, + issue_bundle: Option>, tze_bundle: Option>, ) -> Self { TransactionData { @@ -388,6 +405,7 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, + issue_bundle, tze_bundle, } } @@ -428,6 +446,10 @@ impl TransactionData { self.orchard_bundle.as_ref() } + pub fn issue_bundle(&self) -> Option<&IssueBundle> { + self.issue_bundle.as_ref() + } + #[cfg(zcash_unstable = "zfuture")] pub fn tze_bundle(&self) -> Option<&tze::Bundle> { self.tze_bundle.as_ref() @@ -474,6 +496,7 @@ impl TransactionData { digester.digest_transparent(self.transparent_bundle.as_ref()), digester.digest_sapling(self.sapling_bundle.as_ref()), digester.digest_orchard(self.orchard_bundle.as_ref()), + digester.digest_issue(self.issue_bundle.as_ref()), #[cfg(zcash_unstable = "zfuture")] digester.digest_tze(self.tze_bundle.as_ref()), ) @@ -508,6 +531,7 @@ impl TransactionData { sprout_bundle: self.sprout_bundle, sapling_bundle: f_sapling(self.sapling_bundle), orchard_bundle: f_orchard(self.orchard_bundle), + issue_bundle: self.issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: f_tze(self.tze_bundle), } @@ -545,6 +569,7 @@ impl TransactionData { |f, a| f.map_authorization(a), ) }), + issue_bundle: self.issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: self.tze_bundle.map(|b| b.map_authorization(f_tze)), } @@ -571,7 +596,7 @@ impl Transaction { TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => { Self::from_data_v4(data) } - TxVersion::Zip225 => Ok(Self::from_data_v5(data)), + TxVersion::Zip225 | TxVersion::Zsa => Ok(Self::from_data_v5(data)), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Ok(Self::from_data_v5(data)), } @@ -615,6 +640,7 @@ impl Transaction { Self::read_v4(reader, version, consensus_branch_id) } TxVersion::Zip225 => Self::read_v5(reader.into_base_reader(), version), + TxVersion::Zsa => Self::read_v6(reader.into_base_reader(), version), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Self::read_v5(reader.into_base_reader(), version), } @@ -691,6 +717,7 @@ impl Transaction { ) }), orchard_bundle: None, + issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, }, @@ -743,6 +770,7 @@ impl Transaction { sprout_bundle: None, sapling_bundle, orchard_bundle, + issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle, }; @@ -771,6 +799,40 @@ impl Transaction { sapling_serialization::read_v5_bundle(reader) } + fn read_v6(mut reader: R, version: TxVersion) -> io::Result { + let (consensus_branch_id, lock_time, expiry_height) = + Self::read_v5_header_fragment(&mut reader)?; + let transparent_bundle = Self::read_transparent(&mut reader)?; + let sapling_bundle = Self::read_v5_sapling(&mut reader)?; + // TODO zsa orchards bundle + let orchard_bundle = orchard_serialization::read_v5_bundle(&mut reader)?; + // TODO issue bundle + let issue_bundle = None; + + #[cfg(feature = "zfuture")] + let tze_bundle = if version.has_tze() { + Self::read_tze(&mut reader)? + } else { + None + }; + + let data = TransactionData { + version, + consensus_branch_id, + lock_time, + expiry_height, + transparent_bundle, + sprout_bundle: None, + sapling_bundle, + orchard_bundle, + issue_bundle, + #[cfg(feature = "zfuture")] + tze_bundle, + }; + + Ok(Self::from_data_v5(data)) + } + #[cfg(zcash_unstable = "zfuture")] fn read_tze(mut reader: &mut R) -> io::Result>> { let vin = Vector::read(&mut reader, TzeIn::read)?; @@ -792,6 +854,7 @@ impl Transaction { self.write_v4(writer) } TxVersion::Zip225 => self.write_v5(writer), + TxVersion::Zsa => self.write_v6(writer), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => self.write_v5(writer), } @@ -886,6 +949,12 @@ impl Transaction { sapling_serialization::write_v5_bundle(writer, self.sapling_bundle.as_ref()) } + + pub fn write_v6(&self, mut writer: W) -> io::Result<()> { + // TODO + Ok(()) + } + #[cfg(zcash_unstable = "zfuture")] pub fn write_tze(&self, mut writer: W) -> io::Result<()> { if let Some(bundle) = &self.tze_bundle { @@ -925,6 +994,7 @@ pub struct TxDigests { pub transparent_digests: Option>, pub sapling_digest: Option, pub orchard_digest: Option, + pub issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] pub tze_digests: Option>, } @@ -934,6 +1004,7 @@ pub trait TransactionDigest { type TransparentDigest; type SaplingDigest; type OrchardDigest; + type IssueDigest; #[cfg(zcash_unstable = "zfuture")] type TzeDigest; @@ -963,6 +1034,7 @@ pub trait TransactionDigest { orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; + fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest; #[cfg(zcash_unstable = "zfuture")] fn digest_tze(&self, tze_bundle: Option<&tze::Bundle>) -> Self::TzeDigest; @@ -972,6 +1044,7 @@ pub trait TransactionDigest { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, + issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest; } @@ -985,6 +1058,7 @@ pub mod testing { use proptest::prelude::*; use crate::consensus::BranchId; + use crate::transaction::components::issuance; use super::{ components::{ @@ -1010,8 +1084,7 @@ pub mod testing { Just(TxVersion::Sapling).boxed() } BranchId::Nu5 => Just(TxVersion::Zip225).boxed(), - #[cfg(zcash_unstable = "nu6")] - BranchId::Nu6 => Just(TxVersion::Zip225).boxed(), + BranchId::V6 => Just(TxVersion::Zsa).boxed(), #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => Just(TxVersion::ZFuture).boxed(), } @@ -1027,6 +1100,8 @@ pub mod testing { transparent_bundle in transparent::arb_bundle(), sapling_bundle in sapling::arb_bundle_for_version(version), orchard_bundle in orchard::arb_bundle_for_version(version), + orchard_zsa_bundle in orchard::arb_bundle_for_version(version), + issue_bundle in issuance::testing::arb_bundle_for_version(version), version in Just(version) ) -> TransactionData { TransactionData { @@ -1037,7 +1112,8 @@ pub mod testing { transparent_bundle, sprout_bundle: None, sapling_bundle, - orchard_bundle + orchard_bundle, + issue_bundle, } } } @@ -1052,6 +1128,8 @@ pub mod testing { transparent_bundle in transparent::arb_bundle(), sapling_bundle in sapling::arb_bundle_for_version(version), orchard_bundle in orchard::arb_bundle_for_version(version), + orchard_zsa_bundle in orchard::arb_bundle_for_version(version), + issue_bundle in issuance::testing::arb_bundle_for_version(version), tze_bundle in tze::arb_bundle(consensus_branch_id), version in Just(version) ) -> TransactionData { @@ -1064,6 +1142,8 @@ pub mod testing { sprout_bundle: None, sapling_bundle, orchard_bundle, + orchard_zsa_bundle, + issue_bundle, tze_bundle } } diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index 4be0a7454b..07c6b70332 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -11,6 +11,7 @@ use crate::{ sapling::{self, bundle::GrothProofBytes}, }; +use crate::transaction::sighash_v5::v6_signature_hash; #[cfg(zcash_unstable = "zfuture")] use {super::components::Amount, crate::extensions::transparent::Precondition}; @@ -91,6 +92,8 @@ pub fn signature_hash< TxVersion::Zip225 => v5_signature_hash(tx, signable_input, txid_parts), + TxVersion::Zsa => v6_signature_hash(tx, signable_input, txid_parts), + #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => v5_signature_hash(tx, signable_input, txid_parts), }) diff --git a/zcash_primitives/src/transaction/sighash_v5.rs b/zcash_primitives/src/transaction/sighash_v5.rs index 60b02b8b75..897f811f3a 100644 --- a/zcash_primitives/src/transaction/sighash_v5.rs +++ b/zcash_primitives/src/transaction/sighash_v5.rs @@ -195,6 +195,7 @@ pub fn v5_signature_hash< ), txid_parts.sapling_digest, txid_parts.orchard_digest, + txid_parts.issue_digest, #[cfg(zcash_unstable = "zfuture")] tx.tze_bundle .as_ref() @@ -203,3 +204,42 @@ pub fn v5_signature_hash< .as_ref(), ) } + +pub fn v6_signature_hash< + TA: TransparentAuthorizingContext, + A: Authorization, +>( + tx: &TransactionData, + signable_input: &SignableInput<'_>, + txid_parts: &TxDigests, +) -> Blake2bHash { + // The caller must provide the transparent digests if and only if the transaction has a + // transparent component. + assert_eq!( + tx.transparent_bundle.is_some(), + txid_parts.transparent_digests.is_some() + ); + + // TODO add ZSA support + + to_hash( + tx.version, + tx.consensus_branch_id, + txid_parts.header_digest, + transparent_sig_digest( + tx.transparent_bundle + .as_ref() + .zip(txid_parts.transparent_digests.as_ref()), + signable_input, + ), + txid_parts.sapling_digest, + txid_parts.orchard_digest, + txid_parts.issue_digest, + #[cfg(zcash_unstable = "zfuture")] + tx.tze_bundle + .as_ref() + .zip(txid_parts.tze_digests.as_ref()) + .map(|(bundle, tze_digests)| tze_input_sigdigests(bundle, signable_input, tze_digests)) + .as_ref(), + ) +} diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 6aa63b29c8..613668ea55 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -262,6 +262,7 @@ fn zip_0244() { txdata.sprout_bundle().cloned(), txdata.sapling_bundle().cloned(), txdata.orchard_bundle().cloned(), + txdata.issue_bundle().cloned(), ); #[cfg(zcash_unstable = "zfuture")] let tdata = TransactionData::from_parts_zfuture( @@ -273,6 +274,7 @@ fn zip_0244() { txdata.sprout_bundle().cloned(), txdata.sapling_bundle().cloned(), txdata.orchard_bundle().cloned(), + txdata.issue_bundle().cloned(), txdata.tze_bundle().cloned(), ); (tdata, txdata.digest(TxIdDigester)) diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 69fca722cc..8c9d8827ba 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -5,6 +5,7 @@ use std::io::Write; use blake2b_simd::{Hash as Blake2bHash, Params, State}; use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; +use orchard::issuance::{IssueBundle, Signed}; use orchard::bundle; use orchard::orchard_flavor::OrchardVanilla; @@ -304,6 +305,7 @@ impl TransactionDigest for TxIdDigester { type TransparentDigest = Option>; type SaplingDigest = Option; type OrchardDigest = Option; + type IssueDigest = Option; #[cfg(zcash_unstable = "zfuture")] type TzeDigest = Option>; @@ -341,6 +343,10 @@ impl TransactionDigest for TxIdDigester { orchard_bundle.map(|b| b.commitment().0) } + fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { + issue_bundle.map(|b| b.commitment().0) + } + #[cfg(zcash_unstable = "zfuture")] fn digest_tze(&self, tze_bundle: Option<&tze::Bundle>) -> Self::TzeDigest { tze_bundle.map(tze_digests) @@ -352,6 +358,7 @@ impl TransactionDigest for TxIdDigester { transparent_digests: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, + issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digests: Self::TzeDigest, ) -> Self::Digest { TxDigests { @@ -359,6 +366,7 @@ impl TransactionDigest for TxIdDigester { transparent_digests, sapling_digest, orchard_digest, + issue_digest, #[cfg(zcash_unstable = "zfuture")] tze_digests, } @@ -372,6 +380,7 @@ pub(crate) fn to_hash( transparent_digest: Blake2bHash, sapling_digest: Option, orchard_digest: Option, + issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] tze_digests: Option<&TzeDigests>, ) -> Blake2bHash { let mut personal = [0; 16]; @@ -396,6 +405,15 @@ pub(crate) fn to_hash( ) .unwrap(); + if _txversion.has_zsa() { + h.write_all( + issue_digest + .unwrap_or_else(bundle::commitments::hash_issue_bundle_txid_empty) + .as_bytes(), + ) + .unwrap(); + } + #[cfg(zcash_unstable = "zfuture")] if _txversion.has_tze() { h.write_all(hash_tze_txid_data(tze_digests).as_bytes()) @@ -417,6 +435,7 @@ pub fn to_txid( hash_transparent_txid_data(digests.transparent_digests.as_ref()), digests.sapling_digest, digests.orchard_digest, + digests.issue_digest, #[cfg(zcash_unstable = "zfuture")] digests.tze_digests.as_ref(), ); @@ -437,6 +456,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { type TransparentDigest = Blake2bHash; type SaplingDigest = Blake2bHash; type OrchardDigest = Blake2bHash; + type IssueDigest = Blake2bHash; #[cfg(zcash_unstable = "zfuture")] type TzeDigest = Blake2bHash; @@ -500,6 +520,13 @@ impl TransactionDigest for BlockTxCommitmentDigester { }) } + fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { + issue_bundle.map_or_else( + bundle::commitments::hash_issue_bundle_auth_empty, + |b| b.authorizing_commitment().0, + ) + } + #[cfg(zcash_unstable = "zfuture")] fn digest_tze(&self, tze_bundle: Option<&tze::Bundle>) -> Blake2bHash { let mut h = hasher(ZCASH_TZE_WITNESSES_HASH_PERSONALIZATION); @@ -517,6 +544,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, + issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest { let digests = [transparent_digest, sapling_digest, orchard_digest]; @@ -532,6 +560,10 @@ impl TransactionDigest for BlockTxCommitmentDigester { h.write_all(digest.as_bytes()).unwrap(); } + if TxVersion::suggested_for_branch(consensus_branch_id).has_zsa() { + h.write_all(issue_digest.as_bytes()).unwrap(); + } + #[cfg(zcash_unstable = "zfuture")] if TxVersion::suggested_for_branch(consensus_branch_id).has_tze() { h.write_all(tze_digest.as_bytes()).unwrap(); From 7e87fa5579d79b81528a964bf52ae3de6a969c5b Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Fri, 29 Mar 2024 12:52:46 +0100 Subject: [PATCH 20/85] Orchard domain interface update --- zcash_primitives/src/transaction/builder.rs | 3 +- .../src/transaction/components/orchard.rs | 33 +++++++++++-------- zcash_primitives/src/transaction/mod.rs | 3 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index dbcd9a0dad..1932b1dea8 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -52,8 +52,9 @@ use crate::{ use crate::transaction::components::amount::NonNegativeAmount; use crate::transaction::components::sapling::zip212_enforcement; -use orchard::{note::AssetBase, note_encryption_vanilla::OrchardDomainVanilla}; +use orchard::note::AssetBase; use orchard::issuance::{IssueBundle, Signed}; +use orchard::orchard_flavor::OrchardVanilla; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 0e818c6b8b..9917de50bf 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -7,13 +7,12 @@ use nonempty::NonEmpty; use orchard::{ bundle::{Authorization, Authorized, Flags}, note::{ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, - note_encryption_vanilla::{NoteCiphertextBytes, OrchardDomainVanilla, ENC_CIPHERTEXT_SIZE}, primitives::redpallas::{self, SigType, Signature, SpendAuth, VerificationKey}, value::ValueCommitment, Action, Anchor, }; use orchard::note_encryption::OrchardDomain; -use orchard::orchard_flavor::OrchardVanilla; +use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use zcash_encoding::{Array, CompactSize, Vector}; use super::Amount; @@ -140,19 +139,27 @@ pub fn read_cmx(mut reader: R) -> io::Result { pub fn read_note_ciphertext( mut reader: R, ) -> io::Result> { - /* - let mut epk_bytes = [0u8; 32] - // FIXME: use another ENC_CIPHERTEXT_SIZE for ZSA - let enc_ciphertext = [0u8; ENC_CIPHERTEXT_SIZE]; - let out_ciphertext = [0u8; 80]; - - enc_ciphertext: [0u8; ENC_CIPHERTEXT_SIZE], - */ + let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from( - [0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref(), - ), + enc_ciphertext: ::NoteCiphertextBytes::from([0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref()), + out_ciphertext: [0u8; 80], + }; + + reader.read_exact(&mut tnc.epk_bytes)?; + reader.read_exact(&mut tnc.enc_ciphertext.0)?; + reader.read_exact(&mut tnc.out_ciphertext)?; + + Ok(tnc) +} + +pub fn read_zsa_note_ciphertext( + mut reader: R, +) -> io::Result> { + + let mut tnc = TransmittedNoteCiphertext:: { + epk_bytes: [0u8; 32], + enc_ciphertext: ::NoteCiphertextBytes::from([0u8; OrchardZSA::ENC_CIPHERTEXT_SIZE].as_ref()), out_ciphertext: [0u8; 80], }; diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 9f820cc2a6..1ce3f7a5a2 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -20,6 +20,7 @@ use std::fmt::Debug; use std::io::{self, Read, Write}; use std::ops::Deref; use orchard::issuance::{IssueBundle, Signed}; +use orchard::orchard_flavor::OrchardVanilla; use zcash_encoding::{Array, CompactSize, Vector}; use orchard::orchard_flavor::OrchardVanilla; @@ -43,8 +44,6 @@ use self::{ #[cfg(zcash_unstable = "zfuture")] use self::components::tze::{self, TzeIn, TzeOut}; -use orchard::note_encryption_vanilla::OrchardDomainVanilla; - const OVERWINTER_VERSION_GROUP_ID: u32 = 0x03C48270; const OVERWINTER_TX_VERSION: u32 = 3; const SAPLING_VERSION_GROUP_ID: u32 = 0x892F2085; From 2bd5e45d718f26c523ea1fecf9a68b799caf38a1 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 1 Apr 2024 10:27:41 +0200 Subject: [PATCH 21/85] Work in progress --- .../transaction/tests.txt | 1 + zcash_primitives/src/transaction/builder.rs | 34 +++-- .../src/transaction/components/orchard.rs | 131 +++++++++++++++++- zcash_primitives/src/transaction/mod.rs | 64 +++++++-- zcash_primitives/src/transaction/tests.rs | 16 +++ 5 files changed, 217 insertions(+), 29 deletions(-) diff --git a/zcash_primitives/proptest-regressions/transaction/tests.txt b/zcash_primitives/proptest-regressions/transaction/tests.txt index 341ba3ff3d..e2fca41571 100644 --- a/zcash_primitives/proptest-regressions/transaction/tests.txt +++ b/zcash_primitives/proptest-regressions/transaction/tests.txt @@ -4,3 +4,4 @@ # # It is recommended to check this file in to source control so that # everyone who runs the test benefits from these saved cases. +cc a85a1f084bd4b44515f22fef4711678aa55180e4c03bfe94163c6b9cf8a6fc8d # shrinks to tx = Transaction { txid: TxId("840779607d1a58471976e6b32d2a77ecd2c866331123e4dd5205a38e125e89fd"), data: TransactionData { version: Zsa, consensus_branch_id: V6, lock_time: 0, expiry_height: BlockHeight(369391), transparent_bundle: Some(Bundle { vin: [TxIn { prevout: OutPoint { hash: [198, 158, 76, 77, 88, 207, 96, 22, 34, 192, 107, 60, 27, 105, 176, 247, 196, 188, 221, 50, 57, 63, 167, 88, 239, 88, 71, 52, 86, 88, 183, 87], n: 57 }, script_sig: Script("6a6a63526352636365006a6a6a52ac515200536a5352ac"), sequence: 2777939921 }, TxIn { prevout: OutPoint { hash: [116, 231, 193, 235, 191, 64, 44, 206, 149, 124, 238, 218, 54, 102, 4, 247, 75, 95, 160, 85, 244, 182, 22, 68, 123, 36, 195, 178, 201, 69, 169, 231], n: 16 }, script_sig: Script("51ac655152516353530053516a65526a52520063005363656a656a535200ac53635100536aac52656a6a6363516a6a535300510063516aac6a53ac51536a6300"), sequence: 3555089162 }, TxIn { prevout: OutPoint { hash: [92, 6, 82, 163, 10, 151, 207, 112, 66, 191, 14, 198, 28, 118, 250, 143, 158, 21, 244, 140, 6, 224, 125, 116, 145, 207, 73, 241, 114, 81, 86, 177], n: 51 }, script_sig: Script("535151526a6365526300ac51ac52536a655251ac526a63ac516a6a5153ac536a00630065656a525251"), sequence: 1738290120 }, TxIn { prevout: OutPoint { hash: [110, 182, 112, 156, 175, 157, 161, 200, 188, 15, 41, 143, 226, 23, 159, 92, 139, 250, 51, 231, 125, 10, 66, 28, 63, 106, 150, 72, 117, 185, 77, 139], n: 74 }, script_sig: Script("51006a52acac0000636a63650051536a636352005151516a6300536a00525251656a52636a5363635163006a6a636a63ac6a5263ac51526a636a53006a6a65ac515165526553006300006a6352ac525100525365ac005200656a63516a6300656a655163006a65516a0053536a6a51ac6a52ac6aac53656551656a5151005100acac636a5265515300526a636aac52510000526a6a5100525152006351ac526a65ac6a655363"), sequence: 3318838885 }, TxIn { prevout: OutPoint { hash: [160, 103, 114, 132, 46, 89, 160, 219, 231, 156, 250, 118, 233, 173, 112, 14, 16, 172, 216, 212, 80, 36, 166, 219, 242, 24, 204, 176, 144, 249, 79, 204], n: 18 }, script_sig: Script("5300655353656a63635153535165ac52ac53656a51006a63526aac536353006a6a005352635251635352656aac526563516a536a00530052516365525263ac006a52636a526563000000ac516a5152536565525265520063acac00530051536a516300656a6a6500ac6565656a6a526a6351655200"), sequence: 73569442 }], vout: [TxOut { value: Amount(987672871939945), script_pubkey: Script("00535265005352006551656500ac6aac00525352656352ac51630052536a0053ac65516553") }, TxOut { value: Amount(1940769343347653), script_pubkey: Script("63526551636a5265526a5153006500535152516a005253006a005251525365ac6363515365515165ac5100006a51ac6a65515152006a53ac53526352636a52636aac526a515165") }, TxOut { value: Amount(1095816154710662), script_pubkey: Script("63656a526353636a6351005252ac65ac516a52636a006aac535165516500ac0065515300526300530065520053650053516a6a6563526552636a51515263526a636aac00526a6a635200635365005100515352ac63005165656563006a6a516a635263516551530063006a65ac655252650065536551636a526563516a6300516aac5153650063516300ac6563636a51516a00ac5153516a6565535252ac6a526a630063530051536a6a") }, TxOut { value: Amount(1076508312538104), script_pubkey: Script("00635251006a525165ac6a63ac006500516a515152005151ac65ac636a650000ac00636a6a63515263535265acac520000636363ac6a53530065656563535263ac5163ac656300ac00005365ac656500ac5265ac00655352005253005151ac5351516a00516563ac6a") }, TxOut { value: Amount(1637061040763024), script_pubkey: Script("51005352ac6a5363ac53000051ac6a656a516a6a00ac6a6300ac53006351acac5252ac515352ac51") }, TxOut { value: Amount(8893688897630), script_pubkey: Script("ac00006565536a5252ac52516500515200005100006565525352ac006a63ac6aac516352536a52536a5365ac6a5165655265ac6a51ac006a6565516a00656a5251535300525353520063536a52636a53526a0051acac005353635353656a65636a655165ac5100515353ac656a6aac53ac51ac63655153525265636a0065ac51516a6a52635352ac6a6500005252525165ac6363516553ac526a53656aac51536a63ac52636a63ac00006553526a6aac6a65656563630065655263525151650065656565ac52526a52536565636a5300ac636a536552635251ac516a51650051526351636551ac650051") }], authorization: Authorized }), sprout_bundle: None, sapling_bundle: Some(Bundle { shielded_spends: [SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x3969f2f51ff91cc969d79c05ba341370ee7436ede10feb1d90872aeb8adbba4a, v: 0x033e8a810b8347113cec123a15972640c73393b92bb6a07ce7ce58abb17d0e43, z: 0x527e8ec1f6f6cb3a4302279033ab57edde8cd1faebfd9973d78ec5ff40ccd4ef, t1: 0x089b6ab52b6963f0e52aa022e1db69c9f4ac67f521332711a1d036543b0059c5, t2: 0x4804b84cb60e9d67bc9814bd6709e17b9c53b58c2fbdd5a36a1883cf656980ec }), anchor = 0x4e33df44a2918a11dd206bc7500bcb4bfe9ee1a998a6cc9bc96fb4533a1e34fc, nullifier = Nullifier("401afa46a3f59d59cd6252a98f1a1580f3e8eff12195ff5984018a0dc10d50f0"), rk = PublicKey(ExtendedPoint { u: 0x2a8c760d04e17489f8962069351dd328e27ecffce4c8ff64eef2bd3356eab7b1, v: 0x2244fec36d2a1cde6cacf221dc42d8a7af821471c4a1b7b3f2503a7f8e8e986b, z: 0x57b1c3e426ff921b02bf71dc4ed69e19d9d9b87b97848da4e9c4d02ac8ac1188, t1: 0x22151831ef24c1bf1645686069f7b29bd0ac95909f8cdc0575a78e0b309ea072, t2: 0x5b164ed95c9de72fdfeeb6864b0534dc967520042f1e55179da709c74d690d38 }), spend_auth_sig = Signature { rbar: "38b0e1111f1816c6adb3aeedb67f9fe42070e6ca86ec368f2be3b92596bf3635", sbar: "a0a8bc4ce5b9ee7b4e04d964bc1e1d6795304dc0c80e199fcd007bafdfe1ab02" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x54e80df854c131557ddaedb48cb8b3033698a0664d18823b650b6a8aff8ceb40, v: 0x2bc998067a58db9e704607dfff5ad7fe2723b2bef7148dd77f7222da6acd8d0c, z: 0x578b7e9b4b249970a38230032a5034a63c31bc2ab120e9f78f5b2ff7d20ed438, t1: 0x1d28a286c05e1ad40132702867af89b197f46311293c1681ba1f1ab1c7cc6f5a, t2: 0x1cc0bcbc239083b7af95ddc4c60fea682b84c928abc021dca019674d896795f8 }), anchor = 0x0bb0c3dc009923fee577da6584856f509be48d0e9459aafe0dd39a4e2d22d3c0, nullifier = Nullifier("e37aa57c3e59299e0c592f835881a5f54cb428bd5906349c518192e6a6227ec9"), rk = PublicKey(ExtendedPoint { u: 0x42329ac756de433185a7a47dee00a2c6942c72302231da68189f2dd5840cbed9, v: 0x06b5c7da8efe8f2f300a10ad431cfb94b6bae922ce95987c4ef2783c7d56eb99, z: 0x57d450e9222300e2a5a60995a4b6a42f680c08a4799f5bd84e7fd280b9d8adc5, t1: 0x0aedd6c4347041a58c67e3a2dc9a484552e84546bb8b2493b33253be06c9bae2, t2: 0x278a9f647a4079e1a0c55ebc7187e6d95bd02063634f35ea02a6935e7e664692 }), spend_auth_sig = Signature { rbar: "626653c781efcfa78c1baff8cdbb8a2b4fc575e30c3b79da17746ff39e6492c6", sbar: "d4811e5484117cdec1c9b453f9cc1030526a196e4b865b1887a27109e6b0720c" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x074d5aa67f42df975a345ca61893dfd15504edd47ea7eed11a7da15b5cd16ce6, v: 0x6c7c80b35e6577624e7aeab800922388f40a29756b63a2d98106ed73136b0612, z: 0x6d246c0ace486651a81ed1fa924e5ba403ecc08418435a216624ebc60543839e, t1: 0x30458e091bada48f5a5f5c0b77c61c93ed7a4c568303287c53711ea9533394b7, t2: 0x6c9a9c3e1b1e3357ef6dbcfa1aaab4f8fd472d265796ccabaf656f36af653904 }), anchor = 0x09c27597ecc5bfa1262b3822b26daf20e7c5b0ea6057ccaf7c9d49df70f7029b, nullifier = Nullifier("5b5f08d0a91630c83a7dc76a47bce9bf477fa412fed46a294d893e67bd18dabd"), rk = PublicKey(ExtendedPoint { u: 0x6db374807989519c19af1d068411c378bb37e6becc3320f89f7ec920af429414, v: 0x1e31812466440ec15d1405b220be8187884120e7b1f6764ef669b7e756986d2a, z: 0x197afb6a155ef154c18b228796deb7a89d1f93c32d8af75cd5c965e40f5e8aa0, t1: 0x262a779bc4f76b79cdd694b63375d2f16a4ad0226245f3c16f55d231ad099a0c, t2: 0x0ff949422e1573c1fa3a8a7f1e27db28c8d40fa87b6583ac5ae03be92a3bc47c }), spend_auth_sig = Signature { rbar: "1f31ecf52e25a236f8bed7660d3481324b5f1da5e3467f834dad2c37b5e71da0", sbar: "355cca7ed3e86eca2f64ffb98682e5bb54d3584368a3e835d6549e6f9603580c" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7047ccb877d941da0fb27a976c3ce68269c49a82829ae54388a6698a674714a0, v: 0x502882ba498ece139554ffadd5f31a707b9dc016a3b9154eeba2649885d955a6, z: 0x107b4b2a89d94ca8d884024b022ce0e1c41c351b6a5b83f50f7b8fe1b3df1d5f, t1: 0x0a02fd23787ed9149429bcb74243cd654a319abee687398fd7b5e4037cfadd51, t2: 0x1f695af851503bf80c98910a0e11f6bf0349c5cdf9021b4da0fbc434899f1a52 }), anchor = 0x14665e8886fdc414ca2d3c8403ceea4cdda4b632f7011fef0ff5cb5e6327f42b, nullifier = Nullifier("e8388d95532bbc261835be7e72d70f9940bb43b7aae63dbbdcf6dce8c5b95ee1"), rk = PublicKey(ExtendedPoint { u: 0x5f5f0e513145bd765ff39857a879d398bcff706c9defe8886b8a9ac28d3f4658, v: 0x323988ae7c8bd96e8b06fde94ad290015c22e45e6ad52186f36329c4ec4d09fa, z: 0x439c31f72d93c9c5c1951f113356bd9ff2f2e33536e34dc82781744ab4f751b2, t1: 0x3a78c0c736c312fe5659f3ff48bc2e28490e0ba873bedb43a72380de145a0d9b, t2: 0x05a514994e7d16d2ca02b519cbde3dae9aa61cb62aa15cd1c51e3d09d1049669 }), spend_auth_sig = Signature { rbar: "9f1781f5ca013ced6bcd6841928e90ee31749364718d583d5335ee22e25180ae", sbar: "dd7a0db13d239c99bba6ee355bd712ddf448421ee379a9b2ad3aa49d34e64408" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x01246b1a98bf37c83a8873895ccadbf1bf11829e57f07968b34822ee8fe7654f, v: 0x3ff7c462097dff040c1d1ce2f994fdd3f56f0f4da0dfbc189081279eb3ed0911, z: 0x0c8612e3756e82a494bf6bb3895c2abd8665882d52216e46868e62d9dedf3054, t1: 0x7144a13925067adbb8a4adfff957614ef7a5328c613a0c76ad5b56f31ca37c5c, t2: 0x6d156aa06c4fcbae05eb409a86c8432376dbe88458755aa9179230a8fc5aeb01 }), anchor = 0x5e5801f4693af02acfceb606d64e95684ee0ba4b6134bf65afd5eca83f427557, nullifier = Nullifier("4275fa8b013c6e0da1d4afdc22685752ae490726adfc9f0fbc95a5df8f75ebc7"), rk = PublicKey(ExtendedPoint { u: 0x13801ec64fea770225d39ef5e70e768909f0284b00a52722044339e7a299d229, v: 0x4e922d529dadcfdc0941f546fb7373b2d7bd1da1d78e399bfa315b8ed23fc8a9, z: 0x56671bb13a9d667e31b9b2b15b31edc7d22eff2584fd77b85aa004f35ace4f06, t1: 0x32f73e9226ef891905cfae40e861dd8559fe41aeadf97e824821bbe167dcff23, t2: 0x338774aa9b8633174da437b86dcd5d381e79b6e78d54037cbe515436448f77e8 }), spend_auth_sig = Signature { rbar: "bcb1f99c881820bf17b35d702c8b581d62a543cf240a28b9690017ec8a5b44c7", sbar: "322a95c6fe47f4ea52779aee799b531695c0a7f9b589e4813406059a0c92ab0a" })], shielded_outputs: [OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x33a1b5a964be7b875e7b6008304e30afeded6f45b1c1103d1150bd2215cda7f3, v: 0x1c3987dbc04959373be86d16746c9b9438d89a0898b551fdb3706d66cc8facbb, z: 0x3a52037587d2d70789dfa01f106eaa755b2220079b9c832d4b67b6d0eefa815a, t1: 0x22c1715c09dde681f2168d1d8a022c9168705c9282efc81637ed8e1a87346637, t2: 0x2b47aa7a3fb6f77fff42de726b370e00e8e5ad5499c19f9a5b73be86773ed7af }), cmu = ExtractedNoteCommitment(0x2bed605871f7eebf6da3d38804ea5aa7ebae2a18598040571b3b0e5d2beb010c), ephemeral_key = EphemeralKeyBytes([1, 54, 224, 125, 225, 41, 55, 90, 81, 87, 208, 5, 139, 115, 252, 102, 146, 210, 72, 204, 5, 208, 5, 180, 180, 15, 39, 237, 241, 70, 227, 42])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x347253c4272017bd7eb9db2d9672b55a27ce87d6293410a508221487e344245e, v: 0x24fdc33ed9d16501866a07a80d3610cbf5c817e87055a7925606ce17edb3ffdc, z: 0x22ca5119e4c72ede66c4f420899bc4bcf5a7b0744343e1e50346fdb05f7d9eef, t1: 0x11865860065254ddfd45dc2ee24fc489b215f74c68046bf30abc29bc600f3d05, t2: 0x646c44ce083f25dd400779e4593f3596edde6650fd650548a4c20898da1e0aae }), cmu = ExtractedNoteCommitment(0x487d996fa5edc1688b532579a5ba415bad9ad934967f7d37e3c4140a6e89c4f9), ephemeral_key = EphemeralKeyBytes([36, 254, 164, 196, 131, 164, 25, 4, 120, 170, 133, 208, 52, 1, 143, 251, 162, 108, 187, 70, 251, 132, 98, 126, 102, 209, 134, 227, 95, 142, 225, 69])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x141964b3b13b36ed9266cba2730528719e6401d35394d1007fca56f9a9748649, v: 0x14920499cd088107f50895784e635e669ad80093ce271420a9d6648507d45502, z: 0x0c56c0574cdf247e016ac1f38418d0a8adedb8032a61334407caf95a164d960d, t1: 0x2da14d26362674cbba5639abae98763d647e9c3dc806d34e86540ba226de62ac, t2: 0x107fe4350b0064d3ab01d254efc18825ff6d7c67fb1bf69e6151bd330cb29ee0 }), cmu = ExtractedNoteCommitment(0x429f212a0a66185699d7608b16f2f51169ff44805dfa9063c227c8795b4f7639), ephemeral_key = EphemeralKeyBytes([229, 116, 43, 122, 165, 12, 169, 183, 140, 59, 102, 142, 168, 255, 240, 216, 200, 8, 52, 96, 139, 188, 78, 44, 55, 174, 204, 49, 109, 33, 221, 93])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x00cc6586aef173de5b95b882e9d7981311dbe4b27286375c10a120cd103b9fab, v: 0x074ecee690d2614f5dddad2bcf9d2da3369bfe9983aaeb576113e37fa0fd5432, z: 0x29fd5813172b6ff6fe8412aaa8c00bcfa831b116831c4ddbe01e0033763ccdf0, t1: 0x3c25e783636f0f102c9b8aafcba9378bb7c3fb77260fe8317445aa19150ca35e, t2: 0x4c03abcd46318685118e74ff68984fb4bbae5b7d160a056dea1c7c3d174b9c2b }), cmu = ExtractedNoteCommitment(0x2d6f2bcb4de5fb70466908ba48b9e252f8d83fd8c896b7294e5c4c6bcb5dd4a2), ephemeral_key = EphemeralKeyBytes([239, 204, 232, 98, 163, 105, 255, 144, 35, 191, 203, 110, 157, 234, 15, 113, 89, 204, 22, 92, 51, 130, 236, 9, 100, 39, 135, 161, 183, 99, 118, 234])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5441970aec4e86e0bbcb7857a0d4b4e9b0fb63342550ced1b2a97231db8c9175, v: 0x15dfcfafd3b57abbc4e938d71bd5453bb3c062f864e30934916debf8ff2a3cdc, z: 0x18ad186150aed3d8e7a5642e10c6c54734bcd6ea0a5d2c0a3bf660d4f2064937, t1: 0x2e4c8f7556c05ec08ce10d2192cf3463166f85edde29ef59ed221dc2959f54b7, t2: 0x165585f044da05b7d64032a013d55d72a447da349a076509783c59ded064923f }), cmu = ExtractedNoteCommitment(0x0b7514b795cc6b42eca5b1afb94c313ebc34345ddb8a188ade965a86204c7d3e), ephemeral_key = EphemeralKeyBytes([57, 143, 116, 106, 60, 151, 222, 233, 72, 183, 79, 115, 139, 81, 204, 141, 120, 23, 187, 207, 166, 52, 149, 7, 199, 77, 124, 31, 50, 194, 116, 21])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x0a06e06ff53f4bb781d11a2d4f5fb983940bac1eb3a7711d9e7e573faa663a4e, v: 0x63ea7cc2e232192d43adbc1500e965438a4c94fbe9e94328979e6509e923de01, z: 0x0a033c1ef378ce1761532379727cea39855528946688e1f9d0c9290da90069e9, t1: 0x128698a21d78288a60833737bad238169207498e17e1dc0637fe4767acf673e3, t2: 0x1caa71a247f4f643e81eac377206307181c46ddf522f4836c3d5aad5f2afd52e }), cmu = ExtractedNoteCommitment(0x6f87e7d8a5269895f67fba893c550ae12e2df1158c64cf1854413a448e8b5d8c), ephemeral_key = EphemeralKeyBytes([196, 220, 169, 22, 6, 98, 192, 133, 212, 50, 14, 250, 28, 75, 182, 75, 183, 141, 17, 36, 19, 183, 80, 129, 135, 140, 44, 232, 95, 139, 89, 4])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x44fb27c48e21283a1f70dc892495e0d050062efad93744752bcc2fa36953fd10, v: 0x4858697688b37b258bb037ffd270fe4964be95d6bd28eaa69c6e1a77f529117d, z: 0x1900ef544f17d2ab5f3d9fbf907dcbcdce7d43544cca3a53f95ff34892dd4f26, t1: 0x65063896a113395677a2a44d59c94a2ac18fe81f782d4bca8a20aa4b88fbc3b7, t2: 0x07641436fa8d5fd5c6de71afc2ae951fdc2f845216b3ac366988eabd227594d7 }), cmu = ExtractedNoteCommitment(0x1b068e54f242a37d1fa11306a274e51622e01aa44ff319fd73b15e46d976badd), ephemeral_key = EphemeralKeyBytes([13, 71, 36, 121, 155, 155, 125, 88, 201, 4, 250, 179, 92, 80, 213, 18, 155, 144, 69, 72, 174, 226, 1, 7, 27, 145, 187, 158, 21, 186, 149, 191])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7166bef5ac833f979cd261e9f519ecab45777a26748cced5d2eb4db47923713d, v: 0x3618e8e75df6e7ae48200af8152d228af73cfaf4ccbb24e120721954cc712811, z: 0x10da1421bc0a0b01893d056e922aec62664c8eb5fc1d9ef5035fddd8dba5ae5f, t1: 0x12e7565296c7596bc97ad4df8cce0a6e94d6b516f0be11ffcd4c50ee73202ac6, t2: 0x174f91a1803dcfd45e26c8bc33d37394f1c83bb65aa2168f04350179d46d3961 }), cmu = ExtractedNoteCommitment(0x19435e85f48812b572e15aaf4a45644a3cd95dd493311a3794831f8deb27f80e), ephemeral_key = EphemeralKeyBytes([140, 131, 93, 37, 30, 3, 54, 9, 133, 60, 17, 179, 162, 147, 51, 205, 63, 160, 135, 216, 248, 206, 248, 72, 202, 132, 194, 240, 15, 14, 191, 218])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x6f5154d0d718ab323e05d8defa271f675a07459c2440aea3916710992997e6f7, v: 0x124c0eb53c700acc438899d3aa93ec3e5aea257a3ac18d3e21b7bf09fb1d946c, z: 0x5cb2109ee9828d563aac60175a26178613f3e279ef2e1f2afbe480bd90e9b1ff, t1: 0x6bf83ad2828459d384aba05adc84100500b5cb976acfec1203c2daf21491c1b3, t2: 0x6571e40dd5f20a629ac9685d5cc3e22fa666af5f934216ac772740668d3b9dc7 }), cmu = ExtractedNoteCommitment(0x25c9dd734d05a8158ed08456b8b523823593d98d07e5947a48dc0985ca10ab56), ephemeral_key = EphemeralKeyBytes([216, 102, 16, 140, 91, 32, 44, 203, 40, 172, 158, 164, 46, 47, 49, 243, 88, 255, 40, 238, 109, 105, 98, 17, 100, 155, 183, 190, 144, 43, 39, 22])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x047a0a276c7855a44991c29155c671a255fd1a218864bc59072ef0bf9d8b4554, v: 0x0b1e2e65bdef498e40872c58d6d0c9a162ee75d271286f8cba30554407b8aea4, z: 0x2e702d879554897568b68cca7165bd6ba75431b19859e5c8026a4e1cc5418317, t1: 0x6eddbb85d9b5acb2a3c0080a97f3d3e6f7290c7bda578806717617d411673c5c, t2: 0x47b3d307106516bf997afec433d2ed1f67fbbb888c300cc7a221e2d0416b366d }), cmu = ExtractedNoteCommitment(0x4d3ddb8b477d2d3f0f810d3ec0fc9cf2d041f224085a2db58fde8eb6547ffff4), ephemeral_key = EphemeralKeyBytes([188, 75, 180, 157, 77, 192, 60, 224, 0, 63, 159, 254, 178, 24, 172, 134, 71, 213, 52, 188, 254, 40, 17, 36, 65, 240, 117, 23, 66, 63, 132, 229])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x66abcc480c924b6c34e1682227817865770c7005d6f8889557b4ca82ee979630, v: 0x01c10bc64117deddf1d65b671b5dcfe924d32a5ff990e126da4657c2eba05613, z: 0x3df3de3fb5aaef0013c2d4ecbbb64f627d6f870fd811369f11e324eb328362d8, t1: 0x0123c93f972e5eb0d411a898c6945cdad760c3d12a95b7915b662abb9ac46e8e, t2: 0x51e96c4920cb5091ad9efec3005967c5100cacddcf83c8bf38345ab3aa60bcb0 }), cmu = ExtractedNoteCommitment(0x3d59af29bbddc8d9d6c934eb339ae8afaafaef96d165d7c417565c4ebfeff2ef), ephemeral_key = EphemeralKeyBytes([185, 247, 186, 199, 146, 38, 202, 207, 65, 98, 161, 188, 229, 70, 44, 102, 242, 70, 83, 227, 234, 179, 55, 42, 181, 169, 55, 44, 167, 0, 216, 226])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x38dc9b70cedd37747f6e358738dbf18bc9df69b52fe36d88748940cb44d047e3, v: 0x5d39f8b4f9842724f7cff351826f8e9fc4cbd68ba484f8d45ffa3a581e746d92, z: 0x2b28b6e9768b5c2c96833b7584adaf31a223321ec62fce2606bac45024053096, t1: 0x598579963ba223c20762bb45d0a09872fe98e114610ce3c8ea63f124d47314d5, t2: 0x445f7dffc79939bc16479eb8dc9cc460a8998a601645005f1961f1cf8c7ba7ef }), cmu = ExtractedNoteCommitment(0x43ea000509911e76ac6f15410cd1c64518bf2c1a9f606f826b130180ba463a6a), ephemeral_key = EphemeralKeyBytes([202, 33, 143, 0, 182, 211, 54, 106, 156, 98, 43, 41, 53, 214, 179, 252, 15, 62, 137, 183, 83, 250, 84, 209, 175, 132, 235, 215, 55, 236, 48, 44])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x1cd26d46bb4c43680876a1c85b05656589e6ad101c8503ad8d46c9c28ff6712f, v: 0x2fd920f24f3ecfc6ebaa9c0f587ce753baf9fcc08cad76ea58d479a469ac56f1, z: 0x6e282c4ec5cc86b4b15fc949ce126b051ceb2dc0acd870bff3f5b7aac3b982dd, t1: 0x4d9d3736ac72c13ca4cb8955e710aefbdf21adc2666cf91b6019538f0578095a, t2: 0x4ddfc0e09fd9cccbf929f8cbfa9451c45123b955ac83f742f496ad090fa80641 }), cmu = ExtractedNoteCommitment(0x16df873edfd99d2edc0f77bd00b31e4957f21ac4cbc7c995f66f2047f75a8465), ephemeral_key = EphemeralKeyBytes([24, 207, 37, 2, 225, 140, 93, 158, 216, 85, 30, 91, 242, 54, 180, 30, 182, 216, 5, 80, 51, 32, 132, 151, 95, 87, 83, 21, 170, 35, 75, 173])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x250caf5bf3298c9ec1b9349cdf35862fa1f153007c023ce30fd887f1f3d31cbe, v: 0x51ae84954c1157bb337d2d9c64a69d1fa4f1f885bba50c40d7550bce4075e92a, z: 0x298e7a4f420045c0ba79212961954333b34a95765197737fe99a4d778cbd6881, t1: 0x21e2a5316133ea315b9c2ed77ea9148cec9b37ddd56d882287fda71cefda797d, t2: 0x5bb8289c0be8b0e9a823ebdbbb8cd489971504e0fe306f8ec303f6409cd19336 }), cmu = ExtractedNoteCommitment(0x3c3169706c8b4b6df125c52c64f954b3537371964fc5a1909fe7ea881229052c), ephemeral_key = EphemeralKeyBytes([93, 190, 51, 126, 18, 66, 57, 53, 39, 125, 153, 199, 215, 137, 31, 136, 53, 255, 211, 210, 156, 104, 185, 238, 197, 85, 67, 90, 120, 65, 219, 189])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x4ad05a1051e244bda076a583f93f36e471245fa46051966c597ab6e9190b3023, v: 0x54726c5c2c0d1ffe5baa5ae3597e076db183148b67e1f8de6bcd7423e66ab229, z: 0x1e664039c0be5d54d035b20b4f7ada264f64fb801eca9a8321f682f07e5b9ce0, t1: 0x2486b3a6c7c8808ef7b5dd87d234d9c05cf4b0878ffd58641461504e780c80e9, t2: 0x0374a2e63704c4833f4210dc473eec1c72583d85524bdfe65f2bcae79378f096 }), cmu = ExtractedNoteCommitment(0x16e83c89746019430dc1f0b9cfb2101c94c316932eb4720929454c168d67256f), ephemeral_key = EphemeralKeyBytes([233, 218, 135, 168, 201, 30, 31, 107, 108, 12, 9, 51, 190, 219, 219, 26, 83, 180, 63, 21, 85, 133, 151, 36, 68, 198, 217, 60, 118, 179, 125, 80])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5f77cdf511091d2286907b9b7e3980f4bc2f60ba0ca2cc783aae716248e5d849, v: 0x5ad79c280ce714ee8163d45953f76db853d2e94307d9fa4503830fa9d16bf568, z: 0x4d13097b0004856173e1e386de0d4379a8b73f92b85de7d9ec41f715af5a33ac, t1: 0x3aa7695c47dd0c9cc94940d13be9ae7e37b8b95708aaf9b49b1401310e971f71, t2: 0x67d104c24381bfe3575f48f3e16bd123abe681a297225dd2346d8e6f918a49dc }), cmu = ExtractedNoteCommitment(0x32ea1b65b97dd6c9a4863fe14781fa6e0999bcf3d1c280190fed726a28a682e6), ephemeral_key = EphemeralKeyBytes([86, 186, 229, 66, 44, 222, 190, 116, 146, 1, 57, 136, 160, 179, 203, 173, 11, 38, 17, 99, 123, 156, 217, 95, 200, 234, 215, 119, 78, 19, 187, 178])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7352dde5dc4f1b4516aa4d656965bb591d05b51c700073c25f97a0d36c47d4da, v: 0x30a68659f120cac82eb56ccae95d3536659bb6d344bd1fec5a09b06e8ec17f77, z: 0x09207e2f00a65a497080773d9f47989f1c4cf71f941a86939cb26662deb9dea8, t1: 0x4971c11d54b5d02559909885d4418fd00f9335cd2b94c40e1f38961f9c8edc4b, t2: 0x50b22b8542091ccc4acd7047e4b63d22e7e03d88ff6c8a53585bf607b4ce9644 }), cmu = ExtractedNoteCommitment(0x35776fef9fc3eb5e69ede84bb56a23f42f51f736141a20ccb0e0174a1d1f243a), ephemeral_key = EphemeralKeyBytes([26, 96, 242, 128, 170, 124, 42, 245, 86, 91, 70, 225, 130, 9, 144, 9, 223, 195, 134, 163, 118, 91, 205, 108, 226, 85, 27, 84, 151, 150, 237, 67])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5a33abf19c19d0b4b491e63bb4a2f3e1a089fcfc50e309906eb1e514cdb25822, v: 0x569819c745978913c607251cd37b30cb9f7365a98f845a3357db3737449211c3, z: 0x61333fef1d5867af6c5b41142646e0e5032a78aff570053ced3fe4dad3a1885e, t1: 0x1216948f8cf157d7d7eee00e185f831f22cd322d7c49ad6b2ed3f787c9fe5bd0, t2: 0x06e364e08c670d72810143a4b98ba0f0ae5cbeff494c993b97a78effbd430f2d }), cmu = ExtractedNoteCommitment(0x0176e70bf45598bfac7fc5ce5d74d0e24bceeeccd7f2ea2a1aad73f67c815940), ephemeral_key = EphemeralKeyBytes([27, 81, 140, 108, 25, 120, 246, 65, 98, 187, 172, 235, 224, 47, 51, 160, 38, 240, 233, 164, 32, 76, 97, 200, 229, 135, 111, 138, 131, 28, 12, 182])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x620c7ad63a0a83f77144ddc5eb8c6df6381b377b7a7a8bff9e70e92bc15a0ef1, v: 0x4652203ac8e009d2ae512f7f87a7ef6dcda35d6b89dc650b98f07ba9cf4f7133, z: 0x3d9ab8ec28c879343db6b353ed01f764150f1f65dcb99edd59ae7b527aa787a6, t1: 0x70200fefa27220776ee6bc3fb7d065d595323e302a92360d7bc45c9da641442b, t2: 0x0bb3c4787eb4f40c73db6057edd6022b8f7cecabe9113fb5df0b155e57036244 }), cmu = ExtractedNoteCommitment(0x4402649fa884631e9eeb2079eb84e666b47634569ba4edd584f3ad96bb60718b), ephemeral_key = EphemeralKeyBytes([149, 50, 203, 61, 233, 194, 188, 255, 163, 65, 77, 239, 157, 130, 85, 80, 18, 166, 69, 110, 253, 142, 75, 53, 200, 219, 56, 52, 220, 30, 70, 29])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x65d109a4b2f3f6d4b07554f561a7030972378c2e04d2e33d669af130792daff2, v: 0x3f265f9d4bf274f2af17069e4a7b568374ad9ecde3a1482a3b81caed0fb5d02e, z: 0x080f08f22e6673e87ea25cd6b211a58ab05e61977f270c4db71dd36d90600dd7, t1: 0x21b99851b33dd1b20a89f63e95655ee16a3cb02d64841fde67977bc0608a4a3c, t2: 0x00fd4e654d9ac387cff4242e15adb76e5c7c053e7954d436fca3e6c3b03a3fb6 }), cmu = ExtractedNoteCommitment(0x24a8083d0b6ad5b313cc636cc2f584f88fe8fe97e66c58fe010a9b050ed67b17), ephemeral_key = EphemeralKeyBytes([133, 60, 66, 193, 202, 10, 96, 129, 214, 147, 146, 10, 199, 182, 46, 95, 9, 6, 253, 52, 106, 103, 187, 44, 141, 115, 123, 251, 74, 106, 143, 59])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x67105c25d8b7f6855eed0c0bf91d7480dda221c61095b260d77787e397b9338f, v: 0x23842217ce5df95571311b4b9a00e00013660eeaa1caba120a7551aaf11527a7, z: 0x0a918d33015679f7f0d65bfce5896f3d0ae442b62e97741330d679f73b400bc2, t1: 0x72d0bde17897b237d65af1beafbe4a3c6c5021d422b4ee599b140fb6c35f1a18, t2: 0x0d60a76fb8c2b6c182dddb74dbc07868e7f705066b1e2cbddf882d37bba66f90 }), cmu = ExtractedNoteCommitment(0x582b5b7b1c8cd76cbcf43aac7040bf4d5dde852f1135238843eec0d3862ee680), ephemeral_key = EphemeralKeyBytes([184, 218, 90, 68, 9, 117, 82, 122, 34, 92, 184, 181, 231, 54, 186, 36, 40, 51, 168, 34, 14, 162, 135, 171, 199, 202, 166, 178, 0, 107, 76, 76])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x517d6b2e56a224dfca64d6f83693869d16dbb84a5f83096ac4cdc9c68c9c37f2, v: 0x34279802173db9a6bb2a4fb656731aa245e6a80a14cebd4d32c0abac5a6336da, z: 0x50f8ec16f7b33954ea5cc46c468c5c18a7750a4eb64328c6a03cdb9a967547af, t1: 0x2d06222216f46835de876566bf14a1918a11c67a8c25a1c4c9eba2f3b6b292ca, t2: 0x4d4f392fcf7dbdab827c5ab3fdd9ddfeef887c0eb0077eb10b92b60cfabf0478 }), cmu = ExtractedNoteCommitment(0x5c0fd1ee858430af67186bcd33f308e16c87a8a58797975a5a49fb21bd9df530), ephemeral_key = EphemeralKeyBytes([181, 215, 227, 138, 142, 105, 126, 23, 34, 10, 15, 107, 64, 74, 139, 195, 35, 70, 85, 27, 105, 141, 128, 21, 4, 10, 126, 98, 156, 38, 244, 227])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x57eb5bc3b4e75e0537ff5e3c86beea27cfa8d80d3ebd6dff17abacb323ce70ca, v: 0x6ab2ca1a837817df9dbff7bf1116b17d2d91cf1dfb1870686deca092f423f2ad, z: 0x32ce224202647b09af3241378248e093aad5407cb83a923dea482d88051ab62f, t1: 0x5921b600db5b0d34a18bd3533a5f28ae448fa8958d81e4c61e175a15d2a6846e, t2: 0x1d6440b7f4dd68e21369493a91394daf384642d1ea6913092def0435ad0d7961 }), cmu = ExtractedNoteCommitment(0x0663eca2a22e4e7bbc3e3dd93bf48086d1594508b4a3bab6e318d9b31fd5deb8), ephemeral_key = EphemeralKeyBytes([240, 132, 141, 191, 193, 126, 163, 25, 172, 249, 2, 136, 156, 212, 67, 217, 21, 255, 38, 131, 124, 103, 183, 229, 121, 26, 172, 15, 10, 247, 138, 139])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x1715e312839cb2a91c77e5483fe349042550e440f2e92c9bfdadc5810b11d55f, v: 0x20cb8b36d4ecfa358a252fc1dcf886bc41e60fa5d2ed843d1a9076dc7105c100, z: 0x161adacc8d6f6c3ff79b007bcd2b9048325a468ea0e98d0ef4164b620b2d0c0a, t1: 0x070f5ec62dce9a471357b699a956c9400bdb0b509fc8839ed5339ff96b713bf5, t2: 0x0d342217f184e939a9d307441aafd15b201ea207e6d5fbe84a1f7f283f47bebe }), cmu = ExtractedNoteCommitment(0x705d24681a6295f72aa8cfaff157192a0a1cbda5ba8751e68a8e1dd54648878e), ephemeral_key = EphemeralKeyBytes([5, 234, 133, 171, 227, 199, 180, 250, 40, 219, 31, 66, 204, 210, 150, 255, 217, 240, 158, 179, 202, 135, 3, 148, 70, 49, 206, 32, 18, 64, 212, 3])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x03eb41a7d06aca9a0cffeb4ce990766313229c061d263f64a5e1e03604fd10d9, v: 0x24ccc45e85bd1b4fda61cf4070cb9ae77d9571370693202ba74cb3ce6cc12507, z: 0x05d63014b5aab4b55d9b192d5832a3f79bd58f2fc99a42225a36767599f108d5, t1: 0x2b253aff7e98cef107ab3bd4cdcca58fa0fc5de10246a6af3b3ed14a682213fb, t2: 0x45950428ea997ee6fe1b90ea1b708d57c7f5191dde066b0bd47821f96c5c9a78 }), cmu = ExtractedNoteCommitment(0x4d7519491487cb889b51160060248edc973dcccc174bd292c5cc7c2e648915d2), ephemeral_key = EphemeralKeyBytes([165, 92, 124, 93, 77, 67, 101, 56, 82, 25, 188, 219, 209, 30, 238, 32, 86, 140, 158, 231, 249, 11, 100, 134, 141, 65, 223, 100, 182, 78, 96, 46])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5523bab49821e9b0016cf483223d366672f57c9146cd18c641f78d02c0fde544, v: 0x0162724a4e36414f2f16dce29a6b2e94ee2d925d7c8e79d654949b446ae0abab, z: 0x4f3553bf7ee84e7c0006e39beb9be60431aa611cca72005ad4a51aa3a76a431d, t1: 0x4310737d791e2cd930cc6f68839d91fc87663a544e988cd0fc08d5da38ab1416, t2: 0x5fddd6bb34ddd4c494555118c2815e03b78164836fb3253bd15ecb1f55150c94 }), cmu = ExtractedNoteCommitment(0x3c38b3d9c41bcc7ddb78cc7286ae1c1cb1a5405b3be1d0233b72d700fc083af6), ephemeral_key = EphemeralKeyBytes([215, 106, 198, 138, 88, 43, 137, 145, 145, 183, 141, 112, 199, 34, 56, 24, 191, 73, 174, 48, 13, 232, 223, 18, 94, 168, 25, 206, 121, 194, 36, 241]))], value_balance: Amount(-1135389017106274), authorization: Authorized { binding_sig: Signature { rbar: "f7336f652e66f5aa5d3a4786a0d265ed79616b9b83cb2d18abc3d8e448f35235", sbar: "a03171dae8154ddae1af64f0d8bb8eb8cdf7f97f2fe8dfa7f40766201b960c08" } } }), orchard_bundle: None, orchard_zsa_bundle: None, issue_bundle: None } } diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 1932b1dea8..9e1bd5fd66 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -4,6 +4,7 @@ use std::cmp::Ordering; use std::error; use std::fmt; use std::sync::mpsc::Sender; +use orchard::builder::InProgress; use rand::{CryptoRng, RngCore}; @@ -54,7 +55,7 @@ use crate::transaction::components::sapling::zip212_enforcement; use orchard::note::AssetBase; use orchard::issuance::{IssueBundle, Signed}; -use orchard::orchard_flavor::OrchardVanilla; +use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -727,21 +728,24 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< None => (None, SaplingMetadata::empty()), }; - let (orchard_bundle, orchard_meta) = match self - .orchard_builder - .and_then(|builder| { - builder - .build(&mut rng) - .map_err(Error::OrchardBuild) - .transpose() - }) - .transpose()? - { - Some((bundle, meta)) => (Some(bundle), meta), - None => (None, orchard::builder::BundleMetadata::empty()), + // let orchard_bundle: Option> = + // if let Some(builder) = self.orchard_builder { + // Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?) + // } else { + // None + // }; + + let (orchard_bundle, orchard_zsa_bundle) = if let Some(builder) = self.orchard_builder { + if version.has_zsa() { + let zsa_bundle: orchard::Bundle, Amount, OrchardZSA> = builder.build(&mut rng).map_err(Error::OrchardBuild)?; + (None, Some(zsa_bundle)) + } else { + (Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?), None) + } + } else { + (None, None) }; - let issue_bundle: Option> = None; // TODO #[cfg(zcash_unstable = "zfuture")] @@ -756,6 +760,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: None, sapling_bundle, orchard_bundle, + orchard_zsa_bundle, issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -830,6 +835,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: unauthed_tx.sprout_bundle, sapling_bundle, orchard_bundle, + orchard_zsa_bundle: None, // TODO issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 9917de50bf..3359ba3576 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -84,6 +84,49 @@ pub fn read_v5_bundle( } } + +/// Reads an [`orchard::Bundle`] from a v5 transaction format. +pub fn read_v6_bundle( + mut reader: R, +) -> io::Result>> { + #[allow(clippy::redundant_closure)] + let actions_without_auth = Vector::read(&mut reader, |r| read_zsa_action_without_auth(r))?; + if actions_without_auth.is_empty() { + Ok(None) + } else { + let flags = read_flags(&mut reader)?; + let value_balance = Transaction::read_amount(&mut reader)?; + let anchor = read_anchor(&mut reader)?; + let proof_bytes = Vector::read(&mut reader, |r| r.read_u8())?; + let actions = NonEmpty::from_vec( + actions_without_auth + .into_iter() + .map(|act| act.try_map(|_| read_signature::<_, redpallas::SpendAuth>(&mut reader))) + .collect::, _>>()?, + ) + .expect("A nonzero number of actions was read from the transaction data."); + let binding_signature = read_signature::<_, redpallas::Binding>(&mut reader)?; + + let authorization = Authorized::from_parts( + orchard::Proof::new(proof_bytes), + binding_signature, + ); + + Ok( + Some( + orchard::Bundle::from_parts( + actions, + flags, + value_balance, + Default::default(), + anchor, + authorization, + ) + ) + ) + } +} + pub fn read_value_commitment(mut reader: R) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; @@ -189,6 +232,25 @@ pub fn read_action_without_auth( )) } +pub fn read_zsa_action_without_auth( + mut reader: R, +) -> io::Result> { + let cv_net = read_value_commitment(&mut reader)?; + let nf_old = read_nullifier(&mut reader)?; + let rk = read_verification_key(&mut reader)?; + let cmx = read_cmx(&mut reader)?; + let encrypted_note = read_zsa_note_ciphertext(&mut reader)?; + + Ok(Action::from_parts( + nf_old, + rk, + cmx, + encrypted_note, + cv_net, + (), + )) +} + pub fn read_flags(mut reader: R) -> io::Result { let mut byte = [0u8; 1]; reader.read_exact(&mut byte)?; @@ -250,6 +312,44 @@ pub fn write_v5_bundle( Ok(()) } +/// Writes an [`orchard::Bundle`] in the v6 transaction format. +pub fn write_v6_bundle( + bundle: Option<&orchard::Bundle>, + mut writer: W, +) -> io::Result<()> { + + // TODO deduplicate + if let Some(bundle) = &bundle { + Vector::write_nonempty(&mut writer, bundle.actions(), |w, a| { + write_action_without_auth(w, a) + })?; + + writer.write_all(&[bundle.flags().to_byte()])?; + writer.write_all(&bundle.value_balance().to_i64_le_bytes())?; + writer.write_all(&bundle.anchor().to_bytes())?; + Vector::write( + &mut writer, + bundle.authorization().proof().as_ref(), + |w, b| w.write_u8(*b), + )?; + Array::write( + &mut writer, + bundle.actions().iter().map(|a| a.authorization()), + |w, auth| w.write_all(&<[u8; 64]>::from(*auth)), + )?; + + // TODO write burned assets + + writer.write_all(&<[u8; 64]>::from( + bundle.authorization().binding_signature(), + ))?; + } else { + CompactSize::write(&mut writer, 0)?; + } + + Ok(()) +} + pub fn write_value_commitment(mut writer: W, cv: &ValueCommitment) -> io::Result<()> { writer.write_all(&cv.to_bytes()) } @@ -269,18 +369,18 @@ pub fn write_cmx(mut writer: W, cmx: &ExtractedNoteCommitment) -> io:: writer.write_all(&cmx.to_bytes()) } -pub fn write_note_ciphertext( +pub fn write_note_ciphertext( mut writer: W, - nc: &TransmittedNoteCiphertext, + nc: &TransmittedNoteCiphertext, ) -> io::Result<()> { writer.write_all(&nc.epk_bytes)?; writer.write_all(nc.enc_ciphertext.as_ref())?; writer.write_all(&nc.out_ciphertext) } -pub fn write_action_without_auth( +pub fn write_action_without_auth( mut writer: W, - act: &Action<::SpendAuth, OrchardVanilla>, + act: &Action<::SpendAuth, D>, ) -> io::Result<()> { write_value_commitment(&mut writer, act.cv_net())?; write_nullifier(&mut writer, act.nullifier())?; @@ -300,10 +400,10 @@ pub mod testing { Authorized, Bundle, }, }; - use orchard::orchard_flavor::OrchardVanilla; use crate::transaction::components::Amount; use crate::transaction::components::amount::testing::arb_amount; use crate::transaction::TxVersion; + use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; prop_compose! { pub fn arb_bundle(n_actions: usize)( @@ -325,4 +425,25 @@ pub mod testing { Strategy::boxed(Just(None)) } } + + prop_compose! { + pub fn arb_zsa_bundle(n_actions: usize)( + orchard_value_balance in arb_amount(), + bundle in t_orch::BundleArb::arb_bundle(n_actions) + ) -> Bundle { + // overwrite the value balance, as we can't guarantee that the + // value doesn't exceed the MAX_MONEY bounds. + bundle.try_map_value_balance::<_, (), _>(|_| Ok(orchard_value_balance)).unwrap() + } + } + + pub fn arb_zsa_bundle_for_version( + v: TxVersion, + ) -> impl Strategy>> { + if v.has_zsa() { + Strategy::boxed((1usize..100).prop_flat_map(|n| prop::option::of(arb_zsa_bundle(n)))) + } else { + Strategy::boxed(Just(None)) + } + } } diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 1ce3f7a5a2..b602436748 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -19,8 +19,10 @@ use std::fmt; use std::fmt::Debug; use std::io::{self, Read, Write}; use std::ops::Deref; +use orchard::circuit::OrchardCircuit; use orchard::issuance::{IssueBundle, Signed}; -use orchard::orchard_flavor::OrchardVanilla; +use orchard::note_encryption::OrchardDomain; +use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use zcash_encoding::{Array, CompactSize, Vector}; use orchard::orchard_flavor::OrchardVanilla; @@ -28,6 +30,7 @@ use crate::{ consensus::{BlockHeight, BranchId}, sapling::{self, builder as sapling_builder}, }; +use crate::{consensus::{BlockHeight, BranchId}, sapling::redjubjub}; use self::{ components::{ @@ -240,9 +243,9 @@ impl TxVersion { /// Returns `true` if this transaction version supports the Orchard protocol. pub fn has_orchard(&self) -> bool { match self { - TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => false, - TxVersion::Zip225 | TxVersion::Zsa => true, - #[cfg(zcash_unstable = "zfuture")] + TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling | TxVersion::Zsa => false, + TxVersion::Zip225 => true, + #[cfg(feature = "zfuture")] TxVersion::ZFuture => true, } } @@ -345,6 +348,7 @@ pub struct TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, + orchard_zsa_bundle: Option>, issue_bundle: Option>, #[cfg(zcash_unstable = "zfuture")] tze_bundle: Option>, @@ -362,6 +366,7 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, + orchard_zsa_bundle: Option>, issue_bundle: Option>, ) -> Self { TransactionData { @@ -373,6 +378,7 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, + orchard_zsa_bundle, issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, @@ -392,6 +398,7 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, + orchard_zsa_bundle: Option>, issue_bundle: Option>, tze_bundle: Option>, ) -> Self { @@ -404,6 +411,7 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, + orchard_zsa_bundle, issue_bundle, tze_bundle, } @@ -445,6 +453,12 @@ impl TransactionData { self.orchard_bundle.as_ref() } + pub fn orchard_zsa_bundle( + &self, + ) -> Option<&orchard::Bundle> { + self.orchard_zsa_bundle.as_ref() + } + pub fn issue_bundle(&self) -> Option<&IssueBundle> { self.issue_bundle.as_ref() } @@ -515,8 +529,15 @@ impl TransactionData { ) -> Option>, f_orchard: impl FnOnce( Option>, - ) -> Option>, - #[cfg(zcash_unstable = "zfuture")] f_tze: impl FnOnce( + ) -> Option< + orchard::bundle::Bundle, + >, + f_zsa_orchard: impl FnOnce( + Option>, + ) -> Option< + orchard::bundle::Bundle, + >, + #[cfg(feature = "zfuture")] f_tze: impl FnOnce( Option>, ) -> Option>, @@ -530,6 +551,7 @@ impl TransactionData { sprout_bundle: self.sprout_bundle, sapling_bundle: f_sapling(self.sapling_bundle), orchard_bundle: f_orchard(self.orchard_bundle), + orchard_zsa_bundle: f_zsa_orchard(self.orchard_zsa_bundle), issue_bundle: self.issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: f_tze(self.tze_bundle), @@ -568,6 +590,13 @@ impl TransactionData { |f, a| f.map_authorization(a), ) }), + orchard_zsa_bundle: self.orchard_zsa_bundle.map(|b| { + b.map_authorization( + &mut f_orchard, + |f, _, s| f.map_spend_auth(s), + |f, a| f.map_authorization(a), + ) + }), issue_bundle: self.issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: self.tze_bundle.map(|b| b.map_authorization(f_tze)), @@ -716,6 +745,7 @@ impl Transaction { ) }), orchard_bundle: None, + orchard_zsa_bundle: None, issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, @@ -769,6 +799,7 @@ impl Transaction { sprout_bundle: None, sapling_bundle, orchard_bundle, + orchard_zsa_bundle: None, issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -804,7 +835,7 @@ impl Transaction { let transparent_bundle = Self::read_transparent(&mut reader)?; let sapling_bundle = Self::read_v5_sapling(&mut reader)?; // TODO zsa orchards bundle - let orchard_bundle = orchard_serialization::read_v5_bundle(&mut reader)?; + let orchard_zsa_bundle = orchard_serialization::read_v6_bundle(&mut reader)?; // TODO issue bundle let issue_bundle = None; @@ -823,7 +854,8 @@ impl Transaction { transparent_bundle, sprout_bundle: None, sapling_bundle, - orchard_bundle, + orchard_bundle: None, + orchard_zsa_bundle, issue_bundle, #[cfg(feature = "zfuture")] tze_bundle, @@ -950,7 +982,18 @@ impl Transaction { pub fn write_v6(&self, mut writer: W) -> io::Result<()> { - // TODO + if self.sprout_bundle.is_some() { + return Err(io::Error::new( + io::ErrorKind::InvalidInput, + "Sprout components cannot be present when serializing to the V5 transaction format.", + )); + } + self.write_v5_header(&mut writer)?; + self.write_transparent(&mut writer)?; + self.write_v5_sapling(&mut writer)?; + orchard_serialization::write_v6_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; + #[cfg(feature = "zfuture")] + self.write_tze(&mut writer)?; Ok(()) } @@ -1112,6 +1155,7 @@ pub mod testing { sprout_bundle: None, sapling_bundle, orchard_bundle, + orchard_zsa_bundle: None, issue_bundle, } } @@ -1127,7 +1171,7 @@ pub mod testing { transparent_bundle in transparent::arb_bundle(), sapling_bundle in sapling::arb_bundle_for_version(version), orchard_bundle in orchard::arb_bundle_for_version(version), - orchard_zsa_bundle in orchard::arb_bundle_for_version(version), + orchard_zsa_bundle in orchard::arb_zsa_bundle_for_version(version), issue_bundle in issuance::testing::arb_bundle_for_version(version), tze_bundle in tze::arb_bundle(consensus_branch_id), version in Just(version) diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 613668ea55..761dfe25d1 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -1,5 +1,7 @@ use blake2b_simd::Hash as Blake2bHash; use std::ops::Deref; +use orchard::circuit::OrchardCircuit; +use orchard::note_encryption::OrchardDomain; use proptest::prelude::*; @@ -56,6 +58,10 @@ fn check_roundtrip(tx: Transaction) -> Result<(), TestCaseError> { tx.orchard_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_bundle.as_ref().map(|v| *v.value_balance()) ); + prop_assert_eq!( + tx.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()), + txo.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()) + ); Ok(()) } @@ -120,6 +126,14 @@ proptest! { } } +proptest! { + #![proptest_config(ProptestConfig::with_cases(10))] + #[test] + fn tx_serialization_roundtrip_v6(tx in arb_tx(BranchId::V6)) { + check_roundtrip(tx)?; + } +} + #[cfg(zcash_unstable = "zfuture")] proptest! { #[test] @@ -262,6 +276,7 @@ fn zip_0244() { txdata.sprout_bundle().cloned(), txdata.sapling_bundle().cloned(), txdata.orchard_bundle().cloned(), + txdata.orchard_zsa_bundle().cloned(), txdata.issue_bundle().cloned(), ); #[cfg(zcash_unstable = "zfuture")] @@ -274,6 +289,7 @@ fn zip_0244() { txdata.sprout_bundle().cloned(), txdata.sapling_bundle().cloned(), txdata.orchard_bundle().cloned(), + txdata.orchard_zsa_bundle().cloned(), txdata.issue_bundle().cloned(), txdata.tze_bundle().cloned(), ); From 2704c8acf078d823ab7072f942203e7753c0c4b6 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 15 Apr 2024 16:49:31 +0200 Subject: [PATCH 22/85] Add ZSA --- components/zcash_protocol/src/consensus.rs | 4 +- zcash_client_sqlite/src/wallet.rs | 2 + zcash_client_sqlite/src/wallet/init.rs | 2 + zcash_extensions/src/transparent/demo.rs | 9 +- zcash_primitives/src/transaction/builder.rs | 153 +++++++++++++++--- .../src/transaction/components/issuance.rs | 12 +- .../src/transaction/components/orchard.rs | 17 +- zcash_primitives/src/transaction/mod.rs | 20 ++- zcash_primitives/src/transaction/tests.rs | 2 - 9 files changed, 171 insertions(+), 50 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index 26b2692528..d5aafdaa72 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -666,9 +666,9 @@ impl BranchId { }), BranchId::V6 => params.activation_height(NetworkUpgrade::V6).map(|lower| { #[cfg(feature = "zfuture")] - let upper = params.activation_height(NetworkUpgrade::ZFuture); + let upper = params.activation_height(NetworkUpgrade::ZFuture); #[cfg(not(feature = "zfuture"))] - let upper = None; + let upper = None; (lower, upper) }), #[cfg(zcash_unstable = "nu6")] diff --git a/zcash_client_sqlite/src/wallet.rs b/zcash_client_sqlite/src/wallet.rs index 5e6540d4f3..d71bf8d43e 100644 --- a/zcash_client_sqlite/src/wallet.rs +++ b/zcash_client_sqlite/src/wallet.rs @@ -1490,6 +1490,8 @@ pub(crate) fn get_transaction( tx_data.sprout_bundle().cloned(), tx_data.sapling_bundle().cloned(), tx_data.orchard_bundle().cloned(), + tx_data.orchard_zsa_bundle().cloned(), + tx_data.issue_bundle().cloned(), ) .freeze() .map(|t| (expiry_height, t)) diff --git a/zcash_client_sqlite/src/wallet/init.rs b/zcash_client_sqlite/src/wallet/init.rs index 9fff7e3a3f..a68d5a1c1a 100644 --- a/zcash_client_sqlite/src/wallet/init.rs +++ b/zcash_client_sqlite/src/wallet/init.rs @@ -1275,6 +1275,8 @@ mod tests { None, None, None, + None, + None, ) .freeze() .unwrap(); diff --git a/zcash_extensions/src/transparent/demo.rs b/zcash_extensions/src/transparent/demo.rs index 40389cbb31..453e548240 100644 --- a/zcash_extensions/src/transparent/demo.rs +++ b/zcash_extensions/src/transparent/demo.rs @@ -513,8 +513,7 @@ mod tests { NetworkUpgrade::Heartwood => Some(BlockHeight::from_u32(903_800)), NetworkUpgrade::Canopy => Some(BlockHeight::from_u32(1_028_500)), NetworkUpgrade::Nu5 => Some(BlockHeight::from_u32(1_200_000)), - #[cfg(zcash_unstable = "nu6")] - NetworkUpgrade::Nu6 => Some(BlockHeight::from_u32(1_300_000)), + NetworkUpgrade::Nu6 => Some(BlockHeight::from_u32(1_200_000)), NetworkUpgrade::ZFuture => Some(BlockHeight::from_u32(1_400_000)), } } @@ -682,6 +681,8 @@ mod tests { None, None, None, + None, + None, Some(Bundle { vin: vec![], vout: vec![out_a], @@ -713,6 +714,8 @@ mod tests { None, None, None, + None, + None, Some(Bundle { vin: vec![in_b], vout: vec![out_b], @@ -740,6 +743,8 @@ mod tests { None, None, None, + None, + None, Some(Bundle { vin: vec![in_c], vout: vec![], diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 9e1bd5fd66..90192117cc 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -4,7 +4,8 @@ use std::cmp::Ordering; use std::error; use std::fmt; use std::sync::mpsc::Sender; -use orchard::builder::InProgress; +use orchard::Address; +use orchard::builder::{InProgress, Unproven}; use rand::{CryptoRng, RngCore}; @@ -347,11 +348,40 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// /// The expiry height will be set to the given height plus the default transaction /// expiry delta (20 blocks). - pub fn new(params: P, target_height: BlockHeight, build_config: BuildConfig) -> Self { - let orchard_builder = if params.is_nu_active(NetworkUpgrade::Nu5, target_height) { - build_config - .orchard_builder_config() - .map(|(bundle_type, anchor)| orchard::builder::Builder::new(bundle_type, anchor)) + pub fn new( + params: P, + target_height: BlockHeight, + orchard_anchor: Option, + ) -> Self { + Builder::new_with_rng(params, target_height, orchard_anchor, OsRng) + } +} + +impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { + /// Creates a new `Builder` targeted for inclusion in the block with the given height + /// and randomness source, using default values for general transaction fields. + /// + /// # Default values + /// + /// The expiry height will be set to the given height plus the default transaction + /// expiry delta (20 blocks). + pub fn new_with_rng( + params: P, + target_height: BlockHeight, + orchard_anchor: Option, + rng: R, + ) -> Builder<'a, P, R> { + + let is_orchard_zsa_enabled = params.is_nu_active(NetworkUpgrade::V6, target_height); + let is_orchard_enabled = params.is_nu_active(NetworkUpgrade::Nu5, target_height) || is_orchard_zsa_enabled; + + let orchard_builder = if is_orchard_enabled { + orchard_anchor.map(|anchor| { + orchard::builder::Builder::new( + orchard::bundle::Flags::from_parts(true, true, is_orchard_zsa_enabled), + anchor, + ) + }) } else { None }; @@ -410,7 +440,55 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } } -impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder<'a, P, U> { + pub fn add_burn( + &mut self, + value: u64, + asset: AssetBase, + ) -> Result<(), Error> { + self.orchard_builder + .as_mut() + .ok_or(Error::OrchardAnchorNotAvailable)? + .add_burn(asset, orchard::value::NoteValue::from_raw(value)) + .unwrap(); // TODO .map_err(Error::OrchardBuild)?; or new error type + + Ok(()) + } + + /// Adds an Orchard ZSA note to be spent in this bundle. + /// + /// Returns an error if the given Merkle path does not have the required anchor for + /// the given note. + pub fn add_orchard_zsa_spend( + &mut self, + sk: orchard::keys::SpendingKey, + note: orchard::Note, + merkle_path: orchard::tree::MerklePath, + ) -> Result<(), Error> { + self.add_orchard_spend_impl(sk, note, merkle_path) + } + + /// Adds an Orchard ZSA output to the transaction. + pub fn add_orchard_zsa_output( + &mut self, + ovk: Option, + recipient: Address, + value: u64, + asset: AssetBase, + memo: MemoBytes, + ) -> Result<(), Error> { + self.orchard_builder + .as_mut() + .ok_or(Error::OrchardAnchorNotAvailable)? + .add_recipient( + ovk, + recipient, + orchard::value::NoteValue::from_raw(value), + asset, + Some(*memo.as_array()), + ) + .map_err(Error::OrchardRecipient) + } + /// Adds an Orchard note to be spent in this bundle. /// /// Returns an error if the given Merkle path does not have the required anchor for @@ -421,8 +499,21 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< note: orchard::Note, merkle_path: orchard::tree::MerklePath, ) -> Result<(), Error> { - if let Some(builder) = self.orchard_builder.as_mut() { - builder.add_spend(orchard::keys::FullViewingKey::from(sk), note, merkle_path)?; + assert_eq!(note.asset().is_native().unwrap_u8(), 1); + self.add_orchard_spend_impl(sk, note, merkle_path) + } + + fn add_orchard_spend_impl( + &mut self, + sk: orchard::keys::SpendingKey, + note: orchard::Note, + merkle_path: orchard::tree::MerklePath, + ) -> Result<(), Error> { + self.orchard_builder + .as_mut() + .ok_or(Error::OrchardAnchorNotAvailable)? + .add_spend(orchard::keys::FullViewingKey::from(&sk), note, merkle_path) + .map_err(Error::OrchardSpend)?; self.orchard_saks .push(orchard::keys::SpendAuthorizingKey::from(sk)); @@ -437,7 +528,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< pub fn add_orchard_output( &mut self, ovk: Option, - recipient: orchard::Address, + recipient: Address, value: u64, memo: MemoBytes, ) -> Result<(), Error> { @@ -728,19 +819,11 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< None => (None, SaplingMetadata::empty()), }; - // let orchard_bundle: Option> = - // if let Some(builder) = self.orchard_builder { - // Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?) - // } else { - // None - // }; - - let (orchard_bundle, orchard_zsa_bundle) = if let Some(builder) = self.orchard_builder { + let (unproven_orchard_bundle, unproven_orchard_zsa_bundle) = if let Some(builder) = self.orchard_builder { if version.has_zsa() { - let zsa_bundle: orchard::Bundle, Amount, OrchardZSA> = builder.build(&mut rng).map_err(Error::OrchardBuild)?; - (None, Some(zsa_bundle)) + (None, Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?.into())) } else { - (Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?), None) + (Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?.into()), None) } } else { (None, None) @@ -759,8 +842,8 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< transparent_bundle, sprout_bundle: None, sapling_bundle, - orchard_bundle, - orchard_zsa_bundle, + orchard_bundle: unproven_orchard_bundle, + orchard_zsa_bundle: unproven_orchard_zsa_bundle, issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -809,7 +892,8 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< let orchard_bundle = unauthed_tx .orchard_bundle .map(|b| { - b.create_proof( + let vanilla: orchard::Bundle, _>, _, _> = b.into(); + vanilla.create_proof( &orchard::circuit::ProvingKey::build::(), &mut rng, ) @@ -824,6 +908,25 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .transpose() .map_err(Error::OrchardBuild)?; + let orchard_zsa_bundle = unauthed_tx + .orchard_zsa_bundle + .map(|b| { + let zsa: orchard::Bundle, _>, _, _> = b.into(); + zsa.create_proof( + &orchard::circuit::ProvingKey::build::(), + &mut rng, + ) + .and_then(|b| { + b.apply_signatures( + &mut rng, + *shielded_sig_commitment.as_ref(), + &self.orchard_saks, + ) + }) + }) + .transpose() + .map_err(Error::OrchardBuild)?; + let issue_bundle = None; // TODO let authorized_tx = TransactionData { @@ -835,7 +938,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: unauthed_tx.sprout_bundle, sapling_bundle, orchard_bundle, - orchard_zsa_bundle: None, // TODO + orchard_zsa_bundle, issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index 63f31d20e9..709265fe4c 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -1,4 +1,4 @@ -use crate::transaction::components::orchard::{read_nullifier}; +use crate::transaction::components::orchard::read_nullifier; use bitvec::macros::internal::funty::Fundamental; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use nonempty::NonEmpty; @@ -13,7 +13,7 @@ use std::io::{Read, Write}; use zcash_encoding::{CompactSize, Vector}; /// Reads an [`orchard::Bundle`] from a v5 transaction format. -pub fn read_v5_bundle(mut reader: R) -> io::Result>> { +pub fn read_v6_bundle(mut reader: R) -> io::Result>> { let actions = Vector::read(&mut reader, |r| read_action(r))?; if actions.is_empty() { @@ -63,7 +63,7 @@ fn read_note(mut reader: R) -> io::Result { rho, rseed, )) - .unwrap()) + .unwrap()) } fn read_recipient(mut reader: R) -> io::Result
{ @@ -72,7 +72,7 @@ fn read_recipient(mut reader: R) -> io::Result
{ Ok(Option::from(Address::from_raw_address_bytes(&bytes)).unwrap()) } -fn read_asset(mut reader: R) -> io::Result { +pub fn read_asset(reader: &mut R) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; Ok(Option::from(AssetBase::from_bytes(&bytes)).unwrap()) @@ -85,7 +85,7 @@ fn read_rseed(mut reader: R, nullifier: &Nullifier) -> io::Result( +pub fn write_v6_bundle( bundle: Option<&IssueBundle>, mut writer: W, ) -> io::Result<()> { @@ -141,7 +141,7 @@ pub mod testing { pub fn arb_bundle_for_version( v: TxVersion, ) -> impl Strategy>> { - if v.has_orchard() { + if v.has_zsa() { Strategy::boxed((1usize..100).prop_flat_map(|n| prop::option::of(arb_issue_bundle(n)))) } else { Strategy::boxed(Just(None)) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 3359ba3576..ccbbf65d19 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -11,9 +11,11 @@ use orchard::{ value::ValueCommitment, Action, Anchor, }; +use orchard::note::AssetBase; use orchard::note_encryption::OrchardDomain; use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use zcash_encoding::{Array, CompactSize, Vector}; +use crate::transaction::components::issuance::read_asset; use super::Amount; use crate::transaction::Transaction; @@ -105,6 +107,9 @@ pub fn read_v6_bundle( .collect::, _>>()?, ) .expect("A nonzero number of actions was read from the transaction data."); + + let burn = Vector::read(&mut reader, |r| read_burn(r))?; + let binding_signature = read_signature::<_, redpallas::Binding>(&mut reader)?; let authorization = Authorized::from_parts( @@ -118,7 +123,7 @@ pub fn read_v6_bundle( actions, flags, value_balance, - Default::default(), + burn, anchor, authorization, ) @@ -127,6 +132,10 @@ pub fn read_v6_bundle( } } +fn read_burn(reader: &mut R) -> io::Result<(AssetBase, Amount)> { + Ok((read_asset(reader)?, Transaction::read_amount(reader)?)) +} + pub fn read_value_commitment(mut reader: R) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; @@ -338,7 +347,11 @@ pub fn write_v6_bundle( |w, auth| w.write_all(&<[u8; 64]>::from(*auth)), )?; - // TODO write burned assets + Vector::write(&mut writer, bundle.burn(), |w, (asset, amount)| { + w.write_all(&asset.to_bytes())?; + w.write_all(&amount.to_i64_le_bytes())?; + Ok(()) + })?; writer.write_all(&<[u8; 64]>::from( bundle.authorization().binding_signature(), diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index b602436748..65c853cfb7 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -19,9 +19,7 @@ use std::fmt; use std::fmt::Debug; use std::io::{self, Read, Write}; use std::ops::Deref; -use orchard::circuit::OrchardCircuit; use orchard::issuance::{IssueBundle, Signed}; -use orchard::note_encryption::OrchardDomain; use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use zcash_encoding::{Array, CompactSize, Vector}; use orchard::orchard_flavor::OrchardVanilla; @@ -31,6 +29,7 @@ use crate::{ sapling::{self, builder as sapling_builder}, }; use crate::{consensus::{BlockHeight, BranchId}, sapling::redjubjub}; +use crate::transaction::components::issuance; use self::{ components::{ @@ -307,10 +306,11 @@ pub struct Unauthorized; impl Authorization for Unauthorized { type TransparentAuth = transparent::builder::Unauthorized; - type SaplingAuth = - sapling_builder::InProgress; - type OrchardAuth = - orchard::builder::InProgress, orchard::builder::Unauthorized>; + type SaplingAuth = sapling::builder::Unauthorized; + type OrchardAuth = orchard::builder::InProgress< + orchard::bundle_enum_adapter::UnprovenEnum, + orchard::builder::Unauthorized, + >; #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::builder::Unauthorized; @@ -834,10 +834,8 @@ impl Transaction { Self::read_v5_header_fragment(&mut reader)?; let transparent_bundle = Self::read_transparent(&mut reader)?; let sapling_bundle = Self::read_v5_sapling(&mut reader)?; - // TODO zsa orchards bundle let orchard_zsa_bundle = orchard_serialization::read_v6_bundle(&mut reader)?; - // TODO issue bundle - let issue_bundle = None; + let issue_bundle = issuance::read_v6_bundle(&mut reader)?; #[cfg(feature = "zfuture")] let tze_bundle = if version.has_tze() { @@ -1142,7 +1140,7 @@ pub mod testing { transparent_bundle in transparent::arb_bundle(), sapling_bundle in sapling::arb_bundle_for_version(version), orchard_bundle in orchard::arb_bundle_for_version(version), - orchard_zsa_bundle in orchard::arb_bundle_for_version(version), + orchard_zsa_bundle in orchard::arb_zsa_bundle_for_version(version), issue_bundle in issuance::testing::arb_bundle_for_version(version), version in Just(version) ) -> TransactionData { @@ -1155,7 +1153,7 @@ pub mod testing { sprout_bundle: None, sapling_bundle, orchard_bundle, - orchard_zsa_bundle: None, + orchard_zsa_bundle, issue_bundle, } } diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 761dfe25d1..9c8de3be21 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -1,7 +1,5 @@ use blake2b_simd::Hash as Blake2bHash; use std::ops::Deref; -use orchard::circuit::OrchardCircuit; -use orchard::note_encryption::OrchardDomain; use proptest::prelude::*; From 5eec9640d2fa2e9f6a0dad26e156e6bcc9b40f1a Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 15 Apr 2024 23:05:54 +0200 Subject: [PATCH 23/85] Add issuance --- zcash_client_backend/src/proto/proposal.rs | 1 - zcash_client_backend/src/proto/service.rs | 1 - zcash_primitives/src/transaction/builder.rs | 57 ++++++++++-- .../src/transaction/components/orchard.rs | 2 +- .../components/transparent/builder.rs | 2 +- .../src/transaction/components/tze/builder.rs | 4 +- zcash_primitives/src/transaction/mod.rs | 89 +++++++++++-------- zcash_primitives/src/transaction/sighash.rs | 8 +- .../src/transaction/sighash_v4.rs | 4 +- .../src/transaction/sighash_v5.rs | 59 +++--------- .../src/transaction/sighash_v6.rs | 53 +++++++++++ zcash_primitives/src/transaction/tests.rs | 10 ++- zcash_primitives/src/transaction/txid.rs | 23 +++-- 13 files changed, 201 insertions(+), 112 deletions(-) create mode 100644 zcash_primitives/src/transaction/sighash_v6.rs diff --git a/zcash_client_backend/src/proto/proposal.rs b/zcash_client_backend/src/proto/proposal.rs index 0a664d5cde..a17b83bf8b 100644 --- a/zcash_client_backend/src/proto/proposal.rs +++ b/zcash_client_backend/src/proto/proposal.rs @@ -1,4 +1,3 @@ -// This file is @generated by prost-build. /// A data structure that describes a series of transactions to be created. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/zcash_client_backend/src/proto/service.rs b/zcash_client_backend/src/proto/service.rs index 03ea1b93ec..ccfd3fed7a 100644 --- a/zcash_client_backend/src/proto/service.rs +++ b/zcash_client_backend/src/proto/service.rs @@ -1,4 +1,3 @@ -// This file is @generated by prost-build. /// A BlockID message contains identifiers to select a block: a height or a /// hash. Specification by hash is not implemented, but may be in the future. #[allow(clippy::derive_partial_eq_without_eq)] diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 90192117cc..6cd4a36823 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -4,7 +4,7 @@ use std::cmp::Ordering; use std::error; use std::fmt; use std::sync::mpsc::Sender; -use orchard::Address; +use orchard::{Address, issuance}; use orchard::builder::{InProgress, Unproven}; use rand::{CryptoRng, RngCore}; @@ -55,7 +55,8 @@ use crate::transaction::components::amount::NonNegativeAmount; use crate::transaction::components::sapling::zip212_enforcement; use orchard::note::AssetBase; -use orchard::issuance::{IssueBundle, Signed}; +use orchard::issuance::{IssueBundle, IssueInfo}; +use orchard::keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}; use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. @@ -97,6 +98,8 @@ pub enum Error { SaplingBuild(sapling::builder::Error), /// An error occurred in constructing the Orchard parts of a transaction. OrchardBuild(orchard::builder::BuildError), + /// An error occurred in constructing the Orchard parts of a transaction. + IssuanceBuild(orchard::issuance::Error), /// An error occurred in adding an Orchard Spend to a transaction. OrchardSpend(orchard::builder::SpendError), /// An error occurred in adding an Orchard Output to a transaction. @@ -130,6 +133,7 @@ impl fmt::Display for Error { Error::TransparentBuild(err) => err.fmt(f), Error::SaplingBuild(err) => err.fmt(f), Error::OrchardBuild(err) => write!(f, "{:?}", err), + Error::IssuanceBuild(err) => write!(f, "{:?}", err), Error::OrchardSpend(err) => write!(f, "Could not add Orchard spend: {}", err), Error::OrchardRecipient(err) => write!(f, "Could not add Orchard recipient: {}", err), Error::SaplingBuilderNotAvailable => write!( @@ -286,6 +290,8 @@ pub struct Builder<'a, P, U: sapling::builder::ProverProgress> { transparent_builder: TransparentBuilder, sapling_builder: Option, orchard_builder: Option, + issuance_builder: Option>, + issuance_key: Option, // TODO: In the future, instead of taking the spending keys as arguments when calling // `add_sapling_spend` or `add_orchard_spend`, we will build an unauthorized, unproven // transaction, and then the caller will be responsible for using the spending keys or their @@ -293,7 +299,7 @@ pub struct Builder<'a, P, U: sapling::builder::ProverProgress> { sapling_asks: Vec, orchard_saks: Vec, #[cfg(zcash_unstable = "zfuture")] - tze_builder: TzeBuilder<'a, TransactionData>, + tze_builder: TzeBuilder<'a, TransactionData>, #[cfg(not(zcash_unstable = "zfuture"))] tze_builder: std::marker::PhantomData<&'a ()>, progress_notifier: U, @@ -404,6 +410,8 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { transparent_builder: TransparentBuilder::empty(), sapling_builder, orchard_builder, + issuance_builder: None, + issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), #[cfg(zcash_unstable = "zfuture")] @@ -438,7 +446,30 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { progress_notifier, } } -} + + + /// Adds an Issuance action to the transaction. + pub fn add_issuance( + &mut self, + ik: IssuanceAuthorizingKey, + asset_desc: String, + recipient: Address, + value: orchard::value::NoteValue, + ) -> Result<(), Error> { + if self.issuance_builder.is_none() { + self.issuance_builder = Some( + IssueBundle::new(IssuanceValidatingKey::from(&ik), asset_desc, Some(IssueInfo { recipient, value }), OsRng) + .map_err(Error::IssuanceBuild)?.0 + ); + self.issuance_key = Some(ik); + } else { + // TODO Here we ignore provided 'ik', probably might want to check if it corresponds to the one we already have + self.issuance_builder.as_mut().unwrap().add_recipient(asset_desc, recipient, value, OsRng).map_err(Error::IssuanceBuild)?; + }; + + Ok(()) + } + pub fn add_burn( &mut self, @@ -773,6 +804,8 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { // Consistency checks // + // TODO we need to check balance per AssetBase including burns, but only take fees into account for native asset + // After fees are accounted for, the value balance of the transaction must be zero. let balance_after_fees = (self.value_balance()? - fee.into()).ok_or(BalanceError::Underflow)?; @@ -829,12 +862,12 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { (None, None) }; - let issue_bundle: Option> = None; // TODO + let unauthorized_issue_bundle = self.issuance_builder; #[cfg(zcash_unstable = "zfuture")] let (tze_bundle, tze_signers) = self.tze_builder.build(); - let unauthed_tx: TransactionData = TransactionData { + let unauthed_tx: TransactionData = TransactionData { version, consensus_branch_id: BranchId::for_height(&self.params, self.target_height), lock_time: 0, @@ -844,7 +877,7 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { sapling_bundle, orchard_bundle: unproven_orchard_bundle, orchard_zsa_bundle: unproven_orchard_zsa_bundle, - issue_bundle, + issue_bundle: unauthorized_issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, }; @@ -927,7 +960,11 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { .transpose() .map_err(Error::OrchardBuild)?; - let issue_bundle = None; // TODO + let issue_bundle = unauthed_tx + .issue_bundle + .map(|b| b.prepare(*shielded_sig_commitment.as_ref())) + .map(|b| b.sign(self.issuance_key.as_ref().unwrap())) + .map(|b| b.unwrap()); let authorized_tx = TransactionData { version: unauthed_tx.version, @@ -958,7 +995,7 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> ExtensionTxBuilder<'a> for Builder<'a, P, U> { - type BuildCtx = TransactionData; + type BuildCtx = TransactionData; type BuildError = tze::builder::Error; fn add_tze_input( @@ -1101,6 +1138,8 @@ mod tests { tze_builder: std::marker::PhantomData, progress_notifier: (), orchard_builder: None, + issuance_builder: None, + issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), }; diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index ccbbf65d19..8364fdea6f 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -79,7 +79,7 @@ pub fn read_v5_bundle( actions, flags, value_balance, - vec![], // TODO implement "burn" reading and writing + Default::default(), anchor, authorization, ))) diff --git a/zcash_primitives/src/transaction/components/transparent/builder.rs b/zcash_primitives/src/transaction/components/transparent/builder.rs index c275065fe1..c07ce84030 100644 --- a/zcash_primitives/src/transaction/components/transparent/builder.rs +++ b/zcash_primitives/src/transaction/components/transparent/builder.rs @@ -241,7 +241,7 @@ impl TransparentAuthorizingContext for Unauthorized { impl Bundle { pub fn apply_signatures( self, - #[cfg(feature = "transparent-inputs")] mtx: &TransactionData, + #[cfg(feature = "transparent-inputs")] mtx: &TransactionData, #[cfg(feature = "transparent-inputs")] txid_parts_cache: &TxDigests, ) -> Bundle { #[cfg(feature = "transparent-inputs")] diff --git a/zcash_primitives/src/transaction/components/tze/builder.rs b/zcash_primitives/src/transaction/components/tze/builder.rs index 974dac9ce8..64284b5889 100644 --- a/zcash_primitives/src/transaction/components/tze/builder.rs +++ b/zcash_primitives/src/transaction/components/tze/builder.rs @@ -157,8 +157,8 @@ impl<'a, BuildCtx> TzeBuilder<'a, BuildCtx> { impl Bundle { pub fn into_authorized( self, - unauthed_tx: &tx::TransactionData, - signers: Vec>>, + unauthed_tx: &tx::TransactionData, + signers: Vec>>, ) -> Result, Error> { // Create TZE input witnesses let payloads = signers diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 65c853cfb7..02706a6e82 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -5,6 +5,7 @@ pub mod fees; pub mod sighash; pub mod sighash_v4; pub mod sighash_v5; +pub mod sighash_v6; pub mod txid; pub mod util; @@ -19,7 +20,8 @@ use std::fmt; use std::fmt::Debug; use std::io::{self, Read, Write}; use std::ops::Deref; -use orchard::issuance::{IssueBundle, Signed}; +use orchard::issuance::{IssueAuth, IssueBundle, Signed}; +use orchard::note_encryption::OrchardDomain; use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use zcash_encoding::{Array, CompactSize, Vector}; use orchard::orchard_flavor::OrchardVanilla; @@ -320,13 +322,13 @@ impl Authorization for Unauthorized { #[derive(Debug)] pub struct Transaction { txid: TxId, - data: TransactionData, + data: TransactionData, } impl Deref for Transaction { - type Target = TransactionData; + type Target = TransactionData; - fn deref(&self) -> &TransactionData { + fn deref(&self) -> &TransactionData { &self.data } } @@ -339,7 +341,7 @@ impl PartialEq for Transaction { /// The information contained in a Zcash transaction. #[derive(Debug)] -pub struct TransactionData { +pub struct TransactionData { version: TxVersion, consensus_branch_id: BranchId, lock_time: u32, @@ -349,12 +351,12 @@ pub struct TransactionData { sapling_bundle: Option>, orchard_bundle: Option>, orchard_zsa_bundle: Option>, - issue_bundle: Option>, - #[cfg(zcash_unstable = "zfuture")] + issue_bundle: Option>, + #[cfg(feature = "zfuture")] tze_bundle: Option>, } -impl TransactionData { +impl TransactionData { /// Constructs a `TransactionData` from its constituent parts. #[allow(clippy::too_many_arguments)] pub fn from_parts( @@ -367,7 +369,7 @@ impl TransactionData { sapling_bundle: Option>, orchard_bundle: Option>, orchard_zsa_bundle: Option>, - issue_bundle: Option>, + issue_bundle: Option>, ) -> Self { TransactionData { version, @@ -399,7 +401,7 @@ impl TransactionData { sapling_bundle: Option>, orchard_bundle: Option>, orchard_zsa_bundle: Option>, - issue_bundle: Option>, + issue_bundle: Option>, tze_bundle: Option>, ) -> Self { TransactionData { @@ -459,7 +461,7 @@ impl TransactionData { self.orchard_zsa_bundle.as_ref() } - pub fn issue_bundle(&self) -> Option<&IssueBundle> { + pub fn issue_bundle(&self) -> Option<&IssueBundle> { self.issue_bundle.as_ref() } @@ -498,7 +500,7 @@ impl TransactionData { .ok_or_else(|| BalanceError::Overflow.into()) } - pub fn digest>(&self, digester: D) -> D::Digest { + pub fn digest>(&self, digester: D) -> D::Digest { digester.combine( digester.digest_header( self.version, @@ -508,7 +510,11 @@ impl TransactionData { ), digester.digest_transparent(self.transparent_bundle.as_ref()), digester.digest_sapling(self.sapling_bundle.as_ref()), - digester.digest_orchard(self.orchard_bundle.as_ref()), + if self.version.has_zsa() { + digester.digest_orchard(self.orchard_zsa_bundle.as_ref()) + } else { + digester.digest_orchard(self.orchard_bundle.as_ref()) + }, digester.digest_issue(self.issue_bundle.as_ref()), #[cfg(zcash_unstable = "zfuture")] digester.digest_tze(self.tze_bundle.as_ref()), @@ -537,11 +543,10 @@ impl TransactionData { ) -> Option< orchard::bundle::Bundle, >, - #[cfg(feature = "zfuture")] f_tze: impl FnOnce( + #[cfg(zcash_unstable = "zfuture")] f_tze: impl FnOnce( Option>, - ) - -> Option>, - ) -> TransactionData { + ) -> Option>, + ) -> TransactionData { TransactionData { version: self.version, consensus_branch_id: self.consensus_branch_id, @@ -564,7 +569,7 @@ impl TransactionData { mut f_sapling: impl sapling_serialization::MapAuth, mut f_orchard: impl orchard_serialization::MapAuth, #[cfg(zcash_unstable = "zfuture")] f_tze: impl tze::MapAuth, - ) -> TransactionData { + ) -> TransactionData { TransactionData { version: self.version, consensus_branch_id: self.consensus_branch_id, @@ -604,7 +609,7 @@ impl TransactionData { } } -impl TransactionData { +impl TransactionData { pub fn sapling_value_balance(&self) -> Amount { self.sapling_bundle .as_ref() @@ -612,25 +617,26 @@ impl TransactionData { } } -impl TransactionData { +impl TransactionData { pub fn freeze(self) -> io::Result { Transaction::from_data(self) } } impl Transaction { - fn from_data(data: TransactionData) -> io::Result { + fn from_data(data: TransactionData) -> io::Result { match data.version { TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => { Self::from_data_v4(data) } - TxVersion::Zip225 | TxVersion::Zsa => Ok(Self::from_data_v5(data)), + TxVersion::Zip225 => Ok(Self::from_data_v5(data)), + TxVersion::Zsa => Ok(Self::from_data_v6(data)), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Ok(Self::from_data_v5(data)), } } - fn from_data_v4(data: TransactionData) -> io::Result { + fn from_data_v4(data: TransactionData) -> io::Result { let mut tx = Transaction { txid: TxId([0; 32]), data, @@ -641,7 +647,7 @@ impl Transaction { Ok(tx) } - fn from_data_v5(data: TransactionData) -> Self { + fn from_data_v5(data: TransactionData) -> Self { let txid = to_txid( data.version, data.consensus_branch_id, @@ -651,7 +657,11 @@ impl Transaction { Transaction { txid, data } } - pub fn into_data(self) -> TransactionData { + fn from_data_v6(data: TransactionData) -> Self { + Self::from_data_v5(data) + } + + pub fn into_data(self) -> TransactionData { self.data } @@ -859,7 +869,7 @@ impl Transaction { tze_bundle, }; - Ok(Self::from_data_v5(data)) + Ok(Self::from_data_v6(data)) } #[cfg(zcash_unstable = "zfuture")] @@ -990,6 +1000,7 @@ impl Transaction { self.write_transparent(&mut writer)?; self.write_v5_sapling(&mut writer)?; orchard_serialization::write_v6_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; + issuance::write_v6_bundle(self.issue_bundle.as_ref(), &mut writer)?; #[cfg(feature = "zfuture")] self.write_tze(&mut writer)?; Ok(()) @@ -1039,7 +1050,7 @@ pub struct TxDigests { pub tze_digests: Option>, } -pub trait TransactionDigest { +pub trait TransactionDigest { type HeaderDigest; type TransparentDigest; type SaplingDigest; @@ -1069,12 +1080,13 @@ pub trait TransactionDigest { sapling_bundle: Option<&sapling::Bundle>, ) -> Self::SaplingDigest; - fn digest_orchard( + fn digest_orchard( &self, - orchard_bundle: Option<&orchard::Bundle>, + orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; - fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest; + fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest; + #[cfg(zcash_unstable = "zfuture")] fn digest_tze(&self, tze_bundle: Option<&tze::Bundle>) -> Self::TzeDigest; @@ -1095,6 +1107,7 @@ pub enum DigestError { #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { + use orchard::issuance::Signed; use proptest::prelude::*; use crate::consensus::BranchId; @@ -1102,7 +1115,7 @@ pub mod testing { use super::{ components::{ - orchard::testing::{self as orchard}, + orchard::testing::{self as orchard_testing}, sapling::testing::{self as sapling}, transparent::testing::{self as transparent}, }, @@ -1139,12 +1152,12 @@ pub mod testing { expiry_height in any::(), transparent_bundle in transparent::arb_bundle(), sapling_bundle in sapling::arb_bundle_for_version(version), - orchard_bundle in orchard::arb_bundle_for_version(version), - orchard_zsa_bundle in orchard::arb_zsa_bundle_for_version(version), + orchard_bundle in orchard_testing::arb_bundle_for_version(version), + orchard_zsa_bundle in orchard_testing::arb_zsa_bundle_for_version(version), issue_bundle in issuance::testing::arb_bundle_for_version(version), version in Just(version) - ) -> TransactionData { - TransactionData { + ) -> TransactionData { + TransactionData:: { version, consensus_branch_id, lock_time, @@ -1168,12 +1181,12 @@ pub mod testing { expiry_height in any::(), transparent_bundle in transparent::arb_bundle(), sapling_bundle in sapling::arb_bundle_for_version(version), - orchard_bundle in orchard::arb_bundle_for_version(version), - orchard_zsa_bundle in orchard::arb_zsa_bundle_for_version(version), + orchard_bundle in orchard_testing::arb_bundle_for_version(version), + orchard_zsa_bundle in orchard_testing::arb_zsa_bundle_for_version(version), issue_bundle in issuance::testing::arb_bundle_for_version(version), tze_bundle in tze::arb_bundle(consensus_branch_id), version in Just(version) - ) -> TransactionData { + ) -> TransactionData { TransactionData { version, consensus_branch_id, diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index 07c6b70332..28e9cb348d 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -1,4 +1,5 @@ use blake2b_simd::Hash as Blake2bHash; +use orchard::issuance::IssueAuth; use super::{ components::{amount::NonNegativeAmount, transparent}, @@ -14,6 +15,7 @@ use crate::{ use crate::transaction::sighash_v5::v6_signature_hash; #[cfg(zcash_unstable = "zfuture")] use {super::components::Amount, crate::extensions::transparent::Precondition}; +use crate::transaction::sighash_v6::v6_signature_hash; pub const SIGHASH_ALL: u8 = 0x01; pub const SIGHASH_NONE: u8 = 0x02; @@ -77,12 +79,14 @@ pub trait TransparentAuthorizingContext: transparent::Authorization { /// set of precomputed hashes produced in the construction of the /// transaction ID. pub fn signature_hash< + 'a, TA: TransparentAuthorizingContext, SA: sapling::bundle::Authorization, A: Authorization, + IA: IssueAuth, >( - tx: &TransactionData, - signable_input: &SignableInput<'_>, + tx: &TransactionData, + signable_input: &SignableInput<'a>, txid_parts: &TxDigests, ) -> SignatureHash { SignatureHash(match tx.version { diff --git a/zcash_primitives/src/transaction/sighash_v4.rs b/zcash_primitives/src/transaction/sighash_v4.rs index ad136e5f8d..a53960b187 100644 --- a/zcash_primitives/src/transaction/sighash_v4.rs +++ b/zcash_primitives/src/transaction/sighash_v4.rs @@ -1,5 +1,6 @@ use blake2b_simd::{Hash as Blake2bHash, Params as Blake2bParams}; use ff::PrimeField; +use orchard::issuance::IssueAuth; use crate::{ consensus::BranchId, @@ -135,8 +136,9 @@ fn shielded_outputs_hash(shielded_outputs: &[OutputDescription] pub fn v4_signature_hash< SA: sapling::bundle::Authorization, A: Authorization, + IA: IssueAuth, >( - tx: &TransactionData, + tx: &TransactionData, signable_input: &SignableInput<'_>, ) -> Blake2bHash { let hash_type = signable_input.hash_type(); diff --git a/zcash_primitives/src/transaction/sighash_v5.rs b/zcash_primitives/src/transaction/sighash_v5.rs index 897f811f3a..b789ecc41c 100644 --- a/zcash_primitives/src/transaction/sighash_v5.rs +++ b/zcash_primitives/src/transaction/sighash_v5.rs @@ -17,11 +17,14 @@ use crate::transaction::{ }; #[cfg(zcash_unstable = "zfuture")] -use { - crate::transaction::{components::tze, TzeDigests}, - byteorder::WriteBytesExt, - zcash_encoding::{CompactSize, Vector}, -}; +use byteorder::WriteBytesExt; +use orchard::issuance::IssueAuth; + +#[cfg(zcash_unstable = "zfuture")] +use zcash_encoding::{CompactSize, Vector}; + +#[cfg(zcash_unstable = "zfuture")] +use crate::transaction::{components::tze, TzeDigests}; const ZCASH_TRANSPARENT_INPUT_HASH_PERSONALIZATION: &[u8; 16] = b"Zcash___TxInHash"; const ZCASH_TRANSPARENT_AMOUNTS_HASH_PERSONALIZATION: &[u8; 16] = b"ZTxTrAmountsHash"; @@ -35,7 +38,7 @@ fn hasher(personal: &[u8; 16]) -> State { } /// Implements [ZIP 244 section S.2](https://zips.z.cash/zip-0244#s-2-transparent-sig-digest). -fn transparent_sig_digest( +pub fn transparent_sig_digest( tx_data: Option<(&transparent::Bundle, &TransparentDigests)>, input: &SignableInput<'_>, ) -> Blake2bHash { @@ -139,7 +142,7 @@ fn transparent_sig_digest( } #[cfg(zcash_unstable = "zfuture")] -fn tze_input_sigdigests( +pub fn tze_input_sigdigests( bundle: &tze::Bundle, input: &SignableInput<'_>, txid_digests: &TzeDigests, @@ -171,8 +174,9 @@ fn tze_input_sigdigests( pub fn v5_signature_hash< TA: TransparentAuthorizingContext, A: Authorization, + IA: IssueAuth, >( - tx: &TransactionData, + tx: &TransactionData, signable_input: &SignableInput<'_>, txid_parts: &TxDigests, ) -> Blake2bHash { @@ -204,42 +208,3 @@ pub fn v5_signature_hash< .as_ref(), ) } - -pub fn v6_signature_hash< - TA: TransparentAuthorizingContext, - A: Authorization, ->( - tx: &TransactionData, - signable_input: &SignableInput<'_>, - txid_parts: &TxDigests, -) -> Blake2bHash { - // The caller must provide the transparent digests if and only if the transaction has a - // transparent component. - assert_eq!( - tx.transparent_bundle.is_some(), - txid_parts.transparent_digests.is_some() - ); - - // TODO add ZSA support - - to_hash( - tx.version, - tx.consensus_branch_id, - txid_parts.header_digest, - transparent_sig_digest( - tx.transparent_bundle - .as_ref() - .zip(txid_parts.transparent_digests.as_ref()), - signable_input, - ), - txid_parts.sapling_digest, - txid_parts.orchard_digest, - txid_parts.issue_digest, - #[cfg(zcash_unstable = "zfuture")] - tx.tze_bundle - .as_ref() - .zip(txid_parts.tze_digests.as_ref()) - .map(|(bundle, tze_digests)| tze_input_sigdigests(bundle, signable_input, tze_digests)) - .as_ref(), - ) -} diff --git a/zcash_primitives/src/transaction/sighash_v6.rs b/zcash_primitives/src/transaction/sighash_v6.rs new file mode 100644 index 0000000000..df2ec7ba53 --- /dev/null +++ b/zcash_primitives/src/transaction/sighash_v6.rs @@ -0,0 +1,53 @@ +use blake2b_simd::Hash as Blake2bHash; +use orchard::issuance::IssueAuth; + +use crate::transaction::{ + Authorization, + sighash::{ + SignableInput, TransparentAuthorizingContext + , + }, + TransactionData, TxDigests, txid::to_hash, +}; +use crate::transaction::sighash_v5::transparent_sig_digest; +#[cfg(feature = "zfuture")] use crate::transaction::sighash_v5::tze_input_sigdigests; + +pub fn v6_signature_hash< + TA: TransparentAuthorizingContext, + A: Authorization, + IA: IssueAuth, +>( + tx: &TransactionData, + signable_input: &SignableInput<'_>, + txid_parts: &TxDigests, +) -> Blake2bHash { + // The caller must provide the transparent digests if and only if the transaction has a + // transparent component. + assert_eq!( + tx.transparent_bundle.is_some(), + txid_parts.transparent_digests.is_some() + ); + + // TODO add ZSA support + + to_hash( + tx.version, + tx.consensus_branch_id, + txid_parts.header_digest, + transparent_sig_digest( + tx.transparent_bundle + .as_ref() + .zip(txid_parts.transparent_digests.as_ref()), + signable_input, + ), + txid_parts.sapling_digest, + txid_parts.orchard_digest, + txid_parts.issue_digest, + #[cfg(feature = "zfuture")] + tx.tze_bundle + .as_ref() + .zip(txid_parts.tze_digests.as_ref()) + .map(|(bundle, tze_digests)| tze_input_sigdigests(bundle, signable_input, tze_digests)) + .as_ref(), + ) +} diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 9c8de3be21..be57fbc571 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -1,5 +1,6 @@ use blake2b_simd::Hash as Blake2bHash; use std::ops::Deref; +use orchard::issuance::Signed; use proptest::prelude::*; @@ -60,6 +61,13 @@ fn check_roundtrip(tx: Transaction) -> Result<(), TestCaseError> { tx.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()) ); + if tx.issue_bundle.is_some() { + prop_assert_eq!( + tx.issue_bundle.as_ref(), + txo.issue_bundle.as_ref() + ); + } + Ok(()) } @@ -222,7 +230,7 @@ impl Authorization for TestUnauthorized { fn zip_0244() { fn to_test_txdata( tv: &self::data::zip_0244::TestVector, - ) -> (TransactionData, TxDigests) { + ) -> (TransactionData, TxDigests) { let tx = Transaction::read(&tv.tx[..], BranchId::Nu5).unwrap(); assert_eq!(tx.txid.as_ref(), &tv.txid); diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 8c9d8827ba..c6f785e2b7 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -8,6 +8,9 @@ use ff::PrimeField; use orchard::issuance::{IssueBundle, Signed}; use orchard::bundle; use orchard::orchard_flavor::OrchardVanilla; +use orchard::bundle; +use orchard::issuance::{IssueAuth, IssueBundle, Signed}; +use orchard::note_encryption::OrchardDomain; use crate::{ consensus::{BlockHeight, BranchId}, @@ -300,7 +303,7 @@ fn hash_tze_txid_data(tze_digests: Option<&TzeDigests>) -> Blake2bH /// This implements the [TxId Digest section of ZIP 244](https://zips.z.cash/zip-0244#txid-digest) pub struct TxIdDigester; -impl TransactionDigest for TxIdDigester { +impl TransactionDigest for TxIdDigester { type HeaderDigest = Blake2bHash; type TransparentDigest = Option>; type SaplingDigest = Option; @@ -336,14 +339,14 @@ impl TransactionDigest for TxIdDigester { sapling_bundle.map(hash_sapling_txid_data) } - fn digest_orchard( + fn digest_orchard( &self, - orchard_bundle: Option<&bundle::Bundle>, + orchard_bundle: Option<&bundle::Bundle>, ) -> Self::OrchardDigest { orchard_bundle.map(|b| b.commitment().0) } - fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { + fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { issue_bundle.map(|b| b.commitment().0) } @@ -449,7 +452,7 @@ pub fn to_txid( /// function. pub struct BlockTxCommitmentDigester; -impl TransactionDigest for BlockTxCommitmentDigester { +impl TransactionDigest for BlockTxCommitmentDigester { /// We use the header digest to pass the transaction ID into /// where it needs to be used for personalization string construction. type HeaderDigest = BranchId; @@ -511,9 +514,9 @@ impl TransactionDigest for BlockTxCommitmentDigester { h.finalize() } - fn digest_orchard( + fn digest_orchard( &self, - orchard_bundle: Option<&bundle::Bundle>, + orchard_bundle: Option<&bundle::Bundle>, ) -> Self::OrchardDigest { orchard_bundle.map_or_else(bundle::commitments::hash_bundle_auth_empty, |b| { b.authorizing_commitment().0 @@ -547,7 +550,11 @@ impl TransactionDigest for BlockTxCommitmentDigester { issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest { - let digests = [transparent_digest, sapling_digest, orchard_digest]; + let digests = [ + transparent_digest, + sapling_digest, + orchard_digest, + ]; let mut personal = [0; 16]; personal[..12].copy_from_slice(ZCASH_AUTH_PERSONALIZATION_PREFIX); From 3a18a4d3a832f964b19aad627d179ab2ea8adb6e Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 15 Apr 2024 23:22:05 +0200 Subject: [PATCH 24/85] Fix fmt --- zcash_primitives/src/transaction/builder.rs | 86 +++++++++++-------- .../src/transaction/components.rs | 2 - .../src/transaction/components/orchard.rs | 66 ++++++-------- .../components/transparent/builder.rs | 5 +- .../src/transaction/components/tze/builder.rs | 4 +- zcash_primitives/src/transaction/mod.rs | 16 ++-- .../src/transaction/sighash_v6.rs | 16 ++-- zcash_primitives/src/transaction/tests.rs | 12 +-- zcash_primitives/src/transaction/txid.rs | 15 ++-- 9 files changed, 115 insertions(+), 107 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 6cd4a36823..a6708edbc8 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1,11 +1,11 @@ //! Structs for building transactions. +use orchard::builder::{InProgress, Unproven}; +use orchard::{issuance, Address}; use std::cmp::Ordering; use std::error; use std::fmt; use std::sync::mpsc::Sender; -use orchard::{Address, issuance}; -use orchard::builder::{InProgress, Unproven}; use rand::{CryptoRng, RngCore}; @@ -54,9 +54,9 @@ use crate::{ use crate::transaction::components::amount::NonNegativeAmount; use crate::transaction::components::sapling::zip212_enforcement; -use orchard::note::AssetBase; use orchard::issuance::{IssueBundle, IssueInfo}; use orchard::keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}; +use orchard::note::AssetBase; use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. @@ -377,9 +377,9 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { orchard_anchor: Option, rng: R, ) -> Builder<'a, P, R> { - let is_orchard_zsa_enabled = params.is_nu_active(NetworkUpgrade::V6, target_height); - let is_orchard_enabled = params.is_nu_active(NetworkUpgrade::Nu5, target_height) || is_orchard_zsa_enabled; + let is_orchard_enabled = + params.is_nu_active(NetworkUpgrade::Nu5, target_height) || is_orchard_zsa_enabled; let orchard_builder = if is_orchard_enabled { orchard_anchor.map(|anchor| { @@ -458,19 +458,28 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { ) -> Result<(), Error> { if self.issuance_builder.is_none() { self.issuance_builder = Some( - IssueBundle::new(IssuanceValidatingKey::from(&ik), asset_desc, Some(IssueInfo { recipient, value }), OsRng) - .map_err(Error::IssuanceBuild)?.0 + IssueBundle::new( + IssuanceValidatingKey::from(&ik), + asset_desc, + Some(IssueInfo { recipient, value }), + OsRng, + ) + .map_err(Error::IssuanceBuild)? + .0, ); self.issuance_key = Some(ik); } else { // TODO Here we ignore provided 'ik', probably might want to check if it corresponds to the one we already have - self.issuance_builder.as_mut().unwrap().add_recipient(asset_desc, recipient, value, OsRng).map_err(Error::IssuanceBuild)?; + self.issuance_builder + .as_mut() + .unwrap() + .add_recipient(asset_desc, recipient, value, OsRng) + .map_err(Error::IssuanceBuild)?; }; Ok(()) } - pub fn add_burn( &mut self, value: u64, @@ -852,15 +861,22 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { None => (None, SaplingMetadata::empty()), }; - let (unproven_orchard_bundle, unproven_orchard_zsa_bundle) = if let Some(builder) = self.orchard_builder { - if version.has_zsa() { - (None, Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?.into())) + let (unproven_orchard_bundle, unproven_orchard_zsa_bundle) = + if let Some(builder) = self.orchard_builder { + if version.has_zsa() { + ( + None, + Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?.into()), + ) + } else { + ( + Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?.into()), + None, + ) + } } else { - (Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?.into()), None) - } - } else { - (None, None) - }; + (None, None) + }; let unauthorized_issue_bundle = self.issuance_builder; @@ -925,18 +941,20 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { let orchard_bundle = unauthed_tx .orchard_bundle .map(|b| { - let vanilla: orchard::Bundle, _>, _, _> = b.into(); - vanilla.create_proof( - &orchard::circuit::ProvingKey::build::(), - &mut rng, - ) - .and_then(|b| { - b.apply_signatures( + let vanilla: orchard::Bundle, _>, _, _> = + b.into(); + vanilla + .create_proof( + &orchard::circuit::ProvingKey::build::(), &mut rng, - *shielded_sig_commitment.as_ref(), - &self.orchard_saks, ) - }) + .and_then(|b| { + b.apply_signatures( + &mut rng, + *shielded_sig_commitment.as_ref(), + &self.orchard_saks, + ) + }) }) .transpose() .map_err(Error::OrchardBuild)?; @@ -949,13 +967,13 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { &orchard::circuit::ProvingKey::build::(), &mut rng, ) - .and_then(|b| { - b.apply_signatures( - &mut rng, - *shielded_sig_commitment.as_ref(), - &self.orchard_saks, - ) - }) + .and_then(|b| { + b.apply_signatures( + &mut rng, + *shielded_sig_commitment.as_ref(), + &self.orchard_saks, + ) + }) }) .transpose() .map_err(Error::OrchardBuild)?; diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index 4b6983b92b..f239b0ba01 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -18,8 +18,6 @@ pub mod sprout; pub mod transparent; #[cfg(zcash_unstable = "zfuture")] pub mod tze; -pub mod note; -pub mod issuance; pub use self::{ amount::Amount, diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 8364fdea6f..f14e34a999 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -2,8 +2,12 @@ use std::convert::TryFrom; use std::io::{self, Read, Write}; +use crate::transaction::components::issuance::read_asset; use byteorder::{ReadBytesExt, WriteBytesExt}; use nonempty::NonEmpty; +use orchard::note::AssetBase; +use orchard::note_encryption::OrchardDomain; +use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use orchard::{ bundle::{Authorization, Authorized, Flags}, note::{ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, @@ -11,11 +15,7 @@ use orchard::{ value::ValueCommitment, Action, Anchor, }; -use orchard::note::AssetBase; -use orchard::note_encryption::OrchardDomain; -use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use zcash_encoding::{Array, CompactSize, Vector}; -use crate::transaction::components::issuance::read_asset; use super::Amount; use crate::transaction::Transaction; @@ -86,13 +86,12 @@ pub fn read_v5_bundle( } } - /// Reads an [`orchard::Bundle`] from a v5 transaction format. pub fn read_v6_bundle( mut reader: R, ) -> io::Result>> { #[allow(clippy::redundant_closure)] - let actions_without_auth = Vector::read(&mut reader, |r| read_zsa_action_without_auth(r))?; + let actions_without_auth = Vector::read(&mut reader, |r| read_zsa_action_without_auth(r))?; if actions_without_auth.is_empty() { Ok(None) } else { @@ -106,29 +105,23 @@ pub fn read_v6_bundle( .map(|act| act.try_map(|_| read_signature::<_, redpallas::SpendAuth>(&mut reader))) .collect::, _>>()?, ) - .expect("A nonzero number of actions was read from the transaction data."); + .expect("A nonzero number of actions was read from the transaction data."); let burn = Vector::read(&mut reader, |r| read_burn(r))?; let binding_signature = read_signature::<_, redpallas::Binding>(&mut reader)?; - let authorization = Authorized::from_parts( - orchard::Proof::new(proof_bytes), - binding_signature, - ); + let authorization = + Authorized::from_parts(orchard::Proof::new(proof_bytes), binding_signature); - Ok( - Some( - orchard::Bundle::from_parts( - actions, - flags, - value_balance, - burn, - anchor, - authorization, - ) - ) - ) + Ok(Some(orchard::Bundle::from_parts( + actions, + flags, + value_balance, + burn, + anchor, + authorization, + ))) } } @@ -191,10 +184,11 @@ pub fn read_cmx(mut reader: R) -> io::Result { pub fn read_note_ciphertext( mut reader: R, ) -> io::Result> { - let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from([0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref()), + enc_ciphertext: ::NoteCiphertextBytes::from( + [0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref(), + ), out_ciphertext: [0u8; 80], }; @@ -208,10 +202,11 @@ pub fn read_note_ciphertext( pub fn read_zsa_note_ciphertext( mut reader: R, ) -> io::Result> { - let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from([0u8; OrchardZSA::ENC_CIPHERTEXT_SIZE].as_ref()), + enc_ciphertext: ::NoteCiphertextBytes::from( + [0u8; OrchardZSA::ENC_CIPHERTEXT_SIZE].as_ref(), + ), out_ciphertext: [0u8; 80], }; @@ -222,9 +217,7 @@ pub fn read_zsa_note_ciphertext( Ok(tnc) } -pub fn read_action_without_auth( - mut reader: R, -) -> io::Result> { +pub fn read_action_without_auth(mut reader: R) -> io::Result> { let cv_net = read_value_commitment(&mut reader)?; let nf_old = read_nullifier(&mut reader)?; let rk = read_verification_key(&mut reader)?; @@ -241,9 +234,7 @@ pub fn read_action_without_auth( )) } -pub fn read_zsa_action_without_auth( - mut reader: R, -) -> io::Result> { +pub fn read_zsa_action_without_auth(mut reader: R) -> io::Result> { let cv_net = read_value_commitment(&mut reader)?; let nf_old = read_nullifier(&mut reader)?; let rk = read_verification_key(&mut reader)?; @@ -326,7 +317,6 @@ pub fn write_v6_bundle( bundle: Option<&orchard::Bundle>, mut writer: W, ) -> io::Result<()> { - // TODO deduplicate if let Some(bundle) = &bundle { Vector::write_nonempty(&mut writer, bundle.actions(), |w, a| { @@ -407,11 +397,9 @@ pub fn write_action_without_auth( pub mod testing { use proptest::prelude::*; - use orchard::{ - bundle::{ - testing::{self as t_orch}, - Authorized, Bundle, - }, + use orchard::bundle::{ + testing::{self as t_orch}, + Authorized, Bundle, }; use crate::transaction::components::Amount; use crate::transaction::components::amount::testing::arb_amount; diff --git a/zcash_primitives/src/transaction/components/transparent/builder.rs b/zcash_primitives/src/transaction/components/transparent/builder.rs index c07ce84030..165afe83c9 100644 --- a/zcash_primitives/src/transaction/components/transparent/builder.rs +++ b/zcash_primitives/src/transaction/components/transparent/builder.rs @@ -241,7 +241,10 @@ impl TransparentAuthorizingContext for Unauthorized { impl Bundle { pub fn apply_signatures( self, - #[cfg(feature = "transparent-inputs")] mtx: &TransactionData, + #[cfg(feature = "transparent-inputs")] mtx: &TransactionData< + tx::Unauthorized, + orchard::issuance::Unauthorized, + >, #[cfg(feature = "transparent-inputs")] txid_parts_cache: &TxDigests, ) -> Bundle { #[cfg(feature = "transparent-inputs")] diff --git a/zcash_primitives/src/transaction/components/tze/builder.rs b/zcash_primitives/src/transaction/components/tze/builder.rs index 64284b5889..2f77b6ecce 100644 --- a/zcash_primitives/src/transaction/components/tze/builder.rs +++ b/zcash_primitives/src/transaction/components/tze/builder.rs @@ -158,7 +158,9 @@ impl Bundle { pub fn into_authorized( self, unauthed_tx: &tx::TransactionData, - signers: Vec>>, + signers: Vec< + TzeSigner<'_, tx::TransactionData>, + >, ) -> Result, Error> { // Create TZE input witnesses let payloads = signers diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 02706a6e82..fee3670c6b 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -15,14 +15,14 @@ mod tests; use blake2b_simd::Hash as Blake2bHash; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use memuse::DynamicUsage; +use orchard::issuance::{IssueAuth, IssueBundle, Signed}; +use orchard::note_encryption::OrchardDomain; +use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use std::convert::TryFrom; use std::fmt; use std::fmt::Debug; use std::io::{self, Read, Write}; use std::ops::Deref; -use orchard::issuance::{IssueAuth, IssueBundle, Signed}; -use orchard::note_encryption::OrchardDomain; -use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use zcash_encoding::{Array, CompactSize, Vector}; use orchard::orchard_flavor::OrchardVanilla; @@ -32,6 +32,10 @@ use crate::{ }; use crate::{consensus::{BlockHeight, BranchId}, sapling::redjubjub}; use crate::transaction::components::issuance; +use crate::{ + consensus::{BlockHeight, BranchId}, + sapling::redjubjub, +}; use self::{ components::{ @@ -244,7 +248,9 @@ impl TxVersion { /// Returns `true` if this transaction version supports the Orchard protocol. pub fn has_orchard(&self) -> bool { match self { - TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling | TxVersion::Zsa => false, + TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling | TxVersion::Zsa => { + false + } TxVersion::Zip225 => true, #[cfg(feature = "zfuture")] TxVersion::ZFuture => true, @@ -848,7 +854,7 @@ impl Transaction { let issue_bundle = issuance::read_v6_bundle(&mut reader)?; #[cfg(feature = "zfuture")] - let tze_bundle = if version.has_tze() { + let tze_bundle = if version.has_tze() { Self::read_tze(&mut reader)? } else { None diff --git a/zcash_primitives/src/transaction/sighash_v6.rs b/zcash_primitives/src/transaction/sighash_v6.rs index df2ec7ba53..f87d0f825d 100644 --- a/zcash_primitives/src/transaction/sighash_v6.rs +++ b/zcash_primitives/src/transaction/sighash_v6.rs @@ -1,16 +1,14 @@ use blake2b_simd::Hash as Blake2bHash; use orchard::issuance::IssueAuth; +use crate::transaction::sighash_v5::transparent_sig_digest; +#[cfg(feature = "zfuture")] +use crate::transaction::sighash_v5::tze_input_sigdigests; use crate::transaction::{ - Authorization, - sighash::{ - SignableInput, TransparentAuthorizingContext - , - }, - TransactionData, TxDigests, txid::to_hash, + sighash::{SignableInput, TransparentAuthorizingContext}, + txid::to_hash, + Authorization, TransactionData, TxDigests, }; -use crate::transaction::sighash_v5::transparent_sig_digest; -#[cfg(feature = "zfuture")] use crate::transaction::sighash_v5::tze_input_sigdigests; pub fn v6_signature_hash< TA: TransparentAuthorizingContext, @@ -44,7 +42,7 @@ pub fn v6_signature_hash< txid_parts.orchard_digest, txid_parts.issue_digest, #[cfg(feature = "zfuture")] - tx.tze_bundle + tx.tze_bundle .as_ref() .zip(txid_parts.tze_digests.as_ref()) .map(|(bundle, tze_digests)| tze_input_sigdigests(bundle, signable_input, tze_digests)) diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index be57fbc571..c53cb56485 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -1,6 +1,6 @@ use blake2b_simd::Hash as Blake2bHash; -use std::ops::Deref; use orchard::issuance::Signed; +use std::ops::Deref; use proptest::prelude::*; @@ -62,10 +62,7 @@ fn check_roundtrip(tx: Transaction) -> Result<(), TestCaseError> { txo.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()) ); if tx.issue_bundle.is_some() { - prop_assert_eq!( - tx.issue_bundle.as_ref(), - txo.issue_bundle.as_ref() - ); + prop_assert_eq!(tx.issue_bundle.as_ref(), txo.issue_bundle.as_ref()); } Ok(()) @@ -230,7 +227,10 @@ impl Authorization for TestUnauthorized { fn zip_0244() { fn to_test_txdata( tv: &self::data::zip_0244::TestVector, - ) -> (TransactionData, TxDigests) { + ) -> ( + TransactionData, + TxDigests, + ) { let tx = Transaction::read(&tv.tx[..], BranchId::Nu5).unwrap(); assert_eq!(tx.txid.as_ref(), &tv.txid); diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index c6f785e2b7..9ee8404736 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -414,7 +414,7 @@ pub(crate) fn to_hash( .unwrap_or_else(bundle::commitments::hash_issue_bundle_txid_empty) .as_bytes(), ) - .unwrap(); + .unwrap(); } #[cfg(zcash_unstable = "zfuture")] @@ -524,10 +524,9 @@ impl TransactionDigest for BlockTxCommitmentDigester { } fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { - issue_bundle.map_or_else( - bundle::commitments::hash_issue_bundle_auth_empty, - |b| b.authorizing_commitment().0, - ) + issue_bundle.map_or_else(bundle::commitments::hash_issue_bundle_auth_empty, |b| { + b.authorizing_commitment().0 + }) } #[cfg(zcash_unstable = "zfuture")] @@ -550,11 +549,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest { - let digests = [ - transparent_digest, - sapling_digest, - orchard_digest, - ]; + let digests = [transparent_digest, sapling_digest, orchard_digest]; let mut personal = [0; 16]; personal[..12].copy_from_slice(ZCASH_AUTH_PERSONALIZATION_PREFIX); From 35f02fb9baa933f70a288ed604e33deb065d0883 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 15 Apr 2024 23:23:25 +0200 Subject: [PATCH 25/85] Fix clippy --- zcash_primitives/src/transaction/txid.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 9ee8404736..2b1f30735b 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -376,6 +376,7 @@ impl TransactionDigest for TxIdDigester } } +#[allow(clippy::too_many_arguments)] pub(crate) fn to_hash( _txversion: TxVersion, consensus_branch_id: BranchId, From 2ab8e166fa33f0ea188d8d83aac5b659956b1fc3 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 15 Apr 2024 23:36:19 +0200 Subject: [PATCH 26/85] Fix transparent-inputs --- .../src/wallet/init/migrations/add_transaction_views.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zcash_client_sqlite/src/wallet/init/migrations/add_transaction_views.rs b/zcash_client_sqlite/src/wallet/init/migrations/add_transaction_views.rs index a84f99a05b..d843e123cc 100644 --- a/zcash_client_sqlite/src/wallet/init/migrations/add_transaction_views.rs +++ b/zcash_client_sqlite/src/wallet/init/migrations/add_transaction_views.rs @@ -433,6 +433,8 @@ mod tests { None, None, None, + None, + None, ) .freeze() .unwrap(); From c841df13da80fefbd03d3ea9630b6f6241463ffa Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 22 Apr 2024 11:23:27 +0200 Subject: [PATCH 27/85] Remove unproven enum --- zcash_primitives/src/transaction/builder.rs | 97 +++++++++++-------- .../src/transaction/components.rs | 2 + .../src/transaction/components/note.rs | 48 --------- .../src/transaction/components/orchard.rs | 1 - zcash_primitives/src/transaction/mod.rs | 38 +++++--- .../src/transaction/sighash_v6.rs | 36 +------ zcash_primitives/src/transaction/tests.rs | 1 + zcash_primitives/src/transaction/txid.rs | 26 ++++- 8 files changed, 104 insertions(+), 145 deletions(-) delete mode 100644 zcash_primitives/src/transaction/components/note.rs diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index a6708edbc8..399d302c30 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1,6 +1,5 @@ //! Structs for building transactions. -use orchard::builder::{InProgress, Unproven}; use orchard::{issuance, Address}; use std::cmp::Ordering; use std::error; @@ -54,6 +53,7 @@ use crate::{ use crate::transaction::components::amount::NonNegativeAmount; use crate::transaction::components::sapling::zip212_enforcement; +use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; use orchard::issuance::{IssueBundle, IssueInfo}; use orchard::keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}; use orchard::note::AssetBase; @@ -98,8 +98,10 @@ pub enum Error { SaplingBuild(sapling::builder::Error), /// An error occurred in constructing the Orchard parts of a transaction. OrchardBuild(orchard::builder::BuildError), - /// An error occurred in constructing the Orchard parts of a transaction. - IssuanceBuild(orchard::issuance::Error), + /// An error occurred in constructing the Issuance bundle. + IssuanceBundle(issuance::Error), + /// An error occurred in constructing the Issuance builder. + IssuanceBuilder(&'static str), /// An error occurred in adding an Orchard Spend to a transaction. OrchardSpend(orchard::builder::SpendError), /// An error occurred in adding an Orchard Output to a transaction. @@ -133,7 +135,8 @@ impl fmt::Display for Error { Error::TransparentBuild(err) => err.fmt(f), Error::SaplingBuild(err) => err.fmt(f), Error::OrchardBuild(err) => write!(f, "{:?}", err), - Error::IssuanceBuild(err) => write!(f, "{:?}", err), + Error::IssuanceBundle(err) => write!(f, "{:?}", err), + Error::IssuanceBuilder(err) => write!(f, "{:?}", err), Error::OrchardSpend(err) => write!(f, "Could not add Orchard spend: {}", err), Error::OrchardRecipient(err) => write!(f, "Could not add Orchard recipient: {}", err), Error::SaplingBuilderNotAvailable => write!( @@ -449,33 +452,47 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { /// Adds an Issuance action to the transaction. - pub fn add_issuance( + pub fn init_issue_bundle( &mut self, ik: IssuanceAuthorizingKey, asset_desc: String, recipient: Address, value: orchard::value::NoteValue, + ) -> Result<(), Error> { + if self.issuance_builder.is_some() { + return Err(IssuanceBuilder("Issuance bundle already initialized")); + } + + self.issuance_builder = Some( + IssueBundle::new( + IssuanceValidatingKey::from(&ik), + asset_desc, + Some(IssueInfo { recipient, value }), + OsRng, + ) + .map_err(IssuanceBundle)? + .0, + ); + self.issuance_key = Some(ik); + + Ok(()) + } + + /// Adds an Issuance action to the transaction. + pub fn add_issuance( + &mut self, + asset_desc: String, + recipient: Address, + value: orchard::value::NoteValue, ) -> Result<(), Error> { if self.issuance_builder.is_none() { - self.issuance_builder = Some( - IssueBundle::new( - IssuanceValidatingKey::from(&ik), - asset_desc, - Some(IssueInfo { recipient, value }), - OsRng, - ) - .map_err(Error::IssuanceBuild)? - .0, - ); - self.issuance_key = Some(ik); - } else { - // TODO Here we ignore provided 'ik', probably might want to check if it corresponds to the one we already have - self.issuance_builder - .as_mut() - .unwrap() - .add_recipient(asset_desc, recipient, value, OsRng) - .map_err(Error::IssuanceBuild)?; - }; + return Err(IssuanceBuilder("Issuance bundle not initialized")); + } + self.issuance_builder + .as_mut() + .unwrap() + .add_recipient(asset_desc, recipient, value, OsRng) + .map_err(IssuanceBundle)?; Ok(()) } @@ -489,7 +506,7 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { .as_mut() .ok_or(Error::OrchardAnchorNotAvailable)? .add_burn(asset, orchard::value::NoteValue::from_raw(value)) - .unwrap(); // TODO .map_err(Error::OrchardBuild)?; or new error type + .map_err(Error::OrchardBuild)?; Ok(()) } @@ -813,8 +830,6 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { // Consistency checks // - // TODO we need to check balance per AssetBase including burns, but only take fees into account for native asset - // After fees are accounted for, the value balance of the transaction must be zero. let balance_after_fees = (self.value_balance()? - fee.into()).ok_or(BalanceError::Underflow)?; @@ -866,11 +881,11 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { if version.has_zsa() { ( None, - Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?.into()), + Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?), ) } else { ( - Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?.into()), + Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?), None, ) } @@ -941,20 +956,17 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { let orchard_bundle = unauthed_tx .orchard_bundle .map(|b| { - let vanilla: orchard::Bundle, _>, _, _> = - b.into(); - vanilla - .create_proof( - &orchard::circuit::ProvingKey::build::(), + b.create_proof( + &orchard::circuit::ProvingKey::build::(), + &mut rng, + ) + .and_then(|b| { + b.apply_signatures( &mut rng, + *shielded_sig_commitment.as_ref(), + &self.orchard_saks, ) - .and_then(|b| { - b.apply_signatures( - &mut rng, - *shielded_sig_commitment.as_ref(), - &self.orchard_saks, - ) - }) + }) }) .transpose() .map_err(Error::OrchardBuild)?; @@ -962,8 +974,7 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { let orchard_zsa_bundle = unauthed_tx .orchard_zsa_bundle .map(|b| { - let zsa: orchard::Bundle, _>, _, _> = b.into(); - zsa.create_proof( + b.create_proof( &orchard::circuit::ProvingKey::build::(), &mut rng, ) diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index f239b0ba01..16243086e7 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -12,6 +12,8 @@ pub mod amount { }; } } +pub mod amount; +pub mod issuance; pub mod orchard; pub mod sapling; pub mod sprout; diff --git a/zcash_primitives/src/transaction/components/note.rs b/zcash_primitives/src/transaction/components/note.rs deleted file mode 100644 index 9c06097272..0000000000 --- a/zcash_primitives/src/transaction/components/note.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::transaction::components::orchard::read_nullifier; -use std::io; -use std::io::{Read, Write}; -use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; -use orchard::note::{AssetBase, Nullifier, RandomSeed}; -use orchard::{Address, Note}; -use orchard::note::{Nullifier, RandomSeed}; -use orchard::value::NoteValue; -use orchard::{Address, Note}; -use std::io; -use std::io::{Read, Write}; -use crate::transaction::components::orchard::read_nullifier; - -/// This will be a part of the 'issuance' component in ZSA release -fn read_recipient(mut reader: R) -> io::Result
{ - let mut bytes = [0u8; 43]; - reader.read_exact(&mut bytes)?; - Ok(Option::from(Address::from_raw_address_bytes(&bytes)).unwrap()) -} - -fn read_rseed(mut reader: R, nullifier: &Nullifier) -> io::Result { - let mut bytes = [0u8; 32]; - reader.read_exact(&mut bytes)?; - Ok(Option::from(RandomSeed::from_bytes(bytes, nullifier)).unwrap()) -} - -pub fn read_note(mut reader: R) -> io::Result { - let recipient = read_recipient(&mut reader)?; - let value = reader.read_u64::()?; - let rho = read_nullifier(&mut reader)?; - let rseed = read_rseed(&mut reader, &rho)?; - Ok(Option::from(Note::from_parts( - recipient, - NoteValue::from_raw(value), - AssetBase::native(), // FIXME: pass burns here for ZSA - rho, - rseed, - )) - .unwrap()) -} - -pub fn write_note(note: &Note, writer: &mut W) -> io::Result<()> { - writer.write_all(¬e.recipient().to_raw_address_bytes())?; - writer.write_u64::(note.value().inner())?; - writer.write_all(¬e.rho().to_bytes())?; - writer.write_all(note.rseed().as_bytes())?; - Ok(()) -} diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index f14e34a999..e34c805e19 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -317,7 +317,6 @@ pub fn write_v6_bundle( bundle: Option<&orchard::Bundle>, mut writer: W, ) -> io::Result<()> { - // TODO deduplicate if let Some(bundle) = &bundle { Vector::write_nonempty(&mut writer, bundle.actions(), |w, a| { write_action_without_auth(w, a) diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index fee3670c6b..5161bde98d 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -15,8 +15,8 @@ mod tests; use blake2b_simd::Hash as Blake2bHash; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use memuse::DynamicUsage; +use orchard::builder::Unproven; use orchard::issuance::{IssueAuth, IssueBundle, Signed}; -use orchard::note_encryption::OrchardDomain; use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use std::convert::TryFrom; use std::fmt; @@ -288,6 +288,7 @@ pub trait Authorization { type TransparentAuth: transparent::Authorization; type SaplingAuth: sapling::bundle::Authorization; type OrchardAuth: orchard::bundle::Authorization; + type OrchardZsaAuth: orchard::bundle::Authorization; #[cfg(zcash_unstable = "zfuture")] type TzeAuth: tze::Authorization; @@ -301,6 +302,7 @@ impl Authorization for Authorized { type TransparentAuth = transparent::Authorized; type SaplingAuth = sapling::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; + type OrchardZsaAuth = orchard::bundle::Authorized; #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::Authorized; @@ -315,10 +317,10 @@ pub struct Unauthorized; impl Authorization for Unauthorized { type TransparentAuth = transparent::builder::Unauthorized; type SaplingAuth = sapling::builder::Unauthorized; - type OrchardAuth = orchard::builder::InProgress< - orchard::bundle_enum_adapter::UnprovenEnum, - orchard::builder::Unauthorized, - >; + type OrchardAuth = + orchard::builder::InProgress, orchard::builder::Unauthorized>; + type OrchardZsaAuth = + orchard::builder::InProgress, orchard::builder::Unauthorized>; #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::builder::Unauthorized; @@ -356,7 +358,7 @@ pub struct TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - orchard_zsa_bundle: Option>, + orchard_zsa_bundle: Option>, issue_bundle: Option>, #[cfg(feature = "zfuture")] tze_bundle: Option>, @@ -374,7 +376,7 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - orchard_zsa_bundle: Option>, + orchard_zsa_bundle: Option>, issue_bundle: Option>, ) -> Self { TransactionData { @@ -406,7 +408,7 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - orchard_zsa_bundle: Option>, + orchard_zsa_bundle: Option>, issue_bundle: Option>, tze_bundle: Option>, ) -> Self { @@ -463,7 +465,7 @@ impl TransactionData { pub fn orchard_zsa_bundle( &self, - ) -> Option<&orchard::Bundle> { + ) -> Option<&orchard::Bundle> { self.orchard_zsa_bundle.as_ref() } @@ -517,7 +519,7 @@ impl TransactionData { digester.digest_transparent(self.transparent_bundle.as_ref()), digester.digest_sapling(self.sapling_bundle.as_ref()), if self.version.has_zsa() { - digester.digest_orchard(self.orchard_zsa_bundle.as_ref()) + digester.digest_orchard_zsa(self.orchard_zsa_bundle.as_ref()) } else { digester.digest_orchard(self.orchard_bundle.as_ref()) }, @@ -545,9 +547,9 @@ impl TransactionData { orchard::bundle::Bundle, >, f_zsa_orchard: impl FnOnce( - Option>, + Option>, ) -> Option< - orchard::bundle::Bundle, + orchard::bundle::Bundle, >, #[cfg(zcash_unstable = "zfuture")] f_tze: impl FnOnce( Option>, @@ -574,6 +576,7 @@ impl TransactionData { f_transparent: impl transparent::MapAuth, mut f_sapling: impl sapling_serialization::MapAuth, mut f_orchard: impl orchard_serialization::MapAuth, + mut f_orchard_zsa: impl orchard_serialization::MapAuth, #[cfg(zcash_unstable = "zfuture")] f_tze: impl tze::MapAuth, ) -> TransactionData { TransactionData { @@ -603,7 +606,7 @@ impl TransactionData { }), orchard_zsa_bundle: self.orchard_zsa_bundle.map(|b| { b.map_authorization( - &mut f_orchard, + &mut f_orchard_zsa, |f, _, s| f.map_spend_auth(s), |f, a| f.map_authorization(a), ) @@ -1086,9 +1089,14 @@ pub trait TransactionDigest { sapling_bundle: Option<&sapling::Bundle>, ) -> Self::SaplingDigest; - fn digest_orchard( + fn digest_orchard( + &self, + orchard_bundle: Option<&orchard::Bundle>, + ) -> Self::OrchardDigest; + + fn digest_orchard_zsa( &self, - orchard_bundle: Option<&orchard::Bundle>, + orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest; diff --git a/zcash_primitives/src/transaction/sighash_v6.rs b/zcash_primitives/src/transaction/sighash_v6.rs index f87d0f825d..6de4696aea 100644 --- a/zcash_primitives/src/transaction/sighash_v6.rs +++ b/zcash_primitives/src/transaction/sighash_v6.rs @@ -1,12 +1,9 @@ use blake2b_simd::Hash as Blake2bHash; use orchard::issuance::IssueAuth; -use crate::transaction::sighash_v5::transparent_sig_digest; -#[cfg(feature = "zfuture")] -use crate::transaction::sighash_v5::tze_input_sigdigests; +use crate::transaction::sighash_v5::v5_signature_hash; use crate::transaction::{ sighash::{SignableInput, TransparentAuthorizingContext}, - txid::to_hash, Authorization, TransactionData, TxDigests, }; @@ -19,33 +16,6 @@ pub fn v6_signature_hash< signable_input: &SignableInput<'_>, txid_parts: &TxDigests, ) -> Blake2bHash { - // The caller must provide the transparent digests if and only if the transaction has a - // transparent component. - assert_eq!( - tx.transparent_bundle.is_some(), - txid_parts.transparent_digests.is_some() - ); - - // TODO add ZSA support - - to_hash( - tx.version, - tx.consensus_branch_id, - txid_parts.header_digest, - transparent_sig_digest( - tx.transparent_bundle - .as_ref() - .zip(txid_parts.transparent_digests.as_ref()), - signable_input, - ), - txid_parts.sapling_digest, - txid_parts.orchard_digest, - txid_parts.issue_digest, - #[cfg(feature = "zfuture")] - tx.tze_bundle - .as_ref() - .zip(txid_parts.tze_digests.as_ref()) - .map(|(bundle, tze_digests)| tze_input_sigdigests(bundle, signable_input, tze_digests)) - .as_ref(), - ) + // Currently to_hash is designed in a way that it supports both v5 and v6 signature hash + v5_signature_hash(tx, signable_input, txid_parts) } diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index c53cb56485..95172931ad 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -218,6 +218,7 @@ impl Authorization for TestUnauthorized { type TransparentAuth = TestTransparentAuth; type SaplingAuth = sapling::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; + type OrchardZsaAuth = orchard::bundle::Authorized; #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::Authorized; diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 2b1f30735b..33ee7dfa5d 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -10,7 +10,7 @@ use orchard::bundle; use orchard::orchard_flavor::OrchardVanilla; use orchard::bundle; use orchard::issuance::{IssueAuth, IssueBundle, Signed}; -use orchard::note_encryption::OrchardDomain; +use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use crate::{ consensus::{BlockHeight, BranchId}, @@ -339,9 +339,16 @@ impl TransactionDigest for TxIdDigester sapling_bundle.map(hash_sapling_txid_data) } - fn digest_orchard( + fn digest_orchard( &self, - orchard_bundle: Option<&bundle::Bundle>, + orchard_bundle: Option<&bundle::Bundle>, + ) -> Self::OrchardDigest { + orchard_bundle.map(|b| b.commitment().0) + } + + fn digest_orchard_zsa( + &self, + orchard_bundle: Option<&bundle::Bundle>, ) -> Self::OrchardDigest { orchard_bundle.map(|b| b.commitment().0) } @@ -515,9 +522,18 @@ impl TransactionDigest for BlockTxCommitmentDigester { h.finalize() } - fn digest_orchard( + fn digest_orchard( + &self, + orchard_bundle: Option<&bundle::Bundle>, + ) -> Self::OrchardDigest { + orchard_bundle.map_or_else(bundle::commitments::hash_bundle_auth_empty, |b| { + b.authorizing_commitment().0 + }) + } + + fn digest_orchard_zsa( &self, - orchard_bundle: Option<&bundle::Bundle>, + orchard_bundle: Option<&bundle::Bundle>, ) -> Self::OrchardDigest { orchard_bundle.map_or_else(bundle::commitments::hash_bundle_auth_empty, |b| { b.authorizing_commitment().0 From fb2b73af5ff23dac1221cfe6b0caa5660e9f7d9c Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 22 Apr 2024 11:36:36 +0200 Subject: [PATCH 28/85] Change methods visibility --- zcash_primitives/src/transaction/components/issuance.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index 709265fe4c..f64a142b83 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -50,7 +50,7 @@ fn read_action(mut reader: R) -> io::Result { Ok(IssueAction::from_parts(asset_descr, notes, finalize)) } -fn read_note(mut reader: R) -> io::Result { +pub fn read_note(mut reader: R) -> io::Result { let recipient = read_recipient(&mut reader)?; let value = reader.read_u64::()?; let asset = read_asset(&mut reader)?; @@ -110,7 +110,7 @@ fn write_action(action: &IssueAction, mut writer: W) -> io::Result<()> Ok(()) } -fn write_note(note: &Note, writer: &mut W) -> io::Result<()> { +pub fn write_note(note: &Note, writer: &mut W) -> io::Result<()> { writer.write_all(¬e.recipient().to_raw_address_bytes())?; writer.write_u64::(note.value().inner())?; writer.write_all(¬e.asset().to_bytes())?; From cdd8afabd437360a3cb04a97483bc2562aa5c7e2 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Sun, 19 May 2024 13:53:05 +0200 Subject: [PATCH 29/85] Fix post-rebase compilation errors --- Cargo.lock | 2 +- Cargo.toml | 2 +- components/zcash_protocol/src/consensus.rs | 25 +++-- .../zcash_protocol/src/local_consensus.rs | 18 ++-- zcash_client_sqlite/src/testing.rs | 2 +- zcash_primitives/src/transaction/builder.rs | 94 +++++++------------ .../src/transaction/components.rs | 1 - .../src/transaction/components/issuance.rs | 27 ++++-- zcash_primitives/src/transaction/mod.rs | 17 ++-- zcash_primitives/src/transaction/sighash.rs | 1 - zcash_primitives/src/transaction/tests.rs | 2 +- zcash_primitives/src/transaction/txid.rs | 3 - 12 files changed, 87 insertions(+), 107 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a90e1ffb07..7f2dd86d07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1581,7 +1581,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0#c99c043d0705a8d12264ca03303163f9850a70b5" +source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0-ak#7bed5a922d94b636a7ab9eef721789219ab4092f" dependencies = [ "aes", "bitvec", diff --git a/Cargo.toml b/Cargo.toml index f2df5c554e..2d7b369c1c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,7 +58,7 @@ sapling = { package = "sapling-crypto", version = "0.1.3" } # - Orchard nonempty = "0.7" -orchard = { version = "0.8.0", default-features = false, git = "https://github.com/QED-it/orchard", branch = "orchardzsa-backward-compatability-0.8.0" } +orchard = { version = "0.8.0", default-features = false, git = "https://github.com/QED-it/orchard", branch = "orchardzsa-backward-compatability-0.8.0-ak" } pasta_curves = "0.5" # - Transparent diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index d5aafdaa72..d49d56f7fa 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -354,7 +354,7 @@ impl Parameters for MainNetwork { NetworkUpgrade::Heartwood => Some(BlockHeight(903_000)), NetworkUpgrade::Canopy => Some(BlockHeight(1_046_400)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_687_104)), - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => Some(BlockHeight(1_687_104)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, @@ -384,7 +384,7 @@ impl Parameters for TestNetwork { NetworkUpgrade::Heartwood => Some(BlockHeight(903_800)), NetworkUpgrade::Canopy => Some(BlockHeight(1_028_500)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_842_420)), - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => Some(BlockHeight(1_842_420)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, @@ -452,7 +452,7 @@ pub enum NetworkUpgrade { /// The [Nu6] network upgrade. /// /// [Nu6]: https://z.cash/upgrade/nu6/ - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] Nu6, /// The ZFUTURE network upgrade. /// @@ -474,7 +474,7 @@ impl fmt::Display for NetworkUpgrade { NetworkUpgrade::Heartwood => write!(f, "Heartwood"), NetworkUpgrade::Canopy => write!(f, "Canopy"), NetworkUpgrade::Nu5 => write!(f, "Nu5"), - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => write!(f, "Nu6"), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => write!(f, "ZFUTURE"), @@ -491,7 +491,7 @@ impl NetworkUpgrade { NetworkUpgrade::Heartwood => BranchId::Heartwood, NetworkUpgrade::Canopy => BranchId::Canopy, NetworkUpgrade::Nu5 => BranchId::Nu5, - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => BranchId::Nu6, #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => BranchId::ZFuture, @@ -510,7 +510,7 @@ const UPGRADES_IN_ORDER: &[NetworkUpgrade] = &[ NetworkUpgrade::Heartwood, NetworkUpgrade::Canopy, NetworkUpgrade::Nu5, - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6, ]; @@ -549,7 +549,7 @@ pub enum BranchId { /// The consensus rules deployed by [`NetworkUpgrade::Nu5`]. Nu5, /// The consensus rules deployed by [`NetworkUpgrade::Nu6`]. - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] Nu6, /// Candidates for future consensus rules; this branch will never /// activate on mainnet. @@ -571,7 +571,7 @@ impl TryFrom for BranchId { 0xf5b9_230b => Ok(BranchId::Heartwood), 0xe9ff_75a6 => Ok(BranchId::Canopy), 0xc2d6_d0b4 => Ok(BranchId::Nu5), - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] 0xc8e7_1055 => Ok(BranchId::Nu6), #[cfg(zcash_unstable = "zfuture")] 0xffff_ffff => Ok(BranchId::ZFuture), @@ -590,7 +590,7 @@ impl From for u32 { BranchId::Heartwood => 0xf5b9_230b, BranchId::Canopy => 0xe9ff_75a6, BranchId::Nu5 => 0xc2d6_d0b4, - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => 0xc8e7_1055, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => 0xffff_ffff, @@ -664,15 +664,14 @@ impl BranchId { let upper = None; (lower, upper) }), - BranchId::V6 => params.activation_height(NetworkUpgrade::V6).map(|lower| { + // #[cfg(zcash_unstable = "nu6")] + BranchId::Nu6 => params.activation_height(NetworkUpgrade::Nu6).map(|lower| { #[cfg(feature = "zfuture")] let upper = params.activation_height(NetworkUpgrade::ZFuture); #[cfg(not(feature = "zfuture"))] let upper = None; (lower, upper) }), - #[cfg(zcash_unstable = "nu6")] - BranchId::Nu6 => None, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => params .activation_height(NetworkUpgrade::ZFuture) @@ -701,7 +700,7 @@ pub mod testing { BranchId::Heartwood, BranchId::Canopy, BranchId::Nu5, - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] BranchId::Nu6, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture, diff --git a/components/zcash_protocol/src/local_consensus.rs b/components/zcash_protocol/src/local_consensus.rs index 5d277cf1be..1e48ddc263 100644 --- a/components/zcash_protocol/src/local_consensus.rs +++ b/components/zcash_protocol/src/local_consensus.rs @@ -37,7 +37,7 @@ pub struct LocalNetwork { pub heartwood: Option, pub canopy: Option, pub nu5: Option, - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] pub nu6: Option, #[cfg(zcash_unstable = "zfuture")] pub z_future: Option, @@ -57,7 +57,7 @@ impl Parameters for LocalNetwork { NetworkUpgrade::Heartwood => self.heartwood, NetworkUpgrade::Canopy => self.canopy, NetworkUpgrade::Nu5 => self.nu5, - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => self.nu6, #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => self.z_future, @@ -81,7 +81,7 @@ mod tests { let expected_heartwood = BlockHeight::from_u32(4); let expected_canopy = BlockHeight::from_u32(5); let expected_nu5 = BlockHeight::from_u32(6); - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -93,7 +93,7 @@ mod tests { heartwood: Some(expected_heartwood), canopy: Some(expected_canopy), nu5: Some(expected_nu5), - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), @@ -105,7 +105,7 @@ mod tests { assert!(regtest.is_nu_active(NetworkUpgrade::Heartwood, expected_heartwood)); assert!(regtest.is_nu_active(NetworkUpgrade::Canopy, expected_canopy)); assert!(regtest.is_nu_active(NetworkUpgrade::Nu5, expected_nu5)); - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] assert!(regtest.is_nu_active(NetworkUpgrade::Nu6, expected_nu6)); #[cfg(zcash_unstable = "zfuture")] assert!(!regtest.is_nu_active(NetworkUpgrade::ZFuture, expected_nu5)); @@ -119,7 +119,7 @@ mod tests { let expected_heartwood = BlockHeight::from_u32(4); let expected_canopy = BlockHeight::from_u32(5); let expected_nu5 = BlockHeight::from_u32(6); - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -131,7 +131,7 @@ mod tests { heartwood: Some(expected_heartwood), canopy: Some(expected_canopy), nu5: Some(expected_nu5), - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), @@ -176,7 +176,7 @@ mod tests { let expected_heartwood = BlockHeight::from_u32(4); let expected_canopy = BlockHeight::from_u32(5); let expected_nu5 = BlockHeight::from_u32(6); - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -188,7 +188,7 @@ mod tests { heartwood: Some(expected_heartwood), canopy: Some(expected_canopy), nu5: Some(expected_nu5), - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), diff --git a/zcash_client_sqlite/src/testing.rs b/zcash_client_sqlite/src/testing.rs index 89bde533bf..0ffcb77a4a 100644 --- a/zcash_client_sqlite/src/testing.rs +++ b/zcash_client_sqlite/src/testing.rs @@ -127,7 +127,7 @@ impl TestBuilder<()> { heartwood: Some(BlockHeight::from_u32(100_000)), canopy: Some(BlockHeight::from_u32(100_000)), nu5: Some(BlockHeight::from_u32(100_000)), - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] nu6: None, #[cfg(zcash_unstable = "zfuture")] z_future: None, diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 399d302c30..d02d5b1b99 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -36,8 +36,6 @@ use crate::transaction::components::transparent::builder::TransparentInputInfo; use orchard::note::AssetBase; #[cfg(not(feature = "transparent-inputs"))] use std::convert::Infallible; -use orchard::note::AssetBase; -use orchard::orchard_flavor::OrchardVanilla; #[cfg(zcash_unstable = "zfuture")] use crate::{ @@ -58,6 +56,7 @@ use orchard::issuance::{IssueBundle, IssueInfo}; use orchard::keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}; use orchard::note::AssetBase; use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; +use rand_core::OsRng; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -360,37 +359,16 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { pub fn new( params: P, target_height: BlockHeight, - orchard_anchor: Option, + build_config: BuildConfig, ) -> Self { - Builder::new_with_rng(params, target_height, orchard_anchor, OsRng) - } -} -impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { - /// Creates a new `Builder` targeted for inclusion in the block with the given height - /// and randomness source, using default values for general transaction fields. - /// - /// # Default values - /// - /// The expiry height will be set to the given height plus the default transaction - /// expiry delta (20 blocks). - pub fn new_with_rng( - params: P, - target_height: BlockHeight, - orchard_anchor: Option, - rng: R, - ) -> Builder<'a, P, R> { - let is_orchard_zsa_enabled = params.is_nu_active(NetworkUpgrade::V6, target_height); - let is_orchard_enabled = - params.is_nu_active(NetworkUpgrade::Nu5, target_height) || is_orchard_zsa_enabled; - - let orchard_builder = if is_orchard_enabled { - orchard_anchor.map(|anchor| { - orchard::builder::Builder::new( - orchard::bundle::Flags::from_parts(true, true, is_orchard_zsa_enabled), - anchor, - ) - }) + let is_orchard_zsa_enabled = params.is_nu_active(NetworkUpgrade::Nu6, target_height); + let is_orchard_enabled = params.is_nu_active(NetworkUpgrade::Nu5, target_height); + + let orchard_builder = if is_orchard_enabled || is_orchard_zsa_enabled { + build_config + .orchard_builder_config() + .map(|(bundle_type, anchor)| orchard::builder::Builder::new(bundle_type, anchor)) } else { None }; @@ -443,6 +421,8 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { transparent_builder: self.transparent_builder, sapling_builder: self.sapling_builder, orchard_builder: self.orchard_builder, + issuance_builder: self.issuance_builder, + issuance_key: self.issuance_key, sapling_asks: self.sapling_asks, orchard_saks: self.orchard_saks, tze_builder: self.tze_builder, @@ -470,8 +450,8 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { Some(IssueInfo { recipient, value }), OsRng, ) - .map_err(IssuanceBundle)? - .0, + .map_err(IssuanceBundle)? + .0, ); self.issuance_key = Some(ik); @@ -504,7 +484,7 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { ) -> Result<(), Error> { self.orchard_builder .as_mut() - .ok_or(Error::OrchardAnchorNotAvailable)? + .ok_or(Error::OrchardBuilderNotAvailable)? .add_burn(asset, orchard::value::NoteValue::from_raw(value)) .map_err(Error::OrchardBuild)?; @@ -517,7 +497,7 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { /// the given note. pub fn add_orchard_zsa_spend( &mut self, - sk: orchard::keys::SpendingKey, + sk: &orchard::keys::SpendingKey, note: orchard::Note, merkle_path: orchard::tree::MerklePath, ) -> Result<(), Error> { @@ -535,8 +515,8 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { ) -> Result<(), Error> { self.orchard_builder .as_mut() - .ok_or(Error::OrchardAnchorNotAvailable)? - .add_recipient( + .ok_or(Error::OrchardBuilderNotAvailable)? + .add_output( ovk, recipient, orchard::value::NoteValue::from_raw(value), @@ -545,7 +525,9 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { ) .map_err(Error::OrchardRecipient) } +} +impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder<'a, P, U> { /// Adds an Orchard note to be spent in this bundle. /// /// Returns an error if the given Merkle path does not have the required anchor for @@ -562,23 +544,20 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { fn add_orchard_spend_impl( &mut self, - sk: orchard::keys::SpendingKey, + sk: &orchard::keys::SpendingKey, note: orchard::Note, merkle_path: orchard::tree::MerklePath, ) -> Result<(), Error> { self.orchard_builder .as_mut() - .ok_or(Error::OrchardAnchorNotAvailable)? - .add_spend(orchard::keys::FullViewingKey::from(&sk), note, merkle_path) + .ok_or(Error::OrchardBuilderNotAvailable)? + .add_spend(orchard::keys::FullViewingKey::from(sk), note, merkle_path) .map_err(Error::OrchardSpend)?; self.orchard_saks .push(orchard::keys::SpendAuthorizingKey::from(sk)); Ok(()) - } else { - Err(Error::OrchardBuilderNotAvailable) - } } /// Adds an Orchard recipient to the transaction. @@ -876,22 +855,21 @@ impl<'a, P: consensus::Parameters, R: RngCore + CryptoRng> Builder<'a, P, R> { None => (None, SaplingMetadata::empty()), }; - let (unproven_orchard_bundle, unproven_orchard_zsa_bundle) = - if let Some(builder) = self.orchard_builder { - if version.has_zsa() { - ( - None, - Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?), - ) - } else { - ( - Some(builder.build(&mut rng).map_err(Error::OrchardBuild)?), - None, - ) - } + let mut unproven_orchard_bundle = None; + let mut unproven_orchard_zsa_bundle = None; + let mut orchard_meta = orchard::builder::BundleMetadata::empty(); + + if let Some(builder) = self.orchard_builder { + if version.has_zsa() { + let (bundle, meta) = builder.build(&mut rng).map_err(Error::OrchardBuild)?.unwrap(); + unproven_orchard_zsa_bundle = Some(bundle); + orchard_meta = meta; } else { - (None, None) - }; + let (bundle, meta) = builder.build(&mut rng).map_err(Error::OrchardBuild)?.unwrap(); + unproven_orchard_bundle = Some(bundle); + orchard_meta = meta; + } + }; let unauthorized_issue_bundle = self.issuance_builder; diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index 16243086e7..697d5cdcfe 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -12,7 +12,6 @@ pub mod amount { }; } } -pub mod amount; pub mod issuance; pub mod orchard; pub mod sapling; diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index f64a142b83..aafb19e199 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -1,10 +1,8 @@ -use crate::transaction::components::orchard::read_nullifier; -use bitvec::macros::internal::funty::Fundamental; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use nonempty::NonEmpty; use orchard::issuance::{IssueAction, IssueBundle, Signed}; use orchard::keys::IssuanceValidatingKey; -use orchard::note::{AssetBase, Nullifier, RandomSeed}; +use orchard::note::{AssetBase, RandomSeed, Rho}; use orchard::value::NoteValue; use orchard::{Address, Note}; /// Functions for parsing & serialization of the issuance bundle components. @@ -43,7 +41,7 @@ fn read_authorization(mut reader: R) -> io::Result { } fn read_action(mut reader: R) -> io::Result { - let finalize = reader.read_u8()?.as_bool(); + let finalize = reader.read_u8()? != 0; let notes = Vector::read(&mut reader, |r| read_note(r))?; let asset_descr_bytes = Vector::read(&mut reader, |r| r.read_u8())?; let asset_descr: String = String::from_utf8(asset_descr_bytes).unwrap(); @@ -54,7 +52,7 @@ pub fn read_note(mut reader: R) -> io::Result { let recipient = read_recipient(&mut reader)?; let value = reader.read_u64::()?; let asset = read_asset(&mut reader)?; - let rho = read_nullifier(&mut reader)?; + let rho = read_rho(&mut reader)?; let rseed = read_rseed(&mut reader, &rho)?; Ok(Option::from(Note::from_parts( recipient, @@ -66,6 +64,20 @@ pub fn read_note(mut reader: R) -> io::Result { .unwrap()) } +fn read_rho(mut reader: R) -> io::Result { + let mut bytes = [0u8; 32]; + reader.read_exact(&mut bytes)?; + let rho_ctopt = Rho::from_bytes(&bytes); + if rho_ctopt.is_none().into() { + Err(io::Error::new( + io::ErrorKind::InvalidInput, + "invalid Pallas point for rho".to_owned(), + )) + } else { + Ok(rho_ctopt.unwrap()) + } +} + fn read_recipient(mut reader: R) -> io::Result
{ let mut bytes = [0u8; 43]; reader.read_exact(&mut bytes)?; @@ -78,7 +90,7 @@ pub fn read_asset(reader: &mut R) -> io::Result { Ok(Option::from(AssetBase::from_bytes(&bytes)).unwrap()) } -fn read_rseed(mut reader: R, nullifier: &Nullifier) -> io::Result { +fn read_rseed(mut reader: R, nullifier: &Rho) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; Ok(Option::from(RandomSeed::from_bytes(bytes, nullifier)).unwrap()) @@ -102,7 +114,8 @@ pub fn write_v6_bundle( } fn write_action(action: &IssueAction, mut writer: W) -> io::Result<()> { - writer.write_u8(action.is_finalized().as_u8())?; + let is_finalized_u8 :u8 = if action.is_finalized() { 1 } else { 0 }; + writer.write_u8(is_finalized_u8)?; Vector::write(&mut writer, action.notes(), |w, note| write_note(note, w))?; Vector::write(&mut writer, action.asset_desc().as_bytes(), |w, b| { w.write_u8(*b) diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 5161bde98d..53796e327c 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -23,19 +23,13 @@ use std::fmt; use std::fmt::Debug; use std::io::{self, Read, Write}; use std::ops::Deref; -use zcash_encoding::{Array, CompactSize, Vector}; -use orchard::orchard_flavor::OrchardVanilla; +use zcash_encoding::{CompactSize, Vector}; use crate::{ consensus::{BlockHeight, BranchId}, sapling::{self, builder as sapling_builder}, }; -use crate::{consensus::{BlockHeight, BranchId}, sapling::redjubjub}; use crate::transaction::components::issuance; -use crate::{ - consensus::{BlockHeight, BranchId}, - sapling::redjubjub, -}; use self::{ components::{ @@ -275,7 +269,7 @@ impl TxVersion { TxVersion::Sapling } BranchId::Nu5 => TxVersion::Zip225, - #[cfg(zcash_unstable = "nu6")] + // #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => TxVersion::Zsa, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => TxVersion::ZFuture, @@ -316,7 +310,8 @@ pub struct Unauthorized; impl Authorization for Unauthorized { type TransparentAuth = transparent::builder::Unauthorized; - type SaplingAuth = sapling::builder::Unauthorized; + type SaplingAuth = + sapling_builder::InProgress; type OrchardAuth = orchard::builder::InProgress, orchard::builder::Unauthorized>; type OrchardZsaAuth = @@ -852,7 +847,7 @@ impl Transaction { let (consensus_branch_id, lock_time, expiry_height) = Self::read_v5_header_fragment(&mut reader)?; let transparent_bundle = Self::read_transparent(&mut reader)?; - let sapling_bundle = Self::read_v5_sapling(&mut reader)?; + let sapling_bundle = sapling_serialization::read_v5_bundle(&mut reader)?; let orchard_zsa_bundle = orchard_serialization::read_v6_bundle(&mut reader)?; let issue_bundle = issuance::read_v6_bundle(&mut reader)?; @@ -1151,7 +1146,7 @@ pub mod testing { Just(TxVersion::Sapling).boxed() } BranchId::Nu5 => Just(TxVersion::Zip225).boxed(), - BranchId::V6 => Just(TxVersion::Zsa).boxed(), + BranchId::Nu6 => Just(TxVersion::Zsa).boxed(), #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => Just(TxVersion::ZFuture).boxed(), } diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index 28e9cb348d..e7babf6d39 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -12,7 +12,6 @@ use crate::{ sapling::{self, bundle::GrothProofBytes}, }; -use crate::transaction::sighash_v5::v6_signature_hash; #[cfg(zcash_unstable = "zfuture")] use {super::components::Amount, crate::extensions::transparent::Precondition}; use crate::transaction::sighash_v6::v6_signature_hash; diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 95172931ad..a0434b4876 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -132,7 +132,7 @@ proptest! { proptest! { #![proptest_config(ProptestConfig::with_cases(10))] #[test] - fn tx_serialization_roundtrip_v6(tx in arb_tx(BranchId::V6)) { + fn tx_serialization_roundtrip_v6(tx in arb_tx(BranchId::Nu6)) { check_roundtrip(tx)?; } } diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 33ee7dfa5d..c454b3f775 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -5,9 +5,6 @@ use std::io::Write; use blake2b_simd::{Hash as Blake2bHash, Params, State}; use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; -use orchard::issuance::{IssueBundle, Signed}; -use orchard::bundle; -use orchard::orchard_flavor::OrchardVanilla; use orchard::bundle; use orchard::issuance::{IssueAuth, IssueBundle, Signed}; use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; From 5733e8d0a15306c6604c4e889fdd2d8f2d2e8a83 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Sun, 19 May 2024 14:32:44 +0200 Subject: [PATCH 30/85] Revert test vector changes for Nu5 --- .../src/transaction/tests/data.rs | 2613 ++++++++--------- 1 file changed, 1285 insertions(+), 1328 deletions(-) diff --git a/zcash_primitives/src/transaction/tests/data.rs b/zcash_primitives/src/transaction/tests/data.rs index 0d95e28451..5b73779fea 100644 --- a/zcash_primitives/src/transaction/tests/data.rs +++ b/zcash_primitives/src/transaction/tests/data.rs @@ -5701,8 +5701,8 @@ pub mod zip_0244 { pub sighash_none_anyone: Option<[u8; 32]>, pub sighash_single_anyone: Option<[u8; 32]>, } - // From https://github.com/zcash-hackworks/zcash-test-vectors/ (zip_0244) + // From https://github.com/zcash-hackworks/zcash-test-vectors/blob/master/zip_0244.py pub fn make_test_vectors() -> Vec { vec![ TestVector { @@ -5883,22 +5883,22 @@ pub mod zip_0244 { 0x52, 0xde, 0xa3, 0xca, 0x7c, 0xff, 0x8e, 0xf3, 0x5c, 0xd8, 0xe6, 0xd7, 0xc1, 0x11, 0xa6, 0x8e, 0xf4, 0x4b, 0xcd, 0x0c, 0x15, 0x13, 0xad, 0x47, 0xca, 0x61, 0xc6, 0x59, 0xcc, 0x5d, 0x32, 0x5b, 0x44, 0x0f, 0x6b, 0x9f, 0x59, 0xaf, 0xf6, - 0x68, 0x79, 0xbb, 0x66, 0x88, 0xfd, 0x28, 0x59, 0x36, 0x2b, 0x18, 0x2f, 0x20, - 0x7b, 0x31, 0x75, 0x96, 0x1f, 0x64, 0x11, 0xa4, 0x93, 0xbf, 0xfd, 0x04, 0x8e, - 0x7d, 0x0d, 0x87, 0xd8, 0x2f, 0xe6, 0xf9, 0x90, 0xa2, 0xb0, 0xa2, 0x5f, 0x3f, - 0x3c, 0x4f, 0x8b, 0x77, 0xe2, 0x1a, 0xae, 0xbf, 0xc1, 0x17, 0x17, 0x1d, 0x58, - 0xe9, 0xb4, 0xe5, 0x02, 0x36, 0x0d, 0x3d, 0x7b, 0xa5, 0x45, 0x01, 0x19, 0x54, - 0x4e, 0x09, 0xfc, 0x03, 0xa7, 0x22, 0x64, 0x4e, 0x4d, 0x2d, 0x2e, 0x50, 0x10, - 0xb6, 0xfd, 0x09, 0xa2, 0x0e, 0x7e, 0x6f, 0x60, 0x05, 0xab, 0xff, 0x89, 0x94, - 0xbf, 0xa6, 0x05, 0xcf, 0xbc, 0x7e, 0xd7, 0x46, 0xa7, 0xd3, 0x37, 0xc8, 0x10, - 0xea, 0xba, 0x2b, 0x90, 0xf3, 0x53, 0xf2, 0x56, 0x0c, 0x63, 0xa7, 0x96, 0xe8, - 0xaa, 0x4c, 0xb7, 0xc1, 0x82, 0x37, 0xc5, 0x3c, 0x8d, 0xd2, 0x5a, 0x1a, 0x1c, - 0xd8, 0x41, 0x57, 0x12, 0x31, 0x1f, 0xb7, 0x99, 0xc7, 0x9c, 0x64, 0x1d, 0x9d, - 0xa4, 0x3b, 0x33, 0xe7, 0xad, 0x01, 0x2e, 0x28, 0x25, 0x53, 0x98, 0x78, 0x92, - 0x62, 0x27, 0x5f, 0x11, 0x75, 0xbe, 0x84, 0x62, 0xc0, 0x14, 0x25, 0xd4, 0x60, - 0xc6, 0xd3, 0x91, 0x55, 0xd2, 0xff, 0x8e, 0xcb, 0x41, 0x48, 0xfd, 0xc2, 0x32, - 0x9e, 0x53, 0xd0, 0xee, 0x7f, 0x87, 0xb1, 0xf2, 0xce, 0x29, 0x68, 0x5c, 0x48, - 0x7d, 0x17, 0xa7, 0x0b, 0x97, 0xdb, 0xb5, 0x2b, 0xef, 0xb5, 0x9b, 0x1d, 0x30, + 0x68, 0x79, 0xbb, 0x66, 0x88, 0xfd, 0xb4, 0x62, 0xaf, 0x43, 0x58, 0x2b, 0x98, + 0x3f, 0x92, 0xb5, 0x69, 0x8b, 0x87, 0xdb, 0x46, 0xe4, 0xb0, 0x2d, 0xd8, 0xe8, + 0x1e, 0xca, 0x55, 0x5a, 0x44, 0xf2, 0xf1, 0xae, 0xf1, 0x1d, 0x88, 0xa0, 0xbc, + 0xee, 0x76, 0xaf, 0x9a, 0xd3, 0xf9, 0xc4, 0x6a, 0x67, 0x06, 0x2e, 0x1a, 0x9c, + 0xa7, 0xea, 0x5c, 0x01, 0x43, 0x84, 0xaf, 0x07, 0x21, 0x9c, 0x7c, 0x0e, 0xe7, + 0xfc, 0x7b, 0xfc, 0x79, 0x33, 0xd1, 0x74, 0x65, 0x0f, 0x46, 0xb4, 0xcc, 0x00, + 0x01, 0x90, 0xc1, 0x9b, 0x44, 0xc5, 0x7a, 0xe8, 0x91, 0xaa, 0x86, 0x64, 0x6c, + 0x10, 0xa1, 0x77, 0xa8, 0x62, 0x6b, 0xe0, 0x64, 0x40, 0x99, 0x31, 0xc3, 0x7d, + 0x9e, 0x8b, 0xdc, 0x43, 0x3b, 0x7d, 0x79, 0xe0, 0x8a, 0x12, 0xf7, 0x38, 0xa8, + 0xf0, 0xdb, 0xdd, 0xfe, 0xf2, 0xf2, 0x65, 0x7e, 0xf3, 0xe4, 0x7d, 0x1b, 0x0f, + 0xd1, 0x1e, 0x6a, 0x13, 0x65, 0x4d, 0xb2, 0x85, 0x4f, 0xcb, 0xff, 0x49, 0xaa, + 0x0d, 0xad, 0xaf, 0xec, 0x32, 0x0b, 0x6e, 0xd2, 0xd4, 0xb2, 0x79, 0xae, 0xe9, + 0x06, 0x0c, 0x1b, 0x22, 0x1e, 0x2e, 0xb2, 0xf1, 0x3b, 0x06, 0x91, 0xc4, 0xd8, + 0x42, 0x40, 0x6d, 0x0e, 0xc4, 0x28, 0x2c, 0x95, 0x26, 0x17, 0x4a, 0x09, 0x87, + 0x8f, 0xe8, 0xfd, 0xde, 0x33, 0xa2, 0x96, 0x04, 0xe5, 0xe5, 0xe7, 0xb2, 0xa0, + 0x25, 0xd6, 0x65, 0x0b, 0x97, 0xdb, 0xb5, 0x2b, 0xef, 0xb5, 0x9b, 0x1d, 0x30, 0xa5, 0x74, 0x33, 0xb0, 0xa3, 0x51, 0x47, 0x44, 0x44, 0x09, 0x9d, 0xaa, 0x37, 0x10, 0x46, 0x61, 0x32, 0x60, 0xcf, 0x33, 0x54, 0xcf, 0xcd, 0xad, 0xa6, 0x63, 0xec, 0xe8, 0x24, 0xff, 0xd7, 0xe4, 0x43, 0x93, 0x88, 0x6a, 0x86, 0x16, 0x5d, @@ -5946,102 +5946,183 @@ pub mod zip_0244 { 0xc0, 0x59, 0xd0, 0xdf, 0x8a, 0xbf, 0x62, 0x10, 0x78, 0xf0, 0x2d, 0x6c, 0x4b, 0xc8, 0x6d, 0x40, 0x84, 0x5a, 0xc1, 0xd5, 0x97, 0x10, 0xc4, 0x5f, 0x07, 0xd5, 0x85, 0xeb, 0x48, 0xb3, 0x2f, 0xc0, 0x16, 0x7b, 0xa2, 0x56, 0xe7, 0x3c, 0xa3, - 0xb9, 0x31, 0x1c, 0x62, 0xd1, 0x09, 0x49, 0x79, 0x57, 0xd8, 0xdb, 0xe1, 0x0a, - 0xa3, 0xe8, 0x66, 0xb4, 0x0c, 0x0b, 0xaa, 0x2b, 0xc4, 0x92, 0xc1, 0x9a, 0xd1, - 0xe6, 0x37, 0x2d, 0x96, 0x22, 0xbf, 0x16, 0x3f, 0xbf, 0xfe, 0xae, 0xee, 0x79, - 0x6a, 0x3c, 0xd9, 0xb6, 0xfb, 0xbf, 0xa4, 0xd7, 0x92, 0xf3, 0x4d, 0x7f, 0xd6, - 0xe7, 0x63, 0xcd, 0x58, 0x59, 0xdd, 0x26, 0x83, 0x3d, 0x21, 0xd9, 0xbc, 0x54, - 0x52, 0xbd, 0x19, 0x51, 0x5d, 0xff, 0x01, 0x6d, 0x0d, 0x4c, 0x07, 0xfb, 0x38, - 0x03, 0x00, 0x19, 0x3b, 0xed, 0xb9, 0xf0, 0x9a, 0x7f, 0x86, 0xcb, 0xbd, 0xf6, - 0x54, 0x18, 0xe0, 0x80, 0x0c, 0x70, 0x89, 0xd0, 0x29, 0xe7, 0xfb, 0xba, 0xf3, - 0xcf, 0x37, 0xe9, 0xb9, 0xa6, 0xb7, 0x76, 0x39, 0x3e, 0x4c, 0x5e, 0x6f, 0xda, + 0xb9, 0x31, 0x1c, 0x62, 0xd1, 0x09, 0x49, 0x03, 0x57, 0x05, 0x19, 0xd4, 0x44, + 0x2f, 0x02, 0x00, 0xe6, 0xad, 0x11, 0xf2, 0x45, 0x2d, 0xc9, 0xae, 0x85, 0xae, + 0xc0, 0x1f, 0xc5, 0x6f, 0x8c, 0xbf, 0xda, 0x75, 0xa7, 0x72, 0x7b, 0x75, 0xeb, + 0xbd, 0x6b, 0xbf, 0xfb, 0x43, 0xb6, 0x3a, 0x3b, 0x1b, 0x87, 0x1e, 0x40, 0xfe, + 0xb0, 0xdb, 0x00, 0x29, 0x74, 0xa3, 0xc3, 0xb1, 0xa7, 0x88, 0x56, 0x72, 0x31, + 0xbf, 0x63, 0x99, 0xff, 0x89, 0x23, 0x69, 0x81, 0x14, 0x9d, 0x42, 0x38, 0x02, + 0xd2, 0x34, 0x1a, 0x3b, 0xed, 0xb9, 0xdd, 0xcb, 0xac, 0x1f, 0xe7, 0xb6, 0x43, + 0x5e, 0x14, 0x79, 0xc7, 0x2e, 0x70, 0x89, 0xd0, 0x29, 0xe7, 0xfb, 0xba, 0xf3, + 0xcf, 0x37, 0xe9, 0xb9, 0xa6, 0xb7, 0x76, 0x79, 0x1e, 0x4c, 0x5e, 0x6f, 0xda, 0x57, 0xe8, 0xd5, 0xf1, 0x4c, 0x8c, 0x35, 0xa2, 0xd2, 0x70, 0x84, 0x6b, 0x9d, 0xbe, 0x00, 0x5c, 0xda, 0x16, 0xaf, 0x44, 0x08, 0xf3, 0xab, 0x06, 0xa9, 0x16, 0xee, 0xeb, 0x9c, 0x95, 0x94, 0xb7, 0x04, 0x24, 0xa4, 0xc1, 0xd1, 0x71, 0x29, 0x5b, 0x67, 0x63, 0xb2, 0x2f, 0x47, 0xf8, 0x0b, 0x53, 0xcc, 0xbb, 0x90, 0x4b, - 0xd6, 0x8f, 0xd6, 0x5f, 0xbd, 0x3f, 0x74, 0x4e, 0x66, 0x78, 0x71, 0xba, 0xae, - 0x70, 0xde, 0x4b, 0xc9, 0x4b, 0x15, 0x0d, 0xa4, 0x16, 0xec, 0x5e, 0x70, 0x7f, - 0x3e, 0x48, 0x68, 0xa8, 0x53, 0x5e, 0xb7, 0x5b, 0xb8, 0x3e, 0x80, 0xb1, 0x6e, - 0x6a, 0x90, 0xe2, 0xd5, 0x07, 0xcd, 0xfe, 0x6f, 0xbd, 0xaa, 0x86, 0x16, 0x3e, - 0x9c, 0xf5, 0xde, 0x31, 0x00, 0xfb, 0xca, 0x7e, 0x8d, 0xa0, 0x47, 0xb0, 0x90, - 0xdb, 0x9f, 0x37, 0x95, 0x2f, 0xd3, 0x46, 0xb7, 0xf1, 0x68, 0xeb, 0xc5, 0xfc, - 0x8f, 0xe2, 0x53, 0xdd, 0x29, 0x27, 0x85, 0xd8, 0x9f, 0x82, 0xa6, 0xc6, 0x59, - 0xbb, 0x40, 0x3d, 0xc7, 0x32, 0xe5, 0x0b, 0xe6, 0x68, 0x4c, 0xba, 0xbd, 0x6b, - 0xbf, 0xfb, 0x43, 0xb6, 0x3a, 0x3b, 0x1b, 0x67, 0x1e, 0x40, 0xfe, 0xb0, 0xdb, - 0x00, 0x29, 0x74, 0xa3, 0xc3, 0xb1, 0xa7, 0x88, 0x56, 0x72, 0x31, 0xbf, 0x63, - 0x99, 0xff, 0x89, 0x23, 0x55, 0xe0, 0xbb, 0xde, 0xbe, 0xeb, 0xae, 0x2e, 0xdb, - 0x02, 0x5d, 0xe2, 0xf8, 0x68, 0x65, 0x8b, 0x38, 0x0c, 0x6f, 0xcf, 0xa2, 0x4c, - 0x07, 0x08, 0x25, 0xfc, 0x45, 0xed, 0xfc, 0xbd, 0x65, 0x91, 0x60, 0xb7, 0x08, - 0xe8, 0x08, 0x9f, 0x84, 0xd6, 0x37, 0xa8, 0xb0, 0x0b, 0x5e, 0x50, 0x19, 0xe8, - 0x1c, 0x15, 0x01, 0x03, 0x47, 0x53, 0x14, 0x6e, 0x22, 0xd0, 0x5f, 0x58, 0x6d, - 0x7f, 0x6b, 0x0f, + 0xd6, 0x8f, 0xd6, 0x5f, 0xbd, 0x3f, 0xbd, 0xea, 0x10, 0x35, 0xe9, 0x8c, 0x21, + 0xa7, 0xdb, 0xa5, 0xfe, 0x10, 0x89, 0xf7, 0xd1, 0xc0, 0x32, 0xf2, 0x4d, 0x36, + 0x83, 0x5a, 0xa8, 0x81, 0x52, 0x66, 0xe8, 0x97, 0xff, 0x82, 0x94, 0x03, 0xcf, + 0xac, 0x3a, 0x71, 0x59, 0x54, 0xb9, 0xb6, 0x89, 0x58, 0xa0, 0x11, 0x1a, 0x2c, + 0x92, 0x65, 0x63, 0x3b, 0xa2, 0x83, 0x1a, 0x2e, 0x86, 0xb9, 0x41, 0xe5, 0x69, + 0xd5, 0x8d, 0x99, 0xc1, 0x38, 0x35, 0x97, 0xfa, 0xd8, 0x11, 0x93, 0xc4, 0xc1, + 0x31, 0x51, 0xf4, 0x0a, 0xed, 0xb4, 0x87, 0xb5, 0xc0, 0x4a, 0xe3, 0xb1, 0xdd, + 0xfb, 0xaf, 0xa2, 0x6e, 0x72, 0x00, 0x99, 0xf2, 0x6d, 0x5a, 0x75, 0x35, 0xae, + 0xe5, 0x73, 0x06, 0xfd, 0x2c, 0x4f, 0x30, 0x67, 0x3c, 0xd9, 0xb6, 0x98, 0xfe, + 0xcf, 0x32, 0xfa, 0xf8, 0x8f, 0x62, 0xe2, 0x1c, 0x90, 0x66, 0x58, 0x59, 0xdd, + 0x26, 0x83, 0x3d, 0x21, 0xd9, 0xbc, 0x54, 0x52, 0xbd, 0x19, 0x51, 0x5d, 0x3f, + 0xa5, 0xc1, 0xe6, 0x8b, 0xc2, 0x09, 0xb9, 0xdc, 0x2a, 0x10, 0xae, 0x6b, 0x63, + 0x07, 0x26, 0xa6, 0x7b, 0x33, 0x60, 0x3c, 0x69, 0x1f, 0xaf, 0xc2, 0x81, 0xdd, + 0x94, 0xdc, 0x98, 0x88, 0xa6, 0x8c, 0x4f, 0x45, 0x15, 0x5a, 0xa7, 0x89, 0x7c, + 0x04, 0x5a, 0xaf, 0xd9, 0x33, 0x5b, 0xe2, 0xe0, 0xdd, 0xcf, 0x5f, 0x58, 0x6d, + 0x7f, 0x6b, 0x4f, 0xe1, 0x2d, 0xad, 0x9a, 0x17, 0xf5, 0xdb, 0x70, 0x31, ], txid: [ - 0xbb, 0x52, 0xff, 0x82, 0xd9, 0xa4, 0xf0, 0x95, 0x8e, 0x2f, 0xb5, 0xfd, 0xb3, - 0x2c, 0xf0, 0xde, 0xf5, 0x36, 0x69, 0x98, 0x56, 0x51, 0x6a, 0x58, 0x56, 0x55, - 0x10, 0x29, 0x4f, 0xa2, 0x54, 0x28, + 0x55, 0x2c, 0x96, 0xbd, 0x33, 0x83, 0x4b, 0xa1, 0xa8, 0xa3, 0xec, 0xd8, 0x0a, + 0x2c, 0x9c, 0xb4, 0x11, 0x87, 0x55, 0x3a, 0x3d, 0xcf, 0xe7, 0x92, 0x83, 0x16, + 0xbb, 0x70, 0x70, 0x4b, 0x85, 0xd0, ], auth_digest: [ - 0x69, 0xa1, 0xb7, 0xcb, 0x2e, 0xeb, 0x8e, 0x8d, 0x15, 0x68, 0x3f, 0x4c, 0x5c, - 0x38, 0x73, 0xc9, 0x4e, 0x33, 0x83, 0xf6, 0x0c, 0x2c, 0x5e, 0x1c, 0x23, 0xf3, - 0xd4, 0xed, 0xd7, 0x25, 0x30, 0xd1, + 0x12, 0x76, 0x7e, 0x5f, 0x67, 0x85, 0x67, 0x36, 0x0f, 0xb3, 0xa1, 0xcb, 0x9c, + 0xf8, 0x58, 0x61, 0x3f, 0xfe, 0x22, 0x63, 0xb6, 0x53, 0xc6, 0xa3, 0x70, 0xee, + 0x1f, 0x68, 0x20, 0xab, 0xdc, 0x57, ], - amounts: vec![1203563221197918], - script_pubkeys: vec![vec![0x63, 0x63, 0x52, 0x6a, 0x63, 0x53, 0x00, 0x51, 0x53]], + amounts: vec![1800841178198868], + script_pubkeys: vec![vec![0x65, 0x00, 0x51]], transparent_input: Some(0), sighash_shielded: [ - 0xd5, 0xbd, 0x65, 0x01, 0xa1, 0x8e, 0x4f, 0x2d, 0x91, 0x50, 0x8b, 0x7a, 0x6d, - 0x00, 0x03, 0xad, 0xcc, 0xc3, 0x82, 0xcd, 0x75, 0xf6, 0x6f, 0x41, 0x96, 0x16, - 0x47, 0xa5, 0x12, 0x85, 0xcc, 0x89, + 0x88, 0xda, 0x64, 0xb9, 0x5b, 0x56, 0xd8, 0x29, 0x6a, 0xb1, 0xf7, 0x21, 0xeb, + 0x5b, 0xe6, 0x6d, 0x0f, 0xd4, 0x78, 0xf2, 0xb9, 0x6b, 0x93, 0xd5, 0xdc, 0xee, + 0x8f, 0x7a, 0x10, 0x00, 0xb0, 0xff, ], sighash_all: Some([ - 0xd2, 0xfc, 0xb8, 0x0b, 0xaf, 0xc9, 0x28, 0xfc, 0x54, 0x84, 0x0c, 0x48, 0x3f, - 0x7e, 0xb4, 0xa5, 0x43, 0x87, 0x71, 0xa6, 0x5c, 0x2a, 0xcd, 0x60, 0x76, 0x60, - 0xc0, 0x5d, 0x39, 0x95, 0xd9, 0x4e, + 0x2d, 0x4e, 0xbf, 0x4d, 0x42, 0x42, 0x38, 0xad, 0x0b, 0xc2, 0x46, 0x99, 0x70, + 0x34, 0x7e, 0xaf, 0x76, 0x7f, 0xf9, 0x06, 0x95, 0x8e, 0x35, 0x10, 0x7f, 0xd2, + 0x2c, 0x1d, 0xc5, 0x36, 0xe4, 0x59, ]), sighash_none: Some([ - 0x81, 0xbd, 0xa8, 0x0e, 0x4d, 0x6c, 0xfd, 0x52, 0x6c, 0x3c, 0xbf, 0x81, 0xd5, - 0x45, 0xcc, 0x33, 0xe1, 0xe0, 0xf0, 0x01, 0xc8, 0xb1, 0xf2, 0x20, 0x08, 0xc4, - 0xc5, 0x19, 0x65, 0xc8, 0x4d, 0x99, + 0x68, 0x3e, 0xca, 0xa5, 0x64, 0x00, 0x2c, 0xa5, 0xa8, 0x0b, 0xea, 0x04, 0x37, + 0x0c, 0x78, 0x85, 0x5b, 0x8d, 0x9c, 0x9c, 0x38, 0x23, 0x09, 0xc7, 0x0b, 0x29, + 0xbd, 0xd9, 0x8d, 0x75, 0xb0, 0x66, ]), sighash_single: None, sighash_all_anyone: Some([ - 0x32, 0x7a, 0x21, 0x00, 0x57, 0x25, 0x6e, 0x48, 0x3b, 0xc2, 0x63, 0x9b, 0x3a, - 0x16, 0x25, 0x59, 0x40, 0xf6, 0x66, 0x2e, 0x96, 0xf4, 0xd3, 0xd9, 0x48, 0x45, - 0x1b, 0xa9, 0x94, 0x92, 0x10, 0x74, + 0x9c, 0x9e, 0x75, 0xee, 0x15, 0xf4, 0xed, 0xa1, 0x5d, 0x77, 0x79, 0x39, 0x52, + 0x9f, 0xa3, 0xa4, 0xf6, 0x4b, 0x93, 0x5c, 0x7d, 0x21, 0x83, 0x5f, 0x79, 0x39, + 0x3e, 0x7a, 0xa2, 0x3e, 0x28, 0x79, ]), sighash_none_anyone: Some([ - 0xb6, 0xa7, 0x8c, 0x4c, 0x2d, 0x46, 0x0c, 0x3e, 0xab, 0xfc, 0xa1, 0x1b, 0xd6, - 0x40, 0x65, 0xa4, 0x2a, 0x8c, 0xe4, 0xa0, 0xda, 0xc6, 0x54, 0xa7, 0x21, 0x20, - 0xdd, 0x65, 0x01, 0xea, 0x91, 0x19, + 0xa7, 0xdf, 0xf0, 0x0a, 0x96, 0xfd, 0x2b, 0x41, 0xc5, 0x80, 0x8d, 0x35, 0xe4, + 0xa6, 0xa2, 0xaa, 0x7b, 0x40, 0xee, 0xeb, 0xb6, 0xdc, 0xf3, 0xb9, 0xf2, 0x81, + 0xeb, 0x6c, 0x17, 0xe4, 0x3a, 0xf4, ]), sighash_single_anyone: None, }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x54, - 0x66, 0xb6, 0x1f, 0xc9, 0x33, 0xf6, 0x01, 0x00, 0x02, 0x1a, 0x3d, 0x36, 0xc0, - 0x0f, 0xea, 0x00, 0x00, 0x04, 0x65, 0x53, 0x6a, 0x53, 0x66, 0x66, 0x0d, 0x16, - 0xa7, 0xd1, 0x06, 0x00, 0x06, 0x6a, 0xac, 0x00, 0x53, 0x52, 0xac, 0x00, 0x00, - 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x1f, + 0xc9, 0x98, 0xc3, 0x1f, 0x4d, 0xd2, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x1f, 0x4d, 0xd2, 0x08, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x01, 0x50, 0x58, 0xe5, 0x75, 0x4c, 0x21, 0x04, 0x00, 0x07, + 0x53, 0xac, 0x51, 0x53, 0x00, 0x51, 0x52, 0x00, 0x01, 0xe5, 0x84, 0x9f, 0x96, + 0xba, 0xe6, 0xf2, 0x05, 0x6f, 0x33, 0xab, 0x1e, 0x69, 0x89, 0xd7, 0xd2, 0x64, + 0xad, 0xc9, 0x78, 0x55, 0xa9, 0x90, 0x10, 0x3b, 0x4d, 0x1e, 0x63, 0x50, 0xd5, + 0xc3, 0x1a, 0x39, 0xc3, 0xca, 0xf6, 0x94, 0x59, 0xe4, 0x62, 0xf1, 0x41, 0xbe, + 0x8b, 0x39, 0x03, 0x7f, 0xfa, 0x25, 0x5c, 0xe2, 0x7e, 0x4a, 0xd7, 0xb5, 0x66, + 0xa2, 0x96, 0x20, 0xa9, 0xf0, 0x11, 0xab, 0x08, 0xfb, 0x2a, 0xd3, 0x05, 0x06, + 0x52, 0xb3, 0xf6, 0x5b, 0x8e, 0x34, 0x52, 0x6a, 0x2a, 0x15, 0xfc, 0x2d, 0xdc, + 0x5b, 0x51, 0x13, 0xe4, 0x88, 0x2c, 0x7c, 0xca, 0x0d, 0xd5, 0x57, 0x7b, 0xe0, + 0x67, 0xba, 0x7a, 0x17, 0x5d, 0xae, 0x4b, 0xbe, 0x3e, 0xf4, 0x86, 0x3d, 0x53, + 0x70, 0x89, 0x15, 0x09, 0x0f, 0x47, 0xa0, 0x68, 0xe2, 0x27, 0x43, 0x3f, 0x9e, + 0x49, 0xd3, 0xaa, 0x09, 0xe3, 0x56, 0xd8, 0xd6, 0x6d, 0x0c, 0x01, 0x21, 0xe9, + 0x1a, 0x3c, 0x4a, 0xa3, 0xf2, 0x7f, 0xa1, 0xb6, 0x33, 0x96, 0xe2, 0xb4, 0x1d, + 0xb9, 0x08, 0xfd, 0xab, 0x8b, 0x18, 0xcc, 0x73, 0x04, 0xe9, 0x4e, 0x97, 0x05, + 0x68, 0xf9, 0x42, 0x1c, 0x0d, 0xbb, 0xba, 0xf8, 0x45, 0x98, 0xd9, 0x72, 0xb0, + 0x53, 0x4f, 0x48, 0xa5, 0xe5, 0x26, 0x70, 0x43, 0x6a, 0xaa, 0x77, 0x6e, 0xd2, + 0x48, 0x2a, 0xd7, 0x03, 0x43, 0x02, 0x01, 0xe5, 0x34, 0x43, 0xc3, 0x6d, 0xcf, + 0xd3, 0x4a, 0x0c, 0xb6, 0x63, 0x78, 0x76, 0x10, 0x5e, 0x79, 0xbf, 0x3b, 0xd5, + 0x8e, 0xc1, 0x48, 0xcb, 0x64, 0x97, 0x0e, 0x32, 0x23, 0xa9, 0x1f, 0x71, 0xdf, + 0xcf, 0xd5, 0xa0, 0x4b, 0x66, 0x7f, 0xba, 0xf3, 0xd4, 0xb3, 0xb9, 0x08, 0xb9, + 0x82, 0x88, 0x20, 0xdf, 0xec, 0xdd, 0x75, 0x37, 0x50, 0xb5, 0xf9, 0xd2, 0x21, + 0x6e, 0x56, 0xc6, 0x15, 0x27, 0x2f, 0x85, 0x44, 0x64, 0xc0, 0xca, 0x4b, 0x1e, + 0x85, 0xae, 0xdd, 0x03, 0x82, 0x92, 0xc4, 0xe1, 0xa5, 0x77, 0x44, 0xeb, 0xba, + 0x01, 0x0b, 0x9e, 0xbf, 0xbb, 0x01, 0x1b, 0xd6, 0xf0, 0xb7, 0x88, 0x05, 0x02, + 0x5d, 0x27, 0xf3, 0xc1, 0x77, 0x46, 0xba, 0xe1, 0x16, 0xc1, 0x5d, 0x9f, 0x47, + 0x1f, 0x0f, 0x62, 0x88, 0xa1, 0x50, 0x64, 0x7b, 0x2a, 0xfe, 0x9d, 0xf7, 0xcc, + 0xcf, 0x01, 0xf5, 0xcd, 0xe5, 0xf0, 0x46, 0x80, 0xbb, 0xfe, 0xd8, 0x7f, 0x6c, + 0xf4, 0x29, 0xfb, 0x27, 0xad, 0x6b, 0xab, 0xe7, 0x91, 0x76, 0x66, 0x11, 0xcf, + 0x5b, 0xc2, 0x0e, 0x48, 0xbe, 0xf1, 0x19, 0x25, 0x9b, 0x9b, 0x8a, 0x0e, 0x39, + 0xc3, 0xdf, 0x28, 0xcb, 0x95, 0x82, 0xea, 0x33, 0x86, 0x01, 0xcd, 0xc4, 0x81, + 0xb3, 0x2f, 0xb8, 0x2a, 0xde, 0xeb, 0xb3, 0xda, 0xde, 0x25, 0xd1, 0xa3, 0xdf, + 0x20, 0xc3, 0x7e, 0x71, 0x25, 0x06, 0xb5, 0xd9, 0x96, 0xc4, 0x9a, 0x9f, 0x0f, + 0x30, 0xdd, 0xcb, 0x91, 0xfe, 0x90, 0x04, 0xe1, 0xe8, 0x32, 0x94, 0xa6, 0xc9, + 0x20, 0x3d, 0x94, 0xe8, 0xdc, 0x2c, 0xbb, 0x44, 0x9d, 0xe4, 0x15, 0x50, 0x32, + 0x60, 0x4e, 0x47, 0x99, 0x70, 0x16, 0xb3, 0x04, 0xfd, 0x43, 0x7d, 0x82, 0x35, + 0x04, 0x5e, 0x25, 0x5a, 0x19, 0xb7, 0x43, 0xa0, 0xa9, 0xf2, 0xe3, 0x36, 0xb4, + 0x4c, 0xae, 0x30, 0x7b, 0xb3, 0x98, 0x7b, 0xd3, 0xe4, 0xe7, 0x77, 0xfb, 0xb3, + 0x4c, 0x0a, 0xb8, 0xcc, 0x3d, 0x67, 0x46, 0x6c, 0x0a, 0x88, 0xdd, 0x4c, 0xca, + 0xd1, 0x8a, 0x07, 0xa8, 0xd1, 0x06, 0x8d, 0xf5, 0xb6, 0x29, 0xe5, 0x71, 0x8d, + 0x0f, 0x6d, 0xf5, 0xc9, 0x57, 0xcf, 0x71, 0xbb, 0x00, 0xa5, 0x17, 0x8f, 0x17, + 0x5c, 0xac, 0xa9, 0x44, 0xe6, 0x35, 0xc5, 0x15, 0x9f, 0x73, 0x8e, 0x24, 0x02, + 0xa2, 0xd2, 0x1a, 0xa0, 0x81, 0xe1, 0x0e, 0x45, 0x6a, 0xfb, 0x00, 0xb9, 0xf6, + 0x24, 0x16, 0xc8, 0xb9, 0xc0, 0xf7, 0x22, 0x8f, 0x51, 0x07, 0x29, 0xe0, 0xbe, + 0x3f, 0x30, 0x53, 0x13, 0xd7, 0x7f, 0x73, 0x79, 0xdc, 0x2a, 0xf2, 0x48, 0x69, + 0xc6, 0xc7, 0x4e, 0xe4, 0x47, 0x14, 0x98, 0x86, 0x1d, 0x19, 0x2f, 0x0f, 0xf0, + 0xf5, 0x08, 0x28, 0x5d, 0xab, 0x6b, 0x6a, 0x36, 0xcc, 0xf7, 0xd1, 0x22, 0x56, + 0xcc, 0x76, 0xb9, 0x55, 0x03, 0x72, 0x0a, 0xc6, 0x72, 0xd0, 0x82, 0x68, 0xd2, + 0xcf, 0x77, 0x73, 0xb6, 0xba, 0x2a, 0x5f, 0x66, 0x48, 0x47, 0xbf, 0x70, 0x7f, + 0x2f, 0xc1, 0x0c, 0x98, 0xf2, 0xf0, 0x06, 0xec, 0x22, 0xcc, 0xb5, 0xa8, 0xc8, + 0xb7, 0xc4, 0x0c, 0x7c, 0x2d, 0x49, 0xa6, 0x63, 0x9b, 0x9f, 0x2c, 0xe3, 0x3c, + 0x25, 0xc0, 0x4b, 0xc4, 0x61, 0xe7, 0x44, 0xdf, 0xa5, 0x36, 0xb0, 0x0d, 0x94, + 0xba, 0xdd, 0xf4, 0xf4, 0xd1, 0x40, 0x44, 0xc6, 0x95, 0xa3, 0x38, 0x81, 0x47, + 0x7d, 0xf1, 0x24, 0xf0, 0xfc, 0xf2, 0x06, 0xa9, 0xfb, 0x2e, 0x65, 0xe3, 0x04, + 0xcd, 0xbf, 0x0c, 0x4d, 0x23, 0x90, 0x17, 0x0c, 0x13, 0x0a, 0xb8, 0x49, 0xc2, + 0xf2, 0x2b, 0x5c, 0xdd, 0x39, 0x21, 0x64, 0x0c, 0x8c, 0xf1, 0x97, 0x6a, 0xe1, + 0x01, 0x0b, 0x0d, 0xfd, 0x9c, 0xb2, 0x54, 0x3e, 0x45, 0xf9, 0x97, 0x49, 0xcc, + 0x4d, 0x61, 0xf2, 0xe8, 0xaa, 0xbf, 0xe9, 0x8b, 0xd9, 0x05, 0xfa, 0x39, 0x95, + 0x1b, 0x33, 0xea, 0x76, 0x9c, 0x45, 0xab, 0x95, 0x31, 0xc5, 0x72, 0x09, 0x86, + 0x2a, 0xd1, 0x2f, 0xd7, 0x6b, 0xa4, 0x80, 0x7e, 0x65, 0x41, 0x7b, 0x6c, 0xd1, + 0x2f, 0xa8, 0xec, 0x91, 0x6f, 0x01, 0x3e, 0xbb, 0x87, 0x06, 0xa9, 0xa5, 0x56, + 0xc7, 0x62, 0xf8, 0x85, 0x00, 0x00, 0x6e, 0xff, 0xed, 0xa0, 0x6c, 0x4b, 0xe2, + 0x4b, 0x04, 0x84, 0x63, 0x92, 0xe9, 0xd1, 0xe6, 0x93, 0x0e, 0xae, 0x01, 0xfa, + 0x21, 0xfb, 0xd7, 0x00, 0x58, 0x3f, 0xb5, 0x98, 0xb9, 0x2c, 0x8f, 0x4e, 0xb8, + 0xa6, 0x1a, 0xa6, 0x23, 0x5d, 0xb6, 0x0f, 0x28, 0x41, 0xcf, 0x3a, 0x1c, 0x6a, + 0xb5, 0x4c, 0x67, 0x06, 0x68, 0x44, 0x71, 0x1d, 0x09, 0x1e, 0xb9, 0x31, 0xa1, + 0xbd, 0x62, 0x81, 0xae, 0xdf, 0x2a, 0x0e, 0x8f, 0xab, 0x18, 0x81, 0x72, 0x02, + 0xa9, 0xbe, 0x06, 0x40, 0x2e, 0xd9, 0xcc, 0x72, 0x0c, 0x16, 0xbf, 0xe8, 0x81, + 0xe4, 0xdf, 0x42, 0x55, 0xe8, 0x7a, 0xfb, 0x7f, 0xc6, 0x2f, 0x38, 0x11, 0x6b, + 0xbe, 0x03, 0xcd, 0x8a, 0x3c, 0xb1, 0x1a, 0x27, 0xd5, 0x68, 0x41, 0x47, 0x82, + 0xf4, 0x7b, 0x1a, 0x44, 0xc9, 0x7c, 0x68, 0x04, 0x67, 0x69, 0x4b, 0xc9, 0x70, + 0x9d, 0x32, 0x91, 0x6c, 0x97, 0xe8, 0x00, 0x6c, 0xbb, 0x07, 0xba, 0x0e, 0x41, + 0x80, 0xa3, 0x73, 0x80, 0x38, 0xc3, 0x74, 0xc4, 0xcc, 0xe8, 0xf3, 0x29, 0x59, + 0xaf, 0xb2, 0x5f, 0x30, 0x3f, 0x58, 0x15, 0xc4, 0x53, 0x31, 0x24, 0xac, 0xf9, + 0xd1, 0x89, 0x40, 0xe7, 0x75, 0x22, 0xac, 0x5d, 0xc4, 0xb9, 0x57, 0x0a, 0xae, + 0x8f, 0x47, 0xb7, 0xf5, 0x7f, 0xd8, 0x76, 0x7b, 0xea, 0x1a, 0x24, 0xae, 0x7b, + 0xed, 0x65, 0xb4, 0x09, 0xe1, 0xdd, 0x26, 0xb8, 0xdd, 0xdd, 0x68, 0x85, 0x8d, + 0x6f, 0x51, 0x61, 0xf0, 0x73, 0xd9, 0x06, 0x36, 0x86, 0x0a, 0x9a, 0xae, 0xe1, + 0x86, 0x29, 0xb0, 0x63, 0x30, 0xa8, 0xee, 0x30, 0x59, 0x1d, 0xeb, 0xfc, 0xef, + 0x56, 0xa0, 0x26, 0xbb, 0x28, 0xc3, 0xb0, 0x6e, 0xc2, 0xcf, 0xaf, 0x5b, 0x79, + 0xab, 0x72, 0x69, 0x4d, 0x1d, 0x01, 0x2a, 0x75, 0x94, 0xdd, 0x80, 0xae, 0x7d, + 0xfa, 0x0c, 0x00, ], txid: [ - 0x48, 0x5e, 0xed, 0x11, 0x3a, 0xc8, 0x9a, 0x13, 0x1f, 0xcc, 0x81, 0xb2, 0x4a, - 0xc0, 0x2b, 0xad, 0xe4, 0xbe, 0x7d, 0x69, 0x0a, 0x93, 0x39, 0xe3, 0xa9, 0x81, - 0x38, 0xc7, 0x1d, 0xdb, 0xfb, 0x73, + 0xa3, 0xcb, 0xad, 0xd7, 0xa5, 0x8d, 0x80, 0xa4, 0xc2, 0xf6, 0x18, 0x09, 0xc2, + 0x4a, 0x2f, 0x08, 0x6c, 0x58, 0xce, 0xec, 0xaf, 0x7a, 0xf9, 0x41, 0x4c, 0x38, + 0xbd, 0xbd, 0xc4, 0xe4, 0x6e, 0x98, ], auth_digest: [ - 0x0a, 0x5a, 0x5c, 0x39, 0xc7, 0x2f, 0x6c, 0xda, 0xb1, 0x7c, 0x5a, 0x43, 0xf2, - 0xe5, 0xb0, 0xee, 0x82, 0xd9, 0xe0, 0xfb, 0xc0, 0x29, 0x4f, 0x30, 0x86, 0x8e, - 0x55, 0xa1, 0xdf, 0xc0, 0x33, 0x0f, + 0xad, 0x64, 0x58, 0x0e, 0xd3, 0xa2, 0x8a, 0x3b, 0xa4, 0x1e, 0x2d, 0x32, 0x0b, + 0x5f, 0xf2, 0xa0, 0x7f, 0xa1, 0x9d, 0xb0, 0x74, 0xaf, 0xc4, 0x55, 0xe9, 0x2e, + 0x0f, 0x32, 0x6b, 0xe0, 0x8a, 0x6a, ], amounts: vec![], script_pubkeys: vec![], transparent_input: None, sighash_shielded: [ - 0x48, 0x5e, 0xed, 0x11, 0x3a, 0xc8, 0x9a, 0x13, 0x1f, 0xcc, 0x81, 0xb2, 0x4a, - 0xc0, 0x2b, 0xad, 0xe4, 0xbe, 0x7d, 0x69, 0x0a, 0x93, 0x39, 0xe3, 0xa9, 0x81, - 0x38, 0xc7, 0x1d, 0xdb, 0xfb, 0x73, + 0xa3, 0xcb, 0xad, 0xd7, 0xa5, 0x8d, 0x80, 0xa4, 0xc2, 0xf6, 0x18, 0x09, 0xc2, + 0x4a, 0x2f, 0x08, 0x6c, 0x58, 0xce, 0xec, 0xaf, 0x7a, 0xf9, 0x41, 0x4c, 0x38, + 0xbd, 0xbd, 0xc4, 0xe4, 0x6e, 0x98, ], sighash_all: None, sighash_none: None, @@ -6052,153 +6133,30 @@ pub mod zip_0244 { }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x28, - 0xd5, 0xc8, 0xaf, 0xb0, 0x66, 0x87, 0x08, 0x00, 0x01, 0x8c, 0x3f, 0x57, 0x9a, - 0x71, 0x05, 0x03, 0x00, 0x08, 0x00, 0x65, 0x6a, 0x65, 0x00, 0x63, 0x51, 0x53, - 0x01, 0x93, 0xab, 0x48, 0xeb, 0x3f, 0xcf, 0xb8, 0x77, 0x81, 0x6d, 0xcc, 0x86, - 0x1a, 0x40, 0x01, 0x3b, 0x71, 0xb8, 0x3f, 0x36, 0x50, 0xe6, 0xd8, 0xad, 0x58, - 0xa2, 0x3b, 0x42, 0x0e, 0x01, 0xbe, 0x01, 0x68, 0x06, 0x14, 0xe8, 0x35, 0x62, - 0xf8, 0x2d, 0xfd, 0x40, 0x5b, 0x54, 0xa4, 0x5e, 0xb3, 0x2c, 0x16, 0x54, 0x48, - 0xd4, 0xd5, 0xd6, 0x1c, 0xa2, 0x85, 0x95, 0x85, 0x36, 0x9f, 0x53, 0xf1, 0xa1, - 0x25, 0x97, 0xb4, 0xb6, 0x5b, 0x9e, 0xc1, 0xc7, 0xa8, 0xbb, 0xfd, 0x05, 0x2c, - 0xbf, 0x7e, 0x1c, 0x17, 0x85, 0x31, 0x49, 0x34, 0xb2, 0x62, 0xd5, 0x85, 0x37, - 0x54, 0xf1, 0xf1, 0x77, 0x71, 0xcf, 0x00, 0x37, 0x40, 0x58, 0x1f, 0xee, 0x3a, - 0x02, 0x00, 0x04, 0x97, 0x94, 0x89, 0x17, 0x2b, 0x3e, 0xf8, 0x19, 0x4a, 0x79, - 0x8d, 0xf5, 0x72, 0x4d, 0x6b, 0x05, 0xf1, 0xae, 0x00, 0x00, 0x13, 0xa0, 0x8d, - 0x61, 0x2b, 0xca, 0x8a, 0x8c, 0x31, 0x44, 0x3c, 0xb7, 0x50, 0x30, 0x72, 0x65, - 0x57, 0x53, 0xfa, 0x3f, 0x54, 0xec, 0xc5, 0x87, 0xe9, 0xf8, 0x3b, 0x58, 0x19, - 0x16, 0x09, 0x2d, 0xf2, 0x6e, 0x63, 0xe1, 0x89, 0x94, 0xcb, 0x0d, 0xb9, 0x1a, - 0x0b, 0xbd, 0xc7, 0xb6, 0x11, 0x9b, 0x32, 0x22, 0x2a, 0xdf, 0x5e, 0x61, 0xd8, - 0xd8, 0xae, 0x89, 0xda, 0xe4, 0x95, 0x4b, 0x54, 0x81, 0x3b, 0xb3, 0x3f, 0x08, - 0xd5, 0x62, 0xba, 0x51, 0x3f, 0xee, 0x1b, 0x09, 0xc0, 0xfc, 0xd5, 0x16, 0x05, - 0x54, 0x19, 0x47, 0x4d, 0xd7, 0xfd, 0xa0, 0x38, 0xa8, 0x9c, 0x84, 0xea, 0x7b, - 0x94, 0x68, 0x28, 0x7f, 0x0e, 0xb0, 0xc1, 0x0c, 0x4b, 0x13, 0x25, 0x20, 0x19, - 0x4d, 0x3d, 0x8d, 0x53, 0x51, 0xfc, 0x10, 0xd0, 0x9c, 0x15, 0xc8, 0xcc, 0x10, - 0x1a, 0xa1, 0x66, 0x3b, 0xbf, 0x17, 0xb8, 0x41, 0x11, 0xf3, 0x8b, 0xb4, 0x39, - 0xf0, 0x73, 0x53, 0xbd, 0xea, 0x35, 0x96, 0xd1, 0x5e, 0x71, 0x3e, 0x1e, 0x2e, - 0x7d, 0x3f, 0x1c, 0x38, 0x31, 0x35, 0xb4, 0x7f, 0xa7, 0xf8, 0x1f, 0x46, 0xdf, - 0x7a, 0x90, 0x2a, 0x40, 0x46, 0x99, 0xec, 0x91, 0x2f, 0x56, 0x56, 0xc3, 0x5b, - 0x85, 0x76, 0x3e, 0x4d, 0xe5, 0x83, 0xae, 0xca, 0xa1, 0xdf, 0xd5, 0xd2, 0x67, - 0x7d, 0x9c, 0x8f, 0xfe, 0xe8, 0x77, 0xf6, 0x3f, 0x40, 0xa5, 0xca, 0x0d, 0x67, - 0xf6, 0xe5, 0x54, 0x12, 0x47, 0x2a, 0x03, 0x68, 0xf7, 0xd6, 0xce, 0x33, 0xf5, - 0x52, 0xaa, 0xbf, 0x7c, 0xe1, 0xac, 0x55, 0x24, 0x29, 0x98, 0xc5, 0xc1, 0x22, - 0x75, 0xf1, 0xe7, 0xb4, 0xbb, 0x4a, 0xcc, 0x68, 0x77, 0x6f, 0x17, 0x4d, 0x28, - 0x56, 0x09, 0x81, 0xca, 0xe4, 0xca, 0x7d, 0x5b, 0x9f, 0x6e, 0x4c, 0x07, 0x86, - 0xac, 0x55, 0x82, 0x29, 0xe8, 0xf3, 0x58, 0x20, 0x19, 0x55, 0xdc, 0x6b, 0xd1, - 0x8d, 0xe8, 0x9f, 0x03, 0x61, 0xf6, 0x69, 0x6f, 0x23, 0xdb, 0xeb, 0xe4, 0x64, - 0x3c, 0xd3, 0xbe, 0xa9, 0xa0, 0xd2, 0xd7, 0xe2, 0x61, 0xe9, 0xa3, 0x57, 0x2a, - 0x80, 0xa7, 0x19, 0x90, 0x31, 0x3b, 0x69, 0x66, 0x29, 0x99, 0xf0, 0xac, 0x3e, - 0xe2, 0x88, 0x85, 0xd4, 0x12, 0x14, 0x47, 0x3b, 0x87, 0x94, 0x6a, 0x56, 0xc9, - 0x0b, 0x94, 0xff, 0x34, 0x91, 0xf3, 0xd5, 0xc7, 0x5b, 0xf4, 0x96, 0x5b, 0x17, - 0x11, 0xac, 0x09, 0x01, 0x28, 0x7e, 0x48, 0x46, 0x56, 0x56, 0xb2, 0xa7, 0x28, - 0xaf, 0xb9, 0x7d, 0x48, 0xaf, 0x39, 0xbb, 0x0d, 0xd3, 0x36, 0x1b, 0x49, 0x98, - 0x33, 0x26, 0x50, 0x45, 0xb5, 0x58, 0xbf, 0x22, 0x33, 0x0c, 0x04, 0x68, 0xf9, - 0x42, 0x2f, 0xdc, 0x8d, 0x21, 0xdd, 0x4c, 0x4b, 0xd0, 0x76, 0x17, 0x0d, 0x2d, - 0x48, 0xa5, 0xe5, 0x26, 0x70, 0x43, 0x6a, 0xaa, 0x77, 0x6e, 0xd2, 0x48, 0x2a, - 0xd7, 0x03, 0x03, 0xce, 0xbc, 0xbd, 0x05, 0x79, 0xd4, 0x04, 0x97, 0xfb, 0x07, - 0x03, 0x78, 0x57, 0x6d, 0xca, 0xba, 0x00, 0x8c, 0x17, 0x99, 0x68, 0xa7, 0xc4, - 0x86, 0x3f, 0xe0, 0x2c, 0x24, 0xa2, 0x91, 0x5b, 0x9a, 0x71, 0xdf, 0xcf, 0xd5, - 0xa0, 0x4b, 0x66, 0x7f, 0xba, 0xf3, 0xd4, 0xb3, 0xb9, 0x08, 0xb9, 0x82, 0x88, - 0x20, 0xdf, 0xec, 0xdd, 0x75, 0x37, 0x50, 0xb5, 0xf9, 0xd2, 0x21, 0x6e, 0x56, - 0xc6, 0x15, 0x11, 0x74, 0x7e, 0x86, 0x50, 0x86, 0x69, 0xe1, 0x00, 0xa3, 0xa7, - 0xb0, 0x9d, 0xb0, 0x39, 0x9d, 0xf3, 0x78, 0xf6, 0xdf, 0x53, 0x1b, 0xca, 0x4f, - 0xc5, 0x5a, 0x45, 0xe3, 0xc7, 0x56, 0x72, 0x08, 0x88, 0x05, 0x02, 0x5d, 0x27, - 0xf3, 0xc1, 0x77, 0x46, 0xba, 0xe1, 0x16, 0xc1, 0x5d, 0x9f, 0x47, 0x1f, 0x0f, - 0x62, 0x88, 0xa1, 0x50, 0x64, 0x7b, 0x2a, 0xfe, 0x9d, 0xf7, 0xcc, 0xcf, 0x01, - 0xf5, 0xcd, 0xe5, 0xf0, 0x46, 0x80, 0xbb, 0xfe, 0xd8, 0x7f, 0x6c, 0xf4, 0x29, - 0xfb, 0x27, 0xad, 0x6b, 0xab, 0xe7, 0x91, 0x76, 0x66, 0x11, 0xcf, 0x5b, 0xc2, - 0x0e, 0x48, 0xbe, 0xf1, 0x19, 0x25, 0x9b, 0x9b, 0x8a, 0x0e, 0x39, 0xc3, 0xdf, - 0x28, 0xcb, 0x95, 0x82, 0xea, 0x33, 0x86, 0x01, 0xcd, 0xc4, 0x81, 0xb3, 0x2f, - 0xb8, 0x2a, 0xde, 0xeb, 0xb3, 0xda, 0xde, 0x25, 0xd1, 0xa3, 0xdf, 0x20, 0xc3, - 0x7e, 0x71, 0x25, 0x06, 0xb5, 0xd9, 0x96, 0xc4, 0x9a, 0x9f, 0x0f, 0x30, 0xdd, - 0xcb, 0x91, 0xfe, 0x90, 0x04, 0xe1, 0xe8, 0x32, 0x94, 0xa6, 0xc9, 0x20, 0x3d, - 0x94, 0xe8, 0xdc, 0x2c, 0xbb, 0x44, 0x9d, 0xe4, 0x15, 0x50, 0x32, 0x60, 0x4e, - 0x47, 0x99, 0x70, 0x16, 0xb3, 0x04, 0xfd, 0x43, 0x7d, 0x82, 0x35, 0x04, 0x5e, - 0x25, 0x5a, 0x19, 0xb7, 0x43, 0xa0, 0xa9, 0xf2, 0xe3, 0x36, 0xb4, 0x4c, 0xae, - 0x30, 0x7b, 0xb3, 0x98, 0x7b, 0xd3, 0xe4, 0xe7, 0x77, 0xfb, 0xb3, 0x4c, 0x0a, - 0xb8, 0xcc, 0x3d, 0x67, 0x46, 0x6c, 0x0a, 0x88, 0xdd, 0x4c, 0xca, 0xd1, 0x8a, - 0x07, 0xa8, 0xd1, 0x06, 0x8d, 0xf5, 0xb6, 0x29, 0xe5, 0x71, 0x8d, 0x0f, 0x6d, - 0xf5, 0xc9, 0x57, 0xcf, 0x71, 0xbb, 0x00, 0xa5, 0x17, 0x8f, 0x17, 0x5c, 0xac, - 0xa9, 0x44, 0xe6, 0x35, 0xc5, 0x15, 0x9f, 0x73, 0x8e, 0x24, 0x02, 0xa2, 0xd2, - 0x1a, 0xa0, 0x81, 0xe1, 0x0e, 0x45, 0x6a, 0xfb, 0x00, 0xb9, 0xf6, 0x24, 0x16, - 0xc8, 0xb9, 0xc0, 0xf7, 0x22, 0x8f, 0x51, 0x07, 0x29, 0xe0, 0xbe, 0x3f, 0x30, - 0x53, 0x13, 0xd7, 0x7f, 0x73, 0x79, 0xdc, 0x2a, 0xf2, 0x48, 0x69, 0xc6, 0xc7, - 0x4e, 0xe4, 0x47, 0x14, 0x98, 0x86, 0x1d, 0x19, 0x2f, 0x0f, 0xf0, 0xf5, 0x08, - 0x28, 0x5d, 0xab, 0x6b, 0x6a, 0x36, 0xcc, 0xf7, 0xd1, 0x22, 0x56, 0xcc, 0x76, - 0xb9, 0x55, 0x03, 0x72, 0x0a, 0xc6, 0x72, 0xd0, 0x82, 0x68, 0xd2, 0xcf, 0x77, - 0x73, 0xb6, 0xba, 0x2a, 0x5f, 0x66, 0x48, 0x47, 0xbf, 0x70, 0x7f, 0x2f, 0xc1, - 0x0c, 0x98, 0xf2, 0xf0, 0x06, 0xec, 0x22, 0xcc, 0xb5, 0xa8, 0xc8, 0xb7, 0xc4, - 0x0c, 0x7c, 0x2d, 0x49, 0xa6, 0x63, 0x9b, 0x9f, 0x2c, 0xe3, 0x3c, 0x25, 0xc0, - 0x4b, 0xc4, 0x61, 0xe7, 0x44, 0xdf, 0xa5, 0x36, 0xb0, 0x0d, 0x94, 0xba, 0xdd, - 0xf4, 0xf4, 0xd1, 0x40, 0x44, 0xc6, 0x95, 0xa3, 0x38, 0x81, 0x47, 0x7d, 0xf1, - 0x24, 0xf0, 0xfc, 0xf2, 0x06, 0xa9, 0xfb, 0x2e, 0x65, 0xe3, 0x04, 0xcd, 0xbf, - 0x0c, 0x4d, 0x23, 0x90, 0x17, 0x0c, 0x13, 0x0a, 0xb8, 0x49, 0xc2, 0xf2, 0x2b, - 0x5c, 0xdd, 0x39, 0x21, 0x64, 0x0c, 0x8c, 0xf1, 0x97, 0x6a, 0xe1, 0x01, 0x0b, - 0x0d, 0xfd, 0x9c, 0xb2, 0x54, 0x3e, 0x45, 0xf9, 0x97, 0x49, 0xcc, 0x4d, 0x61, - 0xf2, 0xe8, 0xaa, 0xbf, 0xe9, 0x8b, 0xd9, 0x05, 0xfa, 0x39, 0x95, 0x1b, 0x33, - 0xea, 0x76, 0x9c, 0x45, 0xab, 0x95, 0x31, 0xc5, 0x72, 0x09, 0x86, 0x2a, 0xd1, - 0x2f, 0xd7, 0x6b, 0xa4, 0x80, 0x7e, 0x65, 0x41, 0x7b, 0x6c, 0xd1, 0x2f, 0xa8, - 0xec, 0x91, 0x6f, 0x01, 0x3e, 0xbb, 0x87, 0x06, 0xa9, 0x6e, 0xff, 0xed, 0xa0, - 0x6c, 0x4b, 0xe2, 0x4b, 0x04, 0x84, 0x63, 0x92, 0xe9, 0xd1, 0xe6, 0x93, 0x0e, - 0xae, 0x01, 0xfa, 0x21, 0xfb, 0xd7, 0x00, 0x58, 0x3f, 0xb5, 0x98, 0xb9, 0x2c, - 0x8f, 0x4e, 0xb8, 0xa6, 0x1a, 0xa6, 0x23, 0x5d, 0xb6, 0x0f, 0x28, 0x41, 0xcf, - 0x3a, 0x1c, 0x6a, 0xb5, 0x4c, 0x67, 0x06, 0x68, 0x44, 0x71, 0x1d, 0x09, 0x1e, - 0xb9, 0x31, 0xa1, 0xbd, 0x62, 0x81, 0xae, 0xdf, 0x2a, 0x0e, 0x8f, 0xab, 0x18, - 0x81, 0x72, 0x02, 0xa9, 0xbe, 0x06, 0x40, 0x2e, 0xd9, 0xcc, 0x72, 0x0c, 0x16, - 0xbf, 0xe8, 0x81, 0xe4, 0xdf, 0x42, 0x55, 0xe8, 0x7a, 0xfb, 0x7f, 0xc6, 0x2f, - 0x38, 0x11, 0x6b, 0xbe, 0x03, 0xcd, 0x8a, 0x3c, 0xb1, 0x1a, 0x27, 0xd5, 0x68, - 0x41, 0x47, 0x82, 0xf4, 0x7b, 0x1a, 0x44, 0xc9, 0x7c, 0x68, 0x04, 0x67, 0x69, - 0x4b, 0xc9, 0x70, 0x9d, 0x32, 0x91, 0x6c, 0x97, 0xe8, 0x00, 0x6c, 0xbb, 0x07, - 0xba, 0x0e, 0x41, 0x80, 0xa3, 0x73, 0x80, 0x38, 0xc3, 0x74, 0xc4, 0xcc, 0xe8, - 0xf3, 0x29, 0x59, 0xaf, 0xb2, 0x5f, 0x30, 0x3f, 0x58, 0x15, 0xc4, 0x53, 0x31, - 0x24, 0xac, 0xf9, 0xd1, 0x89, 0x40, 0xe7, 0x75, 0x22, 0xac, 0x5d, 0xc4, 0xb9, - 0x57, 0x0a, 0xae, 0x8f, 0x47, 0xb7, 0xf5, 0x7f, 0xd8, 0x76, 0x7b, 0xea, 0x1a, - 0x24, 0xae, 0x7b, 0xed, 0x65, 0xb4, 0xaf, 0xdc, 0x8f, 0x12, 0x78, 0xc3, 0x0e, - 0x2d, 0xb9, 0x8f, 0xd1, 0x72, 0x73, 0x0a, 0xc6, 0xbb, 0xed, 0x4f, 0x11, 0x27, - 0xcd, 0x32, 0xb0, 0x4a, 0x95, 0xb2, 0x05, 0x52, 0x6c, 0xfc, 0xb4, 0x01, 0xc4, - 0xd8, 0x1d, 0xba, 0x04, 0xa7, 0x02, 0x00, 0xfd, 0x6a, 0xcc, 0x0f, 0x22, 0x97, - 0x89, 0x16, 0x07, 0x22, 0xd1, 0x8a, 0x51, 0xab, 0xff, 0x33, 0x35, 0xf4, 0x3a, - 0x37, 0xdc, 0xa0, 0x78, 0x7e, 0x3e, 0xc9, 0xf6, 0x60, 0x52, 0x23, 0xd5, 0x3a, - 0x9a, 0xe0, 0xab, 0x90, 0x25, 0xb7, 0x3b, 0xc0, 0x3f, 0x7f, 0xac, 0x36, 0xc0, - 0x09, 0xa5, 0x6d, 0x4d, 0x95, 0xd1, 0xe8, 0x1d, 0x3b, 0x3e, 0xbc, 0xa7, 0xe5, - 0x4c, 0xc1, 0xa1, 0x2d, 0x12, 0x7b, 0x57, 0xc8, 0x13, 0x89, 0x76, 0xe7, 0x91, - 0x01, 0x3b, 0x01, 0x5f, 0x06, 0xa6, 0x24, 0xf5, 0x21, 0xb6, 0xee, 0x04, 0xec, - 0x98, 0x08, 0x93, 0xc7, 0xe5, 0xe0, 0x1a, 0x33, 0x62, 0x03, 0x59, 0x40, 0x94, - 0xf8, 0x28, 0x33, 0xd7, 0x44, 0x5f, 0xe2, 0xd0, 0x91, 0x30, 0xf6, 0x35, 0x11, - 0xda, 0x54, 0x83, 0x2d, 0xe9, 0x13, 0x6b, 0x39, 0xf4, 0x59, 0x9f, 0x5a, 0xa5, - 0xdf, 0xbb, 0x45, 0xda, 0x60, 0xcd, 0xce, 0xab, 0x7e, 0xef, 0xde, 0x89, 0xbe, - 0x63, 0xf3, 0xf7, 0xc0, 0xd2, 0x32, 0x48, 0x47, 0xcc, 0xe1, 0x40, 0x5d, 0xef, - 0x7c, 0x46, 0x9b, 0x0e, 0x27, 0x24, 0x94, 0xe5, 0xdf, 0x54, 0xf5, 0x68, 0x65, - 0x6c, 0xb9, 0xc8, 0x81, 0x8d, 0x92, 0xb7, 0x2b, 0x8b, 0xc3, 0x4d, 0xb7, 0xbb, - 0x31, 0x12, 0x48, 0x7e, 0x74, 0x6e, 0xef, 0xe4, 0xe8, 0x08, 0xbb, 0xb2, 0xc8, - 0x01, 0x67, 0x26, 0x4a, 0x28, 0x35, 0x95, 0xd8, 0x26, 0x29, 0xa5, 0x4d, 0x1b, - 0x5f, 0x57, 0x5e, 0x3e, 0x35, 0x60, 0x70, 0x2e, 0x4e, 0x0a, 0x11, 0x4a, 0xc7, - 0x17, 0xa7, 0xc5, 0x7f, 0x37, 0x80, 0xb3, 0x2f, 0xb1, 0xa6, 0xbe, 0x8d, 0x35, - 0x3f, 0xb6, 0x04, 0xcf, 0x5d, 0xc4, 0x94, 0xfb, 0xe7, 0x3d, 0xb2, 0x5e, 0x3d, - 0xba, 0xf7, 0xae, 0xd5, 0x04, 0xde, 0x93, 0x2a, 0xcb, 0x99, 0x17, 0xc2, 0x9b, - 0xe8, 0x2d, 0x7b, 0xcf, 0xbf, 0xc3, 0xf5, 0xef, 0xd9, 0xb8, 0x98, 0x8a, 0x53, - 0x93, 0xc4, 0xde, 0xda, 0xe6, 0xde, 0x88, 0x42, 0xc3, 0xc6, 0xe2, 0x97, 0x94, - 0xda, 0xc2, 0xee, 0x25, 0x32, 0xe8, 0x20, 0x9a, 0xa4, 0x89, 0x4c, 0xc6, 0xd7, - 0x28, 0x3c, 0xc0, 0x39, 0x5a, 0xc0, 0x35, 0x90, 0x03, 0x7e, 0x71, 0xe3, 0xe5, - 0x50, 0x72, 0x6d, 0x21, 0x0a, 0x2c, 0x68, 0x83, 0x42, 0x25, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0xc2, + 0xeb, 0x51, 0x8f, 0x68, 0x98, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x68, 0x98, 0x4d, 0x02, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, ], txid: [ - 0x48, 0x9c, 0xea, 0x9c, 0x06, 0x30, 0x4d, 0x7d, 0x54, 0x8f, 0x7b, 0xc5, 0xb5, - 0x2e, 0x1d, 0x83, 0x31, 0x5b, 0x8f, 0x9f, 0x60, 0x98, 0x54, 0xd6, 0x11, 0xc9, - 0x0b, 0xba, 0x24, 0x45, 0xd1, 0xc7, + 0x28, 0xd1, 0x6c, 0x3c, 0xd7, 0x8a, 0x6b, 0x7a, 0x50, 0xb1, 0x1a, 0x1b, 0x84, + 0x17, 0x76, 0x4c, 0x4e, 0x63, 0xc6, 0xe3, 0xd8, 0xaa, 0x28, 0x9f, 0x7e, 0x87, + 0xe3, 0x98, 0x45, 0x87, 0x27, 0x64, ], auth_digest: [ - 0x81, 0xc7, 0x82, 0x3f, 0x53, 0xe9, 0x2d, 0xaf, 0x14, 0xd5, 0x01, 0xc2, 0xd6, - 0xd8, 0x37, 0x27, 0x5d, 0xef, 0xd0, 0x6b, 0x98, 0x2b, 0x43, 0xc0, 0x70, 0x7f, - 0xc6, 0x31, 0x08, 0xa5, 0xb3, 0x62, + 0x33, 0x21, 0x55, 0xb1, 0xcc, 0x23, 0xa2, 0x57, 0x1e, 0x86, 0xe4, 0x9e, 0x06, + 0x01, 0x0c, 0xd2, 0x53, 0x21, 0xdc, 0xfc, 0xca, 0x34, 0xae, 0x14, 0xe8, 0xb3, + 0xf4, 0xf0, 0x02, 0x70, 0xd2, 0x87, ], amounts: vec![], script_pubkeys: vec![], transparent_input: None, sighash_shielded: [ - 0x48, 0x9c, 0xea, 0x9c, 0x06, 0x30, 0x4d, 0x7d, 0x54, 0x8f, 0x7b, 0xc5, 0xb5, - 0x2e, 0x1d, 0x83, 0x31, 0x5b, 0x8f, 0x9f, 0x60, 0x98, 0x54, 0xd6, 0x11, 0xc9, - 0x0b, 0xba, 0x24, 0x45, 0xd1, 0xc7, + 0x28, 0xd1, 0x6c, 0x3c, 0xd7, 0x8a, 0x6b, 0x7a, 0x50, 0xb1, 0x1a, 0x1b, 0x84, + 0x17, 0x76, 0x4c, 0x4e, 0x63, 0xc6, 0xe3, 0xd8, 0xaa, 0x28, 0x9f, 0x7e, 0x87, + 0xe3, 0x98, 0x45, 0x87, 0x27, 0x64, ], sighash_all: None, sighash_none: None, @@ -6209,61 +6167,31 @@ pub mod zip_0244 { }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x40, - 0x63, 0x5e, 0x9c, 0xc1, 0x4a, 0xfe, 0x10, 0x00, 0x00, 0x01, 0xca, 0x62, 0xb0, - 0x5f, 0x04, 0xc5, 0xf7, 0x30, 0x3e, 0x42, 0x70, 0x1d, 0x75, 0xff, 0x12, 0x18, - 0x58, 0x57, 0x46, 0x1d, 0xe4, 0xd1, 0x7e, 0x46, 0xe3, 0x33, 0x6d, 0x55, 0x44, - 0xa8, 0xbc, 0x10, 0x7c, 0xef, 0x93, 0xc6, 0x79, 0x2d, 0x01, 0xdf, 0x05, 0xe6, - 0xd5, 0x80, 0xf4, 0xd5, 0xd4, 0x8d, 0xf0, 0x42, 0x45, 0x1a, 0x33, 0x59, 0x0d, - 0x3e, 0x8c, 0xf4, 0x9b, 0x26, 0x27, 0x21, 0x8f, 0x0c, 0x29, 0x2f, 0xa6, 0x6a, - 0xda, 0x94, 0x5f, 0xa5, 0x5b, 0xb2, 0x35, 0x48, 0xe3, 0x3a, 0x83, 0xa5, 0x62, - 0x95, 0x7a, 0x31, 0x49, 0xa9, 0x93, 0xcc, 0x47, 0x23, 0x62, 0x29, 0x87, 0x36, - 0xa8, 0xb7, 0x00, 0x60, 0x95, 0x4e, 0x8c, 0x03, 0x40, 0x01, 0x00, 0x10, 0x26, - 0x21, 0xa9, 0xc9, 0xac, 0xcb, 0x78, 0x2e, 0x9e, 0x4a, 0x5f, 0xa8, 0x7f, 0x0a, - 0x95, 0x6f, 0x5b, 0x85, 0x50, 0x99, 0x60, 0x28, 0x5c, 0x22, 0x62, 0x7c, 0x59, - 0x48, 0x3a, 0x5a, 0x4c, 0x78, 0xd9, 0x7c, 0xe4, 0x23, 0x01, 0x3d, 0x64, 0xb3, - 0x2c, 0xd1, 0x72, 0xef, 0xa5, 0x51, 0xbf, 0x7f, 0x36, 0x8f, 0x04, 0xbd, 0xae, - 0xc6, 0x09, 0x1a, 0x30, 0x04, 0xa7, 0x57, 0x59, 0x8b, 0x80, 0x1d, 0xcf, 0x67, - 0x5c, 0xb8, 0x3e, 0x43, 0xa5, 0x3a, 0xe8, 0xb2, 0x54, 0xd3, 0x33, 0xbc, 0xda, - 0x20, 0xd4, 0x81, 0x7d, 0x34, 0x77, 0xab, 0xfb, 0xa2, 0x5b, 0xb8, 0x3d, 0xf5, - 0x94, 0x9c, 0x12, 0x6f, 0x14, 0x9b, 0x1d, 0x99, 0x34, 0x1e, 0x4e, 0x6f, 0x91, - 0x20, 0xf4, 0xd4, 0x1e, 0x62, 0x91, 0x85, 0x00, 0x2c, 0x72, 0xc0, 0x12, 0xc4, - 0x14, 0xd2, 0x38, 0x2a, 0x6d, 0x47, 0xc7, 0xb3, 0xde, 0xab, 0xa7, 0x70, 0xc4, - 0x00, 0xca, 0x96, 0xb2, 0x81, 0x4f, 0x6b, 0x26, 0xc3, 0xef, 0x17, 0x42, 0x9f, - 0x1a, 0x98, 0xc8, 0x5d, 0x83, 0xdb, 0x20, 0xef, 0xad, 0x48, 0xbe, 0x89, 0x96, - 0xfb, 0x1b, 0xff, 0x59, 0x1e, 0xff, 0xf3, 0x60, 0xfe, 0x11, 0x99, 0x05, 0x6c, - 0x56, 0xe5, 0xfe, 0xec, 0x61, 0xa7, 0xb8, 0xb9, 0xf6, 0x99, 0xd6, 0x01, 0x2c, - 0x28, 0x49, 0x23, 0x2f, 0x32, 0x9f, 0xef, 0x95, 0xc7, 0xaf, 0x37, 0x00, 0x98, - 0xff, 0xe4, 0x91, 0x8e, 0x0c, 0xa1, 0xdf, 0x47, 0xf2, 0x75, 0x86, 0x7b, 0x73, - 0x9e, 0x0a, 0x51, 0x4d, 0x32, 0x09, 0x32, 0x5e, 0x21, 0x70, 0x45, 0x92, 0x7b, - 0x47, 0x9f, 0xfa, 0xc9, 0xff, 0x29, 0xbc, 0x74, 0x39, 0xda, 0xd9, 0xcd, 0xc9, - 0x55, 0xab, 0xd2, 0xad, 0x25, 0xe8, 0xda, 0x1a, 0x6a, 0x6d, 0x2e, 0xa9, 0x96, - 0x03, 0x20, 0x50, 0xb5, 0xe8, 0x04, 0x5c, 0x54, 0x91, 0xff, 0x16, 0xbe, 0x20, - 0xa0, 0x63, 0x48, 0xce, 0x02, 0x9a, 0x5f, 0xdd, 0x3f, 0xc7, 0x11, 0x69, 0x87, - 0x23, 0xde, 0xec, 0xd2, 0xdc, 0xee, 0x36, 0x0b, 0x43, 0xbc, 0x83, 0x3b, 0x00, - 0x02, 0x6b, 0x72, 0xd5, 0x3d, 0x57, 0x0b, 0x7e, 0xa9, 0x4c, 0x67, 0x1b, 0x51, - 0xe5, 0x61, 0x2b, 0x4b, 0xc4, 0xa7, 0x57, 0xd3, 0x25, 0x93, 0xe5, 0x49, 0xb9, - 0x49, 0x2e, 0xfa, 0x28, 0x80, 0xd6, 0x5a, 0x9a, 0x62, 0x4f, 0xda, 0xf5, 0x56, - 0x07, 0xd8, 0x1a, 0xf5, 0x91, 0xb3, 0xcd, 0xa4, 0xa5, 0xce, 0xa3, 0xaa, 0x80, - 0x55, 0xa6, 0xc6, 0x14, 0x88, 0xb7, 0xf1, 0x66, 0x48, 0x1c, 0xa0, 0x04, 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x5e, + 0x3d, 0xba, 0xf7, 0xae, 0x12, 0x67, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0xae, 0x12, 0x67, 0x0d, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x01, 0x51, 0x6c, 0xf4, 0xad, 0xec, 0x75, 0x07, 0x00, 0x03, + 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, ], txid: [ - 0xcc, 0x94, 0xf0, 0xc9, 0x2b, 0x25, 0x93, 0x51, 0xca, 0xa1, 0x04, 0x00, 0xd9, - 0x1c, 0xa9, 0x6f, 0x10, 0x41, 0x51, 0xfe, 0xdd, 0x22, 0xc2, 0x8d, 0xa7, 0xb8, - 0x4f, 0x4d, 0x2b, 0x4d, 0xe7, 0x83, + 0x6b, 0xf4, 0xef, 0xe7, 0x7a, 0xf6, 0x9b, 0x72, 0x19, 0x47, 0x5f, 0x60, 0xa0, + 0xf7, 0x92, 0xdb, 0x02, 0x63, 0xe4, 0xe1, 0x2f, 0xa1, 0xd9, 0xee, 0x1a, 0x1b, + 0x9a, 0x68, 0x54, 0x05, 0x90, 0xda, ], auth_digest: [ - 0xf3, 0x16, 0xf0, 0xbb, 0x3f, 0xd8, 0x7d, 0x8e, 0x21, 0xb8, 0xd9, 0x4b, 0xbd, - 0x0d, 0x3d, 0xfd, 0xbf, 0xeb, 0xa5, 0x1b, 0xb5, 0x31, 0xfd, 0xd4, 0x4d, 0xa9, - 0x5d, 0x76, 0xca, 0xe4, 0xe9, 0x9b, + 0x99, 0x3b, 0xfc, 0xa6, 0x14, 0x99, 0x75, 0xa4, 0x01, 0x37, 0x97, 0xea, 0xd5, + 0x58, 0x39, 0xa1, 0x3a, 0x0f, 0xb1, 0x52, 0xf6, 0x83, 0x72, 0xbb, 0x0e, 0x0f, + 0xd9, 0x49, 0x94, 0x77, 0xf9, 0x03, ], amounts: vec![], script_pubkeys: vec![], transparent_input: None, sighash_shielded: [ - 0xcc, 0x94, 0xf0, 0xc9, 0x2b, 0x25, 0x93, 0x51, 0xca, 0xa1, 0x04, 0x00, 0xd9, - 0x1c, 0xa9, 0x6f, 0x10, 0x41, 0x51, 0xfe, 0xdd, 0x22, 0xc2, 0x8d, 0xa7, 0xb8, - 0x4f, 0x4d, 0x2b, 0x4d, 0xe7, 0x83, + 0x6b, 0xf4, 0xef, 0xe7, 0x7a, 0xf6, 0x9b, 0x72, 0x19, 0x47, 0x5f, 0x60, 0xa0, + 0xf7, 0x92, 0xdb, 0x02, 0x63, 0xe4, 0xe1, 0x2f, 0xa1, 0xd9, 0xee, 0x1a, 0x1b, + 0x9a, 0x68, 0x54, 0x05, 0x90, 0xda, ], sighash_all: None, sighash_none: None, @@ -6274,962 +6202,532 @@ pub mod zip_0244 { }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x0e, - 0x32, 0x23, 0xde, 0x32, 0xad, 0x21, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x01, 0xda, - 0xb5, 0xec, 0x1b, 0x05, 0x1c, 0x04, 0x00, 0x06, 0xf1, 0xea, 0x6a, 0x6a, 0x98, - 0xa0, 0xca, 0x30, 0xe6, 0x97, 0x81, 0xc4, 0x9c, 0xd3, 0xba, 0x27, 0x71, 0x02, - 0xfa, 0xff, 0x08, 0xb3, 0xaf, 0xfd, 0xc4, 0x82, 0x8f, 0x91, 0x02, 0xc9, 0xd8, - 0xfd, 0xd3, 0x06, 0x37, 0x8f, 0x02, 0x07, 0xe3, 0x6d, 0xa1, 0xd7, 0xed, 0x5e, - 0x92, 0xcb, 0x4f, 0x90, 0xba, 0x83, 0xa9, 0xe4, 0x96, 0x01, 0x31, 0xf1, 0x6f, - 0xcb, 0xb6, 0xf5, 0xd4, 0x20, 0x7e, 0xb0, 0x98, 0xb2, 0xb1, 0xfa, 0x0b, 0xc9, - 0xa0, 0x4c, 0x06, 0x97, 0x44, 0x1a, 0xd5, 0xd7, 0x03, 0xff, 0x7b, 0x13, 0x22, - 0x9a, 0x09, 0x75, 0xaa, 0x50, 0x22, 0xe8, 0xeb, 0xf5, 0xe4, 0x5c, 0xa3, 0x43, - 0x53, 0x6d, 0xd9, 0x22, 0x0a, 0xb4, 0xf8, 0xe5, 0xc2, 0x5a, 0x94, 0x62, 0xeb, - 0xcb, 0xb0, 0xfd, 0x5f, 0x14, 0x55, 0x4b, 0xc9, 0x77, 0x07, 0x8e, 0xff, 0xba, - 0x57, 0x02, 0x68, 0x4d, 0x45, 0x28, 0xf8, 0xc2, 0xbc, 0xf3, 0xec, 0x5d, 0x3b, - 0x95, 0x47, 0x53, 0x64, 0x61, 0x50, 0xfa, 0x26, 0x2c, 0x56, 0x17, 0x33, 0xf8, - 0x2e, 0x84, 0x29, 0xd6, 0xf1, 0x2f, 0x24, 0xfd, 0x36, 0x44, 0x96, 0xb3, 0xbe, - 0x08, 0x71, 0xca, 0x3d, 0xd9, 0x62, 0x53, 0x48, 0xa6, 0x14, 0xb5, 0x9b, 0xde, - 0x45, 0x88, 0x56, 0x49, 0xba, 0xe3, 0x6d, 0xe3, 0x4d, 0xef, 0x8f, 0xce, 0xc8, - 0x53, 0x43, 0x47, 0x5d, 0x97, 0x6a, 0xe1, 0xe9, 0xb2, 0x78, 0x29, 0xce, 0x2a, - 0xc5, 0xef, 0xd0, 0xb3, 0x99, 0xa8, 0xb4, 0x48, 0xbe, 0x65, 0x04, 0x29, 0x4e, - 0xe6, 0xb3, 0xc1, 0xc6, 0xa5, 0x34, 0x2d, 0x7c, 0x01, 0xae, 0x9d, 0x8a, 0xd3, - 0x07, 0x0c, 0x2b, 0x1a, 0x91, 0x57, 0x3a, 0xf5, 0xe0, 0xc5, 0xe4, 0xcb, 0xbf, - 0x4a, 0xcd, 0xc6, 0xb5, 0x4c, 0x92, 0x72, 0x20, 0x0d, 0x99, 0x70, 0x25, 0x0c, - 0x17, 0xc1, 0x03, 0x6f, 0x06, 0x08, 0x5c, 0x41, 0x85, 0x8e, 0xd3, 0xa0, 0xc4, - 0x81, 0x50, 0xbc, 0x69, 0x7e, 0x4a, 0x69, 0x5f, 0xef, 0x33, 0x5f, 0x7a, 0xd0, - 0x7e, 0x1a, 0x46, 0xdc, 0x76, 0x7f, 0xf8, 0x22, 0xdb, 0x70, 0xe6, 0x66, 0x90, - 0x80, 0xb9, 0x81, 0x6b, 0x22, 0x32, 0xc8, 0x1a, 0x4c, 0x66, 0xcc, 0x58, 0x6a, - 0xbf, 0xe1, 0xea, 0xa8, 0xca, 0x6c, 0xf4, 0x1f, 0xc3, 0xc3, 0xe6, 0xc7, 0xb8, - 0x86, 0xfb, 0x6d, 0xac, 0x9f, 0x48, 0x22, 0xb4, 0xfc, 0x6f, 0xff, 0x9d, 0x05, - 0x13, 0xd6, 0x1a, 0x21, 0xc8, 0x0a, 0x37, 0x76, 0x71, 0xd1, 0x35, 0xa6, 0x68, - 0xa0, 0xae, 0x2b, 0xb9, 0x34, 0xc8, 0x2c, 0x41, 0x42, 0xda, 0x69, 0xd1, 0x2c, - 0xa7, 0xde, 0x9a, 0x7d, 0xf7, 0x06, 0x40, 0x0e, 0xc7, 0x98, 0x78, 0xd8, 0x68, - 0xe1, 0x7e, 0x8f, 0x71, 0xea, 0x31, 0x49, 0x5a, 0xf8, 0x19, 0xa0, 0x16, 0xcc, - 0x41, 0x9e, 0x07, 0xc5, 0x01, 0xaa, 0x83, 0x09, 0xb2, 0xe6, 0xc8, 0x5b, 0x79, - 0xb2, 0x76, 0x37, 0x33, 0xa3, 0x7b, 0xbc, 0x04, 0x20, 0xd4, 0x25, 0x37, 0xb8, - 0x71, 0xb4, 0x29, 0x4a, 0x65, 0xd3, 0xe0, 0x55, 0xff, 0x71, 0x8d, 0xd9, 0xdc, - 0x8c, 0x75, 0xe7, 0xe5, 0xb2, 0xef, 0xe4, 0x42, 0x63, 0x73, 0x71, 0xb7, 0xc4, - 0x8f, 0x6e, 0xe9, 0x9e, 0x3e, 0xa3, 0x8a, 0x4b, 0x0f, 0x2f, 0x67, 0xfc, 0x2b, - 0x90, 0x8c, 0xda, 0x65, 0x7e, 0xae, 0x75, 0x4e, 0x03, 0x7e, 0x26, 0x2e, 0x9a, - 0x9f, 0x9b, 0xd7, 0xec, 0x42, 0x67, 0xed, 0x8e, 0x96, 0x93, 0x0e, 0x10, 0x84, - 0x78, 0x3c, 0x37, 0xd6, 0xf9, 0xdd, 0x15, 0xfd, 0x29, 0xf4, 0xcc, 0x47, 0x7e, - 0x66, 0xf1, 0x30, 0xd6, 0x30, 0x43, 0x0d, 0xcc, 0x01, 0x04, 0x89, 0x9b, 0x4f, - 0x9f, 0x46, 0xeb, 0x09, 0x0e, 0xf7, 0xfc, 0x90, 0xb4, 0x79, 0xab, 0xf6, 0x1f, - 0x93, 0x95, 0x5e, 0xe0, 0x0e, 0x6a, 0x18, 0x48, 0xf1, 0xab, 0x14, 0xad, 0x33, - 0x4f, 0x2b, 0x68, 0x03, 0x58, 0x08, 0xcd, 0xf1, 0xbb, 0x9e, 0x9d, 0x9a, 0x81, - 0x6b, 0xaf, 0x72, 0x8a, 0x95, 0x5b, 0x96, 0x0b, 0x77, 0x01, 0xfa, 0x62, 0x66, - 0x87, 0xdc, 0x3c, 0x9c, 0xba, 0x64, 0x63, 0x37, 0xb5, 0x3e, 0x29, 0x81, 0x6e, - 0x94, 0x82, 0xdd, 0xf5, 0x57, 0x8a, 0x87, 0x68, 0xaa, 0xe4, 0x77, 0xfc, 0xe4, - 0x10, 0xac, 0x2d, 0x5d, 0xe6, 0x09, 0x58, 0x61, 0xc1, 0x11, 0xd7, 0xfe, 0xb3, - 0xe6, 0xbb, 0x4f, 0xbb, 0x5a, 0x54, 0x95, 0x54, 0x95, 0x97, 0x27, 0x98, 0x35, - 0x0a, 0x25, 0x3f, 0x05, 0xf6, 0x6c, 0x2e, 0xcf, 0xcb, 0xc0, 0xed, 0x43, 0xf5, - 0xec, 0x2e, 0x6d, 0x8d, 0xba, 0x15, 0xa5, 0x12, 0x54, 0xd9, 0x7b, 0x18, 0x21, - 0x10, 0x7c, 0x07, 0xdd, 0x9a, 0x16, 0xef, 0x84, 0x06, 0xf9, 0x43, 0xe2, 0x82, - 0xb9, 0x5d, 0x4b, 0x36, 0x25, 0x30, 0xc9, 0x13, 0xd6, 0xba, 0x42, 0x1d, 0xf6, - 0x02, 0x7d, 0xe5, 0xaf, 0x1e, 0x47, 0x45, 0xd5, 0x86, 0x81, 0x06, 0x95, 0x4b, - 0xe6, 0xc1, 0x96, 0x27, 0x80, 0xa2, 0x94, 0x10, 0x72, 0xe9, 0x51, 0x31, 0xb1, - 0x67, 0x9d, 0xf0, 0x63, 0x76, 0x25, 0x04, 0x2c, 0x37, 0xd4, 0x8f, 0xfb, 0x15, - 0x2e, 0x5e, 0xbc, 0x18, 0x5c, 0x8a, 0x2b, 0x7d, 0x43, 0x85, 0xf1, 0xc9, 0x5a, - 0xf9, 0x37, 0xdf, 0x78, 0xdf, 0xd8, 0x75, 0x7f, 0xab, 0x43, 0x49, 0x68, 0xb0, - 0xb5, 0x7c, 0x66, 0x57, 0x44, 0x68, 0xf1, 0x60, 0xb4, 0x47, 0xac, 0x82, 0x21, - 0xe5, 0x06, 0x06, 0x76, 0xa8, 0x42, 0xa1, 0xc6, 0xb7, 0x17, 0x2d, 0xd3, 0x34, - 0x0f, 0x76, 0x40, 0x70, 0xab, 0x1f, 0xe0, 0x91, 0xc5, 0xc7, 0x4c, 0x95, 0xa5, - 0xdc, 0x04, 0x33, 0x90, 0x72, 0x3a, 0x4c, 0x12, 0x7d, 0xa1, 0x4c, 0xdd, 0xe1, - 0xdc, 0x26, 0x75, 0xa6, 0x23, 0x40, 0xb3, 0xe6, 0xaf, 0xd0, 0x52, 0x2a, 0x31, - 0xde, 0x26, 0xe7, 0xd1, 0xec, 0x3a, 0x9c, 0x8a, 0x09, 0x1f, 0xfd, 0xc7, 0x5b, - 0x7e, 0xcf, 0xdc, 0x7c, 0x12, 0x99, 0x5a, 0x5e, 0x37, 0xce, 0x34, 0x88, 0xbd, - 0x29, 0xf8, 0x62, 0x9d, 0x68, 0xf6, 0x96, 0x49, 0x24, 0x48, 0xdd, 0x52, 0x66, - 0x97, 0x47, 0x6d, 0xc0, 0x61, 0x34, 0x6e, 0xbe, 0x3f, 0x67, 0x72, 0x17, 0xff, - 0x9c, 0x60, 0xef, 0xce, 0x94, 0x3a, 0x00, 0x2e, 0xb9, 0xea, 0x07, 0xff, 0xce, - 0x04, 0x00, 0xc4, 0x9c, 0x60, 0x7f, 0xae, 0x20, 0xcb, 0x37, 0x80, 0xe3, 0x60, - 0x1f, 0xc0, 0x62, 0x58, 0x3b, 0x27, 0x44, 0xea, 0x88, 0x48, 0xb2, 0x62, 0x3a, - 0xc0, 0x7f, 0x8e, 0xf6, 0x1a, 0x81, 0xa3, 0x19, 0x30, 0xb8, 0xa1, 0xba, 0xf3, - 0x9a, 0x91, 0x9a, 0x7b, 0x60, 0xbc, 0x60, 0x4d, 0x63, 0x18, 0x5f, 0x75, 0x92, - 0x21, 0xd8, 0x47, 0xcc, 0x54, 0xa2, 0x27, 0x65, 0xa4, 0xc3, 0x34, 0x75, 0xb5, - 0x79, 0x1e, 0x9a, 0xf3, 0x27, 0x1f, 0xc8, 0xd9, 0x35, 0x06, 0x67, 0x09, 0x0d, - 0x81, 0x84, 0xec, 0x50, 0x52, 0x7d, 0x33, 0xa3, 0xa8, 0x40, 0x72, 0xb4, 0x73, - 0x7b, 0x32, 0xc7, 0x9a, 0x46, 0x40, 0x6c, 0x16, 0x9d, 0xf8, 0x59, 0xfb, 0x28, - 0x15, 0x4b, 0x01, 0x4c, 0xaf, 0xb7, 0xa3, 0xea, 0x7a, 0x21, 0x2e, 0x40, 0x17, - 0x2a, 0xf2, 0x18, 0xd7, 0xa1, 0xec, 0xfe, 0x65, 0xb4, 0xf7, 0x51, 0x00, 0x63, - 0x89, 0x83, 0xc1, 0x4d, 0xe4, 0x97, 0x47, 0x55, 0xda, 0xde, 0x80, 0x18, 0xc9, - 0xb8, 0xf4, 0x54, 0x3f, 0xf3, 0xc3, 0xfd, 0x86, 0x70, 0xc0, 0xbf, 0xbb, 0x3b, - 0x2c, 0x5d, 0xb8, 0x82, 0x3a, 0x6c, 0x8a, 0xe8, 0x2c, 0x45, 0xd1, 0x00, 0xbf, - 0x1c, 0xda, 0xdc, 0xb1, 0x11, 0x6e, 0xae, 0x3d, 0xb1, 0x00, 0x82, 0xd9, 0x3f, - 0xd2, 0x48, 0x04, 0x0d, 0xa9, 0x7d, 0x35, 0x43, 0x84, 0x3b, 0x86, 0xbf, 0x26, - 0x02, 0x1a, 0xfa, 0x92, 0x23, 0x9b, 0x87, 0x3d, 0xc6, 0xc3, 0x57, 0xea, 0xa8, - 0xaf, 0x4e, 0x26, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0xff, + 0x6a, 0xcc, 0x0f, 0xfc, 0x2e, 0x49, 0x0d, 0x03, 0x14, 0x6b, 0x9d, 0x49, 0xdd, + 0x8c, 0x78, 0x35, 0xf4, 0x3a, 0x37, 0xdc, 0xa0, 0x78, 0x7e, 0x3e, 0xc9, 0xf6, + 0x60, 0x52, 0x23, 0xd5, 0xba, 0x7a, 0xe0, 0xab, 0x90, 0x25, 0xb7, 0x3b, 0xc0, + 0x3f, 0x7f, 0xac, 0x36, 0xc0, 0x09, 0x63, 0x63, 0x63, 0x63, 0x51, 0x00, 0x63, + 0x53, 0x65, 0xbc, 0xa7, 0xe5, 0x4c, 0xc1, 0xa1, 0x2d, 0x12, 0x7b, 0x57, 0xc8, + 0x13, 0x89, 0x76, 0xe7, 0x91, 0x01, 0x3b, 0x01, 0x5f, 0x06, 0xa6, 0x24, 0xf5, + 0x21, 0xb6, 0xee, 0x04, 0xec, 0x98, 0x08, 0x93, 0xc7, 0xe5, 0xe0, 0x1a, 0x33, + 0x62, 0x03, 0x59, 0x04, 0xac, 0x00, 0x00, 0x53, 0xd7, 0x44, 0x5f, 0xe2, 0xd0, + 0x91, 0x30, 0xf6, 0x35, 0x11, 0xda, 0x54, 0x83, 0x2d, 0xe9, 0x13, 0x6b, 0x39, + 0xf4, 0x59, 0x9f, 0x5a, 0xa5, 0xdf, 0xbb, 0x45, 0xda, 0x60, 0xcd, 0xce, 0xab, + 0x7e, 0xef, 0xde, 0x89, 0xbe, 0x63, 0xf3, 0xf7, 0xc0, 0x04, 0x52, 0x00, 0x6a, + 0xac, 0xe1, 0x40, 0x5d, 0xef, 0x02, 0x44, 0xfd, 0x7f, 0x99, 0xb6, 0x7d, 0x04, + 0x00, 0x04, 0x63, 0x00, 0x63, 0xac, 0x12, 0xf6, 0x46, 0x50, 0x73, 0xe1, 0x02, + 0x00, 0x09, 0x63, 0x6a, 0x53, 0x51, 0x52, 0x00, 0x65, 0xac, 0x65, 0x00, 0x00, + 0x00, ], txid: [ - 0xa3, 0x54, 0xb0, 0x9c, 0x01, 0x97, 0x84, 0x78, 0x0a, 0x7f, 0xd7, 0xa1, 0xb5, - 0xbd, 0xc7, 0xf3, 0x36, 0xcf, 0x41, 0x82, 0x8a, 0xf1, 0x35, 0xf2, 0xdd, 0x97, - 0x94, 0x65, 0x48, 0x45, 0x3f, 0xf0, + 0xbc, 0x34, 0xe5, 0xca, 0x58, 0x1c, 0x5c, 0x65, 0x44, 0xaa, 0xfb, 0x3e, 0x58, + 0x65, 0x34, 0x8f, 0x71, 0xb8, 0xaa, 0x2a, 0x78, 0x2d, 0xf8, 0xb6, 0xbf, 0xa1, + 0x79, 0x1b, 0xf5, 0xa7, 0x37, 0x58, ], auth_digest: [ - 0x50, 0xe4, 0x62, 0x5a, 0xd9, 0xcd, 0x1a, 0x79, 0x24, 0x3f, 0xf2, 0xd1, 0xed, - 0xcf, 0xba, 0xf1, 0x19, 0x9a, 0xdc, 0xd1, 0xd4, 0xe9, 0x9d, 0x50, 0x73, 0x43, - 0x3c, 0x66, 0xa4, 0xa6, 0x61, 0x15, + 0x6c, 0x36, 0xbc, 0x25, 0xfc, 0x48, 0x56, 0xe5, 0x09, 0x8e, 0x5d, 0x33, 0x03, + 0x3c, 0x5b, 0x38, 0x75, 0x21, 0x7f, 0xcb, 0x45, 0x52, 0x61, 0x18, 0xbb, 0x05, + 0x8a, 0x2d, 0xd7, 0xb6, 0xea, 0x5e, ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, + amounts: vec![1848924248978091, 447389782351145, 620151782842275], + script_pubkeys: vec![vec![0xac, 0x00, 0x00], vec![0x65, 0x65], vec![]], + transparent_input: Some(0), sighash_shielded: [ - 0xa3, 0x54, 0xb0, 0x9c, 0x01, 0x97, 0x84, 0x78, 0x0a, 0x7f, 0xd7, 0xa1, 0xb5, - 0xbd, 0xc7, 0xf3, 0x36, 0xcf, 0x41, 0x82, 0x8a, 0xf1, 0x35, 0xf2, 0xdd, 0x97, - 0x94, 0x65, 0x48, 0x45, 0x3f, 0xf0, + 0xa9, 0x60, 0xf4, 0xba, 0xa5, 0xf4, 0x33, 0x1f, 0x4d, 0xad, 0xc3, 0x74, 0x56, + 0x6b, 0xc0, 0x47, 0xe7, 0xc0, 0x71, 0x53, 0xb0, 0x38, 0x5a, 0x58, 0x7a, 0x2b, + 0xe8, 0x6a, 0x51, 0x8a, 0xb5, 0xd3, ], - sighash_all: None, - sighash_none: None, - sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, - sighash_single_anyone: None, + sighash_all: Some([ + 0x8f, 0x60, 0x76, 0x56, 0xc5, 0x2d, 0x9a, 0xd2, 0x23, 0x11, 0x20, 0xc2, 0x4f, + 0xaa, 0x7b, 0x68, 0x55, 0xae, 0x57, 0x1b, 0xee, 0x46, 0xe6, 0x1d, 0x76, 0xa2, + 0x5c, 0xff, 0xb2, 0xbb, 0x4f, 0xcb, + ]), + sighash_none: Some([ + 0xfd, 0xcf, 0x8a, 0x04, 0x69, 0x0d, 0xc2, 0x76, 0x9d, 0x93, 0x43, 0x37, 0xfe, + 0x8b, 0x47, 0x24, 0x2a, 0x6e, 0xd7, 0xc9, 0xd8, 0x6d, 0x3e, 0x01, 0x33, 0x24, + 0x84, 0xd3, 0x8d, 0x71, 0xe7, 0x85, + ]), + sighash_single: Some([ + 0xb3, 0xa2, 0x8e, 0xbd, 0x7c, 0xf3, 0x7a, 0x44, 0x3a, 0x40, 0x90, 0x9f, 0x51, + 0x3f, 0x08, 0x1f, 0xbe, 0x0f, 0xd7, 0x8c, 0x67, 0xf7, 0xc4, 0xf0, 0x1b, 0x5f, + 0xb1, 0x15, 0x97, 0x89, 0x86, 0x1a, + ]), + sighash_all_anyone: Some([ + 0x62, 0xea, 0xda, 0x92, 0xbb, 0xc5, 0xaf, 0x09, 0xab, 0x7b, 0x95, 0x83, 0x4a, + 0xe6, 0xba, 0x41, 0x3b, 0x17, 0xcd, 0xf1, 0x96, 0xa6, 0xf9, 0x9c, 0x54, 0x1b, + 0x71, 0x0d, 0xda, 0xcf, 0xa5, 0x45, + ]), + sighash_none_anyone: Some([ + 0xdf, 0xf0, 0xeb, 0x1e, 0x03, 0xb9, 0xc2, 0xfe, 0x30, 0x1d, 0xb9, 0xb0, 0x18, + 0x35, 0x83, 0x61, 0x88, 0x93, 0xc8, 0x47, 0x4e, 0xf5, 0x65, 0x92, 0x1d, 0x5f, + 0x28, 0x32, 0xed, 0xe3, 0xbf, 0x49, + ]), + sighash_single_anyone: Some([ + 0x1d, 0xe6, 0x07, 0xf1, 0x88, 0xa4, 0x0b, 0x5c, 0x15, 0x22, 0x26, 0xd9, 0x4e, + 0x44, 0x41, 0x1b, 0x69, 0x02, 0x94, 0x7d, 0x42, 0xfb, 0xb2, 0x5f, 0xb8, 0x6c, + 0x9a, 0x4e, 0x77, 0xa4, 0xf3, 0x5b, + ]), }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x05, - 0x40, 0x65, 0x7f, 0xe3, 0x29, 0x14, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0xe3, 0x29, 0x14, 0x10, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x23, + 0xe1, 0x19, 0xf6, 0x35, 0xef, 0x1d, 0x05, 0x02, 0x4b, 0x21, 0x6b, 0x70, 0x23, + 0xfa, 0xdc, 0x2d, 0x25, 0x94, 0x9c, 0x90, 0x03, 0x7e, 0x71, 0xe3, 0xe5, 0x50, + 0x72, 0x6d, 0x21, 0x0a, 0x2c, 0x68, 0x83, 0x42, 0xe5, 0x24, 0x40, 0x63, 0x5e, + 0x9c, 0xc1, 0x4a, 0xfe, 0x10, 0x06, 0x65, 0x51, 0x51, 0x51, 0xac, 0x53, 0x78, + 0x2e, 0x9e, 0x4a, 0x5f, 0xa8, 0x7f, 0x0a, 0x95, 0x6f, 0x5b, 0x85, 0x50, 0x99, + 0x60, 0x28, 0x5c, 0x22, 0x62, 0x7c, 0x59, 0x48, 0x3a, 0x5a, 0x4c, 0x28, 0xcc, + 0xe4, 0xb1, 0x56, 0xe5, 0x51, 0x40, 0x6a, 0x7e, 0xe8, 0x35, 0x56, 0x56, 0xa2, + 0x00, 0x43, 0xe3, 0x8c, 0xe1, 0x03, 0xbd, 0x9a, 0x27, 0x4e, 0x28, 0x8d, 0x02, + 0x00, 0x00, 0xaa, 0xfe, 0x03, 0x32, 0x52, 0xc7, 0x03, 0x00, 0x05, 0x51, 0x6a, + 0x63, 0x65, 0x63, 0x38, 0xeb, 0x8b, 0x41, 0xca, 0x51, 0x04, 0x00, 0x06, 0x53, + 0x51, 0x63, 0x65, 0xac, 0xac, 0x00, 0x00, 0x00, ], txid: [ - 0x7d, 0x3f, 0x83, 0x49, 0xa5, 0x1c, 0xb7, 0xd7, 0x97, 0x3e, 0x82, 0x16, 0x96, - 0xac, 0x6a, 0xc0, 0x5a, 0xc7, 0xb6, 0xde, 0x88, 0x18, 0xe8, 0x98, 0x36, 0x3d, - 0x19, 0x24, 0x93, 0x26, 0xbb, 0x16, + 0x90, 0xd2, 0x88, 0x6c, 0xb6, 0x28, 0x81, 0x33, 0x71, 0xc7, 0xd1, 0xbd, 0x02, + 0x03, 0x1b, 0x6c, 0xa6, 0x6b, 0x42, 0xd1, 0xdb, 0x4e, 0x11, 0x8d, 0x65, 0xf3, + 0x1b, 0x2d, 0xcc, 0xb6, 0x32, 0x35, ], auth_digest: [ - 0xdd, 0x6d, 0x69, 0x23, 0xbd, 0xba, 0xa3, 0xd4, 0x3d, 0xd9, 0x78, 0xcd, 0xc9, - 0x7f, 0x61, 0x9d, 0x7f, 0x45, 0xae, 0x88, 0x50, 0x88, 0x94, 0x95, 0x2f, 0x68, - 0xd1, 0xb8, 0x76, 0x4c, 0x0a, 0x96, - ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, - sighash_shielded: [ - 0x7d, 0x3f, 0x83, 0x49, 0xa5, 0x1c, 0xb7, 0xd7, 0x97, 0x3e, 0x82, 0x16, 0x96, - 0xac, 0x6a, 0xc0, 0x5a, 0xc7, 0xb6, 0xde, 0x88, 0x18, 0xe8, 0x98, 0x36, 0x3d, - 0x19, 0x24, 0x93, 0x26, 0xbb, 0x16, - ], - sighash_all: None, - sighash_none: None, - sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, - sighash_single_anyone: None, - }, - TestVector { - tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x5d, - 0x98, 0xf6, 0x8b, 0xd3, 0x7d, 0xe8, 0x17, 0x01, 0x08, 0xcc, 0xd8, 0x8d, 0x0c, - 0x81, 0x1e, 0x4c, 0x31, 0xfb, 0xb4, 0x9f, 0x3a, 0x90, 0xbb, 0xd0, 0x5d, 0xce, - 0x62, 0xf3, 0x44, 0xe7, 0x07, 0x75, 0x93, 0x15, 0x9a, 0xe3, 0x50, 0x50, 0xb0, - 0x4c, 0x9e, 0x6b, 0x86, 0xbc, 0x07, 0x63, 0x00, 0x00, 0x00, 0x6a, 0xac, 0x00, - 0x18, 0xca, 0x5b, 0x69, 0x03, 0x58, 0x02, 0x2f, 0x30, 0xa4, 0xa2, 0x06, 0x00, - 0x00, 0xa9, 0x9f, 0x39, 0x53, 0x35, 0x48, 0x05, 0x00, 0x06, 0xac, 0x63, 0x51, - 0x63, 0x53, 0x51, 0x6c, 0x56, 0x73, 0xeb, 0x90, 0xb1, 0x03, 0x00, 0x02, 0x63, - 0x00, 0x00, 0x00, 0x04, 0xa5, 0x48, 0x20, 0xe4, 0x12, 0xed, 0x0e, 0x91, 0x30, - 0x8a, 0x87, 0x77, 0x73, 0xa9, 0x87, 0xf5, 0x8b, 0xef, 0x52, 0x4f, 0x26, 0x3a, - 0xf3, 0x71, 0x85, 0x23, 0x7a, 0x25, 0x7d, 0xb6, 0xac, 0x91, 0x18, 0xb3, 0xb3, - 0x5d, 0x2f, 0xf8, 0x5b, 0x6f, 0xf6, 0x3a, 0xb9, 0x22, 0x77, 0x33, 0xe2, 0xea, - 0x03, 0x16, 0xfc, 0xbb, 0x05, 0x24, 0xc9, 0xca, 0x50, 0x74, 0x15, 0x6c, 0xc5, - 0xa5, 0xd6, 0x3e, 0x8e, 0x01, 0x99, 0x8a, 0x4a, 0x9b, 0x12, 0x44, 0xee, 0x6c, - 0xdd, 0xfd, 0x26, 0x74, 0x84, 0x1b, 0x16, 0x65, 0x48, 0xdc, 0x1c, 0xa1, 0x9d, - 0x1a, 0xa9, 0xb8, 0xff, 0x73, 0x6c, 0x22, 0x47, 0xb4, 0xed, 0x8d, 0xfe, 0x73, - 0x69, 0x03, 0xd7, 0x56, 0x2c, 0xde, 0xa6, 0x9f, 0xa7, 0x3e, 0x2e, 0x19, 0xc5, - 0x54, 0x95, 0x52, 0x10, 0xf1, 0xeb, 0x0d, 0x08, 0x59, 0x9e, 0xa7, 0x7d, 0x5f, - 0x97, 0x0d, 0xf1, 0x25, 0x40, 0x18, 0xec, 0xfb, 0xfc, 0x08, 0xe7, 0xef, 0x3a, - 0xab, 0x3b, 0xea, 0xa4, 0x67, 0xce, 0x0c, 0xd2, 0xf7, 0x7f, 0x7b, 0x9d, 0xd2, - 0xef, 0xe9, 0x08, 0x29, 0xae, 0x8f, 0x28, 0x07, 0x7d, 0x88, 0x01, 0x73, 0xb6, - 0x40, 0xf2, 0xdd, 0xb7, 0x4d, 0x06, 0x8e, 0xcb, 0x46, 0xcf, 0x28, 0x9b, 0x7d, - 0x89, 0x13, 0x07, 0xbb, 0xa3, 0x70, 0x54, 0xcf, 0x91, 0xb3, 0x1f, 0xc8, 0x2f, - 0x74, 0xd5, 0xfc, 0xc0, 0x00, 0x94, 0x2e, 0xde, 0x91, 0x18, 0x25, 0xf5, 0x3f, - 0xe6, 0x09, 0x68, 0x6f, 0x46, 0x32, 0x23, 0xb1, 0xe9, 0xbc, 0x03, 0xbd, 0xe8, - 0x95, 0xd1, 0x23, 0x8f, 0xad, 0x04, 0xa3, 0xbf, 0xce, 0x68, 0xa0, 0x75, 0xe8, - 0xa3, 0x7c, 0x0e, 0x87, 0xbf, 0x46, 0xdd, 0x01, 0x55, 0x45, 0xf9, 0xb4, 0xfb, - 0x0e, 0xec, 0x64, 0x5f, 0xfc, 0xbb, 0xe0, 0xca, 0x5f, 0x8c, 0x56, 0x1b, 0x25, - 0x7d, 0x52, 0xd6, 0x02, 0xd8, 0xc9, 0x4c, 0x50, 0x28, 0x73, 0xa0, 0x1d, 0x92, - 0x51, 0xd8, 0xc8, 0x60, 0xc0, 0x41, 0x52, 0x5b, 0x3b, 0xf4, 0xe3, 0xa2, 0xeb, - 0x92, 0x72, 0x81, 0x5c, 0x75, 0x86, 0x76, 0x84, 0x28, 0xb4, 0xc2, 0xb2, 0x5e, - 0x37, 0x45, 0xf0, 0x09, 0xc5, 0xdc, 0xe2, 0x0b, 0x69, 0xd5, 0xd7, 0xc4, 0x3c, - 0xeb, 0x73, 0x6b, 0x68, 0x31, 0xe8, 0xc1, 0x10, 0xf1, 0x6c, 0xfd, 0xb3, 0xa4, - 0x67, 0xe9, 0x41, 0x4c, 0x00, 0xec, 0xf1, 0x37, 0x31, 0x50, 0x08, 0x94, 0x55, - 0x56, 0x78, 0xc4, 0x97, 0xfa, 0xba, 0x9a, 0x95, 0xd0, 0x1c, 0xc4, 0x64, 0x39, - 0x0f, 0xc4, 0xa7, 0x6b, 0xfa, 0x8b, 0x0e, 0x1c, 0x68, 0xa5, 0x25, 0xd7, 0x06, - 0xd6, 0x60, 0x4b, 0x23, 0x30, 0xb6, 0xb3, 0x48, 0x52, 0x15, 0xf6, 0x06, 0xf1, - 0x88, 0x3a, 0x75, 0x15, 0x88, 0xc7, 0xef, 0xa5, 0x06, 0xc3, 0xe8, 0xd0, 0xc6, - 0x01, 0x92, 0xe8, 0x47, 0x6b, 0xd1, 0x17, 0x5d, 0x95, 0x62, 0x08, 0x7b, 0xdb, - 0x81, 0x8e, 0x66, 0x21, 0x62, 0x86, 0xba, 0xfe, 0x47, 0xff, 0x4d, 0xbc, 0xce, - 0xd5, 0x14, 0x44, 0x48, 0x0a, 0x9a, 0x56, 0x73, 0xec, 0xe7, 0xfa, 0xc7, 0x3a, - 0x0e, 0xd4, 0x1a, 0xb0, 0x05, 0x17, 0x53, 0xa7, 0xca, 0xa8, 0x9b, 0xe3, 0x13, - 0x9a, 0xfd, 0x97, 0x93, 0xb3, 0xe0, 0x2f, 0x27, 0xf0, 0x40, 0x04, 0x65, 0x95, - 0xac, 0xd4, 0x7b, 0xf1, 0x3f, 0xd0, 0xda, 0x27, 0xf0, 0x9e, 0xda, 0x48, 0x03, - 0x6d, 0x3e, 0xe4, 0x37, 0xf2, 0xee, 0x8f, 0x86, 0x06, 0xea, 0x97, 0x34, 0x3c, - 0x33, 0x58, 0x46, 0x57, 0xf4, 0x6d, 0xba, 0x99, 0xdb, 0x5c, 0xfe, 0x6c, 0xa1, - 0x76, 0xfa, 0xb7, 0xb0, 0xf3, 0xbf, 0xa0, 0xab, 0x61, 0xe3, 0x40, 0xc3, 0x4e, - 0xb9, 0xf1, 0x7c, 0x7e, 0xc2, 0xbe, 0x03, 0xb1, 0x80, 0xf0, 0xbb, 0x6f, 0x43, - 0x4c, 0x2a, 0x65, 0x42, 0xe0, 0x0e, 0x84, 0x37, 0x3f, 0x4f, 0x46, 0x49, 0xcd, - 0xa3, 0x2b, 0xf6, 0x86, 0x66, 0x61, 0x43, 0xf6, 0x22, 0xaa, 0x48, 0x04, 0x60, - 0xb5, 0xaf, 0xac, 0x51, 0x86, 0x07, 0xcd, 0x9a, 0xf8, 0xbc, 0xd6, 0xb5, 0x8c, - 0x30, 0x12, 0x73, 0x16, 0xb2, 0x5d, 0x5e, 0xa7, 0xbf, 0x6b, 0x0c, 0xab, 0x85, - 0x42, 0xff, 0x69, 0xd9, 0xb2, 0xf1, 0x80, 0xbe, 0x12, 0xed, 0x75, 0x34, 0x4a, - 0x39, 0x5a, 0xa1, 0x0f, 0x85, 0x2f, 0x08, 0x3a, 0xd6, 0x4e, 0xf4, 0x0e, 0x9c, - 0x03, 0x09, 0xe9, 0xbb, 0xa5, 0x4b, 0x8c, 0xb3, 0x3c, 0x95, 0x49, 0x8a, 0x69, - 0x53, 0x8d, 0x3a, 0xe5, 0xb2, 0x5e, 0x24, 0x70, 0x98, 0x30, 0x6f, 0xa8, 0xc7, - 0x4a, 0x8e, 0xe5, 0xbc, 0xa9, 0x41, 0x53, 0x1d, 0x61, 0xaa, 0xc2, 0x7a, 0xab, - 0x3d, 0xc5, 0x61, 0x7d, 0x56, 0x06, 0xc9, 0x57, 0x7a, 0x2a, 0x83, 0x46, 0xe8, - 0xd8, 0x5b, 0x32, 0xb8, 0x50, 0x57, 0x75, 0x10, 0x8d, 0xc8, 0x5e, 0x2a, 0xde, - 0x2e, 0xac, 0x1e, 0x63, 0x6e, 0x1a, 0xf4, 0x05, 0x4c, 0x8b, 0x6f, 0x57, 0x63, - 0x2d, 0xf2, 0x69, 0xc3, 0x72, 0x3b, 0x32, 0x08, 0x72, 0xe4, 0xc5, 0x7b, 0x21, - 0x83, 0x58, 0xdc, 0x7e, 0x99, 0x05, 0xbb, 0x04, 0xed, 0xf9, 0x2e, 0xdf, 0x0d, - 0xf6, 0x35, 0xf3, 0xbf, 0x36, 0x1e, 0x57, 0xa1, 0x32, 0x96, 0xe1, 0x44, 0x7a, - 0xf5, 0x08, 0x78, 0x72, 0xd6, 0x36, 0xe2, 0x75, 0x18, 0xa9, 0x87, 0x6e, 0x15, - 0xeb, 0x01, 0xf5, 0xe8, 0xde, 0xd8, 0x18, 0x92, 0x51, 0x1c, 0xc2, 0x85, 0x1b, - 0x00, 0xb8, 0x32, 0x71, 0x2a, 0x6d, 0x3b, 0xa5, 0x66, 0x65, 0x17, 0xbc, 0xd3, - 0x56, 0x76, 0x21, 0xa7, 0xcf, 0x84, 0x45, 0x58, 0x96, 0x53, 0x26, 0x20, 0x20, - 0xc3, 0x3b, 0xf7, 0x80, 0x31, 0xb8, 0xee, 0x07, 0x07, 0xde, 0x07, 0x20, 0x68, - 0xc1, 0x70, 0x57, 0x03, 0x27, 0xe6, 0xd9, 0xf5, 0xc6, 0xdd, 0xc3, 0x35, 0x40, - 0x2e, 0xfc, 0x54, 0x88, 0x62, 0xf5, 0xa0, 0x70, 0x94, 0xfd, 0x42, 0x8a, 0x7b, - 0xbc, 0x15, 0xd7, 0xb3, 0x8d, 0x05, 0x36, 0x2c, 0x9c, 0xa9, 0x85, 0xf5, 0x8a, - 0x76, 0x64, 0x7d, 0x2b, 0xe4, 0xc2, 0xcd, 0x6b, 0x3d, 0x17, 0xd6, 0x87, 0x09, - 0x71, 0xd7, 0xa0, 0x98, 0xba, 0xf7, 0x2c, 0x6f, 0x6f, 0x12, 0x14, 0xcf, 0x1f, - 0xaa, 0xe4, 0x88, 0xbd, 0x7d, 0xe2, 0x59, 0xd3, 0x41, 0x5c, 0x2f, 0x3f, 0x6d, - 0x8b, 0xf6, 0x20, 0x2b, 0x51, 0x1e, 0xeb, 0x74, 0xaa, 0xa9, 0xc9, 0x85, 0x87, - 0x5f, 0x00, 0x62, 0xaf, 0x8a, 0x28, 0x40, 0xd5, 0x29, 0xca, 0xbb, 0xb0, 0x6f, - 0xf4, 0x3f, 0x4f, 0x19, 0x4c, 0xb1, 0xc7, 0xc9, 0x58, 0xcf, 0x62, 0x07, 0x40, - 0x4a, 0x24, 0xf8, 0xa4, 0x34, 0x23, 0x85, 0xaa, 0x8c, 0xff, 0x6a, 0x37, 0x6e, - 0x1f, 0x37, 0x2e, 0xac, 0x6a, 0xc4, 0xe4, 0x6c, 0xc0, 0x14, 0xd2, 0x0a, 0x8e, - 0x46, 0xbd, 0x54, 0xf7, 0xc4, 0x5d, 0xf3, 0xa9, 0x83, 0x4f, 0x77, 0xab, 0x7d, - 0x24, 0x96, 0x63, 0xa7, 0xd2, 0xa0, 0xcd, 0xe3, 0x62, 0xbd, 0x8c, 0x40, 0x41, - 0xe7, 0x92, 0x1e, 0x99, 0xe9, 0x30, 0xc8, 0xea, 0xde, 0xd5, 0x81, 0x0d, 0xac, - 0x92, 0x90, 0x03, 0x9e, 0x22, 0x3c, 0x80, 0x2c, 0xbc, 0xb6, 0xb5, 0x8c, 0x1b, - 0xa7, 0xed, 0x5e, 0xac, 0xfa, 0x76, 0x41, 0x4a, 0x01, 0xeb, 0x7c, 0xd8, 0x5f, - 0xbd, 0x86, 0x8b, 0xa5, 0xef, 0xe1, 0xc4, 0x16, 0x7f, 0x28, 0x08, 0x91, 0x77, - 0xc8, 0x0d, 0x72, 0xf0, 0xb8, 0xcd, 0xca, 0x3c, 0x29, 0x74, 0x24, 0x9a, 0x71, - 0x9a, 0xb1, 0xd8, 0x0a, 0xe5, 0xc8, 0xce, 0xea, 0x12, 0xa1, 0x61, 0xcc, 0xbb, - 0x5e, 0xac, 0x09, 0x99, 0x0f, 0xc6, 0x19, 0xa4, 0x60, 0x80, 0x43, 0x6d, 0xbd, - 0x08, 0xd7, 0x47, 0x84, 0xaf, 0x00, 0x2d, 0x58, 0xe0, 0x6f, 0xaf, 0x7f, 0x3c, - 0xea, 0xe7, 0xd3, 0x41, 0x9b, 0x1f, 0xca, 0x26, 0x5a, 0x55, 0x59, 0xcf, 0x9e, - 0x2d, 0x3b, 0x60, 0x97, 0x8d, 0x81, 0xa6, 0x78, 0xb9, 0xed, 0x8e, 0x44, 0x86, - 0xb4, 0xd1, 0x46, 0x09, 0xd6, 0xc1, 0x27, 0xc0, 0xc2, 0xfb, 0xff, 0xe3, 0x0a, - 0x60, 0xf7, 0xbf, 0xf1, 0xd9, 0xfb, 0x83, 0x00, 0xed, 0x00, 0x92, 0x53, 0xba, - 0x9b, 0x99, 0x6f, 0xa0, 0x52, 0x41, 0xb1, 0x0f, 0x5a, 0xc9, 0xa8, 0x40, 0x8e, - 0x92, 0x5b, 0x62, 0x6b, 0xb2, 0x1a, 0x47, 0x1f, 0xe3, 0xbe, 0xde, 0x52, 0xbb, - 0xa0, 0x97, 0xb2, 0xa9, 0x9a, 0x9b, 0xa5, 0xa8, 0x66, 0x58, 0xc3, 0xfd, 0x9e, - 0xc5, 0x5b, 0xfa, 0x9b, 0x32, 0x85, 0x67, 0x25, 0x4a, 0xb3, 0x6d, 0x2c, 0x7f, - 0x44, 0xd2, 0xc7, 0xe1, 0x3e, 0xb5, 0x4b, 0xeb, 0x70, 0xea, 0x8f, 0xa9, 0x4b, - 0x6c, 0x6e, 0x01, 0x2d, 0x79, 0xe3, 0xf5, 0x36, 0x89, 0xc2, 0xb1, 0xa1, 0x8e, - 0xaf, 0x2d, 0x47, 0x1d, 0x13, 0xc1, 0xab, 0x39, 0xd9, 0x19, 0x4a, 0xe8, 0x43, - 0xab, 0x1d, 0x28, 0xff, 0xa8, 0xf6, 0x9d, 0xc7, 0xe1, 0x5c, 0xc3, 0x8b, 0x12, - 0xe8, 0xfc, 0xd7, 0x92, 0x55, 0xb7, 0x21, 0x60, 0x56, 0xd9, 0xed, 0xb7, 0x48, - 0x2f, 0xb9, 0x8a, 0xa0, 0x33, 0xb6, 0x5e, 0x51, 0xc1, 0xa0, 0x8b, 0x8a, 0x11, - 0xd8, 0x4d, 0x04, 0x09, 0xb7, 0x34, 0xf4, 0x52, 0xaa, 0xf0, 0xd6, 0xb1, 0x8f, - 0x50, 0x25, 0x86, 0x83, 0xd3, 0xf9, 0xa7, 0x6d, 0x39, 0x9f, 0xd0, 0x47, 0xee, - 0xe2, 0x88, 0xbb, 0x45, 0x85, 0x85, 0x1d, 0xc9, 0x3e, 0xcc, 0xc6, 0x23, 0x22, - 0x92, 0x4c, 0xd1, 0x3b, 0x5d, 0xd4, 0xee, 0xd6, 0x6e, 0xd8, 0xd9, 0x97, 0x2d, - 0x77, 0x26, 0x29, 0xea, 0x64, 0x74, 0x2e, 0x54, 0x73, 0x39, 0x81, 0xb0, 0x06, - 0xc0, 0x62, 0x46, 0x8e, 0x4b, 0xd8, 0xf7, 0xdd, 0x9a, 0xf6, 0x98, 0xf5, 0x2a, - 0xe8, 0x14, 0x63, 0x4e, 0x81, 0xd7, 0xf3, 0xe0, 0xc4, 0x20, 0x31, 0x7c, 0xac, - 0xa9, 0xae, 0x48, 0x11, 0xc6, 0xaf, 0x06, 0xfe, 0x80, 0xa8, 0xc0, 0x2a, 0xb7, - 0xa0, 0x0e, 0x18, 0xe4, 0xa6, 0xaa, 0x1e, 0xa1, 0xb7, 0x69, 0x45, 0xd2, 0x61, - 0x5d, 0x43, 0xac, 0x11, 0x8b, 0x56, 0xc2, 0xf2, 0x96, 0x0f, 0xe9, 0x3a, 0x02, - 0x5f, 0x13, 0xec, 0x91, 0xff, 0xc6, 0xd2, 0xc3, 0x53, 0x69, 0x9a, 0xbb, 0x09, - 0x2d, 0xed, 0xc0, 0x65, 0xdb, 0x8f, 0xa2, 0x14, 0xdb, 0xc4, 0x64, 0x66, 0xf8, - 0x97, 0xb8, 0x8c, 0x58, 0xb3, 0x01, 0x52, 0x13, 0x3a, 0xa3, 0x83, 0x1a, 0xf3, - 0x7c, 0x74, 0xd9, 0x9e, 0x9e, 0x36, 0xff, 0x70, 0x11, 0xd3, 0x23, 0x83, 0x05, - 0x69, 0x15, 0x08, 0xa2, 0xc3, 0xa4, 0x3e, 0x75, 0x5d, 0xc0, 0x81, 0xb5, 0x11, - 0xd6, 0x48, 0x2a, 0x7d, 0xb6, 0x5f, 0xa9, 0x69, 0x9e, 0xa8, 0x7f, 0xf4, 0x70, - 0x99, 0xed, 0x36, 0x37, 0xdb, 0xb0, 0xa3, 0xd0, 0xef, 0x79, 0x79, 0x6a, 0x8e, - 0xf1, 0xe4, 0xd9, 0x4d, 0x42, 0xb4, 0xbc, 0x2b, 0x4a, 0x03, 0x8a, 0xe6, 0xe4, - 0x6b, 0x24, 0xcf, 0xc8, 0x41, 0x53, 0xd3, 0x1e, 0xaf, 0x89, 0x50, 0x63, 0xa5, - 0xca, 0x95, 0x9b, 0xe6, 0x3f, 0x37, 0xf2, 0xba, 0x0d, 0x43, 0x23, 0x66, 0x73, - 0x6d, 0x86, 0x32, 0xfc, 0xe0, 0x72, 0xb6, 0xae, 0x5b, 0x6f, 0x3f, 0xd5, 0x9d, - 0x3f, 0xaf, 0xf6, 0x38, 0x27, 0x5a, 0x99, 0x2f, 0xef, 0xc8, 0x7e, 0x60, 0xd4, - 0x4c, 0x2c, 0xad, 0xc2, 0xb5, 0xc4, 0x94, 0xe3, 0xe7, 0x2e, 0xb4, 0x59, 0x7c, - 0x96, 0xb4, 0x01, 0x67, 0x79, 0x9a, 0x90, 0x01, 0xa2, 0xed, 0x36, 0x76, 0xa8, - 0xb4, 0x03, 0xae, 0x25, 0xff, 0xd7, 0x72, 0xf7, 0x08, 0x1e, 0x9a, 0x32, 0xbc, - 0xc1, 0xc5, 0xe2, 0xed, 0xd4, 0xe2, 0xa6, 0x57, 0x6b, 0x78, 0x3c, 0xce, 0x3a, - 0xae, 0x11, 0xfa, 0x43, 0x22, 0x62, 0x54, 0x88, 0x56, 0x18, 0x3e, 0xe6, 0x82, - 0xd5, 0xdc, 0x31, 0xbe, 0xb3, 0x8f, 0x06, 0x1c, 0xbd, 0xec, 0xa7, 0x02, 0x1a, - 0x44, 0x4e, 0x2d, 0xd4, 0x17, 0xdf, 0x26, 0xdc, 0xd2, 0x20, 0xf2, 0xb7, 0x31, - 0x77, 0x2b, 0x43, 0x9e, 0x96, 0xd6, 0x14, 0xe1, 0xfa, 0xcb, 0x48, 0x6c, 0x7a, - 0x7d, 0x51, 0x71, 0xb1, 0xde, 0x35, 0x9f, 0x6a, 0xd3, 0xa9, 0x6f, 0x64, 0x9c, - 0x96, 0x91, 0x02, 0xa1, 0x96, 0x4f, 0xb4, 0xb4, 0xa1, 0xa4, 0x27, 0x9c, 0x68, - 0xe6, 0xc3, 0x72, 0xe4, 0x21, 0x87, 0xd7, 0x54, 0xe8, 0x04, 0xa6, 0x16, 0x53, - 0x09, 0x20, 0x69, 0xfb, 0x9b, 0x6d, 0x25, 0x26, 0x68, 0x90, 0x80, 0x8b, 0x01, - 0x5d, 0xf2, 0x8c, 0x80, 0x10, 0x65, 0xda, 0x6f, 0xeb, 0xdc, 0x1a, 0x56, 0xbf, - 0xd0, 0x02, 0x62, 0x5a, 0xcf, 0xaa, 0x53, 0x73, 0xfd, 0xe1, 0x49, 0xc1, 0xcf, - 0xc3, 0x64, 0x9b, 0x48, 0x69, 0x26, 0x99, 0xbb, 0xad, 0x5b, 0x7b, 0xf9, 0x97, - 0x38, 0x75, 0xf9, 0xae, 0x6f, 0xc9, 0x69, 0x92, 0x9f, 0x18, 0x49, 0x2f, 0x7c, - 0x8d, 0xfe, 0x69, 0x97, 0x7a, 0x14, 0x2e, 0x92, 0xd6, 0xd0, 0x2c, 0xce, 0x90, - 0x00, 0x09, 0x99, 0x38, 0xe8, 0x16, 0x9f, 0xd4, 0x3d, 0x45, 0x24, 0xe9, 0xc4, - 0x8c, 0x24, 0x7f, 0x9d, 0x48, 0x4c, 0x73, 0xcf, 0x09, 0x39, 0x30, 0x39, 0xe4, - 0x53, 0x26, 0xb8, 0x3f, 0x81, 0xb8, 0x70, 0x37, 0x02, 0x05, 0x66, 0xae, 0x61, - 0xd6, 0x16, 0x42, 0x8a, 0x60, 0x4e, 0x42, 0xef, 0x3e, 0xf3, 0x30, 0x2d, 0x21, - 0x1d, 0x0c, 0xe2, 0xf8, 0xc5, 0x38, 0x6e, 0x5e, 0xca, 0x18, 0x24, 0x4d, 0x63, - 0xd6, 0x70, 0x46, 0x6a, 0xc5, 0x95, 0xb7, 0x7f, 0xb1, 0xfa, 0x26, 0x80, 0xec, - 0x0a, 0xee, 0x5c, 0xb8, 0x35, 0x52, 0x60, 0x50, 0x5c, 0x2c, 0x2e, 0x5d, 0x99, - 0x0f, 0xff, 0x1c, 0x51, 0x80, 0xfa, 0x5b, 0x55, 0x47, 0xb6, 0x19, 0x12, 0x24, - 0xa7, 0x34, 0x9e, 0xa7, 0x70, 0xf6, 0x29, 0xe9, 0x4e, 0x99, 0x54, 0x67, 0x2f, - 0x79, 0x52, 0x12, 0x57, 0xc8, 0x1d, 0x83, 0xff, 0x3e, 0x82, 0x18, 0xb3, 0xad, - 0xd9, 0xc0, 0x68, 0x93, 0xbd, 0x02, 0xdb, 0x9b, 0x61, 0x19, 0x1d, 0xfb, 0x13, - 0x3b, 0xfa, 0xbe, 0x48, 0x58, 0xe4, 0x7a, 0x4c, 0xc3, 0x2e, 0x41, 0x6e, 0xc0, - 0x8b, 0x8a, 0xc7, 0x91, 0x5a, 0x43, 0x73, 0x3f, 0x44, 0x06, 0xe9, 0xd9, 0x67, - 0xc5, 0x60, 0xf3, 0x44, 0xd7, 0xe9, 0x04, 0xa2, 0x80, 0x45, 0xd9, 0x9f, 0x3a, - 0xf8, 0xc8, 0x2e, 0x97, 0xe1, 0xb9, 0xc1, 0xb2, 0x05, 0xe5, 0x85, 0xfb, 0xeb, - 0xb4, 0x8f, 0xaf, 0x58, 0xf1, 0xb6, 0x5d, 0xca, 0x24, 0x97, 0xe0, 0x9a, 0x70, - 0xaa, 0xd4, 0x86, 0x5f, 0x85, 0x71, 0x5a, 0x28, 0x0e, 0x18, 0x6f, 0x3f, 0xc1, - 0x74, 0x0d, 0x81, 0x84, 0xd3, 0x3e, 0x83, 0x22, 0x16, 0x95, 0x21, 0xcd, 0xc1, - 0x32, 0x21, 0x29, 0x39, 0xc8, 0x4a, 0x10, 0x89, 0x64, 0xe2, 0xde, 0x74, 0xb6, - 0xea, 0x55, 0xb4, 0xcb, 0x8f, 0x6f, 0x9b, 0xee, 0x98, 0xb1, 0x0d, 0x41, 0x51, - 0x09, 0x45, 0x5f, 0x48, 0xb7, 0x76, 0x08, 0x2d, 0xc3, 0x0b, 0x4b, 0xc7, 0x34, - 0x77, 0x07, 0x55, 0x11, 0x70, 0x03, 0x08, 0x15, 0x8c, 0xe2, 0xf2, 0xf9, 0xbf, - 0x0f, 0x69, 0x1b, 0x2c, 0xe5, 0x3e, 0x61, 0x14, 0x2c, 0xb7, 0x40, 0xc1, 0x5b, - 0x7b, 0x62, 0x3c, 0xf4, 0x8b, 0x3f, 0x7b, 0xfe, 0xfa, 0x31, 0xbc, 0xdc, 0x66, - 0x5c, 0x6d, 0x71, 0x23, 0xe9, 0x53, 0x50, 0x81, 0x13, 0x75, 0x94, 0x7b, 0x05, - 0x5a, 0x43, 0xdb, 0x07, 0xe0, 0x3f, 0x33, 0x62, 0x7d, 0xf5, 0xc6, 0x38, 0xbf, - 0xad, 0x95, 0x6d, 0xdc, 0x1e, 0xa7, 0xd7, 0x62, 0x0a, 0x20, 0xf2, 0x79, 0x2f, - 0x63, 0x81, 0x7a, 0x1c, 0xf3, 0x25, 0x80, 0xd0, 0x42, 0x74, 0x23, 0x4a, 0xf2, - 0xa5, 0x1b, 0x56, 0xbb, 0x68, 0xa2, 0x9e, 0x43, 0xa9, 0x54, 0x14, 0x2b, 0xa4, - 0xca, 0x68, 0x23, 0xbd, 0xe9, 0x05, 0x3d, 0x72, 0xfd, 0xad, 0xbc, 0x61, 0xad, - 0x59, 0x36, 0xc5, 0x3f, 0xdd, 0x75, 0x79, 0x44, 0x6d, 0x11, 0xc4, 0x46, 0x07, - 0xf4, 0x16, 0x30, 0xe4, 0xc0, 0x89, 0x15, 0xe6, 0x31, 0x77, 0x15, 0x50, 0xe9, - 0xce, 0x1f, 0xca, 0x2c, 0x63, 0xfe, 0x06, 0xb7, 0x98, 0x9d, 0x58, 0x4f, 0xa7, - 0xd7, 0x82, 0xa8, 0x8c, 0x1e, 0x7d, 0x64, 0xb6, 0xfb, 0xf5, 0x5e, 0x35, 0x96, - 0xaf, 0x9b, 0xcb, 0x75, 0x85, 0xf8, 0xc7, 0xd3, 0xaa, 0x5c, 0x20, 0x82, 0xb2, - 0x65, 0x24, 0x9d, 0xf0, 0x57, 0x01, 0xda, 0xb0, 0x31, 0xc4, 0xba, 0xc1, 0xea, - 0x26, 0x7a, 0x29, 0x96, 0xa2, 0x02, 0x8d, 0x1e, 0x6a, 0x0f, 0x80, 0xa3, 0x84, - 0x7c, 0x53, 0x1d, 0xba, 0x96, 0xee, 0x65, 0xa2, 0x41, 0x89, 0xbd, 0x27, 0x12, - 0xe4, 0x0e, 0x95, 0x96, 0x64, 0x98, 0x1e, 0x58, 0xb2, 0xa4, 0xf9, 0x51, 0xef, - 0x8f, 0x49, 0x7d, 0xff, 0xf2, 0xf2, 0xf2, 0x71, 0xea, 0xb8, 0x9c, 0x62, 0x8e, - 0x18, 0xb5, 0xfc, 0xb4, 0x38, 0x82, 0x53, 0x7e, 0xaf, 0x6a, 0xd2, 0xa6, 0xb1, - 0x75, 0x46, 0x33, 0xca, 0xa8, 0x6b, 0xf2, 0xc7, 0x6f, 0x39, 0x93, 0x15, 0x4f, - 0xc7, 0x3e, 0x6f, 0xbb, 0xa2, 0x21, 0x0c, 0x27, 0x43, 0xf5, 0x30, 0xa4, 0x27, - 0x84, 0x9a, 0x30, 0x1e, 0x00, 0xe0, 0x11, 0x29, 0xf0, 0x3a, 0x46, 0x07, 0xf8, - 0x7c, 0xbe, 0x07, 0x62, 0xc0, 0xb1, 0xc6, 0x58, 0x55, 0xde, 0xba, 0x84, 0x22, - 0xca, 0x4b, 0x88, 0xab, 0xee, 0xa6, 0xa4, 0x38, 0x2c, 0xf1, 0x6c, 0xcd, 0x6d, - 0xc7, 0xc3, 0x7c, 0x44, 0xe5, 0x49, 0xc4, 0x53, 0x48, 0x19, 0xac, 0xd8, 0xbb, - 0x0a, 0x02, 0xa5, 0xfa, 0x7a, 0x1c, 0x1d, 0x38, 0x06, 0xfb, 0xc3, 0x40, 0x7f, - 0xd7, 0xda, 0x93, 0xfd, 0x0d, 0xe6, 0x40, 0x0d, 0x3a, 0xb8, 0x97, 0x74, 0x85, - 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, 0x50, 0x7b, 0x79, 0x94, 0x7a, 0xdb, 0x2f, - 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, 0xdb, 0x5f, 0x29, 0x80, 0x99, 0xf2, 0x0f, - 0x26, 0x3b, 0x35, 0x9a, 0x11, 0x51, 0xa6, 0xb7, 0x5c, 0x01, 0x36, 0x5e, 0xb1, - 0x54, 0xae, 0x42, 0x14, 0x0d, 0x6e, 0x10, 0x34, 0x2f, 0x14, 0xf3, 0x4d, 0xc3, - 0x3e, 0x07, 0xff, 0x0e, 0x4d, 0x1a, 0x6b, 0xe3, 0x75, 0xb3, 0x2f, 0x84, 0xb9, - 0x2e, 0x5d, 0x81, 0xeb, 0xb6, 0x39, 0xc4, 0xf2, 0x7e, 0x71, 0x5a, 0xa4, 0x2c, - 0xc7, 0x57, 0x07, 0xd4, 0xeb, 0xd1, 0xbb, 0xfb, 0xe8, 0xf9, 0x0f, 0xc7, 0xc9, - 0x53, 0xe7, 0xa9, 0x71, 0x5e, 0x65, 0xaf, 0x82, 0x67, 0x37, 0x3d, 0x34, 0x51, - 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, 0x2c, 0xcf, 0x3b, 0xcc, 0x7a, 0xca, 0x14, - 0x67, 0xb6, 0x32, 0x7e, 0x4f, 0x95, 0x22, 0xb2, 0xcc, 0x57, 0x9a, 0x7a, 0x8f, - 0xff, 0x7c, 0xa7, 0xcf, 0x14, 0x5d, 0xfc, 0x13, 0xea, 0xfc, 0x34, 0x15, 0x3b, - 0x2c, 0x3e, 0x8a, 0xfb, 0xe5, 0x34, 0x44, 0xd0, 0xc7, 0x3b, 0x3b, 0xd5, 0xbc, - 0x87, 0x0b, 0x01, 0xcd, 0x45, 0x79, 0x11, 0xe3, 0x56, 0x31, 0x3f, 0xd1, 0xda, - 0xfb, 0x4c, 0x81, 0x51, 0x63, 0x4a, 0x01, 0xaf, 0xf7, 0xcf, 0x11, 0x6d, 0x24, - 0x6a, 0xfe, 0x65, 0x0d, 0x84, 0x3c, 0xf8, 0x7a, 0xdf, 0xa0, 0x18, 0x04, 0x59, - 0x61, 0xa3, 0x75, 0xf8, 0x76, 0x21, 0x1e, 0x2d, 0xd0, 0xcd, 0xd4, 0x70, 0x6f, - 0xcc, 0x56, 0xa1, 0x87, 0xb1, 0x80, 0x2a, 0x25, 0x94, 0x44, 0x71, 0x9e, 0x30, - 0x22, 0x56, 0xee, 0x7a, 0xe8, 0x44, 0xf0, 0x3d, 0x20, 0x27, 0x3a, 0x67, 0x52, - 0xe5, 0x01, 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, 0x81, 0x7e, 0x2e, 0x80, 0x80, - 0x0d, 0x0e, 0xda, 0xc6, 0xd2, 0xdc, 0x15, 0x69, 0x56, 0x0a, 0xda, 0x55, 0xd7, - 0x66, 0xd1, 0x46, 0x1d, 0x91, 0x3a, 0xe1, 0xf6, 0x98, 0x07, 0xa5, 0x78, 0x15, - 0x2f, 0xe0, 0x1f, 0x2f, 0xcc, 0x38, 0x4f, 0x59, 0x8f, 0xb1, 0xaf, 0x7c, 0x22, - 0x6f, 0xb8, 0xaa, 0xfe, 0xd5, 0x37, 0xa9, 0xc2, 0x65, 0x7e, 0xba, 0xc0, 0x3b, - 0xfc, 0x0b, 0x58, 0x7b, 0xef, 0x2f, 0x45, 0xec, 0x8a, 0x0d, 0x4d, 0x01, 0xdf, - 0x95, 0xc9, 0xbb, 0x7a, 0x10, 0x94, 0xd6, 0x57, 0x71, 0xa9, 0xbf, 0x98, 0xba, - 0x37, 0x60, 0x20, 0x74, 0x44, 0xa3, 0x04, 0xd7, 0x7b, 0xbe, 0xda, 0x6e, 0xae, - 0x16, 0x10, 0x0f, 0x45, 0x10, 0x8c, 0x6c, 0x6f, 0xae, 0x35, 0x9f, 0x64, 0x5c, - 0x27, 0x68, 0x91, 0xc0, 0xdc, 0xab, 0x3f, 0xaf, 0x18, 0x77, 0x00, 0xc0, 0x82, - 0xdc, 0x47, 0x77, 0x40, 0xfb, 0x3f, 0x2c, 0xd7, 0xbb, 0x59, 0xfb, 0x35, 0x85, - 0x54, 0xe9, 0x4c, 0x7e, 0x67, 0x8c, 0xe0, 0x1a, 0xeb, 0xf9, 0x4e, 0x51, 0x5e, - 0x49, 0x72, 0x29, 0x67, 0x99, 0x5a, 0xea, 0x85, 0x8d, 0x64, 0xe7, 0x78, 0x9f, - 0xf3, 0x06, 0x36, 0x95, 0x77, 0x22, 0x81, 0x80, 0x32, 0x6a, 0x5b, 0x0a, 0xf4, - 0x75, 0xe2, 0x7a, 0x54, 0xb2, 0x07, 0xb4, 0x1f, 0x92, 0xe3, 0x76, 0x17, 0x0e, - 0x3f, 0xb0, 0x05, 0x02, 0x82, 0x61, 0xc9, 0x9c, 0x2d, 0xbd, 0x0e, 0xed, 0xee, - 0x87, 0x1c, 0x1c, 0x0f, 0x48, 0xb8, 0xe9, 0xb8, 0xe4, 0xbe, 0x77, 0xd1, 0xb7, - 0x37, 0xfe, 0x21, 0xf0, 0xfa, 0x5a, 0x18, 0xeb, 0xb5, 0x27, 0x55, 0xb5, 0xa6, - 0xcf, 0x61, 0x30, 0xfb, 0x56, 0x94, 0x4c, 0xfa, 0xb8, 0x75, 0x27, 0xc2, 0x50, - 0xd1, 0x13, 0xb2, 0x9b, 0xca, 0xc9, 0xaa, 0xa1, 0x0c, 0x2e, 0x7d, 0xe4, 0x15, - 0xed, 0xb0, 0x80, 0x6c, 0x6d, 0xa0, 0x30, 0x20, 0xa1, 0x34, 0xca, 0x7e, 0xcd, - 0xc8, 0xda, 0x1b, 0xd5, 0x7a, 0x37, 0xf5, 0x5a, 0x46, 0x94, 0x0b, 0x45, 0xb2, - 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, 0x92, 0x7d, 0x1b, 0xd8, 0x60, 0xd4, 0x45, - 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, 0xe1, 0xd0, 0x01, 0x08, 0x02, 0x6c, - 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, 0xf5, 0xc3, 0x70, 0xbc, 0xe1, 0x8d, - 0x3a, 0xcb, 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, 0xe1, 0xd8, 0x02, 0xf7, 0x73, - 0x33, 0x49, 0x4a, 0x7a, 0xe1, 0x30, 0xfe, 0x86, 0xe8, 0xf8, 0x18, 0xf9, 0x26, - 0x1a, 0x2d, 0xad, 0xb4, 0x12, 0x52, 0x29, 0xba, 0x0f, 0xfc, 0x0e, 0x70, 0x90, - 0x32, 0x44, 0x30, 0xb5, 0x21, 0xa9, 0x0d, 0x22, 0x4a, 0xb7, 0xa1, 0x02, 0x4e, - 0x1d, 0x89, 0x3e, 0x74, 0x04, 0xfe, 0xdb, 0x34, 0x8e, 0x4d, 0x5e, 0x22, 0x35, - 0xc5, 0x9a, 0x78, 0x76, 0xa0, 0xfc, 0x60, 0x14, 0x5c, 0x6a, 0x00, 0x96, 0x87, - 0x68, 0x44, 0x60, 0x27, 0x1e, 0xe1, 0x33, 0xa4, 0x37, 0xfe, 0x52, 0xfb, 0x6c, - 0xfb, 0xa9, 0x7f, 0xce, 0xc1, 0x61, 0xdf, 0x51, 0x5d, 0xde, 0x90, 0x5a, 0x24, - 0xda, 0x6d, 0x37, 0xbd, 0xc3, 0x40, 0x44, 0xa9, 0x55, 0xe6, 0x82, 0xb4, 0x74, - 0x71, 0xca, 0x1e, 0x8c, 0x78, 0xc5, 0x1e, 0xd3, 0x77, 0xcd, 0x4a, 0xfa, 0x89, - 0x4b, 0xd9, 0xbd, 0x12, 0xe7, 0x07, 0x15, 0x6d, 0xa0, 0x72, 0x6f, 0x7c, 0xf5, - 0x72, 0x9f, 0xab, 0xe3, 0x72, 0x16, 0x04, 0x63, 0xfe, 0x04, 0x29, 0x24, 0x4d, - 0x06, 0x74, 0x89, 0xba, 0x5d, 0x09, 0x47, 0x2e, 0xcd, 0x9b, 0xcd, 0xc4, 0xd5, - 0xe4, 0xdf, 0x10, 0x1e, 0x18, 0x9d, 0xb8, 0x46, 0x3e, 0xb5, 0x38, 0x30, 0x7b, - 0x58, 0x7d, 0xef, 0xf7, 0x8d, 0xe9, 0xc7, 0x3a, 0xf2, 0x80, 0x80, 0xb2, 0xfd, - 0x05, 0x00, 0x3e, 0x11, 0xd3, 0xe1, 0xb3, 0x29, 0x9d, 0xc9, 0x52, 0x1f, 0x8b, - 0x51, 0x3b, 0xad, 0xb0, 0x10, 0xe9, 0x1b, 0xfe, 0xb9, 0x1b, 0x0b, 0x2a, 0x6c, - 0xb1, 0x29, 0xc2, 0xe8, 0x25, 0xa5, 0x97, 0xb8, 0xfb, 0x75, 0xbc, 0x56, 0x2d, - 0x65, 0x4d, 0x62, 0x10, 0x46, 0x40, 0xdd, 0x74, 0xe5, 0x6c, 0xd1, 0x4b, 0xaa, - 0xba, 0x56, 0x5b, 0x84, 0xb8, 0x45, 0xe1, 0x63, 0xd1, 0xca, 0xef, 0x25, 0x33, - 0xc3, 0x98, 0x16, 0x37, 0x20, 0x4f, 0x96, 0xa5, 0x9c, 0x8e, 0x80, 0x24, 0xd9, - 0x04, 0x1b, 0x20, 0x29, 0xe9, 0x4c, 0x15, 0x24, 0x5f, 0x1a, 0x95, 0x88, 0x40, - 0xba, 0x3f, 0x38, 0x0a, 0x4d, 0x20, 0xf1, 0x18, 0x4e, 0x77, 0x82, 0x7d, 0xe3, - 0xff, 0x8f, 0x3d, 0x73, 0x45, 0x9a, 0xfe, 0x24, 0x1f, 0x72, 0x3c, 0x08, 0x48, - 0x23, 0x23, 0x0e, 0x00, 0x3d, 0x3d, 0x21, 0xe5, 0x35, 0x01, 0xec, 0x04, 0x99, - 0xb0, 0x83, 0xa7, 0xda, 0xd6, 0x85, 0xc5, 0x71, 0x27, 0xf4, 0xde, 0x64, 0x73, - 0x3a, 0x88, 0x0c, 0x2d, 0xb2, 0x8f, 0xda, 0xab, 0xf1, 0xb5, 0x42, 0xd2, 0x05, - 0xf6, 0x64, 0xa3, 0x51, 0x35, 0x71, 0x27, 0x11, 0xdc, 0xcc, 0xd9, 0x31, 0xa5, - 0x0b, 0x9c, 0x56, 0x61, 0x88, 0x23, 0x60, 0xd4, 0xca, 0xc0, 0x04, 0x76, 0x81, - 0xbc, 0x2e, 0x2b, 0x3b, 0xf6, 0xc9, 0x97, 0x60, 0xd7, 0xcf, 0xb4, 0xfa, 0x21, - 0x39, 0x43, 0x77, 0xa4, 0x55, 0x1c, 0x76, 0xd1, 0xf7, 0x5a, 0xc0, 0x3c, 0x26, - 0x20, 0x54, 0xdf, 0xfd, 0x79, 0xa9, 0xde, 0xd0, 0x5e, 0x88, 0x89, 0x58, 0x19, - 0x9e, 0xea, 0x45, 0x01, 0xe2, 0x99, 0x0a, 0x53, 0xa5, 0xcd, 0x2a, 0x46, 0xa4, - 0x01, 0x57, 0x65, 0x88, 0xfd, 0x7d, 0x05, 0x8a, 0x26, 0xf2, 0x84, 0x38, 0xe5, - 0x78, 0x2f, 0x45, 0xac, 0x1d, 0x07, 0xf6, 0xf6, 0xf5, 0xed, 0x73, 0x74, 0x1d, - 0x57, 0x85, 0x83, 0x7a, 0x6b, 0x84, 0x4b, 0x47, 0x47, 0x75, 0x71, 0x8c, 0x29, - 0xdd, 0x99, 0x08, 0x4e, 0x9f, 0x88, 0x03, 0xc9, 0x3a, 0xfc, 0xed, 0x83, 0x39, - 0x00, 0x00, 0xbf, 0x83, 0xfc, 0x07, 0x34, 0x96, 0x4c, 0xcd, 0x41, 0x1d, 0x1c, - 0x93, 0x57, 0x14, 0xe2, 0x4a, 0xab, 0x56, 0x6f, 0x4f, 0x08, 0x42, 0x40, 0x14, - 0xc4, 0xec, 0xa9, 0x1b, 0x59, 0x0f, 0x08, 0x2b, 0x67, 0x3f, 0x36, 0x1c, 0x87, - 0x41, 0x5d, 0x37, 0xbd, 0x20, 0xd7, 0x0f, 0xd0, 0xb5, 0x2b, 0x6d, 0xdf, 0x18, - 0x65, 0xf7, 0x66, 0x70, 0x2e, 0x32, 0xb0, 0x5b, 0x3c, 0xf1, 0x63, 0x0e, 0xe8, - 0x59, 0x7a, 0xae, 0x19, 0x63, 0x3f, 0x35, 0x16, 0xa8, 0x55, 0x5a, 0xc5, 0xbe, - 0x32, 0xc6, 0x75, 0xbe, 0x18, 0x17, 0xef, 0xbf, 0xfd, 0x93, 0x69, 0x04, 0x1a, - 0x08, 0x9c, 0x28, 0x3f, 0x19, 0x64, 0x99, 0x68, 0xc2, 0x49, 0x8c, 0xde, 0x56, - 0xf5, 0x00, 0x43, 0x4f, 0x28, 0x0d, 0x77, 0xa9, 0xc6, 0x2e, 0x43, 0xcb, 0xd3, - 0xf1, 0x36, 0xa4, 0xc6, 0xa0, 0x0a, 0x43, 0xe6, 0xed, 0x53, 0x0c, 0xb2, 0xe8, - 0xae, 0x83, 0x88, 0x60, 0xad, 0xc8, 0x8a, 0xac, 0x1c, 0xe6, 0x13, 0x81, 0x64, - 0x3e, 0xec, 0xd2, 0xcf, 0x72, 0x24, 0x8f, 0x78, 0x6f, 0x43, 0xd3, 0x0d, 0x78, - 0x37, 0xd0, 0x48, 0xe2, 0x60, 0x12, 0xcb, 0xaa, 0x6c, 0xe7, 0xbb, 0x57, 0x8a, - 0x1f, 0x85, 0xf2, 0x7d, 0xc3, 0xe9, 0x3c, 0xe4, 0x5e, 0x25, 0x3a, 0xc5, 0x8c, - 0xf7, 0x2e, 0xe2, 0x42, 0x02, 0x60, 0x57, 0x72, 0x5d, 0x63, 0xea, 0xd2, 0xc0, - 0xc0, 0xff, 0x1f, 0xe2, 0x6a, 0xc1, 0x27, 0x0a, 0x67, 0xdf, 0xb3, 0x63, 0x47, - 0xc9, 0xcf, 0x6a, 0xe0, 0x61, 0xee, 0x62, 0xf6, 0x17, 0x69, 0xba, 0x38, 0x9d, - 0xc0, 0xa9, 0x6b, 0x8b, 0x04, 0x7a, 0xe3, 0xb4, 0x2b, 0x89, 0x6b, 0xb4, 0x1d, - 0xdb, 0x82, 0xf8, 0x78, 0xd9, 0xac, 0x7f, 0xfb, 0x0b, 0xd4, 0x39, 0x1d, 0xf1, - 0xd8, 0x79, 0x89, 0x9a, 0x3e, 0xf5, 0x7b, 0xfd, 0x0d, 0x1f, 0x77, 0x55, 0x64, - 0x8e, 0xdd, 0x85, 0xbb, 0x05, 0x2a, 0x4f, 0xa9, 0xe5, 0x1c, 0x2f, 0x35, 0xa4, - 0x81, 0x5d, 0xf9, 0x6d, 0xac, 0xac, 0x29, 0x0e, 0xdf, 0x16, 0x18, 0xa2, 0x5b, - 0xdd, 0x25, 0xc6, 0x73, 0x92, 0xb7, 0x96, 0x4d, 0x90, 0x3b, 0x92, 0x07, 0x50, - 0x38, 0x70, 0x59, 0x7b, 0x9a, 0x95, 0x58, 0x92, 0xc7, 0x38, 0x96, 0x50, 0xa2, - 0xd4, 0x2e, 0xc9, 0x2b, 0xe7, 0x23, 0xfe, 0xdf, 0x2f, 0x2e, 0xde, 0x5a, 0x47, - 0x2a, 0xa1, 0xe7, 0x4f, 0x33, 0xf7, 0xc0, 0x97, 0x12, 0x26, 0xac, 0xcf, 0x7c, - 0x90, 0x37, 0xa5, 0x36, 0x84, 0x86, 0x77, 0x51, 0x68, 0x90, 0x90, 0x1c, 0xb6, - 0x1a, 0x9f, 0x09, 0x8b, 0x15, 0xd1, 0x5c, 0x9d, 0x32, 0x7a, 0x32, 0xb9, 0x30, - 0xa7, 0xcb, 0x12, 0x24, 0x78, 0xf8, 0x5a, 0x1c, 0x6c, 0x31, 0x1a, 0xee, 0x72, - 0x1c, 0x0b, 0xd2, 0xaa, 0xcb, 0xd8, 0x23, 0x25, 0xa5, 0x9b, 0x95, 0x15, 0x4e, - 0xcd, 0x82, 0xc8, 0x0d, 0x36, 0x7e, 0x2e, 0xac, 0xcb, 0x1e, 0x6e, 0x63, 0x0d, - 0x9a, 0x6f, 0x44, 0x23, 0x59, 0xb5, 0x57, 0xf4, 0xa7, 0x77, 0xab, 0x1b, 0x15, - 0xea, 0xa1, 0x29, 0x47, 0x50, 0xd4, 0x06, 0x3a, 0x0c, 0x1e, 0x45, 0x9f, 0x1b, - 0xdc, 0xbf, 0x95, 0x25, 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, - 0x79, 0x87, 0x40, 0xe0, 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, - 0xa0, 0xae, 0x0f, + 0x9c, 0x05, 0x32, 0xe6, 0x78, 0x8f, 0xe9, 0xe2, 0x8b, 0x3b, 0x67, 0xf5, 0x71, + 0x98, 0x9b, 0xe7, 0x7a, 0xe7, 0x61, 0xdf, 0xd3, 0x75, 0xc7, 0x4b, 0xbf, 0x5d, + 0xb3, 0xca, 0xfa, 0xa1, 0xf9, 0xa5, ], - txid: [ - 0x8c, 0x23, 0xea, 0xeb, 0x8f, 0x61, 0x22, 0x8c, 0x8b, 0x2f, 0x63, 0x3a, 0x7d, - 0xdc, 0xa1, 0x95, 0xc2, 0x71, 0x89, 0x13, 0xd5, 0x6b, 0x6f, 0x75, 0xc2, 0xef, - 0x52, 0x02, 0xa9, 0x67, 0x55, 0x61, + amounts: vec![1561051182746413, 1535468271734483], + script_pubkeys: vec![ + vec![0x65, 0x6a, 0x51, 0x6a, 0xac, 0x51, 0x6a, 0x65, 0x52], + vec![0x52], ], - auth_digest: [ - 0xd3, 0x95, 0x72, 0xcb, 0x8a, 0x62, 0x3d, 0x50, 0x8c, 0xcb, 0xa0, 0xd2, 0x43, - 0x93, 0x73, 0x0e, 0xc3, 0x94, 0x02, 0x06, 0x3f, 0x2c, 0x50, 0xfe, 0x56, 0xcd, - 0xe8, 0xaa, 0xc1, 0xe9, 0x40, 0x24, - ], - amounts: vec![1180186385139632], - script_pubkeys: vec![vec![0xac, 0x00, 0xac, 0x6a, 0x53, 0x00, 0x00]], - transparent_input: Some(0), + transparent_input: Some(1), sighash_shielded: [ - 0xfd, 0x8d, 0x30, 0x0c, 0x1c, 0xbb, 0xfe, 0x6e, 0xcf, 0x3d, 0x3a, 0xe3, 0x1a, - 0x98, 0xf2, 0x55, 0x3f, 0xa5, 0xbd, 0x1b, 0xb6, 0x4c, 0x8a, 0xda, 0x81, 0x8f, - 0x06, 0xb4, 0x8c, 0x79, 0xde, 0x4c, + 0x24, 0xa9, 0x1d, 0x01, 0x7e, 0x69, 0x1f, 0xe7, 0xd5, 0x80, 0xe3, 0xfc, 0x16, + 0x87, 0x2d, 0x61, 0x2c, 0x14, 0xbf, 0xcb, 0xe5, 0xe2, 0x72, 0x5e, 0x16, 0xd0, + 0x9e, 0xc0, 0xc1, 0xc9, 0x13, 0x05, ], sighash_all: Some([ - 0x74, 0xe4, 0xe7, 0x22, 0x42, 0x49, 0x22, 0x07, 0x94, 0xae, 0x08, 0xba, 0x5e, - 0xdf, 0x96, 0xcd, 0x84, 0x18, 0xfc, 0x82, 0x9f, 0xdf, 0xd2, 0xf1, 0x51, 0x62, - 0xb7, 0x7c, 0x11, 0x01, 0x37, 0x04, + 0x2b, 0xea, 0x7c, 0x00, 0xcf, 0x77, 0xfa, 0x59, 0xa6, 0x3a, 0xb0, 0xbd, 0x3e, + 0xb7, 0xb1, 0x06, 0x59, 0xf8, 0xfc, 0x9e, 0x4c, 0x48, 0x94, 0xba, 0xfc, 0x37, + 0x64, 0x0e, 0x86, 0x55, 0xf5, 0x62, ]), sighash_none: Some([ - 0x1a, 0x33, 0xce, 0x50, 0x7d, 0x53, 0x74, 0xe5, 0x6b, 0x00, 0xcb, 0x88, 0xb9, - 0xcc, 0x85, 0xda, 0xb5, 0x89, 0xf1, 0xe2, 0x2d, 0x92, 0x77, 0xdb, 0x69, 0x58, - 0xf7, 0xce, 0x1a, 0x8a, 0x47, 0x02, + 0xe6, 0x36, 0x03, 0xea, 0xde, 0x7d, 0xde, 0x98, 0xef, 0x0e, 0xd6, 0x8d, 0xe6, + 0x40, 0x70, 0x7d, 0xf6, 0xcc, 0x9c, 0x33, 0x78, 0x37, 0xbc, 0xbd, 0xcd, 0xe0, + 0x5a, 0x07, 0xff, 0x7d, 0x87, 0x3b, ]), sighash_single: Some([ - 0x26, 0xa1, 0xbe, 0x98, 0xd2, 0xb0, 0x84, 0xb2, 0xc3, 0x6f, 0x77, 0x6c, 0xfb, - 0xe3, 0x18, 0x3c, 0xf1, 0x82, 0xf4, 0xe8, 0xdd, 0x29, 0x21, 0x5f, 0x00, 0x98, - 0x0d, 0xac, 0x17, 0x75, 0xf7, 0x2a, + 0xe4, 0xb2, 0xf9, 0x8a, 0xd7, 0xb5, 0x5f, 0xb2, 0x56, 0xa1, 0x29, 0x23, 0x30, + 0x3a, 0xbc, 0xae, 0xee, 0x38, 0x35, 0x10, 0x90, 0xe9, 0x76, 0xb0, 0x19, 0x5d, + 0xd7, 0x5b, 0xdc, 0xf9, 0x4a, 0xd9, ]), sighash_all_anyone: Some([ - 0x4a, 0x32, 0x56, 0x8d, 0x12, 0xc2, 0xc7, 0x40, 0xef, 0xb4, 0x4b, 0xbd, 0xa6, - 0x39, 0x36, 0x4e, 0xe9, 0x9b, 0xce, 0x7d, 0xe7, 0xc0, 0xcf, 0x22, 0x6e, 0xd1, - 0x44, 0xe8, 0xd2, 0xd0, 0xd0, 0xa8, + 0x61, 0xc7, 0x05, 0xd5, 0x50, 0x5f, 0x0d, 0x5c, 0xfb, 0x3a, 0x28, 0x51, 0x9d, + 0x79, 0x1f, 0x14, 0x57, 0x70, 0x4f, 0x7b, 0x38, 0x39, 0x2e, 0xff, 0x88, 0x5a, + 0x82, 0x07, 0xfa, 0x68, 0x3c, 0x57, ]), sighash_none_anyone: Some([ - 0x2c, 0xf4, 0xfb, 0xd3, 0x2a, 0x88, 0x62, 0x4f, 0x16, 0x4a, 0x87, 0x0c, 0x59, - 0x37, 0xe3, 0x8f, 0x55, 0x23, 0xc4, 0xaf, 0x06, 0x08, 0x1c, 0xae, 0x64, 0x06, - 0x36, 0x8e, 0x4c, 0x5d, 0xcf, 0x21, + 0xf3, 0x5e, 0xa9, 0xbe, 0xb0, 0xb7, 0xed, 0x68, 0x2d, 0x27, 0xef, 0x78, 0xdd, + 0xe1, 0x17, 0x8d, 0x6a, 0x55, 0xf3, 0x07, 0xc8, 0x51, 0x21, 0xcd, 0x83, 0x02, + 0x58, 0xd8, 0x9d, 0x33, 0xcd, 0xd1, ]), sighash_single_anyone: Some([ - 0x1b, 0x7d, 0xfa, 0x1f, 0x21, 0x6f, 0x7f, 0x52, 0xfc, 0x66, 0x6f, 0xb8, 0x35, - 0xbc, 0xa1, 0x6d, 0xd7, 0xbe, 0xd5, 0x5a, 0xf0, 0xf5, 0x36, 0x8b, 0x85, 0x46, - 0xbe, 0x84, 0x6a, 0xd8, 0xa1, 0xf9, + 0xae, 0xce, 0x3f, 0x45, 0x76, 0x98, 0x76, 0xd8, 0x7b, 0x50, 0x47, 0x8b, 0x90, + 0xcd, 0x5e, 0x3b, 0x37, 0xb7, 0xf4, 0xc5, 0x5b, 0x38, 0xf7, 0x56, 0xa5, 0x74, + 0x86, 0xa3, 0x10, 0x61, 0xdf, 0xa8, ]), }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x98, - 0xaf, 0x08, 0x3d, 0x98, 0x08, 0x71, 0x08, 0x00, 0x00, 0x02, 0x61, 0x75, 0xd8, - 0xc3, 0xd6, 0x75, 0x62, 0xff, 0x06, 0xa2, 0x1b, 0x39, 0xcd, 0x17, 0x31, 0x63, - 0xb2, 0xec, 0xa3, 0x01, 0x32, 0x19, 0xc7, 0xac, 0x6a, 0x51, 0xdf, 0x3f, 0x26, - 0x44, 0x4a, 0xa8, 0x65, 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, 0x56, 0xfe, - 0x4b, 0xd8, 0xb4, 0xd6, 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, 0xda, - 0xc4, 0x64, 0x15, 0x6d, 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0xc7, 0x2f, 0xc1, 0x8b, - 0xbb, 0xf5, 0x11, 0x00, 0x32, 0xe6, 0x6d, 0x75, 0xb3, 0x17, 0x1e, 0xf4, 0xb5, - 0x13, 0x29, 0x01, 0x64, 0xa7, 0x7b, 0x42, 0xb0, 0xa4, 0xcf, 0xb8, 0x96, 0x39, - 0xab, 0x23, 0xa3, 0xde, 0xf6, 0x5e, 0x3e, 0xa8, 0x60, 0x5a, 0xa8, 0x78, 0x16, - 0x1e, 0xad, 0x53, 0x6c, 0x11, 0x83, 0x0a, 0x4d, 0xe8, 0x1a, 0x0f, 0x4e, 0x15, - 0x18, 0xc1, 0x50, 0x91, 0x54, 0x04, 0x90, 0xc6, 0x0d, 0x31, 0xbc, 0xa7, 0xe7, - 0x4b, 0x3e, 0x3b, 0xa3, 0xd0, 0xe8, 0xa6, 0x39, 0x2a, 0x06, 0x2b, 0x8e, 0x86, - 0xd9, 0xd7, 0xd0, 0x0b, 0x21, 0x70, 0x1e, 0x7b, 0x06, 0x2e, 0x06, 0xb1, 0xbc, - 0xd8, 0x57, 0x96, 0xfa, 0xae, 0x5b, 0xab, 0x7c, 0x82, 0x97, 0x7c, 0x0f, 0xf7, - 0x97, 0x09, 0x3e, 0x2c, 0x1f, 0x3a, 0xe8, 0x55, 0xf6, 0x5a, 0xea, 0x91, 0xe1, - 0x31, 0x2f, 0xc6, 0xb8, 0xa4, 0x35, 0x1a, 0x01, 0xb4, 0x59, 0x75, 0xe1, 0x88, - 0x45, 0xee, 0x5f, 0x1c, 0xf5, 0x78, 0x2a, 0x0e, 0x97, 0xc7, 0x4d, 0xe6, 0x34, - 0x6d, 0x27, 0xc1, 0x2e, 0x6c, 0x7d, 0x4a, 0x1c, 0x73, 0xa0, 0x02, 0xd8, 0xb2, - 0x98, 0x5f, 0x04, 0xa6, 0x24, 0x24, 0x02, 0x3c, 0x9b, 0x9e, 0x33, 0xc4, 0xfb, - 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, 0xf2, 0x65, 0xc5, 0x37, 0xd5, 0x1c, 0x65, - 0x51, 0xf4, 0x61, 0x7b, 0x91, 0x5d, 0x21, 0xf3, 0x62, 0xed, 0xe2, 0x25, 0xb5, - 0x90, 0xcf, 0x68, 0xc6, 0x05, 0xaf, 0x57, 0x77, 0x9f, 0x8a, 0xab, 0xab, 0x24, - 0x5d, 0x87, 0x9d, 0x5e, 0x89, 0x95, 0x48, 0x20, 0x48, 0x90, 0xc3, 0x59, 0xda, - 0xb7, 0x4e, 0x65, 0x2a, 0x0b, 0xc5, 0x0c, 0x6c, 0x08, 0x3a, 0x55, 0xd6, 0xc7, - 0x30, 0x6e, 0x74, 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, 0xa2, 0x48, 0x73, 0x68, - 0x18, 0x67, 0xa7, 0x89, 0x3d, 0x77, 0xcb, 0x7f, 0x29, 0xb8, 0xc8, 0x47, 0xc5, - 0x83, 0xf2, 0xd0, 0x71, 0xa6, 0x86, 0x61, 0x6e, 0x20, 0x67, 0x19, 0xf7, 0x61, - 0xae, 0x39, 0xc1, 0x10, 0x44, 0x2e, 0x06, 0x16, 0x3d, 0x2b, 0x84, 0x59, 0x03, - 0x60, 0x69, 0x5d, 0x4e, 0x19, 0x84, 0x9e, 0x63, 0x4f, 0x24, 0xd9, 0xad, 0x39, - 0x6c, 0x19, 0xff, 0x83, 0xce, 0x74, 0xf4, 0x6e, 0x64, 0x5f, 0x93, 0x2e, 0x14, - 0x1a, 0x41, 0x19, 0x59, 0x36, 0xc8, 0x5d, 0x51, 0x44, 0x14, 0xf1, 0x12, 0xe6, - 0x0b, 0x1a, 0x25, 0x37, 0xc3, 0x8d, 0x6d, 0xc6, 0xc4, 0x63, 0x83, 0x05, 0xc9, - 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, 0x63, 0x12, 0x3e, 0x3e, 0x6d, 0xd3, 0x6e, - 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, 0xee, 0xca, 0x2a, 0xa0, 0x9a, 0x32, 0x98, - 0xa3, 0x9d, 0x83, 0x85, 0x9e, 0xfc, 0x9b, 0x2b, 0x69, 0xcf, 0x9a, 0x7d, 0xee, - 0x08, 0xa9, 0x8e, 0x4b, 0xe5, 0x58, 0xac, 0x79, 0x12, 0xfd, 0xcb, 0x42, 0x20, - 0x90, 0x75, 0x42, 0x02, 0x60, 0xf7, 0xca, 0xd0, 0xf2, 0xc0, 0x1f, 0x2a, 0xfe, - 0x33, 0x07, 0x3f, 0x26, 0x24, 0x9d, 0x94, 0x4f, 0x7a, 0x50, 0xdd, 0x84, 0x83, - 0x9b, 0xc3, 0xea, 0x7f, 0xde, 0xe4, 0xed, 0x71, 0x44, 0x9c, 0xf0, 0x75, 0x33, - 0xd2, 0x6e, 0x1e, 0x27, 0xa3, 0xef, 0xb0, 0x32, 0xc3, 0xa3, 0xb3, 0x4b, 0xd3, - 0x09, 0x26, 0x22, 0xd2, 0x06, 0x2a, 0xe5, 0x36, 0xef, 0x51, 0x49, 0xc4, 0x9b, - 0x5b, 0xc9, 0x47, 0x5e, 0xaf, 0xab, 0x6e, 0x67, 0x57, 0x61, 0x00, 0x8b, 0x0d, - 0xad, 0xde, 0xec, 0xaa, 0x60, 0x44, 0x70, 0xbb, 0xe0, 0xfa, 0xda, 0x25, 0x5d, - 0x29, 0x0e, 0x92, 0xb1, 0x90, 0xc2, 0xc2, 0xd8, 0xc2, 0xde, 0xe5, 0x45, 0x5d, - 0x1f, 0xa9, 0xa9, 0xf3, 0xdb, 0x77, 0x79, 0xb5, 0x84, 0x64, 0x34, 0x64, 0xaa, - 0x80, 0x14, 0xba, 0x66, 0x99, 0x4d, 0xe2, 0x55, 0x17, 0xf8, 0x39, 0x80, 0xe6, - 0x6e, 0xe4, 0xf6, 0x23, 0x14, 0xae, 0x6d, 0xbe, 0xf4, 0x52, 0xd5, 0xd3, 0x8b, - 0x0a, 0x16, 0xf3, 0x99, 0x1f, 0x36, 0xd8, 0xa8, 0xb3, 0x9d, 0xdc, 0x0d, 0x55, - 0x95, 0xee, 0xd9, 0x87, 0x62, 0x87, 0x8c, 0xdf, 0x3f, 0x4a, 0x2e, 0xdc, 0x5c, - 0xda, 0x77, 0xd5, 0xfe, 0x4f, 0xaf, 0x63, 0xa1, 0x5f, 0x56, 0x8a, 0x54, 0x0d, - 0xa5, 0x7d, 0xd9, 0xbe, 0xb6, 0xfb, 0x1a, 0x97, 0x7c, 0xcb, 0x91, 0xb4, 0xd7, - 0x9c, 0xb3, 0x9b, 0x28, 0x91, 0x1a, 0x29, 0xe7, 0xbf, 0x02, 0x8a, 0xc6, 0x10, - 0x37, 0x96, 0xdf, 0xb6, 0xb2, 0x09, 0x67, 0x23, 0x9a, 0xd3, 0x73, 0xc3, 0x8c, - 0x53, 0xf6, 0xdf, 0x18, 0x23, 0xd4, 0x95, 0x0a, 0x02, 0x83, 0xe9, 0x9b, 0x9c, - 0x06, 0xab, 0x29, 0x66, 0x66, 0x7c, 0x9d, 0xf6, 0x77, 0x71, 0x6b, 0x0c, 0xad, - 0xed, 0x81, 0x8d, 0xf9, 0xe4, 0x49, 0xc0, 0x72, 0xe2, 0x2f, 0x9d, 0x98, 0xbb, - 0x0f, 0x9b, 0x03, 0xbd, 0x5f, 0xd0, 0x13, 0xfc, 0xef, 0x3e, 0xd6, 0xa4, 0x9a, - 0xeb, 0x98, 0x72, 0x02, 0x54, 0x08, 0x7e, 0xf7, 0x28, 0xe3, 0x19, 0x47, 0xff, - 0xe8, 0xf7, 0x66, 0xe6, 0x3e, 0xe4, 0x6f, 0xf2, 0x08, 0x16, 0xd5, 0xfa, 0x8f, - 0xf5, 0x5a, 0x26, 0x39, 0x89, 0x61, 0x49, 0x0a, 0xb9, 0xae, 0x36, 0x6f, 0xc5, - 0xa2, 0xd1, 0x99, 0x6e, 0xd6, 0x93, 0xcc, 0xca, 0x82, 0x35, 0x6f, 0x60, 0x0a, - 0xb0, 0x99, 0xf6, 0xec, 0xa8, 0xbf, 0xe6, 0x45, 0x27, 0x0d, 0x3f, 0x95, 0xed, - 0xba, 0x5b, 0x0d, 0xe7, 0xa3, 0x28, 0x19, 0x23, 0x3b, 0xcc, 0x75, 0x4a, 0x5c, - 0xe2, 0xe5, 0xea, 0x07, 0x84, 0x2e, 0x5f, 0xf2, 0xce, 0xbe, 0x62, 0xad, 0x76, - 0xe8, 0xef, 0xf8, 0xd1, 0x5e, 0xa4, 0xc2, 0x4a, 0x5f, 0x20, 0x78, 0x68, 0x31, - 0x9a, 0x5a, 0xf6, 0xb0, 0x35, 0xbe, 0x3f, 0x44, 0xf4, 0x34, 0x09, 0x4f, 0x6e, - 0x52, 0x5b, 0xe6, 0x14, 0xda, 0xc9, 0x20, 0xa3, 0x30, 0xbd, 0xfb, 0x26, 0xd7, - 0x5f, 0xe7, 0xb4, 0xb3, 0x65, 0xd0, 0x94, 0x45, 0x92, 0x50, 0xaa, 0xa5, 0x54, - 0x44, 0x89, 0xfb, 0x1d, 0x99, 0x25, 0x81, 0x80, 0x0a, 0x77, 0xb8, 0x91, 0x21, - 0x57, 0xfc, 0x97, 0x13, 0xaa, 0xac, 0x25, 0xb4, 0xc2, 0x6e, 0xb0, 0x3f, 0x71, - 0x66, 0x46, 0x61, 0x9a, 0xf0, 0x24, 0x56, 0xae, 0x69, 0x59, 0x62, 0xfe, 0x5e, - 0x93, 0x1a, 0x63, 0xb5, 0xc7, 0x90, 0x52, 0xec, 0xd3, 0x33, 0xe1, 0x84, 0x12, - 0xdb, 0x91, 0xe1, 0x5f, 0x7c, 0xbc, 0x70, 0xb4, 0xcd, 0x7e, 0x8e, 0x3c, 0x95, - 0x1f, 0x35, 0x85, 0x72, 0xe3, 0x77, 0x67, 0xe7, 0xd5, 0x27, 0x34, 0xd3, 0x37, - 0x2a, 0x3a, 0x5d, 0x03, 0x00, 0xe1, 0xf7, 0x43, 0x6e, 0x1e, 0x76, 0x43, 0x76, - 0x71, 0xde, 0x6e, 0x83, 0xe3, 0x51, 0xa5, 0xc6, 0xb2, 0x63, 0x4f, 0xa6, 0xa2, - 0xf7, 0x80, 0xae, 0xb7, 0x14, 0x65, 0xc4, 0xa1, 0xb1, 0x8d, 0x10, 0x84, 0x5e, - 0x1a, 0xa2, 0xa4, 0x52, 0xf3, 0x73, 0x1c, 0x8c, 0xb6, 0x50, 0x82, 0xa6, 0x22, - 0xa7, 0xc2, 0xe0, 0x01, 0x3e, 0xa4, 0x7d, 0x0b, 0xdd, 0x42, 0xd6, 0x99, 0x04, - 0x66, 0x64, 0x9a, 0x90, 0x5c, 0x68, 0x4c, 0x32, 0x51, 0x71, 0x6d, 0x61, 0xf7, - 0x60, 0xd5, 0x3d, 0xe6, 0xe3, 0xf7, 0x90, 0xfb, 0xa7, 0xf5, 0xf1, 0xf4, 0xde, - 0x26, 0x71, 0x13, 0xbd, 0xfc, 0xd7, 0x42, 0x28, 0x22, 0x33, 0x0b, 0x32, 0xd5, - 0x8e, 0x67, 0x77, 0x76, 0x5f, 0x22, 0xa4, 0x11, 0x63, 0x44, 0xee, 0xb6, 0x5b, - 0x2e, 0xc5, 0x16, 0x39, 0x3a, 0xb3, 0x75, 0x1b, 0x53, 0x56, 0xd2, 0xb0, 0xc9, - 0x50, 0x0c, 0x0f, 0x3e, 0x46, 0x91, 0x81, 0x03, 0x5b, 0xc3, 0x66, 0x0f, 0x0b, - 0x8f, 0x9f, 0xbe, 0x6e, 0x40, 0xb5, 0xe8, 0x9c, 0xb7, 0x9b, 0x06, 0x37, 0x14, - 0xca, 0x75, 0xe7, 0x2e, 0x2e, 0x10, 0x0a, 0x10, 0xd6, 0x3b, 0xf7, 0x84, 0xdf, - 0x08, 0x20, 0xef, 0x25, 0xf8, 0xef, 0x40, 0xfe, 0x5f, 0x05, 0xfb, 0x95, 0x68, - 0x3f, 0x91, 0x05, 0xff, 0x3c, 0xb2, 0xd2, 0x19, 0xab, 0x76, 0x60, 0x5a, 0x06, - 0x4f, 0x69, 0x21, 0x9f, 0x1d, 0xc0, 0xd0, 0x0b, 0x3b, 0x48, 0x64, 0x2f, 0x97, - 0x0d, 0xc0, 0x0c, 0xca, 0x4b, 0x8b, 0x43, 0x30, 0x8b, 0xe1, 0x82, 0x86, 0xec, - 0x5a, 0x42, 0x88, 0xd6, 0x00, 0xa3, 0x78, 0x5c, 0x2e, 0xc0, 0x3e, 0x02, 0xe5, - 0xd0, 0x2f, 0x53, 0x35, 0x4b, 0x05, 0x2f, 0xd3, 0xda, 0x0d, 0xff, 0x82, 0xcd, - 0x1f, 0x55, 0xeb, 0xca, 0x57, 0xb6, 0x33, 0x7c, 0x85, 0x93, 0x8a, 0x79, 0x81, - 0x3d, 0x20, 0x21, 0xd6, 0x09, 0x4c, 0x68, 0xb3, 0x75, 0xe9, 0x84, 0xf6, 0x83, - 0x93, 0x30, 0x08, 0x71, 0xe3, 0x48, 0xfc, 0x52, 0x36, 0xcc, 0xa6, 0x33, 0x05, - 0x44, 0xe5, 0x46, 0x39, 0xb5, 0x41, 0x87, 0x01, 0xff, 0x4c, 0xc4, 0x5a, 0x31, - 0xf6, 0x2e, 0xdd, 0x84, 0x3d, 0xbb, 0xdc, 0x5a, 0xa7, 0x27, 0xab, 0x79, 0xb4, - 0x42, 0x68, 0x3c, 0x49, 0x56, 0xbb, 0xb1, 0x95, 0xa4, 0xfa, 0x66, 0xdc, 0x9c, - 0xd5, 0x42, 0xc7, 0x6b, 0x91, 0x50, 0xc8, 0x4b, 0xf8, 0x90, 0x78, 0x99, 0x42, - 0xf5, 0x5c, 0x20, 0x0b, 0x77, 0x3e, 0xcd, 0xd7, 0x99, 0x2c, 0xff, 0x3e, 0xca, - 0x24, 0xde, 0x3e, 0x09, 0x84, 0xe1, 0x0e, 0x68, 0xae, 0x38, 0x75, 0x34, 0xb9, - 0x6c, 0xde, 0x37, 0x92, 0xf1, 0x35, 0xbf, 0x5f, 0x68, 0x78, 0x7d, 0x37, 0x0c, - 0xa8, 0xc4, 0xc4, 0x07, 0x4d, 0xc5, 0xd6, 0x01, 0xae, 0x90, 0x49, 0x54, 0x37, - 0xc3, 0xc2, 0xd4, 0x8a, 0x3d, 0x96, 0x66, 0x83, 0xac, 0x05, 0x16, 0x0b, 0x7a, - 0x84, 0xea, 0xa7, 0xaa, 0xb7, 0x40, 0x09, 0xe5, 0x7a, 0x85, 0xf7, 0xbf, 0x68, - 0xa2, 0xe4, 0x82, 0x00, 0x0f, 0x24, 0x55, 0xc7, 0x16, 0x64, 0xa2, 0xdc, 0xee, - 0x94, 0xbe, 0x35, 0xa8, 0x91, 0x41, 0xdb, 0xa2, 0x8a, 0xc1, 0x0b, 0x64, 0xb2, - 0x6a, 0xd4, 0x5f, 0x52, 0xb4, 0x9e, 0xe2, 0x3a, 0x5f, 0x69, 0xb0, 0x93, 0xcc, - 0xf5, 0x84, 0x44, 0x1f, 0xb5, 0x7a, 0xf0, 0xb7, 0x7a, 0x02, 0x78, 0x5a, 0xe1, - 0xda, 0xc0, 0x90, 0x91, 0xc6, 0x9d, 0xa9, 0x6f, 0x43, 0x3a, 0x47, 0x06, 0xad, - 0x45, 0x0b, 0x7c, 0x09, 0xd6, 0xac, 0x50, 0x85, 0x27, 0x99, 0x64, 0xe6, 0xb2, - 0x95, 0xab, 0x95, 0x47, 0x9e, 0x9f, 0x1d, 0x7e, 0x09, 0x07, 0x8c, 0x09, 0x4a, - 0x14, 0x35, 0x10, 0x2a, 0x5d, 0xac, 0x9d, 0x1e, 0xc2, 0xe6, 0x63, 0x93, 0x04, - 0x30, 0x67, 0xcb, 0x96, 0xc0, 0xd4, 0x28, 0x95, 0x3b, 0x97, 0xd0, 0x96, 0xba, - 0xea, 0xc4, 0x0e, 0x15, 0x63, 0x33, 0x8b, 0x02, 0x5f, 0x8d, 0xd9, 0x77, 0xe6, - 0x5d, 0x56, 0x09, 0x04, 0xa6, 0x72, 0x1b, 0x30, 0xef, 0xc4, 0x10, 0x17, 0xae, - 0x4d, 0x23, 0x15, 0x58, 0xc5, 0xc8, 0x2c, 0xc7, 0xdd, 0x7e, 0x33, 0x56, 0xc0, - 0x9d, 0xc2, 0x49, 0x06, 0xf0, 0x43, 0x8d, 0xfc, 0xc3, 0x00, 0x85, 0x6a, 0xc2, - 0xce, 0xd8, 0xf7, 0x7f, 0xa8, 0x01, 0x57, 0x36, 0xc6, 0x61, 0xe8, 0x02, 0x48, - 0xae, 0xeb, 0x77, 0x48, 0x74, 0xaa, 0x79, 0xd2, 0x90, 0xb8, 0xf5, 0x02, 0x7a, - 0x0a, 0x50, 0x95, 0x37, 0xfc, 0x7c, 0x68, 0x9b, 0x7a, 0xd8, 0x61, 0x16, 0xcf, - 0xec, 0x26, 0x47, 0xcc, 0xaa, 0xe1, 0xc7, 0x4b, 0x41, 0x6f, 0x3e, 0x6a, 0xe8, - 0xf7, 0xcc, 0x60, 0xea, 0xaf, 0x7b, 0x6a, 0x59, 0x0d, 0x51, 0x54, 0x41, 0x38, - 0xe1, 0x73, 0x29, 0x45, 0x60, 0x3a, 0x53, 0x46, 0x2c, 0x60, 0xe1, 0xf6, 0xcb, - 0x0c, 0x9c, 0xa0, 0x39, 0x0c, 0x48, 0x82, 0x24, 0xc3, 0x13, 0x26, 0x9f, 0xcd, - 0x59, 0xfc, 0xb6, 0x11, 0xfb, 0x2d, 0x9b, 0x4c, 0x8f, 0xa6, 0x01, 0xbb, 0x1c, - 0xb8, 0xd0, 0x7d, 0x79, 0x7b, 0xf5, 0xde, 0x52, 0xbc, 0xee, 0xb0, 0x23, 0x01, - 0xc8, 0x96, 0x2a, 0xc1, 0xfc, 0x04, 0x91, 0xdc, 0x81, 0xaf, 0xfd, 0x6c, 0x1e, - 0xbf, 0x89, 0xa1, 0x3d, 0x6f, 0x29, 0x0e, 0xda, 0x5d, 0x5c, 0xef, 0x38, 0x22, - 0x15, 0xc5, 0xe9, 0x51, 0xd7, 0x13, 0x05, 0xef, 0x33, 0xd9, 0x73, 0x71, 0x26, - 0x61, 0xdd, 0xb3, 0xd8, 0x7d, 0x0e, 0xa6, 0xc5, 0x76, 0x45, 0x74, 0x90, 0xef, - 0xe3, 0xca, 0x30, 0x7e, 0x5d, 0x4e, 0x54, 0x69, 0x13, 0x55, 0xf2, 0xa1, 0x35, - 0x0c, 0x0f, 0x71, 0x9d, 0x01, 0x0d, 0xcc, 0xdd, 0xd3, 0xd2, 0x91, 0x2a, 0x87, - 0xd9, 0xb7, 0x1e, 0x86, 0x6c, 0x9f, 0x62, 0xf5, 0xbe, 0x9b, 0x19, 0xed, 0x1c, - 0xec, 0x22, 0x0c, 0x9e, 0x76, 0x12, 0xa0, 0x9a, 0x54, 0x60, 0x25, 0x0a, 0x04, - 0x0f, 0x20, 0xed, 0x1e, 0x0e, 0x64, 0x43, 0xa5, 0x56, 0xb4, 0x17, 0x1c, 0x24, - 0xac, 0x46, 0x16, 0x09, 0x53, 0x03, 0x25, 0x6e, 0x48, 0xca, 0x4d, 0x53, 0x5a, - 0x2f, 0x9c, 0xa2, 0x94, 0x5b, 0x19, 0x56, 0x56, 0xac, 0xb5, 0x75, 0xc0, 0x0f, - 0x73, 0x85, 0xdf, 0xb6, 0x97, 0x99, 0x29, 0xa5, 0x90, 0xef, 0x02, 0xac, 0x33, - 0xe6, 0xa8, 0x8d, 0xea, 0x07, 0x5b, 0xa9, 0x96, 0xd3, 0xc3, 0x36, 0x24, 0x86, - 0xc9, 0x23, 0x12, 0x60, 0x8f, 0xb9, 0x3e, 0x14, 0x32, 0xfd, 0xc2, 0x9b, 0x76, - 0x58, 0x25, 0x3d, 0xdd, 0xff, 0xa2, 0x95, 0xf3, 0x93, 0xd8, 0x1b, 0x0c, 0x85, - 0x67, 0x42, 0xb3, 0xaa, 0x36, 0x14, 0x73, 0xd3, 0x76, 0x02, 0x9c, 0xb4, 0xab, - 0x6b, 0xf0, 0x54, 0x55, 0x7c, 0xe2, 0x94, 0xc7, 0x28, 0xa4, 0x68, 0x7d, 0x57, - 0xec, 0x89, 0x09, 0xff, 0x51, 0xa4, 0xd0, 0x2f, 0x9d, 0xcd, 0x11, 0x51, 0xec, - 0xa4, 0x21, 0x94, 0x0c, 0xc6, 0xd6, 0xc1, 0x29, 0x9f, 0x01, 0xf8, 0x1a, 0x61, - 0xe0, 0xc9, 0xe6, 0xf8, 0xeb, 0x5e, 0x99, 0x50, 0xeb, 0x9c, 0x8d, 0xb0, 0x85, - 0x71, 0x0d, 0xba, 0xba, 0xa8, 0xb4, 0x95, 0x55, 0xe4, 0xd9, 0x9b, 0x3b, 0xf5, - 0xc8, 0x1f, 0xf9, 0xfe, 0x31, 0x4e, 0x04, 0x7a, 0xf1, 0x52, 0x50, 0x8f, 0x57, - 0x01, 0x5c, 0xa4, 0x02, 0xc6, 0x7d, 0x92, 0x5c, 0x99, 0xac, 0xea, 0x3e, 0xe8, - 0xcc, 0x4b, 0x00, 0x8c, 0x5c, 0xb4, 0x39, 0x66, 0xe7, 0x14, 0xef, 0x48, 0x0f, - 0xd0, 0x5e, 0x07, 0xc7, 0xb2, 0xdd, 0xa9, 0xaa, 0x39, 0x66, 0x11, 0x3e, 0xaa, - 0x29, 0x3d, 0x3f, 0x62, 0x2b, 0x30, 0x9d, 0x64, 0x80, 0x3c, 0xe1, 0xe6, 0x37, - 0x8b, 0x6a, 0xac, 0x4f, 0xab, 0x52, 0x7c, 0x43, 0xcd, 0x45, 0xed, 0x0a, 0x3c, - 0x1a, 0x4b, 0x9f, 0xb1, 0x8d, 0xcc, 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, - 0x63, 0x9c, 0xda, 0x00, 0x75, 0xa2, 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, - 0x99, 0x49, 0x5b, 0xd9, 0x13, 0x3d, 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, - 0xba, 0x92, 0xc7, 0xb6, 0x06, 0xa5, 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, - 0x59, 0x6f, 0x27, 0x88, 0xf3, 0xc8, 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, - 0xf5, 0xdd, 0x23, 0xdf, 0xdb, 0xac, 0x13, 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, - 0xfe, 0xd2, 0x29, 0x2c, 0x44, 0xf7, 0x08, 0x34, 0xcf, 0x96, 0xc0, 0x5d, 0x58, - 0x82, 0x7e, 0x69, 0xbf, 0xc2, 0xe6, 0x96, 0xfa, 0x08, 0x74, 0x86, 0x9c, 0x02, - 0xf3, 0xdc, 0xa1, 0x1c, 0x3b, 0x90, 0xcb, 0x21, 0x4e, 0x68, 0xbc, 0x1c, 0xae, - 0x03, 0x9d, 0x7a, 0x14, 0x6c, 0xdc, 0x1d, 0x60, 0x9d, 0x7a, 0x6b, 0x3f, 0xd5, - 0xd4, 0x61, 0xb0, 0x95, 0x1c, 0x82, 0xcf, 0xb3, 0xe7, 0x63, 0xfa, 0xd2, 0xd1, - 0xbc, 0x76, 0x78, 0xcd, 0xf8, 0x27, 0x79, 0xf8, 0xfd, 0x5a, 0x1c, 0xe2, 0x2a, - 0x8d, 0x3c, 0x45, 0x47, 0xab, 0xd9, 0x59, 0x83, 0x8a, 0x46, 0xfb, 0x80, 0xaf, - 0xe0, 0x1f, 0x8e, 0xcc, 0x99, 0x31, 0x51, 0x3b, 0x19, 0x62, 0xec, 0x54, 0x08, - 0x56, 0xcb, 0x18, 0x93, 0x87, 0xcf, 0xbf, 0xcc, 0x0f, 0x7c, 0x68, 0x22, 0x3c, - 0xba, 0x47, 0xfb, 0x0c, 0x9b, 0x48, 0x6e, 0x4d, 0x99, 0x17, 0x19, 0x41, 0xf7, - 0x67, 0x5a, 0x8b, 0x46, 0x32, 0x8a, 0x3b, 0xc1, 0x09, 0xbf, 0x07, 0xc6, 0x6d, - 0x5e, 0xde, 0x77, 0x1c, 0xc4, 0xc7, 0x4c, 0xe8, 0x03, 0x33, 0x82, 0x91, 0x91, - 0xee, 0xdc, 0x49, 0x35, 0x08, 0xa6, 0x44, 0x53, 0x0a, 0x61, 0x44, 0xf2, 0x2d, - 0xcf, 0x97, 0x52, 0x5a, 0x4c, 0xdc, 0xa1, 0xad, 0x71, 0x07, 0x3b, 0x08, 0x0b, - 0x73, 0xea, 0x45, 0x49, 0xf5, 0x40, 0x1b, 0xff, 0x43, 0x18, 0x26, 0x8e, 0x6a, - 0xd6, 0x37, 0x36, 0x31, 0x57, 0xa1, 0x9a, 0x53, 0xf1, 0x23, 0xa0, 0xb0, 0xe1, - 0x6d, 0x0b, 0x77, 0xf0, 0x20, 0x28, 0xda, 0x46, 0x41, 0x00, 0xfd, 0xe7, 0x6d, - 0x83, 0xdd, 0x0b, 0xb2, 0x24, 0xf7, 0xb5, 0x7a, 0x00, 0xc0, 0x2f, 0x68, 0xae, - 0x64, 0x8f, 0xdc, 0x52, 0x99, 0x57, 0xa1, 0x04, 0x90, 0xdc, 0xe1, 0xfd, 0xdb, - 0xb0, 0x90, 0x4f, 0x0d, 0x51, 0x8b, 0xb3, 0x87, 0x54, 0x40, 0x19, 0x98, 0x3b, - 0x61, 0x69, 0x75, 0xa7, 0x8e, 0x74, 0xd8, 0x54, 0xfd, 0xdc, 0x49, 0xb2, 0x55, - 0x16, 0x7b, 0x55, 0xef, 0x4b, 0xee, 0x46, 0x56, 0x68, 0xb2, 0x0e, 0xa4, 0x11, - 0x8c, 0xa5, 0x69, 0xae, 0x48, 0x0e, 0x0f, 0x6e, 0x5e, 0x04, 0x3a, 0x35, 0x7b, - 0x36, 0xd3, 0xab, 0x36, 0xc8, 0x61, 0xf2, 0x27, 0x83, 0x01, 0xdc, 0xe5, 0x76, - 0x74, 0xd5, 0x07, 0x3b, 0x3a, 0x6f, 0x51, 0x03, 0xa0, 0x79, 0x3a, 0xf1, 0xb7, - 0xd4, 0x6f, 0x95, 0x7e, 0x22, 0xd8, 0xd2, 0x58, 0x3b, 0xf1, 0x81, 0x83, 0x6c, - 0x3b, 0xe9, 0x93, 0x0b, 0xac, 0x8f, 0xa4, 0x60, 0xe9, 0x68, 0xaa, 0x71, 0x09, - 0x87, 0x0b, 0xbe, 0xd1, 0x7d, 0xf5, 0xf8, 0x88, 0xc8, 0xca, 0x14, 0x67, 0xae, - 0x17, 0xdb, 0xbc, 0xde, 0x31, 0xc1, 0x10, 0x5c, 0xb5, 0xbd, 0xa8, 0x8a, 0xc6, - 0xc6, 0x27, 0x00, 0x2c, 0xe2, 0x1c, 0x02, 0x14, 0x0f, 0xfe, 0x81, 0xec, 0x58, - 0xbf, 0x1e, 0x6d, 0x1b, 0xb7, 0xaa, 0xad, 0xa4, 0x1f, 0xba, 0x0b, 0xb5, 0x88, - 0x77, 0x8a, 0x7f, 0x65, 0x20, 0x2a, 0xd8, 0x11, 0xea, 0x73, 0xd2, 0x6c, 0x74, - 0x55, 0x03, 0x95, 0xaf, 0xf7, 0x53, 0x25, 0x10, 0x7c, 0x9b, 0x3f, 0x9a, 0xe9, - 0xdc, 0xdc, 0xd8, 0x6e, 0xd0, 0x81, 0xa2, 0xe7, 0x42, 0x47, 0x19, 0xa3, 0xd1, - 0x85, 0xb7, 0xe0, 0xa4, 0x3a, 0x47, 0x2e, 0x29, 0x8a, 0xc0, 0xaf, 0xdc, 0x52, - 0x87, 0xd7, 0xad, 0x12, 0x4c, 0xd9, 0x40, 0x5a, 0x62, 0xcd, 0x1c, 0xa0, 0x8b, - 0x28, 0x2e, 0xfe, 0xf7, 0xf9, 0x28, 0xdf, 0x76, 0xe2, 0x82, 0x1a, 0x41, 0x84, - 0x13, 0xeb, 0x7c, 0xea, 0xa5, 0xff, 0x12, 0x90, 0xb0, 0x3e, 0xc9, 0x1c, 0xe6, - 0xdd, 0x28, 0x13, 0x0c, 0x3a, 0xb0, 0xb2, 0x3b, 0x60, 0x2b, 0xd5, 0xbe, 0x5d, - 0xc2, 0x60, 0x03, 0xaa, 0xe0, 0x4b, 0x33, 0xd7, 0xbd, 0x25, 0x90, 0xe9, 0x0c, - 0x8c, 0x38, 0x8e, 0xa7, 0x95, 0x51, 0x22, 0x0c, 0xaa, 0xa6, 0x5f, 0x98, 0x1a, - 0x4c, 0xfc, 0x69, 0x4d, 0xbd, 0xbd, 0xb8, 0x09, 0x34, 0x38, 0x14, 0xf4, 0xc1, - 0x7a, 0xb5, 0x0b, 0xbf, 0x5b, 0xfc, 0x9d, 0x57, 0x27, 0x64, 0xb4, 0x24, 0x00, - 0xbb, 0x7a, 0x3a, 0x60, 0x90, 0x3d, 0x81, 0x52, 0x65, 0x6b, 0xe8, 0xbd, 0xae, - 0xe7, 0x95, 0x7d, 0xe5, 0xd8, 0xaa, 0x63, 0xa8, 0xa5, 0x0c, 0x38, 0xbd, 0x03, - 0x87, 0x72, 0xc4, 0x14, 0x3d, 0x0b, 0xea, 0xc7, 0x25, 0xc8, 0x3d, 0x92, 0x49, - 0x9e, 0x56, 0x75, 0x65, 0x47, 0x37, 0x43, 0xf4, 0xc8, 0xee, 0x4b, 0x52, 0x1d, - 0xea, 0xb8, 0x36, 0x06, 0xcc, 0x20, 0x9b, 0x9e, 0x0d, 0x25, 0x6c, 0x01, 0xb5, - 0x01, 0x26, 0xf4, 0xa8, 0x5e, 0x38, 0xbb, 0x68, 0x6f, 0x8d, 0xbf, 0x0d, 0xdb, - 0x84, 0xa3, 0x78, 0xa7, 0x96, 0x53, 0xa1, 0xe8, 0x4d, 0xae, 0xc3, 0xeb, 0xe6, - 0x2d, 0x5f, 0x6c, 0x4a, 0x3e, 0xfc, 0x5d, 0xd2, 0xce, 0xed, 0x21, 0xf5, 0x63, - 0x36, 0x48, 0xc2, 0xc3, 0x7a, 0xf9, 0xab, 0x36, 0x59, 0xb7, 0xd4, 0xd6, 0xa1, - 0x6f, 0x9c, 0x67, 0x42, 0x67, 0x30, 0x8b, 0xf1, 0x16, 0xb5, 0xb7, 0x13, 0x3d, - 0xc2, 0x1e, 0x80, 0x96, 0xc7, 0xe9, 0xf8, 0xe9, 0xe1, 0x0c, 0x1e, 0x3f, 0xac, - 0x40, 0x58, 0xb6, 0x82, 0xc6, 0x8e, 0x54, 0xfa, 0xca, 0xe0, 0xf9, 0xc2, 0xdd, - 0x4d, 0x64, 0xd9, 0x04, 0x61, 0x52, 0xb4, 0x76, 0x23, 0x32, 0x93, 0x9f, 0x17, - 0xe6, 0xaa, 0xf7, 0xd8, 0xb9, 0xd3, 0x58, 0xe2, 0x21, 0x8d, 0x4e, 0x0d, 0x69, - 0xa4, 0xf1, 0x19, 0xe1, 0xc6, 0x4e, 0xec, 0x4c, 0x8b, 0x53, 0x28, 0x09, 0x70, - 0x71, 0x31, 0xf0, 0x1f, 0x55, 0xc7, 0xad, 0x04, 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, - 0x3d, 0x0a, 0x2b, 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, 0x5b, 0x8c, 0x94, - 0xca, 0x80, 0xbb, 0x0a, 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, 0x83, 0x04, - 0xae, 0x25, 0x15, 0xd5, 0xf7, 0x69, 0x9d, 0x4a, 0xbe, 0xe5, 0xc2, 0x0b, 0xe6, - 0x09, 0xd8, 0x73, 0x51, 0x10, 0x12, 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, - 0xfb, 0x63, 0x4c, 0xff, 0x26, 0x58, 0xba, 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, - 0x5e, 0xce, 0xfb, 0x30, 0x15, 0xee, 0x3f, 0x03, 0xca, 0x52, 0xa1, 0x77, 0xf2, - 0x61, 0xec, 0xdc, 0x26, 0xbc, 0x08, 0x9d, 0x34, 0xc6, 0x40, 0x48, 0x46, 0xe9, - 0xc6, 0x47, 0xfc, 0xfe, 0x98, 0xcc, 0x6a, 0xcd, 0xbb, 0x46, 0x4f, 0x64, 0x27, - 0x8a, 0xd8, 0xce, 0x9d, 0x1a, 0xe0, 0xd4, 0x15, 0xbc, 0x0c, 0x05, 0x24, 0x5f, - 0xdd, 0xaf, 0x4e, 0xbc, 0x8d, 0xc7, 0x03, 0xa8, 0x5c, 0xb2, 0x70, 0xf7, 0x96, - 0xad, 0x2d, 0x93, 0x7e, 0x2a, 0xc0, 0xd5, 0xe0, 0xa3, 0x48, 0x21, 0x75, 0x80, - 0x00, 0xaa, 0x59, 0xc9, 0xd4, 0x65, 0x24, 0x85, 0x29, 0x4e, 0xe0, 0xab, 0x29, - 0x69, 0x6b, 0x21, 0x43, 0x0f, 0xa5, 0x4d, 0xcf, 0xbf, 0x2b, 0x9c, 0x49, 0xd1, - 0x42, 0x06, 0x42, 0x09, 0xee, 0xee, 0xd4, 0xd4, 0x71, 0xff, 0xc0, 0x17, 0xd4, - 0xe2, 0x0a, 0x79, 0x6b, 0x09, 0x27, 0x80, 0x4c, 0x06, 0x1b, 0x9f, 0x4a, 0x70, - 0x91, 0xfe, 0x01, 0x5a, 0xda, 0x68, 0xfd, 0x84, 0x42, 0xe0, 0x18, 0x25, 0xc8, - 0x8d, 0xfe, 0x55, 0xcf, 0x5d, 0xe3, 0x89, 0x36, 0xf7, 0xce, 0x25, 0x31, 0x1b, - 0x90, 0x2b, 0xa9, 0x7a, 0x3c, 0x12, 0xa9, 0x5c, 0xfa, 0x1c, 0x3a, 0x59, 0x1b, - 0x81, 0x8f, 0x60, 0x83, 0x27, 0x09, 0xd9, 0xe4, 0x83, 0x9e, 0x41, 0x0f, 0xb3, - 0x6b, 0x84, 0xf3, 0xac, 0x4f, 0x07, 0x0f, 0xc3, 0x5e, 0x16, 0x19, 0x78, 0x25, - 0x9e, 0x5b, 0x8e, 0xdc, 0x74, 0x4d, 0x90, 0x91, 0x9a, 0xa7, 0x70, 0xbb, 0x36, - 0x21, 0x51, 0x28, 0xe5, 0x82, 0xb5, 0x96, 0x41, 0xe2, 0x38, 0x52, 0xe9, 0x58, - 0xeb, 0x8f, 0xc3, 0xc0, 0xaa, 0x96, 0x15, 0x2b, 0xa4, 0xf7, 0x7f, 0x13, 0x8d, - 0x6a, 0x67, 0x12, 0xa3, 0xae, 0x32, 0x26, 0x01, 0x58, 0x83, 0xf8, 0x1d, 0xb2, - 0x3e, 0x58, 0x3c, 0x86, 0x9c, 0x4c, 0x71, 0x14, 0x3a, 0x6f, 0xff, 0xd6, 0x5e, - 0x8d, 0xfd, 0xc5, 0x0c, 0x99, 0xa2, 0xf1, 0xf3, 0x14, 0xcd, 0xcc, 0x71, 0x35, - 0x9e, 0x23, 0x5f, 0x1d, 0x7d, 0xc2, 0xb5, 0xf3, 0x8e, 0xf7, 0xb9, 0x70, 0x84, - 0x31, 0x63, 0xc0, 0x3f, 0x9d, 0xd4, 0x0a, 0x80, 0x15, 0xef, 0xdc, 0x87, 0x91, - 0x95, 0x6a, 0x3f, 0x3c, 0xed, 0xd9, 0xea, 0x64, 0xf8, 0xef, 0xa7, 0xa0, 0x81, - 0x5a, 0x70, 0x38, 0x1d, 0x71, 0x46, 0x78, 0x17, 0xbd, 0x04, 0xca, 0x52, 0x9a, - 0xed, 0xe0, 0x7f, 0xf6, 0x0d, 0x17, 0x6a, 0xed, 0x0f, 0x85, 0x5a, 0x2e, 0xae, - 0xa8, 0x9e, 0xae, 0xac, 0xa8, 0x93, 0x58, 0xc0, 0x81, 0x82, 0x6a, 0x08, 0x12, - 0xa5, 0xbc, 0xa2, 0x8b, 0xe1, 0x37, 0x3f, 0x08, 0x6d, 0xbd, 0xba, 0x7e, 0x43, - 0xe2, 0x03, 0x21, 0x2c, 0x9f, 0xed, 0x21, 0x47, 0x4b, 0xa1, 0x9a, 0x05, 0x5f, - 0xfc, 0xc1, 0x79, 0x41, 0x2e, 0x89, 0x3a, 0x74, 0x48, 0x32, 0x29, 0x8c, 0x5f, - 0xe2, 0x4c, 0xc6, 0xb1, 0x86, 0x67, 0xf4, 0x9b, 0x34, 0xdf, 0xb1, 0x23, 0x79, - 0x26, 0x74, 0x19, 0xa9, 0xcb, 0x94, 0x03, 0xd8, 0x16, 0x7d, 0x8d, 0x1e, 0x91, - 0xd2, 0x81, 0x1a, 0x04, 0x3b, 0x29, 0x24, 0x3b, 0x06, 0x9b, 0x37, 0x58, 0x78, - 0x47, 0xdc, 0x6f, 0xcd, 0xdb, 0x18, 0x31, 0xbd, 0x1c, 0xc2, 0x56, 0x7c, 0xa0, - 0x33, 0xac, 0x40, 0xf7, 0x4a, 0xb6, 0x95, 0x5f, 0x68, 0x3b, 0x12, 0xe4, 0xe8, - 0x25, 0x4e, 0x4e, 0xa7, 0x60, 0xd3, 0x8b, 0x3f, 0x46, 0x79, 0x1c, 0x5c, 0x4c, - 0xb1, 0x2b, 0xc7, 0xcc, 0xb0, 0xed, 0x18, 0x65, 0xf2, 0x5d, 0x60, 0x1c, 0x30, - 0x3f, 0x81, 0xfb, 0x1f, 0xa1, 0xdb, 0x48, 0x53, 0x3d, 0x3d, 0x6b, 0x28, 0x8e, - 0x4d, 0x9a, 0x4d, 0xff, 0x8e, 0xc2, 0x1c, 0x96, 0xf5, 0x78, 0x39, 0x97, 0x10, - 0xc8, 0x25, 0xfe, 0x7e, 0x32, 0xf9, 0x3a, 0x8c, 0x07, 0x43, 0xf9, 0xeb, 0xd5, - 0x4c, 0xc1, 0x51, 0xc7, 0x61, 0x03, 0x37, 0xae, 0xbf, 0x7e, 0x9b, 0x91, 0x57, - 0x20, 0xa5, 0x43, 0x51, 0xd4, 0x9a, 0xb8, 0xc2, 0x2f, 0xa3, 0x49, 0x98, 0xdc, - 0xf5, 0x28, 0x65, 0x9c, 0x24, 0x40, 0xd8, 0x6c, 0x8d, 0x42, 0x5c, 0xc2, 0x29, - 0x9c, 0x16, 0xeb, 0x02, 0xb6, 0x17, 0x0e, 0xc3, 0x33, 0xbd, 0x30, 0xd3, 0xc1, - 0xa1, 0x9d, 0x71, 0x52, 0xad, 0xaa, 0xb4, 0xce, 0x8d, 0xea, 0x5f, 0xef, 0x0e, - 0xf3, 0x02, 0x51, 0x48, 0x9f, 0xcf, 0x58, 0xd6, 0xe1, 0xad, 0x85, 0xa9, 0x14, - 0x8f, 0xbd, 0xf9, 0xa9, 0x53, 0x32, 0xaa, 0x60, 0x5c, 0x5d, 0x54, 0x83, 0x0e, - 0xaa, 0xdc, 0x4a, 0xeb, 0x1a, 0x2a, 0x07, 0x08, 0xb4, 0xd4, 0xdc, 0xf2, 0x83, - 0x54, 0x46, 0xe0, 0xad, 0xfa, 0x85, 0xe7, 0x60, 0xbc, 0x1b, 0xdd, 0x63, 0xb3, - 0xc2, 0x7b, 0x64, 0xf1, 0xbe, 0x9d, 0xa1, 0x49, 0xea, 0x9c, 0x85, 0xf3, 0x0b, - 0x93, 0xa0, 0x91, 0x6b, 0x1c, 0x05, 0x19, 0x29, 0xef, 0x29, 0xc7, 0x89, 0xa1, - 0x2a, 0x31, 0xad, 0x13, 0x14, 0xe2, 0xed, 0xe0, 0x8f, 0xad, 0x31, 0x03, 0xab, - 0xeb, 0xc7, 0xc3, 0x0b, 0xdd, 0x29, 0xfe, 0x9a, 0xbe, 0x9a, 0x55, 0xa0, 0x11, - 0x59, 0xc7, 0x52, 0xed, 0xad, 0x81, 0x74, 0x47, 0x0b, 0x43, 0xcc, 0x55, 0x47, - 0xbf, 0xac, 0xa6, 0xa8, 0x20, 0x18, 0x11, 0x7f, 0x72, 0x64, 0x13, 0x90, 0xf0, - 0x86, 0xb6, 0xe1, 0x49, 0x8b, 0xe6, 0x95, 0x48, 0x52, 0x7e, 0x6a, 0xda, 0x2b, - 0x38, 0xb9, 0xfe, 0x12, 0x1e, 0xf6, 0x70, 0xaf, 0x74, 0x37, 0xd3, 0x25, 0x36, - 0xd5, 0xcf, 0x5c, 0x4a, 0xb1, 0x9d, 0xd9, 0x97, 0x71, 0x58, 0x2d, 0x03, 0x81, - 0x04, 0xb7, 0xe0, 0x39, 0xa3, 0x76, 0xf7, 0xac, 0xbb, 0xea, 0xdb, 0x34, 0xf9, - 0x45, 0xbe, 0xb9, 0xd7, 0xca, 0x0e, 0x4e, 0x3d, 0x5c, 0x5e, 0x4e, 0xb1, 0xd8, - 0x52, 0x6e, 0xbd, 0x13, 0xda, 0xcb, 0x1b, 0xa3, 0x57, 0x35, 0xc6, 0xd0, 0x4a, - 0x45, 0x55, 0xac, 0xf4, 0xbf, 0x11, 0x76, 0x26, 0x50, 0x0d, 0x77, 0xb3, 0x81, - 0x89, 0xdd, 0x48, 0x88, 0x04, 0x12, 0x25, 0xac, 0xbe, 0x38, 0x74, 0xa4, 0xc0, - 0xf6, 0x07, 0xfe, 0x67, 0x45, 0xf9, 0x35, 0x5b, 0x3f, 0xa1, 0x88, 0xf1, 0xd6, - 0x5c, 0x09, 0xf3, 0x89, 0xaf, 0x1b, 0x9d, 0x62, 0x32, 0xaa, 0x79, 0x44, 0x79, - 0x19, 0xc5, 0x50, 0xf6, 0xf3, 0x1f, 0xec, 0x35, 0x48, 0x1c, 0xb9, 0x22, 0xde, - 0x2d, 0xb5, 0xb4, 0xda, 0x2f, 0x81, 0x94, 0x86, 0x17, 0x02, 0x8e, 0x32, 0x17, - 0x06, 0xa3, 0xa7, 0x78, 0xc1, 0x93, 0x8c, 0x44, 0x3b, 0xb0, 0x0e, 0x5b, 0x0f, - 0xf0, 0x6a, 0xd8, 0xab, 0x9b, 0x1a, 0xb0, 0xc1, 0x14, 0x77, 0x67, 0x3f, 0x85, - 0xdf, 0x95, 0x61, 0xdb, 0xea, 0x45, 0xd5, 0xf9, 0x78, 0x1e, 0xbe, 0x31, 0x7a, - 0x07, 0x10, 0xae, 0x54, 0x61, 0xe3, 0x4f, 0xe6, 0xf1, 0xb1, 0xaa, 0x9b, 0x4e, - 0x67, 0xb1, 0x49, 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, 0xe3, 0x81, 0x93, 0xbc, - 0x7b, 0xdc, 0x8b, 0xa3, 0xe4, 0xe3, 0xd1, 0xd9, 0x33, 0xbf, 0xb5, 0x80, 0xf5, - 0xb3, 0xe8, 0x7a, 0x2a, 0x06, 0x51, 0x70, 0x51, 0x41, 0x0f, 0xe1, 0xb4, 0xff, - 0x1e, 0xa0, 0xad, 0xe8, 0x24, 0xf3, 0x38, 0x51, 0x54, 0x56, 0xa5, 0x7c, 0x7a, - 0x91, 0x6a, 0x74, 0x38, 0x8e, 0xe8, 0xf1, 0x28, 0x1f, 0x9a, 0xde, 0x0a, 0xe2, - 0xa2, 0x61, 0x3a, 0x06, 0x12, 0xc4, 0x69, 0xdf, 0x79, 0x2b, 0x8d, 0xf4, 0xca, - 0xe4, 0xfc, 0x25, 0xc1, 0xca, 0xdb, 0xa9, 0x5a, 0x80, 0x7c, 0xe6, 0x1e, 0x5a, - 0x53, 0x03, 0xfa, 0xaf, 0x9e, 0x14, 0x65, 0x39, 0x96, 0xb5, 0xa8, 0xad, 0xc3, - 0x4f, 0xd4, 0x75, 0xef, 0x14, 0x99, 0x09, 0x4b, 0xab, 0xaf, 0x1f, 0x3f, 0x07, - 0xda, 0x9a, 0x39, 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, 0x98, 0x7a, 0xdf, - 0xe9, 0x56, 0x48, 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, 0x88, 0x41, 0x58, - 0x30, 0x99, 0xaf, 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, 0x34, 0x7e, 0x40, - 0xb6, 0xfd, 0x8c, 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, 0x9a, 0x02, 0x19, - 0xbc, 0x3e, 0x4e, 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, 0x16, 0x86, 0x08, - 0x68, 0x76, 0xbe, 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, 0x8f, 0x4f, 0xab, - 0x3d, 0x28, 0xc0, 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, 0xf8, 0x89, 0x46, - 0xfb, 0x40, 0xcf, 0xa5, 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, 0x3c, 0x83, 0x47, - 0xec, 0xee, 0x93, 0xd4, 0x6d, 0x14, 0x0b, 0xb5, 0xf6, 0x95, 0x31, 0xd6, 0x66, - 0x54, 0x8b, 0x10, 0x9c, 0xe7, 0x64, 0xbe, 0xad, 0x7c, 0x87, 0xbd, 0x4c, 0x87, - 0x64, 0x94, 0xde, 0x82, 0xdb, 0x6e, 0x50, 0x73, 0xa6, 0xc9, 0x4f, 0x7c, 0x09, - 0x9a, 0x40, 0xd7, 0xa3, 0x1c, 0x4a, 0x04, 0xb6, 0x9c, 0x9f, 0xcc, 0xf3, 0xc7, - 0xdd, 0x56, 0xf5, 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, 0xf7, 0x95, 0x39, 0x81, - 0xd5, 0x5a, 0x96, 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, 0x42, 0xe5, 0xba, - 0xfe, 0xc8, 0x84, 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, 0xc4, 0x60, 0xf9, - 0x8f, 0xeb, 0x82, 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, 0x76, 0x79, 0x82, - 0x36, 0xc5, 0xca, 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, 0x4d, 0x87, 0x13, - 0xe5, 0x6c, 0x77, 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, 0x3a, 0x88, 0x54, - 0xbc, 0x6e, 0x65, 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, 0x0b, 0x73, 0xba, - 0x24, 0x1b, 0xf7, 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, 0x96, 0x87, 0xac, - 0x52, 0x69, 0xfd, 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, 0x26, 0x76, 0x85, - 0x99, 0x8a, 0x3f, 0x7d, 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, 0x46, 0x49, 0x5d, - 0x24, 0xc4, 0x98, 0x63, 0x5e, 0xf9, 0x7a, 0xc6, 0x6a, 0x40, 0x08, 0x94, 0xc0, - 0x9f, 0x73, 0x48, 0x8e, 0xb7, 0xcf, 0x33, 0xf6, 0xda, 0xd1, 0x66, 0x6a, 0x05, - 0xf9, 0x1a, 0xd7, 0x75, 0x79, 0x65, 0xc2, 0x99, 0x36, 0xe7, 0xfa, 0x48, 0xd7, - 0x7e, 0x89, 0xee, 0x09, 0x62, 0xf5, 0x8c, 0x05, 0x1d, 0x11, 0xd0, 0x55, 0xfc, - 0xe2, 0x04, 0xa5, 0x62, 0xde, 0x68, 0x08, 0x8a, 0x1b, 0x26, 0x48, 0xb8, 0x17, - 0x4c, 0xbc, 0xfc, 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x83, 0x6a, 0x7a, 0xbf, 0x02, - 0xcf, 0x1a, 0x4e, 0xb8, 0xed, 0xc9, 0xe0, 0xba, 0x76, 0x0f, 0x63, 0xb2, 0xd4, - 0x07, 0x61, 0x9c, 0x48, 0x2d, 0xaa, 0xb4, 0x20, 0x99, 0x55, 0xbb, 0x50, 0x9e, - 0x84, 0x99, 0x91, 0x17, 0x91, 0xb3, 0x0d, 0xf6, 0x13, 0xaa, 0xe8, 0x90, 0x1d, - 0x68, 0xef, 0x8d, 0x06, 0x63, 0xc0, 0xb6, 0x9c, 0x01, 0xfc, 0xc4, 0x53, 0x91, - 0xfd, 0x5b, 0x87, 0x63, 0xfb, 0x96, 0x17, 0xdd, 0x98, 0x85, 0xae, 0xba, 0x10, - 0x5b, 0xa2, 0x19, 0xdc, 0xa6, 0x6d, 0x96, 0xb8, 0x72, 0xd8, 0x80, 0x33, 0x91, - 0x4a, 0x7a, 0x0b, 0x85, 0xaa, 0x96, 0x29, 0x22, 0x6e, 0x01, 0x71, 0xa6, 0x0b, - 0x8b, 0x0c, 0x88, 0xa3, 0x24, 0x75, 0x58, 0xf3, 0xe1, 0xee, 0xf6, 0xde, 0xc7, - 0xb0, 0x91, 0xed, 0x3a, 0x5f, 0x39, 0xcb, 0x20, 0x23, 0xd4, 0x67, 0x89, 0xeb, - 0x7d, 0x98, 0x9a, 0xf7, 0x79, 0x25, 0x0b, 0x7c, 0xa3, 0xa1, 0xa0, 0x5c, 0xb3, - 0xc1, 0xee, 0xb0, 0xa4, 0xc8, 0x60, 0x18, 0xc2, 0xdb, 0xc9, 0x5b, 0x2b, 0x0b, - 0x2f, 0x40, 0x69, 0x82, 0xdb, 0x04, 0x16, 0x55, 0x46, 0xba, 0x0a, 0x08, 0xa0, - 0x70, 0xba, 0x05, 0xb3, 0xe4, 0xdb, 0xfd, 0x3a, 0x2b, 0xfc, 0xc9, 0xee, 0x6e, - 0xd0, 0x16, 0xc0, 0xf6, 0x65, 0xbe, 0x81, 0x33, 0xb7, 0xdc, 0x1d, 0x86, 0x04, - 0x4d, 0xb0, 0xf9, 0xdb, 0x40, 0xfb, 0x0e, 0x9f, 0x8b, 0xc2, 0xe4, 0xdb, 0x53, - 0x82, 0xa8, 0xb4, 0xf8, 0x15, 0xb4, 0xe8, 0x43, 0x4a, 0xd0, 0xdf, 0xbc, 0x51, - 0xa5, 0xe9, 0xb1, 0x45, 0xe1, 0x59, 0x6c, 0xbf, 0x46, 0x70, 0xb7, 0xe0, 0x5d, - 0xfd, 0xaf, 0xbb, 0x0c, 0xf3, 0xdd, 0xee, 0x28, 0xd7, 0x6a, 0x82, 0x42, 0x8e, - 0x8a, 0xba, 0x43, 0x64, 0xe8, 0x4b, 0xac, 0x37, 0x92, 0x98, 0xdf, 0x29, 0x32, - 0xe6, 0x9b, 0xb5, 0xd0, 0x45, 0x51, 0x6e, 0xfc, 0x33, 0xae, 0x6c, 0xc3, 0x94, - 0x7c, 0xeb, 0x09, 0xed, 0x37, 0x16, 0x67, 0x21, 0x2a, 0x83, 0x1b, 0x54, 0x85, - 0xea, 0xfc, 0xe8, 0x48, 0x81, 0x88, 0xea, 0x4e, 0x27, 0xd0, 0xcd, 0xf7, 0xdd, - 0xd3, 0x48, 0xab, 0xff, 0x77, 0x7f, 0x4a, 0x13, 0xbb, 0xc7, 0x16, 0xb6, 0xa5, - 0x94, 0x4e, 0xe7, 0x27, 0x96, 0x56, 0x90, 0xe2, 0x09, 0xb4, 0x9e, 0xb9, 0x62, - 0xc0, 0x39, 0x97, 0x5f, 0x93, 0x9e, 0xd5, 0xc6, 0xe4, 0xc4, 0x00, 0xd8, 0x87, - 0x75, 0x94, 0x33, 0xd3, 0xad, 0x71, 0x6d, 0xa0, 0xcb, 0x44, 0x61, 0x13, 0xc7, - 0x72, 0x7a, 0x64, 0xb5, 0x8c, 0x3f, 0x8a, 0x0f, 0x81, 0x18, 0x9f, 0x98, 0x00, - 0x52, 0x33, 0xa8, 0x13, 0x66, 0xae, 0xe7, 0x3c, 0xec, 0x85, 0x22, 0x8e, 0xbc, - 0xfd, 0x5e, 0xe3, 0xc3, 0xfb, 0x44, 0xdb, 0x76, 0xba, 0x24, 0x3f, 0x28, 0x42, - 0xb7, 0xb5, 0xfc, 0x74, 0x6a, 0xe5, 0x1b, 0x0b, 0xc4, 0xbd, 0x4f, 0xc9, 0xfd, - 0x83, 0x35, 0x65, 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, 0xf6, 0x99, 0x03, 0x18, - 0xad, 0x8c, 0x7d, 0x94, 0x37, 0xe2, 0x0e, 0x2a, 0x1f, 0x20, 0xe8, 0x18, 0xf9, - 0x05, 0x7c, 0x5a, 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, 0x49, 0x45, 0xcd, 0x42, - 0x4c, 0x28, 0xa5, 0xfa, 0x38, 0x5d, 0xad, 0xfe, 0x49, 0x07, 0xb2, 0x74, 0xd8, - 0x42, 0x70, 0x7d, 0xb3, 0x69, 0x7a, 0x5a, 0xe6, 0xc8, 0xf5, 0x42, 0xe5, 0xec, - 0xc0, 0x7f, 0xe4, 0x73, 0x50, 0xd1, 0x01, 0x46, 0x70, 0x21, 0x2e, 0xfe, 0x81, - 0xfb, 0x7c, 0x73, 0xe8, 0x45, 0x0d, 0xf8, 0x14, 0xef, 0x62, 0x32, 0xf7, 0x49, - 0x0f, 0x63, 0xcc, 0xf0, 0x74, 0x80, 0xf8, 0x84, 0xa6, 0x6e, 0xaf, 0xfc, 0x28, - 0xfe, 0xa4, 0x48, 0xd7, 0xb4, 0x01, 0xcd, 0xae, 0x10, 0xe7, 0xc0, 0xc7, 0xf9, - 0xa7, 0xb1, 0x53, 0x31, 0x96, 0x9f, 0xc8, 0xcb, 0x36, 0x39, 0x67, 0x73, 0xde, - 0x19, 0x19, 0x31, 0xc7, 0x50, 0xf6, 0xce, 0x5c, 0xaa, 0xf2, 0x97, 0x68, 0xeb, - 0xb2, 0x7d, 0xac, 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, 0x77, 0x2b, 0xf8, - 0x7a, 0xe1, 0x0a, 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x3c, 0xfc, 0x31, - 0x59, 0x49, 0x43, 0x68, 0xc5, 0xab, 0x8c, 0xad, 0xb7, 0xf6, 0x71, 0xe9, 0x62, - 0x6b, 0xd2, 0x63, 0xe3, 0x11, 0x81, 0xa6, 0x04, 0xb5, 0x06, 0xa0, 0x3b, 0x43, - 0x9a, 0x7f, 0xfe, 0x43, 0x55, 0x89, 0x24, 0x77, 0xe2, 0xbd, 0xf3, 0x38, 0xc6, - 0x2c, 0x39, 0x22, 0xf7, 0xd3, 0xc9, 0xa5, 0x6c, 0x71, 0x03, 0xd9, 0x11, 0x94, - 0x8a, 0x84, 0xb5, 0xae, 0x2d, 0xbb, 0x16, 0xa3, 0x76, 0x1a, 0xdd, 0x05, 0x3a, - 0x0f, 0x96, 0x7e, 0x6b, 0x5b, 0xc9, 0x42, 0x11, 0xb6, 0x54, 0x71, 0x53, 0x26, - 0x7c, 0x6e, 0xe1, 0xca, 0xd0, 0xd9, 0x74, 0xa7, 0x10, 0x88, 0x58, 0x37, 0x35, - 0xe4, 0xf6, 0x3d, 0x33, 0x15, 0x6d, 0xad, 0xd5, 0x4c, 0x2f, 0xaf, 0x89, 0x11, - 0x4a, 0x12, 0x7b, 0x97, 0xb9, 0x4c, 0xc2, 0xa2, 0x2e, 0xf3, 0x03, 0xf4, 0x59, - 0xd0, 0x4f, 0xc0, 0xb5, 0x3a, 0xce, 0x59, 0x18, 0xd4, 0x7f, 0xf3, 0x3a, 0x55, - 0x8b, 0xd7, 0x1a, 0x75, 0xf3, 0x55, 0xfb, 0xd0, 0x6b, 0xbc, 0xcf, 0x4e, 0x02, - 0xc3, 0xc0, 0xa4, 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, 0x1d, 0x63, 0xa6, 0x4c, - 0xb2, 0xd3, 0x23, 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, 0xb4, 0x68, 0x21, - 0x42, 0xc8, 0xb2, 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, 0xe4, 0xb5, 0xe3, - 0x60, 0x34, 0x51, 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, 0x63, 0xfa, 0x6a, - 0xbb, 0x78, 0xd2, 0x1c, 0x19, 0x3c, 0xbe, 0x65, 0xb6, 0x95, 0xfe, 0x67, 0x42, - 0x3c, 0x1e, 0x2d, 0x31, 0x2e, 0x27, 0x76, 0xfa, 0x24, 0xec, 0xe8, 0x46, 0x83, - 0xe7, 0x48, 0x76, 0xc5, 0x5e, 0xa0, 0x36, 0x9e, 0x4e, 0xa0, 0xe8, 0x64, 0x94, - 0xe0, 0x0d, 0xde, 0x23, 0x6a, 0x16, 0x89, 0x73, 0x1f, 0x0a, 0x5d, 0x82, 0x03, - 0xaf, 0xde, 0x5c, 0x42, 0x36, 0x40, 0xb8, 0x1e, 0x4f, 0x63, 0x1c, 0x98, 0x1c, - 0x11, 0xa2, 0xe1, 0xd1, 0x84, 0xc6, 0x7c, 0x52, 0x8d, 0xf9, 0x2d, 0x53, 0xae, - 0xc4, 0x4a, 0x40, 0xa4, 0xea, 0x2a, 0x13, 0x1b, 0x47, 0x33, 0xcf, 0xe4, 0x5c, - 0x6b, 0x00, 0x00, 0xe3, 0xb9, 0x7e, 0x98, 0xc3, 0x2a, 0x07, 0x00, 0x5c, 0xc0, - 0x2f, 0x35, 0xcd, 0x64, 0xf1, 0x4a, 0x9e, 0xa8, 0xd8, 0xc7, 0x08, 0x42, 0xd6, - 0x09, 0x01, 0xd2, 0xab, 0xf3, 0x63, 0x7a, 0xdd, 0x77, 0xc7, 0x35, 0x0f, 0x12, - 0xb0, 0x11, 0xb2, 0x14, 0x36, 0x8e, 0xc7, 0x55, 0x76, 0xe4, 0x7d, 0x16, 0x9e, - 0x39, 0x38, 0xbf, 0x6a, 0xe2, 0xaa, 0x8f, 0xf7, 0xcf, 0xba, 0x7c, 0xac, 0xb1, - 0xf9, 0x2b, 0x6e, 0x4c, 0x24, 0x97, 0xbf, 0xfa, 0x9f, 0x17, 0xca, 0xd2, 0x42, - 0xfa, 0x9c, 0x31, 0x79, 0xc1, 0xa3, 0xaa, 0x81, 0xf7, 0x36, 0x16, 0x49, 0x57, - 0x2c, 0x71, 0x5c, 0x25, 0xa1, 0xf6, 0xcd, 0xf4, 0xef, 0xdb, 0x31, 0xf9, 0x7a, - 0x12, 0x2b, 0x0e, 0x34, 0x9e, 0x8d, 0x1e, 0x89, 0xb1, 0x7a, 0xa0, 0x58, 0xd2, - 0x11, 0xac, 0x1c, 0x36, 0x40, 0xfe, 0xa6, 0xcd, 0x73, 0x13, 0xff, 0xd5, 0x1d, - 0x18, 0x56, 0xa7, 0xe0, 0x92, 0x4d, 0x71, 0x0f, 0xdd, 0x4b, 0x15, 0xa1, 0x1f, - 0xba, 0x46, 0x7f, 0x09, 0x3f, 0xb8, 0x2c, 0x56, 0x58, 0xe2, 0x96, 0x24, 0xc5, - 0x32, 0x19, 0xa6, 0x0c, 0xd0, 0x28, 0x8b, 0x81, 0x5d, 0xb3, 0x0e, 0x1b, 0x29, - 0x6e, 0x0c, 0xfd, 0x02, 0x7e, 0xc8, 0xf6, 0x30, 0x0d, 0x2e, 0x48, 0x29, 0x32, - 0x29, 0x99, 0x95, 0xcb, 0x84, 0x99, 0x66, 0x21, 0x47, 0x99, 0xee, 0x90, 0xc7, - 0xd5, 0x79, 0x2d, 0x22, 0xd9, 0x10, 0x49, 0x01, 0xee, 0xbd, 0x30, 0x57, 0x3d, - 0x21, 0xca, 0x5c, 0x4e, 0xf9, 0xd5, 0x02, 0xa1, 0x6f, 0x15, 0x22, 0x47, 0x58, - 0x96, 0xd7, 0x9b, 0xc5, 0x38, 0xf7, 0x52, 0xcc, 0x29, 0x5b, 0x3e, 0x4c, 0x94, - 0x0f, 0x99, 0xc3, 0xca, 0xf4, 0xa5, 0xb9, 0xb5, 0x2e, 0x74, 0xc4, 0xe8, 0xd9, - 0x86, 0x4e, 0x64, 0xd0, 0x17, 0xcd, 0x37, 0x12, 0x91, 0xf0, 0xbe, 0xeb, 0x22, - 0x13, 0xfc, 0x4a, 0xf1, 0xe4, 0x50, 0xe4, 0xd5, 0x21, 0x7c, 0x66, 0x17, 0x00, - 0x8c, 0x78, 0xf4, 0xfb, 0x11, 0x12, 0xf4, 0x02, 0x8a, 0x70, 0x4f, 0xc5, 0xa9, - 0x38, 0x2c, 0x6b, 0x03, 0xb5, 0x34, 0x96, 0x84, 0x08, 0x3e, 0xc9, 0x48, 0x26, - 0x41, 0x61, 0xda, 0x8f, 0x7b, 0xce, 0xb5, 0x96, 0x0e, 0xdf, 0xd4, 0xc1, 0xfd, - 0x08, 0xc5, 0xb2, 0x46, 0xe0, 0xa2, 0x86, 0xac, 0x1a, 0x38, 0x87, 0x8d, 0xf7, - 0xfc, 0x90, 0xd7, 0x17, 0x7f, 0x6c, 0x18, 0x0c, 0x81, 0x6d, 0x58, 0x24, 0x53, - 0xd8, 0x17, 0x85, 0x60, 0xda, 0xf9, 0x75, 0x11, 0x19, 0x55, 0xa2, 0xbc, 0xa3, - 0x42, 0x3e, 0x2e, 0xae, 0xa6, 0xc8, 0x44, 0xc3, 0x28, 0x53, 0x4b, 0xc6, 0x91, - 0x39, 0x07, 0x03, 0x24, 0x7c, 0x89, 0xe2, 0x92, 0xa3, 0xae, 0x09, 0xe5, 0x35, - 0x61, 0x16, 0x62, 0x38, 0x3e, 0x14, 0x1a, 0x54, 0x2a, 0xf9, 0xe4, 0x62, 0xa7, - 0x38, 0xf8, 0x94, 0xe9, 0x89, 0xce, 0x99, 0xa8, 0x9c, 0xdc, 0x7f, 0x40, 0x6b, - 0x87, 0xe0, 0x09, 0x12, 0x1e, 0x06, 0xf6, 0xa1, 0xbf, 0x62, 0xa0, 0x8b, 0xf4, - 0x35, 0x19, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x47, + 0x23, 0x62, 0x29, 0x87, 0xd8, 0xd7, 0x04, 0x00, 0x00, 0x02, 0xac, 0xa3, 0xc4, + 0xc6, 0x43, 0x3b, 0x1d, 0xa6, 0x05, 0x95, 0xc2, 0xba, 0xfc, 0x72, 0x2b, 0x38, + 0xe7, 0x91, 0x0f, 0x63, 0x61, 0x6b, 0x22, 0xc9, 0xd6, 0x77, 0xb1, 0x79, 0x79, + 0x56, 0x6d, 0xb2, 0x14, 0x9b, 0x1d, 0x99, 0x34, 0x1e, 0x4e, 0x6f, 0x91, 0x20, + 0xf4, 0xd4, 0x1e, 0x62, 0x91, 0x85, 0x00, 0x2c, 0x72, 0xc0, 0x12, 0xc4, 0x14, + 0xd2, 0x38, 0x2a, 0x6d, 0x47, 0xc7, 0xb3, 0xde, 0xab, 0x59, 0x1e, 0xff, 0xf3, + 0x60, 0xfe, 0x11, 0x99, 0x05, 0x6c, 0x56, 0xe5, 0xfe, 0xec, 0x61, 0xa7, 0xb8, + 0xb9, 0xf6, 0x99, 0xd6, 0x01, 0x2c, 0x28, 0x49, 0x23, 0x2f, 0x32, 0x9f, 0xef, + 0x95, 0xc7, 0xd1, 0x81, 0x17, 0x2c, 0x28, 0x4c, 0xe8, 0xa4, 0xb3, 0x22, 0x96, + 0x1a, 0xd7, 0x81, 0xa5, 0xb9, 0x73, 0x6d, 0x7f, 0x12, 0xe8, 0x64, 0x34, 0x53, + 0xc1, 0x05, 0xa7, 0x9a, 0x9f, 0x5a, 0xe0, 0x09, 0xfa, 0x1a, 0xe6, 0xc2, 0x5a, + 0x94, 0x62, 0xeb, 0xcb, 0xb0, 0xfd, 0x5f, 0x14, 0x55, 0x4b, 0xc9, 0x77, 0x47, + 0xc3, 0x3e, 0x34, 0xda, 0x90, 0xc8, 0x16, 0xd8, 0xd0, 0xd5, 0x0b, 0xfe, 0x37, + 0x61, 0x8c, 0x58, 0x12, 0x89, 0x14, 0x84, 0xfa, 0x25, 0x93, 0x22, 0xc1, 0x50, + 0x92, 0xd4, 0x15, 0x5d, 0x86, 0x96, 0xd6, 0xf1, 0x2f, 0x24, 0xfd, 0x36, 0x44, + 0x96, 0xb3, 0xbe, 0x08, 0x71, 0xca, 0x3d, 0x02, 0xd2, 0xb6, 0xbc, 0xd5, 0x9e, + 0xad, 0x5e, 0x27, 0xe8, 0x3e, 0xf2, 0xd4, 0x40, 0x87, 0x54, 0xe9, 0x00, 0x31, + 0x61, 0x87, 0x76, 0x69, 0xe1, 0xa4, 0xd8, 0x50, 0xbf, 0x9f, 0xc1, 0xc2, 0x31, + 0x85, 0x4d, 0x03, 0x7e, 0x26, 0x2f, 0x9a, 0x9f, 0x9b, 0xd8, 0x90, 0x44, 0x67, + 0xea, 0xea, 0xd8, 0x3f, 0x09, 0x38, 0xe2, 0x6e, 0x34, 0x5f, 0x9c, 0xc6, 0x95, + 0x98, 0x5f, 0x00, 0xa1, 0x25, 0x5a, 0x0a, 0x4f, 0x95, 0xdb, 0x9d, 0xad, 0xcd, + 0xb7, 0xc2, 0x40, 0x89, 0x9a, 0xea, 0x27, 0x83, 0xc2, 0xd2, 0x1c, 0x2d, 0x32, + 0x79, 0xf8, 0x86, 0xf7, 0xab, 0x3d, 0x4e, 0x8a, 0xf5, 0x38, 0x1f, 0xa0, 0xb0, + 0x18, 0x48, 0xf1, 0xab, 0x14, 0xad, 0x33, 0x4f, 0x2b, 0x68, 0x03, 0x58, 0x08, + 0xcd, 0xf1, 0xbb, 0x9e, 0x9d, 0x9a, 0x81, 0x6b, 0xaf, 0x72, 0x8a, 0x95, 0x5b, + 0x96, 0x0b, 0x77, 0x01, 0xfa, 0x62, 0x66, 0x87, 0xdc, 0x3c, 0x9c, 0xba, 0x64, + 0x63, 0x37, 0xb5, 0x3e, 0x29, 0x81, 0x6e, 0x94, 0x82, 0xdd, 0xf5, 0x57, 0x8a, + 0x87, 0x68, 0xaa, 0xe4, 0x77, 0xfc, 0xe4, 0x10, 0xac, 0x2d, 0x5d, 0xe6, 0x09, + 0x58, 0x61, 0xc1, 0x11, 0xd7, 0xfe, 0xb3, 0xe6, 0xbb, 0x4f, 0xbb, 0x5a, 0x54, + 0x95, 0x54, 0x95, 0x97, 0x27, 0x98, 0x35, 0x0a, 0x25, 0x3f, 0x05, 0xf6, 0x6c, + 0x2e, 0xcf, 0xcb, 0xc0, 0xed, 0x43, 0xf5, 0xec, 0x2e, 0x6d, 0x8d, 0xba, 0x15, + 0xa5, 0x12, 0x54, 0xd9, 0x7b, 0x18, 0x21, 0x10, 0x7c, 0x07, 0xdd, 0x9a, 0x16, + 0xef, 0x84, 0x06, 0xf9, 0x43, 0xe2, 0x82, 0xb9, 0x5d, 0x4b, 0x36, 0x25, 0x30, + 0xc9, 0x13, 0xd6, 0xba, 0x42, 0x1d, 0xf6, 0x02, 0x7d, 0xe5, 0xaf, 0x1e, 0x47, + 0x45, 0xd5, 0x86, 0x81, 0x06, 0x95, 0x4b, 0xe6, 0xc1, 0x96, 0x27, 0x80, 0xa2, + 0x94, 0x10, 0x72, 0xe9, 0x51, 0x31, 0xb1, 0x67, 0x9d, 0xf0, 0x63, 0x76, 0x25, + 0x04, 0x2c, 0x37, 0xd4, 0x8f, 0xfb, 0x15, 0x2e, 0x5e, 0xbc, 0x18, 0x5c, 0x8a, + 0x2b, 0x7d, 0x43, 0x85, 0xf1, 0xc9, 0x5a, 0xf9, 0x37, 0xdf, 0x78, 0xdf, 0xd8, + 0x75, 0x7f, 0xab, 0x43, 0x49, 0x68, 0xb0, 0xb5, 0x7c, 0x66, 0x57, 0x44, 0x68, + 0xf1, 0x60, 0xb4, 0x47, 0xac, 0x82, 0x21, 0xe5, 0x06, 0x06, 0x76, 0xa8, 0x42, + 0xa1, 0xc6, 0xb7, 0x17, 0x2d, 0xd3, 0x34, 0x0f, 0x76, 0x40, 0x70, 0xab, 0x1f, + 0xe0, 0x91, 0xc5, 0xc7, 0x4c, 0x95, 0xa5, 0xdc, 0x04, 0x33, 0x90, 0x72, 0x3a, + 0x4c, 0x12, 0x7d, 0xa1, 0x4c, 0xdd, 0xe1, 0xdc, 0x26, 0x75, 0xa6, 0x23, 0x40, + 0xb3, 0xe6, 0xaf, 0xd0, 0x52, 0x2a, 0x31, 0xde, 0x26, 0xe7, 0xd1, 0xec, 0x3a, + 0x9c, 0x8a, 0x09, 0x1f, 0xfd, 0xc7, 0x5b, 0x7e, 0xcf, 0xdc, 0x7c, 0x12, 0x99, + 0x5a, 0x5e, 0x37, 0xce, 0x34, 0x88, 0xbd, 0x29, 0xf8, 0x62, 0x9d, 0x68, 0xf6, + 0x96, 0x49, 0x24, 0x48, 0xdd, 0x52, 0x66, 0x97, 0x47, 0x6d, 0xc0, 0x61, 0x34, + 0x6e, 0xbe, 0x3f, 0x67, 0x72, 0x17, 0xff, 0x9c, 0x60, 0xef, 0xce, 0x94, 0x3a, + 0xf2, 0x8d, 0xfd, 0x3f, 0x9e, 0x59, 0x69, 0x25, 0x98, 0xa6, 0x04, 0x7c, 0x23, + 0xc4, 0xc0, 0x14, 0x00, 0xf1, 0xab, 0x57, 0x30, 0xea, 0xc0, 0xae, 0x8d, 0x58, + 0x43, 0xd5, 0x05, 0x1c, 0x37, 0x62, 0x40, 0x17, 0x2a, 0xf2, 0x18, 0xd7, 0xa1, + 0xec, 0xfe, 0x65, 0xb4, 0xf7, 0x51, 0x00, 0x63, 0x89, 0x83, 0xc1, 0x4d, 0xe4, + 0x97, 0x47, 0x55, 0xda, 0xde, 0x80, 0x18, 0xc9, 0xb8, 0xf4, 0x54, 0x3f, 0xb0, + 0x95, 0x96, 0x15, 0x13, 0xe6, 0x7c, 0x61, 0xdb, 0xc5, 0x9c, 0x60, 0x7f, 0x9b, + 0x51, 0xf8, 0xd0, 0x9b, 0xdc, 0xad, 0x28, 0xbc, 0xfb, 0x9e, 0x5d, 0x27, 0x44, + 0xea, 0x88, 0x48, 0xb2, 0x62, 0x3a, 0xc0, 0x7f, 0x8e, 0xf6, 0x1a, 0x81, 0xa3, + 0x59, 0x10, 0xb8, 0xa1, 0xba, 0xf3, 0x9a, 0x91, 0x9a, 0x7b, 0x60, 0xbc, 0x60, + 0x4d, 0x63, 0x18, 0x5f, 0x75, 0x92, 0x21, 0xd8, 0x47, 0xcc, 0x54, 0xa2, 0x27, + 0x65, 0xa4, 0xc3, 0x34, 0x75, 0xb5, 0x79, 0x1e, 0x9a, 0xf3, 0x27, 0x1f, 0xc8, + 0xd9, 0x35, 0x06, 0x67, 0x09, 0x0d, 0x81, 0x84, 0xec, 0x50, 0x52, 0x2d, 0x80, + 0x4f, 0x23, 0xc4, 0xfb, 0x44, 0xff, 0xa4, 0x81, 0xbc, 0x92, 0xae, 0x40, 0x8d, + 0x1b, 0x9f, 0x2b, 0x13, 0x19, 0x04, 0xf9, 0x70, 0x5c, 0x59, 0xe2, 0xf4, 0xbd, + 0xe7, 0xa3, 0xb2, 0xc0, 0x85, 0xd9, 0x3f, 0xd2, 0xab, 0xc5, 0xe1, 0x4d, 0x16, + 0x30, 0x01, 0xa1, 0x2f, 0x51, 0x93, 0x8d, 0x02, 0x1a, 0xfa, 0x92, 0x23, 0x9b, + 0x87, 0x3d, 0xc6, 0xc3, 0x57, 0xea, 0xa8, 0xaf, 0x4e, 0xe6, 0xd0, 0x05, 0x40, + 0x65, 0x7f, 0xe3, 0x29, 0x14, 0x10, 0x3b, 0x5d, 0x98, 0xf6, 0x8b, 0xd3, 0xe2, + 0xb5, 0x35, 0x9f, 0x08, 0xcc, 0xd8, 0x8d, 0x0c, 0x81, 0x1e, 0x4c, 0x31, 0xfb, + 0xb4, 0x9f, 0x3a, 0x90, 0xbb, 0xd0, 0x5d, 0xce, 0x62, 0xf3, 0x44, 0xe7, 0x07, + 0x75, 0x93, 0x15, 0x9a, 0xe3, 0x50, 0x50, 0xb0, 0x4c, 0x9e, 0x6b, 0x86, 0xbc, + 0x43, 0x2d, 0xc8, 0xb0, 0x48, 0xc7, 0x3c, 0x00, 0x18, 0xca, 0x5b, 0x69, 0x41, + 0x12, 0x97, 0x73, 0x2a, 0x4e, 0x1a, 0xa9, 0x9a, 0x92, 0x8c, 0x71, 0xe7, 0xa2, + 0x4f, 0xd2, 0x77, 0x85, 0x6a, 0xa4, 0x25, 0x01, 0xe5, 0x1b, 0x01, 0x2a, 0xea, + 0x94, 0x46, 0xa2, 0x10, 0x4e, 0x93, 0xf8, 0x15, 0xa0, 0xb3, 0xa2, 0x9b, 0x45, + 0x83, 0x14, 0xf3, 0xd8, 0xbe, 0x2b, 0x98, 0x23, 0xd3, 0x42, 0x15, 0x05, 0xff, + 0x6d, 0x88, 0x90, 0xe9, 0x04, 0xa2, 0x4a, 0x7d, 0xe9, 0x51, 0xa2, 0xa1, 0xc6, + 0x4e, 0xd2, 0xe4, 0xf9, 0xe9, 0xa5, 0x16, 0x5e, 0xba, 0x47, 0x99, 0xce, 0xfe, + 0xb5, 0xd1, 0x48, 0x00, 0x55, 0x45, 0xf9, 0xb5, 0xfb, 0x0e, 0xec, 0x65, 0x03, + 0xfe, 0xbb, 0xdd, 0x26, 0xa2, 0x38, 0x51, 0x43, 0x83, 0x73, 0x4a, 0xfe, 0xc8, + 0xa4, 0x81, 0xcf, 0xb2, 0xfe, 0x1f, 0xf9, 0x2f, 0x1e, 0xa7, 0x84, 0x07, 0xb4, + 0x07, 0xc6, 0xb8, 0x4a, 0x21, 0x4e, 0xf6, 0x07, 0xcc, 0x59, 0x04, 0xd9, 0xe8, + 0xc7, 0x3f, 0xeb, 0xff, 0xa0, 0x1c, 0x2b, 0x17, 0x79, 0xdc, 0x42, 0x0f, 0x08, + 0x9e, 0xad, 0xe2, 0x0b, 0x69, 0xd5, 0xd7, 0xc4, 0x3c, 0xeb, 0x73, 0x6b, 0x68, + 0x31, 0xe8, 0xc1, 0x10, 0xf1, 0x6c, 0xfd, 0xb3, 0xa4, 0x67, 0xe9, 0x41, 0x4c, + 0x00, 0xec, 0xf1, 0x37, 0x31, 0x50, 0x08, 0x94, 0x55, 0x56, 0x78, 0xc4, 0x97, + 0xfa, 0xba, 0x9a, 0x95, 0xd0, 0x1c, 0xc4, 0x64, 0x39, 0x0f, 0xc4, 0xa7, 0x6b, + 0xfa, 0x8b, 0x0e, 0x1c, 0x68, 0xa5, 0x25, 0xd7, 0x06, 0xd6, 0x60, 0x4b, 0x23, + 0x30, 0xb6, 0xb3, 0x48, 0x52, 0x15, 0xf6, 0x06, 0xf1, 0x88, 0x3a, 0x75, 0x15, + 0x88, 0xc7, 0xef, 0xa5, 0x06, 0xc3, 0xe8, 0xd0, 0xc6, 0x01, 0x92, 0xe8, 0x47, + 0x6b, 0xd1, 0x17, 0x5d, 0x95, 0x62, 0x08, 0x7b, 0xdb, 0x81, 0x8e, 0x66, 0x21, + 0x62, 0x86, 0xba, 0xfe, 0x47, 0xff, 0x4d, 0xbc, 0xce, 0xd5, 0x14, 0x44, 0x48, + 0x0a, 0x9a, 0x56, 0x73, 0xec, 0xe7, 0xfa, 0xc7, 0x3a, 0x0e, 0xd4, 0x1a, 0xb0, + 0x05, 0x17, 0x53, 0xa7, 0xca, 0xa8, 0x9b, 0xe3, 0x13, 0x9a, 0xfd, 0x97, 0x93, + 0xb3, 0xe0, 0x2f, 0x27, 0xf0, 0x40, 0x04, 0x65, 0x95, 0xac, 0xd4, 0x7b, 0xf1, + 0x3f, 0xd0, 0xda, 0x27, 0xf0, 0x9e, 0xda, 0x48, 0x03, 0x6d, 0x3e, 0xe4, 0x37, + 0xf2, 0xee, 0x8f, 0x86, 0x06, 0xea, 0x97, 0x34, 0x3c, 0x33, 0x58, 0x46, 0x57, + 0xf4, 0x6d, 0xba, 0x99, 0xdb, 0x5c, 0xfe, 0x6c, 0xa1, 0x76, 0xfa, 0xb7, 0xb0, + 0xf3, 0xbf, 0xa0, 0xab, 0x61, 0xe3, 0x40, 0xc3, 0x4e, 0xb9, 0xf1, 0x7c, 0x7e, + 0xc2, 0xbe, 0x03, 0xb1, 0x80, 0xf0, 0xbb, 0x6f, 0x43, 0x4c, 0x2a, 0x65, 0x42, + 0xe0, 0x0e, 0x84, 0x37, 0x3f, 0x4f, 0x46, 0x49, 0xcd, 0xa3, 0x2b, 0xf6, 0x86, + 0x66, 0x61, 0x43, 0xf6, 0x22, 0xaa, 0x48, 0x04, 0x60, 0xb5, 0xaf, 0xac, 0x51, + 0x86, 0x07, 0xcd, 0x9a, 0xf8, 0xbc, 0xd6, 0xb5, 0x8c, 0x30, 0x12, 0x73, 0x16, + 0xb2, 0x5d, 0x5e, 0xa7, 0xbf, 0x6b, 0x0c, 0xab, 0x85, 0x42, 0xff, 0x69, 0xd9, + 0xb2, 0xf1, 0x80, 0xbe, 0x12, 0xed, 0x75, 0x34, 0x4a, 0x39, 0x5a, 0xa1, 0x0f, + 0x85, 0x2f, 0x08, 0x3a, 0xd6, 0x4e, 0xf4, 0x0e, 0x9c, 0x03, 0x09, 0xe9, 0xbb, + 0xa5, 0x4b, 0x8c, 0xb3, 0x3c, 0x95, 0x49, 0x8a, 0x69, 0x53, 0x8d, 0x3a, 0xe5, + 0xb2, 0x5e, 0x24, 0x70, 0x98, 0x30, 0x6f, 0xa8, 0xc7, 0x4a, 0x8e, 0xe5, 0xbc, + 0xa9, 0x41, 0x53, 0x1d, 0x61, 0xaa, 0xc2, 0x7a, 0xab, 0x3d, 0xc5, 0x61, 0x7d, + 0x56, 0x06, 0xc9, 0x57, 0x7a, 0x2a, 0x83, 0x46, 0xe8, 0xd8, 0x5b, 0x32, 0xb8, + 0x50, 0x57, 0x75, 0x10, 0x8d, 0xc8, 0x5e, 0x2a, 0xde, 0x2e, 0xac, 0x1e, 0x63, + 0x6e, 0x1a, 0xf4, 0x05, 0x4c, 0x8b, 0x6f, 0x57, 0x63, 0x2d, 0xf2, 0x69, 0xc3, + 0x72, 0x3b, 0x32, 0x08, 0x72, 0xe4, 0xc5, 0x7b, 0x21, 0x83, 0x58, 0xdc, 0x7e, + 0x99, 0x05, 0xbb, 0x04, 0xed, 0xf9, 0x2e, 0xdf, 0x0d, 0xf6, 0x35, 0xf3, 0xbf, + 0x36, 0x1e, 0x57, 0xa1, 0x32, 0x96, 0xe1, 0x44, 0x7a, 0xf5, 0x08, 0x78, 0x72, + 0xd6, 0x36, 0xe2, 0x75, 0x18, 0xa9, 0x87, 0x6e, 0x15, 0xeb, 0x01, 0xf5, 0xe8, + 0xde, 0xd8, 0x18, 0x92, 0x51, 0x1c, 0xc2, 0x85, 0x1b, 0x00, 0xb8, 0x32, 0x71, + 0x2a, 0x6d, 0x3b, 0xa5, 0x66, 0x65, 0x17, 0xbc, 0xd3, 0x56, 0x76, 0x21, 0xa7, + 0xcf, 0x84, 0x45, 0x58, 0x96, 0x53, 0x26, 0x20, 0x20, 0xc3, 0x3b, 0xf7, 0x80, + 0x31, 0xb8, 0xee, 0x07, 0x07, 0xde, 0x07, 0x20, 0x68, 0xc1, 0x70, 0x57, 0x03, + 0x27, 0xe6, 0xd9, 0xf5, 0xc6, 0xdd, 0xc3, 0x35, 0x40, 0x2e, 0xfc, 0x54, 0x88, + 0x62, 0xf5, 0xa0, 0x70, 0x94, 0xfd, 0x42, 0x8a, 0x7b, 0xbc, 0x15, 0xd7, 0xb3, + 0x8d, 0x05, 0x36, 0x2c, 0x9c, 0xa9, 0x85, 0xf5, 0x8a, 0x76, 0x64, 0x7d, 0x2b, + 0xe4, 0xc2, 0xcd, 0x6b, 0x3d, 0x17, 0xd6, 0x87, 0x09, 0x71, 0xd7, 0xa0, 0x98, + 0xba, 0xf7, 0x2c, 0x6f, 0x6f, 0x12, 0x14, 0xcf, 0x1f, 0xaa, 0xe4, 0x88, 0xbd, + 0x7d, 0xe2, 0x59, 0xd3, 0x41, 0x5c, 0x2f, 0x0d, 0xde, 0xc7, 0x45, 0x70, 0x04, + 0xf3, 0x57, 0x08, 0xd1, 0xec, 0xcc, 0xcc, 0x0d, 0xf6, 0x5a, 0x04, 0x94, 0x3a, + 0xd5, 0xcb, 0xc1, 0x3f, 0x29, 0x5f, 0x00, 0x0f, 0xe0, 0x56, 0xc4, 0x0b, 0x2d, + 0x88, 0xf2, 0x7d, 0xc3, 0x4c, 0xfe, 0xb8, 0x03, 0xbe, 0x34, 0x83, 0xa9, 0xeb, + 0xf9, 0xb5, 0xa9, 0x02, 0x60, 0x57, 0x72, 0x5d, 0x63, 0xea, 0xd2, 0xc0, 0xc0, + 0xff, 0x1f, 0xe2, 0x6a, 0xc1, 0xe7, 0xbd, 0xfc, 0xd6, 0xfa, 0xd8, 0x75, 0x84, + 0x2d, 0x19, 0x4f, 0x33, 0x17, 0x50, 0x46, 0x2c, 0x06, 0xb8, 0xd7, 0x98, 0x2d, + 0x67, 0x99, 0x5e, 0xd5, 0xd3, 0xae, 0x96, 0xa0, 0x5a, 0xe0, 0x06, 0x7f, 0x4e, + 0xb1, 0xc7, 0xc9, 0x32, 0x31, 0xbd, 0x39, 0x77, 0x3c, 0xbe, 0x0a, 0x9d, 0x33, + 0xa0, 0xa4, 0x0b, 0x10, 0x1d, 0x02, 0x00, 0x77, 0xd9, 0x7c, 0xe4, 0x24, 0x01, + 0x3d, 0x64, 0xb4, 0xd0, 0xd2, 0x72, 0xec, 0x01, 0x94, 0x6b, 0x7a, 0x5e, 0xed, + 0xfa, 0xb4, 0xd6, 0x8c, 0xd6, 0xd1, 0xb2, 0x66, 0x7d, 0x04, 0xb2, 0x9d, 0x0c, + 0xaf, 0x37, 0x00, 0x98, 0xff, 0xe4, 0x91, 0x8e, 0x0c, 0xa1, 0xdf, 0x47, 0xf2, + 0x75, 0x86, 0x7b, 0x73, 0x9e, 0x0a, 0x51, 0x4d, 0x32, 0x09, 0x32, 0x5e, 0x21, + 0x70, 0x45, 0x92, 0x7b, 0x47, 0x9c, 0x1c, 0xe2, 0xe5, 0xd5, 0x4f, 0x25, 0x48, + 0x8c, 0xad, 0x15, 0x13, 0xe3, 0xf4, 0x4a, 0x21, 0x26, 0x6c, 0xfd, 0x84, 0x16, + 0x33, 0x32, 0x7d, 0xee, 0x6c, 0xf8, 0x10, 0xfb, 0xf7, 0x39, 0x3e, 0x31, 0x7d, + 0x9e, 0x53, 0xd1, 0xbe, 0x1d, 0x5a, 0xe7, 0x83, 0x9b, 0x66, 0xb9, 0x43, 0xb9, + 0xed, 0x18, 0xf2, 0xc5, 0x30, 0xe9, 0x75, 0x42, 0x23, 0x32, 0xc3, 0x43, 0x9c, + 0xce, 0x49, 0xa2, 0x9f, 0x2a, 0x33, 0x6a, 0x48, 0x51, 0x26, 0x3c, 0x5e, 0x9b, + 0xd1, 0x3d, 0x73, 0x11, 0x09, 0xe8, 0x44, 0xb7, 0xf8, 0xc3, 0x92, 0xa5, 0xc1, + 0xdc, 0xaa, 0x2a, 0xe5, 0xf5, 0x0f, 0xf6, 0x3f, 0xab, 0x97, 0x65, 0xe0, 0x16, + 0x70, 0x2c, 0x35, 0xa6, 0x7c, 0xd7, 0x36, 0x4d, 0x3f, 0xab, 0x55, 0x2f, 0xb3, + 0x49, 0xe3, 0x5c, 0x15, 0xc5, 0x02, 0x50, 0x45, 0x3f, 0xd1, 0x8f, 0x7b, 0x85, + 0x59, 0x92, 0x63, 0x2e, 0x2c, 0x76, 0xc0, 0xfb, 0xf1, 0xef, 0x96, 0x3e, 0xa8, + 0x0e, 0x32, 0x23, 0xde, 0x32, 0x77, 0xbc, 0x55, 0x92, 0x51, 0x72, 0x58, 0x29, + 0xec, 0x03, 0xf2, 0x13, 0xba, 0x89, 0x55, 0xca, 0xb2, 0x82, 0xd9, 0x62, 0x53, + 0x48, 0xa6, 0x14, 0xb5, 0x9b, 0xde, 0x45, 0x88, 0x56, 0x49, 0xba, 0xe3, 0x6d, + 0xe3, 0x4d, 0xef, 0x8f, 0xce, 0xc8, 0x53, 0x43, 0x47, 0x5d, 0x97, 0x6a, 0xe1, + 0xe9, 0xb2, 0x78, 0x29, 0xce, 0x2a, 0xc5, 0xef, 0xd0, 0xb3, 0x99, 0xa8, 0xb4, + 0x48, 0xbe, 0x65, 0x04, 0x29, 0x4e, 0xe6, 0xb3, 0xc1, 0xc6, 0xa5, 0x34, 0x2d, + 0x7c, 0x01, 0xae, 0x9d, 0x8a, 0xd3, 0x07, 0x0c, 0x2b, 0x1a, 0x91, 0x57, 0x3a, + 0xf5, 0xe0, 0xc5, 0xe4, 0xcb, 0xbf, 0x4a, 0xcd, 0xc6, 0xb5, 0x4c, 0x92, 0x72, + 0x20, 0x0d, 0x99, 0x70, 0x25, 0x0c, 0x17, 0xc1, 0x03, 0x6f, 0x06, 0x08, 0x5c, + 0x41, 0x85, 0x8e, 0xd3, 0xa0, 0xc4, 0x81, 0x50, 0xbc, 0x69, 0x7e, 0x4a, 0x69, + 0x5f, 0xef, 0x33, 0x5f, 0x7a, 0xd0, 0x7e, 0x1a, 0x46, 0xdc, 0x76, 0x7f, 0xf8, + 0x22, 0xdb, 0x70, 0xe6, 0x66, 0x90, 0x80, 0xb9, 0x81, 0x6b, 0x22, 0x32, 0xc8, + 0x1a, 0x4c, 0x66, 0xcc, 0x58, 0x6a, 0xbf, 0xe1, 0xea, 0xa8, 0xca, 0x6c, 0xf4, + 0x1f, 0xc3, 0xc3, 0xe6, 0xc7, 0xb8, 0x86, 0xfb, 0x6d, 0xac, 0x9f, 0x48, 0x22, + 0xb4, 0xfc, 0x6f, 0xff, 0x9d, 0x05, 0x13, 0xd6, 0x1a, 0x21, 0xc8, 0x0a, 0x37, + 0x76, 0x71, 0xd1, 0x35, 0xa6, 0x68, 0xa0, 0xae, 0x2b, 0xb9, 0x34, 0xc8, 0x2c, + 0x41, 0x42, 0xda, 0x69, 0xd1, 0x2c, 0xa7, 0x24, 0x75, 0x6a, 0x37, 0x9a, 0x69, + 0xf8, 0x3e, 0x70, 0xce, 0xe0, 0xc7, 0x8c, 0xf3, 0x13, 0xa7, 0x77, 0xfa, 0xb4, + 0x8e, 0xe2, 0x03, 0xe1, 0x4f, 0xed, 0x62, 0x41, 0x62, 0xe9, 0xcf, 0x38, 0x65, + 0x24, 0x5c, 0xfb, 0x31, 0xea, 0x07, 0xee, 0x88, 0x9e, 0x47, 0x0f, 0xee, 0x46, + 0xa0, 0x62, 0x30, 0xf7, 0x00, 0x51, 0xf1, 0x1e, 0x79, 0x8c, 0x72, 0x0d, 0x37, + 0xf2, 0x27, 0xca, 0x01, 0xb1, 0x09, 0xa1, 0xce, 0xe9, 0x2a, 0xd5, 0xf6, 0xb0, + 0x20, 0x1a, 0xe7, 0x1e, 0xab, 0x44, 0x69, 0x99, 0xcd, 0xcb, 0xc4, 0xa5, 0xfc, + 0x3b, 0x1a, 0xf1, 0x38, 0x94, 0xae, 0x93, 0xdd, 0xff, 0xe8, 0xee, 0x18, 0x50, + 0x13, 0x6b, 0x30, 0xcd, 0xa1, 0xd8, 0x3d, 0x8d, 0x3b, 0xea, 0x7b, 0x13, 0x1c, + 0x06, 0x14, 0x1c, 0xc2, 0xa8, 0x5f, 0xa5, 0xb4, 0x3d, 0x05, 0xec, 0x95, 0x4e, + 0x11, 0xb6, 0xf3, 0x7b, 0x03, 0xf4, 0x62, 0x13, 0xe9, 0x42, 0xa7, 0xe1, 0x9a, + 0x46, 0xe9, 0x70, 0xb5, 0xc5, 0x06, 0x70, 0x84, 0x30, 0x31, 0x7b, 0x1b, 0xb3, + 0xb3, 0x5d, 0xf6, 0x8a, 0xe3, 0x3a, 0x49, 0x26, 0xa0, 0x3e, 0x6b, 0xfe, 0xb5, + 0x51, 0x04, 0x16, 0xfc, 0xbb, 0x05, 0x24, 0xc9, 0xca, 0x50, 0x74, 0x15, 0x6c, + 0xc5, 0xa5, 0xd6, 0xfe, 0x1c, 0x99, 0x5e, 0xdc, 0x60, 0xa2, 0xf5, 0x50, 0x41, + 0x1a, 0xa4, 0x1e, 0x3d, 0xa3, 0xbd, 0xcf, 0x64, 0xbc, 0xf0, 0x4a, 0x05, 0x10, + 0x57, 0x1b, 0x93, 0x6d, 0x47, 0xe5, 0x5c, 0xec, 0x03, 0x30, 0xee, 0x8d, 0xfe, + 0x73, 0x56, 0x34, 0x04, 0xf0, 0x47, 0xd7, 0xf3, 0xa8, 0xa3, 0xd7, 0x74, 0x3b, + 0xc5, 0x54, 0x95, 0x52, 0x10, 0xf1, 0xeb, 0x0d, 0x08, 0x59, 0x9e, 0xa7, 0x7d, + 0x5f, 0x97, 0x4d, 0x87, 0x17, 0x6d, 0x37, 0xd9, 0x8b, 0x9c, 0x0a, 0xd4, 0x40, + 0x40, 0x72, 0x09, 0xed, 0x6a, 0x9f, 0x08, 0x46, 0x4d, 0x56, 0x55, 0x93, 0xe1, + 0xa6, 0x3b, 0x93, 0x85, 0x36, 0xb4, 0x92, 0x44, 0xe9, 0x7d, 0x88, 0x01, 0x73, + 0xb6, 0x40, 0xf2, 0xdd, 0xb7, 0x4d, 0x06, 0x8e, 0xcb, 0x46, 0xcf, 0x28, 0x9b, + 0x7d, 0x89, 0x13, 0x07, 0xbb, 0xa3, 0x70, 0x54, 0xcf, 0x91, 0xb3, 0x1f, 0xc8, + 0x2f, 0x74, 0xd5, 0xfc, 0xc0, 0x00, 0x94, 0x2e, 0xde, 0x91, 0x18, 0x25, 0xf5, + 0x3f, 0xe6, 0x66, 0xb0, 0xc9, 0xaa, 0x8c, 0xff, 0x6a, 0x37, 0x6e, 0x1f, 0x37, + 0x2e, 0xac, 0x6a, 0xc4, 0xe4, 0x6c, 0xc0, 0x94, 0x22, 0x45, 0xd4, 0xc2, 0xdc, + 0xf0, 0x2d, 0x76, 0x40, 0xff, 0xcc, 0x5a, 0x6a, 0xc3, 0xa8, 0x7f, 0x5c, 0x41, + 0x15, 0x51, 0xbc, 0xc2, 0xf2, 0x6c, 0xb9, 0x49, 0x61, 0xd5, 0x3f, 0x95, 0xdd, + 0xb1, 0x9a, 0xe9, 0x30, 0xc8, 0xd7, 0x0f, 0x03, 0x1b, 0x29, 0xa5, 0xdf, 0x99, + 0xff, 0x36, 0x69, 0x5e, 0x80, 0x2c, 0xbc, 0xb6, 0xb5, 0x8c, 0x1b, 0xa7, 0xed, + 0x5e, 0xac, 0xfa, 0x76, 0x41, 0x4a, 0x41, 0xad, 0x4a, 0x44, 0xf7, 0x1f, 0x1b, + 0x58, 0x0d, 0x34, 0xc3, 0xa9, 0x52, 0x92, 0x0b, 0x25, 0x4a, 0x14, 0x5f, 0xea, + 0x51, 0x7f, 0x5b, 0x42, 0xb2, 0xf6, 0x5e, 0xcd, 0x0f, 0x82, 0x59, 0x54, 0x78, + 0xd8, 0x0a, 0xe5, 0xc8, 0xce, 0xea, 0x12, 0xa1, 0x61, 0xcc, 0xbb, 0x5e, 0xac, + 0x09, 0x99, 0x0f, 0xc6, 0x19, 0xa4, 0x60, 0x80, 0x43, 0x6d, 0xbd, 0x08, 0xd7, + 0x47, 0x84, 0xaf, 0x00, 0x2d, 0x58, 0xe0, 0x6f, 0xaf, 0x7f, 0x3c, 0xea, 0xe7, + 0xd3, 0x41, 0x9b, 0x1f, 0xca, 0x26, 0x5a, 0x55, 0x59, 0xcf, 0x9e, 0x2d, 0x3b, + 0x60, 0x97, 0x8d, 0x81, 0xa6, 0x78, 0xb9, 0xed, 0x8e, 0x44, 0x86, 0xb4, 0xd1, + 0x46, 0x09, 0xd6, 0xc1, 0x27, 0xc0, 0xc2, 0xfb, 0xff, 0xe3, 0x0a, 0x60, 0x51, + 0x98, 0x36, 0x70, 0x17, 0xdf, 0x5c, 0x2b, 0x2c, 0x02, 0x0b, 0x40, 0x50, 0x35, + 0xfe, 0xb4, 0xb2, 0xcd, 0xfe, 0x3a, 0x28, 0x1b, 0xdb, 0xd9, 0x68, 0xe0, 0xa9, + 0x0f, 0xa6, 0x51, 0x36, 0x1a, 0x42, 0xde, 0x27, 0x2c, 0xb8, 0xc2, 0xf5, 0x4e, + 0x96, 0xf5, 0x1d, 0xf9, 0x1e, 0xf1, 0x19, 0xcc, 0x7a, 0xb7, 0xe1, 0x36, 0xa3, + 0xbd, 0xb8, 0x18, 0xb4, 0xd7, 0x8c, 0x8e, 0x98, 0x66, 0x70, 0x03, 0x02, 0x74, + 0x39, 0x22, 0x65, 0x43, 0x32, 0x81, 0xc8, 0xa7, 0x71, 0x17, 0x1c, 0x2b, 0x70, + 0xa0, 0x72, 0x72, 0xd2, 0xfb, 0xaa, 0xbf, 0x81, 0x3b, 0xf2, 0xcc, 0x8c, 0x2b, + 0x2b, 0xc2, 0x56, 0xd4, 0x98, 0x27, 0xff, 0xa8, 0xf6, 0xb0, 0x96, 0xb4, 0xc3, + 0xa7, 0x92, 0xc5, 0xde, 0x00, 0x3f, 0x4c, 0x33, 0xb7, 0x21, 0x60, 0x56, 0xd9, + 0xed, 0xb7, 0x48, 0x2f, 0xb9, 0x8a, 0xa0, 0x33, 0xb6, 0x5e, 0x11, 0x99, 0xf5, + 0x83, 0x7e, 0x81, 0xed, 0x2f, 0xe4, 0x94, 0xa7, 0x19, 0xff, 0xc6, 0x53, 0xfd, + 0x2b, 0xb9, 0xef, 0x91, 0x32, 0x7a, 0xc2, 0x10, 0x48, 0x2a, 0x6d, 0xed, 0x0a, + 0xb8, 0xe1, 0xc8, 0x09, 0x88, 0xbb, 0x45, 0x85, 0x85, 0x1d, 0xc9, 0x3e, 0xcc, + 0xc6, 0x23, 0x22, 0x92, 0x4c, 0xd1, 0x3b, 0x5d, 0xd4, 0xee, 0xd6, 0x6e, 0xd8, + 0xd9, 0x97, 0x2d, 0x77, 0x26, 0x29, 0xea, 0x64, 0x74, 0x2e, 0xe8, 0x3c, 0x04, + 0x11, 0x2f, 0x09, 0xae, 0x57, 0x48, 0x27, 0xaa, 0x4b, 0xeb, 0x00, 0x38, 0xf2, + 0x55, 0x5a, 0x8b, 0xa3, 0x6a, 0x9b, 0xfb, 0xa0, 0x28, 0xd7, 0xc2, 0x1e, 0xa3, + 0xcd, 0x0b, 0xba, 0xa9, 0xae, 0x48, 0x11, 0xc6, 0xaf, 0x06, 0xfe, 0x80, 0xa8, + 0xc0, 0x2a, 0xb7, 0xa0, 0x0e, 0x18, 0xe4, 0xa6, 0xaa, 0x1e, 0xa1, 0xb7, 0x69, + 0x45, 0xd2, 0x61, 0x5d, 0x43, 0xac, 0x11, 0x8b, 0x56, 0xc2, 0xf2, 0x96, 0x0f, + 0xe9, 0x3a, 0x02, 0x5f, 0x13, 0xec, 0x91, 0xff, 0xc6, 0xd2, 0xc3, 0x53, 0x69, + 0x9a, 0xbb, 0x09, 0x2d, 0xed, 0xc0, 0x65, 0xdb, 0x8f, 0xa2, 0x14, 0xdb, 0xc4, + 0x64, 0x66, 0xf8, 0x97, 0xb8, 0x8c, 0x58, 0xb3, 0x01, 0x52, 0x13, 0x3a, 0xa3, + 0x83, 0x1a, 0xf3, 0x7c, 0x74, 0xd9, 0x9e, 0x9e, 0x36, 0xff, 0x70, 0x11, 0xd3, + 0x23, 0x83, 0x05, 0x69, 0x15, 0x08, 0xa2, 0xc3, 0xa4, 0x3e, 0x75, 0x5d, 0xc0, + 0x81, 0xb5, 0x11, 0xd6, 0x48, 0x2a, 0x7d, 0xb6, 0x5f, 0xa9, 0x69, 0x9e, 0xa8, + 0x7f, 0xf4, 0x70, 0x99, 0xed, 0x36, 0x37, 0xdb, 0xb0, 0xa3, 0xd0, 0xef, 0x79, + 0x79, 0x6a, 0x8e, 0xf1, 0xe4, 0xd9, 0x4d, 0x42, 0xb4, 0xbc, 0x2b, 0x4a, 0x03, + 0x8a, 0xe6, 0xe4, 0x6b, 0x24, 0xcf, 0xc8, 0x41, 0x53, 0xd3, 0x1e, 0xaf, 0x89, + 0x50, 0x63, 0xa5, 0xca, 0x95, 0x9b, 0xe6, 0x3f, 0x37, 0xf2, 0xba, 0x0d, 0x43, + 0x23, 0x66, 0x73, 0x6d, 0x86, 0x32, 0xfc, 0xe0, 0x72, 0xb6, 0xae, 0x5b, 0x6f, + 0x3f, 0xd5, 0x9d, 0x3f, 0xaf, 0xf6, 0x38, 0x27, 0x5a, 0x99, 0x2f, 0xef, 0xc8, + 0x7e, 0x60, 0xd4, 0x4c, 0x2c, 0xad, 0xc2, 0xb5, 0xc4, 0x94, 0xe3, 0xe7, 0x2e, + 0xb4, 0x59, 0x7c, 0x96, 0xb4, 0x01, 0x67, 0x79, 0x9a, 0x90, 0x01, 0xa2, 0xed, + 0x36, 0x76, 0xa8, 0xb4, 0x03, 0xae, 0x25, 0xff, 0xd7, 0x72, 0xf7, 0x08, 0x1e, + 0x9a, 0x32, 0xbc, 0xc1, 0xc5, 0xe2, 0xed, 0xd4, 0xe2, 0xa6, 0x57, 0x6b, 0x78, + 0x3c, 0xce, 0x3a, 0xae, 0x11, 0xfa, 0x43, 0x22, 0x62, 0x54, 0x88, 0x56, 0x18, + 0x3e, 0xe6, 0x82, 0xd5, 0xdc, 0x31, 0xbe, 0xb3, 0x8f, 0x06, 0x1c, 0xbd, 0xec, + 0xa7, 0x02, 0x1a, 0x44, 0x4e, 0x2d, 0xd4, 0x17, 0xdf, 0x26, 0xdc, 0xd2, 0x20, + 0xf2, 0xb7, 0x31, 0x77, 0x2b, 0x43, 0x9e, 0x96, 0xd6, 0x14, 0xe1, 0xfa, 0xcb, + 0x48, 0x6c, 0x7a, 0x7d, 0x51, 0x71, 0xb1, 0xde, 0x35, 0x9f, 0x6a, 0xd3, 0xa9, + 0x6f, 0x64, 0x9c, 0x96, 0x91, 0x02, 0xa1, 0x96, 0x4f, 0xb4, 0xb4, 0xa1, 0xa4, + 0x27, 0x9c, 0x68, 0xe6, 0xc3, 0x72, 0xe4, 0x21, 0x87, 0xd7, 0x54, 0xe8, 0x04, + 0xa6, 0x16, 0x53, 0x09, 0x20, 0x69, 0xfb, 0x9b, 0x6d, 0x25, 0x26, 0x68, 0x90, + 0x80, 0x8b, 0x01, 0x5d, 0xf2, 0x8c, 0x80, 0x10, 0x65, 0xda, 0x6f, 0xeb, 0xdc, + 0x1a, 0x56, 0xbf, 0xd0, 0x02, 0x62, 0x5a, 0xcf, 0xaa, 0x53, 0x73, 0xfd, 0xe1, + 0x49, 0xc1, 0xcf, 0xc3, 0x64, 0x9b, 0x48, 0x69, 0x69, 0x6d, 0x44, 0xec, 0xb1, + 0x24, 0x79, 0xc5, 0xeb, 0xef, 0x99, 0x5f, 0x10, 0x02, 0x9f, 0x8b, 0x53, 0x0e, + 0xeb, 0x3f, 0xdc, 0x2e, 0x50, 0xe8, 0x75, 0x7f, 0xc0, 0xbb, 0x9e, 0x26, 0x30, + 0x23, 0xdb, 0x82, 0xf8, 0x78, 0xd9, 0xac, 0x7f, 0xfb, 0x0b, 0xd4, 0x39, 0x1d, + 0xf1, 0xd8, 0x79, 0x89, 0x9a, 0x3e, 0xf5, 0x7b, 0xfd, 0x0d, 0x1f, 0x77, 0x55, + 0x64, 0x8e, 0xdd, 0x85, 0xbb, 0x05, 0x2a, 0x6e, 0xdf, 0x71, 0xcd, 0x26, 0x28, + 0xc9, 0x87, 0x42, 0x9f, 0x36, 0xdc, 0x50, 0x5c, 0xcc, 0x43, 0xf3, 0x0e, 0x7a, + 0x86, 0x9c, 0x9e, 0x25, 0x5e, 0x2a, 0xf9, 0xfc, 0xf3, 0x0c, 0x12, 0x17, 0x96, + 0xd1, 0x90, 0x00, 0x09, 0x60, 0xcb, 0x6f, 0xe2, 0xf1, 0xbf, 0x24, 0x61, 0x18, + 0xb4, 0x98, 0xf3, 0x24, 0x7f, 0x9d, 0x48, 0x4c, 0x73, 0xcf, 0x09, 0x39, 0x30, + 0x39, 0xe4, 0x53, 0x26, 0xb8, 0xff, 0xff, 0xb3, 0xe7, 0xe6, 0x15, 0x9c, 0x46, + 0x69, 0x9f, 0x10, 0x07, 0x92, 0xd4, 0x67, 0x29, 0x50, 0x34, 0x8a, 0x90, 0x55, + 0x2e, 0x45, 0x94, 0x3b, 0xee, 0xac, 0xf0, 0x3f, 0x32, 0x16, 0xf9, 0x4e, 0x27, + 0x4d, 0x63, 0xd6, 0x37, 0xd9, 0xf1, 0x90, 0xe8, 0xa2, 0x66, 0xcd, 0xee, 0xf1, + 0x53, 0x53, 0x0b, 0xee, 0x5c, 0xb8, 0x35, 0x52, 0x60, 0x50, 0x5c, 0x2c, 0x2e, + 0x5d, 0x99, 0x0f, 0xff, 0xdc, 0x34, 0xec, 0x0f, 0xf7, 0xf1, 0xaf, 0x81, 0xb2, + 0x4c, 0xed, 0x0e, 0xfa, 0x62, 0x13, 0xda, 0x6c, 0x7c, 0x60, 0xc4, 0x87, 0xf5, + 0xf7, 0xb0, 0x3f, 0x81, 0x60, 0xa0, 0x57, 0xf4, 0x6d, 0x05, 0xbf, 0x82, 0x18, + 0xb3, 0xad, 0xd9, 0xc0, 0x68, 0x93, 0xbd, 0x02, 0xdb, 0x9b, 0x61, 0x19, 0x1d, + 0xfb, 0x13, 0x3b, 0xfa, 0xbe, 0x48, 0x58, 0xe4, 0x7a, 0x4c, 0xc3, 0x2e, 0x41, + 0x6e, 0xc0, 0x8b, 0x8a, 0xc7, 0x91, 0x5a, 0x43, 0x73, 0x3f, 0x44, 0x06, 0xe9, + 0xd9, 0x67, 0xc5, 0x60, 0xf3, 0x44, 0xd7, 0xe9, 0x04, 0xa2, 0x80, 0x45, 0xd9, + 0x1e, 0x50, 0xd7, 0x9e, 0x42, 0x86, 0x7c, 0x0a, 0xd0, 0xff, 0xb5, 0x5f, 0x68, + 0x87, 0x5e, 0x58, 0x64, 0x20, 0x10, 0x8a, 0x1b, 0x09, 0x25, 0x76, 0x41, 0x5d, + 0xc1, 0x36, 0x93, 0xa1, 0x21, 0x2b, 0x0e, 0x70, 0x03, 0x08, 0x4e, 0xf9, 0x5a, + 0x27, 0xa7, 0xd4, 0x28, 0x4d, 0x27, 0x61, 0x11, 0xd8, 0x60, 0x14, 0x2c, 0xb7, + 0x40, 0xc1, 0x5b, 0x7b, 0x62, 0x3c, 0xf4, 0x8b, 0x3f, 0x7b, 0xfe, 0x3a, 0xf0, + 0x8d, 0xf8, 0xd1, 0xd3, 0xe1, 0x1f, 0xf1, 0x98, 0x21, 0x4e, 0x67, 0x37, 0x76, + 0xf0, 0x4f, 0x0c, 0x4e, 0x84, 0x6c, 0x32, 0xa1, 0x0c, 0x0d, 0x55, 0x9e, 0x49, + 0x68, 0xb4, 0xf8, 0xe1, 0xb9, 0x6c, 0xdc, 0x1e, 0xa7, 0xea, 0x31, 0xdd, 0x86, + 0xd6, 0x80, 0xe2, 0x59, 0x85, 0xe1, 0xd5, 0xd0, 0x25, 0x80, 0xd0, 0x42, 0x74, + 0x23, 0x4a, 0xf2, 0xa5, 0x1b, 0x56, 0xbb, 0x68, 0xa2, 0x9e, 0x03, 0xba, 0xb7, + 0xb5, 0x0f, 0x30, 0x6e, 0xf5, 0xd9, 0xa4, 0xf8, 0x13, 0x5d, 0x69, 0x61, 0x4a, + 0xb3, 0x41, 0x58, 0xfb, 0xa3, 0x70, 0xf7, 0x87, 0x63, 0xd4, 0x02, 0x00, 0x81, + 0xfe, 0x39, 0xcc, 0x23, 0x16, 0x30, 0xe4, 0xc0, 0x89, 0x15, 0xe6, 0x31, 0x77, + 0x15, 0x50, 0xe9, 0xce, 0x1f, 0xca, 0x2c, 0x63, 0xfe, 0x06, 0xb7, 0x98, 0x9d, + 0x58, 0x4f, 0xa7, 0xd7, 0x82, 0xa8, 0x8c, 0x1e, 0x7d, 0x64, 0xb6, 0xfb, 0xf5, + 0x5e, 0x35, 0x96, 0xaf, 0x9b, 0xcb, 0x75, 0x85, 0xf8, 0xc7, 0xd3, 0xaa, 0x5c, + 0x20, 0x82, 0xb2, 0x65, 0x24, 0x9d, 0xf0, 0x57, 0x01, 0xda, 0xb0, 0x31, 0xc4, + 0xba, 0xc1, 0xea, 0x26, 0x7a, 0x29, 0x96, 0xa2, 0x02, 0x8d, 0x1e, 0x6a, 0x0f, + 0x80, 0xa3, 0x84, 0x7c, 0x53, 0x1d, 0xba, 0x96, 0xee, 0x65, 0xa2, 0x41, 0x89, + 0xbd, 0x27, 0x12, 0xe4, 0x0e, 0x95, 0x96, 0x64, 0x98, 0x1e, 0x58, 0xb2, 0xa4, + 0xf9, 0x51, 0xef, 0x8f, 0x49, 0x7d, 0xff, 0xf2, 0xf2, 0xf2, 0x71, 0xea, 0xb8, + 0x9c, 0x62, 0x8e, 0x18, 0xb5, 0xfc, 0xb4, 0x38, 0x82, 0x53, 0x7e, 0xaf, 0x6a, + 0xd2, 0xa6, 0xb1, 0x75, 0x46, 0x33, 0xca, 0xa8, 0x6b, 0xf2, 0xc7, 0x6f, 0x39, + 0x93, 0x15, 0x4f, 0xc7, 0x3e, 0x6f, 0xbb, 0xa2, 0x21, 0x0c, 0x27, 0x43, 0xf5, + 0x30, 0xa4, 0x27, 0x84, 0x9a, 0x30, 0x1e, 0x00, 0xe0, 0x11, 0x29, 0xf0, 0x3a, + 0x46, 0x07, 0xf8, 0x7c, 0xbe, 0x07, 0x62, 0xc0, 0xb1, 0xc6, 0x58, 0x55, 0xde, + 0xba, 0x84, 0x22, 0xca, 0x4b, 0x88, 0xab, 0xee, 0xa6, 0xa4, 0x38, 0x2c, 0xf1, + 0x6c, 0xcd, 0x6d, 0xc7, 0xc3, 0x7c, 0x44, 0xe5, 0x49, 0xc4, 0x53, 0x48, 0x19, + 0xac, 0xd8, 0xbb, 0x0a, 0x02, 0xa5, 0xfa, 0x7a, 0x1c, 0x1d, 0x38, 0x06, 0xfb, + 0xc3, 0x40, 0x7f, 0xd7, 0xda, 0x93, 0xfd, 0x0d, 0xe6, 0x40, 0x0d, 0x3a, 0xb8, + 0x97, 0x74, 0x85, 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, 0x50, 0x7b, 0x79, 0x94, + 0x7a, 0xdb, 0x2f, 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, 0xdb, 0x5f, 0x29, 0x80, + 0x99, 0xf2, 0x0f, 0x26, 0x3b, 0x35, 0x9a, 0x11, 0x51, 0xa6, 0xb7, 0x5c, 0x01, + 0x36, 0x5e, 0xb1, 0x54, 0xae, 0x42, 0x14, 0x0d, 0x6e, 0x10, 0x34, 0x2f, 0x14, + 0xf3, 0x4d, 0xc3, 0x3e, 0x07, 0xff, 0x0e, 0x4d, 0x1a, 0x6b, 0xe3, 0x75, 0xb3, + 0x2f, 0x84, 0xb9, 0x2e, 0x5d, 0x81, 0xeb, 0xb6, 0x39, 0xc4, 0xf2, 0x7e, 0x71, + 0x5a, 0xa4, 0x2c, 0xc7, 0x57, 0x07, 0xd4, 0xeb, 0xd1, 0xbb, 0xfb, 0xe8, 0xf9, + 0x0f, 0xc7, 0xc9, 0x53, 0xe7, 0xa9, 0x71, 0x5e, 0x65, 0xaf, 0x82, 0x67, 0x37, + 0x3d, 0x34, 0x51, 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, 0x2c, 0xcf, 0x3b, 0xcc, + 0x7a, 0xca, 0x14, 0x67, 0xb6, 0x32, 0x7e, 0x4f, 0x95, 0x22, 0xb2, 0xcc, 0x57, + 0x9a, 0x7a, 0x8f, 0xff, 0x7c, 0xa7, 0xcf, 0x14, 0x5d, 0xfc, 0x13, 0xea, 0xfc, + 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, 0xfb, 0xe5, 0x34, 0x44, 0xd0, 0xc7, 0x3b, + 0x3b, 0xd5, 0xbc, 0x87, 0x0b, 0x01, 0xcd, 0x45, 0x79, 0x11, 0xe3, 0x56, 0x31, + 0x3f, 0xd1, 0xda, 0xfb, 0x4c, 0x81, 0x51, 0x63, 0x4a, 0x01, 0xaf, 0xf7, 0xcf, + 0x11, 0x6d, 0x43, 0x3c, 0x3d, 0x2b, 0x3a, 0xdd, 0xa9, 0xce, 0xbe, 0x18, 0xf7, + 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, 0x5a, 0xc9, 0xab, 0xe8, 0xdb, 0x22, 0x56, + 0xd7, 0xeb, 0xe2, 0xff, 0x28, 0x02, 0x09, 0x39, 0x50, 0x38, 0x70, 0x59, 0x7b, + 0x9a, 0x95, 0x58, 0x92, 0xc7, 0x38, 0x96, 0x50, 0xa2, 0xd4, 0x2e, 0xc9, 0x2b, + 0xe7, 0x23, 0xfe, 0xdf, 0x2f, 0x2e, 0xde, 0x5a, 0x47, 0x2a, 0xa1, 0xe7, 0x4f, + 0x33, 0xad, 0x41, 0x90, 0x15, 0x44, 0xed, 0xbb, 0xe3, 0xac, 0x46, 0x4c, 0xf4, + 0x39, 0x19, 0x60, 0x15, 0xf4, 0xf2, 0x2a, 0xc2, 0xb8, 0xfc, 0x01, 0x49, 0x6b, + 0xea, 0xb4, 0xd4, 0x59, 0x07, 0xf4, 0x79, 0x81, 0x2a, 0x25, 0x94, 0x31, 0xa2, + 0xcb, 0xc9, 0x3d, 0x4f, 0x3b, 0x84, 0xe4, 0xdd, 0x36, 0x60, 0x20, 0x27, 0x3a, + 0x67, 0x52, 0xe5, 0x01, 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, 0x81, 0x7e, 0x6e, + 0xa3, 0x51, 0xd6, 0x00, 0x6b, 0xec, 0xf8, 0xd2, 0xff, 0xb0, 0x39, 0x90, 0xf6, + 0x77, 0x74, 0xa8, 0x1e, 0x05, 0xb7, 0xf4, 0xbb, 0xad, 0x85, 0x77, 0xfa, 0x27, + 0xc9, 0xde, 0x64, 0xe1, 0xb1, 0x1d, 0xcf, 0x38, 0x4f, 0x59, 0x56, 0x44, 0x37, + 0x48, 0x75, 0x5a, 0x9f, 0xc6, 0xf2, 0xa0, 0x0b, 0x10, 0xc3, 0x65, 0x7e, 0xba, + 0xc0, 0x3b, 0xfc, 0x0b, 0x58, 0x7b, 0xef, 0x2f, 0x45, 0xec, 0x8a, 0xcd, 0xaa, + 0x51, 0xc1, 0x43, 0xb0, 0xcb, 0x25, 0xb9, 0x14, 0x2c, 0x61, 0xbd, 0x79, 0x0a, + 0x80, 0xd7, 0xc2, 0x3f, 0x90, 0xcc, 0x03, 0x49, 0x5b, 0x51, 0xe4, 0xd2, 0x84, + 0x3e, 0x55, 0x7f, 0x9e, 0x25, 0x45, 0x10, 0x8c, 0x6c, 0x6f, 0xae, 0x35, 0x9f, + 0x64, 0x5c, 0x27, 0x68, 0x91, 0xc0, 0xdc, 0xab, 0x3f, 0xaf, 0x18, 0x77, 0x00, + 0xc0, 0x03, 0x10, 0xa4, 0xfe, 0xf5, 0x63, 0x14, 0x00, 0x00, 0x9a, 0x2d, 0xbd, + 0x0e, 0x13, 0x8d, 0x2d, 0xea, 0xe4, 0x1c, 0xae, 0xa5, 0xf1, 0x86, 0x57, 0x7a, + 0x77, 0xd1, 0xb7, 0x37, 0xfe, 0x21, 0xf0, 0xfa, 0x5a, 0x18, 0xeb, 0xb5, 0x27, + 0x55, 0xb5, 0x26, 0xef, 0x61, 0x30, 0xfb, 0x56, 0x94, 0x4c, 0xfa, 0xb8, 0x75, + 0x27, 0xc2, 0x50, 0xd1, 0x13, 0xb2, 0x9b, 0xca, 0xc9, 0xaa, 0xa1, 0x0c, 0x2e, + 0x7d, 0xe4, 0x15, 0xed, 0xb0, 0x80, 0x6c, 0x6d, 0xa0, 0x30, 0x20, 0xa1, 0x34, + 0xca, 0x7e, 0xcd, 0xc8, 0xda, 0x1b, 0xd5, 0x7a, 0x37, 0xf5, 0x5a, 0x46, 0x94, + 0x0b, 0x45, 0xb2, 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, 0x92, 0x7d, 0x1b, 0xd8, + 0x60, 0xd4, 0x45, 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, 0xe1, 0xd0, 0x01, + 0x08, 0x02, 0x6c, 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, 0xf5, 0xc3, 0x70, + 0xbc, 0xe1, 0x8d, 0x3a, 0xcb, 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, 0xe1, 0xd8, + 0x02, 0xf7, 0x73, 0x33, 0x49, 0x4a, 0x7a, 0xe1, 0x30, 0xfe, 0x86, 0xe8, 0xf8, + 0x18, 0xf9, 0x26, 0x1a, 0x2d, 0xad, 0xb4, 0x12, 0x52, 0x29, 0xba, 0x0f, 0xfc, + 0x0e, 0x70, 0x90, 0x32, 0x44, 0x30, 0xb5, 0x21, 0xa9, 0x0d, 0x22, 0x4a, 0xb7, + 0xa1, 0x02, 0x4e, 0x1d, 0x89, 0x3e, 0x74, 0x04, 0xfe, 0xdb, 0x34, 0x8e, 0x4d, + 0x5e, 0x22, 0x35, 0xc5, 0x9a, 0x78, 0x76, 0xa0, 0xfc, 0x60, 0x14, 0x5c, 0x6a, + 0x00, 0x96, 0x87, 0x68, 0x44, 0x60, 0x27, 0x1e, 0xe1, 0x33, 0xa4, 0x37, 0xfe, + 0x52, 0xfb, 0x6c, 0xfb, 0xa9, 0x7f, 0xce, 0xc1, 0x61, 0xdf, 0x51, 0x5d, 0xde, + 0x90, 0x5a, 0x24, 0xda, 0x6d, 0x37, 0xbd, 0xc3, 0x40, 0x44, 0xa9, 0x55, 0xe6, + 0x82, 0xb4, 0x74, 0x71, 0xca, 0x1e, 0x8c, 0x78, 0xc5, 0x1e, 0xd3, 0x77, 0xcd, + 0x4a, 0xfa, 0x89, 0x4b, 0xd9, 0xbd, 0x12, 0xe7, 0x07, 0x15, 0x6d, 0xa0, 0x72, + 0x6f, 0x7c, 0xf5, 0x72, 0x9f, 0xab, 0xe3, 0x72, 0x16, 0x22, 0x15, 0x07, 0xc5, + 0x50, 0x6e, 0xf5, 0x9e, 0xce, 0x2a, 0x58, 0x1c, 0x9d, 0x8b, 0x0b, 0x20, 0x74, + 0xab, 0x0e, 0x84, 0x8c, 0xa6, 0xb7, 0x05, 0x4d, 0x18, 0x41, 0x83, 0x7e, 0x87, + 0x91, 0xbd, 0x82, 0x71, 0x5a, 0x28, 0xab, 0x56, 0x9a, 0x9a, 0x28, 0x7a, 0x4f, + 0x64, 0x90, 0x08, 0x6b, 0x1c, 0x22, 0x16, 0x95, 0x21, 0xcd, 0xc1, 0x32, 0x21, + 0x29, 0x39, 0xc8, 0x4a, 0x10, 0x89, 0x64, 0x22, 0x17, 0x02, 0x34, 0xcd, 0x82, + 0x05, 0x5a, 0x8c, 0x1c, 0x2e, 0x53, 0xa0, 0xe2, 0x14, 0x93, 0x8a, 0x97, 0xed, + 0x7c, 0xc8, 0xde, 0x0f, 0x4e, 0xd4, 0xb2, 0x1b, 0x94, 0x5b, 0x55, 0xe9, 0xeb, + 0x05, 0x59, 0xea, 0x85, 0x8d, 0x43, 0xfc, 0x31, 0x13, 0x16, 0x5e, 0xa1, 0x8b, + 0x7b, 0x89, 0x3a, 0x5e, 0x32, 0x6a, 0x5b, 0x0a, 0xf4, 0x75, 0xe2, 0x7a, 0x54, + 0xb2, 0x07, 0xb4, 0x1f, 0x92, 0xe3, 0x36, 0x99, 0x06, 0x0c, 0xb6, 0x70, 0x4a, + 0xb5, 0x69, 0x0d, 0xb5, 0x7a, 0xa8, 0x12, 0xcb, 0x9c, 0x24, 0x43, 0x06, 0x44, + 0xc3, 0xb3, 0xb2, 0xa4, 0x4f, 0x27, 0x18, 0xa7, 0xdf, 0x88, 0xab, 0xc4, 0x11, + 0x7b, 0x58, 0x7d, 0xef, 0xf7, 0x8d, 0xe9, 0xc7, 0x3a, 0xf2, 0x80, 0x80, 0xb2, + 0xfd, 0x05, 0x00, 0x3e, 0x11, 0xd3, 0xe1, 0xb3, 0x29, 0x9d, 0xc9, 0x52, 0x1f, + 0x8b, 0x51, 0x3b, 0xad, 0xb0, 0x10, ], txid: [ - 0xa3, 0xa2, 0x20, 0x42, 0xd0, 0x60, 0x1b, 0xa1, 0xaf, 0xe7, 0x87, 0x17, 0x25, - 0xbf, 0xbe, 0xdc, 0x9f, 0x71, 0xaa, 0x18, 0x71, 0x27, 0x54, 0x03, 0xf2, 0x9a, - 0x40, 0x9e, 0x89, 0x00, 0x79, 0x3d, + 0x3f, 0x1b, 0x9f, 0xaa, 0x40, 0x5d, 0x82, 0x70, 0xe2, 0xd9, 0x53, 0x8e, 0x33, + 0x9f, 0x91, 0x97, 0x93, 0x84, 0x16, 0x91, 0xab, 0x03, 0x3d, 0x18, 0x30, 0xa8, + 0xdc, 0xbe, 0xed, 0x4a, 0xfc, 0x4d, ], auth_digest: [ - 0x3e, 0xbb, 0x77, 0x16, 0xca, 0x0b, 0x7a, 0x41, 0x85, 0x19, 0xc0, 0xcc, 0x14, - 0xd8, 0x79, 0xdc, 0x26, 0x70, 0x23, 0xaa, 0xc3, 0x80, 0x84, 0xb8, 0x4d, 0xe3, - 0xd9, 0xa3, 0x21, 0xf9, 0xf7, 0x85, + 0xc9, 0x0c, 0x05, 0x9f, 0xeb, 0x7c, 0x80, 0x7a, 0x6b, 0x34, 0x77, 0x7c, 0x14, + 0xa6, 0xc0, 0x28, 0xb0, 0x92, 0xd8, 0x2c, 0xd5, 0x85, 0x5e, 0xd5, 0xfe, 0x8d, + 0xef, 0xae, 0x87, 0xd2, 0x89, 0xf7, ], amounts: vec![], script_pubkeys: vec![], transparent_input: None, sighash_shielded: [ - 0xa3, 0xa2, 0x20, 0x42, 0xd0, 0x60, 0x1b, 0xa1, 0xaf, 0xe7, 0x87, 0x17, 0x25, - 0xbf, 0xbe, 0xdc, 0x9f, 0x71, 0xaa, 0x18, 0x71, 0x27, 0x54, 0x03, 0xf2, 0x9a, - 0x40, 0x9e, 0x89, 0x00, 0x79, 0x3d, + 0x3f, 0x1b, 0x9f, 0xaa, 0x40, 0x5d, 0x82, 0x70, 0xe2, 0xd9, 0x53, 0x8e, 0x33, + 0x9f, 0x91, 0x97, 0x93, 0x84, 0x16, 0x91, 0xab, 0x03, 0x3d, 0x18, 0x30, 0xa8, + 0xdc, 0xbe, 0xed, 0x4a, 0xfc, 0x4d, ], sighash_all: None, sighash_none: None, @@ -7240,179 +6738,638 @@ pub mod zip_0244 { }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x2f, - 0xff, 0xe8, 0x6e, 0x2a, 0xa3, 0xb8, 0x14, 0x00, 0x02, 0x6f, 0x96, 0xe4, 0xcf, - 0x2d, 0xb8, 0x03, 0x00, 0x04, 0x52, 0xac, 0x6a, 0x52, 0x9a, 0x5c, 0x86, 0xba, - 0xc8, 0x3c, 0x02, 0x00, 0x06, 0x52, 0xac, 0x6a, 0x6a, 0x6a, 0x63, 0x01, 0x2c, - 0x82, 0x93, 0x53, 0xa7, 0x44, 0xb1, 0xde, 0x28, 0x3f, 0x10, 0x90, 0xeb, 0x7a, - 0x9f, 0x80, 0xc0, 0xf7, 0x5c, 0x03, 0xc5, 0x51, 0x0e, 0x6c, 0x7c, 0x62, 0x7a, - 0x8c, 0xf9, 0x41, 0x0d, 0xbc, 0x99, 0x27, 0xe9, 0xd7, 0xf4, 0x88, 0x4e, 0x6e, - 0xd3, 0xfd, 0x5e, 0x4b, 0x7c, 0xb8, 0x35, 0xb8, 0x33, 0x08, 0x96, 0x4e, 0x3c, - 0x46, 0x87, 0x3f, 0xd6, 0x13, 0x31, 0x7b, 0x91, 0xd2, 0x92, 0x36, 0xea, 0x90, - 0xe3, 0x65, 0xd1, 0x62, 0xcc, 0x05, 0x1c, 0x84, 0x6d, 0x24, 0x21, 0x76, 0xda, - 0xf6, 0xd2, 0x86, 0x18, 0xae, 0x31, 0xfb, 0xaa, 0xe9, 0x99, 0xa9, 0x3f, 0x17, - 0x5c, 0x69, 0x38, 0xe6, 0x01, 0xc2, 0x72, 0x08, 0x2e, 0xce, 0x96, 0x7f, 0x8d, - 0x4f, 0xcc, 0x35, 0x2c, 0x04, 0xf2, 0xb1, 0x50, 0x13, 0x61, 0xd7, 0xed, 0xa7, - 0x9a, 0x11, 0x98, 0x66, 0x1f, 0x1c, 0xf2, 0x9d, 0x09, 0xc7, 0x87, 0xaf, 0xbc, - 0xa2, 0x00, 0x36, 0x04, 0xc9, 0x99, 0x94, 0x4d, 0xe3, 0xc0, 0xfc, 0xf8, 0x31, - 0x93, 0xa1, 0x8d, 0x35, 0x88, 0x3a, 0xae, 0x56, 0xb1, 0x36, 0x7b, 0x24, 0x08, - 0x55, 0x42, 0xd2, 0x40, 0x12, 0xf9, 0x9e, 0x59, 0x58, 0x00, 0x80, 0x8a, 0x2e, - 0x2f, 0xe3, 0x6c, 0x1f, 0x2c, 0x60, 0x3d, 0x07, 0x84, 0x98, 0x59, 0x75, 0xd3, - 0x67, 0x1c, 0xfd, 0x9a, 0x8a, 0xd8, 0xeb, 0xbd, 0x76, 0x43, 0x8e, 0xf6, 0x49, - 0x79, 0xbf, 0x65, 0x15, 0xed, 0x4a, 0x68, 0x40, 0xb0, 0x88, 0x3a, 0x9e, 0x6e, - 0xf6, 0x4a, 0x0e, 0xfc, 0xae, 0x1c, 0xf2, 0x1d, 0xfe, 0x74, 0x85, 0x4e, 0x84, - 0xc2, 0x74, 0x9f, 0xac, 0x03, 0x82, 0x52, 0x75, 0xc9, 0xb6, 0x30, 0x21, 0x84, - 0xc7, 0x2d, 0xf4, 0xc4, 0xbb, 0x28, 0x62, 0xe4, 0xe8, 0xa7, 0xd9, 0xa4, 0xa2, - 0x82, 0x86, 0x6f, 0x9a, 0x7b, 0x2c, 0xfc, 0x9a, 0x56, 0x31, 0x3d, 0xa0, 0xc4, - 0x7a, 0x34, 0xb7, 0xb9, 0xcd, 0xa3, 0xac, 0xe8, 0x18, 0x5f, 0x07, 0xdf, 0x36, - 0xe4, 0x48, 0xa7, 0x6a, 0xa4, 0x77, 0xf2, 0x24, 0xd8, 0x7a, 0x07, 0x4f, 0x43, - 0xaf, 0x5d, 0x5f, 0x79, 0xb3, 0xab, 0x11, 0x28, 0xf0, 0x81, 0x91, 0x44, 0x7f, - 0xa6, 0x46, 0xbf, 0xdd, 0xe5, 0xb5, 0x1e, 0x23, 0x3c, 0xa6, 0x15, 0x5d, 0x10, - 0x15, 0x85, 0xbc, 0x2c, 0x40, 0x15, 0x8a, 0xc2, 0x10, 0x6e, 0x66, 0xa2, 0x6e, - 0x46, 0x42, 0x33, 0x70, 0x63, 0x68, 0x76, 0xb4, 0x34, 0xa7, 0x4f, 0x8c, 0xe8, - 0x06, 0x00, 0x50, 0xb0, 0x82, 0xa7, 0x9b, 0x61, 0xbb, 0x5d, 0x34, 0x4e, 0xb5, - 0xa1, 0x15, 0x83, 0x26, 0xce, 0xd9, 0xa9, 0xd9, 0xf5, 0x4f, 0xb2, 0xfe, 0x8f, - 0x9f, 0x05, 0xcd, 0x11, 0x1e, 0xe4, 0x6c, 0x47, 0x10, 0xf6, 0xf6, 0x3a, 0x62, - 0x69, 0x45, 0x57, 0xef, 0x1b, 0x12, 0xc8, 0x80, 0x06, 0xb6, 0x78, 0x72, 0x50, - 0x5f, 0x4e, 0x88, 0x3b, 0x58, 0x59, 0x07, 0x92, 0x9a, 0x2f, 0x3f, 0xdb, 0x0d, - 0x8f, 0x79, 0x14, 0xc4, 0x2d, 0xde, 0x2d, 0x20, 0x00, 0xf5, 0xae, 0x02, 0xd4, - 0x18, 0x21, 0xc8, 0xe1, 0xee, 0x01, 0x38, 0xeb, 0xcb, 0x72, 0x8d, 0x7c, 0x6c, - 0x3c, 0x80, 0x02, 0x7e, 0x43, 0x75, 0x94, 0xc6, 0x70, 0xfd, 0x6f, 0x39, 0x08, - 0x22, 0x2e, 0xe7, 0xa1, 0xb9, 0x17, 0xf8, 0x27, 0x1a, 0xbe, 0x66, 0x0e, 0x39, - 0xe0, 0x51, 0xaa, 0xa6, 0xfc, 0xa1, 0x86, 0x22, 0x76, 0xe2, 0xba, 0xa0, 0xfe, - 0x0b, 0x16, 0x2a, 0xeb, 0xcf, 0xe3, 0xd9, 0x34, 0x9c, 0x8d, 0x15, 0x4b, 0xb7, - 0xee, 0x28, 0x21, 0x2c, 0x1b, 0xaa, 0x70, 0x5d, 0x82, 0x07, 0x0d, 0x70, 0x32, - 0xf2, 0x69, 0x5d, 0x17, 0x96, 0x80, 0x9f, 0xab, 0x41, 0x24, 0x69, 0x26, 0xaf, - 0x99, 0x2b, 0x6e, 0xee, 0x95, 0xa9, 0xa0, 0x6b, 0xc4, 0x56, 0x2c, 0x5f, 0x2f, - 0x1b, 0x19, 0x54, 0x95, 0x00, 0x37, 0x2e, 0x7a, 0xd5, 0x79, 0xa6, 0xd6, 0xd7, - 0x8b, 0x33, 0x15, 0x31, 0x30, 0xfb, 0x44, 0x8f, 0xb7, 0x9e, 0x8a, 0x66, 0x9d, - 0xb8, 0xa0, 0xf3, 0x5c, 0xdf, 0x9a, 0xe5, 0xd3, 0x2d, 0x73, 0x2f, 0xc7, 0x94, - 0x18, 0xe2, 0x3b, 0x45, 0x1d, 0xdc, 0x95, 0xa2, 0x2a, 0xba, 0xbb, 0x05, 0x6e, - 0xc6, 0xb5, 0xe8, 0xba, 0x4f, 0x52, 0x4d, 0xfa, 0xfe, 0x87, 0x52, 0x62, 0xdd, - 0x7b, 0xe4, 0x1c, 0xbb, 0xc6, 0x24, 0x20, 0xd4, 0xad, 0x6d, 0xf5, 0xc9, 0xb7, - 0x13, 0x60, 0x4f, 0x65, 0x60, 0x88, 0xa4, 0x48, 0x5e, 0x93, 0xbe, 0x19, 0x07, - 0xd2, 0x7a, 0xc6, 0xec, 0x3c, 0x57, 0x25, 0x9b, 0xd6, 0x98, 0x1d, 0x42, 0xc1, - 0xb7, 0x8a, 0x29, 0xad, 0x96, 0x85, 0xe6, 0x3c, 0x49, 0x4d, 0x41, 0x29, 0x62, - 0x3e, 0xa1, 0xa7, 0xff, 0xec, 0x85, 0xfa, 0x29, 0x41, 0x10, 0x73, 0xed, 0xb2, - 0x97, 0x8e, 0xf4, 0xe4, 0x69, 0xdd, 0xd5, 0xcd, 0xa9, 0x86, 0x18, 0x99, 0x95, - 0xf8, 0x8d, 0x6a, 0xb3, 0x66, 0xdb, 0x01, 0x90, 0x01, 0xf5, 0xb2, 0x52, 0x88, - 0xcf, 0x86, 0x0f, 0xd9, 0x98, 0xee, 0x57, 0x3c, 0x8c, 0xc4, 0x8a, 0xa9, 0xef, - 0xcf, 0x9b, 0x61, 0x7e, 0x04, 0x3c, 0x32, 0x9c, 0xd1, 0xaa, 0x1a, 0x0e, 0xd3, - 0xa4, 0x02, 0xfb, 0x96, 0xe3, 0x36, 0xc7, 0x19, 0xe6, 0x25, 0x3c, 0xb6, 0x91, - 0xaa, 0x0d, 0xb5, 0x27, 0x36, 0x62, 0x6e, 0xd1, 0x97, 0x88, 0x75, 0x88, 0x8e, - 0xc7, 0x6c, 0x84, 0x6b, 0xc2, 0x27, 0x27, 0x2a, 0x58, 0x53, 0x17, 0xdf, 0xf0, - 0xb1, 0x14, 0x8d, 0x92, 0xd6, 0xf5, 0xfb, 0x7d, 0x95, 0x33, 0x67, 0x70, 0xa7, - 0xd1, 0x6f, 0xac, 0x1a, 0xdd, 0x86, 0x07, 0x76, 0xcb, 0x48, 0x02, 0x21, 0xf8, - 0xfb, 0x33, 0xd7, 0xe4, 0xe9, 0xb0, 0x79, 0x02, 0xd2, 0xff, 0x86, 0xfd, 0xac, - 0x72, 0x09, 0x62, 0x34, 0xae, 0xd4, 0x8d, 0xe8, 0x92, 0xff, 0x73, 0x55, 0x07, - 0x3b, 0xbf, 0x06, 0x15, 0xf6, 0x7b, 0x11, 0x00, 0xcc, 0x2e, 0xa3, 0xba, 0x3d, - 0x6c, 0x1a, 0x1a, 0x90, 0x87, 0xb1, 0x19, 0xba, 0xee, 0xbf, 0xa6, 0x2b, 0xc9, - 0xf0, 0xec, 0x47, 0x9d, 0x99, 0xc1, 0xa3, 0xb1, 0x58, 0xb5, 0x14, 0xd1, 0x62, - 0x9d, 0xb3, 0x99, 0x3f, 0x11, 0x67, 0x2a, 0x26, 0x70, 0x8e, 0x5a, 0xd8, 0x16, - 0xb5, 0x47, 0xab, 0x7e, 0x82, 0x7d, 0x07, 0xe8, 0xd1, 0x9c, 0xeb, 0x3b, 0x19, - 0x05, 0x00, 0xee, 0xdf, 0x46, 0x0a, 0xa3, 0xbe, 0xb4, 0x34, 0x19, 0xc6, 0xb0, - 0x82, 0xe8, 0x35, 0xce, 0x84, 0xca, 0x13, 0xb6, 0x90, 0x8a, 0x88, 0x13, 0xc0, - 0x21, 0xde, 0x9f, 0xa9, 0xa4, 0x4e, 0x4c, 0x18, 0x31, 0xa0, 0x81, 0xf2, 0xc1, - 0xf3, 0xfd, 0x78, 0x25, 0x49, 0xd3, 0xf3, 0x24, 0x57, 0x59, 0x60, 0x6d, 0x9f, - 0x92, 0xd5, 0x54, 0x8a, 0xcf, 0xea, 0xdb, 0xaf, 0x9c, 0xaa, 0x6b, 0x93, 0xdc, - 0x08, 0x82, 0x8d, 0x74, 0xf6, 0xd5, 0xfd, 0xd8, 0x33, 0x31, 0xf0, 0x96, 0x91, - 0x45, 0x95, 0x52, 0x97, 0xe6, 0x9f, 0x00, 0xfd, 0x29, 0x87, 0xf2, 0xda, 0x2b, - 0x94, 0xb9, 0x95, 0xfe, 0xcb, 0xe6, 0x22, 0xa7, 0x35, 0xef, 0x7f, 0x12, 0x07, - 0xf6, 0x71, 0x62, 0x94, 0x89, 0x20, 0x2b, 0xea, 0x0b, 0x47, 0x5e, 0x51, 0x68, - 0x1a, 0xa1, 0x67, 0x78, 0xb3, 0x9b, 0xd9, 0x23, 0xc9, 0x8d, 0xc6, 0xff, 0x83, - 0x73, 0xc7, 0x9b, 0xb1, 0x70, 0x30, 0x41, 0x7b, 0xc2, 0x00, 0xc8, 0xf0, 0xb8, - 0x55, 0xac, 0xfe, 0xc1, 0x79, 0xf7, 0x67, 0x4c, 0xec, 0x27, 0x21, 0xa1, 0x0f, - 0xca, 0x69, 0x3d, 0x83, 0xcf, 0xe5, 0xb8, 0xcd, 0xcc, 0x18, 0xf8, 0x1a, 0xd6, - 0x17, 0xfa, 0x26, 0xf0, 0xdf, 0xb8, 0x36, 0x55, 0xb8, 0xa2, 0x9a, 0x7f, 0x83, - 0x42, 0x32, 0x42, 0x5e, 0x8c, 0x47, 0x45, 0x88, 0xf1, 0x8d, 0xd3, 0x26, 0xaa, - 0x39, 0x6c, 0x3e, 0x47, 0x75, 0xe0, 0x02, 0x05, 0xfc, 0x9e, 0x45, 0xf7, 0xb7, - 0xd2, 0xe6, 0xd5, 0x5d, 0xcb, 0x90, 0xe2, 0x3f, 0xf6, 0xb5, 0x08, 0x45, 0x9a, - 0xa6, 0x99, 0xbf, 0xcb, 0xd5, 0x0f, 0x29, 0xa9, 0x9b, 0x2f, 0xf0, 0xfa, 0x16, - 0x0f, 0x2c, 0xd6, 0x9a, 0x80, 0xea, 0x9e, 0x83, 0x1c, 0x29, 0x4b, 0x4c, 0xfa, - 0x7b, 0xf0, 0x02, 0x38, 0x12, 0xfd, 0x67, 0x01, 0xbb, 0x13, 0xb5, 0xe4, 0xbc, - 0x12, 0xdc, 0x73, 0xd4, 0xe3, 0xef, 0x4f, 0x4a, 0x89, 0x2b, 0x43, 0x14, 0x8c, - 0xa7, 0x3e, 0x21, 0xa2, 0x7f, 0x89, 0x95, 0x17, 0x06, 0xbc, 0x22, 0x08, 0x43, - 0x94, 0x4f, 0x66, 0x0e, 0x1b, 0xa7, 0x84, 0x2b, 0x3e, 0x90, 0x30, 0x53, 0x83, - 0x89, 0x6e, 0xc4, 0x90, 0x5f, 0x70, 0xc7, 0x8b, 0x69, 0x4e, 0x6a, 0x5a, 0x3e, - 0x43, 0x12, 0xcd, 0x82, 0x08, 0x13, 0x2b, 0x84, 0x0f, 0x05, 0xc7, 0x14, 0x52, - 0x3c, 0xa8, 0x19, 0x72, 0x0a, 0xe2, 0x27, 0xfd, 0x1a, 0xcb, 0xa7, 0x14, 0xfa, - 0x4f, 0xc4, 0x5f, 0xc5, 0x39, 0x88, 0x57, 0xb4, 0x0d, 0xc1, 0x48, 0x79, 0x85, - 0x6f, 0x35, 0x4b, 0xa4, 0xd2, 0x58, 0x1d, 0x0c, 0xda, 0x54, 0xb6, 0x38, 0xba, - 0x9d, 0x76, 0xf9, 0xb5, 0x2d, 0x17, 0xc8, 0xf8, 0x8e, 0xe6, 0x3f, 0x58, 0x45, - 0xb5, 0xdc, 0xef, 0xa4, 0xc3, 0x47, 0x9b, 0xce, 0x9a, 0xca, 0xd1, 0x8b, 0x4a, - 0xea, 0xe0, 0x3c, 0x0e, 0xae, 0x22, 0x5d, 0x42, 0x84, 0x8b, 0xde, 0xaa, 0x53, - 0x6d, 0x7d, 0x8d, 0xd3, 0xbc, 0x97, 0x9f, 0x06, 0x58, 0x66, 0x73, 0xbc, 0x6f, - 0xf1, 0xc5, 0xd3, 0xb3, 0x20, 0xf3, 0x49, 0xa5, 0xb3, 0xa8, 0xb3, 0x55, 0x59, - 0x22, 0x96, 0xaa, 0xf6, 0x1c, 0x5b, 0x72, 0x52, 0xf7, 0x3e, 0xc0, 0xa9, 0x46, - 0x6a, 0x1b, 0x85, 0x76, 0x4f, 0xb0, 0x83, 0x1b, 0x4a, 0x1a, 0x36, 0x89, 0x0e, - 0x22, 0x4c, 0x01, 0xac, 0xfc, 0xe4, 0x8e, 0xe3, 0xed, 0x93, 0x87, 0x73, 0x98, - 0xe0, 0x72, 0x6d, 0x02, 0x93, 0x6d, 0x0d, 0x03, 0x2e, 0x18, 0xe3, 0x28, 0x8b, - 0x26, 0xc3, 0xaf, 0xc9, 0x3b, 0x05, 0x72, 0x1d, 0xf1, 0xd3, 0xa4, 0x14, 0x66, - 0x54, 0x46, 0xcf, 0x1e, 0x0f, 0x26, 0xcf, 0x15, 0xc3, 0x55, 0x4e, 0xf6, 0x1d, - 0xd3, 0x32, 0x42, 0x6b, 0x94, 0x5e, 0x3c, 0xb8, 0xf0, 0x35, 0x4a, 0x9f, 0xb7, - 0x2a, 0xe3, 0x50, 0x7a, 0xef, 0xe8, 0x9b, 0xe5, 0x41, 0x66, 0x45, 0x93, 0xb6, - 0xee, 0x77, 0xa2, 0xa7, 0x5f, 0x8b, 0x26, 0xa2, 0xb1, 0x3c, 0x2c, 0xa8, 0x04, - 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x1b, + 0xfe, 0xb9, 0x1b, 0x0b, 0x31, 0x69, 0x1c, 0x03, 0xc2, 0xe8, 0x25, 0xa5, 0x97, + 0xb8, 0xfb, 0x75, 0xbc, 0x56, 0x2d, 0x65, 0x4d, 0x62, 0x10, 0x46, 0x40, 0xdd, + 0x74, 0xe5, 0x6c, 0xd1, 0x4b, 0xaa, 0xba, 0x56, 0x5b, 0x84, 0xb8, 0x45, 0xe1, + 0x63, 0xd1, 0xca, 0xef, 0x25, 0x01, 0x53, 0x98, 0x16, 0x37, 0x20, 0x4f, 0x96, + 0xa5, 0x9c, 0x8e, 0x80, 0x24, 0xd9, 0x04, 0x1b, 0x20, 0x29, 0xe9, 0x4c, 0x15, + 0x24, 0x5f, 0x1a, 0x95, 0x88, 0x40, 0xba, 0x3f, 0x38, 0x0a, 0x4d, 0x20, 0xf1, + 0x18, 0x4e, 0x77, 0x82, 0x7d, 0xe3, 0xff, 0x8f, 0x01, 0x53, 0x45, 0x9a, 0xfe, + 0x24, 0x1f, 0x72, 0x3c, 0x08, 0x48, 0x23, 0x23, 0x0e, 0x00, 0x3d, 0x3d, 0x21, + 0xe5, 0x35, 0x01, 0xec, 0x04, 0x99, 0xb0, 0x83, 0xa7, 0xda, 0xd6, 0x85, 0xc5, + 0x71, 0x27, 0xf4, 0xde, 0x64, 0x73, 0x3a, 0x88, 0x0c, 0x2d, 0xb2, 0x07, 0x52, + 0x53, 0x51, 0x63, 0x52, 0x52, 0x63, 0xf6, 0x64, 0xa3, 0x51, 0x00, 0x00, 0x00, + 0x03, 0xf9, 0x27, 0xb9, 0x46, 0x9e, 0x18, 0x22, 0x9d, 0x02, 0xc3, 0x3d, 0xec, + 0x3f, 0x11, 0x7c, 0x5d, 0x2a, 0x8a, 0x85, 0xdb, 0x9b, 0x57, 0x56, 0xdd, 0x52, + 0xb8, 0x19, 0x0d, 0xb2, 0x59, 0x62, 0x80, 0xfa, 0x21, 0x39, 0x43, 0x77, 0xa4, + 0x55, 0x1c, 0x76, 0xd1, 0xf7, 0x5a, 0xc0, 0x3c, 0x26, 0x20, 0x54, 0xdf, 0xfd, + 0x79, 0xa9, 0xde, 0xd0, 0x5e, 0x88, 0x89, 0x58, 0x19, 0x9e, 0xea, 0x45, 0x01, + 0xcc, 0xfa, 0x41, 0x52, 0xd4, 0x45, 0xa6, 0xb3, 0x08, 0x54, 0x9e, 0xfc, 0x1d, + 0x9b, 0x2b, 0x97, 0xd3, 0x9d, 0xa9, 0x0c, 0x63, 0x88, 0xbe, 0x80, 0x52, 0x45, + 0x83, 0x25, 0xbf, 0xd2, 0xf5, 0xbf, 0x73, 0x74, 0x1d, 0x57, 0x85, 0x83, 0x7a, + 0x6b, 0x84, 0x4b, 0x47, 0x47, 0x75, 0x71, 0x8c, 0x29, 0xdd, 0x99, 0x08, 0x4e, + 0x9f, 0x88, 0xef, 0x15, 0x3a, 0x83, 0x29, 0xf5, 0x32, 0xa6, 0x90, 0x17, 0x1c, + 0x2d, 0x1e, 0x30, 0x74, 0xdf, 0xae, 0x3e, 0x23, 0xdb, 0x39, 0x48, 0xa4, 0x53, + 0xc3, 0x94, 0x81, 0xa9, 0x91, 0x4d, 0xd0, 0xac, 0x79, 0xe9, 0x27, 0x36, 0x01, + 0x29, 0xbe, 0x3a, 0x7f, 0x11, 0x95, 0x44, 0x12, 0x20, 0x00, 0x61, 0x0b, 0xd2, + 0xaa, 0xcb, 0xd8, 0x23, 0x25, 0xa5, 0x9b, 0x95, 0x15, 0x4e, 0xcd, 0x82, 0xc8, + 0x8d, 0x23, 0xab, 0xd1, 0xe2, 0x07, 0x70, 0xff, 0xb8, 0xaa, 0xbf, 0x83, 0xfc, + 0x07, 0x34, 0x96, 0x4c, 0xcd, 0x41, 0x1d, 0x1c, 0x93, 0x57, 0x14, 0xe2, 0x4a, + 0xab, 0x56, 0x6f, 0x4f, 0x08, 0x42, 0x40, 0x14, 0xc4, 0xec, 0xa9, 0x1b, 0x59, + 0x0f, 0x08, 0x2b, 0x47, 0x3f, 0x36, 0x1c, 0x87, 0x41, 0x5d, 0x37, 0xbd, 0x20, + 0xd7, 0x0f, 0xd0, 0xb5, 0x2b, 0x6d, 0xdf, 0x18, 0x65, 0xf7, 0x66, 0x70, 0x2e, + 0x32, 0xb0, 0x5b, 0x3c, 0xf1, 0x63, 0x0e, 0xe8, 0x59, 0x7a, 0xae, 0x19, 0x63, + 0x3f, 0x35, 0x16, 0xa8, 0x55, 0x5a, 0xc5, 0xbe, 0x32, 0xc6, 0x75, 0xbe, 0x18, + 0x17, 0xef, 0xbf, 0xfd, 0x93, 0x69, 0x04, 0x1a, 0x08, 0x9c, 0x28, 0x3f, 0x19, + 0x64, 0x99, 0x68, 0xc2, 0x49, 0x8c, 0xde, 0x56, 0xf5, 0x00, 0x43, 0x4f, 0x28, + 0x0d, 0x77, 0xa9, 0xc6, 0x2e, 0x43, 0xcb, 0xd3, 0xf1, 0x36, 0xa4, 0xc6, 0xa0, + 0x0a, 0x43, 0xe6, 0xed, 0x53, 0x0c, 0xb2, 0xe8, 0xae, 0x83, 0x88, 0x60, 0xad, + 0xc8, 0x8a, 0xac, 0xc7, 0xbd, 0x6a, 0x00, 0xae, 0x0c, 0x19, 0xff, 0x45, 0x33, + 0xa4, 0x85, 0xef, 0xde, 0x08, 0x2b, 0x5f, 0x4d, 0x1f, 0x7a, 0x8e, 0xbe, 0x7e, + 0xd8, 0x2b, 0x7b, 0x05, 0xa8, 0xcf, 0xe1, 0xe3, 0x73, 0x45, 0x9f, 0x1b, 0xdc, + 0xbf, 0x95, 0x25, 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, 0x79, + 0x87, 0x40, 0xe0, 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, 0xa0, + 0xae, 0x0f, 0x07, 0x6c, 0x58, 0x2c, 0x0f, 0x5b, 0xa8, 0x78, 0xb9, 0x9b, 0x82, + 0x49, 0xdb, 0x1d, 0x7e, 0x95, 0x05, 0x6c, 0x98, 0xaf, 0x08, 0x3d, 0x98, 0xcb, + 0x0e, 0xd9, 0xe3, 0xf7, 0x43, 0x6e, 0x1c, 0x76, 0x43, 0x76, 0x6f, 0x96, 0x6b, + 0x83, 0xe9, 0x99, 0x20, 0x6e, 0xbd, 0x13, 0x93, 0xb9, 0xb2, 0xa7, 0xf4, 0x14, + 0x48, 0x0f, 0xa0, 0x17, 0x48, 0x00, 0x69, 0xf8, 0x5c, 0x77, 0x49, 0xc4, 0x35, + 0xae, 0x2f, 0xba, 0x2d, 0xdc, 0x10, 0x38, 0xd5, 0x47, 0xd8, 0x48, 0x54, 0x81, + 0x7e, 0xf3, 0x96, 0x35, 0xc2, 0x98, 0x27, 0xaa, 0xd8, 0x67, 0x26, 0xc9, 0xad, + 0xe3, 0xb2, 0x65, 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, 0x56, 0xfe, 0x4b, + 0xd8, 0xb4, 0xd6, 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, 0xda, 0xc4, + 0x64, 0x15, 0x6d, 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0x1d, 0x83, 0xb8, 0x6f, 0x65, + 0x96, 0x37, 0xe3, 0xb1, 0x42, 0xc1, 0x64, 0x96, 0x3b, 0x8c, 0xdc, 0xf4, 0xba, + 0x4f, 0x40, 0x35, 0xdf, 0xfc, 0x5a, 0x78, 0x94, 0x58, 0x84, 0x77, 0x81, 0x91, + 0x8a, 0xc7, 0x2f, 0xc1, 0x8b, 0xbb, 0xf5, 0x11, 0x00, 0x32, 0xe6, 0x6d, 0x75, + 0xb3, 0x17, 0x1e, 0xf4, 0xb5, 0x13, 0x29, 0x01, 0x64, 0xa7, 0x7b, 0x42, 0xb0, + 0xa4, 0xcf, 0xb8, 0x96, 0x39, 0xab, 0x23, 0x84, 0x5e, 0x1a, 0xa2, 0xa4, 0x52, + 0xf3, 0x73, 0x1c, 0x8c, 0xb6, 0x50, 0x82, 0xa6, 0x22, 0xa7, 0xc2, 0xe0, 0x01, + 0x3e, 0xa4, 0x7d, 0x0b, 0xdd, 0x42, 0xd6, 0x99, 0x04, 0x66, 0x64, 0x9a, 0x90, + 0x5c, 0x68, 0x4c, 0x32, 0x51, 0x71, 0x6d, 0x61, 0xf7, 0x60, 0xd5, 0x3d, 0xe6, + 0xe3, 0xf7, 0x90, 0xfb, 0xa7, 0xf5, 0xf1, 0xf4, 0xde, 0x26, 0x71, 0x13, 0xbd, + 0xfc, 0xd7, 0x42, 0x28, 0x22, 0x33, 0x0b, 0x32, 0xd5, 0x8e, 0x67, 0x77, 0x76, + 0x5f, 0x22, 0xa4, 0x11, 0x63, 0x44, 0xee, 0xb6, 0x5b, 0x2e, 0xc5, 0x16, 0x39, + 0x3a, 0xb3, 0x75, 0x1b, 0x53, 0x56, 0xd2, 0xb0, 0xc9, 0x50, 0x0c, 0x0f, 0x3e, + 0x46, 0x91, 0x81, 0x03, 0x5b, 0xc3, 0x66, 0x0f, 0x0b, 0x8f, 0x9f, 0xbe, 0x6e, + 0x40, 0xb5, 0xe8, 0x9c, 0xb7, 0x9b, 0x06, 0x37, 0x14, 0xca, 0x75, 0xe7, 0x2e, + 0x2e, 0x10, 0x0a, 0x10, 0xd6, 0x3b, 0xf7, 0x84, 0xdf, 0x08, 0x20, 0xef, 0x25, + 0xf8, 0xef, 0x40, 0xfe, 0x5f, 0x05, 0xfb, 0x95, 0x68, 0x3f, 0x91, 0x05, 0xff, + 0x3c, 0xb2, 0xd2, 0x19, 0xab, 0x76, 0x60, 0x5a, 0x06, 0x4f, 0x69, 0x21, 0x9f, + 0x1d, 0xc0, 0xd0, 0x0b, 0x3b, 0x48, 0x64, 0x2f, 0x97, 0x0d, 0xc0, 0x0c, 0xca, + 0x4b, 0x8b, 0x43, 0x30, 0x8b, 0xe1, 0x82, 0x86, 0xec, 0x5a, 0x42, 0x88, 0xd6, + 0x00, 0xa3, 0x78, 0x5c, 0xb6, 0x22, 0xd4, 0x68, 0xa4, 0xc6, 0x96, 0x9b, 0x37, + 0x92, 0xf2, 0x48, 0x50, 0x27, 0xd0, 0xad, 0x9a, 0xa4, 0xa9, 0xc2, 0xcc, 0x97, + 0x2f, 0x9e, 0xe5, 0x19, 0x0a, 0x95, 0xb1, 0xeb, 0x05, 0x8d, 0xdd, 0xd8, 0xc0, + 0x8e, 0x7d, 0x75, 0x3f, 0x5e, 0x01, 0x1b, 0x2b, 0xcf, 0xee, 0x1d, 0x52, 0xc1, + 0xc4, 0xf2, 0x0a, 0xa3, 0xf7, 0x12, 0x74, 0x1f, 0xc0, 0x93, 0xa1, 0xb3, 0x6a, + 0xf5, 0x55, 0xf7, 0x4e, 0x30, 0xf8, 0x5d, 0x5c, 0xc9, 0x59, 0x30, 0x7f, 0x74, + 0x35, 0xf7, 0xef, 0x04, 0xca, 0x2c, 0x31, 0x25, 0xbc, 0xef, 0x2a, 0x99, 0x01, + 0x76, 0xae, 0x33, 0x93, 0x25, 0xd5, 0xa5, 0x88, 0xda, 0x57, 0x96, 0xfa, 0xae, + 0x5b, 0xab, 0x7c, 0x82, 0x97, 0x7c, 0x0f, 0xf7, 0x97, 0x09, 0x3e, 0x2c, 0x1f, + 0x3a, 0x77, 0x82, 0xa6, 0xd3, 0x9a, 0x61, 0xee, 0x55, 0x28, 0x99, 0x0d, 0x8d, + 0x36, 0x9e, 0x8e, 0xdc, 0xfe, 0x38, 0xbb, 0x70, 0x2d, 0xff, 0x02, 0xda, 0x34, + 0x28, 0x54, 0x5d, 0x9d, 0x61, 0x57, 0xa5, 0x1e, 0x55, 0xeb, 0xca, 0x6a, 0x85, + 0x06, 0xe3, 0x69, 0x9a, 0x3d, 0x70, 0x85, 0xa4, 0xd9, 0xfe, 0xd5, 0x09, 0x4c, + 0x68, 0xb3, 0x75, 0xe9, 0x84, 0xf6, 0x83, 0x93, 0x30, 0x08, 0x71, 0xe3, 0x08, + 0xfc, 0xf7, 0x4e, 0x27, 0x6b, 0x62, 0x26, 0x6a, 0x8f, 0x4e, 0xe3, 0x94, 0x5f, + 0x09, 0x4d, 0x17, 0xa7, 0xc0, 0x7c, 0xfe, 0x0b, 0xfd, 0x48, 0x95, 0xa1, 0x4f, + 0xac, 0x97, 0x1c, 0x92, 0xa1, 0x95, 0xb4, 0x42, 0x68, 0x3c, 0x49, 0x56, 0xbb, + 0xb1, 0x95, 0xa4, 0xfa, 0x66, 0xdc, 0x9c, 0xd5, 0x42, 0xc7, 0x6b, 0x91, 0x50, + 0xc8, 0x4b, 0xf8, 0x90, 0x78, 0x99, 0x42, 0xf5, 0x5c, 0x20, 0x0b, 0x77, 0x3e, + 0xcd, 0xd7, 0x99, 0x2c, 0xff, 0x3e, 0xca, 0x24, 0xde, 0x3e, 0x09, 0x84, 0xe1, + 0x0e, 0x68, 0xae, 0x38, 0x75, 0x34, 0xb9, 0x6c, 0xde, 0x37, 0x92, 0xf1, 0x35, + 0xbf, 0x5f, 0x68, 0x78, 0x7d, 0x37, 0x0c, 0xa8, 0xc4, 0xc4, 0x07, 0x4d, 0xc5, + 0xd6, 0x01, 0xae, 0x90, 0x49, 0x54, 0x37, 0xc3, 0xc2, 0xd4, 0x8a, 0x3d, 0x96, + 0x66, 0x83, 0xac, 0x05, 0x16, 0x0b, 0x7a, 0x84, 0xea, 0xa7, 0xaa, 0xb7, 0x40, + 0x09, 0xe5, 0x7a, 0x85, 0xf7, 0xbf, 0x68, 0xa2, 0xe4, 0x82, 0x00, 0x0f, 0x82, + 0x9c, 0x54, 0x50, 0x73, 0xa1, 0x5d, 0x5c, 0xd0, 0xfc, 0xc5, 0x74, 0x39, 0xa4, + 0x35, 0x0e, 0xaf, 0x09, 0x8d, 0xfb, 0x82, 0xa0, 0x85, 0xea, 0x8a, 0x4a, 0xf6, + 0xfa, 0x83, 0x81, 0xf0, 0x65, 0x88, 0x19, 0xea, 0xb4, 0x83, 0xf6, 0x5b, 0x32, + 0x5d, 0x5a, 0xed, 0xa1, 0x52, 0x32, 0xcf, 0xad, 0xec, 0x75, 0xab, 0x18, 0x66, + 0xe4, 0xc0, 0x15, 0x5a, 0x9c, 0x74, 0xa7, 0xa5, 0x7c, 0xcf, 0x34, 0xc4, 0x83, + 0xac, 0x7d, 0xa1, 0x58, 0x8a, 0x1b, 0x6b, 0x99, 0x41, 0xf1, 0x10, 0x40, 0xf9, + 0x4c, 0xf7, 0x8f, 0xad, 0x89, 0xbf, 0x11, 0xfe, 0xd6, 0x9a, 0xa0, 0xd8, 0x31, + 0x05, 0xad, 0xac, 0xdd, 0x4e, 0x5f, 0x04, 0xa6, 0x24, 0x24, 0x02, 0x3c, 0x9b, + 0x9e, 0x33, 0xc4, 0xfb, 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, 0xf2, 0x65, 0xc5, + 0x37, 0xd5, 0x1c, 0x65, 0x51, 0xf4, 0x61, 0x7b, 0x91, 0x5d, 0x21, 0x99, 0x18, + 0x39, 0xc3, 0xd0, 0xd3, 0x63, 0x93, 0xd6, 0x46, 0xe0, 0xa8, 0xa4, 0x15, 0x09, + 0x21, 0x7d, 0x0e, 0x7d, 0x2c, 0xa1, 0xa0, 0xa0, 0xd6, 0x77, 0xa3, 0xea, 0xca, + 0x23, 0xed, 0xeb, 0x07, 0xb7, 0x4e, 0x65, 0x2a, 0x0b, 0xc5, 0x0c, 0x6c, 0x08, + 0x3a, 0x55, 0xd6, 0xc7, 0x30, 0x6e, 0x74, 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, + 0xa2, 0x48, 0x73, 0x68, 0x18, 0x67, 0xa7, 0x89, 0x3d, 0x77, 0xcb, 0x7f, 0x29, + 0xb8, 0xc8, 0x47, 0xc5, 0x83, 0xf2, 0xd0, 0x71, 0xa6, 0x86, 0x61, 0x6e, 0x20, + 0x67, 0x19, 0xf7, 0x61, 0xae, 0x39, 0xc1, 0x10, 0x44, 0x2e, 0x06, 0x16, 0x3d, + 0x2b, 0x84, 0x59, 0x03, 0x60, 0x69, 0x5d, 0x4e, 0x19, 0x84, 0x9e, 0x63, 0x4f, + 0x24, 0xd9, 0xad, 0x39, 0x6c, 0x19, 0xff, 0x83, 0xce, 0x74, 0xf4, 0x6e, 0x64, + 0x5f, 0x93, 0x2e, 0x14, 0x1a, 0x41, 0x19, 0x59, 0x36, 0xc8, 0x5d, 0x51, 0x44, + 0x14, 0xf1, 0x12, 0xe6, 0x0b, 0x1a, 0x25, 0x37, 0xc3, 0x8d, 0x6d, 0xc6, 0xc4, + 0x63, 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, 0x63, 0x12, 0x3e, + 0x3e, 0x6d, 0xd3, 0x6e, 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, 0xee, 0xca, 0x2a, + 0xa0, 0x9a, 0x32, 0x98, 0xa3, 0x9d, 0x83, 0x85, 0x9e, 0xfc, 0x9b, 0x2b, 0x69, + 0xcf, 0x9a, 0x7d, 0xee, 0x08, 0xa9, 0x8e, 0x4b, 0xe5, 0x58, 0xac, 0x79, 0x12, + 0xfd, 0xcb, 0x42, 0x20, 0x90, 0x75, 0x42, 0x02, 0x60, 0xf7, 0xca, 0xd0, 0xf2, + 0xc0, 0x1f, 0x2a, 0xfe, 0x33, 0x07, 0x3f, 0x26, 0x24, 0x9d, 0x94, 0x4f, 0x7a, + 0x50, 0xdd, 0x84, 0x83, 0x9b, 0xc3, 0xea, 0x7f, 0xde, 0xe4, 0xed, 0x71, 0x44, + 0x9c, 0xf0, 0x75, 0x33, 0xd2, 0x6e, 0x1e, 0x27, 0xa3, 0xef, 0xb0, 0x32, 0xc3, + 0xa3, 0xb3, 0x4b, 0xd3, 0x09, 0x26, 0x22, 0xd2, 0x06, 0x2a, 0xe5, 0x36, 0xef, + 0x51, 0x49, 0xc4, 0x9b, 0x5b, 0xc9, 0x47, 0x5e, 0xaf, 0xab, 0x6e, 0x67, 0x57, + 0x61, 0x00, 0x8b, 0x0d, 0xad, 0xde, 0xec, 0xaa, 0x60, 0x44, 0x70, 0xbb, 0xe0, + 0xfa, 0xda, 0x25, 0x5d, 0x29, 0x0e, 0x92, 0xb1, 0x90, 0xc2, 0xc2, 0xd8, 0xc2, + 0xde, 0xe5, 0x45, 0x5d, 0x1f, 0xa9, 0xa9, 0xf3, 0xdb, 0x77, 0x79, 0xb5, 0x84, + 0x64, 0x34, 0x64, 0xaa, 0x80, 0x14, 0xba, 0x66, 0x99, 0x4d, 0xe2, 0x55, 0x17, + 0xf8, 0x39, 0x80, 0xe6, 0x6e, 0xe4, 0xf6, 0x23, 0x14, 0xae, 0x6d, 0xbe, 0xf4, + 0x52, 0xd5, 0xd3, 0x8b, 0x0a, 0x16, 0xf3, 0x99, 0x1f, 0x36, 0xd8, 0xa8, 0xb3, + 0x9d, 0xdc, 0x0d, 0x55, 0x95, 0xee, 0xd9, 0x87, 0x62, 0x87, 0x8c, 0xdf, 0x3f, + 0x4a, 0x2e, 0xdc, 0x5c, 0xda, 0x77, 0xd5, 0xfe, 0x4f, 0xaf, 0x63, 0xa1, 0x5f, + 0x56, 0x8a, 0x54, 0x0d, 0xa5, 0x7d, 0xd9, 0xbe, 0xb6, 0xfb, 0x1a, 0x97, 0x7c, + 0xcb, 0x91, 0xb4, 0xd7, 0x9c, 0xb3, 0x9b, 0x28, 0x91, 0x1a, 0x29, 0xe7, 0xbf, + 0x02, 0x8a, 0xc6, 0x10, 0x37, 0x96, 0xdf, 0xb6, 0xb2, 0x09, 0x67, 0x23, 0x9a, + 0xd3, 0x73, 0xc3, 0xc5, 0x1d, 0x39, 0x27, 0xf2, 0x38, 0x00, 0x19, 0xfb, 0xdb, + 0xdd, 0xe5, 0x96, 0x97, 0x32, 0x26, 0x36, 0xa0, 0xae, 0xa1, 0xfd, 0x22, 0xc5, + 0x88, 0x57, 0x5c, 0x0f, 0x89, 0x64, 0x9e, 0x9f, 0x3e, 0xd3, 0x93, 0xcc, 0xca, + 0xbb, 0xa2, 0xe7, 0x94, 0xb7, 0xc4, 0xb2, 0xda, 0xf8, 0xdd, 0xeb, 0x7f, 0x45, + 0x27, 0x0d, 0x3f, 0x95, 0xed, 0xba, 0x5b, 0x0d, 0xe7, 0xa3, 0x28, 0x19, 0x23, + 0x3b, 0x0c, 0x55, 0x35, 0x01, 0x14, 0xcc, 0xbc, 0x48, 0x15, 0x86, 0xfd, 0x05, + 0x42, 0xc3, 0xa0, 0xaf, 0xdd, 0x24, 0x52, 0x28, 0xac, 0x74, 0x74, 0xb3, 0xf5, + 0x49, 0xb1, 0x03, 0xa0, 0x06, 0x2d, 0xf1, 0xbd, 0xae, 0x35, 0xbe, 0x3f, 0x6a, + 0x92, 0xda, 0xd6, 0x17, 0x7c, 0xb8, 0x48, 0xee, 0xe2, 0x4c, 0x85, 0x20, 0xa3, + 0x30, 0xbd, 0xfb, 0x26, 0xd7, 0x5f, 0xe7, 0xb4, 0xb3, 0x65, 0xd0, 0x94, 0x45, + 0x12, 0x22, 0xea, 0xe1, 0x8b, 0x98, 0x49, 0xf5, 0xaa, 0x17, 0xe5, 0x2c, 0xa5, + 0xc7, 0x1e, 0x84, 0x40, 0x75, 0xcd, 0x44, 0x03, 0x8e, 0x5c, 0x89, 0x4c, 0xa2, + 0xcd, 0x19, 0x76, 0x5c, 0xf8, 0xf6, 0x1b, 0x61, 0x9a, 0xf0, 0x24, 0x56, 0xae, + 0x69, 0x59, 0x62, 0xfe, 0x5e, 0x93, 0x1a, 0x63, 0xb5, 0xc7, 0x90, 0x52, 0xec, + 0xd3, 0x33, 0xe1, 0x84, 0x12, 0xdb, 0x91, 0xe1, 0x5f, 0x7c, 0xbc, 0x70, 0xb4, + 0xcd, 0x7e, 0x8e, 0x3c, 0x95, 0x1f, 0x35, 0x85, 0x72, 0xe3, 0x77, 0x67, 0xe7, + 0xd5, 0x27, 0x04, 0xa6, 0x72, 0x1b, 0x30, 0xef, 0xc4, 0x10, 0x17, 0xae, 0x4d, + 0x23, 0x15, 0x58, 0xc5, 0xc8, 0x2c, 0xc7, 0xdd, 0x7e, 0x33, 0x56, 0xc0, 0x9d, + 0xc2, 0x49, 0x06, 0xf0, 0x43, 0x8d, 0xfc, 0xc3, 0x00, 0x85, 0x6a, 0xc2, 0xce, + 0xd8, 0xf7, 0x7f, 0xa8, 0x01, 0x57, 0x36, 0xc6, 0x61, 0xe8, 0x02, 0x48, 0xae, + 0xeb, 0x77, 0x48, 0x74, 0xaa, 0x79, 0xd2, 0x90, 0xb8, 0xf5, 0x02, 0x7a, 0x0a, + 0x50, 0x95, 0x37, 0xfc, 0x7c, 0x68, 0x9b, 0x7a, 0xd8, 0x61, 0x16, 0xcf, 0xec, + 0x26, 0x47, 0xcc, 0xaa, 0xe1, 0xc7, 0x4b, 0x41, 0x6f, 0x3e, 0x6a, 0xe8, 0xf7, + 0xcc, 0x60, 0xea, 0xaf, 0x7b, 0x6a, 0x59, 0x0d, 0x51, 0x54, 0x41, 0x38, 0xe1, + 0x73, 0x29, 0x45, 0x60, 0x3a, 0x53, 0x46, 0x2c, 0x60, 0xe1, 0xf6, 0xcb, 0x0c, + 0x9c, 0xa0, 0x39, 0x0c, 0x48, 0x82, 0x24, 0xc3, 0x13, 0x26, 0x9f, 0xcd, 0x59, + 0xfc, 0xb6, 0x11, 0xfb, 0x2d, 0x9b, 0x4c, 0x8f, 0xa6, 0x01, 0xbb, 0x1c, 0xb8, + 0xd0, 0x7d, 0x79, 0x7b, 0xf5, 0xde, 0x52, 0xbc, 0xee, 0xb0, 0x23, 0x01, 0xc8, + 0x96, 0x2a, 0xc1, 0xfc, 0x04, 0x91, 0xdc, 0x81, 0xaf, 0xfd, 0x6c, 0x1e, 0xbf, + 0x89, 0xa1, 0x3d, 0x6f, 0x29, 0x0e, 0xda, 0x5d, 0x5c, 0xef, 0x38, 0x22, 0x15, + 0xc5, 0xe9, 0x51, 0xd7, 0x13, 0x05, 0xef, 0x33, 0xd9, 0x73, 0x71, 0x26, 0xd0, + 0xe6, 0x62, 0x90, 0x5f, 0x12, 0x50, 0x92, 0x6f, 0x6a, 0x22, 0x99, 0x90, 0xe3, + 0x8f, 0x69, 0xad, 0x9a, 0x91, 0x92, 0xb3, 0x02, 0xf2, 0x6b, 0xdd, 0xa4, 0x65, + 0xd9, 0x0b, 0x94, 0xb1, 0x2c, 0x57, 0xfa, 0x3f, 0xd6, 0x93, 0x00, 0x83, 0xf1, + 0x84, 0x43, 0x8d, 0x8a, 0x88, 0x9d, 0x3f, 0x5e, 0xce, 0xa2, 0xc6, 0xd2, 0x3d, + 0x67, 0x36, 0xf2, 0xa0, 0xf1, 0x8e, 0x26, 0xf4, 0xfa, 0x45, 0xd1, 0xbe, 0x8f, + 0x3d, 0xc4, 0xa7, 0x07, 0x13, 0x7e, 0x95, 0xd2, 0xad, 0x59, 0x4f, 0x6c, 0x03, + 0xd2, 0x49, 0x23, 0x06, 0x7a, 0xe4, 0x7f, 0xd6, 0x42, 0x5e, 0xfb, 0x9c, 0x1d, + 0x50, 0x4e, 0x6f, 0xd5, 0x57, 0x53, 0x40, 0x94, 0x56, 0x01, 0xfe, 0x80, 0x6f, + 0x57, 0x56, 0xac, 0xb5, 0x62, 0xf1, 0x3c, 0x0c, 0xa1, 0xd8, 0x03, 0xa1, 0x95, + 0xc2, 0xeb, 0xb2, 0xef, 0x02, 0xac, 0x33, 0xe6, 0xa8, 0x8d, 0xea, 0x07, 0x5b, + 0xa9, 0x96, 0xd3, 0xc3, 0x36, 0x64, 0x8e, 0x86, 0x94, 0xd3, 0xa1, 0x9d, 0x3d, + 0xca, 0x53, 0x1b, 0xeb, 0x50, 0xd4, 0x32, 0x7c, 0x5c, 0x0c, 0x23, 0xcb, 0x7c, + 0xfd, 0xb0, 0x8c, 0xa7, 0xcf, 0x2c, 0xac, 0x6b, 0xc1, 0x39, 0xd0, 0x74, 0x14, + 0x73, 0xd3, 0x76, 0x02, 0x9c, 0xb4, 0xab, 0x6b, 0xf0, 0x54, 0x55, 0x7c, 0xe2, + 0x94, 0xc7, 0x28, 0xa4, 0x68, 0x7d, 0x57, 0xec, 0x89, 0x09, 0xff, 0x51, 0xa4, + 0xd0, 0x2f, 0x9d, 0xcd, 0x11, 0x19, 0x3d, 0x7d, 0x1c, 0x9f, 0xda, 0xe6, 0xa1, + 0x73, 0x96, 0xa1, 0xbf, 0x57, 0xa9, 0x94, 0x93, 0x4f, 0x5e, 0x7a, 0x59, 0xf0, + 0x45, 0xde, 0xbe, 0xaf, 0xf6, 0x2e, 0xf3, 0x26, 0xb9, 0x47, 0xf2, 0xa8, 0xb4, + 0x95, 0x55, 0xe4, 0xd9, 0x9b, 0x3b, 0xf5, 0xc8, 0x1f, 0xf9, 0xfe, 0x31, 0x4e, + 0x04, 0x7a, 0xf1, 0x52, 0x50, 0x8f, 0x57, 0x01, 0x5c, 0xa4, 0x02, 0xc6, 0x7d, + 0x92, 0x5c, 0x99, 0xac, 0xea, 0x3e, 0xe8, 0xcc, 0x4b, 0x00, 0x8c, 0x5c, 0xb4, + 0x39, 0x66, 0xe7, 0x14, 0xef, 0x48, 0x0f, 0xd0, 0x5e, 0x07, 0xc7, 0xb2, 0xdd, + 0xa9, 0xaa, 0x39, 0x66, 0x11, 0x3e, 0xaa, 0x29, 0x3d, 0x3f, 0x62, 0x2b, 0x30, + 0x9d, 0x64, 0x80, 0x3c, 0xe1, 0xe6, 0x37, 0x8b, 0x6a, 0xac, 0x4f, 0xab, 0x52, + 0x7c, 0x43, 0xcd, 0x45, 0xed, 0x0a, 0x3c, 0x1a, 0x4b, 0x9f, 0xb1, 0x8d, 0xcc, + 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, 0x63, 0x9c, 0xda, 0x00, 0x75, 0xa2, + 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, 0x99, 0x49, 0x5b, 0xd9, 0x13, 0x3d, + 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, 0xba, 0x92, 0xc7, 0xb6, 0x06, 0xa5, + 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, 0x59, 0x6f, 0x27, 0x88, 0xf3, 0xc8, + 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, 0xf5, 0xdd, 0x23, 0xdf, 0xdb, 0xac, + 0x13, 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, 0xfe, 0xd2, 0x29, 0x2c, 0x44, 0xf7, + 0x08, 0x34, 0xcf, 0x96, 0xc0, 0x5d, 0x58, 0x82, 0x7e, 0x69, 0xbf, 0xc2, 0xe6, + 0x96, 0xfa, 0x08, 0x74, 0x02, 0x5e, 0x2c, 0x3d, 0x19, 0xb0, 0x72, 0x02, 0x00, + 0x31, 0x51, 0x3b, 0x19, 0x62, 0xec, 0x54, 0x08, 0x56, 0xcb, 0x18, 0x93, 0x87, + 0xcf, 0xbf, 0xcc, 0x0f, 0x7c, 0x68, 0x22, 0x3c, 0xba, 0x47, 0xfb, 0x0c, 0x9b, + 0x48, 0x6e, 0x4d, 0x99, 0x17, 0x19, 0x61, 0xf7, 0x67, 0x5a, 0x8b, 0x46, 0x32, + 0x8a, 0x3b, 0xc1, 0x09, 0xbf, 0x07, 0xc6, 0x6d, 0x5e, 0xde, 0x77, 0x1c, 0xc4, + 0xc7, 0x4c, 0xe8, 0x03, 0x33, 0x82, 0x91, 0x91, 0xee, 0xdc, 0x49, 0x35, 0x08, + 0xa6, 0x44, 0x53, 0x0a, 0x61, 0x44, 0xf2, 0x2d, 0xcf, 0x97, 0x52, 0x5a, 0x4c, + 0xdc, 0xa1, 0xad, 0x71, 0x07, 0x3b, 0x08, 0x0b, 0x73, 0xea, 0x45, 0x49, 0xf5, + 0x40, 0x1b, 0xff, 0x43, 0x18, 0x26, 0x8e, 0x6a, 0xd6, 0x37, 0x36, 0x31, 0x57, + 0xa1, 0x9a, 0x53, 0xf1, 0x23, 0xa0, 0xb0, 0xe1, 0x6d, 0x0b, 0x77, 0xf0, 0x20, + 0x28, 0xda, 0x46, 0x41, 0x00, 0xfd, 0xe7, 0x6d, 0x83, 0xdd, 0x0b, 0xb2, 0x24, + 0xed, 0xe2, 0x80, 0x42, 0x29, 0x0a, 0xb2, 0xbc, 0xe8, 0x54, 0x13, 0x9b, 0xca, + 0x36, 0xe5, 0xb2, 0xcb, 0xdf, 0xdd, 0x91, 0x06, 0xfc, 0x9f, 0x18, 0xb9, 0x55, + 0x53, 0xe4, 0xfe, 0x54, 0x8b, 0x3e, 0x4a, 0x87, 0xda, 0xa7, 0xef, 0x1e, 0xe3, + 0x8e, 0xe9, 0xb4, 0xe0, 0xdc, 0xd6, 0x3e, 0x80, 0xec, 0xbb, 0xa7, 0xe7, 0x4b, + 0x3e, 0x3b, 0xa3, 0xd0, 0xe8, 0xa6, 0x39, 0x2a, 0x06, 0x2b, 0x8e, 0x06, 0x5a, + 0x54, 0x41, 0x4c, 0x3c, 0x5b, 0xd9, 0xce, 0x4e, 0x85, 0xca, 0x62, 0x93, 0xe8, + 0x84, 0xd1, 0x45, 0x6a, 0x4c, 0x31, 0xe1, 0x65, 0x4f, 0xf2, 0x3e, 0xf2, 0x6e, + 0x2e, 0x14, 0xe1, 0x29, 0x8a, 0x49, 0xc0, 0x72, 0xe2, 0x2f, 0x9d, 0x98, 0xbb, + 0x0f, 0x9b, 0x03, 0xbd, 0x5f, 0xd0, 0x13, 0xfc, 0xef, 0x3e, 0xd6, 0xa4, 0x9a, + 0xeb, 0x98, 0x72, 0x02, 0x54, 0x08, 0x7e, 0xf7, 0x28, 0xe3, 0x19, 0xdb, 0x96, + 0x4c, 0xea, 0x54, 0xd0, 0xec, 0xa7, 0x6c, 0xfe, 0x56, 0x28, 0x8b, 0x6f, 0x64, + 0xf4, 0xa1, 0x9d, 0xf3, 0x7e, 0xd1, 0x7b, 0xe8, 0x12, 0xe8, 0x2d, 0x7d, 0x40, + 0x53, 0x6f, 0x37, 0x8a, 0x93, 0x1c, 0x82, 0xcf, 0x71, 0x11, 0xd6, 0xe1, 0x17, + 0x80, 0x93, 0x63, 0x80, 0x9b, 0x6b, 0xe3, 0x78, 0xf8, 0xfd, 0x5a, 0x1c, 0xe2, + 0x2a, 0x8d, 0x3c, 0x45, 0x47, 0xab, 0xd9, 0x59, 0x83, 0x0a, 0xaa, 0xf0, 0x13, + 0xde, 0x2b, 0xf2, 0x7a, 0x1f, 0xba, 0xe8, 0xb1, 0x6f, 0x38, 0xd1, 0x34, 0x9b, + 0x60, 0x31, 0xce, 0x02, 0x34, 0x8a, 0x24, 0x05, 0x79, 0xc0, 0xe5, 0x35, 0x79, + 0x04, 0x58, 0xb4, 0x96, 0x3b, 0x61, 0x69, 0x33, 0xd1, 0x00, 0x5c, 0x1d, 0x03, + 0xd4, 0xc9, 0x51, 0x80, 0xc8, 0xd1, 0x7a, 0x55, 0xef, 0x4b, 0xee, 0x46, 0x56, + 0x68, 0xb2, 0x0e, 0xa4, 0x11, 0x8c, 0xa5, 0x69, 0x2e, ], txid: [ - 0x39, 0x8d, 0xb1, 0x2e, 0x1b, 0x6e, 0x4c, 0xd2, 0xe6, 0xce, 0xee, 0x3c, 0x6e, - 0x02, 0x09, 0xbf, 0xa1, 0x09, 0x9f, 0x64, 0xec, 0x07, 0x69, 0x99, 0x77, 0xd4, - 0xfa, 0xf8, 0xb8, 0xa0, 0x5d, 0x56, + 0x67, 0x62, 0xf9, 0xc5, 0x72, 0x30, 0xa5, 0x8d, 0xca, 0x6d, 0x44, 0x45, 0x47, + 0xb2, 0xf6, 0xe0, 0xe2, 0x13, 0x49, 0x2d, 0xbb, 0x40, 0x56, 0x4a, 0xe1, 0x01, + 0xdf, 0x13, 0x94, 0x1c, 0x61, 0x52, ], auth_digest: [ - 0xd3, 0x5f, 0xea, 0x1a, 0x83, 0x57, 0x72, 0x49, 0x39, 0x12, 0x47, 0x0b, 0x73, - 0x84, 0xb5, 0xdd, 0xc4, 0xe0, 0xa4, 0xda, 0x0e, 0xa7, 0x52, 0xc2, 0x56, 0xd9, - 0xcb, 0xab, 0x9f, 0x03, 0x00, 0xd0, + 0x1c, 0x3e, 0xc5, 0x10, 0x4d, 0x96, 0xb6, 0x68, 0x37, 0xb6, 0xe3, 0x81, 0xf7, + 0x02, 0xc7, 0xe4, 0x8a, 0x09, 0x7a, 0xaf, 0x12, 0x5c, 0x9b, 0x82, 0x89, 0x5b, + 0x57, 0x8b, 0x92, 0xea, 0xfd, 0x14, ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, + amounts: vec![787459282010655, 1685382316228727, 1715663111103469], + script_pubkeys: vec![ + vec![0x65, 0x6a], + vec![0x65, 0x00, 0x51, 0x52, 0x6a], + vec![0x52, 0x6a, 0x51, 0x53, 0x00, 0x51, 0x52, 0x51, 0x6a], + ], + transparent_input: Some(2), sighash_shielded: [ - 0x39, 0x8d, 0xb1, 0x2e, 0x1b, 0x6e, 0x4c, 0xd2, 0xe6, 0xce, 0xee, 0x3c, 0x6e, - 0x02, 0x09, 0xbf, 0xa1, 0x09, 0x9f, 0x64, 0xec, 0x07, 0x69, 0x99, 0x77, 0xd4, - 0xfa, 0xf8, 0xb8, 0xa0, 0x5d, 0x56, + 0xa7, 0xe2, 0x72, 0xca, 0x04, 0x40, 0x87, 0xc4, 0xd3, 0x56, 0x61, 0x88, 0x8b, + 0x34, 0x8c, 0x57, 0xe9, 0x8b, 0x79, 0x81, 0xa1, 0x6f, 0xe5, 0xe8, 0x81, 0x81, + 0xc8, 0xe1, 0x5a, 0xae, 0x58, 0x1c, ], - sighash_all: None, - sighash_none: None, + sighash_all: Some([ + 0xda, 0x3e, 0xdd, 0x81, 0xf4, 0xfa, 0x79, 0xe4, 0x7f, 0xb6, 0x76, 0xca, 0x0b, + 0x56, 0xb1, 0x29, 0x9f, 0xf5, 0xb5, 0xec, 0x58, 0x23, 0xec, 0x87, 0x1e, 0x3d, + 0x7c, 0x12, 0x88, 0x4f, 0xe5, 0x77, + ]), + sighash_none: Some([ + 0xdd, 0xe8, 0x6c, 0x69, 0x61, 0xd0, 0x2d, 0x65, 0x51, 0x03, 0xc9, 0xd1, 0x9c, + 0x89, 0x62, 0x3f, 0xde, 0x4e, 0xc6, 0xb5, 0x28, 0x2b, 0xb8, 0xfb, 0xc7, 0xe8, + 0xba, 0x46, 0x91, 0x1e, 0x9a, 0x3e, + ]), sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, + sighash_all_anyone: Some([ + 0x41, 0x15, 0x08, 0xbb, 0x7b, 0x21, 0x94, 0xf6, 0x17, 0xad, 0xc6, 0xc7, 0x82, + 0xbb, 0x77, 0x20, 0xc8, 0xdf, 0xc2, 0x5f, 0xef, 0x3b, 0xc4, 0x8e, 0xc7, 0x31, + 0xa2, 0x4a, 0xa2, 0xc1, 0xc1, 0x05, + ]), + sighash_none_anyone: Some([ + 0xb4, 0x25, 0x3a, 0x25, 0xbf, 0x7e, 0xe6, 0xcd, 0x20, 0x9c, 0x5f, 0x07, 0x66, + 0x6f, 0xea, 0x85, 0x3e, 0x4b, 0x80, 0x08, 0x62, 0xa2, 0x9a, 0xa5, 0xa8, 0x96, + 0x1f, 0x95, 0x32, 0x03, 0xa3, 0xb0, + ]), sighash_single_anyone: None, }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x67, - 0x57, 0x64, 0x3f, 0xc0, 0x72, 0xca, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0xc0, 0x72, 0xca, 0x10, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x81, + 0x83, 0x6c, 0x3b, 0xe9, 0x9a, 0x08, 0x17, 0x03, 0xa4, 0x60, 0xe9, 0x68, 0xaa, + 0x71, 0x09, 0x87, 0x0b, 0xbe, 0xd1, 0x7d, 0xf5, 0xf8, 0x88, 0xc8, 0xca, 0x14, + 0x67, 0xae, 0x17, 0xdb, 0xbc, 0xde, 0x31, 0xc1, 0x10, 0x5c, 0xb5, 0xbd, 0xa8, + 0x8a, 0xc6, 0xc6, 0x27, 0x00, 0x04, 0x52, 0xac, 0x52, 0xac, 0x0f, 0xfe, 0x81, + 0xec, 0x58, 0xbf, 0x1e, 0x6d, 0x1b, 0xb7, 0xaa, 0xad, 0xa4, 0x1f, 0xba, 0x0b, + 0xb5, 0x88, 0x77, 0x8a, 0x7f, 0x65, 0x20, 0x2a, 0xd8, 0x11, 0xea, 0x73, 0xd2, + 0x6c, 0x74, 0x55, 0x03, 0x95, 0xaf, 0xf7, 0x53, 0x25, 0x10, 0x7c, 0x09, 0x6a, + 0x52, 0x51, 0xac, 0xac, 0x00, 0x65, 0x00, 0x51, 0xa2, 0xe7, 0x42, 0x47, 0x19, + 0xa3, 0xd1, 0x85, 0xb7, 0xe0, 0xa4, 0x3a, 0x47, 0x2e, 0x29, 0x8a, 0xc0, 0xaf, + 0xdc, 0x52, 0x87, 0xd7, 0xad, 0x12, 0x4c, 0xd9, 0x40, 0x5a, 0x62, 0xcd, 0x1c, + 0xa0, 0x8b, 0x28, 0x2e, 0xfe, 0xf7, 0xf9, 0x28, 0xdf, 0x08, 0x52, 0x52, 0x52, + 0x51, 0xac, 0x53, 0x53, 0xac, 0xea, 0xa5, 0xff, 0x12, 0x00, 0x00, 0x00, 0x00, ], txid: [ - 0xb6, 0x58, 0x22, 0x02, 0xbb, 0xf3, 0xb8, 0xdd, 0x13, 0xe5, 0x68, 0x1c, 0x33, - 0x42, 0x98, 0x3c, 0x1f, 0xcd, 0x8b, 0x1a, 0xcf, 0xe5, 0xd6, 0x94, 0x9f, 0xbe, - 0xb8, 0x09, 0xb7, 0xd2, 0xd6, 0xaa, + 0x22, 0x1d, 0x40, 0x59, 0x7b, 0x56, 0x3f, 0x20, 0x64, 0x58, 0xf9, 0x73, 0x6b, + 0x85, 0x49, 0x23, 0x7c, 0x55, 0x54, 0x24, 0x2c, 0x41, 0x90, 0x22, 0x43, 0x5a, + 0x33, 0x50, 0xa0, 0x70, 0x8e, 0xa1, ], auth_digest: [ - 0xc1, 0xc4, 0xed, 0x29, 0x92, 0xe4, 0x54, 0x80, 0xe8, 0x8a, 0xee, 0x5f, 0xb8, - 0x61, 0x88, 0x0a, 0x33, 0x86, 0x6f, 0x88, 0x7c, 0x14, 0xd4, 0x60, 0x5b, 0x5d, - 0xa4, 0xb1, 0xe0, 0x09, 0x62, 0x1b, + 0x6a, 0x75, 0xe4, 0x93, 0x24, 0xe8, 0x53, 0x20, 0xfe, 0x2f, 0x22, 0x46, 0x66, + 0x18, 0xb7, 0x0b, 0x4b, 0xbe, 0xfe, 0xa2, 0x48, 0xe5, 0xd3, 0x67, 0x3f, 0x18, + 0xf2, 0xe4, 0x87, 0xa2, 0xb2, 0x0a, ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, + amounts: vec![1076763594431866, 316847576141144, 1780844721475339], + script_pubkeys: vec![ + vec![0x00, 0x65, 0x51, 0xac, 0x65, 0x63, 0x00, 0x53], + vec![0x63, 0x52, 0x00, 0x53], + vec![0xac, 0xac, 0x00, 0x65, 0x6a, 0x63, 0x51], + ], + transparent_input: Some(2), sighash_shielded: [ - 0xb6, 0x58, 0x22, 0x02, 0xbb, 0xf3, 0xb8, 0xdd, 0x13, 0xe5, 0x68, 0x1c, 0x33, - 0x42, 0x98, 0x3c, 0x1f, 0xcd, 0x8b, 0x1a, 0xcf, 0xe5, 0xd6, 0x94, 0x9f, 0xbe, - 0xb8, 0x09, 0xb7, 0xd2, 0xd6, 0xaa, + 0xb5, 0xa1, 0x8f, 0xf6, 0x57, 0x83, 0x9c, 0x69, 0x79, 0xc2, 0xf2, 0xaf, 0xae, + 0xea, 0xf2, 0xf5, 0xc1, 0xcf, 0x43, 0xdf, 0x92, 0xf4, 0xa6, 0x57, 0x55, 0xfa, + 0x42, 0xae, 0x2b, 0x77, 0x06, 0xab, ], - sighash_all: None, - sighash_none: None, + sighash_all: Some([ + 0x9d, 0x80, 0x2c, 0x8a, 0xce, 0x5b, 0xc5, 0xf5, 0xb0, 0x3c, 0x7d, 0xac, 0x8a, + 0x29, 0xef, 0x33, 0x42, 0x4d, 0xef, 0x82, 0xcb, 0xc4, 0xfc, 0x84, 0x00, 0xc0, + 0xbb, 0x9d, 0x5e, 0x08, 0x41, 0x47, + ]), + sighash_none: Some([ + 0xae, 0x2d, 0xb1, 0x4c, 0x57, 0x78, 0x1f, 0xb5, 0x5c, 0x2f, 0x66, 0x58, 0xf6, + 0x14, 0x18, 0x83, 0xf7, 0xeb, 0xe0, 0xd3, 0x9f, 0x43, 0x9c, 0xf5, 0x66, 0xdc, + 0x55, 0x0f, 0xb9, 0xda, 0x71, 0x68, + ]), sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, + sighash_all_anyone: Some([ + 0xe7, 0x11, 0x83, 0x4b, 0x5a, 0x4e, 0xb8, 0x4a, 0xa2, 0x98, 0x6a, 0x53, 0xc2, + 0xb2, 0xba, 0x2f, 0xd6, 0x37, 0x4e, 0x66, 0x6f, 0x03, 0x11, 0xbf, 0xca, 0x8c, + 0xbc, 0xee, 0xfd, 0xde, 0x1e, 0x38, + ]), + sighash_none_anyone: Some([ + 0x5c, 0x3a, 0x08, 0x39, 0xfd, 0xc7, 0x34, 0x17, 0xae, 0x7d, 0x5f, 0x15, 0xdc, + 0xee, 0xd6, 0xc1, 0xa4, 0xcb, 0xe8, 0x0c, 0x6c, 0x25, 0xce, 0x03, 0x86, 0xfe, + 0xf7, 0xc0, 0x58, 0xa8, 0xb9, 0x43, + ]), sighash_single_anyone: None, }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x57, + 0xb8, 0x57, 0x51, 0x23, 0x5d, 0xbc, 0x10, 0x02, 0x52, 0xe4, 0x1e, 0x00, 0x29, + 0x31, 0xb4, 0x57, 0x46, 0x19, 0x8e, 0x5d, 0xd9, 0x57, 0x1a, 0x56, 0xa7, 0xe0, + 0xd4, 0x23, 0xff, 0x27, 0x98, 0x9d, 0x3e, 0xb4, 0x17, 0xec, 0xd3, 0xc3, 0x09, + 0x3f, 0xb8, 0x2c, 0x56, 0x58, 0x00, 0x96, 0x24, 0xc5, 0x32, 0x19, 0xa6, 0x0c, + 0xd0, 0xa8, 0xc4, 0xda, 0x36, 0x7e, 0x29, 0xa7, 0x17, 0x79, 0xa7, 0x30, 0x32, + 0x98, 0x5a, 0x3d, 0x1f, 0xd0, 0x3d, 0xd4, 0xd0, 0x6e, 0x05, 0x56, 0x6f, 0x3b, + 0x84, 0x36, 0x7c, 0xf0, 0xfa, 0xee, 0x9b, 0x09, 0x63, 0x52, 0x52, 0x00, 0x52, + 0x6a, 0x53, 0xac, 0xac, 0x5d, 0x82, 0xd0, 0xa6, 0x02, 0xef, 0xab, 0xec, 0xef, + 0x1b, 0xc7, 0x01, 0x00, 0x02, 0x00, 0x63, 0x97, 0x76, 0x63, 0x55, 0x0e, 0x76, + 0x06, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x03, 0x09, 0xa8, 0x9a, 0x5f, 0x40, 0xb3, + 0x73, 0x03, 0xe1, 0x81, 0x6d, 0xf1, 0x3a, 0x9d, 0x7e, 0x20, 0xdb, 0x15, 0x9c, + 0x9f, 0x42, 0x77, 0x3a, 0x2f, 0xb0, 0x23, 0xd9, 0x5a, 0xbb, 0x1e, 0x1c, 0xbe, + 0x81, 0xc0, 0x92, 0xed, 0xb2, 0x30, 0xfa, 0x38, 0xea, 0x13, 0xc5, 0xde, 0x7c, + 0x0e, 0x50, 0x31, 0xa1, 0xe8, 0x4d, 0xae, 0xc3, 0xeb, 0xe6, 0x2d, 0x5f, 0x6c, + 0x4a, 0xbe, 0x5c, 0xe9, 0x0a, 0x3f, 0xcd, 0xc3, 0xa6, 0x50, 0x0c, 0x01, 0x1c, + 0x8a, 0x0f, 0xc0, 0x3d, 0xb6, 0xcc, 0x0c, 0x56, 0xcf, 0xd6, 0x54, 0x3a, 0xed, + 0x33, 0xac, 0x6b, 0x7c, 0x4d, 0xb7, 0x83, 0xde, 0xe6, 0xb3, 0x29, 0x27, 0x7f, + 0x96, 0xc7, 0xe9, 0x0b, 0xb9, 0xb4, 0x73, 0x02, 0x46, 0x5f, 0x37, 0x5c, 0x1d, + 0x3c, 0xa4, 0x8e, 0x54, 0xfa, 0xca, 0xe0, 0xf9, 0xc2, 0xdd, 0x4d, 0x64, 0xd9, + 0x04, 0x61, 0x52, 0xb4, 0x36, 0x34, 0x22, 0x7f, 0xbe, 0x32, 0xf6, 0x63, 0xbd, + 0x1d, 0x90, 0xbb, 0xfa, 0x22, 0xf0, 0xe9, 0xc7, 0x93, 0x47, 0x71, 0x93, 0xdd, + 0xcb, 0x40, 0x18, 0x1a, 0x67, 0x9e, 0xae, 0x78, 0x11, 0x32, 0x32, 0x31, 0xf0, + 0x1f, 0x55, 0xc7, 0xad, 0x04, 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, 0x3d, 0x0a, 0x2b, + 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, 0x5b, 0x8c, 0x94, 0xca, 0x80, 0xbb, + 0x0a, 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, 0x83, 0x04, 0xae, 0x25, 0x15, + 0xd5, 0xf7, 0x69, 0x9d, 0x4a, 0xbe, 0xe5, 0xc2, 0x0b, 0xe6, 0x09, 0xd8, 0x73, + 0x51, 0x10, 0x12, 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, 0xfb, 0x63, 0x4c, + 0xff, 0x26, 0x58, 0xba, 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, 0x5e, 0xce, 0xfb, + 0x30, 0x15, 0xee, 0x3f, 0x03, 0xca, 0x52, 0xa1, 0x77, 0xf2, 0x61, 0xec, 0xdc, + 0x26, 0xbc, 0x08, 0x9d, 0x34, 0xc6, 0x40, 0x48, 0x46, 0xe9, 0xc6, 0x47, 0xfc, + 0xfe, 0x98, 0xcc, 0x6a, 0xcd, 0xbb, 0x46, 0x4f, 0x64, 0x27, 0x8a, 0xd8, 0xce, + 0x9d, 0x1a, 0xe0, 0xd4, 0x15, 0xbc, 0x0c, 0x05, 0x24, 0x5f, 0xdd, 0xaf, 0x4e, + 0xbc, 0x8d, 0xc7, 0x03, 0xa8, 0x5c, 0xb2, 0x70, 0xf7, 0x96, 0xad, 0x2d, 0x93, + 0x7e, 0x2a, 0xc0, 0xd5, 0xe0, 0xa3, 0x48, 0x21, 0x75, 0x80, 0x00, 0xaa, 0x59, + 0xc9, 0xd4, 0x65, 0x24, 0x85, 0x29, 0x4e, 0xe0, 0xab, 0x29, 0x69, 0x6b, 0x21, + 0x43, 0x0f, 0xa5, 0x4d, 0xcf, 0xbf, 0x2b, 0x9c, 0x49, 0xd1, 0x42, 0x06, 0x42, + 0x09, 0xee, 0xee, 0xd4, 0xd4, 0x71, 0xff, 0xc0, 0x17, 0xd4, 0xe2, 0x0a, 0x79, + 0x6b, 0x09, 0x27, 0x80, 0x4c, 0x06, 0x1b, 0x9f, 0x4a, 0x70, 0x91, 0xfe, 0x01, + 0x5a, 0xda, 0x68, 0xfd, 0x84, 0x42, 0xe0, 0x18, 0x25, 0xc8, 0x8d, 0xfe, 0x55, + 0xcf, 0x5d, 0xe3, 0x89, 0x36, 0xf7, 0xce, 0x25, 0x31, 0x1b, 0x90, 0x2b, 0xa9, + 0x7a, 0x3c, 0x12, 0xa9, 0x5c, 0xfa, 0x1c, 0x3a, 0x59, 0x1b, 0x81, 0x8f, 0x60, + 0x83, 0x27, 0x09, 0xd9, 0xe4, 0x83, 0x9e, 0x41, 0x0f, 0xb3, 0x6b, 0x84, 0xf3, + 0xac, 0x4f, 0x07, 0x0f, 0xc3, 0x5e, 0x16, 0x19, 0x78, 0x25, 0x9e, 0x5b, 0x8e, + 0xdc, 0x74, 0x4d, 0x90, 0x91, 0x9a, 0xa7, 0x70, 0xbb, 0x36, 0x21, 0x51, 0x28, + 0xe5, 0x82, 0xb5, 0x96, 0x41, 0xe2, 0x38, 0x52, 0xe9, 0x58, 0xeb, 0x8f, 0xc3, + 0xc0, 0xaa, 0x96, 0x15, 0x2b, 0xa4, 0xf7, 0x7f, 0x13, 0x8d, 0x6a, 0x67, 0x12, + 0xa3, 0xae, 0x32, 0x26, 0x01, 0x58, 0x83, 0xf8, 0x1d, 0xb2, 0x3e, 0x58, 0x3c, + 0x86, 0x9c, 0x4c, 0x71, 0x14, 0x3a, 0x6f, 0xff, 0xd6, 0x5e, 0x8d, 0xfd, 0xc5, + 0x0c, 0x99, 0xa2, 0xf1, 0xf3, 0x14, 0xcd, 0xcc, 0x71, 0x35, 0x9e, 0x23, 0x5f, + 0x1d, 0x7d, 0xc2, 0xb5, 0xf3, 0x8e, 0xf7, 0xb9, 0x70, 0x84, 0x31, 0x63, 0xc0, + 0x3f, 0x9d, 0xd4, 0x0a, 0x80, 0x15, 0xef, 0xdc, 0x87, 0x91, 0x95, 0x6a, 0x3f, + 0x3c, 0xed, 0xd9, 0xea, 0x64, 0xf8, 0xef, 0xa7, 0xa0, 0x81, 0x5a, 0x70, 0x38, + 0x1d, 0x71, 0x46, 0x78, 0x17, 0xbd, 0x04, 0xca, 0x52, 0x9a, 0xed, 0xe0, 0x7f, + 0xf6, 0x0d, 0x17, 0x6a, 0xed, 0x0f, 0x85, 0x5a, 0x2e, 0xae, 0xa8, 0x9e, 0xae, + 0xac, 0xa8, 0x93, 0x58, 0xc0, 0x81, 0x82, 0x6a, 0x08, 0x12, 0xa5, 0xbc, 0xa2, + 0x8b, 0xe1, 0x37, 0x3f, 0x08, 0x6d, 0xbd, 0xba, 0x7e, 0x43, 0xe2, 0x03, 0x21, + 0x2c, 0x9f, 0xed, 0x21, 0x47, 0x4b, 0xa1, 0x9a, 0x05, 0x5f, 0xfc, 0xc1, 0x79, + 0x41, 0x2e, 0x89, 0x3a, 0x74, 0x48, 0x32, 0x29, 0x8c, 0x5f, 0xe2, 0x4c, 0xc6, + 0xb1, 0x86, 0x67, 0xf4, 0x9b, 0x34, 0xdf, 0xb1, 0x23, 0x79, 0x26, 0x74, 0x19, + 0xa9, 0xcb, 0x94, 0x03, 0xd8, 0x16, 0x7d, 0x8d, 0x1e, 0x91, 0xd2, 0x81, 0x1a, + 0x04, 0x3b, 0x29, 0x24, 0x3b, 0x06, 0x9b, 0x37, 0x58, 0x78, 0x47, 0xdc, 0x6f, + 0xcd, 0xdb, 0x18, 0x31, 0xbd, 0x1c, 0xc2, 0x56, 0x7c, 0xa0, 0x33, 0xac, 0x40, + 0xf7, 0x4a, 0xb6, 0x95, 0x5f, 0x68, 0x3b, 0x12, 0xe4, 0xe8, 0x25, 0x4e, 0x4e, + 0xa7, 0x60, 0xd3, 0x8b, 0x3f, 0x46, 0x79, 0x1c, 0x5c, 0x4c, 0xb1, 0x2b, 0xc7, + 0xcc, 0xb0, 0xed, 0x18, 0x65, 0xf2, 0x5d, 0x60, 0x1c, 0x30, 0x3f, 0x81, 0xfb, + 0x1f, 0xa1, 0xdb, 0x48, 0x53, 0x3d, 0x3d, 0x6b, 0x28, 0x8e, 0x4d, 0x9a, 0x4d, + 0xff, 0x8e, 0xc2, 0x1c, 0x96, 0xf5, 0x78, 0x39, 0x97, 0x10, 0xc8, 0x25, 0xfe, + 0x7e, 0x32, 0xf9, 0x3a, 0x8c, 0x07, 0x43, 0xf9, 0xeb, 0xd5, 0x4c, 0xc1, 0x51, + 0xc7, 0x61, 0x03, 0x37, 0xae, 0xbf, 0x7e, 0x9b, 0x91, 0x57, 0x20, 0xa5, 0x43, + 0x51, 0xd4, 0x9a, 0xb8, 0xc2, 0x2f, 0xa3, 0x49, 0x98, 0xdc, 0xf5, 0x83, 0xd4, + 0x38, 0x73, 0x61, 0xef, 0x3f, 0xf8, 0x6f, 0x50, 0xec, 0x53, 0xf4, 0x92, 0x49, + 0xe4, 0xad, 0x34, 0x96, 0x03, 0x06, 0x6f, 0xc9, 0xc6, 0x61, 0xd6, 0x9f, 0x91, + 0x1d, 0xfa, 0x72, 0x41, 0xc8, 0xd5, 0x79, 0x2d, 0x78, 0x33, 0x2e, 0x93, 0xdb, + 0x65, 0x93, 0xe5, 0x93, 0xfd, 0x5d, 0x45, 0x6a, 0xbd, 0xac, 0x79, 0xa7, 0x16, + 0xfa, 0x6e, 0x3f, 0x39, 0x28, 0xa8, 0x4d, 0x19, 0x70, 0x86, 0xec, 0xc2, 0x7e, + 0xac, 0x18, 0x8f, 0xf2, 0xb7, 0x15, 0x21, 0x76, 0x2a, 0xd4, 0x7b, 0xec, 0x08, + 0x99, 0x2d, 0x86, 0x85, 0x0e, 0xb3, 0xea, 0x13, 0xd5, 0x07, 0x08, 0x07, 0xa2, + 0xcb, 0x66, 0x80, 0xa2, 0x49, 0xea, 0x1c, 0x04, 0x20, 0x37, 0x48, 0xda, 0xab, + 0x9b, 0x0d, 0x3b, 0x3c, 0x2e, 0x9d, 0xcf, 0xe7, 0x76, 0x0c, 0x79, 0xdd, 0xa3, + 0xc0, 0x25, 0x9e, 0x7d, 0xa9, 0xcc, 0xfa, 0x5f, 0xb6, 0x47, 0xa5, 0xe2, 0x0f, + 0x3f, 0x3b, 0xc8, 0x66, 0xda, 0x24, 0xea, 0xde, 0x36, 0xb6, 0x83, 0xa2, 0xbd, + 0x71, 0x97, 0xfb, 0x67, 0x27, 0x26, 0xf4, 0x20, 0x08, 0xb4, 0x6a, 0xd7, 0xf8, + 0xab, 0xdb, 0x18, 0x11, 0x7f, 0x32, 0x2c, 0x57, 0xdc, 0x01, 0x7b, 0x0a, 0x37, + 0x1f, 0x48, 0x63, 0x13, 0x5b, 0x4d, 0xb5, 0xa1, 0xb6, 0xe0, 0x11, 0x1e, 0x63, + 0x0e, 0x23, 0x45, 0x9a, 0x74, 0x88, 0x33, 0x99, 0x1c, 0xff, 0x71, 0xa0, 0x5c, + 0x4a, 0xb1, 0x9d, 0xd9, 0x97, 0x71, 0x58, 0x2d, 0x03, 0x81, 0x04, 0xb7, 0xe0, + 0x39, 0xa3, 0x76, 0xf7, 0xac, 0xbb, 0xea, 0xdb, 0x34, 0xf9, 0x45, 0xbe, 0xb9, + 0xd7, 0xca, 0x0e, 0x4e, 0x3d, 0x5c, 0x5e, 0x4e, 0xb1, 0xd8, 0x52, 0x6e, 0xbd, + 0x13, 0xda, 0xcb, 0x1b, 0xa3, 0x57, 0x35, 0xc6, 0xd0, 0x4a, 0x45, 0x55, 0xac, + 0xf4, 0xbf, 0x11, 0x76, 0x26, 0x50, 0x0d, 0x77, 0xb3, 0x81, 0x89, 0xdd, 0x48, + 0x88, 0x04, 0x12, 0x25, 0xac, 0xbe, 0x38, 0x74, 0xa4, 0xc0, 0xf6, 0x07, 0xfe, + 0x67, 0x45, 0xf9, 0x35, 0x5b, 0x3f, 0xa1, 0x88, 0xf1, 0xd6, 0x5c, 0x09, 0xf3, + 0x89, 0xaf, 0x1b, 0x9d, 0x62, 0x32, 0xaa, 0x79, 0x44, 0x79, 0x19, 0xc5, 0x50, + 0xf6, 0xf3, 0x1f, 0xec, 0x35, 0x48, 0x1c, 0xb9, 0x22, 0xde, 0x2d, 0xb5, 0xb4, + 0xda, 0x2f, 0x81, 0x94, 0x86, 0x17, 0x02, 0x8e, 0x32, 0x17, 0x06, 0xa3, 0xa7, + 0x78, 0xc1, 0x93, 0x8c, 0x44, 0x3b, 0xb0, 0x0e, 0x5b, 0x0f, 0xf0, 0x6a, 0xd8, + 0xab, 0x9b, 0x1a, 0xb0, 0xc1, 0x14, 0x77, 0x67, 0x3f, 0x85, 0xdf, 0x95, 0x61, + 0xdb, 0xea, 0x45, 0xd5, 0xf9, 0x78, 0x1e, 0xbe, 0x31, 0x7a, 0x07, 0x10, 0xae, + 0x54, 0x61, 0xe3, 0x4f, 0xe6, 0xf1, 0xb1, 0xaa, 0x9b, 0x4e, 0x67, 0xb1, 0x49, + 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, 0xe3, 0x81, 0x93, 0xbc, 0x7b, 0xdc, 0x8b, + 0xa3, 0xe4, 0xe3, 0xd1, 0xd9, 0x33, 0xbf, 0xb5, 0x80, 0xf5, 0xb3, 0xe8, 0x7a, + 0x2a, 0x06, 0x51, 0x70, 0x51, 0x41, 0x0f, 0xe1, 0xb4, 0xff, 0x1e, 0xa0, 0xad, + 0xe8, 0x24, 0xf3, 0x38, 0x51, 0x54, 0x56, 0xa5, 0x7c, 0x7a, 0x91, 0x6a, 0x74, + 0x38, 0x8e, 0xe8, 0xf1, 0x28, 0x1f, 0x9a, 0xde, 0x0a, 0xe2, 0xa2, 0x61, 0x3a, + 0x06, 0x12, 0xc4, 0x69, 0xdf, 0x79, 0x2b, 0x8d, 0xf4, 0xca, 0xe4, 0xfc, 0x25, + 0xc1, 0xca, 0xdb, 0xa9, 0x5a, 0x80, 0x7c, 0xe6, 0x1e, 0x5a, 0x53, 0x03, 0xfa, + 0xaf, 0x9e, 0x14, 0x65, 0x39, 0x96, 0xb5, 0xa8, 0xad, 0xc3, 0x4f, 0xd4, 0x75, + 0xef, 0x14, 0x99, 0x09, 0x4b, 0xab, 0xaf, 0x1f, 0x3f, 0x07, 0xda, 0x9a, 0x39, + 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, 0x98, 0x7a, 0xdf, 0xe9, 0x56, 0x48, + 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, 0x88, 0x41, 0x58, 0x30, 0x99, 0xaf, + 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, 0x34, 0x7e, 0x40, 0xb6, 0xfd, 0x8c, + 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, 0x9a, 0x02, 0x19, 0xbc, 0x3e, 0x4e, + 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, 0x16, 0x86, 0x08, 0x68, 0x76, 0xbe, + 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, 0x8f, 0x4f, 0xab, 0x3d, 0x28, 0xc0, + 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, 0xf8, 0x89, 0x46, 0xfb, 0x40, 0xcf, + 0xa5, 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, 0x3c, 0x83, 0x47, 0xec, 0xee, 0x93, + 0xd4, 0x6d, 0x14, 0x0b, 0xb5, 0xf6, 0x95, 0x31, 0xd6, 0x66, 0x54, 0x8b, 0x10, + 0x9c, 0xe7, 0x64, 0xbe, 0xad, 0x7c, 0x87, 0xbd, 0x4c, 0x87, 0x64, 0x94, 0xde, + 0x82, 0xdb, 0x6e, 0x50, 0x73, 0xa6, 0xc9, 0x4f, 0x7c, 0x09, 0x9a, 0x40, 0xd7, + 0xa3, 0x1c, 0x4a, 0x04, 0xb6, 0x9c, 0x9f, 0xcc, 0xf3, 0xc7, 0xdd, 0x56, 0xf5, + 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, 0xf7, 0x95, 0x39, 0x81, 0xd5, 0x5a, 0x96, + 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, 0x42, 0xe5, 0xba, 0xfe, 0xc8, 0x84, + 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, 0xc4, 0x60, 0xf9, 0x8f, 0xeb, 0x82, + 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, 0x76, 0x79, 0x82, 0x36, 0xc5, 0xca, + 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, 0x4d, 0x87, 0x13, 0xe5, 0x6c, 0x77, + 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, 0x3a, 0x88, 0x54, 0xbc, 0x6e, 0x65, + 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, 0x0b, 0x73, 0xba, 0x24, 0x1b, 0xf7, + 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, 0x96, 0x87, 0xac, 0x52, 0x69, 0xfd, + 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, 0x26, 0x76, 0x85, 0x99, 0x8a, 0x3f, + 0x7d, 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, 0x46, 0x49, 0x5d, 0x24, 0xc4, 0x98, + 0x63, 0x5e, 0xf9, 0x7a, 0xc6, 0x6a, 0x40, 0x08, 0x94, 0xc0, 0x9f, 0x73, 0x48, + 0x8e, 0xb7, 0xcf, 0x33, 0xf6, 0xda, 0xd1, 0x66, 0x6a, 0x05, 0xf9, 0x1a, 0xd7, + 0x75, 0x79, 0x65, 0xc2, 0x99, 0x36, 0xe7, 0xfa, 0x48, 0xd7, 0x7e, 0x89, 0xee, + 0x09, 0x62, 0xf5, 0x8c, 0x05, 0x1d, 0x11, 0xd0, 0x55, 0xfc, 0xe2, 0x04, 0xa5, + 0x62, 0xde, 0x68, 0x08, 0x8a, 0x1b, 0x26, 0x48, 0xb8, 0x17, 0x4c, 0xbc, 0xfc, + 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x11, 0x5a, 0xfd, 0xe1, 0x78, 0x3f, 0x5c, 0xdb, + 0x26, 0xf7, 0xbf, 0xdf, 0x87, 0xb2, 0x1b, 0x1c, 0x70, 0xdc, 0x56, 0xbf, 0x1c, + 0x82, 0x85, 0x7a, 0x40, 0xca, 0x2a, 0xa2, 0x36, 0xec, 0x56, 0x69, 0x12, 0xd8, + 0x64, 0x93, 0x7a, 0xa0, 0x7d, 0xdf, 0xfc, 0xd3, 0x77, 0x39, 0x5c, 0xba, 0x61, + 0x6d, 0x63, 0xc0, 0xb6, 0x9c, 0x01, 0xfc, 0xc4, 0x53, 0x91, 0xfd, 0x5b, 0x87, + 0x63, 0xfb, 0x96, 0xd7, 0xca, 0x33, 0x3a, 0x12, 0x79, 0x11, 0xb4, 0xed, 0x95, + 0xb0, 0x0c, 0x24, 0xcb, 0x57, 0x8f, 0xfa, 0xb9, 0xf1, 0x11, 0x60, 0x30, 0x04, + 0x86, 0x08, 0xcc, 0x99, 0x0e, 0x74, 0xeb, 0xad, 0x5c, 0x34, 0x8a, 0xd9, 0xa8, + 0x85, 0xe9, 0x07, 0xe0, 0xbe, 0x5a, 0x78, 0x83, 0xc8, 0x84, 0x89, 0xcb, 0x41, + 0x43, 0x2d, 0xac, 0x86, 0x20, 0x23, 0xd4, 0x67, 0x89, 0xeb, 0x7d, 0x98, 0x9a, + 0xf7, 0x79, 0xe5, 0xb8, 0xd2, 0x83, 0x05, 0xd7, 0xe2, 0x12, 0x4d, 0x3b, 0x55, + 0x77, 0x0f, 0x8c, 0x05, 0x0a, 0xb2, 0x5e, 0x1a, 0x46, 0x02, 0xeb, 0x58, 0xcf, + 0x12, 0x34, 0xea, 0xe1, 0x5f, 0x33, 0xbb, 0xde, 0xce, 0x27, 0xa6, 0xb1, 0x2d, + 0xb3, 0xe4, 0xdb, 0xfd, 0x3a, 0x2b, 0xfc, 0xc9, 0xee, 0x6e, 0xd0, 0x16, 0xc0, + 0xf6, 0x65, 0xbe, 0x81, 0x33, 0xb7, 0xdc, 0x1d, 0x86, 0x04, 0x4d, 0xb0, 0xf9, + 0xdb, 0x40, 0xfb, 0x0e, 0x9f, 0x8b, 0xc2, 0xe4, 0xdb, 0x53, 0x82, 0xa8, 0xb4, + 0xf8, 0x15, 0xb4, 0xe8, 0x43, 0x4a, 0xd0, 0xdf, 0xbc, 0x51, 0xa5, 0xe9, 0xb1, + 0x45, 0xe1, 0x59, 0x6c, 0xbf, 0x46, 0x70, 0xb7, 0xe0, 0x5d, 0xfd, 0xaf, 0xbb, + 0x0c, 0xf3, 0xdd, 0xee, 0x28, 0xd7, 0x6a, 0x82, 0x42, 0x8e, 0x8a, 0xba, 0x43, + 0x64, 0xe8, 0x4b, 0xac, 0x37, 0x92, 0x98, 0xdf, 0x29, 0x32, 0xe6, 0x9b, 0xb5, + 0xd0, 0x45, 0x51, 0x6e, 0xfc, 0x33, 0xae, 0x6c, 0xc3, 0x94, 0x7c, 0xeb, 0x09, + 0xed, 0x37, 0x16, 0x67, 0x21, 0x2a, 0x83, 0x1b, 0x54, 0x85, 0xea, 0xfc, 0xe8, + 0x48, 0x81, 0x88, 0xea, 0x4e, 0x27, 0xd0, 0xcd, 0xf7, 0xdd, 0xd3, 0x48, 0xab, + 0xff, 0x77, 0x7f, 0x4a, 0x13, 0xbb, 0xc7, 0x16, 0xb6, 0xa5, 0x94, 0x4e, 0xe7, + 0x27, 0x96, 0x56, 0x90, 0xe2, 0x09, 0xb4, 0x9e, 0xb9, 0x62, 0xc0, 0x39, 0x97, + 0x5f, 0x93, 0x9e, 0xd5, 0xc6, 0xe4, 0xc4, 0x00, 0xd8, 0x87, 0x75, 0x94, 0x33, + 0xd3, 0xad, 0x71, 0x6d, 0xa0, 0xcb, 0x44, 0x61, 0x13, 0xc7, 0x72, 0x7a, 0x64, + 0xb5, 0x8c, 0x3f, 0x8a, 0x0f, 0x81, 0x18, 0x9f, 0x98, 0x00, 0x52, 0x33, 0xa8, + 0x13, 0x66, 0xae, 0xe7, 0x3c, 0xec, 0x85, 0x22, 0x8e, 0xbc, 0xfd, 0x5e, 0xe3, + 0xc3, 0xfb, 0x44, 0xdb, 0x76, 0xba, 0x24, 0x3f, 0x28, 0x42, 0xb7, 0xb5, 0xfc, + 0x74, 0x6a, 0xe5, 0x1b, 0x0b, 0xc4, 0xbd, 0x4f, 0xc9, 0xfd, 0x83, 0x35, 0x65, + 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, 0xf6, 0x99, 0x03, 0x18, 0xad, 0x8c, 0x7d, + 0x94, 0x37, 0xe2, 0x0e, 0x2a, 0x1f, 0x20, 0xe8, 0x18, 0xf9, 0x05, 0x7c, 0x5a, + 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, 0x49, 0x45, 0xcd, 0x42, 0x4c, 0x28, 0xa5, + 0xfa, 0x38, 0x5d, 0xad, 0xfe, 0x49, 0x07, 0xb2, 0x74, 0xd8, 0x42, 0x70, 0x7d, + 0xb3, 0x69, 0x7a, 0x5a, 0xe6, 0xc8, 0xf5, 0x42, 0xe5, 0xec, 0xc0, 0x7f, 0xe4, + 0x73, 0x50, 0xd1, 0x01, 0x46, 0x70, 0x21, 0x2e, 0xfe, 0x81, 0xfb, 0x7c, 0x73, + 0xe8, 0x45, 0x0d, 0xf8, 0x14, 0xef, 0x62, 0x32, 0xf7, 0x49, 0x0f, 0x63, 0xcc, + 0xf0, 0x74, 0x80, 0xf8, 0x84, 0xa6, 0x6e, 0xaf, 0xfc, 0x28, 0xfe, 0xa4, 0x48, + 0xd7, 0xb4, 0x01, 0xcd, 0xae, 0x10, 0xe7, 0xc0, 0xc7, 0xf9, 0xa7, 0xb1, 0x53, + 0x31, 0x96, 0x9f, 0xc8, 0xcb, 0x36, 0x39, 0x67, 0x73, 0xde, 0x19, 0x19, 0x31, + 0xc7, 0x50, 0xf6, 0xce, 0x5c, 0xaa, 0xf2, 0x97, 0x68, 0xeb, 0xb2, 0x7d, 0xac, + 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, 0x77, 0x2b, 0xf8, 0x7a, 0xe1, 0x0a, + 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x3c, 0xfc, 0x31, 0x59, 0x49, 0x43, + 0x68, 0xc5, 0xab, 0x8c, 0xad, 0xb7, 0xf6, 0x71, 0xe9, 0x62, 0x6b, 0xd2, 0x63, + 0xe3, 0x11, 0x81, 0xa6, 0x04, 0xb5, 0x06, 0xa0, 0x3b, 0x43, 0x9a, 0x7f, 0xfe, + 0x43, 0x55, 0x89, 0x24, 0x77, 0xe2, 0xbd, 0xf3, 0x38, 0xc6, 0x2c, 0x39, 0x22, + 0xf7, 0xd3, 0xc9, 0xa5, 0x6c, 0x71, 0x03, 0xd9, 0x11, 0x94, 0x8a, 0x84, 0xb5, + 0xae, 0x2d, 0xbb, 0x16, 0xa3, 0x76, 0x1a, 0xdd, 0x05, 0x3a, 0x0f, 0x96, 0x7e, + 0x6b, 0x5b, 0xc9, 0x42, 0x11, 0xb6, 0x54, 0x71, 0x53, 0x26, 0x7c, 0x6e, 0xe1, + 0xca, 0xd0, 0xd9, 0x74, 0xa7, 0x10, 0x88, 0x58, 0x37, 0x35, 0xe4, 0xf6, 0x3d, + 0x33, 0x15, 0x6d, 0xad, 0xd5, 0x4c, 0x2f, 0xaf, 0x89, 0x11, 0x4a, 0x12, 0x7b, + 0x97, 0xb9, 0x4c, 0xc2, 0xa2, 0x2e, 0xf3, 0x03, 0xf4, 0x59, 0xd0, 0x4f, 0xc0, + 0xb5, 0x3a, 0xce, 0x59, 0x18, 0xd4, 0x7f, 0xf3, 0x3a, 0x55, 0x8b, 0xd7, 0x1a, + 0x75, 0xf3, 0x55, 0xfb, 0xd0, 0x6b, 0xbc, 0xcf, 0x4e, 0x02, 0xc3, 0xc0, 0xa4, + 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, 0x1d, 0x63, 0xa6, 0x4c, 0xb2, 0xd3, 0x23, + 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, 0xb4, 0x68, 0x21, 0x42, 0xc8, 0xb2, + 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, 0xe4, 0xb5, 0xe3, 0x60, 0x34, 0x51, + 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, 0x63, 0xfa, 0x6a, 0xbb, 0x78, 0xd2, + 0x1c, 0x19, 0x3c, 0xbe, 0x65, 0xb6, 0x95, 0xfe, 0x67, 0x42, 0x3c, 0x1e, 0x2d, + 0x31, 0x2e, 0x27, 0x76, 0xfa, 0x24, 0xec, 0xe8, 0x46, 0x83, 0xe7, 0x48, 0x76, + 0xc5, 0x5e, 0xa0, 0x36, 0x9e, 0x4e, 0xa0, 0xe8, 0x64, 0x94, 0xe0, 0x0d, 0xde, + 0x23, 0x6a, 0x16, 0x89, 0x73, 0x1f, 0x0a, 0x5d, 0x82, 0x03, 0xaf, 0xde, 0x5c, + 0x42, 0x36, 0x40, 0xb8, 0x1e, 0x4f, 0x63, 0x1c, 0x98, 0x1c, 0x03, 0x83, 0x9f, + 0x4b, 0x44, 0xc9, 0xe8, 0x03, 0x00, 0x23, 0xf8, 0xb9, 0xd8, 0x17, 0x85, 0x60, + 0xda, 0xf9, 0x75, 0x11, 0x19, 0x55, 0xa2, 0xbc, 0xa3, 0x42, 0x3e, 0xee, 0xfc, + 0x52, 0x7b, 0xe3, 0xa8, 0x54, 0x3e, 0xb9, 0x0a, 0x5e, 0xc0, 0x2f, 0x35, 0xc7, + 0xc6, 0x4b, 0x7d, 0xd5, 0x9a, 0x72, 0xda, 0x00, 0x74, 0x63, 0x4e, 0x01, 0xd2, + 0xab, 0xf3, 0x63, 0x7a, 0xdd, 0x77, 0xc7, 0x35, 0x0f, 0x12, 0xb0, 0x11, 0xb2, + 0x94, 0x16, 0x8e, 0xc7, 0x55, 0x76, 0xe4, 0x7d, 0x16, 0x9e, 0x39, 0x38, 0xbf, + 0x6a, 0xe2, 0xaa, 0x8f, 0xf7, 0xcf, 0xba, 0x7c, 0xac, 0xb1, 0xf9, 0x2b, 0x6e, + 0x4c, 0x24, 0x97, 0xbf, 0xfa, 0x9f, 0x17, 0xca, 0xd2, 0x42, 0xfa, 0x9c, 0x31, + 0x79, 0xc1, 0xa3, 0xaa, 0x81, 0xf7, 0x36, 0x16, 0x49, 0x57, 0x2c, 0x71, 0x5c, + 0x25, 0xa1, 0xf6, 0xcd, 0x5a, 0xce, 0x82, 0xc0, 0x0a, 0xb2, 0x34, 0x2b, 0x9c, + 0x3c, 0xb4, 0xff, 0xfd, 0xda, 0x16, 0x0c, 0xa5, 0xab, 0x9e, 0x9b, 0xaf, 0x21, + 0x39, 0xef, 0x9a, 0xfb, 0xe1, 0xb1, 0xf3, 0x09, 0x46, 0x2a, 0xfc, 0xe4, 0x62, + 0xa7, 0x9b, 0xb9, 0x69, 0x8e, 0x22, 0xc9, 0x57, 0xc5, 0x90, 0xa7, 0x53, 0xa7, + 0x6b, 0x87, 0xe0, 0x09, 0x12, 0x1e, 0x06, 0xf6, 0xa1, 0xbf, 0x62, 0xa0, 0x8b, + 0xf4, 0x35, 0xd9, 0x2e, 0x2f, 0xff, 0xe8, 0x6e, 0x2a, 0x9c, 0xbb, 0xa9, 0x13, + 0x3a, 0x68, 0xe4, 0xae, 0xbf, 0x33, 0xc3, 0x84, 0x36, 0xf2, 0x54, 0x5f, 0xc2, + 0xd5, 0x28, 0x32, 0xd1, 0x65, 0xaf, 0x41, 0x5b, 0x24, 0x4a, 0xdc, 0x5f, 0x57, + 0x37, 0x7d, 0xee, 0xdf, 0x46, 0x0a, 0xa3, 0xbe, 0xb4, 0x34, 0x19, 0xc6, 0xb0, + 0x82, 0xe8, 0x35, 0xce, 0xe2, 0xf1, 0x6f, 0x2f, 0x87, 0x67, 0xf0, 0x3d, 0x9f, + 0x42, 0xa8, 0x4a, 0x76, 0xcb, 0x68, 0x67, 0xb2, 0xbc, 0x75, 0xba, 0xee, 0xcc, + 0xaf, 0xe6, 0x15, 0x19, 0xcf, 0xce, 0xac, 0x55, 0x27, 0x96, 0x1b, 0x32, 0x4d, + 0xce, 0x09, 0x33, 0x5a, 0x58, 0x53, 0xa6, 0xb4, 0xda, 0x3e, 0x47, 0x1f, 0xc1, + 0xfb, 0x19, 0x6f, 0x76, 0xd9, 0xb8, 0x79, 0xc7, 0x20, 0x08, 0x62, 0xea, 0xd1, + 0x8d, 0xea, 0x1f, 0x3e, 0xc9, 0x03, 0x7f, 0x37, 0xb6, 0xea, 0x28, 0x91, 0x66, + 0x51, 0x0b, 0x47, 0x5b, 0x20, 0x04, 0x4d, 0x45, 0x2e, 0x0f, 0x6e, 0xc3, 0xab, + 0x47, 0x16, 0x15, 0x07, 0xd5, 0x3a, 0x2d, 0xc6, 0x09, 0x49, 0xf1, 0xe4, 0x50, + 0xc3, 0xea, 0xda, 0xef, 0x88, 0x6e, 0x6b, 0x82, 0x7c, 0x5b, 0xb5, 0xef, 0x11, + 0xf4, 0x02, 0x8a, 0x70, 0x4f, 0xc5, 0xa9, 0x38, 0x2c, 0x6b, 0x03, 0xe7, 0xd8, + 0x08, 0x1e, 0x07, 0x98, 0x92, 0x86, 0xa0, 0xd9, 0xce, 0x56, 0x1f, 0xaa, 0x1b, + 0x6e, 0x96, 0x23, 0xd7, 0xab, 0x71, 0x00, 0x7f, 0xd2, 0x77, 0xb9, 0x86, 0xa0, + 0x48, 0x83, 0x46, 0x02, 0xea, 0xf8, 0x78, 0x0f, 0x06, 0x75, 0xba, 0xae, 0x68, + 0x41, 0x5d, 0x3a, 0xf0, 0x10, 0x19, 0xb5, 0xea, 0x48, 0x0d, 0xce, 0x93, 0x62, + 0xec, 0x8d, 0x5d, 0xf3, 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, 0x8a, 0x8d, 0xf7, + 0x3c, 0x54, 0x08, 0x70, 0xa8, 0x39, 0xbb, 0x03, 0x91, 0x0a, 0x49, 0x17, 0x70, + 0xe1, 0xc8, 0x4b, 0x22, 0x3e, 0xe9, 0x16, 0x52, 0x70, 0xc4, 0xcc, 0xf6, 0xfc, + 0x70, 0x75, 0xc3, 0x7e, 0x6f, 0xbb, 0x14, 0x38, 0x15, 0x07, 0xfa, 0x18, 0xf1, + 0x39, 0x53, 0x33, 0x6a, 0xb2, 0xbe, 0xdc, 0x60, 0x0c, 0x61, 0x5b, 0xd4, 0x99, + 0x27, 0xe9, 0xd7, 0xf4, 0x88, 0x4e, 0x6e, 0xd3, 0xfd, 0x5e, 0x4b, 0x7c, 0x38, + ], + txid: [ + 0x5b, 0xb4, 0x4e, 0xbf, 0x80, 0x30, 0xac, 0x2f, 0xb7, 0x4d, 0x82, 0xb4, 0x32, + 0xd4, 0x80, 0x21, 0x8a, 0x3d, 0x16, 0x48, 0xe3, 0x27, 0x0b, 0x89, 0xff, 0xb3, + 0xcf, 0x73, 0x5c, 0x2c, 0xe7, 0xa0, + ], + auth_digest: [ + 0xb3, 0xd8, 0xef, 0x97, 0x5a, 0x6a, 0xfa, 0x72, 0x00, 0x92, 0x3c, 0x11, 0x60, + 0xb7, 0xeb, 0xcf, 0xce, 0x43, 0xb5, 0xb9, 0x1e, 0xe3, 0xb3, 0xdd, 0x91, 0x78, + 0x49, 0x38, 0xbf, 0xa6, 0x8e, 0xa6, + ], + amounts: vec![1399781968202734, 1999413718097392], + script_pubkeys: vec![ + vec![0x00, 0x53, 0x00], + vec![0x53, 0x51, 0x52, 0x52, 0x65, 0x52, 0x00, 0x53, 0x63], + ], + transparent_input: Some(1), + sighash_shielded: [ + 0xa8, 0x19, 0x23, 0x45, 0x81, 0x21, 0xcd, 0xb5, 0x64, 0x75, 0xf9, 0x6e, 0xd2, + 0xd9, 0x20, 0x80, 0xf5, 0x6e, 0xd3, 0x06, 0xe4, 0x1f, 0x45, 0x01, 0x2a, 0xf5, + 0x7c, 0xfb, 0x34, 0x8a, 0xcd, 0xa1, + ], + sighash_all: Some([ + 0x0b, 0x75, 0x2d, 0xe9, 0x48, 0x55, 0x2d, 0x11, 0x70, 0xc1, 0xc9, 0x38, 0x2d, + 0xb1, 0x4e, 0xb4, 0x6a, 0xda, 0x2d, 0xb1, 0x64, 0xda, 0x90, 0x14, 0x1a, 0x62, + 0x6a, 0x03, 0x5d, 0xf3, 0xb4, 0xd5, + ]), + sighash_none: Some([ + 0xef, 0x8a, 0xf0, 0x6f, 0x6a, 0xec, 0x49, 0x39, 0x4f, 0x46, 0x6d, 0xdd, 0x5a, + 0x6c, 0x11, 0x2f, 0x80, 0xde, 0xd7, 0x68, 0x7c, 0xa2, 0x1c, 0x10, 0x78, 0x2f, + 0xda, 0x26, 0x1b, 0xe5, 0xf6, 0x87, + ]), + sighash_single: Some([ + 0x9b, 0xa5, 0x4f, 0xf9, 0xf5, 0xda, 0x79, 0xfb, 0xa5, 0x1c, 0xdf, 0x48, 0x91, + 0xc0, 0x21, 0xd8, 0xdb, 0xe8, 0x88, 0xbf, 0x21, 0x5f, 0x7c, 0x2f, 0xd7, 0x9e, + 0x43, 0xba, 0x5d, 0xd1, 0xcc, 0x76, + ]), + sighash_all_anyone: Some([ + 0x22, 0x54, 0x83, 0x9a, 0x4e, 0xd2, 0x5a, 0x96, 0x54, 0x8d, 0xd8, 0x04, 0xdc, + 0x33, 0x38, 0x29, 0xba, 0xa4, 0xda, 0x26, 0x77, 0xe9, 0xc8, 0x3d, 0xf8, 0xab, + 0x2d, 0x5a, 0x57, 0xcd, 0x66, 0x6a, + ]), + sighash_none_anyone: Some([ + 0x14, 0x97, 0xbf, 0x31, 0xdf, 0x9b, 0x0f, 0x6e, 0x77, 0xe1, 0x17, 0x3a, 0x9e, + 0xb4, 0x08, 0xef, 0x5e, 0x19, 0xd8, 0x44, 0xaa, 0x9a, 0x85, 0xb6, 0xe7, 0x54, + 0x6f, 0x30, 0xde, 0x1f, 0x0b, 0xe2, + ]), + sighash_single_anyone: Some([ + 0x39, 0xac, 0xb5, 0xfd, 0x91, 0xa1, 0x2d, 0xd4, 0x07, 0x36, 0xfc, 0x6a, 0xba, + 0x53, 0xfd, 0xf5, 0x2f, 0x05, 0x83, 0x80, 0x94, 0xc3, 0xaa, 0x6e, 0xf3, 0x45, + 0xd9, 0x4a, 0x1a, 0x07, 0x24, 0xbf, + ]), + }, ] } } From 008f35ef5032fc88247a7f11cfabf9fa0f35e4b6 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Sun, 19 May 2024 15:31:13 +0200 Subject: [PATCH 31/85] Change Nu6 activation heights --- components/zcash_protocol/src/consensus.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index d49d56f7fa..ad99d92956 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -355,7 +355,7 @@ impl Parameters for MainNetwork { NetworkUpgrade::Canopy => Some(BlockHeight(1_046_400)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_687_104)), // #[cfg(zcash_unstable = "nu6")] - NetworkUpgrade::Nu6 => Some(BlockHeight(1_687_104)), + NetworkUpgrade::Nu6 => Some(BlockHeight(1_687_105)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -385,7 +385,7 @@ impl Parameters for TestNetwork { NetworkUpgrade::Canopy => Some(BlockHeight(1_028_500)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_842_420)), // #[cfg(zcash_unstable = "nu6")] - NetworkUpgrade::Nu6 => Some(BlockHeight(1_842_420)), + NetworkUpgrade::Nu6 => Some(BlockHeight(1_842_421)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -797,7 +797,7 @@ mod tests { ); assert_eq!( BranchId::for_height(&MAIN_NETWORK, BlockHeight(5_000_000)), - BranchId::Nu5, + BranchId::Nu6, ); } } From cbd3b385910573a272f9ff8c440faf8ec35ab099 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 20 May 2024 20:03:36 +0200 Subject: [PATCH 32/85] Use updated sapling-crypto --- Cargo.lock | 766 ++++++++++++++------------- Cargo.toml | 4 + zcash_client_backend/src/scan.rs | 6 +- zcash_client_backend/src/scanning.rs | 4 +- 4 files changed, 407 insertions(+), 373 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7f2dd86d07..a13dba0856 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,9 +29,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", @@ -40,9 +40,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "getrandom", @@ -53,18 +53,18 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "anes" @@ -74,9 +74,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "arrayref" @@ -115,18 +115,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] name = "async-trait" -version = "0.1.78" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] @@ -142,9 +142,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axum" @@ -193,9 +193,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", "cc", @@ -214,9 +214,9 @@ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -288,9 +288,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bitvec" @@ -312,18 +312,18 @@ checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq", + "constant_time_eq 0.2.6", ] [[package]] name = "blake2s_simd" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq", + "constant_time_eq 0.3.0", ] [[package]] @@ -350,9 +350,9 @@ dependencies = [ [[package]] name = "bs58" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ "sha2", "tinyvec", @@ -360,15 +360,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" [[package]] name = "byteorder" @@ -378,9 +378,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "cast" @@ -399,12 +399,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" [[package]] name = "cfg-if" @@ -438,9 +435,9 @@ dependencies = [ [[package]] name = "ciborium" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", @@ -449,18 +446,18 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] name = "ciborium-ll" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", - "half 1.8.2", + "half", ] [[package]] @@ -507,6 +504,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + [[package]] name = "cpp_demangle" version = "0.4.3" @@ -518,9 +521,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -563,46 +566,37 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -698,15 +692,15 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elliptic-curve" -version = "0.13.7" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9775b22bc152ad86a0cf23f0f348b884b26add12bf741e7ffc4d4ab2ab4d205" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", @@ -737,12 +731,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.6" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -768,9 +762,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "ff" @@ -838,47 +832,47 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", "futures-macro", @@ -901,9 +895,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -912,9 +906,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "group" @@ -950,9 +944,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", @@ -960,19 +954,13 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.2.6", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - [[package]] name = "half" version = "2.2.1" @@ -1028,9 +1016,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", "allocator-api2", @@ -1042,7 +1030,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.2", + "hashbrown 0.14.5", ] [[package]] @@ -1060,9 +1048,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -1075,9 +1063,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -1096,18 +1084,18 @@ dependencies = [ [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -1116,9 +1104,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -1139,9 +1127,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -1154,7 +1142,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2", "tokio", "tower-service", "tracing", @@ -1197,22 +1185,22 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown 0.14.5", ] [[package]] name = "inferno" -version = "0.11.17" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50453ec3a6555fad17b1cd1a80d16af5bc7cb35094f64e429fd46549018c6a3" +checksum = "321f0f839cd44a4686e9504b0a62b4d69a50b62072144c71c68f5873c167b8d9" dependencies = [ "ahash", - "indexmap 2.1.0", + "indexmap 2.2.6", "is-terminal", "itoa", "log", @@ -1234,13 +1222,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ - "hermit-abi 0.3.3", - "rustix", - "windows-sys", + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.52.0", ] [[package]] @@ -1254,24 +1242,24 @@ dependencies = [ [[package]] name = "itertools" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.65" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -1292,9 +1280,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", @@ -1306,11 +1294,11 @@ dependencies = [ [[package]] name = "known-folders" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b6f1427d9c43b1cce87434c4d9eca33f43bdbb6246a762aa823a582f74c1684" +checksum = "4397c789f2709d23cfcb703b316e0766a8d4b17db2d47b0ab096ef6047cae1d8" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1324,9 +1312,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.150" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libm" @@ -1347,9 +1335,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.11" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "litrs" @@ -1359,9 +1347,9 @@ checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1369,9 +1357,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "matchit" @@ -1391,9 +1379,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memmap2" @@ -1404,15 +1392,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - [[package]] name = "memuse" version = "0.2.1" @@ -1436,18 +1415,18 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] [[package]] name = "minreq" -version = "2.11.0" +version = "2.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3371dfc7b772c540da1380123674a8e20583aca99907087d990ca58cf44203" +checksum = "6fdef521c74c2884a4f3570bcdb6d2a77b3c533feb6b27ac2ae72673cc221c64" dependencies = [ "log", "once_cell", @@ -1458,20 +1437,20 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "multimap" -version = "0.8.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "nix" @@ -1502,11 +1481,10 @@ checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -1523,19 +1501,18 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -1547,24 +1524,24 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.3.9", "libc", ] [[package]] name = "object" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" @@ -1574,14 +1551,14 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0-ak#7bed5a922d94b636a7ab9eef721789219ab4092f" +source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0-ak#e2abb4244d4378aaa5c531276fb0cc0bd9ab64de" dependencies = [ "aes", "bitvec", @@ -1589,7 +1566,7 @@ dependencies = [ "ff", "fpe", "group", - "half 2.2.1", + "half", "halo2_gadgets", "halo2_proofs", "hex", @@ -1627,9 +1604,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" dependencies = [ "lock_api", "parking_lot_core", @@ -1637,15 +1614,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.52.5", ] [[package]] @@ -1686,45 +1663,45 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.1.0", + "indexmap 2.2.6", ] [[package]] name = "pin-project" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -1744,9 +1721,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plotters" @@ -1817,12 +1794,12 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "prettyplease" -version = "0.2.15" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] @@ -1837,28 +1814,28 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.4.2", + "bitflags 2.5.0", "lazy_static", "num-traits", "rand", "rand_chacha", "rand_xorshift", - "regex-syntax 0.7.5", + "regex-syntax", "rusty-fork", "tempfile", "unarray", @@ -1866,9 +1843,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", "prost-derive", @@ -1876,13 +1853,13 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bdf592881d821b83d471f8af290226c8d51402259e9bb5be7f9f8bdebbb11ac" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", "heck", - "itertools 0.11.0", + "itertools 0.12.1", "log", "multimap", "once_cell", @@ -1891,29 +1868,28 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.53", + "syn 2.0.65", "tempfile", - "which", ] [[package]] name = "prost-derive" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.11.0", + "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] name = "prost-types" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ "prost", ] @@ -1935,9 +1911,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -1989,9 +1965,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -1999,9 +1975,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -2040,47 +2016,41 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax 0.8.2", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - -[[package]] -name = "regex-syntax" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "rfc6979" @@ -2118,16 +2088,17 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.5" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", + "cfg-if", "getrandom", "libc", "spin 0.9.8", "untrusted 0.9.0", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -2145,7 +2116,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -2156,31 +2127,31 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustix" -version = "0.38.21" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.21.8" +version = "0.21.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.5", + "ring 0.17.8", "rustls-webpki", "sct", ] @@ -2191,15 +2162,15 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.5", + "ring 0.17.8", "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rusty-fork" @@ -2215,9 +2186,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -2231,8 +2202,7 @@ dependencies = [ [[package]] name = "sapling-crypto" version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f4270033afcb0c74c5c7d59c73cfd1040367f67f224fe7ed9a919ae618f1b7" +source = "git+https://github.com/QED-it/sapling-crypto?branch=orchard-backward-compatibility#d8e34724d8febd338e8aecfac240bddc0a55dac1" dependencies = [ "aes", "bellman", @@ -2256,7 +2226,7 @@ dependencies = [ "redjubjub", "subtle", "tracing", - "zcash_note_encryption 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", "zcash_spec", "zip32", ] @@ -2296,7 +2266,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.5", + "ring 0.17.8", "untrusted 0.9.0", ] @@ -2343,29 +2313,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.192" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.192" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -2385,12 +2355,12 @@ dependencies = [ [[package]] name = "shardtree" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d766257c56a1bdd75479c256b97c92e72788a9afb18b5199f58faf7188dc99d9" +checksum = "3b3cdd24424ce0b381646737fedddc33c4dcf7dcd2d545056b53f7982097bef5" dependencies = [ "assert_matches", - "bitflags 2.4.2", + "bitflags 2.5.0", "either", "incrementalmerkletree", "proptest", @@ -2418,28 +2388,18 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.4.10" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "winapi", -] - -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -2524,9 +2484,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.53" +version = "2.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" dependencies = [ "proc-macro2", "quote", @@ -2547,41 +2507,40 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.8.1" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", "rustix", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "textwrap" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.51" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.51" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] @@ -2638,9 +2597,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.1" +version = "1.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" dependencies = [ "backtrace", "bytes", @@ -2648,8 +2607,8 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "socket2 0.5.5", - "windows-sys", + "socket2", + "windows-sys 0.48.0", ] [[package]] @@ -2664,9 +2623,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", "pin-project-lite", @@ -2675,16 +2634,15 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -2724,7 +2682,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] @@ -2778,7 +2736,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] @@ -2792,9 +2750,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" @@ -2828,9 +2786,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] @@ -2859,9 +2817,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "uuid" -version = "1.5.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" [[package]] name = "vcpkg" @@ -2936,9 +2894,9 @@ dependencies = [ [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -2961,9 +2919,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2971,24 +2929,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2996,28 +2954,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.88" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "web-sys" -version = "0.3.65" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -3025,9 +2983,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "which" @@ -3059,11 +3017,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -3078,7 +3036,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", ] [[package]] @@ -3087,13 +3054,29 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -3102,42 +3085,90 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + [[package]] name = "wyz" version = "0.5.1" @@ -3208,7 +3239,7 @@ dependencies = [ "zcash_address", "zcash_encoding", "zcash_keys", - "zcash_note_encryption 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", "zcash_primitives", "zcash_proofs", "zcash_protocol", @@ -3253,7 +3284,7 @@ dependencies = [ "zcash_client_backend", "zcash_encoding", "zcash_keys", - "zcash_note_encryption 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", "zcash_primitives", "zcash_proofs", "zcash_protocol", @@ -3327,8 +3358,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b4580cd6cee12e44421dac43169be8d23791650816bdb34e6ddfa70ac89c1c5" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants#17046ee716d79cc8c069cd4497a56ff10d770c74" dependencies = [ "chacha20", "chacha20poly1305", @@ -3340,7 +3370,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#8b6b31dcea4a883a606425c4b644fca213e78b3b" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#b8bd2a186fc04ec4f55b2db44df7374f03ab5725" dependencies = [ "chacha20", "chacha20poly1305", @@ -3386,7 +3416,7 @@ dependencies = [ "tracing", "zcash_address", "zcash_encoding", - "zcash_note_encryption 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", "zcash_protocol", "zcash_spec", "zip32", @@ -3437,29 +3467,29 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.25" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.25" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] @@ -3472,7 +3502,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.65", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 2d7b369c1c..a807a7dfce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -122,3 +122,7 @@ zip32 = "0.1.1" lto = true panic = 'abort' codegen-units = 1 + +[patch.crates-io] +zcash_note_encryption = { version = "0.4", git = "https://github.com/QED-it/zcash_note_encryption", branch = "fix-sapling-constants" } +sapling = { package = "sapling-crypto", version = "0.1.3", git = "https://github.com/QED-it/sapling-crypto", branch = "orchard-backward-compatibility" } \ No newline at end of file diff --git a/zcash_client_backend/src/scan.rs b/zcash_client_backend/src/scan.rs index 0eb9abedb5..e7b8fd3be6 100644 --- a/zcash_client_backend/src/scan.rs +++ b/zcash_client_backend/src/scan.rs @@ -9,7 +9,7 @@ use std::sync::{ use memuse::DynamicUsage; use zcash_note_encryption::{ - batch, BatchDomain, Domain, ShieldedOutput, COMPACT_NOTE_SIZE, ENC_CIPHERTEXT_SIZE, + batch, BatchDomain, Domain, ShieldedOutput, }; use zcash_primitives::{block::BlockHash, transaction::TxId}; @@ -58,7 +58,7 @@ pub(crate) trait Decryptor { /// A decryptor of outputs as encoded in transactions. pub(crate) struct FullDecryptor; -impl> Decryptor +impl> Decryptor for FullDecryptor { type Memo = D::Memo; @@ -85,7 +85,7 @@ impl> Decryptor> Decryptor +impl> Decryptor for CompactDecryptor { type Memo = (); diff --git a/zcash_client_backend/src/scanning.rs b/zcash_client_backend/src/scanning.rs index 78db76aefb..a6a5c582cc 100644 --- a/zcash_client_backend/src/scanning.rs +++ b/zcash_client_backend/src/scanning.rs @@ -14,7 +14,7 @@ use subtle::{ConditionallySelectable, ConstantTimeEq, CtOption}; use tracing::{debug, trace}; use zcash_keys::keys::UnifiedFullViewingKey; -use zcash_note_encryption::{batch, BatchDomain, Domain, ShieldedOutput, COMPACT_NOTE_SIZE}; +use zcash_note_encryption::{batch, BatchDomain, Domain, ShieldedOutput}; use zcash_primitives::{ consensus::{self, BlockHeight, NetworkUpgrade}, transaction::{components::sapling::zip212_enforcement, TxId}, @@ -1038,7 +1038,7 @@ fn find_received< Nf, IvkTag: Copy + std::hash::Hash + Eq + Send + 'static, SK: ScanningKeyOps, - Output: ShieldedOutput, + Output: ShieldedOutput, NoteCommitment, >( block_height: BlockHeight, From 307d025f83b3f12e8e55296be27b7c94e8874dd0 Mon Sep 17 00:00:00 2001 From: alexey <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 27 May 2024 15:53:20 +0200 Subject: [PATCH 33/85] Add into_transaction method --- zcash_primitives/src/transaction/builder.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index d02d5b1b99..99acc9b2aa 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -281,6 +281,11 @@ impl BuildResult { pub fn orchard_meta(&self) -> &orchard::builder::BundleMetadata { &self.orchard_meta } + + /// Consumes BuildResult and returns the transaction that was constructed by the builder. + pub fn into_transaction(self) -> Transaction { + self.transaction + } } /// Generates a [`Transaction`] from its inputs and outputs. From ce0a3915850aa6828a01113099205920ccc73e1a Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 10 Jun 2024 15:19:25 +0200 Subject: [PATCH 34/85] Use nu7 zcash_unstable flag --- Cargo.lock | 112 +++++----- components/zcash_protocol/src/consensus.rs | 63 ++++-- .../zcash_protocol/src/local_consensus.rs | 46 +++- zcash_client_sqlite/src/testing.rs | 4 +- zcash_client_sqlite/src/wallet.rs | 2 + zcash_client_sqlite/src/wallet/init.rs | 2 + zcash_primitives/src/transaction/builder.rs | 47 +++- .../src/transaction/components/issuance.rs | 23 +- .../src/transaction/components/orchard.rs | 4 +- zcash_primitives/src/transaction/mod.rs | 207 +++++++++++++----- zcash_primitives/src/transaction/sighash.rs | 10 +- .../src/transaction/sighash_v4.rs | 4 +- .../src/transaction/sighash_v5.rs | 5 +- .../{sighash_v6.rs => sighash_v7.rs} | 8 +- zcash_primitives/src/transaction/tests.rs | 15 +- zcash_primitives/src/transaction/txid.rs | 29 ++- 16 files changed, 404 insertions(+), 177 deletions(-) rename zcash_primitives/src/transaction/{sighash_v6.rs => sighash_v7.rs} (79%) diff --git a/Cargo.lock b/Cargo.lock index a13dba0856..d0be52828b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -115,7 +115,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -126,7 +126,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -193,9 +193,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" dependencies = [ "addr2line", "cc", @@ -399,9 +399,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" [[package]] name = "cfg-if" @@ -853,7 +853,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -906,9 +906,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "group" @@ -1127,9 +1127,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" dependencies = [ "bytes", "futures-channel", @@ -1530,9 +1530,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" dependencies = [ "memchr", ] @@ -1558,7 +1558,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0-ak#e2abb4244d4378aaa5c531276fb0cc0bd9ab64de" +source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0-ak#f7789bfb90c0435e5ca945ac7ddb5c92f8494ee6" dependencies = [ "aes", "bitvec", @@ -1604,9 +1604,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -1694,7 +1694,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -1727,9 +1727,9 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plotters" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" dependencies = [ "num-traits", "plotters-backend", @@ -1740,15 +1740,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" +checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" [[package]] name = "plotters-svg" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" dependencies = [ "plotters-backend", ] @@ -1799,7 +1799,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -1814,9 +1814,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.83" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" dependencies = [ "unicode-ident", ] @@ -1868,7 +1868,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.65", + "syn 2.0.66", "tempfile", ] @@ -1882,7 +1882,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -2025,9 +2025,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.4" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", @@ -2037,9 +2037,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -2048,9 +2048,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "rfc6979" @@ -2202,7 +2202,7 @@ dependencies = [ [[package]] name = "sapling-crypto" version = "0.1.3" -source = "git+https://github.com/QED-it/sapling-crypto?branch=orchard-backward-compatibility#d8e34724d8febd338e8aecfac240bddc0a55dac1" +source = "git+https://github.com/QED-it/sapling-crypto?branch=orchard-backward-compatibility#d1aa6205f1e12af7364b768f80b085618dee781a" dependencies = [ "aes", "bellman", @@ -2313,22 +2313,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.202" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -2484,9 +2484,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.65" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", @@ -2540,7 +2540,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -2597,9 +2597,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", @@ -2682,7 +2682,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -2736,7 +2736,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] @@ -2938,7 +2938,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -2960,7 +2960,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3358,7 +3358,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants#17046ee716d79cc8c069cd4497a56ff10d770c74" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants#cf00807f5a014e434c887a1f4c8a3d04678f57d3" dependencies = [ "chacha20", "chacha20poly1305", @@ -3482,14 +3482,14 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -3502,7 +3502,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.66", ] [[package]] diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index ad99d92956..b9f6014c78 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -354,8 +354,10 @@ impl Parameters for MainNetwork { NetworkUpgrade::Heartwood => Some(BlockHeight(903_000)), NetworkUpgrade::Canopy => Some(BlockHeight(1_046_400)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_687_104)), - // #[cfg(zcash_unstable = "nu6")] - NetworkUpgrade::Nu6 => Some(BlockHeight(1_687_105)), + #[cfg(zcash_unstable = "nu6")] + NetworkUpgrade::Nu6 => None, + #[cfg(zcash_unstable = "nu7")] + NetworkUpgrade::Nu7 => Some(BlockHeight(1_687_107)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -384,8 +386,10 @@ impl Parameters for TestNetwork { NetworkUpgrade::Heartwood => Some(BlockHeight(903_800)), NetworkUpgrade::Canopy => Some(BlockHeight(1_028_500)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_842_420)), - // #[cfg(zcash_unstable = "nu6")] - NetworkUpgrade::Nu6 => Some(BlockHeight(1_842_421)), + #[cfg(zcash_unstable = "nu6")] + NetworkUpgrade::Nu6 => None, + #[cfg(zcash_unstable = "nu7")] + NetworkUpgrade::Nu7 => Some(BlockHeight(1_842_421)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -452,8 +456,13 @@ pub enum NetworkUpgrade { /// The [Nu6] network upgrade. /// /// [Nu6]: https://z.cash/upgrade/nu6/ - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] Nu6, + /// The [Nu7] network upgrade. + /// + /// [Nu7]: https://z.cash/upgrade/nu7/ + #[cfg(zcash_unstable = "nu7")] + Nu7, /// The ZFUTURE network upgrade. /// /// This upgrade is expected never to activate on mainnet; @@ -474,8 +483,10 @@ impl fmt::Display for NetworkUpgrade { NetworkUpgrade::Heartwood => write!(f, "Heartwood"), NetworkUpgrade::Canopy => write!(f, "Canopy"), NetworkUpgrade::Nu5 => write!(f, "Nu5"), - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => write!(f, "Nu6"), + #[cfg(zcash_unstable = "nu7")] + NetworkUpgrade::Nu7 => write!(f, "Nu7"), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => write!(f, "ZFUTURE"), } @@ -491,8 +502,10 @@ impl NetworkUpgrade { NetworkUpgrade::Heartwood => BranchId::Heartwood, NetworkUpgrade::Canopy => BranchId::Canopy, NetworkUpgrade::Nu5 => BranchId::Nu5, - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => BranchId::Nu6, + #[cfg(zcash_unstable = "nu7")] + NetworkUpgrade::Nu7 => BranchId::Nu7, #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => BranchId::ZFuture, } @@ -510,8 +523,10 @@ const UPGRADES_IN_ORDER: &[NetworkUpgrade] = &[ NetworkUpgrade::Heartwood, NetworkUpgrade::Canopy, NetworkUpgrade::Nu5, - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6, + #[cfg(zcash_unstable = "nu7")] + NetworkUpgrade::Nu7, ]; /// The "grace period" defined in [ZIP 212]. @@ -549,8 +564,11 @@ pub enum BranchId { /// The consensus rules deployed by [`NetworkUpgrade::Nu5`]. Nu5, /// The consensus rules deployed by [`NetworkUpgrade::Nu6`]. - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] Nu6, + /// The consensus rules deployed by [`NetworkUpgrade::Nu7`]. + #[cfg(zcash_unstable = "nu7")] + Nu7, /// Candidates for future consensus rules; this branch will never /// activate on mainnet. #[cfg(zcash_unstable = "zfuture")] @@ -571,8 +589,10 @@ impl TryFrom for BranchId { 0xf5b9_230b => Ok(BranchId::Heartwood), 0xe9ff_75a6 => Ok(BranchId::Canopy), 0xc2d6_d0b4 => Ok(BranchId::Nu5), - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] 0xc8e7_1055 => Ok(BranchId::Nu6), + #[cfg(zcash_unstable = "nu7")] + 0x7777_7777 => Ok(BranchId::Nu7), #[cfg(zcash_unstable = "zfuture")] 0xffff_ffff => Ok(BranchId::ZFuture), _ => Err("Unknown consensus branch ID"), @@ -590,8 +610,10 @@ impl From for u32 { BranchId::Heartwood => 0xf5b9_230b, BranchId::Canopy => 0xe9ff_75a6, BranchId::Nu5 => 0xc2d6_d0b4, - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => 0xc8e7_1055, + #[cfg(zcash_unstable = "nu7")] + BranchId::Nu7 => 0x7777_7777, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => 0xffff_ffff, } @@ -664,7 +686,7 @@ impl BranchId { let upper = None; (lower, upper) }), - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => params.activation_height(NetworkUpgrade::Nu6).map(|lower| { #[cfg(feature = "zfuture")] let upper = params.activation_height(NetworkUpgrade::ZFuture); @@ -672,6 +694,14 @@ impl BranchId { let upper = None; (lower, upper) }), + #[cfg(zcash_unstable = "nu7")] + BranchId::Nu7 => params.activation_height(NetworkUpgrade::Nu7).map(|lower| { + #[cfg(feature = "zfuture")] + let upper = params.activation_height(NetworkUpgrade::ZFuture); + #[cfg(not(feature = "zfuture"))] + let upper = None; + (lower, upper) + }), #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => params .activation_height(NetworkUpgrade::ZFuture) @@ -700,8 +730,10 @@ pub mod testing { BranchId::Heartwood, BranchId::Canopy, BranchId::Nu5, - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] BranchId::Nu6, + #[cfg(zcash_unstable = "nu7")] + BranchId::Nu7, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture, ]) @@ -795,9 +827,10 @@ mod tests { BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_687_104)), BranchId::Nu5, ); + #[cfg(zcash_unstable = "nu7")] assert_eq!( - BranchId::for_height(&MAIN_NETWORK, BlockHeight(5_000_000)), - BranchId::Nu6, + BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_842_421)), + BranchId::Nu7, ); } } diff --git a/components/zcash_protocol/src/local_consensus.rs b/components/zcash_protocol/src/local_consensus.rs index 1e48ddc263..154c4bc0b9 100644 --- a/components/zcash_protocol/src/local_consensus.rs +++ b/components/zcash_protocol/src/local_consensus.rs @@ -37,8 +37,10 @@ pub struct LocalNetwork { pub heartwood: Option, pub canopy: Option, pub nu5: Option, - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] pub nu6: Option, + #[cfg(zcash_unstable = "nu7")] + pub nu7: Option, #[cfg(zcash_unstable = "zfuture")] pub z_future: Option, } @@ -57,8 +59,10 @@ impl Parameters for LocalNetwork { NetworkUpgrade::Heartwood => self.heartwood, NetworkUpgrade::Canopy => self.canopy, NetworkUpgrade::Nu5 => self.nu5, - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => self.nu6, + #[cfg(zcash_unstable = "nu7")] + NetworkUpgrade::Nu7 => self.nu7, #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => self.z_future, } @@ -81,8 +85,10 @@ mod tests { let expected_heartwood = BlockHeight::from_u32(4); let expected_canopy = BlockHeight::from_u32(5); let expected_nu5 = BlockHeight::from_u32(6); - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); + #[cfg(zcash_unstable = "nu7")] + let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -93,8 +99,10 @@ mod tests { heartwood: Some(expected_heartwood), canopy: Some(expected_canopy), nu5: Some(expected_nu5), - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), + #[cfg(zcash_unstable = "nu7")] + nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), }; @@ -105,8 +113,10 @@ mod tests { assert!(regtest.is_nu_active(NetworkUpgrade::Heartwood, expected_heartwood)); assert!(regtest.is_nu_active(NetworkUpgrade::Canopy, expected_canopy)); assert!(regtest.is_nu_active(NetworkUpgrade::Nu5, expected_nu5)); - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] assert!(regtest.is_nu_active(NetworkUpgrade::Nu6, expected_nu6)); + #[cfg(zcash_unstable = "nu7")] + assert!(regtest.is_nu_active(NetworkUpgrade::Nu7, expected_nu7)); #[cfg(zcash_unstable = "zfuture")] assert!(!regtest.is_nu_active(NetworkUpgrade::ZFuture, expected_nu5)); } @@ -119,8 +129,10 @@ mod tests { let expected_heartwood = BlockHeight::from_u32(4); let expected_canopy = BlockHeight::from_u32(5); let expected_nu5 = BlockHeight::from_u32(6); - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); + #[cfg(zcash_unstable = "nu7")] + let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -131,8 +143,10 @@ mod tests { heartwood: Some(expected_heartwood), canopy: Some(expected_canopy), nu5: Some(expected_nu5), - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), + #[cfg(zcash_unstable = "nu7")] + nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), }; @@ -161,6 +175,16 @@ mod tests { regtest.activation_height(NetworkUpgrade::Nu5), Some(expected_nu5) ); + #[cfg(zcash_unstable = "nu6")] + assert_eq!( + regtest.activation_height(NetworkUpgrade::Nu6), + Some(expected_nu6) + ); + #[cfg(zcash_unstable = "nu7")] + assert_eq!( + regtest.activation_height(NetworkUpgrade::Nu7), + Some(expected_nu7) + ); #[cfg(zcash_unstable = "zfuture")] assert_eq!( regtest.activation_height(NetworkUpgrade::ZFuture), @@ -176,8 +200,10 @@ mod tests { let expected_heartwood = BlockHeight::from_u32(4); let expected_canopy = BlockHeight::from_u32(5); let expected_nu5 = BlockHeight::from_u32(6); - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); + #[cfg(zcash_unstable = "nu7")] + let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -188,8 +214,10 @@ mod tests { heartwood: Some(expected_heartwood), canopy: Some(expected_canopy), nu5: Some(expected_nu5), - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), + #[cfg(zcash_unstable = "nu7")] + nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), }; diff --git a/zcash_client_sqlite/src/testing.rs b/zcash_client_sqlite/src/testing.rs index 0ffcb77a4a..f643c37c5d 100644 --- a/zcash_client_sqlite/src/testing.rs +++ b/zcash_client_sqlite/src/testing.rs @@ -127,8 +127,10 @@ impl TestBuilder<()> { heartwood: Some(BlockHeight::from_u32(100_000)), canopy: Some(BlockHeight::from_u32(100_000)), nu5: Some(BlockHeight::from_u32(100_000)), - // #[cfg(zcash_unstable = "nu6")] + #[cfg(zcash_unstable = "nu6")] nu6: None, + #[cfg(zcash_unstable = "nu7")] + nu7: Some(BlockHeight::from_u32(100_000)), #[cfg(zcash_unstable = "zfuture")] z_future: None, }; diff --git a/zcash_client_sqlite/src/wallet.rs b/zcash_client_sqlite/src/wallet.rs index d71bf8d43e..e72561e0cf 100644 --- a/zcash_client_sqlite/src/wallet.rs +++ b/zcash_client_sqlite/src/wallet.rs @@ -1490,7 +1490,9 @@ pub(crate) fn get_transaction( tx_data.sprout_bundle().cloned(), tx_data.sapling_bundle().cloned(), tx_data.orchard_bundle().cloned(), + #[cfg(zcash_unstable = "nu7")] tx_data.orchard_zsa_bundle().cloned(), + #[cfg(zcash_unstable = "nu7")] tx_data.issue_bundle().cloned(), ) .freeze() diff --git a/zcash_client_sqlite/src/wallet/init.rs b/zcash_client_sqlite/src/wallet/init.rs index a68d5a1c1a..ff9572f89c 100644 --- a/zcash_client_sqlite/src/wallet/init.rs +++ b/zcash_client_sqlite/src/wallet/init.rs @@ -1275,7 +1275,9 @@ mod tests { None, None, None, + #[cfg(zcash_unstable = "nu7")] None, + #[cfg(zcash_unstable = "nu7")] None, ) .freeze() diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 99acc9b2aa..9bd383222b 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -51,12 +51,20 @@ use crate::{ use crate::transaction::components::amount::NonNegativeAmount; use crate::transaction::components::sapling::zip212_enforcement; -use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; -use orchard::issuance::{IssueBundle, IssueInfo}; -use orchard::keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}; + use orchard::note::AssetBase; -use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; +use orchard::orchard_flavors::{ OrchardVanilla, OrchardZSA }; + +#[cfg(zcash_unstable = "nu7")] use rand_core::OsRng; +#[cfg(zcash_unstable = "nu7")] +use orchard::{ + issuance::{IssueInfo, IssueBundle}, + keys::{IssuanceAuthorizingKey, IssuanceValidatingKey} +}; +use zcash_protocol::value::ZatBalance; +#[cfg(zcash_unstable = "nu7")] +use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -297,7 +305,9 @@ pub struct Builder<'a, P, U: sapling::builder::ProverProgress> { transparent_builder: TransparentBuilder, sapling_builder: Option, orchard_builder: Option, + #[cfg(zcash_unstable = "nu7")] issuance_builder: Option>, + #[cfg(zcash_unstable = "nu7")] issuance_key: Option, // TODO: In the future, instead of taking the spending keys as arguments when calling // `add_sapling_spend` or `add_orchard_spend`, we will build an unauthorized, unproven @@ -367,10 +377,9 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { build_config: BuildConfig, ) -> Self { - let is_orchard_zsa_enabled = params.is_nu_active(NetworkUpgrade::Nu6, target_height); let is_orchard_enabled = params.is_nu_active(NetworkUpgrade::Nu5, target_height); - let orchard_builder = if is_orchard_enabled || is_orchard_zsa_enabled { + let orchard_builder = if is_orchard_enabled { build_config .orchard_builder_config() .map(|(bundle_type, anchor)| orchard::builder::Builder::new(bundle_type, anchor)) @@ -396,7 +405,9 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { transparent_builder: TransparentBuilder::empty(), sapling_builder, orchard_builder, + #[cfg(zcash_unstable = "nu7")] issuance_builder: None, + #[cfg(zcash_unstable = "nu7")] issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), @@ -426,7 +437,9 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { transparent_builder: self.transparent_builder, sapling_builder: self.sapling_builder, orchard_builder: self.orchard_builder, + #[cfg(zcash_unstable = "nu7")] issuance_builder: self.issuance_builder, + #[cfg(zcash_unstable = "nu7")] issuance_key: self.issuance_key, sapling_asks: self.sapling_asks, orchard_saks: self.orchard_saks, @@ -437,6 +450,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// Adds an Issuance action to the transaction. + #[cfg(zcash_unstable = "nu7")] pub fn init_issue_bundle( &mut self, ik: IssuanceAuthorizingKey, @@ -464,6 +478,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds an Issuance action to the transaction. + #[cfg(zcash_unstable = "nu7")] pub fn add_issuance( &mut self, asset_desc: String, @@ -482,6 +497,8 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { Ok(()) } + /// Adds a Burn action to the transaction. + #[cfg(zcash_unstable = "nu7")] pub fn add_burn( &mut self, value: u64, @@ -500,6 +517,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// /// Returns an error if the given Merkle path does not have the required anchor for /// the given note. + #[cfg(zcash_unstable = "nu7")] pub fn add_orchard_zsa_spend( &mut self, sk: &orchard::keys::SpendingKey, @@ -510,6 +528,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds an Orchard ZSA output to the transaction. + #[cfg(zcash_unstable = "nu7")] pub fn add_orchard_zsa_output( &mut self, ovk: Option, @@ -861,7 +880,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< }; let mut unproven_orchard_bundle = None; - let mut unproven_orchard_zsa_bundle = None; + let mut unproven_orchard_zsa_bundle: Option, orchard::builder::Unauthorized>, ZatBalance, OrchardZSA>> = None; let mut orchard_meta = orchard::builder::BundleMetadata::empty(); if let Some(builder) = self.orchard_builder { @@ -876,12 +895,10 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< } }; - let unauthorized_issue_bundle = self.issuance_builder; - #[cfg(zcash_unstable = "zfuture")] let (tze_bundle, tze_signers) = self.tze_builder.build(); - let unauthed_tx: TransactionData = TransactionData { + let unauthed_tx: TransactionData = TransactionData { version, consensus_branch_id: BranchId::for_height(&self.params, self.target_height), lock_time: 0, @@ -890,8 +907,10 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: None, sapling_bundle, orchard_bundle: unproven_orchard_bundle, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: unproven_orchard_zsa_bundle, - issue_bundle: unauthorized_issue_bundle, + #[cfg(zcash_unstable = "nu7")] + issue_bundle: self.issuance_builder, #[cfg(zcash_unstable = "zfuture")] tze_bundle, }; @@ -954,6 +973,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .transpose() .map_err(Error::OrchardBuild)?; + #[cfg(zcash_unstable = "nu7")] let orchard_zsa_bundle = unauthed_tx .orchard_zsa_bundle .map(|b| { @@ -972,6 +992,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .transpose() .map_err(Error::OrchardBuild)?; + #[cfg(zcash_unstable = "nu7")] let issue_bundle = unauthed_tx .issue_bundle .map(|b| b.prepare(*shielded_sig_commitment.as_ref())) @@ -987,7 +1008,9 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: unauthed_tx.sprout_bundle, sapling_bundle, orchard_bundle, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle, + #[cfg(zcash_unstable = "nu7")] issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -1150,7 +1173,9 @@ mod tests { tze_builder: std::marker::PhantomData, progress_notifier: (), orchard_builder: None, + #[cfg(zcash_unstable = "nu7")] issuance_builder: None, + #[cfg(zcash_unstable = "nu7")] issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index aafb19e199..c85531d14b 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -1,6 +1,6 @@ use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use nonempty::NonEmpty; -use orchard::issuance::{IssueAction, IssueBundle, Signed}; +use orchard::issuance::{IssueAction, IssueAuth, IssueBundle, Signed}; use orchard::keys::IssuanceValidatingKey; use orchard::note::{AssetBase, RandomSeed, Rho}; use orchard::value::NoteValue; @@ -10,8 +10,25 @@ use std::io; use std::io::{Read, Write}; use zcash_encoding::{CompactSize, Vector}; + +pub trait MapIssueAuth { + fn map_issue_authorization(&self, a: A) -> B; +} + +/// The identity map. +/// +/// This can be used with [`TransactionData::map_authorization`] when you want to map the +/// authorization of a subset of the transaction's bundles. +/// +/// [`TransactionData::map_authorization`]: crate::transaction::TransactionData::map_authorization +impl MapIssueAuth for () { + fn map_issue_authorization(&self, a: Signed) -> Signed { + a + } +} + /// Reads an [`orchard::Bundle`] from a v5 transaction format. -pub fn read_v6_bundle(mut reader: R) -> io::Result>> { +pub fn read_v7_bundle(mut reader: R) -> io::Result>> { let actions = Vector::read(&mut reader, |r| read_action(r))?; if actions.is_empty() { @@ -97,7 +114,7 @@ fn read_rseed(mut reader: R, nullifier: &Rho) -> io::Result } /// Writes an [`IssueBundle`] in the v5 transaction format. -pub fn write_v6_bundle( +pub fn write_v7_bundle( bundle: Option<&IssueBundle>, mut writer: W, ) -> io::Result<()> { diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index e34c805e19..4eebf7b057 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -7,7 +7,7 @@ use byteorder::{ReadBytesExt, WriteBytesExt}; use nonempty::NonEmpty; use orchard::note::AssetBase; use orchard::note_encryption::OrchardDomain; -use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; +use orchard::orchard_flavors::{OrchardVanilla, OrchardZSA}; use orchard::{ bundle::{Authorization, Authorized, Flags}, note::{ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, @@ -403,7 +403,7 @@ pub mod testing { use crate::transaction::components::Amount; use crate::transaction::components::amount::testing::arb_amount; use crate::transaction::TxVersion; - use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; + use orchard::orchard_flavors::{OrchardVanilla, OrchardZSA}; prop_compose! { pub fn arb_bundle(n_actions: usize)( diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 53796e327c..a88822c962 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -5,7 +5,7 @@ pub mod fees; pub mod sighash; pub mod sighash_v4; pub mod sighash_v5; -pub mod sighash_v6; +pub mod sighash_v7; pub mod txid; pub mod util; @@ -16,8 +16,7 @@ use blake2b_simd::Hash as Blake2bHash; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use memuse::DynamicUsage; use orchard::builder::Unproven; -use orchard::issuance::{IssueAuth, IssueBundle, Signed}; -use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; +use orchard::orchard_flavors::OrchardVanilla; use std::convert::TryFrom; use std::fmt; use std::fmt::Debug; @@ -29,6 +28,13 @@ use crate::{ consensus::{BlockHeight, BranchId}, sapling::{self, builder as sapling_builder}, }; + +#[cfg(zcash_unstable = "nu7")] +use orchard::{ + orchard_flavors::OrchardZSA, + issuance::IssueBundle +}; +#[cfg(zcash_unstable = "nu7")] use crate::transaction::components::issuance; use self::{ @@ -54,8 +60,10 @@ const SAPLING_TX_VERSION: u32 = 4; const V5_TX_VERSION: u32 = 5; const V5_VERSION_GROUP_ID: u32 = 0x26A7270A; -const V6_TX_VERSION: u32 = 6; -const V6_VERSION_GROUP_ID: u32 = 0x26A7270B; // TODO ??? +#[cfg(zcash_unstable = "nu7")] +const V7_TX_VERSION: u32 = 7; +#[cfg(zcash_unstable = "nu7")] +const V7_VERSION_GROUP_ID: u32 = 0x26A7270C; // TODO ??? /// These versions are used exclusively for in-development transaction /// serialization, and will never be active under the consensus rules. @@ -139,7 +147,8 @@ pub enum TxVersion { Overwinter, Sapling, Zip225, - Zsa, // TODO do we need this or shall we use Zip225? + #[cfg(zcash_unstable = "nu7")] + Zsa, #[cfg(zcash_unstable = "zfuture")] ZFuture, } @@ -155,7 +164,8 @@ impl TxVersion { (OVERWINTER_TX_VERSION, OVERWINTER_VERSION_GROUP_ID) => Ok(TxVersion::Overwinter), (SAPLING_TX_VERSION, SAPLING_VERSION_GROUP_ID) => Ok(TxVersion::Sapling), (V5_TX_VERSION, V5_VERSION_GROUP_ID) => Ok(TxVersion::Zip225), - (V6_TX_VERSION, V6_VERSION_GROUP_ID) => Ok(TxVersion::Zsa), + #[cfg(zcash_unstable = "nu7")] + (V7_TX_VERSION, V7_VERSION_GROUP_ID) => Ok(TxVersion::Zsa), #[cfg(zcash_unstable = "zfuture")] (ZFUTURE_TX_VERSION, ZFUTURE_VERSION_GROUP_ID) => Ok(TxVersion::ZFuture), _ => Err(io::Error::new( @@ -186,7 +196,8 @@ impl TxVersion { TxVersion::Overwinter => OVERWINTER_TX_VERSION, TxVersion::Sapling => SAPLING_TX_VERSION, TxVersion::Zip225 => V5_TX_VERSION, - TxVersion::Zsa => V6_TX_VERSION, + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => V7_TX_VERSION, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_TX_VERSION, } @@ -198,7 +209,8 @@ impl TxVersion { TxVersion::Overwinter => OVERWINTER_VERSION_GROUP_ID, TxVersion::Sapling => SAPLING_VERSION_GROUP_ID, TxVersion::Zip225 => V5_VERSION_GROUP_ID, - TxVersion::Zsa => V6_VERSION_GROUP_ID, + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => V7_VERSION_GROUP_ID, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_VERSION_GROUP_ID, } @@ -217,7 +229,9 @@ impl TxVersion { match self { TxVersion::Sprout(v) => *v >= 2u32, TxVersion::Overwinter | TxVersion::Sapling => true, - TxVersion::Zip225 | TxVersion::Zsa => false, + TxVersion::Zip225 => false, + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => false, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -233,6 +247,7 @@ impl TxVersion { TxVersion::Sprout(_) | TxVersion::Overwinter => false, TxVersion::Sapling => true, TxVersion::Zip225 => true, + #[cfg(zcash_unstable = "nu7")] TxVersion::Zsa => true, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, @@ -242,17 +257,27 @@ impl TxVersion { /// Returns `true` if this transaction version supports the Orchard protocol. pub fn has_orchard(&self) -> bool { match self { - TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling | TxVersion::Zsa => { + TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => { false } TxVersion::Zip225 => true, + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => false, #[cfg(feature = "zfuture")] TxVersion::ZFuture => true, } } pub fn has_zsa(&self) -> bool { - matches!(self, TxVersion::Zsa) + match self { + TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling | TxVersion::Zip225 => { + false + } + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => true, + #[cfg(feature = "zfuture")] + TxVersion::ZFuture => false, + } } #[cfg(zcash_unstable = "zfuture")] @@ -269,8 +294,10 @@ impl TxVersion { TxVersion::Sapling } BranchId::Nu5 => TxVersion::Zip225, - // #[cfg(zcash_unstable = "nu6")] - BranchId::Nu6 => TxVersion::Zsa, + #[cfg(zcash_unstable = "nu6")] + BranchId::Nu6 => TxVersion::Zip225, + #[cfg(zcash_unstable = "nu7")] + BranchId::Nu7 => TxVersion::Zsa, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => TxVersion::ZFuture, } @@ -282,8 +309,13 @@ pub trait Authorization { type TransparentAuth: transparent::Authorization; type SaplingAuth: sapling::bundle::Authorization; type OrchardAuth: orchard::bundle::Authorization; + + #[cfg(zcash_unstable = "nu7")] type OrchardZsaAuth: orchard::bundle::Authorization; + #[cfg(zcash_unstable = "nu7")] + type IssueAuth: orchard::issuance::IssueAuth; + #[cfg(zcash_unstable = "zfuture")] type TzeAuth: tze::Authorization; } @@ -296,8 +328,13 @@ impl Authorization for Authorized { type TransparentAuth = transparent::Authorized; type SaplingAuth = sapling::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; + + #[cfg(zcash_unstable = "nu7")] type OrchardZsaAuth = orchard::bundle::Authorized; + #[cfg(zcash_unstable = "nu7")] + type IssueAuth = orchard::issuance::Signed; + #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::Authorized; } @@ -314,9 +351,14 @@ impl Authorization for Unauthorized { sapling_builder::InProgress; type OrchardAuth = orchard::builder::InProgress, orchard::builder::Unauthorized>; + + #[cfg(zcash_unstable = "nu7")] type OrchardZsaAuth = orchard::builder::InProgress, orchard::builder::Unauthorized>; + #[cfg(zcash_unstable = "nu7")] + type IssueAuth = orchard::issuance::Unauthorized; + #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::builder::Unauthorized; } @@ -325,13 +367,13 @@ impl Authorization for Unauthorized { #[derive(Debug)] pub struct Transaction { txid: TxId, - data: TransactionData, + data: TransactionData, } impl Deref for Transaction { - type Target = TransactionData; + type Target = TransactionData; - fn deref(&self) -> &TransactionData { + fn deref(&self) -> &TransactionData { &self.data } } @@ -344,7 +386,7 @@ impl PartialEq for Transaction { /// The information contained in a Zcash transaction. #[derive(Debug)] -pub struct TransactionData { +pub struct TransactionData { version: TxVersion, consensus_branch_id: BranchId, lock_time: u32, @@ -353,13 +395,15 @@ pub struct TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: Option>, - issue_bundle: Option>, + #[cfg(zcash_unstable = "nu7")] + issue_bundle: Option>, #[cfg(feature = "zfuture")] tze_bundle: Option>, } -impl TransactionData { +impl TransactionData { /// Constructs a `TransactionData` from its constituent parts. #[allow(clippy::too_many_arguments)] pub fn from_parts( @@ -371,8 +415,10 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: Option>, - issue_bundle: Option>, + #[cfg(zcash_unstable = "nu7")] + issue_bundle: Option>, ) -> Self { TransactionData { version, @@ -383,7 +429,9 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle, + #[cfg(zcash_unstable = "nu7")] issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, @@ -458,13 +506,15 @@ impl TransactionData { self.orchard_bundle.as_ref() } + #[cfg(zcash_unstable = "nu7")] pub fn orchard_zsa_bundle( &self, ) -> Option<&orchard::Bundle> { self.orchard_zsa_bundle.as_ref() } - pub fn issue_bundle(&self) -> Option<&IssueBundle> { + #[cfg(zcash_unstable = "nu7")] + pub fn issue_bundle(&self) -> Option<&IssueBundle> { self.issue_bundle.as_ref() } @@ -503,7 +553,7 @@ impl TransactionData { .ok_or_else(|| BalanceError::Overflow.into()) } - pub fn digest>(&self, digester: D) -> D::Digest { + pub fn digest>(&self, digester: D) -> D::Digest { digester.combine( digester.digest_header( self.version, @@ -513,17 +563,28 @@ impl TransactionData { ), digester.digest_transparent(self.transparent_bundle.as_ref()), digester.digest_sapling(self.sapling_bundle.as_ref()), - if self.version.has_zsa() { - digester.digest_orchard_zsa(self.orchard_zsa_bundle.as_ref()) - } else { - digester.digest_orchard(self.orchard_bundle.as_ref()) - }, + self.digest_orchard(&digester), + #[cfg(zcash_unstable = "nu7")] digester.digest_issue(self.issue_bundle.as_ref()), #[cfg(zcash_unstable = "zfuture")] digester.digest_tze(self.tze_bundle.as_ref()), ) } + #[cfg(not(zcash_unstable = "nu7"))] + fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { + digester.digest_orchard(self.orchard_bundle.as_ref()) + } + + #[cfg(zcash_unstable = "nu7")] + fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { + if self.version.has_zsa() { + digester.digest_orchard_zsa(self.orchard_zsa_bundle.as_ref()) + } else { + digester.digest_orchard(self.orchard_bundle.as_ref()) + } + } + /// Maps the bundles from one type to another. /// /// This shouldn't be necessary for most use cases; it is provided for handling the @@ -541,15 +602,20 @@ impl TransactionData { ) -> Option< orchard::bundle::Bundle, >, + #[cfg(zcash_unstable = "nu7")] f_zsa_orchard: impl FnOnce( Option>, ) -> Option< orchard::bundle::Bundle, >, + #[cfg(zcash_unstable = "nu7")] + f_issue: impl FnOnce( + Option>, + ) -> Option>, #[cfg(zcash_unstable = "zfuture")] f_tze: impl FnOnce( Option>, ) -> Option>, - ) -> TransactionData { + ) -> TransactionData { TransactionData { version: self.version, consensus_branch_id: self.consensus_branch_id, @@ -559,8 +625,10 @@ impl TransactionData { sprout_bundle: self.sprout_bundle, sapling_bundle: f_sapling(self.sapling_bundle), orchard_bundle: f_orchard(self.orchard_bundle), + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: f_zsa_orchard(self.orchard_zsa_bundle), - issue_bundle: self.issue_bundle, + #[cfg(zcash_unstable = "nu7")] + issue_bundle: f_issue(self.issue_bundle), #[cfg(zcash_unstable = "zfuture")] tze_bundle: f_tze(self.tze_bundle), } @@ -571,9 +639,10 @@ impl TransactionData { f_transparent: impl transparent::MapAuth, mut f_sapling: impl sapling_serialization::MapAuth, mut f_orchard: impl orchard_serialization::MapAuth, - mut f_orchard_zsa: impl orchard_serialization::MapAuth, + #[cfg(zcash_unstable = "nu7")] mut f_orchard_zsa: impl orchard_serialization::MapAuth, + #[cfg(zcash_unstable = "nu7")] f_issue: impl issuance::MapIssueAuth, #[cfg(zcash_unstable = "zfuture")] f_tze: impl tze::MapAuth, - ) -> TransactionData { + ) -> TransactionData { TransactionData { version: self.version, consensus_branch_id: self.consensus_branch_id, @@ -599,6 +668,7 @@ impl TransactionData { |f, a| f.map_authorization(a), ) }), + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: self.orchard_zsa_bundle.map(|b| { b.map_authorization( &mut f_orchard_zsa, @@ -606,14 +676,19 @@ impl TransactionData { |f, a| f.map_authorization(a), ) }), - issue_bundle: self.issue_bundle, + #[cfg(zcash_unstable = "nu7")] + issue_bundle: self.issue_bundle.map(|b| { + b.map_authorization( + |a| f_issue.map_issue_authorization(a), + ) + }), #[cfg(zcash_unstable = "zfuture")] tze_bundle: self.tze_bundle.map(|b| b.map_authorization(f_tze)), } } } -impl TransactionData { +impl TransactionData { pub fn sapling_value_balance(&self) -> Amount { self.sapling_bundle .as_ref() @@ -621,26 +696,27 @@ impl TransactionData { } } -impl TransactionData { +impl TransactionData { pub fn freeze(self) -> io::Result { Transaction::from_data(self) } } impl Transaction { - fn from_data(data: TransactionData) -> io::Result { + fn from_data(data: TransactionData) -> io::Result { match data.version { TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => { Self::from_data_v4(data) } TxVersion::Zip225 => Ok(Self::from_data_v5(data)), - TxVersion::Zsa => Ok(Self::from_data_v6(data)), + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => Ok(Self::from_data_v7(data)), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Ok(Self::from_data_v5(data)), } } - fn from_data_v4(data: TransactionData) -> io::Result { + fn from_data_v4(data: TransactionData) -> io::Result { let mut tx = Transaction { txid: TxId([0; 32]), data, @@ -651,7 +727,7 @@ impl Transaction { Ok(tx) } - fn from_data_v5(data: TransactionData) -> Self { + fn from_data_v5(data: TransactionData) -> Self { let txid = to_txid( data.version, data.consensus_branch_id, @@ -661,11 +737,12 @@ impl Transaction { Transaction { txid, data } } - fn from_data_v6(data: TransactionData) -> Self { + #[cfg(zcash_unstable = "nu7")] + fn from_data_v7(data: TransactionData) -> Self { Self::from_data_v5(data) } - pub fn into_data(self) -> TransactionData { + pub fn into_data(self) -> TransactionData { self.data } @@ -682,7 +759,8 @@ impl Transaction { Self::read_v4(reader, version, consensus_branch_id) } TxVersion::Zip225 => Self::read_v5(reader.into_base_reader(), version), - TxVersion::Zsa => Self::read_v6(reader.into_base_reader(), version), + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => Self::read_v7(reader.into_base_reader(), version), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Self::read_v5(reader.into_base_reader(), version), } @@ -759,7 +837,9 @@ impl Transaction { ) }), orchard_bundle: None, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: None, + #[cfg(zcash_unstable = "nu7")] issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, @@ -813,7 +893,9 @@ impl Transaction { sprout_bundle: None, sapling_bundle, orchard_bundle, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: None, + #[cfg(zcash_unstable = "nu7")] issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -843,13 +925,14 @@ impl Transaction { sapling_serialization::read_v5_bundle(reader) } - fn read_v6(mut reader: R, version: TxVersion) -> io::Result { + #[cfg(zcash_unstable = "nu7")] + fn read_v7(mut reader: R, version: TxVersion) -> io::Result { let (consensus_branch_id, lock_time, expiry_height) = Self::read_v5_header_fragment(&mut reader)?; let transparent_bundle = Self::read_transparent(&mut reader)?; let sapling_bundle = sapling_serialization::read_v5_bundle(&mut reader)?; let orchard_zsa_bundle = orchard_serialization::read_v6_bundle(&mut reader)?; - let issue_bundle = issuance::read_v6_bundle(&mut reader)?; + let issue_bundle = issuance::read_v7_bundle(&mut reader)?; #[cfg(feature = "zfuture")] let tze_bundle = if version.has_tze() { @@ -873,7 +956,7 @@ impl Transaction { tze_bundle, }; - Ok(Self::from_data_v6(data)) + Ok(Self::from_data_v7(data)) } #[cfg(zcash_unstable = "zfuture")] @@ -897,7 +980,8 @@ impl Transaction { self.write_v4(writer) } TxVersion::Zip225 => self.write_v5(writer), - TxVersion::Zsa => self.write_v6(writer), + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => self.write_v7(writer), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => self.write_v5(writer), } @@ -993,7 +1077,8 @@ impl Transaction { } - pub fn write_v6(&self, mut writer: W) -> io::Result<()> { + #[cfg(zcash_unstable = "nu7")] + pub fn write_v7(&self, mut writer: W) -> io::Result<()> { if self.sprout_bundle.is_some() { return Err(io::Error::new( io::ErrorKind::InvalidInput, @@ -1004,7 +1089,7 @@ impl Transaction { self.write_transparent(&mut writer)?; self.write_v5_sapling(&mut writer)?; orchard_serialization::write_v6_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; - issuance::write_v6_bundle(self.issue_bundle.as_ref(), &mut writer)?; + issuance::write_v7_bundle(self.issue_bundle.as_ref(), &mut writer)?; #[cfg(feature = "zfuture")] self.write_tze(&mut writer)?; Ok(()) @@ -1049,16 +1134,19 @@ pub struct TxDigests { pub transparent_digests: Option>, pub sapling_digest: Option, pub orchard_digest: Option, + #[cfg(zcash_unstable = "nu7")] pub issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] pub tze_digests: Option>, } -pub trait TransactionDigest { +pub trait TransactionDigest { type HeaderDigest; type TransparentDigest; type SaplingDigest; type OrchardDigest; + + #[cfg(zcash_unstable = "nu7")] type IssueDigest; #[cfg(zcash_unstable = "zfuture")] @@ -1089,12 +1177,14 @@ pub trait TransactionDigest { orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; + #[cfg(zcash_unstable = "nu7")] fn digest_orchard_zsa( &self, orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; - fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest; + #[cfg(zcash_unstable = "nu7")] + fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest; #[cfg(zcash_unstable = "zfuture")] fn digest_tze(&self, tze_bundle: Option<&tze::Bundle>) -> Self::TzeDigest; @@ -1105,6 +1195,7 @@ pub trait TransactionDigest { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, + #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest; @@ -1116,11 +1207,8 @@ pub enum DigestError { #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { - use orchard::issuance::Signed; use proptest::prelude::*; - use crate::consensus::BranchId; - use crate::transaction::components::issuance; use super::{ components::{ @@ -1134,6 +1222,8 @@ pub mod testing { #[cfg(zcash_unstable = "zfuture")] use super::components::tze::testing::{self as tze}; + use crate::transaction::components::issuance; + pub fn arb_txid() -> impl Strategy { prop::array::uniform32(any::()).prop_map(TxId::from_bytes) } @@ -1146,7 +1236,10 @@ pub mod testing { Just(TxVersion::Sapling).boxed() } BranchId::Nu5 => Just(TxVersion::Zip225).boxed(), - BranchId::Nu6 => Just(TxVersion::Zsa).boxed(), + #[cfg(zcash_unstable = "nu6")] + BranchId::Nu6 => Just(TxVersion::Zip225).boxed(), + #[cfg(zcash_unstable = "nu7")] + BranchId::Nu7 => Just(TxVersion::Zsa).boxed(), #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => Just(TxVersion::ZFuture).boxed(), } @@ -1165,8 +1258,8 @@ pub mod testing { orchard_zsa_bundle in orchard_testing::arb_zsa_bundle_for_version(version), issue_bundle in issuance::testing::arb_bundle_for_version(version), version in Just(version) - ) -> TransactionData { - TransactionData:: { + ) -> TransactionData { + TransactionData:: { version, consensus_branch_id, lock_time, @@ -1175,7 +1268,9 @@ pub mod testing { sprout_bundle: None, sapling_bundle, orchard_bundle, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle, + #[cfg(zcash_unstable = "nu7")] issue_bundle, } } diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index e7babf6d39..a5bfe6a5b2 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -1,5 +1,4 @@ use blake2b_simd::Hash as Blake2bHash; -use orchard::issuance::IssueAuth; use super::{ components::{amount::NonNegativeAmount, transparent}, @@ -14,7 +13,8 @@ use crate::{ #[cfg(zcash_unstable = "zfuture")] use {super::components::Amount, crate::extensions::transparent::Precondition}; -use crate::transaction::sighash_v6::v6_signature_hash; +#[cfg(zcash_unstable = "nu7")] +use crate::transaction::sighash_v7::v7_signature_hash; pub const SIGHASH_ALL: u8 = 0x01; pub const SIGHASH_NONE: u8 = 0x02; @@ -82,9 +82,8 @@ pub fn signature_hash< TA: TransparentAuthorizingContext, SA: sapling::bundle::Authorization, A: Authorization, - IA: IssueAuth, >( - tx: &TransactionData, + tx: &TransactionData, signable_input: &SignableInput<'a>, txid_parts: &TxDigests, ) -> SignatureHash { @@ -95,7 +94,8 @@ pub fn signature_hash< TxVersion::Zip225 => v5_signature_hash(tx, signable_input, txid_parts), - TxVersion::Zsa => v6_signature_hash(tx, signable_input, txid_parts), + #[cfg(zcash_unstable = "nu7")] + TxVersion::Zsa => v7_signature_hash(tx, signable_input, txid_parts), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => v5_signature_hash(tx, signable_input, txid_parts), diff --git a/zcash_primitives/src/transaction/sighash_v4.rs b/zcash_primitives/src/transaction/sighash_v4.rs index a53960b187..ad136e5f8d 100644 --- a/zcash_primitives/src/transaction/sighash_v4.rs +++ b/zcash_primitives/src/transaction/sighash_v4.rs @@ -1,6 +1,5 @@ use blake2b_simd::{Hash as Blake2bHash, Params as Blake2bParams}; use ff::PrimeField; -use orchard::issuance::IssueAuth; use crate::{ consensus::BranchId, @@ -136,9 +135,8 @@ fn shielded_outputs_hash(shielded_outputs: &[OutputDescription] pub fn v4_signature_hash< SA: sapling::bundle::Authorization, A: Authorization, - IA: IssueAuth, >( - tx: &TransactionData, + tx: &TransactionData, signable_input: &SignableInput<'_>, ) -> Blake2bHash { let hash_type = signable_input.hash_type(); diff --git a/zcash_primitives/src/transaction/sighash_v5.rs b/zcash_primitives/src/transaction/sighash_v5.rs index b789ecc41c..3ae6cb99d9 100644 --- a/zcash_primitives/src/transaction/sighash_v5.rs +++ b/zcash_primitives/src/transaction/sighash_v5.rs @@ -18,7 +18,6 @@ use crate::transaction::{ #[cfg(zcash_unstable = "zfuture")] use byteorder::WriteBytesExt; -use orchard::issuance::IssueAuth; #[cfg(zcash_unstable = "zfuture")] use zcash_encoding::{CompactSize, Vector}; @@ -174,9 +173,8 @@ pub fn tze_input_sigdigests( pub fn v5_signature_hash< TA: TransparentAuthorizingContext, A: Authorization, - IA: IssueAuth, >( - tx: &TransactionData, + tx: &TransactionData, signable_input: &SignableInput<'_>, txid_parts: &TxDigests, ) -> Blake2bHash { @@ -199,6 +197,7 @@ pub fn v5_signature_hash< ), txid_parts.sapling_digest, txid_parts.orchard_digest, + #[cfg(zcash_unstable = "nu7")] txid_parts.issue_digest, #[cfg(zcash_unstable = "zfuture")] tx.tze_bundle diff --git a/zcash_primitives/src/transaction/sighash_v6.rs b/zcash_primitives/src/transaction/sighash_v7.rs similarity index 79% rename from zcash_primitives/src/transaction/sighash_v6.rs rename to zcash_primitives/src/transaction/sighash_v7.rs index 6de4696aea..d4e59f5fe7 100644 --- a/zcash_primitives/src/transaction/sighash_v6.rs +++ b/zcash_primitives/src/transaction/sighash_v7.rs @@ -1,5 +1,4 @@ use blake2b_simd::Hash as Blake2bHash; -use orchard::issuance::IssueAuth; use crate::transaction::sighash_v5::v5_signature_hash; use crate::transaction::{ @@ -7,15 +6,14 @@ use crate::transaction::{ Authorization, TransactionData, TxDigests, }; -pub fn v6_signature_hash< +pub fn v7_signature_hash< TA: TransparentAuthorizingContext, A: Authorization, - IA: IssueAuth, >( - tx: &TransactionData, + tx: &TransactionData, signable_input: &SignableInput<'_>, txid_parts: &TxDigests, ) -> Blake2bHash { - // Currently to_hash is designed in a way that it supports both v5 and v6 signature hash + // Currently to_hash is designed in a way that it supports both v5 and v7 signature hash v5_signature_hash(tx, signable_input, txid_parts) } diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index a0434b4876..242b889e4d 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -1,5 +1,4 @@ use blake2b_simd::Hash as Blake2bHash; -use orchard::issuance::Signed; use std::ops::Deref; use proptest::prelude::*; @@ -57,10 +56,12 @@ fn check_roundtrip(tx: Transaction) -> Result<(), TestCaseError> { tx.orchard_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_bundle.as_ref().map(|v| *v.value_balance()) ); + #[cfg(zcash_unstable = "nu7")] prop_assert_eq!( tx.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()) ); + #[cfg(zcash_unstable = "zfuture")] if tx.issue_bundle.is_some() { prop_assert_eq!(tx.issue_bundle.as_ref(), txo.issue_bundle.as_ref()); } @@ -129,10 +130,11 @@ proptest! { } } +#[cfg(zcash_unstable = "nu7")] proptest! { #![proptest_config(ProptestConfig::with_cases(10))] #[test] - fn tx_serialization_roundtrip_v6(tx in arb_tx(BranchId::Nu6)) { + fn tx_serialization_roundtrip_v7(tx in arb_tx(BranchId::Nu7)) { check_roundtrip(tx)?; } } @@ -218,8 +220,13 @@ impl Authorization for TestUnauthorized { type TransparentAuth = TestTransparentAuth; type SaplingAuth = sapling::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; + + #[cfg(zcash_unstable = "nu7")] type OrchardZsaAuth = orchard::bundle::Authorized; + #[cfg(zcash_unstable = "nu7")] + type IssueAuth = orchard::issuance::Signed; + #[cfg(zcash_unstable = "zfuture")] type TzeAuth = tze::Authorized; } @@ -229,7 +236,7 @@ fn zip_0244() { fn to_test_txdata( tv: &self::data::zip_0244::TestVector, ) -> ( - TransactionData, + TransactionData, TxDigests, ) { let tx = Transaction::read(&tv.tx[..], BranchId::Nu5).unwrap(); @@ -283,7 +290,9 @@ fn zip_0244() { txdata.sprout_bundle().cloned(), txdata.sapling_bundle().cloned(), txdata.orchard_bundle().cloned(), + #[cfg(zcash_unstable = "nu7")] txdata.orchard_zsa_bundle().cloned(), + #[cfg(zcash_unstable = "nu7")] txdata.issue_bundle().cloned(), ); #[cfg(zcash_unstable = "zfuture")] diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index c454b3f775..7adcc7ecb9 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -6,8 +6,13 @@ use blake2b_simd::{Hash as Blake2bHash, Params, State}; use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; use orchard::bundle; -use orchard::issuance::{IssueAuth, IssueBundle, Signed}; -use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; +use orchard::orchard_flavors::OrchardVanilla; +#[cfg(zcash_unstable = "nu7")] +use orchard::{ + issuance::{IssueBundle, Signed}, + orchard_flavors::OrchardZSA +}; + use crate::{ consensus::{BlockHeight, BranchId}, @@ -300,11 +305,12 @@ fn hash_tze_txid_data(tze_digests: Option<&TzeDigests>) -> Blake2bH /// This implements the [TxId Digest section of ZIP 244](https://zips.z.cash/zip-0244#txid-digest) pub struct TxIdDigester; -impl TransactionDigest for TxIdDigester { +impl TransactionDigest for TxIdDigester { type HeaderDigest = Blake2bHash; type TransparentDigest = Option>; type SaplingDigest = Option; type OrchardDigest = Option; + #[cfg(zcash_unstable = "nu7")] type IssueDigest = Option; #[cfg(zcash_unstable = "zfuture")] @@ -343,6 +349,7 @@ impl TransactionDigest for TxIdDigester orchard_bundle.map(|b| b.commitment().0) } + #[cfg(zcash_unstable = "nu7")] fn digest_orchard_zsa( &self, orchard_bundle: Option<&bundle::Bundle>, @@ -350,7 +357,8 @@ impl TransactionDigest for TxIdDigester orchard_bundle.map(|b| b.commitment().0) } - fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { + #[cfg(zcash_unstable = "nu7")] + fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { issue_bundle.map(|b| b.commitment().0) } @@ -365,6 +373,7 @@ impl TransactionDigest for TxIdDigester transparent_digests: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, + #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digests: Self::TzeDigest, ) -> Self::Digest { @@ -373,6 +382,7 @@ impl TransactionDigest for TxIdDigester transparent_digests, sapling_digest, orchard_digest, + #[cfg(zcash_unstable = "nu7")] issue_digest, #[cfg(zcash_unstable = "zfuture")] tze_digests, @@ -388,6 +398,7 @@ pub(crate) fn to_hash( transparent_digest: Blake2bHash, sapling_digest: Option, orchard_digest: Option, + #[cfg(zcash_unstable = "nu7")] issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] tze_digests: Option<&TzeDigests>, ) -> Blake2bHash { @@ -413,6 +424,7 @@ pub(crate) fn to_hash( ) .unwrap(); + #[cfg(zcash_unstable = "nu7")] if _txversion.has_zsa() { h.write_all( issue_digest @@ -443,6 +455,7 @@ pub fn to_txid( hash_transparent_txid_data(digests.transparent_digests.as_ref()), digests.sapling_digest, digests.orchard_digest, + #[cfg(zcash_unstable = "nu7")] digests.issue_digest, #[cfg(zcash_unstable = "zfuture")] digests.tze_digests.as_ref(), @@ -457,13 +470,15 @@ pub fn to_txid( /// function. pub struct BlockTxCommitmentDigester; -impl TransactionDigest for BlockTxCommitmentDigester { +impl TransactionDigest for BlockTxCommitmentDigester { /// We use the header digest to pass the transaction ID into /// where it needs to be used for personalization string construction. type HeaderDigest = BranchId; type TransparentDigest = Blake2bHash; type SaplingDigest = Blake2bHash; type OrchardDigest = Blake2bHash; + + #[cfg(zcash_unstable = "nu7")] type IssueDigest = Blake2bHash; #[cfg(zcash_unstable = "zfuture")] @@ -528,6 +543,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { }) } + #[cfg(zcash_unstable = "nu7")] fn digest_orchard_zsa( &self, orchard_bundle: Option<&bundle::Bundle>, @@ -537,6 +553,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { }) } + #[cfg(zcash_unstable = "nu7")] fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { issue_bundle.map_or_else(bundle::commitments::hash_issue_bundle_auth_empty, |b| { b.authorizing_commitment().0 @@ -560,6 +577,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, + #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest { @@ -576,6 +594,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { h.write_all(digest.as_bytes()).unwrap(); } + #[cfg(zcash_unstable = "nu7")] if TxVersion::suggested_for_branch(consensus_branch_id).has_zsa() { h.write_all(issue_digest.as_bytes()).unwrap(); } From b7d4833e24f0c9ad24437dd104a507b7f0c126c8 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 11 Jun 2024 18:50:39 +0200 Subject: [PATCH 35/85] Fix transparent builder --- .../src/transaction/components/transparent/builder.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/zcash_primitives/src/transaction/components/transparent/builder.rs b/zcash_primitives/src/transaction/components/transparent/builder.rs index 165afe83c9..c275065fe1 100644 --- a/zcash_primitives/src/transaction/components/transparent/builder.rs +++ b/zcash_primitives/src/transaction/components/transparent/builder.rs @@ -241,10 +241,7 @@ impl TransparentAuthorizingContext for Unauthorized { impl Bundle { pub fn apply_signatures( self, - #[cfg(feature = "transparent-inputs")] mtx: &TransactionData< - tx::Unauthorized, - orchard::issuance::Unauthorized, - >, + #[cfg(feature = "transparent-inputs")] mtx: &TransactionData, #[cfg(feature = "transparent-inputs")] txid_parts_cache: &TxDigests, ) -> Bundle { #[cfg(feature = "transparent-inputs")] From aad64db0967c1807a0da8e97ba6c5e1f7316f321 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:22:07 +0200 Subject: [PATCH 36/85] Exclude zcash_client crates --- Cargo.lock | 949 +-------------------- Cargo.toml | 6 +- zcash_client_backend/src/proto/proposal.rs | 1 + zcash_client_backend/src/proto/service.rs | 1 + 4 files changed, 33 insertions(+), 924 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0be52828b..d4ebb95bd9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,24 +60,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - [[package]] name = "anes" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" -[[package]] -name = "anyhow" -version = "1.0.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" - [[package]] name = "arrayref" version = "0.3.7" @@ -96,39 +84,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" -[[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "atty" version = "0.2.14" @@ -146,51 +101,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "axum" -version = "0.6.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" -dependencies = [ - "async-trait", - "axum-core", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper", - "tower", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - [[package]] name = "backtrace" version = "0.3.72" @@ -376,12 +286,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" -[[package]] -name = "bytes" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" - [[package]] name = "cast" version = "0.3.0" @@ -540,7 +444,7 @@ dependencies = [ "ciborium", "clap", "criterion-plot", - "itertools 0.10.5", + "itertools", "lazy_static", "num-traits", "oorandom", @@ -561,7 +465,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools 0.10.5", + "itertools", ] [[package]] @@ -627,15 +531,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "daggy" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91a9304e55e9d601a39ae4deaba85406d5c0980e106f65afcf0460e9af1e7602" -dependencies = [ - "petgraph", -] - [[package]] name = "debugid" version = "0.8.0" @@ -736,7 +631,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -748,18 +643,6 @@ dependencies = [ "proptest", ] -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - -[[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" - [[package]] name = "fastrand" version = "2.1.0" @@ -798,12 +681,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "fnv" version = "1.0.7" @@ -830,58 +707,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-macro" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-core", - "futures-macro", - "futures-task", - "pin-project-lite", - "pin-utils", - "slab", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -922,45 +747,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "gumdrop" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bc700f989d2f6f0248546222d9b4258f5b02a171a431f8285a81c08142629e3" -dependencies = [ - "gumdrop_derive", -] - -[[package]] -name = "gumdrop_derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729f9bd3449d77e7831a18abfb7ba2f99ee813dfd15b8c2167c9a54ba20aa99d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 2.2.6", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "half" version = "2.2.1" @@ -1019,19 +805,6 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "hashlink" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" -dependencies = [ - "hashbrown 0.14.5", -] [[package]] name = "hdwallet" @@ -1046,12 +819,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hermit-abi" version = "0.1.19" @@ -1088,77 +855,7 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - -[[package]] -name = "hyper" -version = "0.14.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper", - "pin-project-lite", - "tokio", - "tokio-io-timeout", + "windows-sys", ] [[package]] @@ -1228,7 +925,7 @@ checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ "hermit-abi 0.3.9", "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -1240,15 +937,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.11" @@ -1298,7 +986,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4397c789f2709d23cfcb703b316e0766a8d4b17db2d47b0ab096ef6047cae1d8" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -1322,17 +1010,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" -[[package]] -name = "libsqlite3-sys" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -1361,12 +1038,6 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" -[[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" - [[package]] name = "maybe-rayon" version = "0.1.1" @@ -1401,12 +1072,6 @@ dependencies = [ "nonempty", ] -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1435,23 +1100,6 @@ dependencies = [ "webpki-roots", ] -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "multimap" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" - [[package]] name = "nix" version = "0.26.4" @@ -1622,7 +1270,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -1667,48 +1315,12 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap 2.2.6", -] - -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "pin-project-lite" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "pkcs8" version = "0.10.2" @@ -1719,12 +1331,6 @@ dependencies = [ "spki", ] -[[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - [[package]] name = "plotters" version = "0.3.6" @@ -1792,16 +1398,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "prettyplease" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" -dependencies = [ - "proc-macro2", - "syn 2.0.66", -] - [[package]] name = "primitive-types" version = "0.12.2" @@ -1841,59 +1437,6 @@ dependencies = [ "unarray", ] -[[package]] -name = "prost" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" -dependencies = [ - "bytes", - "heck", - "itertools 0.12.1", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.66", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" -dependencies = [ - "anyhow", - "itertools 0.12.1", - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "prost-types" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" -dependencies = [ - "prost", -] - [[package]] name = "quick-error" version = "1.2.3" @@ -2098,7 +1641,7 @@ dependencies = [ "libc", "spin 0.9.8", "untrusted 0.9.0", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -2111,23 +1654,8 @@ dependencies = [ ] [[package]] -name = "rusqlite" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2" -dependencies = [ - "bitflags 2.5.0", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "smallvec", - "time", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.24" +name = "rustc-demangle" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" @@ -2141,7 +1669,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -2166,12 +1694,6 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "rustversion" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" - [[package]] name = "rusty-fork" version = "0.3.0" @@ -2231,29 +1753,6 @@ dependencies = [ "zip32", ] -[[package]] -name = "schemer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835d8f9478fd2936195fc941a8666b0d0894d5bf3631cbb884a8ce8ba631f339" -dependencies = [ - "daggy", - "log", - "thiserror", - "uuid", -] - -[[package]] -name = "schemer-rusqlite" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fb5ac1fa52c58e2c6a618e3149d464e7ad8d0effca74990ea29c1fe2338b3b1" -dependencies = [ - "rusqlite", - "schemer", - "uuid", -] - [[package]] name = "scopeguard" version = "1.2.0" @@ -2328,7 +1827,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn", ] [[package]] @@ -2353,20 +1852,6 @@ dependencies = [ "digest", ] -[[package]] -name = "shardtree" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cdd24424ce0b381646737fedddc33c4dcf7dcd2d545056b53f7982097bef5" -dependencies = [ - "assert_matches", - "bitflags 2.5.0", - "either", - "incrementalmerkletree", - "proptest", - "tracing", -] - [[package]] name = "signature" version = "2.2.0" @@ -2377,31 +1862,12 @@ dependencies = [ "rand_core", ] -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - [[package]] name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "spin" version = "0.5.2" @@ -2471,17 +1937,6 @@ dependencies = [ "symbolic-common", ] -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.66" @@ -2493,12 +1948,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "tap" version = "1.0.1" @@ -2514,7 +1963,7 @@ dependencies = [ "cfg-if", "fastrand", "rustix", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -2540,34 +1989,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", -] - -[[package]] -name = "time" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" - -[[package]] -name = "time-macros" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4" -dependencies = [ - "time-core", + "syn", ] [[package]] @@ -2595,128 +2017,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" -[[package]] -name = "tokio" -version = "1.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-stream" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tonic" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" -dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64", - "bytes", - "h2", - "http", - "http-body", - "hyper", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost", - "tokio", - "tokio-stream", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tonic-build" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - [[package]] name = "tracing" version = "0.1.40" @@ -2736,7 +2036,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn", ] [[package]] @@ -2748,12 +2048,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - [[package]] name = "typenum" version = "1.17.0" @@ -2821,12 +2115,6 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.4" @@ -2902,15 +2190,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2938,7 +2217,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn", "wasm-bindgen-shared", ] @@ -2960,7 +2239,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2987,18 +2266,6 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - [[package]] name = "winapi" version = "0.3.9" @@ -3021,7 +2288,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -3030,37 +2297,13 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] @@ -3069,46 +2312,28 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.5" @@ -3121,48 +2346,24 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.5" @@ -3197,100 +2398,6 @@ dependencies = [ "zcash_protocol", ] -[[package]] -name = "zcash_client_backend" -version = "0.12.1" -dependencies = [ - "assert_matches", - "async-trait", - "base64", - "bech32", - "bls12_381", - "bs58", - "byteorder", - "crossbeam-channel", - "document-features", - "futures-util", - "group", - "gumdrop", - "hdwallet", - "hex", - "incrementalmerkletree", - "jubjub", - "memuse", - "nom", - "nonempty", - "orchard", - "percent-encoding", - "proptest", - "prost", - "rand_core", - "rayon", - "sapling-crypto", - "secrecy", - "shardtree", - "subtle", - "time", - "tokio", - "tonic", - "tonic-build", - "tracing", - "which", - "zcash_address", - "zcash_encoding", - "zcash_keys", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", - "zcash_primitives", - "zcash_proofs", - "zcash_protocol", - "zip32", - "zip321", -] - -[[package]] -name = "zcash_client_sqlite" -version = "0.10.3" -dependencies = [ - "assert_matches", - "bls12_381", - "bs58", - "byteorder", - "document-features", - "group", - "hdwallet", - "incrementalmerkletree", - "jubjub", - "maybe-rayon", - "nonempty", - "orchard", - "pasta_curves", - "proptest", - "prost", - "rand_chacha", - "rand_core", - "regex", - "rusqlite", - "sapling-crypto", - "schemer", - "schemer-rusqlite", - "secrecy", - "shardtree", - "subtle", - "tempfile", - "time", - "tracing", - "uuid", - "zcash_address", - "zcash_client_backend", - "zcash_encoding", - "zcash_keys", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", - "zcash_primitives", - "zcash_proofs", - "zcash_protocol", - "zip32", -] - [[package]] name = "zcash_encoding" version = "0.2.0" @@ -3482,7 +2589,7 @@ checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn", ] [[package]] @@ -3502,7 +2609,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a807a7dfce..5ba8bd1929 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,8 +6,8 @@ members = [ "components/zcash_encoding", "components/zcash_protocol", "components/zip321", - "zcash_client_backend", - "zcash_client_sqlite", +# "zcash_client_backend", +# "zcash_client_sqlite", "zcash_extensions", "zcash_history", "zcash_keys", @@ -31,7 +31,7 @@ categories = ["cryptography::cryptocurrencies"] # Intra-workspace dependencies equihash = { version = "0.2", path = "components/equihash" } zcash_address = { version = "0.3", path = "components/zcash_address" } -zcash_client_backend = { version = "0.12", path = "zcash_client_backend" } +#zcash_client_backend = { version = "0.12", path = "zcash_client_backend" } zcash_encoding = { version = "0.2", path = "components/zcash_encoding" } zcash_keys = { version = "0.2", path = "zcash_keys" } zcash_protocol = { version = "0.1", path = "components/zcash_protocol", features = ["test-dependencies"] } diff --git a/zcash_client_backend/src/proto/proposal.rs b/zcash_client_backend/src/proto/proposal.rs index a17b83bf8b..0a664d5cde 100644 --- a/zcash_client_backend/src/proto/proposal.rs +++ b/zcash_client_backend/src/proto/proposal.rs @@ -1,3 +1,4 @@ +// This file is @generated by prost-build. /// A data structure that describes a series of transactions to be created. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/zcash_client_backend/src/proto/service.rs b/zcash_client_backend/src/proto/service.rs index ccfd3fed7a..03ea1b93ec 100644 --- a/zcash_client_backend/src/proto/service.rs +++ b/zcash_client_backend/src/proto/service.rs @@ -1,3 +1,4 @@ +// This file is @generated by prost-build. /// A BlockID message contains identifiers to select a block: a height or a /// hash. Specification by hash is not implemented, but may be in the future. #[allow(clippy::derive_partial_eq_without_eq)] From c0d551de76bf045679bc755a0ff9f9fa6d27015a Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:23:43 +0200 Subject: [PATCH 37/85] Fix formatting --- components/zcash_protocol/src/consensus.rs | 4 +- zcash_primitives/src/transaction/builder.rs | 62 ++++++++++--------- .../src/transaction/components/issuance.rs | 3 +- .../src/transaction/components/orchard.rs | 6 +- zcash_primitives/src/transaction/mod.rs | 58 ++++++++--------- zcash_primitives/src/transaction/sighash.rs | 4 +- zcash_primitives/src/transaction/tests.rs | 5 +- zcash_primitives/src/transaction/txid.rs | 12 ++-- 8 files changed, 73 insertions(+), 81 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index b9f6014c78..a82e4ea699 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -697,9 +697,9 @@ impl BranchId { #[cfg(zcash_unstable = "nu7")] BranchId::Nu7 => params.activation_height(NetworkUpgrade::Nu7).map(|lower| { #[cfg(feature = "zfuture")] - let upper = params.activation_height(NetworkUpgrade::ZFuture); + let upper = params.activation_height(NetworkUpgrade::ZFuture); #[cfg(not(feature = "zfuture"))] - let upper = None; + let upper = None; (lower, upper) }), #[cfg(zcash_unstable = "zfuture")] diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 9bd383222b..be73ab9224 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -37,6 +37,8 @@ use orchard::note::AssetBase; #[cfg(not(feature = "transparent-inputs"))] use std::convert::Infallible; +use crate::transaction::components::amount::NonNegativeAmount; +use crate::transaction::components::sapling::zip212_enforcement; #[cfg(zcash_unstable = "zfuture")] use crate::{ extensions::transparent::{ExtensionTxBuilder, ToPayload}, @@ -48,23 +50,20 @@ use crate::{ fees::FutureFeeRule, }, }; -use crate::transaction::components::amount::NonNegativeAmount; -use crate::transaction::components::sapling::zip212_enforcement; - use orchard::note::AssetBase; -use orchard::orchard_flavors::{ OrchardVanilla, OrchardZSA }; +use orchard::orchard_flavors::{OrchardVanilla, OrchardZSA}; #[cfg(zcash_unstable = "nu7")] -use rand_core::OsRng; +use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; #[cfg(zcash_unstable = "nu7")] use orchard::{ - issuance::{IssueInfo, IssueBundle}, - keys::{IssuanceAuthorizingKey, IssuanceValidatingKey} + issuance::{IssueBundle, IssueInfo}, + keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}, }; -use zcash_protocol::value::ZatBalance; #[cfg(zcash_unstable = "nu7")] -use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; +use rand_core::OsRng; +use zcash_protocol::value::ZatBalance; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -371,12 +370,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// /// The expiry height will be set to the given height plus the default transaction /// expiry delta (20 blocks). - pub fn new( - params: P, - target_height: BlockHeight, - build_config: BuildConfig, - ) -> Self { - + pub fn new(params: P, target_height: BlockHeight, build_config: BuildConfig) -> Self { let is_orchard_enabled = params.is_nu_active(NetworkUpgrade::Nu5, target_height); let orchard_builder = if is_orchard_enabled { @@ -448,7 +442,6 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } } - /// Adds an Issuance action to the transaction. #[cfg(zcash_unstable = "nu7")] pub fn init_issue_bundle( @@ -469,8 +462,8 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { Some(IssueInfo { recipient, value }), OsRng, ) - .map_err(IssuanceBundle)? - .0, + .map_err(IssuanceBundle)? + .0, ); self.issuance_key = Some(ik); @@ -499,11 +492,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// Adds a Burn action to the transaction. #[cfg(zcash_unstable = "nu7")] - pub fn add_burn( - &mut self, - value: u64, - asset: AssetBase, - ) -> Result<(), Error> { + pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { self.orchard_builder .as_mut() .ok_or(Error::OrchardBuilderNotAvailable)? @@ -578,10 +567,10 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .add_spend(orchard::keys::FullViewingKey::from(sk), note, merkle_path) .map_err(Error::OrchardSpend)?; - self.orchard_saks - .push(orchard::keys::SpendAuthorizingKey::from(sk)); + self.orchard_saks + .push(orchard::keys::SpendAuthorizingKey::from(sk)); - Ok(()) + Ok(()) } /// Adds an Orchard recipient to the transaction. @@ -880,16 +869,31 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< }; let mut unproven_orchard_bundle = None; - let mut unproven_orchard_zsa_bundle: Option, orchard::builder::Unauthorized>, ZatBalance, OrchardZSA>> = None; + let mut unproven_orchard_zsa_bundle: Option< + orchard::Bundle< + orchard::builder::InProgress< + orchard::builder::Unproven, + orchard::builder::Unauthorized, + >, + ZatBalance, + OrchardZSA, + >, + > = None; let mut orchard_meta = orchard::builder::BundleMetadata::empty(); if let Some(builder) = self.orchard_builder { if version.has_zsa() { - let (bundle, meta) = builder.build(&mut rng).map_err(Error::OrchardBuild)?.unwrap(); + let (bundle, meta) = builder + .build(&mut rng) + .map_err(Error::OrchardBuild)? + .unwrap(); unproven_orchard_zsa_bundle = Some(bundle); orchard_meta = meta; } else { - let (bundle, meta) = builder.build(&mut rng).map_err(Error::OrchardBuild)?.unwrap(); + let (bundle, meta) = builder + .build(&mut rng) + .map_err(Error::OrchardBuild)? + .unwrap(); unproven_orchard_bundle = Some(bundle); orchard_meta = meta; } diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index c85531d14b..8c519336f2 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -10,7 +10,6 @@ use std::io; use std::io::{Read, Write}; use zcash_encoding::{CompactSize, Vector}; - pub trait MapIssueAuth { fn map_issue_authorization(&self, a: A) -> B; } @@ -131,7 +130,7 @@ pub fn write_v7_bundle( } fn write_action(action: &IssueAction, mut writer: W) -> io::Result<()> { - let is_finalized_u8 :u8 = if action.is_finalized() { 1 } else { 0 }; + let is_finalized_u8: u8 = if action.is_finalized() { 1 } else { 0 }; writer.write_u8(is_finalized_u8)?; Vector::write(&mut writer, action.notes(), |w, note| write_note(note, w))?; Vector::write(&mut writer, action.asset_desc().as_bytes(), |w, b| { diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 4eebf7b057..5b9b05f4f0 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -396,13 +396,13 @@ pub fn write_action_without_auth( pub mod testing { use proptest::prelude::*; + use crate::transaction::components::amount::testing::arb_amount; + use crate::transaction::components::Amount; + use crate::transaction::TxVersion; use orchard::bundle::{ testing::{self as t_orch}, Authorized, Bundle, }; - use crate::transaction::components::Amount; - use crate::transaction::components::amount::testing::arb_amount; - use crate::transaction::TxVersion; use orchard::orchard_flavors::{OrchardVanilla, OrchardZSA}; prop_compose! { diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index a88822c962..cae9b4eaa7 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -29,13 +29,10 @@ use crate::{ sapling::{self, builder as sapling_builder}, }; -#[cfg(zcash_unstable = "nu7")] -use orchard::{ - orchard_flavors::OrchardZSA, - issuance::IssueBundle -}; #[cfg(zcash_unstable = "nu7")] use crate::transaction::components::issuance; +#[cfg(zcash_unstable = "nu7")] +use orchard::{issuance::IssueBundle, orchard_flavors::OrchardZSA}; use self::{ components::{ @@ -257,9 +254,7 @@ impl TxVersion { /// Returns `true` if this transaction version supports the Orchard protocol. pub fn has_orchard(&self) -> bool { match self { - TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => { - false - } + TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => false, TxVersion::Zip225 => true, #[cfg(zcash_unstable = "nu7")] TxVersion::Zsa => false, @@ -270,9 +265,10 @@ impl TxVersion { pub fn has_zsa(&self) -> bool { match self { - TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling | TxVersion::Zip225 => { - false - } + TxVersion::Sprout(_) + | TxVersion::Overwinter + | TxVersion::Sapling + | TxVersion::Zip225 => false, #[cfg(zcash_unstable = "nu7")] TxVersion::Zsa => true, #[cfg(feature = "zfuture")] @@ -415,10 +411,10 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - #[cfg(zcash_unstable = "nu7")] - orchard_zsa_bundle: Option>, - #[cfg(zcash_unstable = "nu7")] - issue_bundle: Option>, + #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: Option< + orchard::Bundle, + >, + #[cfg(zcash_unstable = "nu7")] issue_bundle: Option>, ) -> Self { TransactionData { version, @@ -602,19 +598,20 @@ impl TransactionData { ) -> Option< orchard::bundle::Bundle, >, - #[cfg(zcash_unstable = "nu7")] - f_zsa_orchard: impl FnOnce( + #[cfg(zcash_unstable = "nu7")] f_zsa_orchard: impl FnOnce( Option>, ) -> Option< orchard::bundle::Bundle, >, - #[cfg(zcash_unstable = "nu7")] - f_issue: impl FnOnce( + #[cfg(zcash_unstable = "nu7")] f_issue: impl FnOnce( Option>, - ) -> Option>, + ) -> Option< + orchard::issuance::IssueBundle, + >, #[cfg(zcash_unstable = "zfuture")] f_tze: impl FnOnce( Option>, - ) -> Option>, + ) + -> Option>, ) -> TransactionData { TransactionData { version: self.version, @@ -639,7 +636,10 @@ impl TransactionData { f_transparent: impl transparent::MapAuth, mut f_sapling: impl sapling_serialization::MapAuth, mut f_orchard: impl orchard_serialization::MapAuth, - #[cfg(zcash_unstable = "nu7")] mut f_orchard_zsa: impl orchard_serialization::MapAuth, + #[cfg(zcash_unstable = "nu7")] mut f_orchard_zsa: impl orchard_serialization::MapAuth< + A::OrchardZsaAuth, + B::OrchardZsaAuth, + >, #[cfg(zcash_unstable = "nu7")] f_issue: impl issuance::MapIssueAuth, #[cfg(zcash_unstable = "zfuture")] f_tze: impl tze::MapAuth, ) -> TransactionData { @@ -677,11 +677,9 @@ impl TransactionData { ) }), #[cfg(zcash_unstable = "nu7")] - issue_bundle: self.issue_bundle.map(|b| { - b.map_authorization( - |a| f_issue.map_issue_authorization(a), - ) - }), + issue_bundle: self + .issue_bundle + .map(|b| b.map_authorization(|a| f_issue.map_issue_authorization(a))), #[cfg(zcash_unstable = "zfuture")] tze_bundle: self.tze_bundle.map(|b| b.map_authorization(f_tze)), } @@ -1076,7 +1074,6 @@ impl Transaction { sapling_serialization::write_v5_bundle(writer, self.sapling_bundle.as_ref()) } - #[cfg(zcash_unstable = "nu7")] pub fn write_v7(&self, mut writer: W) -> io::Result<()> { if self.sprout_bundle.is_some() { @@ -1195,8 +1192,7 @@ pub trait TransactionDigest { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu7")] - issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest; } @@ -1207,8 +1203,8 @@ pub enum DigestError { #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { - use proptest::prelude::*; use crate::consensus::BranchId; + use proptest::prelude::*; use super::{ components::{ diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index a5bfe6a5b2..2ce2b455d5 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -11,10 +11,10 @@ use crate::{ sapling::{self, bundle::GrothProofBytes}, }; -#[cfg(zcash_unstable = "zfuture")] -use {super::components::Amount, crate::extensions::transparent::Precondition}; #[cfg(zcash_unstable = "nu7")] use crate::transaction::sighash_v7::v7_signature_hash; +#[cfg(zcash_unstable = "zfuture")] +use {super::components::Amount, crate::extensions::transparent::Precondition}; pub const SIGHASH_ALL: u8 = 0x01; pub const SIGHASH_NONE: u8 = 0x02; diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 242b889e4d..86bcf8bc70 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -235,10 +235,7 @@ impl Authorization for TestUnauthorized { fn zip_0244() { fn to_test_txdata( tv: &self::data::zip_0244::TestVector, - ) -> ( - TransactionData, - TxDigests, - ) { + ) -> (TransactionData, TxDigests) { let tx = Transaction::read(&tv.tx[..], BranchId::Nu5).unwrap(); assert_eq!(tx.txid.as_ref(), &tv.txid); diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 7adcc7ecb9..811f2cecaa 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -10,10 +10,9 @@ use orchard::orchard_flavors::OrchardVanilla; #[cfg(zcash_unstable = "nu7")] use orchard::{ issuance::{IssueBundle, Signed}, - orchard_flavors::OrchardZSA + orchard_flavors::OrchardZSA, }; - use crate::{ consensus::{BlockHeight, BranchId}, sapling::{ @@ -373,8 +372,7 @@ impl TransactionDigest for TxIdDigester { transparent_digests: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu7")] - issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digests: Self::TzeDigest, ) -> Self::Digest { TxDigests { @@ -398,8 +396,7 @@ pub(crate) fn to_hash( transparent_digest: Blake2bHash, sapling_digest: Option, orchard_digest: Option, - #[cfg(zcash_unstable = "nu7")] - issue_digest: Option, + #[cfg(zcash_unstable = "nu7")] issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] tze_digests: Option<&TzeDigests>, ) -> Blake2bHash { let mut personal = [0; 16]; @@ -577,8 +574,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu7")] - issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest { let digests = [transparent_digest, sapling_digest, orchard_digest]; From 944377d6e3f1df3783d8aa55e242e2d5407ad334 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:45:51 +0200 Subject: [PATCH 38/85] Fix clippy --- zcash_primitives/src/transaction/builder.rs | 25 ++++++++++++--------- zcash_primitives/src/transaction/mod.rs | 8 +++---- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index be73ab9224..38ef5b759e 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -51,11 +51,12 @@ use crate::{ }, }; -use orchard::note::AssetBase; -use orchard::orchard_flavors::{OrchardVanilla, OrchardZSA}; - #[cfg(zcash_unstable = "nu7")] use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; +use orchard::note::AssetBase; +use orchard::orchard_flavors::OrchardVanilla; +#[cfg(zcash_unstable = "nu7")] +use orchard::orchard_flavors::OrchardZSA; #[cfg(zcash_unstable = "nu7")] use orchard::{ issuance::{IssueBundle, IssueInfo}, @@ -63,7 +64,6 @@ use orchard::{ }; #[cfg(zcash_unstable = "nu7")] use rand_core::OsRng; -use zcash_protocol::value::ZatBalance; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -869,6 +869,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< }; let mut unproven_orchard_bundle = None; + #[cfg(zcash_unstable = "nu7")] let mut unproven_orchard_zsa_bundle: Option< orchard::Bundle< orchard::builder::InProgress< @@ -883,12 +884,16 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< if let Some(builder) = self.orchard_builder { if version.has_zsa() { - let (bundle, meta) = builder - .build(&mut rng) - .map_err(Error::OrchardBuild)? - .unwrap(); - unproven_orchard_zsa_bundle = Some(bundle); - orchard_meta = meta; + #[cfg(zcash_unstable = "nu7")] + { + let (bundle, meta) = builder + .build(&mut rng) + .map_err(Error::OrchardBuild)? + .unwrap(); + + unproven_orchard_zsa_bundle = Some(bundle); + orchard_meta = meta; + } } else { let (bundle, meta) = builder .build(&mut rng) diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index cae9b4eaa7..678b1eecb7 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -1251,8 +1251,8 @@ pub mod testing { transparent_bundle in transparent::arb_bundle(), sapling_bundle in sapling::arb_bundle_for_version(version), orchard_bundle in orchard_testing::arb_bundle_for_version(version), - orchard_zsa_bundle in orchard_testing::arb_zsa_bundle_for_version(version), - issue_bundle in issuance::testing::arb_bundle_for_version(version), + _orchard_zsa_bundle in orchard_testing::arb_zsa_bundle_for_version(version), + _issue_bundle in issuance::testing::arb_bundle_for_version(version), version in Just(version) ) -> TransactionData { TransactionData:: { @@ -1265,9 +1265,9 @@ pub mod testing { sapling_bundle, orchard_bundle, #[cfg(zcash_unstable = "nu7")] - orchard_zsa_bundle, + _orchard_zsa_bundle, #[cfg(zcash_unstable = "nu7")] - issue_bundle, + _issue_bundle, } } } From 58567139ab39c1dd397c4c8e71016fe39b144297 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 26 Jun 2024 18:05:51 +0200 Subject: [PATCH 39/85] Fix merge issues --- zcash_primitives/src/transaction/sighash.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index 2ce2b455d5..94900a6b2e 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -78,13 +78,12 @@ pub trait TransparentAuthorizingContext: transparent::Authorization { /// set of precomputed hashes produced in the construction of the /// transaction ID. pub fn signature_hash< - 'a, TA: TransparentAuthorizingContext, SA: sapling::bundle::Authorization, A: Authorization, >( tx: &TransactionData, - signable_input: &SignableInput<'a>, + signable_input: &SignableInput<'_>, txid_parts: &TxDigests, ) -> SignatureHash { SignatureHash(match tx.version { From 9ddc1a7ff707f374832a2781300328eaf586f7d7 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 26 Jun 2024 18:28:10 +0200 Subject: [PATCH 40/85] Adjust versions --- Cargo.lock | 500 ++++++++++++++++++++++++++++------------------------- Cargo.toml | 2 +- 2 files changed, 262 insertions(+), 240 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4ebb95bd9..ab4c0468b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -29,9 +29,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", "cipher", @@ -40,9 +40,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "getrandom", @@ -53,9 +53,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -97,15 +97,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.72" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -124,9 +124,9 @@ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" -version = "0.21.7" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -198,9 +198,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "bitvec" @@ -222,18 +222,18 @@ checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq 0.2.6", + "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f" dependencies = [ "arrayref", "arrayvec", - "constant_time_eq 0.3.0", + "constant_time_eq", ] [[package]] @@ -260,9 +260,9 @@ dependencies = [ [[package]] name = "bs58" -version = "0.5.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ "sha2", "tinyvec", @@ -270,15 +270,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" [[package]] name = "byteorder" @@ -303,9 +303,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.99" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -339,9 +342,9 @@ dependencies = [ [[package]] name = "ciborium" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" dependencies = [ "ciborium-io", "ciborium-ll", @@ -350,18 +353,18 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" [[package]] name = "ciborium-ll" -version = "0.2.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" dependencies = [ "ciborium-io", - "half", + "half 1.8.2", ] [[package]] @@ -408,12 +411,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" -[[package]] -name = "constant_time_eq" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" - [[package]] name = "cpp_demangle" version = "0.4.3" @@ -425,9 +422,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -470,37 +467,46 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ + "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ + "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" dependencies = [ + "autocfg", + "cfg-if", "crossbeam-utils", + "memoffset", + "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] [[package]] name = "crunchy" @@ -587,15 +593,15 @@ dependencies = [ [[package]] name = "either" -version = "1.12.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.13.8" +version = "0.13.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "e9775b22bc152ad86a0cf23f0f348b884b26add12bf741e7ffc4d4ab2ab4d205" dependencies = [ "base16ct", "crypto-bigint", @@ -626,9 +632,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e" dependencies = [ "libc", "windows-sys", @@ -645,9 +651,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "ff" @@ -720,9 +726,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "libc", @@ -731,9 +737,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "group" @@ -747,6 +753,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "half" version = "2.2.1" @@ -802,9 +814,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" [[package]] name = "hdwallet" @@ -830,9 +842,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -851,9 +863,9 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ "windows-sys", ] @@ -882,22 +894,22 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.14.2", ] [[package]] name = "inferno" -version = "0.11.19" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321f0f839cd44a4686e9504b0a62b4d69a50b62072144c71c68f5873c167b8d9" +checksum = "c50453ec3a6555fad17b1cd1a80d16af5bc7cb35094f64e429fd46549018c6a3" dependencies = [ "ahash", - "indexmap 2.2.6", + "indexmap 2.1.0", "is-terminal", "itoa", "log", @@ -919,12 +931,12 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.9", - "libc", + "hermit-abi 0.3.3", + "rustix", "windows-sys", ] @@ -939,15 +951,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" dependencies = [ "wasm-bindgen", ] @@ -968,9 +980,9 @@ dependencies = [ [[package]] name = "k256" -version = "0.13.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" dependencies = [ "cfg-if", "ecdsa", @@ -982,9 +994,9 @@ dependencies = [ [[package]] name = "known-folders" -version = "1.1.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4397c789f2709d23cfcb703b316e0766a8d4b17db2d47b0ab096ef6047cae1d8" +checksum = "2b6f1427d9c43b1cce87434c4d9eca33f43bdbb6246a762aa823a582f74c1684" dependencies = [ "windows-sys", ] @@ -1000,9 +1012,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libm" @@ -1012,9 +1024,9 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "litrs" @@ -1024,9 +1036,9 @@ checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -1034,9 +1046,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "maybe-rayon" @@ -1050,9 +1062,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memmap2" @@ -1063,6 +1075,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + [[package]] name = "memuse" version = "0.2.1" @@ -1080,18 +1101,18 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", ] [[package]] name = "minreq" -version = "2.11.2" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fdef521c74c2884a4f3570bcdb6d2a77b3c533feb6b27ac2ae72673cc221c64" +checksum = "cb3371dfc7b772c540da1380123674a8e20583aca99907087d990ca58cf44203" dependencies = [ "log", "once_cell", @@ -1129,10 +1150,11 @@ checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ + "autocfg", "num-integer", "num-traits", ] @@ -1149,18 +1171,19 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ + "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.19" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", "libm", @@ -1172,24 +1195,24 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.3.3", "libc", ] [[package]] name = "object" -version = "0.35.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "oorandom" @@ -1199,9 +1222,9 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "opaque-debug" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" @@ -1214,7 +1237,7 @@ dependencies = [ "ff", "fpe", "group", - "half", + "half 2.2.1", "halo2_gadgets", "halo2_proofs", "hex", @@ -1252,9 +1275,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", "parking_lot_core", @@ -1262,9 +1285,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", @@ -1311,15 +1334,15 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pkcs8" @@ -1333,9 +1356,9 @@ dependencies = [ [[package]] name = "plotters" -version = "0.3.6" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" dependencies = [ "num-traits", "plotters-backend", @@ -1346,15 +1369,15 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.6" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" [[package]] name = "plotters-svg" -version = "0.3.6" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" dependencies = [ "plotters-backend", ] @@ -1410,28 +1433,28 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.4.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.5.0", + "bitflags 2.4.2", "lazy_static", "num-traits", "rand", "rand_chacha", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.7.5", "rusty-fork", "tempfile", "unarray", @@ -1454,9 +1477,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1508,9 +1531,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.10.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" dependencies = [ "either", "rayon-core", @@ -1518,9 +1541,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -1559,41 +1582,47 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags 2.5.0", + "bitflags 1.3.2", ] [[package]] name = "regex" -version = "1.10.5" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax", + "regex-syntax 0.8.2", ] [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.2", ] [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rfc6979" @@ -1631,12 +1660,11 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" dependencies = [ "cc", - "cfg-if", "getrandom", "libc", "spin 0.9.8", @@ -1655,17 +1683,17 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", @@ -1674,12 +1702,12 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" +version = "0.21.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" dependencies = [ "log", - "ring 0.17.8", + "ring 0.17.5", "rustls-webpki", "sct", ] @@ -1690,7 +1718,7 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", + "ring 0.17.5", "untrusted 0.9.0", ] @@ -1708,9 +1736,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -1765,7 +1793,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", + "ring 0.17.5", "untrusted 0.9.0", ] @@ -1812,18 +1840,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.203" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", @@ -1832,9 +1860,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -1864,9 +1892,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "spin" @@ -1939,9 +1967,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", @@ -1956,36 +1984,37 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", "fastrand", + "redox_syscall", "rustix", "windows-sys", ] [[package]] name = "textwrap" -version = "0.16.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2", "quote", @@ -2080,9 +2109,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] @@ -2111,9 +2140,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "uuid" -version = "1.8.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" [[package]] name = "version_check" @@ -2182,9 +2211,9 @@ dependencies = [ [[package]] name = "walkdir" -version = "2.5.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -2198,9 +2227,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2208,9 +2237,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" dependencies = [ "bumpalo", "log", @@ -2223,9 +2252,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2233,9 +2262,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" dependencies = [ "proc-macro2", "quote", @@ -2246,15 +2275,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" dependencies = [ "js-sys", "wasm-bindgen", @@ -2262,9 +2291,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] name = "winapi" @@ -2284,11 +2313,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ - "windows-sys", + "winapi", ] [[package]] @@ -2299,23 +2328,22 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ "windows-targets", ] [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", - "windows_i686_gnullvm", "windows_i686_msvc", "windows_x86_64_gnu", "windows_x86_64_gnullvm", @@ -2324,51 +2352,45 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "wyz" @@ -2574,18 +2596,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" dependencies = [ "proc-macro2", "quote", @@ -2594,9 +2616,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" dependencies = [ "zeroize_derive", ] diff --git a/Cargo.toml b/Cargo.toml index 5ba8bd1929..9a57a38b54 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,7 +95,7 @@ maybe-rayon = { version = "0.1.0", default-features = false } rayon = "1.5" # Protobuf and gRPC -prost = "0.12" +prost = "=0.12.3" tonic = { version = "0.10", default-features = false } tonic-build = { version = "0.10", default-features = false } From c0fbc44947b00c8574e82becd772ebec7d446f1d Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 26 Jun 2024 18:28:27 +0200 Subject: [PATCH 41/85] Add cargo vet exemption for half --- supply-chain/config.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/supply-chain/config.toml b/supply-chain/config.toml index 5f5146c50c..16334e636b 100644 --- a/supply-chain/config.toml +++ b/supply-chain/config.toml @@ -344,6 +344,10 @@ criteria = "safe-to-run" version = "0.3.21" criteria = "safe-to-deploy" +[[exemptions.half]] +version = "2.2.1" +criteria = "safe-to-deploy" + [[exemptions.hashbrown]] version = "0.14.2" criteria = "safe-to-deploy" From 1ffcf4e4e0c5a8a8f403ac64ef41bc28253afa5c Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 26 Jun 2024 18:36:51 +0200 Subject: [PATCH 42/85] Fix CI From beb1d8d9a955bd37ba63aa88bfe482c8e4e1d40e Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 26 Jun 2024 19:53:47 +0200 Subject: [PATCH 43/85] Fix tze build --- Cargo.lock | 18 ++--------- components/zcash_protocol/src/consensus.rs | 8 ++--- zcash_extensions/src/transparent/demo.rs | 7 ----- zcash_primitives/src/transaction/builder.rs | 6 ++-- .../src/transaction/components/tze/builder.rs | 4 +-- zcash_primitives/src/transaction/mod.rs | 30 ++++++------------- zcash_primitives/src/transaction/tests.rs | 4 +-- 7 files changed, 22 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab4c0468b3..5fc9c9d1d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1229,7 +1229,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0-ak#f7789bfb90c0435e5ca945ac7ddb5c92f8494ee6" +source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0-ak#984276d113f6ef2563a26feb8c634ffbda0d31c6" dependencies = [ "aes", "bitvec", @@ -1253,7 +1253,7 @@ dependencies = [ "serde", "subtle", "tracing", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1)", + "zcash_note_encryption 0.4.0", "zcash_spec", "zip32", ] @@ -2496,18 +2496,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "zcash_note_encryption" -version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#b8bd2a186fc04ec4f55b2db44df7374f03ab5725" -dependencies = [ - "chacha20", - "chacha20poly1305", - "cipher", - "rand_core", - "subtle", -] - [[package]] name = "zcash_primitives" version = "0.15.0" @@ -2545,7 +2533,7 @@ dependencies = [ "tracing", "zcash_address", "zcash_encoding", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", + "zcash_note_encryption", "zcash_protocol", "zcash_spec", "zip32", diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index a82e4ea699..f677ea23c7 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -688,17 +688,17 @@ impl BranchId { }), #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => params.activation_height(NetworkUpgrade::Nu6).map(|lower| { - #[cfg(feature = "zfuture")] + #[cfg(zcash_unstable = "zfuture")] let upper = params.activation_height(NetworkUpgrade::ZFuture); - #[cfg(not(feature = "zfuture"))] + #[cfg(not(zcash_unstable = "zfuture"))] let upper = None; (lower, upper) }), #[cfg(zcash_unstable = "nu7")] BranchId::Nu7 => params.activation_height(NetworkUpgrade::Nu7).map(|lower| { - #[cfg(feature = "zfuture")] + #[cfg(zcash_unstable = "zfuture")] let upper = params.activation_height(NetworkUpgrade::ZFuture); - #[cfg(not(feature = "zfuture"))] + #[cfg(not(zcash_unstable = "zfuture"))] let upper = None; (lower, upper) }), diff --git a/zcash_extensions/src/transparent/demo.rs b/zcash_extensions/src/transparent/demo.rs index 453e548240..302db829d2 100644 --- a/zcash_extensions/src/transparent/demo.rs +++ b/zcash_extensions/src/transparent/demo.rs @@ -513,7 +513,6 @@ mod tests { NetworkUpgrade::Heartwood => Some(BlockHeight::from_u32(903_800)), NetworkUpgrade::Canopy => Some(BlockHeight::from_u32(1_028_500)), NetworkUpgrade::Nu5 => Some(BlockHeight::from_u32(1_200_000)), - NetworkUpgrade::Nu6 => Some(BlockHeight::from_u32(1_200_000)), NetworkUpgrade::ZFuture => Some(BlockHeight::from_u32(1_400_000)), } } @@ -681,8 +680,6 @@ mod tests { None, None, None, - None, - None, Some(Bundle { vin: vec![], vout: vec![out_a], @@ -714,8 +711,6 @@ mod tests { None, None, None, - None, - None, Some(Bundle { vin: vec![in_b], vout: vec![out_b], @@ -743,8 +738,6 @@ mod tests { None, None, None, - None, - None, Some(Bundle { vin: vec![in_c], vout: vec![], diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 38ef5b759e..a7b7a2c310 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -315,7 +315,7 @@ pub struct Builder<'a, P, U: sapling::builder::ProverProgress> { sapling_asks: Vec, orchard_saks: Vec, #[cfg(zcash_unstable = "zfuture")] - tze_builder: TzeBuilder<'a, TransactionData>, + tze_builder: TzeBuilder<'a, TransactionData>, #[cfg(not(zcash_unstable = "zfuture"))] tze_builder: std::marker::PhantomData<&'a ()>, progress_notifier: U, @@ -876,7 +876,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< orchard::builder::Unproven, orchard::builder::Unauthorized, >, - ZatBalance, + Amount, OrchardZSA, >, > = None; @@ -1039,7 +1039,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> ExtensionTxBuilder<'a> for Builder<'a, P, U> { - type BuildCtx = TransactionData; + type BuildCtx = TransactionData; type BuildError = tze::builder::Error; fn add_tze_input( diff --git a/zcash_primitives/src/transaction/components/tze/builder.rs b/zcash_primitives/src/transaction/components/tze/builder.rs index 2f77b6ecce..e99de6980b 100644 --- a/zcash_primitives/src/transaction/components/tze/builder.rs +++ b/zcash_primitives/src/transaction/components/tze/builder.rs @@ -157,9 +157,9 @@ impl<'a, BuildCtx> TzeBuilder<'a, BuildCtx> { impl Bundle { pub fn into_authorized( self, - unauthed_tx: &tx::TransactionData, + unauthed_tx: &tx::TransactionData, signers: Vec< - TzeSigner<'_, tx::TransactionData>, + TzeSigner<'_, tx::TransactionData>, >, ) -> Result, Error> { // Create TZE input witnesses diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 678b1eecb7..d11c9571c5 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -258,7 +258,7 @@ impl TxVersion { TxVersion::Zip225 => true, #[cfg(zcash_unstable = "nu7")] TxVersion::Zsa => false, - #[cfg(feature = "zfuture")] + #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } } @@ -271,7 +271,7 @@ impl TxVersion { | TxVersion::Zip225 => false, #[cfg(zcash_unstable = "nu7")] TxVersion::Zsa => true, - #[cfg(feature = "zfuture")] + #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => false, } } @@ -395,7 +395,7 @@ pub struct TransactionData { orchard_zsa_bundle: Option>, #[cfg(zcash_unstable = "nu7")] issue_bundle: Option>, - #[cfg(feature = "zfuture")] + #[cfg(zcash_unstable = "zfuture")] tze_bundle: Option>, } @@ -425,10 +425,6 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, - #[cfg(zcash_unstable = "nu7")] - orchard_zsa_bundle, - #[cfg(zcash_unstable = "nu7")] - issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, } @@ -447,8 +443,6 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - orchard_zsa_bundle: Option>, - issue_bundle: Option>, tze_bundle: Option>, ) -> Self { TransactionData { @@ -460,8 +454,6 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, - orchard_zsa_bundle, - issue_bundle, tze_bundle, } } @@ -932,7 +924,7 @@ impl Transaction { let orchard_zsa_bundle = orchard_serialization::read_v6_bundle(&mut reader)?; let issue_bundle = issuance::read_v7_bundle(&mut reader)?; - #[cfg(feature = "zfuture")] + #[cfg(zcash_unstable = "zfuture")] let tze_bundle = if version.has_tze() { Self::read_tze(&mut reader)? } else { @@ -950,7 +942,7 @@ impl Transaction { orchard_bundle: None, orchard_zsa_bundle, issue_bundle, - #[cfg(feature = "zfuture")] + #[cfg(zcash_unstable = "zfuture")] tze_bundle, }; @@ -1087,7 +1079,7 @@ impl Transaction { self.write_v5_sapling(&mut writer)?; orchard_serialization::write_v6_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; issuance::write_v7_bundle(self.issue_bundle.as_ref(), &mut writer)?; - #[cfg(feature = "zfuture")] + #[cfg(zcash_unstable = "zfuture")] self.write_tze(&mut writer)?; Ok(()) } @@ -1265,9 +1257,9 @@ pub mod testing { sapling_bundle, orchard_bundle, #[cfg(zcash_unstable = "nu7")] - _orchard_zsa_bundle, + orchard_zsa_bundle: _orchard_zsa_bundle, #[cfg(zcash_unstable = "nu7")] - _issue_bundle, + issue_bundle: _issue_bundle, } } } @@ -1282,11 +1274,9 @@ pub mod testing { transparent_bundle in transparent::arb_bundle(), sapling_bundle in sapling::arb_bundle_for_version(version), orchard_bundle in orchard_testing::arb_bundle_for_version(version), - orchard_zsa_bundle in orchard_testing::arb_zsa_bundle_for_version(version), - issue_bundle in issuance::testing::arb_bundle_for_version(version), tze_bundle in tze::arb_bundle(consensus_branch_id), version in Just(version) - ) -> TransactionData { + ) -> TransactionData { TransactionData { version, consensus_branch_id, @@ -1296,8 +1286,6 @@ pub mod testing { sprout_bundle: None, sapling_bundle, orchard_bundle, - orchard_zsa_bundle, - issue_bundle, tze_bundle } } diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 86bcf8bc70..2182d2055a 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -61,7 +61,7 @@ fn check_roundtrip(tx: Transaction) -> Result<(), TestCaseError> { tx.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()) ); - #[cfg(zcash_unstable = "zfuture")] + #[cfg(zcash_unstable = "nu7")] if tx.issue_bundle.is_some() { prop_assert_eq!(tx.issue_bundle.as_ref(), txo.issue_bundle.as_ref()); } @@ -302,8 +302,6 @@ fn zip_0244() { txdata.sprout_bundle().cloned(), txdata.sapling_bundle().cloned(), txdata.orchard_bundle().cloned(), - txdata.orchard_zsa_bundle().cloned(), - txdata.issue_bundle().cloned(), txdata.tze_bundle().cloned(), ); (tdata, txdata.digest(TxIdDigester)) From fee70aac61bdc764218acda9e82c1bda44462626 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 26 Jun 2024 19:58:05 +0200 Subject: [PATCH 44/85] Fix tze fmt --- zcash_primitives/src/transaction/components/tze/builder.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/zcash_primitives/src/transaction/components/tze/builder.rs b/zcash_primitives/src/transaction/components/tze/builder.rs index e99de6980b..974dac9ce8 100644 --- a/zcash_primitives/src/transaction/components/tze/builder.rs +++ b/zcash_primitives/src/transaction/components/tze/builder.rs @@ -158,9 +158,7 @@ impl Bundle { pub fn into_authorized( self, unauthed_tx: &tx::TransactionData, - signers: Vec< - TzeSigner<'_, tx::TransactionData>, - >, + signers: Vec>>, ) -> Result, Error> { // Create TZE input witnesses let payloads = signers From 2c11d9abfa26ecba431ee548c31eeaff89304775 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 26 Jun 2024 20:06:20 +0200 Subject: [PATCH 45/85] Fix note_encryption version --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5fc9c9d1d3..7074cd5a9e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1253,7 +1253,7 @@ dependencies = [ "serde", "subtle", "tracing", - "zcash_note_encryption 0.4.0", + "zcash_note_encryption", "zcash_spec", "zip32", ] @@ -1776,7 +1776,7 @@ dependencies = [ "redjubjub", "subtle", "tracing", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", + "zcash_note_encryption", "zcash_spec", "zip32", ] From 918beb961e1f4b2a4a152d1e6095a4e2b226296b Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 26 Jun 2024 20:41:52 +0200 Subject: [PATCH 46/85] Disable wasm target --- .github/workflows/ci.yml | 72 ++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ccb6bd343a..a81631326e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -168,42 +168,42 @@ jobs: - name: Verify working directory is clean (excluding lockfile) run: git diff --exit-code ':!Cargo.lock' - build-nodefault: - name: Build target ${{ matrix.target }} - runs-on: ubuntu-latest - strategy: - matrix: - target: - - wasm32-wasi - - steps: - - uses: actions/checkout@v4 - with: - path: crates - # We use a synthetic crate to ensure no dev-dependencies are enabled, which can - # be incompatible with some of these targets. - - name: Create synthetic crate for testing - run: cargo init --lib ci-build - - name: Copy Rust version into synthetic crate - run: cp crates/rust-toolchain.toml ci-build/ - - name: Copy patch directives into synthetic crate - run: | - echo "[patch.crates-io]" >> ./ci-build/Cargo.toml - cat ./crates/Cargo.toml | sed "0,/.\+\(patch.crates.\+\)/d" >> ./ci-build/Cargo.toml - - name: Add zcash_proofs as a dependency of the synthetic crate - working-directory: ./ci-build - run: cargo add --no-default-features --path ../crates/zcash_proofs - - name: Add zcash_client_backend as a dependency of the synthetic crate - working-directory: ./ci-build - run: cargo add --features lightwalletd-tonic --path ../crates/zcash_client_backend - - name: Copy pinned dependencies into synthetic crate - run: cp crates/Cargo.lock ci-build/ - - name: Add target - working-directory: ./ci-build - run: rustup target add ${{ matrix.target }} - - name: Build for target - working-directory: ./ci-build - run: cargo build --verbose --target ${{ matrix.target }} +# build-nodefault: +# name: Build target ${{ matrix.target }} +# runs-on: ubuntu-latest +# strategy: +# matrix: +# target: +# - wasm32-wasi +# +# steps: +# - uses: actions/checkout@v4 +# with: +# path: crates +# # We use a synthetic crate to ensure no dev-dependencies are enabled, which can +# # be incompatible with some of these targets. +# - name: Create synthetic crate for testing +# run: cargo init --lib ci-build +# - name: Copy Rust version into synthetic crate +# run: cp crates/rust-toolchain.toml ci-build/ +# - name: Copy patch directives into synthetic crate +# run: | +# echo "[patch.crates-io]" >> ./ci-build/Cargo.toml +# cat ./crates/Cargo.toml | sed "0,/.\+\(patch.crates.\+\)/d" >> ./ci-build/Cargo.toml +# - name: Add zcash_proofs as a dependency of the synthetic crate +# working-directory: ./ci-build +# run: cargo add --no-default-features --path ../crates/zcash_proofs +# - name: Add zcash_client_backend as a dependency of the synthetic crate +# working-directory: ./ci-build +# run: cargo add --features lightwalletd-tonic --path ../crates/zcash_client_backend +# - name: Copy pinned dependencies into synthetic crate +# run: cp crates/Cargo.lock ci-build/ +# - name: Add target +# working-directory: ./ci-build +# run: rustup target add ${{ matrix.target }} +# - name: Build for target +# working-directory: ./ci-build +# run: cargo build --verbose --target ${{ matrix.target }} bitrot: name: Bitrot check From 46ac12c4b0f274ae7c31452bca4763b5f830699f Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Thu, 27 Jun 2024 16:53:01 +0200 Subject: [PATCH 47/85] Replace nu7 with nu6 temporarily --- components/zcash_protocol/src/consensus.rs | 51 +++---- .../zcash_protocol/src/local_consensus.rs | 25 ++- zcash_client_sqlite/src/testing.rs | 2 +- zcash_client_sqlite/src/wallet.rs | 4 +- zcash_client_sqlite/src/wallet/init.rs | 4 +- zcash_primitives/src/transaction/builder.rs | 55 +++---- zcash_primitives/src/transaction/mod.rs | 143 +++++++++--------- zcash_primitives/src/transaction/sighash.rs | 7 +- .../src/transaction/sighash_v5.rs | 3 +- zcash_primitives/src/transaction/tests.rs | 16 +- zcash_primitives/src/transaction/txid.rs | 29 ++-- 11 files changed, 162 insertions(+), 177 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index f677ea23c7..b45b8e57b5 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -355,9 +355,8 @@ impl Parameters for MainNetwork { NetworkUpgrade::Canopy => Some(BlockHeight(1_046_400)), NetworkUpgrade::Nu5 => Some(BlockHeight(1_687_104)), #[cfg(zcash_unstable = "nu6")] - NetworkUpgrade::Nu6 => None, - #[cfg(zcash_unstable = "nu7")] - NetworkUpgrade::Nu7 => Some(BlockHeight(1_687_107)), + NetworkUpgrade::Nu6 => Some(BlockHeight(1_687_106)), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => Some(BlockHeight(1_687_107)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -388,8 +387,9 @@ impl Parameters for TestNetwork { NetworkUpgrade::Nu5 => Some(BlockHeight(1_842_420)), #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => None, - #[cfg(zcash_unstable = "nu7")] - NetworkUpgrade::Nu7 => Some(BlockHeight(1_842_421)), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => { + Some(BlockHeight(1_842_421)) + } #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -461,7 +461,7 @@ pub enum NetworkUpgrade { /// The [Nu7] network upgrade. /// /// [Nu7]: https://z.cash/upgrade/nu7/ - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ Nu7, /// The ZFUTURE network upgrade. /// @@ -485,8 +485,7 @@ impl fmt::Display for NetworkUpgrade { NetworkUpgrade::Nu5 => write!(f, "Nu5"), #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => write!(f, "Nu6"), - #[cfg(zcash_unstable = "nu7")] - NetworkUpgrade::Nu7 => write!(f, "Nu7"), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => write!(f, "Nu7"), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => write!(f, "ZFUTURE"), } @@ -504,8 +503,7 @@ impl NetworkUpgrade { NetworkUpgrade::Nu5 => BranchId::Nu5, #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => BranchId::Nu6, - #[cfg(zcash_unstable = "nu7")] - NetworkUpgrade::Nu7 => BranchId::Nu7, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => BranchId::Nu7, #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => BranchId::ZFuture, } @@ -525,8 +523,7 @@ const UPGRADES_IN_ORDER: &[NetworkUpgrade] = &[ NetworkUpgrade::Nu5, #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6, - #[cfg(zcash_unstable = "nu7")] - NetworkUpgrade::Nu7, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7, ]; /// The "grace period" defined in [ZIP 212]. @@ -567,7 +564,7 @@ pub enum BranchId { #[cfg(zcash_unstable = "nu6")] Nu6, /// The consensus rules deployed by [`NetworkUpgrade::Nu7`]. - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ Nu7, /// Candidates for future consensus rules; this branch will never /// activate on mainnet. @@ -591,8 +588,7 @@ impl TryFrom for BranchId { 0xc2d6_d0b4 => Ok(BranchId::Nu5), #[cfg(zcash_unstable = "nu6")] 0xc8e7_1055 => Ok(BranchId::Nu6), - #[cfg(zcash_unstable = "nu7")] - 0x7777_7777 => Ok(BranchId::Nu7), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ 0x7777_7777 => Ok(BranchId::Nu7), #[cfg(zcash_unstable = "zfuture")] 0xffff_ffff => Ok(BranchId::ZFuture), _ => Err("Unknown consensus branch ID"), @@ -612,8 +608,7 @@ impl From for u32 { BranchId::Nu5 => 0xc2d6_d0b4, #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => 0xc8e7_1055, - #[cfg(zcash_unstable = "nu7")] - BranchId::Nu7 => 0x7777_7777, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7 => 0x7777_7777, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => 0xffff_ffff, } @@ -694,14 +689,15 @@ impl BranchId { let upper = None; (lower, upper) }), - #[cfg(zcash_unstable = "nu7")] - BranchId::Nu7 => params.activation_height(NetworkUpgrade::Nu7).map(|lower| { - #[cfg(zcash_unstable = "zfuture")] - let upper = params.activation_height(NetworkUpgrade::ZFuture); - #[cfg(not(zcash_unstable = "zfuture"))] - let upper = None; - (lower, upper) - }), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7 => { + params.activation_height(NetworkUpgrade::Nu7).map(|lower| { + #[cfg(zcash_unstable = "zfuture")] + let upper = params.activation_height(NetworkUpgrade::ZFuture); + #[cfg(not(zcash_unstable = "zfuture"))] + let upper = None; + (lower, upper) + }) + } #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => params .activation_height(NetworkUpgrade::ZFuture) @@ -732,8 +728,7 @@ pub mod testing { BranchId::Nu5, #[cfg(zcash_unstable = "nu6")] BranchId::Nu6, - #[cfg(zcash_unstable = "nu7")] - BranchId::Nu7, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture, ]) @@ -827,7 +822,7 @@ mod tests { BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_687_104)), BranchId::Nu5, ); - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ assert_eq!( BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_842_421)), BranchId::Nu7, diff --git a/components/zcash_protocol/src/local_consensus.rs b/components/zcash_protocol/src/local_consensus.rs index 154c4bc0b9..41616add79 100644 --- a/components/zcash_protocol/src/local_consensus.rs +++ b/components/zcash_protocol/src/local_consensus.rs @@ -39,8 +39,7 @@ pub struct LocalNetwork { pub nu5: Option, #[cfg(zcash_unstable = "nu6")] pub nu6: Option, - #[cfg(zcash_unstable = "nu7")] - pub nu7: Option, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub nu7: Option, #[cfg(zcash_unstable = "zfuture")] pub z_future: Option, } @@ -61,8 +60,7 @@ impl Parameters for LocalNetwork { NetworkUpgrade::Nu5 => self.nu5, #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => self.nu6, - #[cfg(zcash_unstable = "nu7")] - NetworkUpgrade::Nu7 => self.nu7, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => self.nu7, #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => self.z_future, } @@ -87,8 +85,7 @@ mod tests { let expected_nu5 = BlockHeight::from_u32(6); #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); - #[cfg(zcash_unstable = "nu7")] - let expected_nu7 = BlockHeight::from_u32(8); + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -101,7 +98,7 @@ mod tests { nu5: Some(expected_nu5), #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), @@ -115,7 +112,7 @@ mod tests { assert!(regtest.is_nu_active(NetworkUpgrade::Nu5, expected_nu5)); #[cfg(zcash_unstable = "nu6")] assert!(regtest.is_nu_active(NetworkUpgrade::Nu6, expected_nu6)); - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ assert!(regtest.is_nu_active(NetworkUpgrade::Nu7, expected_nu7)); #[cfg(zcash_unstable = "zfuture")] assert!(!regtest.is_nu_active(NetworkUpgrade::ZFuture, expected_nu5)); @@ -131,8 +128,7 @@ mod tests { let expected_nu5 = BlockHeight::from_u32(6); #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); - #[cfg(zcash_unstable = "nu7")] - let expected_nu7 = BlockHeight::from_u32(8); + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -145,7 +141,7 @@ mod tests { nu5: Some(expected_nu5), #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), @@ -180,7 +176,7 @@ mod tests { regtest.activation_height(NetworkUpgrade::Nu6), Some(expected_nu6) ); - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ assert_eq!( regtest.activation_height(NetworkUpgrade::Nu7), Some(expected_nu7) @@ -202,8 +198,7 @@ mod tests { let expected_nu5 = BlockHeight::from_u32(6); #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); - #[cfg(zcash_unstable = "nu7")] - let expected_nu7 = BlockHeight::from_u32(8); + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -216,7 +211,7 @@ mod tests { nu5: Some(expected_nu5), #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), diff --git a/zcash_client_sqlite/src/testing.rs b/zcash_client_sqlite/src/testing.rs index f643c37c5d..1230a0b05e 100644 --- a/zcash_client_sqlite/src/testing.rs +++ b/zcash_client_sqlite/src/testing.rs @@ -129,7 +129,7 @@ impl TestBuilder<()> { nu5: Some(BlockHeight::from_u32(100_000)), #[cfg(zcash_unstable = "nu6")] nu6: None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ nu7: Some(BlockHeight::from_u32(100_000)), #[cfg(zcash_unstable = "zfuture")] z_future: None, diff --git a/zcash_client_sqlite/src/wallet.rs b/zcash_client_sqlite/src/wallet.rs index e72561e0cf..5ec3a0f8b7 100644 --- a/zcash_client_sqlite/src/wallet.rs +++ b/zcash_client_sqlite/src/wallet.rs @@ -1490,9 +1490,9 @@ pub(crate) fn get_transaction( tx_data.sprout_bundle().cloned(), tx_data.sapling_bundle().cloned(), tx_data.orchard_bundle().cloned(), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ tx_data.orchard_zsa_bundle().cloned(), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ tx_data.issue_bundle().cloned(), ) .freeze() diff --git a/zcash_client_sqlite/src/wallet/init.rs b/zcash_client_sqlite/src/wallet/init.rs index ff9572f89c..eae5080e73 100644 --- a/zcash_client_sqlite/src/wallet/init.rs +++ b/zcash_client_sqlite/src/wallet/init.rs @@ -1275,9 +1275,9 @@ mod tests { None, None, None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ None, ) .freeze() diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index a7b7a2c310..403edb8656 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -51,19 +51,17 @@ use crate::{ }, }; -#[cfg(zcash_unstable = "nu7")] +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; use orchard::note::AssetBase; use orchard::orchard_flavors::OrchardVanilla; -#[cfg(zcash_unstable = "nu7")] -use orchard::orchard_flavors::OrchardZSA; -#[cfg(zcash_unstable = "nu7")] +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::orchard_flavors::OrchardZSA; +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::{ issuance::{IssueBundle, IssueInfo}, keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}, }; -#[cfg(zcash_unstable = "nu7")] -use rand_core::OsRng; +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use rand_core::OsRng; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -304,9 +302,9 @@ pub struct Builder<'a, P, U: sapling::builder::ProverProgress> { transparent_builder: TransparentBuilder, sapling_builder: Option, orchard_builder: Option, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issuance_builder: Option>, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issuance_key: Option, // TODO: In the future, instead of taking the spending keys as arguments when calling // `add_sapling_spend` or `add_orchard_spend`, we will build an unauthorized, unproven @@ -399,9 +397,9 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { transparent_builder: TransparentBuilder::empty(), sapling_builder, orchard_builder, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issuance_builder: None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), @@ -431,9 +429,9 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { transparent_builder: self.transparent_builder, sapling_builder: self.sapling_builder, orchard_builder: self.orchard_builder, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issuance_builder: self.issuance_builder, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issuance_key: self.issuance_key, sapling_asks: self.sapling_asks, orchard_saks: self.orchard_saks, @@ -443,7 +441,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds an Issuance action to the transaction. - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub fn init_issue_bundle( &mut self, ik: IssuanceAuthorizingKey, @@ -471,7 +469,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds an Issuance action to the transaction. - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub fn add_issuance( &mut self, asset_desc: String, @@ -491,7 +489,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds a Burn action to the transaction. - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { self.orchard_builder .as_mut() @@ -506,7 +504,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// /// Returns an error if the given Merkle path does not have the required anchor for /// the given note. - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub fn add_orchard_zsa_spend( &mut self, sk: &orchard::keys::SpendingKey, @@ -517,7 +515,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds an Orchard ZSA output to the transaction. - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub fn add_orchard_zsa_output( &mut self, ovk: Option, @@ -869,8 +867,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< }; let mut unproven_orchard_bundle = None; - #[cfg(zcash_unstable = "nu7")] - let mut unproven_orchard_zsa_bundle: Option< + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let mut unproven_orchard_zsa_bundle: Option< orchard::Bundle< orchard::builder::InProgress< orchard::builder::Unproven, @@ -884,7 +881,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< if let Some(builder) = self.orchard_builder { if version.has_zsa() { - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ { let (bundle, meta) = builder .build(&mut rng) @@ -916,9 +913,9 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: None, sapling_bundle, orchard_bundle: unproven_orchard_bundle, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: unproven_orchard_zsa_bundle, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: self.issuance_builder, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -982,8 +979,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .transpose() .map_err(Error::OrchardBuild)?; - #[cfg(zcash_unstable = "nu7")] - let orchard_zsa_bundle = unauthed_tx + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let orchard_zsa_bundle = unauthed_tx .orchard_zsa_bundle .map(|b| { b.create_proof( @@ -1001,8 +997,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .transpose() .map_err(Error::OrchardBuild)?; - #[cfg(zcash_unstable = "nu7")] - let issue_bundle = unauthed_tx + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let issue_bundle = unauthed_tx .issue_bundle .map(|b| b.prepare(*shielded_sig_commitment.as_ref())) .map(|b| b.sign(self.issuance_key.as_ref().unwrap())) @@ -1017,9 +1012,9 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: unauthed_tx.sprout_bundle, sapling_bundle, orchard_bundle, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -1182,9 +1177,9 @@ mod tests { tze_builder: std::marker::PhantomData, progress_notifier: (), orchard_builder: None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issuance_builder: None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index d11c9571c5..bd2609fb03 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -29,9 +29,8 @@ use crate::{ sapling::{self, builder as sapling_builder}, }; -#[cfg(zcash_unstable = "nu7")] -use crate::transaction::components::issuance; -#[cfg(zcash_unstable = "nu7")] +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use crate::transaction::components::issuance; +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::{issuance::IssueBundle, orchard_flavors::OrchardZSA}; use self::{ @@ -57,9 +56,9 @@ const SAPLING_TX_VERSION: u32 = 4; const V5_TX_VERSION: u32 = 5; const V5_VERSION_GROUP_ID: u32 = 0x26A7270A; -#[cfg(zcash_unstable = "nu7")] +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ const V7_TX_VERSION: u32 = 7; -#[cfg(zcash_unstable = "nu7")] +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ const V7_VERSION_GROUP_ID: u32 = 0x26A7270C; // TODO ??? /// These versions are used exclusively for in-development transaction @@ -144,8 +143,7 @@ pub enum TxVersion { Overwinter, Sapling, Zip225, - #[cfg(zcash_unstable = "nu7")] - Zsa, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ Zsa, #[cfg(zcash_unstable = "zfuture")] ZFuture, } @@ -161,8 +159,9 @@ impl TxVersion { (OVERWINTER_TX_VERSION, OVERWINTER_VERSION_GROUP_ID) => Ok(TxVersion::Overwinter), (SAPLING_TX_VERSION, SAPLING_VERSION_GROUP_ID) => Ok(TxVersion::Sapling), (V5_TX_VERSION, V5_VERSION_GROUP_ID) => Ok(TxVersion::Zip225), - #[cfg(zcash_unstable = "nu7")] - (V7_TX_VERSION, V7_VERSION_GROUP_ID) => Ok(TxVersion::Zsa), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ (V7_TX_VERSION, V7_VERSION_GROUP_ID) => { + Ok(TxVersion::Zsa) + } #[cfg(zcash_unstable = "zfuture")] (ZFUTURE_TX_VERSION, ZFUTURE_VERSION_GROUP_ID) => Ok(TxVersion::ZFuture), _ => Err(io::Error::new( @@ -193,8 +192,7 @@ impl TxVersion { TxVersion::Overwinter => OVERWINTER_TX_VERSION, TxVersion::Sapling => SAPLING_TX_VERSION, TxVersion::Zip225 => V5_TX_VERSION, - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => V7_TX_VERSION, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => V7_TX_VERSION, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_TX_VERSION, } @@ -206,8 +204,7 @@ impl TxVersion { TxVersion::Overwinter => OVERWINTER_VERSION_GROUP_ID, TxVersion::Sapling => SAPLING_VERSION_GROUP_ID, TxVersion::Zip225 => V5_VERSION_GROUP_ID, - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => V7_VERSION_GROUP_ID, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => V7_VERSION_GROUP_ID, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_VERSION_GROUP_ID, } @@ -227,8 +224,7 @@ impl TxVersion { TxVersion::Sprout(v) => *v >= 2u32, TxVersion::Overwinter | TxVersion::Sapling => true, TxVersion::Zip225 => false, - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => false, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => false, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -244,8 +240,7 @@ impl TxVersion { TxVersion::Sprout(_) | TxVersion::Overwinter => false, TxVersion::Sapling => true, TxVersion::Zip225 => true, - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => true, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => true, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -256,8 +251,7 @@ impl TxVersion { match self { TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => false, TxVersion::Zip225 => true, - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => false, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => false, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -269,8 +263,7 @@ impl TxVersion { | TxVersion::Overwinter | TxVersion::Sapling | TxVersion::Zip225 => false, - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => true, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => true, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => false, } @@ -292,8 +285,7 @@ impl TxVersion { BranchId::Nu5 => TxVersion::Zip225, #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => TxVersion::Zip225, - #[cfg(zcash_unstable = "nu7")] - BranchId::Nu7 => TxVersion::Zsa, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7 => TxVersion::Zsa, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => TxVersion::ZFuture, } @@ -306,10 +298,10 @@ pub trait Authorization { type SaplingAuth: sapling::bundle::Authorization; type OrchardAuth: orchard::bundle::Authorization; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type OrchardZsaAuth: orchard::bundle::Authorization; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type IssueAuth: orchard::issuance::IssueAuth; #[cfg(zcash_unstable = "zfuture")] @@ -325,10 +317,10 @@ impl Authorization for Authorized { type SaplingAuth = sapling::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type OrchardZsaAuth = orchard::bundle::Authorized; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type IssueAuth = orchard::issuance::Signed; #[cfg(zcash_unstable = "zfuture")] @@ -348,11 +340,11 @@ impl Authorization for Unauthorized { type OrchardAuth = orchard::builder::InProgress, orchard::builder::Unauthorized>; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type OrchardZsaAuth = orchard::builder::InProgress, orchard::builder::Unauthorized>; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type IssueAuth = orchard::issuance::Unauthorized; #[cfg(zcash_unstable = "zfuture")] @@ -391,10 +383,9 @@ pub struct TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: Option>, - #[cfg(zcash_unstable = "nu7")] - issue_bundle: Option>, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: Option>, #[cfg(zcash_unstable = "zfuture")] tze_bundle: Option>, } @@ -411,10 +402,12 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - #[cfg(zcash_unstable = "nu7")] orchard_zsa_bundle: Option< + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: Option< orchard::Bundle, >, - #[cfg(zcash_unstable = "nu7")] issue_bundle: Option>, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: Option< + IssueBundle, + >, ) -> Self { TransactionData { version, @@ -425,6 +418,10 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + orchard_zsa_bundle, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, } @@ -494,14 +491,14 @@ impl TransactionData { self.orchard_bundle.as_ref() } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub fn orchard_zsa_bundle( &self, ) -> Option<&orchard::Bundle> { self.orchard_zsa_bundle.as_ref() } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub fn issue_bundle(&self) -> Option<&IssueBundle> { self.issue_bundle.as_ref() } @@ -552,19 +549,19 @@ impl TransactionData { digester.digest_transparent(self.transparent_bundle.as_ref()), digester.digest_sapling(self.sapling_bundle.as_ref()), self.digest_orchard(&digester), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ digester.digest_issue(self.issue_bundle.as_ref()), #[cfg(zcash_unstable = "zfuture")] digester.digest_tze(self.tze_bundle.as_ref()), ) } - #[cfg(not(zcash_unstable = "nu7"))] + #[cfg(not(zcash_unstable = "nu6"))] /* TODO nu7 */ fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { digester.digest_orchard(self.orchard_bundle.as_ref()) } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { if self.version.has_zsa() { digester.digest_orchard_zsa(self.orchard_zsa_bundle.as_ref()) @@ -590,12 +587,12 @@ impl TransactionData { ) -> Option< orchard::bundle::Bundle, >, - #[cfg(zcash_unstable = "nu7")] f_zsa_orchard: impl FnOnce( + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ f_zsa_orchard: impl FnOnce( Option>, ) -> Option< orchard::bundle::Bundle, >, - #[cfg(zcash_unstable = "nu7")] f_issue: impl FnOnce( + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ f_issue: impl FnOnce( Option>, ) -> Option< orchard::issuance::IssueBundle, @@ -614,9 +611,9 @@ impl TransactionData { sprout_bundle: self.sprout_bundle, sapling_bundle: f_sapling(self.sapling_bundle), orchard_bundle: f_orchard(self.orchard_bundle), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: f_zsa_orchard(self.orchard_zsa_bundle), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: f_issue(self.issue_bundle), #[cfg(zcash_unstable = "zfuture")] tze_bundle: f_tze(self.tze_bundle), @@ -628,11 +625,16 @@ impl TransactionData { f_transparent: impl transparent::MapAuth, mut f_sapling: impl sapling_serialization::MapAuth, mut f_orchard: impl orchard_serialization::MapAuth, - #[cfg(zcash_unstable = "nu7")] mut f_orchard_zsa: impl orchard_serialization::MapAuth< + #[cfg(zcash_unstable = "nu6")] + /* TODO nu7 */ + mut f_orchard_zsa: impl orchard_serialization::MapAuth< A::OrchardZsaAuth, B::OrchardZsaAuth, >, - #[cfg(zcash_unstable = "nu7")] f_issue: impl issuance::MapIssueAuth, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ f_issue: impl issuance::MapIssueAuth< + A::IssueAuth, + B::IssueAuth, + >, #[cfg(zcash_unstable = "zfuture")] f_tze: impl tze::MapAuth, ) -> TransactionData { TransactionData { @@ -660,7 +662,7 @@ impl TransactionData { |f, a| f.map_authorization(a), ) }), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: self.orchard_zsa_bundle.map(|b| { b.map_authorization( &mut f_orchard_zsa, @@ -668,7 +670,7 @@ impl TransactionData { |f, a| f.map_authorization(a), ) }), - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: self .issue_bundle .map(|b| b.map_authorization(|a| f_issue.map_issue_authorization(a))), @@ -699,8 +701,9 @@ impl Transaction { Self::from_data_v4(data) } TxVersion::Zip225 => Ok(Self::from_data_v5(data)), - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => Ok(Self::from_data_v7(data)), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => { + Ok(Self::from_data_v7(data)) + } #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Ok(Self::from_data_v5(data)), } @@ -727,7 +730,7 @@ impl Transaction { Transaction { txid, data } } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn from_data_v7(data: TransactionData) -> Self { Self::from_data_v5(data) } @@ -749,8 +752,9 @@ impl Transaction { Self::read_v4(reader, version, consensus_branch_id) } TxVersion::Zip225 => Self::read_v5(reader.into_base_reader(), version), - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => Self::read_v7(reader.into_base_reader(), version), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => { + Self::read_v7(reader.into_base_reader(), version) + } #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Self::read_v5(reader.into_base_reader(), version), } @@ -827,9 +831,9 @@ impl Transaction { ) }), orchard_bundle: None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, @@ -883,9 +887,9 @@ impl Transaction { sprout_bundle: None, sapling_bundle, orchard_bundle, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: None, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -915,7 +919,7 @@ impl Transaction { sapling_serialization::read_v5_bundle(reader) } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn read_v7(mut reader: R, version: TxVersion) -> io::Result { let (consensus_branch_id, lock_time, expiry_height) = Self::read_v5_header_fragment(&mut reader)?; @@ -970,8 +974,7 @@ impl Transaction { self.write_v4(writer) } TxVersion::Zip225 => self.write_v5(writer), - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => self.write_v7(writer), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => self.write_v7(writer), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => self.write_v5(writer), } @@ -1066,7 +1069,7 @@ impl Transaction { sapling_serialization::write_v5_bundle(writer, self.sapling_bundle.as_ref()) } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub fn write_v7(&self, mut writer: W) -> io::Result<()> { if self.sprout_bundle.is_some() { return Err(io::Error::new( @@ -1123,8 +1126,7 @@ pub struct TxDigests { pub transparent_digests: Option>, pub sapling_digest: Option, pub orchard_digest: Option, - #[cfg(zcash_unstable = "nu7")] - pub issue_digest: Option, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] pub tze_digests: Option>, } @@ -1135,7 +1137,7 @@ pub trait TransactionDigest { type SaplingDigest; type OrchardDigest; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type IssueDigest; #[cfg(zcash_unstable = "zfuture")] @@ -1166,13 +1168,13 @@ pub trait TransactionDigest { orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn digest_orchard_zsa( &self, orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest; #[cfg(zcash_unstable = "zfuture")] @@ -1184,7 +1186,7 @@ pub trait TransactionDigest { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest; } @@ -1226,8 +1228,9 @@ pub mod testing { BranchId::Nu5 => Just(TxVersion::Zip225).boxed(), #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => Just(TxVersion::Zip225).boxed(), - #[cfg(zcash_unstable = "nu7")] - BranchId::Nu7 => Just(TxVersion::Zsa).boxed(), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7 => { + Just(TxVersion::Zsa).boxed() + } #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => Just(TxVersion::ZFuture).boxed(), } @@ -1256,9 +1259,9 @@ pub mod testing { sprout_bundle: None, sapling_bundle, orchard_bundle, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: _orchard_zsa_bundle, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: _issue_bundle, } } diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index 94900a6b2e..b2b02f562c 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -11,7 +11,7 @@ use crate::{ sapling::{self, bundle::GrothProofBytes}, }; -#[cfg(zcash_unstable = "nu7")] +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use crate::transaction::sighash_v7::v7_signature_hash; #[cfg(zcash_unstable = "zfuture")] use {super::components::Amount, crate::extensions::transparent::Precondition}; @@ -93,8 +93,9 @@ pub fn signature_hash< TxVersion::Zip225 => v5_signature_hash(tx, signable_input, txid_parts), - #[cfg(zcash_unstable = "nu7")] - TxVersion::Zsa => v7_signature_hash(tx, signable_input, txid_parts), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => { + v7_signature_hash(tx, signable_input, txid_parts) + } #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => v5_signature_hash(tx, signable_input, txid_parts), diff --git a/zcash_primitives/src/transaction/sighash_v5.rs b/zcash_primitives/src/transaction/sighash_v5.rs index 3ae6cb99d9..62a6827bca 100644 --- a/zcash_primitives/src/transaction/sighash_v5.rs +++ b/zcash_primitives/src/transaction/sighash_v5.rs @@ -197,8 +197,7 @@ pub fn v5_signature_hash< ), txid_parts.sapling_digest, txid_parts.orchard_digest, - #[cfg(zcash_unstable = "nu7")] - txid_parts.issue_digest, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ txid_parts.issue_digest, #[cfg(zcash_unstable = "zfuture")] tx.tze_bundle .as_ref() diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 2182d2055a..ad2a37167c 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -56,12 +56,12 @@ fn check_roundtrip(tx: Transaction) -> Result<(), TestCaseError> { tx.orchard_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_bundle.as_ref().map(|v| *v.value_balance()) ); - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ prop_assert_eq!( tx.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()) ); - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ if tx.issue_bundle.is_some() { prop_assert_eq!(tx.issue_bundle.as_ref(), txo.issue_bundle.as_ref()); } @@ -130,7 +130,7 @@ proptest! { } } -#[cfg(zcash_unstable = "nu7")] +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ proptest! { #![proptest_config(ProptestConfig::with_cases(10))] #[test] @@ -221,10 +221,10 @@ impl Authorization for TestUnauthorized { type SaplingAuth = sapling::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type OrchardZsaAuth = orchard::bundle::Authorized; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type IssueAuth = orchard::issuance::Signed; #[cfg(zcash_unstable = "zfuture")] @@ -287,10 +287,8 @@ fn zip_0244() { txdata.sprout_bundle().cloned(), txdata.sapling_bundle().cloned(), txdata.orchard_bundle().cloned(), - #[cfg(zcash_unstable = "nu7")] - txdata.orchard_zsa_bundle().cloned(), - #[cfg(zcash_unstable = "nu7")] - txdata.issue_bundle().cloned(), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ txdata.orchard_zsa_bundle().cloned(), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ txdata.issue_bundle().cloned(), ); #[cfg(zcash_unstable = "zfuture")] let tdata = TransactionData::from_parts_zfuture( diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 811f2cecaa..f90efd6179 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -7,7 +7,7 @@ use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; use orchard::bundle; use orchard::orchard_flavors::OrchardVanilla; -#[cfg(zcash_unstable = "nu7")] +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::{ issuance::{IssueBundle, Signed}, orchard_flavors::OrchardZSA, @@ -309,7 +309,7 @@ impl TransactionDigest for TxIdDigester { type TransparentDigest = Option>; type SaplingDigest = Option; type OrchardDigest = Option; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type IssueDigest = Option; #[cfg(zcash_unstable = "zfuture")] @@ -348,7 +348,7 @@ impl TransactionDigest for TxIdDigester { orchard_bundle.map(|b| b.commitment().0) } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn digest_orchard_zsa( &self, orchard_bundle: Option<&bundle::Bundle>, @@ -356,7 +356,7 @@ impl TransactionDigest for TxIdDigester { orchard_bundle.map(|b| b.commitment().0) } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { issue_bundle.map(|b| b.commitment().0) } @@ -372,7 +372,7 @@ impl TransactionDigest for TxIdDigester { transparent_digests: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digests: Self::TzeDigest, ) -> Self::Digest { TxDigests { @@ -380,7 +380,7 @@ impl TransactionDigest for TxIdDigester { transparent_digests, sapling_digest, orchard_digest, - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest, #[cfg(zcash_unstable = "zfuture")] tze_digests, @@ -396,7 +396,7 @@ pub(crate) fn to_hash( transparent_digest: Blake2bHash, sapling_digest: Option, orchard_digest: Option, - #[cfg(zcash_unstable = "nu7")] issue_digest: Option, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] tze_digests: Option<&TzeDigests>, ) -> Blake2bHash { let mut personal = [0; 16]; @@ -421,7 +421,7 @@ pub(crate) fn to_hash( ) .unwrap(); - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ if _txversion.has_zsa() { h.write_all( issue_digest @@ -452,8 +452,7 @@ pub fn to_txid( hash_transparent_txid_data(digests.transparent_digests.as_ref()), digests.sapling_digest, digests.orchard_digest, - #[cfg(zcash_unstable = "nu7")] - digests.issue_digest, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ digests.issue_digest, #[cfg(zcash_unstable = "zfuture")] digests.tze_digests.as_ref(), ); @@ -475,7 +474,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { type SaplingDigest = Blake2bHash; type OrchardDigest = Blake2bHash; - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ type IssueDigest = Blake2bHash; #[cfg(zcash_unstable = "zfuture")] @@ -540,7 +539,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { }) } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn digest_orchard_zsa( &self, orchard_bundle: Option<&bundle::Bundle>, @@ -550,7 +549,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { }) } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { issue_bundle.map_or_else(bundle::commitments::hash_issue_bundle_auth_empty, |b| { b.authorizing_commitment().0 @@ -574,7 +573,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu7")] issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest { let digests = [transparent_digest, sapling_digest, orchard_digest]; @@ -590,7 +589,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { h.write_all(digest.as_bytes()).unwrap(); } - #[cfg(zcash_unstable = "nu7")] + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ if TxVersion::suggested_for_branch(consensus_branch_id).has_zsa() { h.write_all(issue_digest.as_bytes()).unwrap(); } From 6b743b81d724303832d89ea623c3aaed5c7f8088 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Thu, 27 Jun 2024 17:01:25 +0200 Subject: [PATCH 48/85] Fix fmt --- components/zcash_protocol/src/consensus.rs | 4 +++- zcash_primitives/src/transaction/mod.rs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index b45b8e57b5..8326d385ac 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -356,7 +356,9 @@ impl Parameters for MainNetwork { NetworkUpgrade::Nu5 => Some(BlockHeight(1_687_104)), #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => Some(BlockHeight(1_687_106)), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => Some(BlockHeight(1_687_107)), + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => { + Some(BlockHeight(1_687_107)) + } #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index bd2609fb03..fd0cd42dd3 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -626,7 +626,7 @@ impl TransactionData { mut f_sapling: impl sapling_serialization::MapAuth, mut f_orchard: impl orchard_serialization::MapAuth, #[cfg(zcash_unstable = "nu6")] - /* TODO nu7 */ + /* TODO nu7 */ mut f_orchard_zsa: impl orchard_serialization::MapAuth< A::OrchardZsaAuth, B::OrchardZsaAuth, From 9b9e52574256bbbb3d0d5a0d3af368b35a9f1c26 Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 16 Jul 2024 16:03:23 +0200 Subject: [PATCH 49/85] Update librustzcash to align with orchard crate (#67) This PR updates `librustzcash` to accommodate the recent refactoring changes in the `orchard` crate. The specific changes include: - Renamed all references from `orchard_flavors` to `orchard_flavor` to match the new module name. - Updated the `OrchardDomain` trait references to `OrchardDomainCommon` to reflect the trait renaming. - Adjusted the `Bundle` structure to use the fixed `NoteValue` type for the `burn` field, replacing the previous generic argument. - Refactored associated code to align with the new structure and naming conventions in the `orchard` crate. - Switched from the `orchardzsa-backward-compatibility-0.8.0-ak` to `orchardzsa-backward-compatibility-0.8.0` branch in `Cargo.toml` to use the latest version of the `orchard` crate. --------- Co-authored-by: Dmitry Demin --- Cargo.lock | 24 ++++++++++++++----- Cargo.toml | 4 ++-- zcash_primitives/src/transaction/builder.rs | 4 ++-- .../src/transaction/components/orchard.rs | 22 ++++++++--------- zcash_primitives/src/transaction/mod.rs | 11 ++++++--- zcash_primitives/src/transaction/txid.rs | 4 ++-- 6 files changed, 43 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7074cd5a9e..e7a81fe342 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -771,7 +771,7 @@ dependencies = [ [[package]] name = "halo2_gadgets" version = "0.3.0" -source = "git+https://github.com/QED-it/halo2?branch=orchardzsa-backward-compatability#4cc147385e7cf106b9fab6d6951d66a343899e38" +source = "git+https://github.com/QED-it/halo2?rev=7f5c0babd61f8ca46c9165a1adfac298d3fd3a11#7f5c0babd61f8ca46c9165a1adfac298d3fd3a11" dependencies = [ "arrayvec", "bitvec", @@ -794,7 +794,7 @@ checksum = "47716fe1ae67969c5e0b2ef826f32db8c3be72be325e1aa3c1951d06b5575ec5" [[package]] name = "halo2_proofs" version = "0.3.0" -source = "git+https://github.com/QED-it/halo2?branch=orchardzsa-backward-compatability#4cc147385e7cf106b9fab6d6951d66a343899e38" +source = "git+https://github.com/QED-it/halo2?rev=7f5c0babd61f8ca46c9165a1adfac298d3fd3a11#7f5c0babd61f8ca46c9165a1adfac298d3fd3a11" dependencies = [ "blake2b_simd", "ff", @@ -1229,7 +1229,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=orchardzsa-backward-compatability-0.8.0-ak#984276d113f6ef2563a26feb8c634ffbda0d31c6" +source = "git+https://github.com/QED-it/orchard?branch=zsa1#39b479ea81045e5c5ac719821fe2feb2bfce5f36" dependencies = [ "aes", "bitvec", @@ -1253,7 +1253,7 @@ dependencies = [ "serde", "subtle", "tracing", - "zcash_note_encryption", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1)", "zcash_spec", "zip32", ] @@ -1776,7 +1776,7 @@ dependencies = [ "redjubjub", "subtle", "tracing", - "zcash_note_encryption", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", "zcash_spec", "zip32", ] @@ -2496,6 +2496,18 @@ dependencies = [ "subtle", ] +[[package]] +name = "zcash_note_encryption" +version = "0.4.0" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#b8bd2a186fc04ec4f55b2db44df7374f03ab5725" +dependencies = [ + "chacha20", + "chacha20poly1305", + "cipher", + "rand_core", + "subtle", +] + [[package]] name = "zcash_primitives" version = "0.15.0" @@ -2533,7 +2545,7 @@ dependencies = [ "tracing", "zcash_address", "zcash_encoding", - "zcash_note_encryption", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", "zcash_protocol", "zcash_spec", "zip32", diff --git a/Cargo.toml b/Cargo.toml index 9a57a38b54..58c05b2ff2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,7 +58,7 @@ sapling = { package = "sapling-crypto", version = "0.1.3" } # - Orchard nonempty = "0.7" -orchard = { version = "0.8.0", default-features = false, git = "https://github.com/QED-it/orchard", branch = "orchardzsa-backward-compatability-0.8.0-ak" } +orchard = { version = "0.8.0", default-features = false, git = "https://github.com/QED-it/orchard", branch = "zsa1" } pasta_curves = "0.5" # - Transparent @@ -125,4 +125,4 @@ codegen-units = 1 [patch.crates-io] zcash_note_encryption = { version = "0.4", git = "https://github.com/QED-it/zcash_note_encryption", branch = "fix-sapling-constants" } -sapling = { package = "sapling-crypto", version = "0.1.3", git = "https://github.com/QED-it/sapling-crypto", branch = "orchard-backward-compatibility" } \ No newline at end of file +sapling = { package = "sapling-crypto", version = "0.1.3", git = "https://github.com/QED-it/sapling-crypto", branch = "orchard-backward-compatibility" } diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 403edb8656..8a9c9ad8bd 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -54,8 +54,8 @@ use crate::{ #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; use orchard::note::AssetBase; -use orchard::orchard_flavors::OrchardVanilla; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::orchard_flavors::OrchardZSA; +use orchard::orchard_flavor::OrchardVanilla; +#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::orchard_flavor::OrchardZSA; #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::{ issuance::{IssueBundle, IssueInfo}, diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 5b9b05f4f0..bc59747ea2 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -6,13 +6,13 @@ use crate::transaction::components::issuance::read_asset; use byteorder::{ReadBytesExt, WriteBytesExt}; use nonempty::NonEmpty; use orchard::note::AssetBase; -use orchard::note_encryption::OrchardDomain; -use orchard::orchard_flavors::{OrchardVanilla, OrchardZSA}; +use orchard::note_encryption::OrchardDomainCommon; +use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use orchard::{ bundle::{Authorization, Authorized, Flags}, note::{ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, primitives::redpallas::{self, SigType, Signature, SpendAuth, VerificationKey}, - value::ValueCommitment, + value::{NoteValue, ValueCommitment}, Action, Anchor, }; use zcash_encoding::{Array, CompactSize, Vector}; @@ -125,8 +125,8 @@ pub fn read_v6_bundle( } } -fn read_burn(reader: &mut R) -> io::Result<(AssetBase, Amount)> { - Ok((read_asset(reader)?, Transaction::read_amount(reader)?)) +fn read_burn(reader: &mut R) -> io::Result<(AssetBase, NoteValue)> { + Ok((read_asset(reader)?, Transaction::read_note_value(reader)?)) } pub fn read_value_commitment(mut reader: R) -> io::Result { @@ -186,7 +186,7 @@ pub fn read_note_ciphertext( ) -> io::Result> { let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from( + enc_ciphertext: ::NoteCiphertextBytes::from( [0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref(), ), out_ciphertext: [0u8; 80], @@ -204,7 +204,7 @@ pub fn read_zsa_note_ciphertext( ) -> io::Result> { let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from( + enc_ciphertext: ::NoteCiphertextBytes::from( [0u8; OrchardZSA::ENC_CIPHERTEXT_SIZE].as_ref(), ), out_ciphertext: [0u8; 80], @@ -338,7 +338,7 @@ pub fn write_v6_bundle( Vector::write(&mut writer, bundle.burn(), |w, (asset, amount)| { w.write_all(&asset.to_bytes())?; - w.write_all(&amount.to_i64_le_bytes())?; + w.write_all(&amount.to_bytes())?; Ok(()) })?; @@ -371,7 +371,7 @@ pub fn write_cmx(mut writer: W, cmx: &ExtractedNoteCommitment) -> io:: writer.write_all(&cmx.to_bytes()) } -pub fn write_note_ciphertext( +pub fn write_note_ciphertext( mut writer: W, nc: &TransmittedNoteCiphertext, ) -> io::Result<()> { @@ -380,7 +380,7 @@ pub fn write_note_ciphertext( writer.write_all(&nc.out_ciphertext) } -pub fn write_action_without_auth( +pub fn write_action_without_auth( mut writer: W, act: &Action<::SpendAuth, D>, ) -> io::Result<()> { @@ -403,7 +403,7 @@ pub mod testing { testing::{self as t_orch}, Authorized, Bundle, }; - use orchard::orchard_flavors::{OrchardVanilla, OrchardZSA}; + use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; prop_compose! { pub fn arb_bundle(n_actions: usize)( diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index fd0cd42dd3..7683cd02f9 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -15,8 +15,7 @@ mod tests; use blake2b_simd::Hash as Blake2bHash; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use memuse::DynamicUsage; -use orchard::builder::Unproven; -use orchard::orchard_flavors::OrchardVanilla; +use orchard::{builder::Unproven, orchard_flavor::OrchardVanilla, value::NoteValue}; use std::convert::TryFrom; use std::fmt; use std::fmt::Debug; @@ -31,7 +30,7 @@ use crate::{ #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use crate::transaction::components::issuance; #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ -use orchard::{issuance::IssueBundle, orchard_flavors::OrchardZSA}; +use orchard::{issuance::IssueBundle, orchard_flavor::OrchardZSA}; use self::{ components::{ @@ -864,6 +863,12 @@ impl Transaction { .map_err(|_| io::Error::new(io::ErrorKind::InvalidData, "valueBalance out of range")) } + fn read_note_value(mut reader: R) -> io::Result { + let mut tmp = [0; 8]; + reader.read_exact(&mut tmp)?; + Ok(NoteValue::from_bytes(tmp)) + } + fn read_v5(mut reader: R, version: TxVersion) -> io::Result { let (consensus_branch_id, lock_time, expiry_height) = Self::read_v5_header_fragment(&mut reader)?; diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index f90efd6179..670e36d970 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -6,11 +6,11 @@ use blake2b_simd::{Hash as Blake2bHash, Params, State}; use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; use orchard::bundle; -use orchard::orchard_flavors::OrchardVanilla; +use orchard::orchard_flavor::OrchardVanilla; #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::{ issuance::{IssueBundle, Signed}, - orchard_flavors::OrchardZSA, + orchard_flavor::OrchardZSA, }; use crate::{ From cac470fcc2129a4ecd9cf34a2df8201a063fbaf8 Mon Sep 17 00:00:00 2001 From: Vivek Arte <46618816+vivek-arte@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:06:09 +0530 Subject: [PATCH 50/85] Corrections to V7 transaction format and using updated test vectors (#66) This PR makes the following changes: - reordering of the component fields in `read_action` and `write_action` in issuance in order to make them spec compliant. - It sets some of the constant values for NU7 in a way that is consistent with the generated test vectors from the Python reference implementation (See https://github.com/QED-it/zcash-test-vectors/pull/22 for the changes to the Python reference implementation). - Some changes are made to function names to reflect the shift from preparing ZSAs for V7 rather than V6. - There are changes to the tests to use the `zcash_unstable` flag in order to cover both ZSA and vanilla Orchard behavior. - The test vectors are also expanded to include both the V5 vectors, and the V7 vectors (behind a `zcash_unstable` flag). --- Cargo.lock | 6 +- Cargo.toml | 2 +- .../transaction/tests.txt | 2 +- zcash_primitives/src/transaction/builder.rs | 2 +- .../src/transaction/components/issuance.rs | 8 +- .../src/transaction/components/orchard.rs | 8 +- .../src/transaction/components/sapling.rs | 3 +- zcash_primitives/src/transaction/mod.rs | 8 +- zcash_primitives/src/transaction/tests.rs | 7 +- .../src/transaction/tests/data.rs | 5963 +++++++++++++---- 10 files changed, 4687 insertions(+), 1322 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e7a81fe342..a0d968d9d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1776,7 +1776,7 @@ dependencies = [ "redjubjub", "subtle", "tracing", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=note-bytes)", "zcash_spec", "zip32", ] @@ -2487,7 +2487,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants#cf00807f5a014e434c887a1f4c8a3d04678f57d3" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=note-bytes#e6023a923194cf27668702c88e6dc5ceeb361304" dependencies = [ "chacha20", "chacha20poly1305", @@ -2545,7 +2545,7 @@ dependencies = [ "tracing", "zcash_address", "zcash_encoding", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=fix-sapling-constants)", + "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=note-bytes)", "zcash_protocol", "zcash_spec", "zip32", diff --git a/Cargo.toml b/Cargo.toml index 58c05b2ff2..0ca17a9e82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -124,5 +124,5 @@ panic = 'abort' codegen-units = 1 [patch.crates-io] -zcash_note_encryption = { version = "0.4", git = "https://github.com/QED-it/zcash_note_encryption", branch = "fix-sapling-constants" } +zcash_note_encryption = { version = "0.4", git = "https://github.com/QED-it/zcash_note_encryption", branch = "note-bytes" } sapling = { package = "sapling-crypto", version = "0.1.3", git = "https://github.com/QED-it/sapling-crypto", branch = "orchard-backward-compatibility" } diff --git a/zcash_primitives/proptest-regressions/transaction/tests.txt b/zcash_primitives/proptest-regressions/transaction/tests.txt index e2fca41571..e68935ba39 100644 --- a/zcash_primitives/proptest-regressions/transaction/tests.txt +++ b/zcash_primitives/proptest-regressions/transaction/tests.txt @@ -4,4 +4,4 @@ # # It is recommended to check this file in to source control so that # everyone who runs the test benefits from these saved cases. -cc a85a1f084bd4b44515f22fef4711678aa55180e4c03bfe94163c6b9cf8a6fc8d # shrinks to tx = Transaction { txid: TxId("840779607d1a58471976e6b32d2a77ecd2c866331123e4dd5205a38e125e89fd"), data: TransactionData { version: Zsa, consensus_branch_id: V6, lock_time: 0, expiry_height: BlockHeight(369391), transparent_bundle: Some(Bundle { vin: [TxIn { prevout: OutPoint { hash: [198, 158, 76, 77, 88, 207, 96, 22, 34, 192, 107, 60, 27, 105, 176, 247, 196, 188, 221, 50, 57, 63, 167, 88, 239, 88, 71, 52, 86, 88, 183, 87], n: 57 }, script_sig: Script("6a6a63526352636365006a6a6a52ac515200536a5352ac"), sequence: 2777939921 }, TxIn { prevout: OutPoint { hash: [116, 231, 193, 235, 191, 64, 44, 206, 149, 124, 238, 218, 54, 102, 4, 247, 75, 95, 160, 85, 244, 182, 22, 68, 123, 36, 195, 178, 201, 69, 169, 231], n: 16 }, script_sig: Script("51ac655152516353530053516a65526a52520063005363656a656a535200ac53635100536aac52656a6a6363516a6a535300510063516aac6a53ac51536a6300"), sequence: 3555089162 }, TxIn { prevout: OutPoint { hash: [92, 6, 82, 163, 10, 151, 207, 112, 66, 191, 14, 198, 28, 118, 250, 143, 158, 21, 244, 140, 6, 224, 125, 116, 145, 207, 73, 241, 114, 81, 86, 177], n: 51 }, script_sig: Script("535151526a6365526300ac51ac52536a655251ac526a63ac516a6a5153ac536a00630065656a525251"), sequence: 1738290120 }, TxIn { prevout: OutPoint { hash: [110, 182, 112, 156, 175, 157, 161, 200, 188, 15, 41, 143, 226, 23, 159, 92, 139, 250, 51, 231, 125, 10, 66, 28, 63, 106, 150, 72, 117, 185, 77, 139], n: 74 }, script_sig: Script("51006a52acac0000636a63650051536a636352005151516a6300536a00525251656a52636a5363635163006a6a636a63ac6a5263ac51526a636a53006a6a65ac515165526553006300006a6352ac525100525365ac005200656a63516a6300656a655163006a65516a0053536a6a51ac6a52ac6aac53656551656a5151005100acac636a5265515300526a636aac52510000526a6a5100525152006351ac526a65ac6a655363"), sequence: 3318838885 }, TxIn { prevout: OutPoint { hash: [160, 103, 114, 132, 46, 89, 160, 219, 231, 156, 250, 118, 233, 173, 112, 14, 16, 172, 216, 212, 80, 36, 166, 219, 242, 24, 204, 176, 144, 249, 79, 204], n: 18 }, script_sig: Script("5300655353656a63635153535165ac52ac53656a51006a63526aac536353006a6a005352635251635352656aac526563516a536a00530052516365525263ac006a52636a526563000000ac516a5152536565525265520063acac00530051536a516300656a6a6500ac6565656a6a526a6351655200"), sequence: 73569442 }], vout: [TxOut { value: Amount(987672871939945), script_pubkey: Script("00535265005352006551656500ac6aac00525352656352ac51630052536a0053ac65516553") }, TxOut { value: Amount(1940769343347653), script_pubkey: Script("63526551636a5265526a5153006500535152516a005253006a005251525365ac6363515365515165ac5100006a51ac6a65515152006a53ac53526352636a52636aac526a515165") }, TxOut { value: Amount(1095816154710662), script_pubkey: Script("63656a526353636a6351005252ac65ac516a52636a006aac535165516500ac0065515300526300530065520053650053516a6a6563526552636a51515263526a636aac00526a6a635200635365005100515352ac63005165656563006a6a516a635263516551530063006a65ac655252650065536551636a526563516a6300516aac5153650063516300ac6563636a51516a00ac5153516a6565535252ac6a526a630063530051536a6a") }, TxOut { value: Amount(1076508312538104), script_pubkey: Script("00635251006a525165ac6a63ac006500516a515152005151ac65ac636a650000ac00636a6a63515263535265acac520000636363ac6a53530065656563535263ac5163ac656300ac00005365ac656500ac5265ac00655352005253005151ac5351516a00516563ac6a") }, TxOut { value: Amount(1637061040763024), script_pubkey: Script("51005352ac6a5363ac53000051ac6a656a516a6a00ac6a6300ac53006351acac5252ac515352ac51") }, TxOut { value: Amount(8893688897630), script_pubkey: Script("ac00006565536a5252ac52516500515200005100006565525352ac006a63ac6aac516352536a52536a5365ac6a5165655265ac6a51ac006a6565516a00656a5251535300525353520063536a52636a53526a0051acac005353635353656a65636a655165ac5100515353ac656a6aac53ac51ac63655153525265636a0065ac51516a6a52635352ac6a6500005252525165ac6363516553ac526a53656aac51536a63ac52636a63ac00006553526a6aac6a65656563630065655263525151650065656565ac52526a52536565636a5300ac636a536552635251ac516a51650051526351636551ac650051") }], authorization: Authorized }), sprout_bundle: None, sapling_bundle: Some(Bundle { shielded_spends: [SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x3969f2f51ff91cc969d79c05ba341370ee7436ede10feb1d90872aeb8adbba4a, v: 0x033e8a810b8347113cec123a15972640c73393b92bb6a07ce7ce58abb17d0e43, z: 0x527e8ec1f6f6cb3a4302279033ab57edde8cd1faebfd9973d78ec5ff40ccd4ef, t1: 0x089b6ab52b6963f0e52aa022e1db69c9f4ac67f521332711a1d036543b0059c5, t2: 0x4804b84cb60e9d67bc9814bd6709e17b9c53b58c2fbdd5a36a1883cf656980ec }), anchor = 0x4e33df44a2918a11dd206bc7500bcb4bfe9ee1a998a6cc9bc96fb4533a1e34fc, nullifier = Nullifier("401afa46a3f59d59cd6252a98f1a1580f3e8eff12195ff5984018a0dc10d50f0"), rk = PublicKey(ExtendedPoint { u: 0x2a8c760d04e17489f8962069351dd328e27ecffce4c8ff64eef2bd3356eab7b1, v: 0x2244fec36d2a1cde6cacf221dc42d8a7af821471c4a1b7b3f2503a7f8e8e986b, z: 0x57b1c3e426ff921b02bf71dc4ed69e19d9d9b87b97848da4e9c4d02ac8ac1188, t1: 0x22151831ef24c1bf1645686069f7b29bd0ac95909f8cdc0575a78e0b309ea072, t2: 0x5b164ed95c9de72fdfeeb6864b0534dc967520042f1e55179da709c74d690d38 }), spend_auth_sig = Signature { rbar: "38b0e1111f1816c6adb3aeedb67f9fe42070e6ca86ec368f2be3b92596bf3635", sbar: "a0a8bc4ce5b9ee7b4e04d964bc1e1d6795304dc0c80e199fcd007bafdfe1ab02" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x54e80df854c131557ddaedb48cb8b3033698a0664d18823b650b6a8aff8ceb40, v: 0x2bc998067a58db9e704607dfff5ad7fe2723b2bef7148dd77f7222da6acd8d0c, z: 0x578b7e9b4b249970a38230032a5034a63c31bc2ab120e9f78f5b2ff7d20ed438, t1: 0x1d28a286c05e1ad40132702867af89b197f46311293c1681ba1f1ab1c7cc6f5a, t2: 0x1cc0bcbc239083b7af95ddc4c60fea682b84c928abc021dca019674d896795f8 }), anchor = 0x0bb0c3dc009923fee577da6584856f509be48d0e9459aafe0dd39a4e2d22d3c0, nullifier = Nullifier("e37aa57c3e59299e0c592f835881a5f54cb428bd5906349c518192e6a6227ec9"), rk = PublicKey(ExtendedPoint { u: 0x42329ac756de433185a7a47dee00a2c6942c72302231da68189f2dd5840cbed9, v: 0x06b5c7da8efe8f2f300a10ad431cfb94b6bae922ce95987c4ef2783c7d56eb99, z: 0x57d450e9222300e2a5a60995a4b6a42f680c08a4799f5bd84e7fd280b9d8adc5, t1: 0x0aedd6c4347041a58c67e3a2dc9a484552e84546bb8b2493b33253be06c9bae2, t2: 0x278a9f647a4079e1a0c55ebc7187e6d95bd02063634f35ea02a6935e7e664692 }), spend_auth_sig = Signature { rbar: "626653c781efcfa78c1baff8cdbb8a2b4fc575e30c3b79da17746ff39e6492c6", sbar: "d4811e5484117cdec1c9b453f9cc1030526a196e4b865b1887a27109e6b0720c" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x074d5aa67f42df975a345ca61893dfd15504edd47ea7eed11a7da15b5cd16ce6, v: 0x6c7c80b35e6577624e7aeab800922388f40a29756b63a2d98106ed73136b0612, z: 0x6d246c0ace486651a81ed1fa924e5ba403ecc08418435a216624ebc60543839e, t1: 0x30458e091bada48f5a5f5c0b77c61c93ed7a4c568303287c53711ea9533394b7, t2: 0x6c9a9c3e1b1e3357ef6dbcfa1aaab4f8fd472d265796ccabaf656f36af653904 }), anchor = 0x09c27597ecc5bfa1262b3822b26daf20e7c5b0ea6057ccaf7c9d49df70f7029b, nullifier = Nullifier("5b5f08d0a91630c83a7dc76a47bce9bf477fa412fed46a294d893e67bd18dabd"), rk = PublicKey(ExtendedPoint { u: 0x6db374807989519c19af1d068411c378bb37e6becc3320f89f7ec920af429414, v: 0x1e31812466440ec15d1405b220be8187884120e7b1f6764ef669b7e756986d2a, z: 0x197afb6a155ef154c18b228796deb7a89d1f93c32d8af75cd5c965e40f5e8aa0, t1: 0x262a779bc4f76b79cdd694b63375d2f16a4ad0226245f3c16f55d231ad099a0c, t2: 0x0ff949422e1573c1fa3a8a7f1e27db28c8d40fa87b6583ac5ae03be92a3bc47c }), spend_auth_sig = Signature { rbar: "1f31ecf52e25a236f8bed7660d3481324b5f1da5e3467f834dad2c37b5e71da0", sbar: "355cca7ed3e86eca2f64ffb98682e5bb54d3584368a3e835d6549e6f9603580c" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7047ccb877d941da0fb27a976c3ce68269c49a82829ae54388a6698a674714a0, v: 0x502882ba498ece139554ffadd5f31a707b9dc016a3b9154eeba2649885d955a6, z: 0x107b4b2a89d94ca8d884024b022ce0e1c41c351b6a5b83f50f7b8fe1b3df1d5f, t1: 0x0a02fd23787ed9149429bcb74243cd654a319abee687398fd7b5e4037cfadd51, t2: 0x1f695af851503bf80c98910a0e11f6bf0349c5cdf9021b4da0fbc434899f1a52 }), anchor = 0x14665e8886fdc414ca2d3c8403ceea4cdda4b632f7011fef0ff5cb5e6327f42b, nullifier = Nullifier("e8388d95532bbc261835be7e72d70f9940bb43b7aae63dbbdcf6dce8c5b95ee1"), rk = PublicKey(ExtendedPoint { u: 0x5f5f0e513145bd765ff39857a879d398bcff706c9defe8886b8a9ac28d3f4658, v: 0x323988ae7c8bd96e8b06fde94ad290015c22e45e6ad52186f36329c4ec4d09fa, z: 0x439c31f72d93c9c5c1951f113356bd9ff2f2e33536e34dc82781744ab4f751b2, t1: 0x3a78c0c736c312fe5659f3ff48bc2e28490e0ba873bedb43a72380de145a0d9b, t2: 0x05a514994e7d16d2ca02b519cbde3dae9aa61cb62aa15cd1c51e3d09d1049669 }), spend_auth_sig = Signature { rbar: "9f1781f5ca013ced6bcd6841928e90ee31749364718d583d5335ee22e25180ae", sbar: "dd7a0db13d239c99bba6ee355bd712ddf448421ee379a9b2ad3aa49d34e64408" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x01246b1a98bf37c83a8873895ccadbf1bf11829e57f07968b34822ee8fe7654f, v: 0x3ff7c462097dff040c1d1ce2f994fdd3f56f0f4da0dfbc189081279eb3ed0911, z: 0x0c8612e3756e82a494bf6bb3895c2abd8665882d52216e46868e62d9dedf3054, t1: 0x7144a13925067adbb8a4adfff957614ef7a5328c613a0c76ad5b56f31ca37c5c, t2: 0x6d156aa06c4fcbae05eb409a86c8432376dbe88458755aa9179230a8fc5aeb01 }), anchor = 0x5e5801f4693af02acfceb606d64e95684ee0ba4b6134bf65afd5eca83f427557, nullifier = Nullifier("4275fa8b013c6e0da1d4afdc22685752ae490726adfc9f0fbc95a5df8f75ebc7"), rk = PublicKey(ExtendedPoint { u: 0x13801ec64fea770225d39ef5e70e768909f0284b00a52722044339e7a299d229, v: 0x4e922d529dadcfdc0941f546fb7373b2d7bd1da1d78e399bfa315b8ed23fc8a9, z: 0x56671bb13a9d667e31b9b2b15b31edc7d22eff2584fd77b85aa004f35ace4f06, t1: 0x32f73e9226ef891905cfae40e861dd8559fe41aeadf97e824821bbe167dcff23, t2: 0x338774aa9b8633174da437b86dcd5d381e79b6e78d54037cbe515436448f77e8 }), spend_auth_sig = Signature { rbar: "bcb1f99c881820bf17b35d702c8b581d62a543cf240a28b9690017ec8a5b44c7", sbar: "322a95c6fe47f4ea52779aee799b531695c0a7f9b589e4813406059a0c92ab0a" })], shielded_outputs: [OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x33a1b5a964be7b875e7b6008304e30afeded6f45b1c1103d1150bd2215cda7f3, v: 0x1c3987dbc04959373be86d16746c9b9438d89a0898b551fdb3706d66cc8facbb, z: 0x3a52037587d2d70789dfa01f106eaa755b2220079b9c832d4b67b6d0eefa815a, t1: 0x22c1715c09dde681f2168d1d8a022c9168705c9282efc81637ed8e1a87346637, t2: 0x2b47aa7a3fb6f77fff42de726b370e00e8e5ad5499c19f9a5b73be86773ed7af }), cmu = ExtractedNoteCommitment(0x2bed605871f7eebf6da3d38804ea5aa7ebae2a18598040571b3b0e5d2beb010c), ephemeral_key = EphemeralKeyBytes([1, 54, 224, 125, 225, 41, 55, 90, 81, 87, 208, 5, 139, 115, 252, 102, 146, 210, 72, 204, 5, 208, 5, 180, 180, 15, 39, 237, 241, 70, 227, 42])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x347253c4272017bd7eb9db2d9672b55a27ce87d6293410a508221487e344245e, v: 0x24fdc33ed9d16501866a07a80d3610cbf5c817e87055a7925606ce17edb3ffdc, z: 0x22ca5119e4c72ede66c4f420899bc4bcf5a7b0744343e1e50346fdb05f7d9eef, t1: 0x11865860065254ddfd45dc2ee24fc489b215f74c68046bf30abc29bc600f3d05, t2: 0x646c44ce083f25dd400779e4593f3596edde6650fd650548a4c20898da1e0aae }), cmu = ExtractedNoteCommitment(0x487d996fa5edc1688b532579a5ba415bad9ad934967f7d37e3c4140a6e89c4f9), ephemeral_key = EphemeralKeyBytes([36, 254, 164, 196, 131, 164, 25, 4, 120, 170, 133, 208, 52, 1, 143, 251, 162, 108, 187, 70, 251, 132, 98, 126, 102, 209, 134, 227, 95, 142, 225, 69])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x141964b3b13b36ed9266cba2730528719e6401d35394d1007fca56f9a9748649, v: 0x14920499cd088107f50895784e635e669ad80093ce271420a9d6648507d45502, z: 0x0c56c0574cdf247e016ac1f38418d0a8adedb8032a61334407caf95a164d960d, t1: 0x2da14d26362674cbba5639abae98763d647e9c3dc806d34e86540ba226de62ac, t2: 0x107fe4350b0064d3ab01d254efc18825ff6d7c67fb1bf69e6151bd330cb29ee0 }), cmu = ExtractedNoteCommitment(0x429f212a0a66185699d7608b16f2f51169ff44805dfa9063c227c8795b4f7639), ephemeral_key = EphemeralKeyBytes([229, 116, 43, 122, 165, 12, 169, 183, 140, 59, 102, 142, 168, 255, 240, 216, 200, 8, 52, 96, 139, 188, 78, 44, 55, 174, 204, 49, 109, 33, 221, 93])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x00cc6586aef173de5b95b882e9d7981311dbe4b27286375c10a120cd103b9fab, v: 0x074ecee690d2614f5dddad2bcf9d2da3369bfe9983aaeb576113e37fa0fd5432, z: 0x29fd5813172b6ff6fe8412aaa8c00bcfa831b116831c4ddbe01e0033763ccdf0, t1: 0x3c25e783636f0f102c9b8aafcba9378bb7c3fb77260fe8317445aa19150ca35e, t2: 0x4c03abcd46318685118e74ff68984fb4bbae5b7d160a056dea1c7c3d174b9c2b }), cmu = ExtractedNoteCommitment(0x2d6f2bcb4de5fb70466908ba48b9e252f8d83fd8c896b7294e5c4c6bcb5dd4a2), ephemeral_key = EphemeralKeyBytes([239, 204, 232, 98, 163, 105, 255, 144, 35, 191, 203, 110, 157, 234, 15, 113, 89, 204, 22, 92, 51, 130, 236, 9, 100, 39, 135, 161, 183, 99, 118, 234])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5441970aec4e86e0bbcb7857a0d4b4e9b0fb63342550ced1b2a97231db8c9175, v: 0x15dfcfafd3b57abbc4e938d71bd5453bb3c062f864e30934916debf8ff2a3cdc, z: 0x18ad186150aed3d8e7a5642e10c6c54734bcd6ea0a5d2c0a3bf660d4f2064937, t1: 0x2e4c8f7556c05ec08ce10d2192cf3463166f85edde29ef59ed221dc2959f54b7, t2: 0x165585f044da05b7d64032a013d55d72a447da349a076509783c59ded064923f }), cmu = ExtractedNoteCommitment(0x0b7514b795cc6b42eca5b1afb94c313ebc34345ddb8a188ade965a86204c7d3e), ephemeral_key = EphemeralKeyBytes([57, 143, 116, 106, 60, 151, 222, 233, 72, 183, 79, 115, 139, 81, 204, 141, 120, 23, 187, 207, 166, 52, 149, 7, 199, 77, 124, 31, 50, 194, 116, 21])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x0a06e06ff53f4bb781d11a2d4f5fb983940bac1eb3a7711d9e7e573faa663a4e, v: 0x63ea7cc2e232192d43adbc1500e965438a4c94fbe9e94328979e6509e923de01, z: 0x0a033c1ef378ce1761532379727cea39855528946688e1f9d0c9290da90069e9, t1: 0x128698a21d78288a60833737bad238169207498e17e1dc0637fe4767acf673e3, t2: 0x1caa71a247f4f643e81eac377206307181c46ddf522f4836c3d5aad5f2afd52e }), cmu = ExtractedNoteCommitment(0x6f87e7d8a5269895f67fba893c550ae12e2df1158c64cf1854413a448e8b5d8c), ephemeral_key = EphemeralKeyBytes([196, 220, 169, 22, 6, 98, 192, 133, 212, 50, 14, 250, 28, 75, 182, 75, 183, 141, 17, 36, 19, 183, 80, 129, 135, 140, 44, 232, 95, 139, 89, 4])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x44fb27c48e21283a1f70dc892495e0d050062efad93744752bcc2fa36953fd10, v: 0x4858697688b37b258bb037ffd270fe4964be95d6bd28eaa69c6e1a77f529117d, z: 0x1900ef544f17d2ab5f3d9fbf907dcbcdce7d43544cca3a53f95ff34892dd4f26, t1: 0x65063896a113395677a2a44d59c94a2ac18fe81f782d4bca8a20aa4b88fbc3b7, t2: 0x07641436fa8d5fd5c6de71afc2ae951fdc2f845216b3ac366988eabd227594d7 }), cmu = ExtractedNoteCommitment(0x1b068e54f242a37d1fa11306a274e51622e01aa44ff319fd73b15e46d976badd), ephemeral_key = EphemeralKeyBytes([13, 71, 36, 121, 155, 155, 125, 88, 201, 4, 250, 179, 92, 80, 213, 18, 155, 144, 69, 72, 174, 226, 1, 7, 27, 145, 187, 158, 21, 186, 149, 191])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7166bef5ac833f979cd261e9f519ecab45777a26748cced5d2eb4db47923713d, v: 0x3618e8e75df6e7ae48200af8152d228af73cfaf4ccbb24e120721954cc712811, z: 0x10da1421bc0a0b01893d056e922aec62664c8eb5fc1d9ef5035fddd8dba5ae5f, t1: 0x12e7565296c7596bc97ad4df8cce0a6e94d6b516f0be11ffcd4c50ee73202ac6, t2: 0x174f91a1803dcfd45e26c8bc33d37394f1c83bb65aa2168f04350179d46d3961 }), cmu = ExtractedNoteCommitment(0x19435e85f48812b572e15aaf4a45644a3cd95dd493311a3794831f8deb27f80e), ephemeral_key = EphemeralKeyBytes([140, 131, 93, 37, 30, 3, 54, 9, 133, 60, 17, 179, 162, 147, 51, 205, 63, 160, 135, 216, 248, 206, 248, 72, 202, 132, 194, 240, 15, 14, 191, 218])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x6f5154d0d718ab323e05d8defa271f675a07459c2440aea3916710992997e6f7, v: 0x124c0eb53c700acc438899d3aa93ec3e5aea257a3ac18d3e21b7bf09fb1d946c, z: 0x5cb2109ee9828d563aac60175a26178613f3e279ef2e1f2afbe480bd90e9b1ff, t1: 0x6bf83ad2828459d384aba05adc84100500b5cb976acfec1203c2daf21491c1b3, t2: 0x6571e40dd5f20a629ac9685d5cc3e22fa666af5f934216ac772740668d3b9dc7 }), cmu = ExtractedNoteCommitment(0x25c9dd734d05a8158ed08456b8b523823593d98d07e5947a48dc0985ca10ab56), ephemeral_key = EphemeralKeyBytes([216, 102, 16, 140, 91, 32, 44, 203, 40, 172, 158, 164, 46, 47, 49, 243, 88, 255, 40, 238, 109, 105, 98, 17, 100, 155, 183, 190, 144, 43, 39, 22])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x047a0a276c7855a44991c29155c671a255fd1a218864bc59072ef0bf9d8b4554, v: 0x0b1e2e65bdef498e40872c58d6d0c9a162ee75d271286f8cba30554407b8aea4, z: 0x2e702d879554897568b68cca7165bd6ba75431b19859e5c8026a4e1cc5418317, t1: 0x6eddbb85d9b5acb2a3c0080a97f3d3e6f7290c7bda578806717617d411673c5c, t2: 0x47b3d307106516bf997afec433d2ed1f67fbbb888c300cc7a221e2d0416b366d }), cmu = ExtractedNoteCommitment(0x4d3ddb8b477d2d3f0f810d3ec0fc9cf2d041f224085a2db58fde8eb6547ffff4), ephemeral_key = EphemeralKeyBytes([188, 75, 180, 157, 77, 192, 60, 224, 0, 63, 159, 254, 178, 24, 172, 134, 71, 213, 52, 188, 254, 40, 17, 36, 65, 240, 117, 23, 66, 63, 132, 229])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x66abcc480c924b6c34e1682227817865770c7005d6f8889557b4ca82ee979630, v: 0x01c10bc64117deddf1d65b671b5dcfe924d32a5ff990e126da4657c2eba05613, z: 0x3df3de3fb5aaef0013c2d4ecbbb64f627d6f870fd811369f11e324eb328362d8, t1: 0x0123c93f972e5eb0d411a898c6945cdad760c3d12a95b7915b662abb9ac46e8e, t2: 0x51e96c4920cb5091ad9efec3005967c5100cacddcf83c8bf38345ab3aa60bcb0 }), cmu = ExtractedNoteCommitment(0x3d59af29bbddc8d9d6c934eb339ae8afaafaef96d165d7c417565c4ebfeff2ef), ephemeral_key = EphemeralKeyBytes([185, 247, 186, 199, 146, 38, 202, 207, 65, 98, 161, 188, 229, 70, 44, 102, 242, 70, 83, 227, 234, 179, 55, 42, 181, 169, 55, 44, 167, 0, 216, 226])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x38dc9b70cedd37747f6e358738dbf18bc9df69b52fe36d88748940cb44d047e3, v: 0x5d39f8b4f9842724f7cff351826f8e9fc4cbd68ba484f8d45ffa3a581e746d92, z: 0x2b28b6e9768b5c2c96833b7584adaf31a223321ec62fce2606bac45024053096, t1: 0x598579963ba223c20762bb45d0a09872fe98e114610ce3c8ea63f124d47314d5, t2: 0x445f7dffc79939bc16479eb8dc9cc460a8998a601645005f1961f1cf8c7ba7ef }), cmu = ExtractedNoteCommitment(0x43ea000509911e76ac6f15410cd1c64518bf2c1a9f606f826b130180ba463a6a), ephemeral_key = EphemeralKeyBytes([202, 33, 143, 0, 182, 211, 54, 106, 156, 98, 43, 41, 53, 214, 179, 252, 15, 62, 137, 183, 83, 250, 84, 209, 175, 132, 235, 215, 55, 236, 48, 44])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x1cd26d46bb4c43680876a1c85b05656589e6ad101c8503ad8d46c9c28ff6712f, v: 0x2fd920f24f3ecfc6ebaa9c0f587ce753baf9fcc08cad76ea58d479a469ac56f1, z: 0x6e282c4ec5cc86b4b15fc949ce126b051ceb2dc0acd870bff3f5b7aac3b982dd, t1: 0x4d9d3736ac72c13ca4cb8955e710aefbdf21adc2666cf91b6019538f0578095a, t2: 0x4ddfc0e09fd9cccbf929f8cbfa9451c45123b955ac83f742f496ad090fa80641 }), cmu = ExtractedNoteCommitment(0x16df873edfd99d2edc0f77bd00b31e4957f21ac4cbc7c995f66f2047f75a8465), ephemeral_key = EphemeralKeyBytes([24, 207, 37, 2, 225, 140, 93, 158, 216, 85, 30, 91, 242, 54, 180, 30, 182, 216, 5, 80, 51, 32, 132, 151, 95, 87, 83, 21, 170, 35, 75, 173])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x250caf5bf3298c9ec1b9349cdf35862fa1f153007c023ce30fd887f1f3d31cbe, v: 0x51ae84954c1157bb337d2d9c64a69d1fa4f1f885bba50c40d7550bce4075e92a, z: 0x298e7a4f420045c0ba79212961954333b34a95765197737fe99a4d778cbd6881, t1: 0x21e2a5316133ea315b9c2ed77ea9148cec9b37ddd56d882287fda71cefda797d, t2: 0x5bb8289c0be8b0e9a823ebdbbb8cd489971504e0fe306f8ec303f6409cd19336 }), cmu = ExtractedNoteCommitment(0x3c3169706c8b4b6df125c52c64f954b3537371964fc5a1909fe7ea881229052c), ephemeral_key = EphemeralKeyBytes([93, 190, 51, 126, 18, 66, 57, 53, 39, 125, 153, 199, 215, 137, 31, 136, 53, 255, 211, 210, 156, 104, 185, 238, 197, 85, 67, 90, 120, 65, 219, 189])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x4ad05a1051e244bda076a583f93f36e471245fa46051966c597ab6e9190b3023, v: 0x54726c5c2c0d1ffe5baa5ae3597e076db183148b67e1f8de6bcd7423e66ab229, z: 0x1e664039c0be5d54d035b20b4f7ada264f64fb801eca9a8321f682f07e5b9ce0, t1: 0x2486b3a6c7c8808ef7b5dd87d234d9c05cf4b0878ffd58641461504e780c80e9, t2: 0x0374a2e63704c4833f4210dc473eec1c72583d85524bdfe65f2bcae79378f096 }), cmu = ExtractedNoteCommitment(0x16e83c89746019430dc1f0b9cfb2101c94c316932eb4720929454c168d67256f), ephemeral_key = EphemeralKeyBytes([233, 218, 135, 168, 201, 30, 31, 107, 108, 12, 9, 51, 190, 219, 219, 26, 83, 180, 63, 21, 85, 133, 151, 36, 68, 198, 217, 60, 118, 179, 125, 80])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5f77cdf511091d2286907b9b7e3980f4bc2f60ba0ca2cc783aae716248e5d849, v: 0x5ad79c280ce714ee8163d45953f76db853d2e94307d9fa4503830fa9d16bf568, z: 0x4d13097b0004856173e1e386de0d4379a8b73f92b85de7d9ec41f715af5a33ac, t1: 0x3aa7695c47dd0c9cc94940d13be9ae7e37b8b95708aaf9b49b1401310e971f71, t2: 0x67d104c24381bfe3575f48f3e16bd123abe681a297225dd2346d8e6f918a49dc }), cmu = ExtractedNoteCommitment(0x32ea1b65b97dd6c9a4863fe14781fa6e0999bcf3d1c280190fed726a28a682e6), ephemeral_key = EphemeralKeyBytes([86, 186, 229, 66, 44, 222, 190, 116, 146, 1, 57, 136, 160, 179, 203, 173, 11, 38, 17, 99, 123, 156, 217, 95, 200, 234, 215, 119, 78, 19, 187, 178])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7352dde5dc4f1b4516aa4d656965bb591d05b51c700073c25f97a0d36c47d4da, v: 0x30a68659f120cac82eb56ccae95d3536659bb6d344bd1fec5a09b06e8ec17f77, z: 0x09207e2f00a65a497080773d9f47989f1c4cf71f941a86939cb26662deb9dea8, t1: 0x4971c11d54b5d02559909885d4418fd00f9335cd2b94c40e1f38961f9c8edc4b, t2: 0x50b22b8542091ccc4acd7047e4b63d22e7e03d88ff6c8a53585bf607b4ce9644 }), cmu = ExtractedNoteCommitment(0x35776fef9fc3eb5e69ede84bb56a23f42f51f736141a20ccb0e0174a1d1f243a), ephemeral_key = EphemeralKeyBytes([26, 96, 242, 128, 170, 124, 42, 245, 86, 91, 70, 225, 130, 9, 144, 9, 223, 195, 134, 163, 118, 91, 205, 108, 226, 85, 27, 84, 151, 150, 237, 67])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5a33abf19c19d0b4b491e63bb4a2f3e1a089fcfc50e309906eb1e514cdb25822, v: 0x569819c745978913c607251cd37b30cb9f7365a98f845a3357db3737449211c3, z: 0x61333fef1d5867af6c5b41142646e0e5032a78aff570053ced3fe4dad3a1885e, t1: 0x1216948f8cf157d7d7eee00e185f831f22cd322d7c49ad6b2ed3f787c9fe5bd0, t2: 0x06e364e08c670d72810143a4b98ba0f0ae5cbeff494c993b97a78effbd430f2d }), cmu = ExtractedNoteCommitment(0x0176e70bf45598bfac7fc5ce5d74d0e24bceeeccd7f2ea2a1aad73f67c815940), ephemeral_key = EphemeralKeyBytes([27, 81, 140, 108, 25, 120, 246, 65, 98, 187, 172, 235, 224, 47, 51, 160, 38, 240, 233, 164, 32, 76, 97, 200, 229, 135, 111, 138, 131, 28, 12, 182])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x620c7ad63a0a83f77144ddc5eb8c6df6381b377b7a7a8bff9e70e92bc15a0ef1, v: 0x4652203ac8e009d2ae512f7f87a7ef6dcda35d6b89dc650b98f07ba9cf4f7133, z: 0x3d9ab8ec28c879343db6b353ed01f764150f1f65dcb99edd59ae7b527aa787a6, t1: 0x70200fefa27220776ee6bc3fb7d065d595323e302a92360d7bc45c9da641442b, t2: 0x0bb3c4787eb4f40c73db6057edd6022b8f7cecabe9113fb5df0b155e57036244 }), cmu = ExtractedNoteCommitment(0x4402649fa884631e9eeb2079eb84e666b47634569ba4edd584f3ad96bb60718b), ephemeral_key = EphemeralKeyBytes([149, 50, 203, 61, 233, 194, 188, 255, 163, 65, 77, 239, 157, 130, 85, 80, 18, 166, 69, 110, 253, 142, 75, 53, 200, 219, 56, 52, 220, 30, 70, 29])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x65d109a4b2f3f6d4b07554f561a7030972378c2e04d2e33d669af130792daff2, v: 0x3f265f9d4bf274f2af17069e4a7b568374ad9ecde3a1482a3b81caed0fb5d02e, z: 0x080f08f22e6673e87ea25cd6b211a58ab05e61977f270c4db71dd36d90600dd7, t1: 0x21b99851b33dd1b20a89f63e95655ee16a3cb02d64841fde67977bc0608a4a3c, t2: 0x00fd4e654d9ac387cff4242e15adb76e5c7c053e7954d436fca3e6c3b03a3fb6 }), cmu = ExtractedNoteCommitment(0x24a8083d0b6ad5b313cc636cc2f584f88fe8fe97e66c58fe010a9b050ed67b17), ephemeral_key = EphemeralKeyBytes([133, 60, 66, 193, 202, 10, 96, 129, 214, 147, 146, 10, 199, 182, 46, 95, 9, 6, 253, 52, 106, 103, 187, 44, 141, 115, 123, 251, 74, 106, 143, 59])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x67105c25d8b7f6855eed0c0bf91d7480dda221c61095b260d77787e397b9338f, v: 0x23842217ce5df95571311b4b9a00e00013660eeaa1caba120a7551aaf11527a7, z: 0x0a918d33015679f7f0d65bfce5896f3d0ae442b62e97741330d679f73b400bc2, t1: 0x72d0bde17897b237d65af1beafbe4a3c6c5021d422b4ee599b140fb6c35f1a18, t2: 0x0d60a76fb8c2b6c182dddb74dbc07868e7f705066b1e2cbddf882d37bba66f90 }), cmu = ExtractedNoteCommitment(0x582b5b7b1c8cd76cbcf43aac7040bf4d5dde852f1135238843eec0d3862ee680), ephemeral_key = EphemeralKeyBytes([184, 218, 90, 68, 9, 117, 82, 122, 34, 92, 184, 181, 231, 54, 186, 36, 40, 51, 168, 34, 14, 162, 135, 171, 199, 202, 166, 178, 0, 107, 76, 76])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x517d6b2e56a224dfca64d6f83693869d16dbb84a5f83096ac4cdc9c68c9c37f2, v: 0x34279802173db9a6bb2a4fb656731aa245e6a80a14cebd4d32c0abac5a6336da, z: 0x50f8ec16f7b33954ea5cc46c468c5c18a7750a4eb64328c6a03cdb9a967547af, t1: 0x2d06222216f46835de876566bf14a1918a11c67a8c25a1c4c9eba2f3b6b292ca, t2: 0x4d4f392fcf7dbdab827c5ab3fdd9ddfeef887c0eb0077eb10b92b60cfabf0478 }), cmu = ExtractedNoteCommitment(0x5c0fd1ee858430af67186bcd33f308e16c87a8a58797975a5a49fb21bd9df530), ephemeral_key = EphemeralKeyBytes([181, 215, 227, 138, 142, 105, 126, 23, 34, 10, 15, 107, 64, 74, 139, 195, 35, 70, 85, 27, 105, 141, 128, 21, 4, 10, 126, 98, 156, 38, 244, 227])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x57eb5bc3b4e75e0537ff5e3c86beea27cfa8d80d3ebd6dff17abacb323ce70ca, v: 0x6ab2ca1a837817df9dbff7bf1116b17d2d91cf1dfb1870686deca092f423f2ad, z: 0x32ce224202647b09af3241378248e093aad5407cb83a923dea482d88051ab62f, t1: 0x5921b600db5b0d34a18bd3533a5f28ae448fa8958d81e4c61e175a15d2a6846e, t2: 0x1d6440b7f4dd68e21369493a91394daf384642d1ea6913092def0435ad0d7961 }), cmu = ExtractedNoteCommitment(0x0663eca2a22e4e7bbc3e3dd93bf48086d1594508b4a3bab6e318d9b31fd5deb8), ephemeral_key = EphemeralKeyBytes([240, 132, 141, 191, 193, 126, 163, 25, 172, 249, 2, 136, 156, 212, 67, 217, 21, 255, 38, 131, 124, 103, 183, 229, 121, 26, 172, 15, 10, 247, 138, 139])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x1715e312839cb2a91c77e5483fe349042550e440f2e92c9bfdadc5810b11d55f, v: 0x20cb8b36d4ecfa358a252fc1dcf886bc41e60fa5d2ed843d1a9076dc7105c100, z: 0x161adacc8d6f6c3ff79b007bcd2b9048325a468ea0e98d0ef4164b620b2d0c0a, t1: 0x070f5ec62dce9a471357b699a956c9400bdb0b509fc8839ed5339ff96b713bf5, t2: 0x0d342217f184e939a9d307441aafd15b201ea207e6d5fbe84a1f7f283f47bebe }), cmu = ExtractedNoteCommitment(0x705d24681a6295f72aa8cfaff157192a0a1cbda5ba8751e68a8e1dd54648878e), ephemeral_key = EphemeralKeyBytes([5, 234, 133, 171, 227, 199, 180, 250, 40, 219, 31, 66, 204, 210, 150, 255, 217, 240, 158, 179, 202, 135, 3, 148, 70, 49, 206, 32, 18, 64, 212, 3])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x03eb41a7d06aca9a0cffeb4ce990766313229c061d263f64a5e1e03604fd10d9, v: 0x24ccc45e85bd1b4fda61cf4070cb9ae77d9571370693202ba74cb3ce6cc12507, z: 0x05d63014b5aab4b55d9b192d5832a3f79bd58f2fc99a42225a36767599f108d5, t1: 0x2b253aff7e98cef107ab3bd4cdcca58fa0fc5de10246a6af3b3ed14a682213fb, t2: 0x45950428ea997ee6fe1b90ea1b708d57c7f5191dde066b0bd47821f96c5c9a78 }), cmu = ExtractedNoteCommitment(0x4d7519491487cb889b51160060248edc973dcccc174bd292c5cc7c2e648915d2), ephemeral_key = EphemeralKeyBytes([165, 92, 124, 93, 77, 67, 101, 56, 82, 25, 188, 219, 209, 30, 238, 32, 86, 140, 158, 231, 249, 11, 100, 134, 141, 65, 223, 100, 182, 78, 96, 46])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5523bab49821e9b0016cf483223d366672f57c9146cd18c641f78d02c0fde544, v: 0x0162724a4e36414f2f16dce29a6b2e94ee2d925d7c8e79d654949b446ae0abab, z: 0x4f3553bf7ee84e7c0006e39beb9be60431aa611cca72005ad4a51aa3a76a431d, t1: 0x4310737d791e2cd930cc6f68839d91fc87663a544e988cd0fc08d5da38ab1416, t2: 0x5fddd6bb34ddd4c494555118c2815e03b78164836fb3253bd15ecb1f55150c94 }), cmu = ExtractedNoteCommitment(0x3c38b3d9c41bcc7ddb78cc7286ae1c1cb1a5405b3be1d0233b72d700fc083af6), ephemeral_key = EphemeralKeyBytes([215, 106, 198, 138, 88, 43, 137, 145, 145, 183, 141, 112, 199, 34, 56, 24, 191, 73, 174, 48, 13, 232, 223, 18, 94, 168, 25, 206, 121, 194, 36, 241]))], value_balance: Amount(-1135389017106274), authorization: Authorized { binding_sig: Signature { rbar: "f7336f652e66f5aa5d3a4786a0d265ed79616b9b83cb2d18abc3d8e448f35235", sbar: "a03171dae8154ddae1af64f0d8bb8eb8cdf7f97f2fe8dfa7f40766201b960c08" } } }), orchard_bundle: None, orchard_zsa_bundle: None, issue_bundle: None } } +cc a85a1f084bd4b44515f22fef4711678aa55180e4c03bfe94163c6b9cf8a6fc8d # shrinks to tx = Transaction { txid: TxId("840779607d1a58471976e6b32d2a77ecd2c866331123e4dd5205a38e125e89fd"), data: TransactionData { version: Zsa, consensus_branch_id: V7, lock_time: 0, expiry_height: BlockHeight(369391), transparent_bundle: Some(Bundle { vin: [TxIn { prevout: OutPoint { hash: [198, 158, 76, 77, 88, 207, 96, 22, 34, 192, 107, 60, 27, 105, 176, 247, 196, 188, 221, 50, 57, 63, 167, 88, 239, 88, 71, 52, 86, 88, 183, 87], n: 57 }, script_sig: Script("6a6a63526352636365006a6a6a52ac515200536a5352ac"), sequence: 2777939921 }, TxIn { prevout: OutPoint { hash: [116, 231, 193, 235, 191, 64, 44, 206, 149, 124, 238, 218, 54, 102, 4, 247, 75, 95, 160, 85, 244, 182, 22, 68, 123, 36, 195, 178, 201, 69, 169, 231], n: 16 }, script_sig: Script("51ac655152516353530053516a65526a52520063005363656a656a535200ac53635100536aac52656a6a6363516a6a535300510063516aac6a53ac51536a6300"), sequence: 3555089162 }, TxIn { prevout: OutPoint { hash: [92, 6, 82, 163, 10, 151, 207, 112, 66, 191, 14, 198, 28, 118, 250, 143, 158, 21, 244, 140, 6, 224, 125, 116, 145, 207, 73, 241, 114, 81, 86, 177], n: 51 }, script_sig: Script("535151526a6365526300ac51ac52536a655251ac526a63ac516a6a5153ac536a00630065656a525251"), sequence: 1738290120 }, TxIn { prevout: OutPoint { hash: [110, 182, 112, 156, 175, 157, 161, 200, 188, 15, 41, 143, 226, 23, 159, 92, 139, 250, 51, 231, 125, 10, 66, 28, 63, 106, 150, 72, 117, 185, 77, 139], n: 74 }, script_sig: Script("51006a52acac0000636a63650051536a636352005151516a6300536a00525251656a52636a5363635163006a6a636a63ac6a5263ac51526a636a53006a6a65ac515165526553006300006a6352ac525100525365ac005200656a63516a6300656a655163006a65516a0053536a6a51ac6a52ac6aac53656551656a5151005100acac636a5265515300526a636aac52510000526a6a5100525152006351ac526a65ac6a655363"), sequence: 3318838885 }, TxIn { prevout: OutPoint { hash: [160, 103, 114, 132, 46, 89, 160, 219, 231, 156, 250, 118, 233, 173, 112, 14, 16, 172, 216, 212, 80, 36, 166, 219, 242, 24, 204, 176, 144, 249, 79, 204], n: 18 }, script_sig: Script("5300655353656a63635153535165ac52ac53656a51006a63526aac536353006a6a005352635251635352656aac526563516a536a00530052516365525263ac006a52636a526563000000ac516a5152536565525265520063acac00530051536a516300656a6a6500ac6565656a6a526a6351655200"), sequence: 73569442 }], vout: [TxOut { value: Amount(987672871939945), script_pubkey: Script("00535265005352006551656500ac6aac00525352656352ac51630052536a0053ac65516553") }, TxOut { value: Amount(1940769343347653), script_pubkey: Script("63526551636a5265526a5153006500535152516a005253006a005251525365ac6363515365515165ac5100006a51ac6a65515152006a53ac53526352636a52636aac526a515165") }, TxOut { value: Amount(1095816154710662), script_pubkey: Script("63656a526353636a6351005252ac65ac516a52636a006aac535165516500ac0065515300526300530065520053650053516a6a6563526552636a51515263526a636aac00526a6a635200635365005100515352ac63005165656563006a6a516a635263516551530063006a65ac655252650065536551636a526563516a6300516aac5153650063516300ac6563636a51516a00ac5153516a6565535252ac6a526a630063530051536a6a") }, TxOut { value: Amount(1076508312538104), script_pubkey: Script("00635251006a525165ac6a63ac006500516a515152005151ac65ac636a650000ac00636a6a63515263535265acac520000636363ac6a53530065656563535263ac5163ac656300ac00005365ac656500ac5265ac00655352005253005151ac5351516a00516563ac6a") }, TxOut { value: Amount(1637061040763024), script_pubkey: Script("51005352ac6a5363ac53000051ac6a656a516a6a00ac6a6300ac53006351acac5252ac515352ac51") }, TxOut { value: Amount(8893688897630), script_pubkey: Script("ac00006565536a5252ac52516500515200005100006565525352ac006a63ac6aac516352536a52536a5365ac6a5165655265ac6a51ac006a6565516a00656a5251535300525353520063536a52636a53526a0051acac005353635353656a65636a655165ac5100515353ac656a6aac53ac51ac63655153525265636a0065ac51516a6a52635352ac6a6500005252525165ac6363516553ac526a53656aac51536a63ac52636a63ac00006553526a6aac6a65656563630065655263525151650065656565ac52526a52536565636a5300ac636a536552635251ac516a51650051526351636551ac650051") }], authorization: Authorized }), sprout_bundle: None, sapling_bundle: Some(Bundle { shielded_spends: [SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x3969f2f51ff91cc969d79c05ba341370ee7436ede10feb1d90872aeb8adbba4a, v: 0x033e8a810b8347113cec123a15972640c73393b92bb6a07ce7ce58abb17d0e43, z: 0x527e8ec1f6f6cb3a4302279033ab57edde8cd1faebfd9973d78ec5ff40ccd4ef, t1: 0x089b6ab52b6963f0e52aa022e1db69c9f4ac67f521332711a1d036543b0059c5, t2: 0x4804b84cb60e9d67bc9814bd6709e17b9c53b58c2fbdd5a36a1883cf656980ec }), anchor = 0x4e33df44a2918a11dd206bc7500bcb4bfe9ee1a998a6cc9bc96fb4533a1e34fc, nullifier = Nullifier("401afa46a3f59d59cd6252a98f1a1580f3e8eff12195ff5984018a0dc10d50f0"), rk = PublicKey(ExtendedPoint { u: 0x2a8c760d04e17489f8962069351dd328e27ecffce4c8ff64eef2bd3356eab7b1, v: 0x2244fec36d2a1cde6cacf221dc42d8a7af821471c4a1b7b3f2503a7f8e8e986b, z: 0x57b1c3e426ff921b02bf71dc4ed69e19d9d9b87b97848da4e9c4d02ac8ac1188, t1: 0x22151831ef24c1bf1645686069f7b29bd0ac95909f8cdc0575a78e0b309ea072, t2: 0x5b164ed95c9de72fdfeeb6864b0534dc967520042f1e55179da709c74d690d38 }), spend_auth_sig = Signature { rbar: "38b0e1111f1816c6adb3aeedb67f9fe42070e6ca86ec368f2be3b92596bf3635", sbar: "a0a8bc4ce5b9ee7b4e04d964bc1e1d6795304dc0c80e199fcd007bafdfe1ab02" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x54e80df854c131557ddaedb48cb8b3033698a0664d18823b650b6a8aff8ceb40, v: 0x2bc998067a58db9e704607dfff5ad7fe2723b2bef7148dd77f7222da6acd8d0c, z: 0x578b7e9b4b249970a38230032a5034a63c31bc2ab120e9f78f5b2ff7d20ed438, t1: 0x1d28a286c05e1ad40132702867af89b197f46311293c1681ba1f1ab1c7cc6f5a, t2: 0x1cc0bcbc239083b7af95ddc4c60fea682b84c928abc021dca019674d896795f8 }), anchor = 0x0bb0c3dc009923fee577da6584856f509be48d0e9459aafe0dd39a4e2d22d3c0, nullifier = Nullifier("e37aa57c3e59299e0c592f835881a5f54cb428bd5906349c518192e6a6227ec9"), rk = PublicKey(ExtendedPoint { u: 0x42329ac756de433185a7a47dee00a2c6942c72302231da68189f2dd5840cbed9, v: 0x06b5c7da8efe8f2f300a10ad431cfb94b6bae922ce95987c4ef2783c7d56eb99, z: 0x57d450e9222300e2a5a60995a4b6a42f680c08a4799f5bd84e7fd280b9d8adc5, t1: 0x0aedd6c4347041a58c67e3a2dc9a484552e84546bb8b2493b33253be06c9bae2, t2: 0x278a9f647a4079e1a0c55ebc7187e6d95bd02063634f35ea02a6935e7e664692 }), spend_auth_sig = Signature { rbar: "626653c781efcfa78c1baff8cdbb8a2b4fc575e30c3b79da17746ff39e6492c6", sbar: "d4811e5484117cdec1c9b453f9cc1030526a196e4b865b1887a27109e6b0720c" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x074d5aa67f42df975a345ca61893dfd15504edd47ea7eed11a7da15b5cd16ce6, v: 0x6c7c80b35e6577624e7aeab800922388f40a29756b63a2d98106ed73136b0612, z: 0x6d246c0ace486651a81ed1fa924e5ba403ecc08418435a216624ebc60543839e, t1: 0x30458e091bada48f5a5f5c0b77c61c93ed7a4c568303287c53711ea9533394b7, t2: 0x6c9a9c3e1b1e3357ef6dbcfa1aaab4f8fd472d265796ccabaf656f36af653904 }), anchor = 0x09c27597ecc5bfa1262b3822b26daf20e7c5b0ea6057ccaf7c9d49df70f7029b, nullifier = Nullifier("5b5f08d0a91630c83a7dc76a47bce9bf477fa412fed46a294d893e67bd18dabd"), rk = PublicKey(ExtendedPoint { u: 0x6db374807989519c19af1d068411c378bb37e6becc3320f89f7ec920af429414, v: 0x1e31812466440ec15d1405b220be8187884120e7b1f6764ef669b7e756986d2a, z: 0x197afb6a155ef154c18b228796deb7a89d1f93c32d8af75cd5c965e40f5e8aa0, t1: 0x262a779bc4f76b79cdd694b63375d2f16a4ad0226245f3c16f55d231ad099a0c, t2: 0x0ff949422e1573c1fa3a8a7f1e27db28c8d40fa87b6583ac5ae03be92a3bc47c }), spend_auth_sig = Signature { rbar: "1f31ecf52e25a236f8bed7660d3481324b5f1da5e3467f834dad2c37b5e71da0", sbar: "355cca7ed3e86eca2f64ffb98682e5bb54d3584368a3e835d6549e6f9603580c" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7047ccb877d941da0fb27a976c3ce68269c49a82829ae54388a6698a674714a0, v: 0x502882ba498ece139554ffadd5f31a707b9dc016a3b9154eeba2649885d955a6, z: 0x107b4b2a89d94ca8d884024b022ce0e1c41c351b6a5b83f50f7b8fe1b3df1d5f, t1: 0x0a02fd23787ed9149429bcb74243cd654a319abee687398fd7b5e4037cfadd51, t2: 0x1f695af851503bf80c98910a0e11f6bf0349c5cdf9021b4da0fbc434899f1a52 }), anchor = 0x14665e8886fdc414ca2d3c8403ceea4cdda4b632f7011fef0ff5cb5e6327f42b, nullifier = Nullifier("e8388d95532bbc261835be7e72d70f9940bb43b7aae63dbbdcf6dce8c5b95ee1"), rk = PublicKey(ExtendedPoint { u: 0x5f5f0e513145bd765ff39857a879d398bcff706c9defe8886b8a9ac28d3f4658, v: 0x323988ae7c8bd96e8b06fde94ad290015c22e45e6ad52186f36329c4ec4d09fa, z: 0x439c31f72d93c9c5c1951f113356bd9ff2f2e33536e34dc82781744ab4f751b2, t1: 0x3a78c0c736c312fe5659f3ff48bc2e28490e0ba873bedb43a72380de145a0d9b, t2: 0x05a514994e7d16d2ca02b519cbde3dae9aa61cb62aa15cd1c51e3d09d1049669 }), spend_auth_sig = Signature { rbar: "9f1781f5ca013ced6bcd6841928e90ee31749364718d583d5335ee22e25180ae", sbar: "dd7a0db13d239c99bba6ee355bd712ddf448421ee379a9b2ad3aa49d34e64408" }), SpendDescription(cv = ValueCommitment(ExtendedPoint { u: 0x01246b1a98bf37c83a8873895ccadbf1bf11829e57f07968b34822ee8fe7654f, v: 0x3ff7c462097dff040c1d1ce2f994fdd3f56f0f4da0dfbc189081279eb3ed0911, z: 0x0c8612e3756e82a494bf6bb3895c2abd8665882d52216e46868e62d9dedf3054, t1: 0x7144a13925067adbb8a4adfff957614ef7a5328c613a0c76ad5b56f31ca37c5c, t2: 0x6d156aa06c4fcbae05eb409a86c8432376dbe88458755aa9179230a8fc5aeb01 }), anchor = 0x5e5801f4693af02acfceb606d64e95684ee0ba4b6134bf65afd5eca83f427557, nullifier = Nullifier("4275fa8b013c6e0da1d4afdc22685752ae490726adfc9f0fbc95a5df8f75ebc7"), rk = PublicKey(ExtendedPoint { u: 0x13801ec64fea770225d39ef5e70e768909f0284b00a52722044339e7a299d229, v: 0x4e922d529dadcfdc0941f546fb7373b2d7bd1da1d78e399bfa315b8ed23fc8a9, z: 0x56671bb13a9d667e31b9b2b15b31edc7d22eff2584fd77b85aa004f35ace4f06, t1: 0x32f73e9226ef891905cfae40e861dd8559fe41aeadf97e824821bbe167dcff23, t2: 0x338774aa9b8633174da437b86dcd5d381e79b6e78d54037cbe515436448f77e8 }), spend_auth_sig = Signature { rbar: "bcb1f99c881820bf17b35d702c8b581d62a543cf240a28b9690017ec8a5b44c7", sbar: "322a95c6fe47f4ea52779aee799b531695c0a7f9b589e4813406059a0c92ab0a" })], shielded_outputs: [OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x33a1b5a964be7b875e7b6008304e30afeded6f45b1c1103d1150bd2215cda7f3, v: 0x1c3987dbc04959373be86d16746c9b9438d89a0898b551fdb3706d66cc8facbb, z: 0x3a52037587d2d70789dfa01f106eaa755b2220079b9c832d4b67b6d0eefa815a, t1: 0x22c1715c09dde681f2168d1d8a022c9168705c9282efc81637ed8e1a87346637, t2: 0x2b47aa7a3fb6f77fff42de726b370e00e8e5ad5499c19f9a5b73be86773ed7af }), cmu = ExtractedNoteCommitment(0x2bed605871f7eebf6da3d38804ea5aa7ebae2a18598040571b3b0e5d2beb010c), ephemeral_key = EphemeralKeyBytes([1, 54, 224, 125, 225, 41, 55, 90, 81, 87, 208, 5, 139, 115, 252, 102, 146, 210, 72, 204, 5, 208, 5, 180, 180, 15, 39, 237, 241, 70, 227, 42])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x347253c4272017bd7eb9db2d9672b55a27ce87d6293410a508221487e344245e, v: 0x24fdc33ed9d16501866a07a80d3610cbf5c817e87055a7925606ce17edb3ffdc, z: 0x22ca5119e4c72ede66c4f420899bc4bcf5a7b0744343e1e50346fdb05f7d9eef, t1: 0x11865860065254ddfd45dc2ee24fc489b215f74c68046bf30abc29bc600f3d05, t2: 0x646c44ce083f25dd400779e4593f3596edde6650fd650548a4c20898da1e0aae }), cmu = ExtractedNoteCommitment(0x487d996fa5edc1688b532579a5ba415bad9ad934967f7d37e3c4140a6e89c4f9), ephemeral_key = EphemeralKeyBytes([36, 254, 164, 196, 131, 164, 25, 4, 120, 170, 133, 208, 52, 1, 143, 251, 162, 108, 187, 70, 251, 132, 98, 126, 102, 209, 134, 227, 95, 142, 225, 69])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x141964b3b13b36ed9266cba2730528719e6401d35394d1007fca56f9a9748649, v: 0x14920499cd088107f50895784e635e669ad80093ce271420a9d6648507d45502, z: 0x0c56c0574cdf247e016ac1f38418d0a8adedb8032a61334407caf95a164d960d, t1: 0x2da14d26362674cbba5639abae98763d647e9c3dc806d34e86540ba226de62ac, t2: 0x107fe4350b0064d3ab01d254efc18825ff6d7c67fb1bf69e6151bd330cb29ee0 }), cmu = ExtractedNoteCommitment(0x429f212a0a66185699d7608b16f2f51169ff44805dfa9063c227c8795b4f7639), ephemeral_key = EphemeralKeyBytes([229, 116, 43, 122, 165, 12, 169, 183, 140, 59, 102, 142, 168, 255, 240, 216, 200, 8, 52, 96, 139, 188, 78, 44, 55, 174, 204, 49, 109, 33, 221, 93])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x00cc6586aef173de5b95b882e9d7981311dbe4b27286375c10a120cd103b9fab, v: 0x074ecee690d2614f5dddad2bcf9d2da3369bfe9983aaeb576113e37fa0fd5432, z: 0x29fd5813172b6ff6fe8412aaa8c00bcfa831b116831c4ddbe01e0033763ccdf0, t1: 0x3c25e783636f0f102c9b8aafcba9378bb7c3fb77260fe8317445aa19150ca35e, t2: 0x4c03abcd46318685118e74ff68984fb4bbae5b7d160a056dea1c7c3d174b9c2b }), cmu = ExtractedNoteCommitment(0x2d6f2bcb4de5fb70466908ba48b9e252f8d83fd8c896b7294e5c4c6bcb5dd4a2), ephemeral_key = EphemeralKeyBytes([239, 204, 232, 98, 163, 105, 255, 144, 35, 191, 203, 110, 157, 234, 15, 113, 89, 204, 22, 92, 51, 130, 236, 9, 100, 39, 135, 161, 183, 99, 118, 234])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5441970aec4e86e0bbcb7857a0d4b4e9b0fb63342550ced1b2a97231db8c9175, v: 0x15dfcfafd3b57abbc4e938d71bd5453bb3c062f864e30934916debf8ff2a3cdc, z: 0x18ad186150aed3d8e7a5642e10c6c54734bcd6ea0a5d2c0a3bf660d4f2064937, t1: 0x2e4c8f7556c05ec08ce10d2192cf3463166f85edde29ef59ed221dc2959f54b7, t2: 0x165585f044da05b7d64032a013d55d72a447da349a076509783c59ded064923f }), cmu = ExtractedNoteCommitment(0x0b7514b795cc6b42eca5b1afb94c313ebc34345ddb8a188ade965a86204c7d3e), ephemeral_key = EphemeralKeyBytes([57, 143, 116, 106, 60, 151, 222, 233, 72, 183, 79, 115, 139, 81, 204, 141, 120, 23, 187, 207, 166, 52, 149, 7, 199, 77, 124, 31, 50, 194, 116, 21])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x0a06e06ff53f4bb781d11a2d4f5fb983940bac1eb3a7711d9e7e573faa663a4e, v: 0x63ea7cc2e232192d43adbc1500e965438a4c94fbe9e94328979e6509e923de01, z: 0x0a033c1ef378ce1761532379727cea39855528946688e1f9d0c9290da90069e9, t1: 0x128698a21d78288a60833737bad238169207498e17e1dc0637fe4767acf673e3, t2: 0x1caa71a247f4f643e81eac377206307181c46ddf522f4836c3d5aad5f2afd52e }), cmu = ExtractedNoteCommitment(0x6f87e7d8a5269895f67fba893c550ae12e2df1158c64cf1854413a448e8b5d8c), ephemeral_key = EphemeralKeyBytes([196, 220, 169, 22, 6, 98, 192, 133, 212, 50, 14, 250, 28, 75, 182, 75, 183, 141, 17, 36, 19, 183, 80, 129, 135, 140, 44, 232, 95, 139, 89, 4])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x44fb27c48e21283a1f70dc892495e0d050062efad93744752bcc2fa36953fd10, v: 0x4858697688b37b258bb037ffd270fe4964be95d6bd28eaa69c6e1a77f529117d, z: 0x1900ef544f17d2ab5f3d9fbf907dcbcdce7d43544cca3a53f95ff34892dd4f26, t1: 0x65063896a113395677a2a44d59c94a2ac18fe81f782d4bca8a20aa4b88fbc3b7, t2: 0x07641436fa8d5fd5c6de71afc2ae951fdc2f845216b3ac366988eabd227594d7 }), cmu = ExtractedNoteCommitment(0x1b068e54f242a37d1fa11306a274e51622e01aa44ff319fd73b15e46d976badd), ephemeral_key = EphemeralKeyBytes([13, 71, 36, 121, 155, 155, 125, 88, 201, 4, 250, 179, 92, 80, 213, 18, 155, 144, 69, 72, 174, 226, 1, 7, 27, 145, 187, 158, 21, 186, 149, 191])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7166bef5ac833f979cd261e9f519ecab45777a26748cced5d2eb4db47923713d, v: 0x3618e8e75df6e7ae48200af8152d228af73cfaf4ccbb24e120721954cc712811, z: 0x10da1421bc0a0b01893d056e922aec62664c8eb5fc1d9ef5035fddd8dba5ae5f, t1: 0x12e7565296c7596bc97ad4df8cce0a6e94d6b516f0be11ffcd4c50ee73202ac6, t2: 0x174f91a1803dcfd45e26c8bc33d37394f1c83bb65aa2168f04350179d46d3961 }), cmu = ExtractedNoteCommitment(0x19435e85f48812b572e15aaf4a45644a3cd95dd493311a3794831f8deb27f80e), ephemeral_key = EphemeralKeyBytes([140, 131, 93, 37, 30, 3, 54, 9, 133, 60, 17, 179, 162, 147, 51, 205, 63, 160, 135, 216, 248, 206, 248, 72, 202, 132, 194, 240, 15, 14, 191, 218])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x6f5154d0d718ab323e05d8defa271f675a07459c2440aea3916710992997e6f7, v: 0x124c0eb53c700acc438899d3aa93ec3e5aea257a3ac18d3e21b7bf09fb1d946c, z: 0x5cb2109ee9828d563aac60175a26178613f3e279ef2e1f2afbe480bd90e9b1ff, t1: 0x6bf83ad2828459d384aba05adc84100500b5cb976acfec1203c2daf21491c1b3, t2: 0x6571e40dd5f20a629ac9685d5cc3e22fa666af5f934216ac772740668d3b9dc7 }), cmu = ExtractedNoteCommitment(0x25c9dd734d05a8158ed08456b8b523823593d98d07e5947a48dc0985ca10ab56), ephemeral_key = EphemeralKeyBytes([216, 102, 16, 140, 91, 32, 44, 203, 40, 172, 158, 164, 46, 47, 49, 243, 88, 255, 40, 238, 109, 105, 98, 17, 100, 155, 183, 190, 144, 43, 39, 22])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x047a0a276c7855a44991c29155c671a255fd1a218864bc59072ef0bf9d8b4554, v: 0x0b1e2e65bdef498e40872c58d6d0c9a162ee75d271286f8cba30554407b8aea4, z: 0x2e702d879554897568b68cca7165bd6ba75431b19859e5c8026a4e1cc5418317, t1: 0x6eddbb85d9b5acb2a3c0080a97f3d3e6f7290c7bda578806717617d411673c5c, t2: 0x47b3d307106516bf997afec433d2ed1f67fbbb888c300cc7a221e2d0416b366d }), cmu = ExtractedNoteCommitment(0x4d3ddb8b477d2d3f0f810d3ec0fc9cf2d041f224085a2db58fde8eb6547ffff4), ephemeral_key = EphemeralKeyBytes([188, 75, 180, 157, 77, 192, 60, 224, 0, 63, 159, 254, 178, 24, 172, 134, 71, 213, 52, 188, 254, 40, 17, 36, 65, 240, 117, 23, 66, 63, 132, 229])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x66abcc480c924b6c34e1682227817865770c7005d6f8889557b4ca82ee979630, v: 0x01c10bc64117deddf1d65b671b5dcfe924d32a5ff990e126da4657c2eba05613, z: 0x3df3de3fb5aaef0013c2d4ecbbb64f627d6f870fd811369f11e324eb328362d8, t1: 0x0123c93f972e5eb0d411a898c6945cdad760c3d12a95b7915b662abb9ac46e8e, t2: 0x51e96c4920cb5091ad9efec3005967c5100cacddcf83c8bf38345ab3aa60bcb0 }), cmu = ExtractedNoteCommitment(0x3d59af29bbddc8d9d6c934eb339ae8afaafaef96d165d7c417565c4ebfeff2ef), ephemeral_key = EphemeralKeyBytes([185, 247, 186, 199, 146, 38, 202, 207, 65, 98, 161, 188, 229, 70, 44, 102, 242, 70, 83, 227, 234, 179, 55, 42, 181, 169, 55, 44, 167, 0, 216, 226])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x38dc9b70cedd37747f6e358738dbf18bc9df69b52fe36d88748940cb44d047e3, v: 0x5d39f8b4f9842724f7cff351826f8e9fc4cbd68ba484f8d45ffa3a581e746d92, z: 0x2b28b6e9768b5c2c96833b7584adaf31a223321ec62fce2606bac45024053096, t1: 0x598579963ba223c20762bb45d0a09872fe98e114610ce3c8ea63f124d47314d5, t2: 0x445f7dffc79939bc16479eb8dc9cc460a8998a601645005f1961f1cf8c7ba7ef }), cmu = ExtractedNoteCommitment(0x43ea000509911e76ac6f15410cd1c64518bf2c1a9f606f826b130180ba463a6a), ephemeral_key = EphemeralKeyBytes([202, 33, 143, 0, 182, 211, 54, 106, 156, 98, 43, 41, 53, 214, 179, 252, 15, 62, 137, 183, 83, 250, 84, 209, 175, 132, 235, 215, 55, 236, 48, 44])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x1cd26d46bb4c43680876a1c85b05656589e6ad101c8503ad8d46c9c28ff6712f, v: 0x2fd920f24f3ecfc6ebaa9c0f587ce753baf9fcc08cad76ea58d479a469ac56f1, z: 0x6e282c4ec5cc86b4b15fc949ce126b051ceb2dc0acd870bff3f5b7aac3b982dd, t1: 0x4d9d3736ac72c13ca4cb8955e710aefbdf21adc2666cf91b6019538f0578095a, t2: 0x4ddfc0e09fd9cccbf929f8cbfa9451c45123b955ac83f742f496ad090fa80641 }), cmu = ExtractedNoteCommitment(0x16df873edfd99d2edc0f77bd00b31e4957f21ac4cbc7c995f66f2047f75a8465), ephemeral_key = EphemeralKeyBytes([24, 207, 37, 2, 225, 140, 93, 158, 216, 85, 30, 91, 242, 54, 180, 30, 182, 216, 5, 80, 51, 32, 132, 151, 95, 87, 83, 21, 170, 35, 75, 173])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x250caf5bf3298c9ec1b9349cdf35862fa1f153007c023ce30fd887f1f3d31cbe, v: 0x51ae84954c1157bb337d2d9c64a69d1fa4f1f885bba50c40d7550bce4075e92a, z: 0x298e7a4f420045c0ba79212961954333b34a95765197737fe99a4d778cbd6881, t1: 0x21e2a5316133ea315b9c2ed77ea9148cec9b37ddd56d882287fda71cefda797d, t2: 0x5bb8289c0be8b0e9a823ebdbbb8cd489971504e0fe306f8ec303f6409cd19336 }), cmu = ExtractedNoteCommitment(0x3c3169706c8b4b6df125c52c64f954b3537371964fc5a1909fe7ea881229052c), ephemeral_key = EphemeralKeyBytes([93, 190, 51, 126, 18, 66, 57, 53, 39, 125, 153, 199, 215, 137, 31, 136, 53, 255, 211, 210, 156, 104, 185, 238, 197, 85, 67, 90, 120, 65, 219, 189])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x4ad05a1051e244bda076a583f93f36e471245fa46051966c597ab6e9190b3023, v: 0x54726c5c2c0d1ffe5baa5ae3597e076db183148b67e1f8de6bcd7423e66ab229, z: 0x1e664039c0be5d54d035b20b4f7ada264f64fb801eca9a8321f682f07e5b9ce0, t1: 0x2486b3a6c7c8808ef7b5dd87d234d9c05cf4b0878ffd58641461504e780c80e9, t2: 0x0374a2e63704c4833f4210dc473eec1c72583d85524bdfe65f2bcae79378f096 }), cmu = ExtractedNoteCommitment(0x16e83c89746019430dc1f0b9cfb2101c94c316932eb4720929454c168d67256f), ephemeral_key = EphemeralKeyBytes([233, 218, 135, 168, 201, 30, 31, 107, 108, 12, 9, 51, 190, 219, 219, 26, 83, 180, 63, 21, 85, 133, 151, 36, 68, 198, 217, 60, 118, 179, 125, 80])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5f77cdf511091d2286907b9b7e3980f4bc2f60ba0ca2cc783aae716248e5d849, v: 0x5ad79c280ce714ee8163d45953f76db853d2e94307d9fa4503830fa9d16bf568, z: 0x4d13097b0004856173e1e386de0d4379a8b73f92b85de7d9ec41f715af5a33ac, t1: 0x3aa7695c47dd0c9cc94940d13be9ae7e37b8b95708aaf9b49b1401310e971f71, t2: 0x67d104c24381bfe3575f48f3e16bd123abe681a297225dd2346d8e6f918a49dc }), cmu = ExtractedNoteCommitment(0x32ea1b65b97dd6c9a4863fe14781fa6e0999bcf3d1c280190fed726a28a682e6), ephemeral_key = EphemeralKeyBytes([86, 186, 229, 66, 44, 222, 190, 116, 146, 1, 57, 136, 160, 179, 203, 173, 11, 38, 17, 99, 123, 156, 217, 95, 200, 234, 215, 119, 78, 19, 187, 178])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x7352dde5dc4f1b4516aa4d656965bb591d05b51c700073c25f97a0d36c47d4da, v: 0x30a68659f120cac82eb56ccae95d3536659bb6d344bd1fec5a09b06e8ec17f77, z: 0x09207e2f00a65a497080773d9f47989f1c4cf71f941a86939cb26662deb9dea8, t1: 0x4971c11d54b5d02559909885d4418fd00f9335cd2b94c40e1f38961f9c8edc4b, t2: 0x50b22b8542091ccc4acd7047e4b63d22e7e03d88ff6c8a53585bf607b4ce9644 }), cmu = ExtractedNoteCommitment(0x35776fef9fc3eb5e69ede84bb56a23f42f51f736141a20ccb0e0174a1d1f243a), ephemeral_key = EphemeralKeyBytes([26, 96, 242, 128, 170, 124, 42, 245, 86, 91, 70, 225, 130, 9, 144, 9, 223, 195, 134, 163, 118, 91, 205, 108, 226, 85, 27, 84, 151, 150, 237, 67])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5a33abf19c19d0b4b491e63bb4a2f3e1a089fcfc50e309906eb1e514cdb25822, v: 0x569819c745978913c607251cd37b30cb9f7365a98f845a3357db3737449211c3, z: 0x61333fef1d5867af6c5b41142646e0e5032a78aff570053ced3fe4dad3a1885e, t1: 0x1216948f8cf157d7d7eee00e185f831f22cd322d7c49ad6b2ed3f787c9fe5bd0, t2: 0x06e364e08c670d72810143a4b98ba0f0ae5cbeff494c993b97a78effbd430f2d }), cmu = ExtractedNoteCommitment(0x0176e70bf45598bfac7fc5ce5d74d0e24bceeeccd7f2ea2a1aad73f67c815940), ephemeral_key = EphemeralKeyBytes([27, 81, 140, 108, 25, 120, 246, 65, 98, 187, 172, 235, 224, 47, 51, 160, 38, 240, 233, 164, 32, 76, 97, 200, 229, 135, 111, 138, 131, 28, 12, 182])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x620c7ad63a0a83f77144ddc5eb8c6df6381b377b7a7a8bff9e70e92bc15a0ef1, v: 0x4652203ac8e009d2ae512f7f87a7ef6dcda35d6b89dc650b98f07ba9cf4f7133, z: 0x3d9ab8ec28c879343db6b353ed01f764150f1f65dcb99edd59ae7b527aa787a6, t1: 0x70200fefa27220776ee6bc3fb7d065d595323e302a92360d7bc45c9da641442b, t2: 0x0bb3c4787eb4f40c73db6057edd6022b8f7cecabe9113fb5df0b155e57036244 }), cmu = ExtractedNoteCommitment(0x4402649fa884631e9eeb2079eb84e666b47634569ba4edd584f3ad96bb60718b), ephemeral_key = EphemeralKeyBytes([149, 50, 203, 61, 233, 194, 188, 255, 163, 65, 77, 239, 157, 130, 85, 80, 18, 166, 69, 110, 253, 142, 75, 53, 200, 219, 56, 52, 220, 30, 70, 29])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x65d109a4b2f3f6d4b07554f561a7030972378c2e04d2e33d669af130792daff2, v: 0x3f265f9d4bf274f2af17069e4a7b568374ad9ecde3a1482a3b81caed0fb5d02e, z: 0x080f08f22e6673e87ea25cd6b211a58ab05e61977f270c4db71dd36d90600dd7, t1: 0x21b99851b33dd1b20a89f63e95655ee16a3cb02d64841fde67977bc0608a4a3c, t2: 0x00fd4e654d9ac387cff4242e15adb76e5c7c053e7954d436fca3e6c3b03a3fb6 }), cmu = ExtractedNoteCommitment(0x24a8083d0b6ad5b313cc636cc2f584f88fe8fe97e66c58fe010a9b050ed67b17), ephemeral_key = EphemeralKeyBytes([133, 60, 66, 193, 202, 10, 96, 129, 214, 147, 146, 10, 199, 182, 46, 95, 9, 6, 253, 52, 106, 103, 187, 44, 141, 115, 123, 251, 74, 106, 143, 59])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x67105c25d8b7f6855eed0c0bf91d7480dda221c61095b260d77787e397b9338f, v: 0x23842217ce5df95571311b4b9a00e00013660eeaa1caba120a7551aaf11527a7, z: 0x0a918d33015679f7f0d65bfce5896f3d0ae442b62e97741330d679f73b400bc2, t1: 0x72d0bde17897b237d65af1beafbe4a3c6c5021d422b4ee599b140fb6c35f1a18, t2: 0x0d60a76fb8c2b6c182dddb74dbc07868e7f705066b1e2cbddf882d37bba66f90 }), cmu = ExtractedNoteCommitment(0x582b5b7b1c8cd76cbcf43aac7040bf4d5dde852f1135238843eec0d3862ee680), ephemeral_key = EphemeralKeyBytes([184, 218, 90, 68, 9, 117, 82, 122, 34, 92, 184, 181, 231, 54, 186, 36, 40, 51, 168, 34, 14, 162, 135, 171, 199, 202, 166, 178, 0, 107, 76, 76])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x517d6b2e56a224dfca64d6f83693869d16dbb84a5f83096ac4cdc9c68c9c37f2, v: 0x34279802173db9a6bb2a4fb656731aa245e6a80a14cebd4d32c0abac5a6336da, z: 0x50f8ec16f7b33954ea5cc46c468c5c18a7750a4eb64328c6a03cdb9a967547af, t1: 0x2d06222216f46835de876566bf14a1918a11c67a8c25a1c4c9eba2f3b6b292ca, t2: 0x4d4f392fcf7dbdab827c5ab3fdd9ddfeef887c0eb0077eb10b92b60cfabf0478 }), cmu = ExtractedNoteCommitment(0x5c0fd1ee858430af67186bcd33f308e16c87a8a58797975a5a49fb21bd9df530), ephemeral_key = EphemeralKeyBytes([181, 215, 227, 138, 142, 105, 126, 23, 34, 10, 15, 107, 64, 74, 139, 195, 35, 70, 85, 27, 105, 141, 128, 21, 4, 10, 126, 98, 156, 38, 244, 227])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x57eb5bc3b4e75e0537ff5e3c86beea27cfa8d80d3ebd6dff17abacb323ce70ca, v: 0x6ab2ca1a837817df9dbff7bf1116b17d2d91cf1dfb1870686deca092f423f2ad, z: 0x32ce224202647b09af3241378248e093aad5407cb83a923dea482d88051ab62f, t1: 0x5921b600db5b0d34a18bd3533a5f28ae448fa8958d81e4c61e175a15d2a6846e, t2: 0x1d6440b7f4dd68e21369493a91394daf384642d1ea6913092def0435ad0d7961 }), cmu = ExtractedNoteCommitment(0x0663eca2a22e4e7bbc3e3dd93bf48086d1594508b4a3bab6e318d9b31fd5deb8), ephemeral_key = EphemeralKeyBytes([240, 132, 141, 191, 193, 126, 163, 25, 172, 249, 2, 136, 156, 212, 67, 217, 21, 255, 38, 131, 124, 103, 183, 229, 121, 26, 172, 15, 10, 247, 138, 139])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x1715e312839cb2a91c77e5483fe349042550e440f2e92c9bfdadc5810b11d55f, v: 0x20cb8b36d4ecfa358a252fc1dcf886bc41e60fa5d2ed843d1a9076dc7105c100, z: 0x161adacc8d6f6c3ff79b007bcd2b9048325a468ea0e98d0ef4164b620b2d0c0a, t1: 0x070f5ec62dce9a471357b699a956c9400bdb0b509fc8839ed5339ff96b713bf5, t2: 0x0d342217f184e939a9d307441aafd15b201ea207e6d5fbe84a1f7f283f47bebe }), cmu = ExtractedNoteCommitment(0x705d24681a6295f72aa8cfaff157192a0a1cbda5ba8751e68a8e1dd54648878e), ephemeral_key = EphemeralKeyBytes([5, 234, 133, 171, 227, 199, 180, 250, 40, 219, 31, 66, 204, 210, 150, 255, 217, 240, 158, 179, 202, 135, 3, 148, 70, 49, 206, 32, 18, 64, 212, 3])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x03eb41a7d06aca9a0cffeb4ce990766313229c061d263f64a5e1e03604fd10d9, v: 0x24ccc45e85bd1b4fda61cf4070cb9ae77d9571370693202ba74cb3ce6cc12507, z: 0x05d63014b5aab4b55d9b192d5832a3f79bd58f2fc99a42225a36767599f108d5, t1: 0x2b253aff7e98cef107ab3bd4cdcca58fa0fc5de10246a6af3b3ed14a682213fb, t2: 0x45950428ea997ee6fe1b90ea1b708d57c7f5191dde066b0bd47821f96c5c9a78 }), cmu = ExtractedNoteCommitment(0x4d7519491487cb889b51160060248edc973dcccc174bd292c5cc7c2e648915d2), ephemeral_key = EphemeralKeyBytes([165, 92, 124, 93, 77, 67, 101, 56, 82, 25, 188, 219, 209, 30, 238, 32, 86, 140, 158, 231, 249, 11, 100, 134, 141, 65, 223, 100, 182, 78, 96, 46])), OutputDescription(cv = ValueCommitment(ExtendedPoint { u: 0x5523bab49821e9b0016cf483223d366672f57c9146cd18c641f78d02c0fde544, v: 0x0162724a4e36414f2f16dce29a6b2e94ee2d925d7c8e79d654949b446ae0abab, z: 0x4f3553bf7ee84e7c0006e39beb9be60431aa611cca72005ad4a51aa3a76a431d, t1: 0x4310737d791e2cd930cc6f68839d91fc87663a544e988cd0fc08d5da38ab1416, t2: 0x5fddd6bb34ddd4c494555118c2815e03b78164836fb3253bd15ecb1f55150c94 }), cmu = ExtractedNoteCommitment(0x3c38b3d9c41bcc7ddb78cc7286ae1c1cb1a5405b3be1d0233b72d700fc083af6), ephemeral_key = EphemeralKeyBytes([215, 106, 198, 138, 88, 43, 137, 145, 145, 183, 141, 112, 199, 34, 56, 24, 191, 73, 174, 48, 13, 232, 223, 18, 94, 168, 25, 206, 121, 194, 36, 241]))], value_balance: Amount(-1135389017106274), authorization: Authorized { binding_sig: Signature { rbar: "f7336f652e66f5aa5d3a4786a0d265ed79616b9b83cb2d18abc3d8e448f35235", sbar: "a03171dae8154ddae1af64f0d8bb8eb8cdf7f97f2fe8dfa7f40766201b960c08" } } }), orchard_bundle: None, orchard_zsa_bundle: None, issue_bundle: None } } diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 8a9c9ad8bd..a0da4be2bc 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -55,11 +55,11 @@ use crate::{ use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; use orchard::note::AssetBase; use orchard::orchard_flavor::OrchardVanilla; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::orchard_flavor::OrchardZSA; #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use orchard::{ issuance::{IssueBundle, IssueInfo}, keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}, + orchard_flavor::OrchardZSA, }; #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use rand_core::OsRng; diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index 8c519336f2..3955344214 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -57,10 +57,10 @@ fn read_authorization(mut reader: R) -> io::Result { } fn read_action(mut reader: R) -> io::Result { - let finalize = reader.read_u8()? != 0; - let notes = Vector::read(&mut reader, |r| read_note(r))?; let asset_descr_bytes = Vector::read(&mut reader, |r| r.read_u8())?; let asset_descr: String = String::from_utf8(asset_descr_bytes).unwrap(); + let notes = Vector::read(&mut reader, |r| read_note(r))?; + let finalize = reader.read_u8()? != 0; Ok(IssueAction::from_parts(asset_descr, notes, finalize)) } @@ -131,11 +131,11 @@ pub fn write_v7_bundle( fn write_action(action: &IssueAction, mut writer: W) -> io::Result<()> { let is_finalized_u8: u8 = if action.is_finalized() { 1 } else { 0 }; - writer.write_u8(is_finalized_u8)?; - Vector::write(&mut writer, action.notes(), |w, note| write_note(note, w))?; Vector::write(&mut writer, action.asset_desc().as_bytes(), |w, b| { w.write_u8(*b) })?; + Vector::write(&mut writer, action.notes(), |w, note| write_note(note, w))?; + writer.write_u8(is_finalized_u8)?; Ok(()) } diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index bc59747ea2..303e45f809 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -86,8 +86,8 @@ pub fn read_v5_bundle( } } -/// Reads an [`orchard::Bundle`] from a v5 transaction format. -pub fn read_v6_bundle( +/// Reads an [`orchard::Bundle`] from a v7 transaction format. +pub fn read_v7_bundle( mut reader: R, ) -> io::Result>> { #[allow(clippy::redundant_closure)] @@ -312,8 +312,8 @@ pub fn write_v5_bundle( Ok(()) } -/// Writes an [`orchard::Bundle`] in the v6 transaction format. -pub fn write_v6_bundle( +/// Writes an [`orchard::Bundle`] in the v7 transaction format. +pub fn write_v7_bundle( bundle: Option<&orchard::Bundle>, mut writer: W, ) -> io::Result<()> { diff --git a/zcash_primitives/src/transaction/components/sapling.rs b/zcash_primitives/src/transaction/components/sapling.rs index 62e493865d..9ed2e3e845 100644 --- a/zcash_primitives/src/transaction/components/sapling.rs +++ b/zcash_primitives/src/transaction/components/sapling.rs @@ -6,7 +6,7 @@ use zcash_protocol::consensus::{BlockHeight, NetworkUpgrade, Parameters, ZIP212_ use std::io::{self, Read, Write}; use zcash_encoding::{Array, CompactSize, Vector}; -use zcash_note_encryption::{EphemeralKeyBytes, ENC_CIPHERTEXT_SIZE, OUT_CIPHERTEXT_SIZE}; +use zcash_note_encryption::{EphemeralKeyBytes, OUT_CIPHERTEXT_SIZE}; use crate::{ sapling::{ @@ -15,6 +15,7 @@ use crate::{ OutputDescriptionV5, SpendDescription, SpendDescriptionV5, }, note::ExtractedNoteCommitment, + note_encryption::ENC_CIPHERTEXT_SIZE, value::ValueCommitment, Nullifier, }, diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 7683cd02f9..13a4f2a7ea 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -58,7 +58,7 @@ const V5_VERSION_GROUP_ID: u32 = 0x26A7270A; #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ const V7_TX_VERSION: u32 = 7; #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ -const V7_VERSION_GROUP_ID: u32 = 0x26A7270C; // TODO ??? +const V7_VERSION_GROUP_ID: u32 = 0x124A69F8; // TODO ??? /// These versions are used exclusively for in-development transaction /// serialization, and will never be active under the consensus rules. @@ -930,7 +930,7 @@ impl Transaction { Self::read_v5_header_fragment(&mut reader)?; let transparent_bundle = Self::read_transparent(&mut reader)?; let sapling_bundle = sapling_serialization::read_v5_bundle(&mut reader)?; - let orchard_zsa_bundle = orchard_serialization::read_v6_bundle(&mut reader)?; + let orchard_zsa_bundle = orchard_serialization::read_v7_bundle(&mut reader)?; let issue_bundle = issuance::read_v7_bundle(&mut reader)?; #[cfg(zcash_unstable = "zfuture")] @@ -1079,13 +1079,13 @@ impl Transaction { if self.sprout_bundle.is_some() { return Err(io::Error::new( io::ErrorKind::InvalidInput, - "Sprout components cannot be present when serializing to the V5 transaction format.", + "Sprout components cannot be present when serializing to the V7 transaction format.", )); } self.write_v5_header(&mut writer)?; self.write_transparent(&mut writer)?; self.write_v5_sapling(&mut writer)?; - orchard_serialization::write_v6_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; + orchard_serialization::write_v7_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; issuance::write_v7_bundle(self.issue_bundle.as_ref(), &mut writer)?; #[cfg(zcash_unstable = "zfuture")] self.write_tze(&mut writer)?; diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index ad2a37167c..ef50afba88 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -236,7 +236,12 @@ fn zip_0244() { fn to_test_txdata( tv: &self::data::zip_0244::TestVector, ) -> (TransactionData, TxDigests) { - let tx = Transaction::read(&tv.tx[..], BranchId::Nu5).unwrap(); + let tx = Transaction::read( + &tv.tx[..], + #[cfg(not(zcash_unstable = "nu6"))] /* TODO nu7 */ BranchId::Nu5, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7, + ) + .unwrap(); assert_eq!(tx.txid.as_ref(), &tv.txid); assert_eq!(tx.auth_commitment().as_ref(), &tv.auth_digest); diff --git a/zcash_primitives/src/transaction/tests/data.rs b/zcash_primitives/src/transaction/tests/data.rs index 5b73779fea..1e66595c74 100644 --- a/zcash_primitives/src/transaction/tests/data.rs +++ b/zcash_primitives/src/transaction/tests/data.rs @@ -5703,6 +5703,7 @@ pub mod zip_0244 { } // From https://github.com/zcash-hackworks/zcash-test-vectors/blob/master/zip_0244.py + // and https://github.com/zcash-hackworks/zcash-test-vectors/blob/master/zip_0244_zsa.py pub fn make_test_vectors() -> Vec { vec![ TestVector { @@ -5820,309 +5821,488 @@ pub mod zip_0244 { 0x34, 0xe4, 0xbf, 0x47, 0x86, 0x42, 0xab, 0x96, 0xb1, 0x5d, 0x3b, 0x3e, 0x13, 0xce, 0x23, 0x87, 0xac, 0x84, 0xdc, 0x08, 0x19, 0xe8, 0x12, 0x60, 0xe1, 0x1d, 0x39, 0x2a, 0x5f, 0x06, 0xdb, 0x8b, 0x56, 0x33, 0xde, 0x28, 0x1a, 0x0e, 0x9c, - 0x95, 0x8c, 0x24, 0x06, 0x02, 0x97, 0xf6, 0x08, 0xaf, 0x1d, 0xc5, 0x16, 0x16, - 0x56, 0x2b, 0x1f, 0xff, 0xf6, 0xe2, 0xa2, 0x8b, 0xab, 0x1f, 0x77, 0x72, 0x71, - 0x3a, 0x0a, 0x4b, 0x56, 0xfe, 0x47, 0xfb, 0x5a, 0x7b, 0x73, 0xae, 0xee, 0x53, - 0x45, 0x56, 0x6e, 0xcf, 0x3e, 0x95, 0xe8, 0x25, 0xf9, 0x2e, 0xb4, 0x69, 0xeb, - 0x5d, 0x69, 0x16, 0x42, 0x06, 0xa0, 0xea, 0x1c, 0xe7, 0x3b, 0xfb, 0x2a, 0x94, - 0x2e, 0x73, 0x70, 0x32, 0x14, 0xd2, 0x70, 0xd8, 0x05, 0x34, 0x38, 0x9b, 0x1a, - 0x1e, 0x2b, 0xba, 0x67, 0x48, 0x1e, 0xb3, 0x66, 0x7d, 0x6d, 0x38, 0x25, 0x4a, - 0xc4, 0xb4, 0x45, 0x59, 0xb4, 0x70, 0x8c, 0xdd, 0x12, 0x89, 0x89, 0x72, 0xa8, - 0x95, 0xbf, 0x0f, 0xb0, 0x55, 0xcf, 0x1f, 0xb9, 0xb7, 0x30, 0x29, 0xd6, 0xbf, - 0xb2, 0x7d, 0xa2, 0xb5, 0x29, 0x4f, 0x5c, 0xb3, 0x54, 0xa8, 0x94, 0x32, 0x28, - 0x48, 0xcc, 0x3d, 0x35, 0xb9, 0x55, 0x4a, 0x5f, 0x62, 0xb4, 0x4a, 0x7d, 0xcb, - 0x25, 0x40, 0x6e, 0x5b, 0xa0, 0x78, 0x82, 0xcb, 0x64, 0x73, 0x71, 0x4e, 0x77, - 0xa0, 0x51, 0xa7, 0xdc, 0xd2, 0x9f, 0xea, 0x0a, 0x94, 0x37, 0x85, 0xb3, 0x25, - 0xcd, 0xab, 0x95, 0x40, 0x4f, 0xc7, 0xae, 0xd7, 0x05, 0x25, 0xcd, 0xdb, 0x41, - 0x87, 0x2c, 0xfc, 0xc2, 0x14, 0xb1, 0x32, 0x32, 0xed, 0xc7, 0x86, 0x09, 0x75, - 0x3d, 0xbf, 0xf9, 0x30, 0xeb, 0x0d, 0xc1, 0x56, 0x61, 0x2b, 0x9c, 0xb4, 0x34, - 0xbc, 0x4b, 0x69, 0x33, 0x92, 0xde, 0xb8, 0x7c, 0x53, 0x04, 0x35, 0x31, 0x2e, - 0xdc, 0xed, 0xc6, 0xa9, 0x61, 0x13, 0x33, 0x38, 0xd7, 0x86, 0xc4, 0xa3, 0xe1, - 0x03, 0xf6, 0x01, 0x10, 0xa1, 0x6b, 0x13, 0x37, 0x12, 0x97, 0x04, 0xbf, 0x47, - 0x54, 0xff, 0x6b, 0xa9, 0xfb, 0xe6, 0x59, 0x51, 0xe6, 0x10, 0x62, 0x0f, 0x71, - 0xcd, 0xa8, 0xfc, 0x87, 0x76, 0x25, 0xf2, 0xc5, 0xbb, 0x04, 0xcb, 0xe1, 0x22, - 0x8b, 0x1e, 0x88, 0x6f, 0x40, 0x50, 0xaf, 0xd8, 0xfe, 0x94, 0xe9, 0x7d, 0x2e, - 0x9e, 0x85, 0xc6, 0xbb, 0x74, 0x8c, 0x00, 0x42, 0xd3, 0x24, 0x9a, 0xbb, 0x13, - 0x42, 0xbb, 0x0e, 0xeb, 0xf6, 0x20, 0x58, 0xbf, 0x3d, 0xe0, 0x80, 0xd9, 0x46, - 0x11, 0xa3, 0x75, 0x09, 0x15, 0xb5, 0xdc, 0x6c, 0x0b, 0x38, 0x99, 0xd4, 0x12, - 0x22, 0xba, 0xce, 0x76, 0x0e, 0xe9, 0xc8, 0x81, 0x8d, 0xed, 0x59, 0x9e, 0x34, - 0xc5, 0x6d, 0x73, 0x72, 0xaf, 0x1e, 0xb8, 0x68, 0x52, 0xf2, 0xa7, 0x32, 0x10, - 0x4b, 0xdb, 0x75, 0x07, 0x39, 0xde, 0x6c, 0x2c, 0x6e, 0x0f, 0x9e, 0xb7, 0xcb, - 0x17, 0xf1, 0x94, 0x2b, 0xfc, 0x9f, 0x4f, 0xd6, 0xeb, 0xb6, 0xb4, 0xcd, 0xd4, - 0xda, 0x2b, 0xca, 0x26, 0xfa, 0xc4, 0x57, 0x8e, 0x9f, 0x54, 0x34, 0x05, 0xac, - 0xc7, 0xd8, 0x6f, 0xf5, 0x91, 0x58, 0xbd, 0x0c, 0xba, 0x3a, 0xef, 0x6f, 0x4a, - 0x84, 0x72, 0xd1, 0x44, 0xd9, 0x9f, 0x8b, 0x8d, 0x1d, 0xed, 0xaa, 0x90, 0x77, - 0xd4, 0xf0, 0x1d, 0x4b, 0xb2, 0x7b, 0xbe, 0x31, 0xd8, 0x8f, 0xbe, 0xfa, 0xc3, - 0xdc, 0xd4, 0x79, 0x75, 0x63, 0xa2, 0x6b, 0x1d, 0x61, 0xfc, 0xd9, 0xa4, 0x64, - 0xab, 0x21, 0xed, 0x55, 0x0f, 0xe6, 0xfa, 0x09, 0x69, 0x5b, 0xa0, 0xb2, 0xf1, - 0x0e, 0xea, 0x64, 0x68, 0xcc, 0x6e, 0x20, 0xa6, 0x6f, 0x82, 0x6e, 0x3d, 0x14, - 0xc5, 0x00, 0x6f, 0x05, 0x63, 0x88, 0x7f, 0x5e, 0x12, 0x89, 0xbe, 0x1b, 0x20, - 0x04, 0xca, 0xca, 0x8d, 0x3f, 0x34, 0xd6, 0xe8, 0x4b, 0xf5, 0x9c, 0x1e, 0x04, - 0x61, 0x9a, 0x7c, 0x23, 0xa9, 0x96, 0x94, 0x1d, 0x88, 0x9e, 0x46, 0x22, 0xa9, - 0xb9, 0xb1, 0xd5, 0x9d, 0x5e, 0x31, 0x90, 0x94, 0x31, 0x8c, 0xd4, 0x05, 0xba, - 0x27, 0xb7, 0xe2, 0xc0, 0x84, 0x76, 0x2d, 0x31, 0x45, 0x3e, 0xc4, 0x54, 0x9a, - 0x4d, 0x97, 0x72, 0x9d, 0x03, 0x34, 0x60, 0xfc, 0xf8, 0x9d, 0x64, 0x94, 0xf2, - 0xff, 0xd7, 0x89, 0xe9, 0x80, 0x82, 0xea, 0x5c, 0xe9, 0x53, 0x4b, 0x3a, 0xcd, - 0x60, 0xfe, 0x49, 0xe3, 0x7e, 0x4f, 0x66, 0x69, 0x31, 0x67, 0x73, 0x19, 0xed, - 0x89, 0xf8, 0x55, 0x88, 0x74, 0x1b, 0x31, 0x28, 0x90, 0x1a, 0x93, 0xbd, 0x78, - 0xe4, 0xbe, 0x02, 0x25, 0xa9, 0xe2, 0x69, 0x2c, 0x77, 0xc9, 0x69, 0xed, 0x01, - 0x76, 0xbd, 0xf9, 0x55, 0x59, 0x48, 0xcb, 0xd5, 0xa3, 0x32, 0xd0, 0x45, 0xde, - 0x6b, 0xa6, 0xbf, 0x44, 0x90, 0xad, 0xfe, 0x74, 0x44, 0xcd, 0x46, 0x7a, 0x09, - 0x07, 0x54, 0x17, 0xfc, 0xc0, 0x06, 0x2e, 0x49, 0xf0, 0x08, 0xc5, 0x1a, 0xd4, - 0x22, 0x74, 0x39, 0xc1, 0xb4, 0x47, 0x6c, 0xcd, 0x8e, 0x97, 0x86, 0x2d, 0xab, - 0x7b, 0xe1, 0xe8, 0xd3, 0x99, 0xc0, 0x5e, 0xf2, 0x7c, 0x6e, 0x22, 0xee, 0x27, - 0x3e, 0x15, 0x78, 0x6e, 0x39, 0x4c, 0x8f, 0x1b, 0xe3, 0x16, 0x82, 0xa3, 0x01, - 0x47, 0x96, 0x3a, 0xc8, 0xda, 0x8d, 0x41, 0xd8, 0x04, 0x25, 0x84, 0x26, 0xa3, - 0xf7, 0x02, 0x89, 0xb8, 0xad, 0x19, 0xd8, 0xde, 0x13, 0xbe, 0x4e, 0xeb, 0xe3, - 0xbd, 0x4c, 0x8a, 0x6f, 0x55, 0xd6, 0xe0, 0xc3, 0x73, 0xd4, 0x56, 0x85, 0x18, - 0x79, 0xf5, 0xfb, 0xc2, 0x82, 0xdb, 0x9e, 0x13, 0x48, 0x06, 0xbf, 0xf7, 0x1e, - 0x11, 0xbc, 0x33, 0xab, 0x75, 0xdd, 0x6c, 0xa0, 0x67, 0xfb, 0x73, 0xa0, 0x43, - 0xb6, 0x46, 0xa7, 0xcf, 0x39, 0xca, 0xb4, 0x92, 0x83, 0x86, 0x78, 0x6d, 0x2f, - 0x24, 0x14, 0x1e, 0xe1, 0x20, 0xfd, 0xc3, 0x4d, 0x67, 0x64, 0xea, 0xfc, 0x66, - 0x88, 0x0e, 0xe0, 0x20, 0x4f, 0x53, 0xcc, 0x11, 0x67, 0xed, 0x20, 0xb4, 0x3a, - 0x52, 0xde, 0xa3, 0xca, 0x7c, 0xff, 0x8e, 0xf3, 0x5c, 0xd8, 0xe6, 0xd7, 0xc1, - 0x11, 0xa6, 0x8e, 0xf4, 0x4b, 0xcd, 0x0c, 0x15, 0x13, 0xad, 0x47, 0xca, 0x61, - 0xc6, 0x59, 0xcc, 0x5d, 0x32, 0x5b, 0x44, 0x0f, 0x6b, 0x9f, 0x59, 0xaf, 0xf6, - 0x68, 0x79, 0xbb, 0x66, 0x88, 0xfd, 0xb4, 0x62, 0xaf, 0x43, 0x58, 0x2b, 0x98, - 0x3f, 0x92, 0xb5, 0x69, 0x8b, 0x87, 0xdb, 0x46, 0xe4, 0xb0, 0x2d, 0xd8, 0xe8, - 0x1e, 0xca, 0x55, 0x5a, 0x44, 0xf2, 0xf1, 0xae, 0xf1, 0x1d, 0x88, 0xa0, 0xbc, - 0xee, 0x76, 0xaf, 0x9a, 0xd3, 0xf9, 0xc4, 0x6a, 0x67, 0x06, 0x2e, 0x1a, 0x9c, - 0xa7, 0xea, 0x5c, 0x01, 0x43, 0x84, 0xaf, 0x07, 0x21, 0x9c, 0x7c, 0x0e, 0xe7, - 0xfc, 0x7b, 0xfc, 0x79, 0x33, 0xd1, 0x74, 0x65, 0x0f, 0x46, 0xb4, 0xcc, 0x00, - 0x01, 0x90, 0xc1, 0x9b, 0x44, 0xc5, 0x7a, 0xe8, 0x91, 0xaa, 0x86, 0x64, 0x6c, - 0x10, 0xa1, 0x77, 0xa8, 0x62, 0x6b, 0xe0, 0x64, 0x40, 0x99, 0x31, 0xc3, 0x7d, - 0x9e, 0x8b, 0xdc, 0x43, 0x3b, 0x7d, 0x79, 0xe0, 0x8a, 0x12, 0xf7, 0x38, 0xa8, - 0xf0, 0xdb, 0xdd, 0xfe, 0xf2, 0xf2, 0x65, 0x7e, 0xf3, 0xe4, 0x7d, 0x1b, 0x0f, - 0xd1, 0x1e, 0x6a, 0x13, 0x65, 0x4d, 0xb2, 0x85, 0x4f, 0xcb, 0xff, 0x49, 0xaa, - 0x0d, 0xad, 0xaf, 0xec, 0x32, 0x0b, 0x6e, 0xd2, 0xd4, 0xb2, 0x79, 0xae, 0xe9, - 0x06, 0x0c, 0x1b, 0x22, 0x1e, 0x2e, 0xb2, 0xf1, 0x3b, 0x06, 0x91, 0xc4, 0xd8, - 0x42, 0x40, 0x6d, 0x0e, 0xc4, 0x28, 0x2c, 0x95, 0x26, 0x17, 0x4a, 0x09, 0x87, - 0x8f, 0xe8, 0xfd, 0xde, 0x33, 0xa2, 0x96, 0x04, 0xe5, 0xe5, 0xe7, 0xb2, 0xa0, - 0x25, 0xd6, 0x65, 0x0b, 0x97, 0xdb, 0xb5, 0x2b, 0xef, 0xb5, 0x9b, 0x1d, 0x30, - 0xa5, 0x74, 0x33, 0xb0, 0xa3, 0x51, 0x47, 0x44, 0x44, 0x09, 0x9d, 0xaa, 0x37, - 0x10, 0x46, 0x61, 0x32, 0x60, 0xcf, 0x33, 0x54, 0xcf, 0xcd, 0xad, 0xa6, 0x63, - 0xec, 0xe8, 0x24, 0xff, 0xd7, 0xe4, 0x43, 0x93, 0x88, 0x6a, 0x86, 0x16, 0x5d, - 0xdd, 0xdf, 0x2b, 0x4c, 0x41, 0x77, 0x35, 0x54, 0xc8, 0x69, 0x95, 0x26, 0x94, - 0x08, 0xb1, 0x1e, 0x67, 0x37, 0xa4, 0xc4, 0x47, 0x58, 0x6f, 0x69, 0x17, 0x34, - 0x46, 0xd8, 0xe4, 0x8b, 0xf8, 0x4c, 0xbc, 0x00, 0x0a, 0x80, 0x78, 0x99, 0x97, - 0x3e, 0xb9, 0x3c, 0x5e, 0x81, 0x9a, 0xad, 0x66, 0x94, 0x13, 0xf8, 0x38, 0x79, - 0x33, 0xad, 0x15, 0x84, 0xaa, 0x35, 0xe4, 0x3f, 0x4e, 0xcd, 0x1e, 0x2d, 0x04, - 0x07, 0xc0, 0xb1, 0xb8, 0x99, 0x20, 0xff, 0xdf, 0xdb, 0x9b, 0xea, 0x51, 0xac, - 0x95, 0xb5, 0x57, 0xaf, 0x71, 0xb8, 0x9f, 0x90, 0x3f, 0x5d, 0x98, 0x48, 0xf1, - 0x4f, 0xcb, 0xeb, 0x18, 0x37, 0x57, 0x0f, 0x54, 0x4d, 0x63, 0x59, 0xeb, 0x23, - 0xfa, 0xf3, 0x8a, 0x08, 0x22, 0xda, 0x36, 0xce, 0x42, 0x6c, 0x4a, 0x2f, 0xbe, - 0xff, 0xeb, 0x0a, 0x8a, 0x2e, 0x29, 0x7a, 0x9d, 0x19, 0xba, 0x15, 0x02, 0x45, - 0x90, 0xe3, 0x32, 0x9d, 0x9f, 0xa9, 0x26, 0x1f, 0x99, 0x38, 0xa4, 0x03, 0x2d, - 0xd3, 0x46, 0x06, 0xc9, 0xcf, 0x9f, 0x3d, 0xd3, 0x3e, 0x57, 0x6f, 0x05, 0xcd, - 0x1d, 0xd6, 0x81, 0x1c, 0x62, 0x98, 0x75, 0x7d, 0x77, 0xd9, 0xe8, 0x10, 0xab, - 0xdb, 0x22, 0x6a, 0xfc, 0xaa, 0x43, 0x46, 0xa6, 0x56, 0x0f, 0x89, 0x32, 0xb3, - 0x18, 0x1f, 0xd3, 0x55, 0xd5, 0xd3, 0x91, 0x97, 0x61, 0x83, 0xf8, 0xd9, 0x93, - 0x88, 0x83, 0x96, 0x32, 0xd6, 0x35, 0x4f, 0x66, 0x6d, 0x09, 0xd3, 0xe5, 0x62, - 0x9e, 0xa1, 0x97, 0x37, 0x38, 0x86, 0x13, 0xd3, 0x8a, 0x34, 0xfd, 0x0f, 0x6e, - 0x50, 0xee, 0x5a, 0x0c, 0xc9, 0x67, 0x71, 0x77, 0xf5, 0x00, 0x28, 0xc1, 0x41, - 0x37, 0x81, 0x87, 0xbd, 0x28, 0x19, 0x40, 0x3f, 0xc5, 0x34, 0xf8, 0x00, 0x76, - 0xe9, 0x38, 0x0c, 0xb4, 0x96, 0x4d, 0x3b, 0x6b, 0x45, 0x81, 0x9d, 0x3b, 0x8e, - 0x9c, 0xaf, 0x54, 0xf0, 0x51, 0x85, 0x2d, 0x67, 0x1b, 0xf8, 0xc1, 0xff, 0xde, - 0x2d, 0x15, 0x10, 0x75, 0x64, 0x18, 0xcb, 0x48, 0x10, 0x93, 0x6a, 0xa5, 0x7e, - 0x69, 0x65, 0xd6, 0xfb, 0x65, 0x6a, 0x76, 0x0b, 0x7f, 0x19, 0xad, 0xf9, 0x6c, - 0x17, 0x34, 0x88, 0x55, 0x21, 0x93, 0xb1, 0x47, 0xee, 0x58, 0x85, 0x80, 0x33, - 0xda, 0xc7, 0xcd, 0x0e, 0xb2, 0x04, 0xc0, 0x64, 0x90, 0xbb, 0xde, 0xdf, 0x5f, - 0x75, 0x71, 0xac, 0xb2, 0xeb, 0xe7, 0x6a, 0xce, 0xf3, 0xf2, 0xa0, 0x1e, 0xe9, - 0x87, 0x48, 0x6d, 0xfe, 0x6c, 0x3f, 0x0a, 0x5e, 0x23, 0x4c, 0x12, 0x72, 0x58, - 0xf9, 0x7a, 0x28, 0xfb, 0x5d, 0x16, 0x4a, 0x81, 0x76, 0xbe, 0x94, 0x6b, 0x80, - 0x97, 0xd0, 0xe3, 0x17, 0x28, 0x7f, 0x33, 0xbf, 0x9c, 0x16, 0xf9, 0xa5, 0x45, - 0x40, 0x9c, 0xe2, 0x9b, 0x1f, 0x42, 0x73, 0x72, 0x5f, 0xc0, 0xdf, 0x02, 0xa0, - 0x4e, 0xba, 0xe1, 0x78, 0xb3, 0x41, 0x4f, 0xb0, 0xa8, 0x2d, 0x50, 0xde, 0xb0, - 0x9f, 0xcf, 0x4e, 0x6e, 0xe9, 0xd1, 0x80, 0xff, 0x4f, 0x56, 0xff, 0x3b, 0xc1, - 0xd3, 0x60, 0x1f, 0xc2, 0xdc, 0x90, 0xd8, 0x14, 0xc3, 0x25, 0x6f, 0x49, 0x67, - 0xd3, 0xa8, 0xd6, 0x4c, 0x83, 0xfe, 0xa3, 0x39, 0xc5, 0x1f, 0x5a, 0x8e, 0x58, - 0x01, 0xfb, 0xb9, 0x78, 0x35, 0x58, 0x1b, 0x60, 0x24, 0x65, 0xde, 0xe0, 0x4b, - 0x59, 0x22, 0xc2, 0x76, 0x1b, 0x54, 0x24, 0x5b, 0xec, 0x0c, 0x9e, 0xef, 0x2d, - 0xb9, 0x7d, 0x22, 0xb2, 0xb3, 0x55, 0x6c, 0xc9, 0x69, 0xfb, 0xb1, 0x3d, 0x06, - 0x50, 0x97, 0x65, 0xa5, 0x2b, 0x3f, 0xac, 0x54, 0xb9, 0x3f, 0x42, 0x1b, 0xf0, - 0x8e, 0x18, 0xd5, 0x2d, 0xdd, 0x52, 0xcc, 0x1c, 0x8c, 0xa8, 0xad, 0xfa, 0xcc, - 0xab, 0x7e, 0x5c, 0xc2, 0xf4, 0x57, 0x3f, 0xbb, 0xf8, 0x23, 0x9b, 0xb0, 0xb8, - 0xae, 0xdb, 0xf8, 0xda, 0xd1, 0x62, 0x82, 0xda, 0x5c, 0x91, 0x25, 0xdb, 0xa1, - 0xc0, 0x59, 0xd0, 0xdf, 0x8a, 0xbf, 0x62, 0x10, 0x78, 0xf0, 0x2d, 0x6c, 0x4b, - 0xc8, 0x6d, 0x40, 0x84, 0x5a, 0xc1, 0xd5, 0x97, 0x10, 0xc4, 0x5f, 0x07, 0xd5, - 0x85, 0xeb, 0x48, 0xb3, 0x2f, 0xc0, 0x16, 0x7b, 0xa2, 0x56, 0xe7, 0x3c, 0xa3, - 0xb9, 0x31, 0x1c, 0x62, 0xd1, 0x09, 0x49, 0x03, 0x57, 0x05, 0x19, 0xd4, 0x44, - 0x2f, 0x02, 0x00, 0xe6, 0xad, 0x11, 0xf2, 0x45, 0x2d, 0xc9, 0xae, 0x85, 0xae, - 0xc0, 0x1f, 0xc5, 0x6f, 0x8c, 0xbf, 0xda, 0x75, 0xa7, 0x72, 0x7b, 0x75, 0xeb, - 0xbd, 0x6b, 0xbf, 0xfb, 0x43, 0xb6, 0x3a, 0x3b, 0x1b, 0x87, 0x1e, 0x40, 0xfe, - 0xb0, 0xdb, 0x00, 0x29, 0x74, 0xa3, 0xc3, 0xb1, 0xa7, 0x88, 0x56, 0x72, 0x31, - 0xbf, 0x63, 0x99, 0xff, 0x89, 0x23, 0x69, 0x81, 0x14, 0x9d, 0x42, 0x38, 0x02, - 0xd2, 0x34, 0x1a, 0x3b, 0xed, 0xb9, 0xdd, 0xcb, 0xac, 0x1f, 0xe7, 0xb6, 0x43, - 0x5e, 0x14, 0x79, 0xc7, 0x2e, 0x70, 0x89, 0xd0, 0x29, 0xe7, 0xfb, 0xba, 0xf3, - 0xcf, 0x37, 0xe9, 0xb9, 0xa6, 0xb7, 0x76, 0x79, 0x1e, 0x4c, 0x5e, 0x6f, 0xda, - 0x57, 0xe8, 0xd5, 0xf1, 0x4c, 0x8c, 0x35, 0xa2, 0xd2, 0x70, 0x84, 0x6b, 0x9d, - 0xbe, 0x00, 0x5c, 0xda, 0x16, 0xaf, 0x44, 0x08, 0xf3, 0xab, 0x06, 0xa9, 0x16, - 0xee, 0xeb, 0x9c, 0x95, 0x94, 0xb7, 0x04, 0x24, 0xa4, 0xc1, 0xd1, 0x71, 0x29, - 0x5b, 0x67, 0x63, 0xb2, 0x2f, 0x47, 0xf8, 0x0b, 0x53, 0xcc, 0xbb, 0x90, 0x4b, - 0xd6, 0x8f, 0xd6, 0x5f, 0xbd, 0x3f, 0xbd, 0xea, 0x10, 0x35, 0xe9, 0x8c, 0x21, - 0xa7, 0xdb, 0xa5, 0xfe, 0x10, 0x89, 0xf7, 0xd1, 0xc0, 0x32, 0xf2, 0x4d, 0x36, - 0x83, 0x5a, 0xa8, 0x81, 0x52, 0x66, 0xe8, 0x97, 0xff, 0x82, 0x94, 0x03, 0xcf, - 0xac, 0x3a, 0x71, 0x59, 0x54, 0xb9, 0xb6, 0x89, 0x58, 0xa0, 0x11, 0x1a, 0x2c, - 0x92, 0x65, 0x63, 0x3b, 0xa2, 0x83, 0x1a, 0x2e, 0x86, 0xb9, 0x41, 0xe5, 0x69, - 0xd5, 0x8d, 0x99, 0xc1, 0x38, 0x35, 0x97, 0xfa, 0xd8, 0x11, 0x93, 0xc4, 0xc1, - 0x31, 0x51, 0xf4, 0x0a, 0xed, 0xb4, 0x87, 0xb5, 0xc0, 0x4a, 0xe3, 0xb1, 0xdd, - 0xfb, 0xaf, 0xa2, 0x6e, 0x72, 0x00, 0x99, 0xf2, 0x6d, 0x5a, 0x75, 0x35, 0xae, - 0xe5, 0x73, 0x06, 0xfd, 0x2c, 0x4f, 0x30, 0x67, 0x3c, 0xd9, 0xb6, 0x98, 0xfe, - 0xcf, 0x32, 0xfa, 0xf8, 0x8f, 0x62, 0xe2, 0x1c, 0x90, 0x66, 0x58, 0x59, 0xdd, - 0x26, 0x83, 0x3d, 0x21, 0xd9, 0xbc, 0x54, 0x52, 0xbd, 0x19, 0x51, 0x5d, 0x3f, - 0xa5, 0xc1, 0xe6, 0x8b, 0xc2, 0x09, 0xb9, 0xdc, 0x2a, 0x10, 0xae, 0x6b, 0x63, - 0x07, 0x26, 0xa6, 0x7b, 0x33, 0x60, 0x3c, 0x69, 0x1f, 0xaf, 0xc2, 0x81, 0xdd, - 0x94, 0xdc, 0x98, 0x88, 0xa6, 0x8c, 0x4f, 0x45, 0x15, 0x5a, 0xa7, 0x89, 0x7c, - 0x04, 0x5a, 0xaf, 0xd9, 0x33, 0x5b, 0xe2, 0xe0, 0xdd, 0xcf, 0x5f, 0x58, 0x6d, - 0x7f, 0x6b, 0x4f, 0xe1, 0x2d, 0xad, 0x9a, 0x17, 0xf5, 0xdb, 0x70, 0x31, + 0x95, 0x8c, 0x24, 0x06, 0x00, ], txid: [ - 0x55, 0x2c, 0x96, 0xbd, 0x33, 0x83, 0x4b, 0xa1, 0xa8, 0xa3, 0xec, 0xd8, 0x0a, - 0x2c, 0x9c, 0xb4, 0x11, 0x87, 0x55, 0x3a, 0x3d, 0xcf, 0xe7, 0x92, 0x83, 0x16, - 0xbb, 0x70, 0x70, 0x4b, 0x85, 0xd0, + 0x50, 0x4c, 0xfa, 0xb7, 0x62, 0x80, 0x3e, 0x29, 0xc8, 0x08, 0xb1, 0xfe, 0x10, + 0x7e, 0xe3, 0x09, 0xa1, 0x51, 0xf4, 0x17, 0x52, 0xfa, 0xde, 0x65, 0xaa, 0x93, + 0x45, 0xd2, 0xfd, 0x33, 0xca, 0xfe, ], auth_digest: [ - 0x12, 0x76, 0x7e, 0x5f, 0x67, 0x85, 0x67, 0x36, 0x0f, 0xb3, 0xa1, 0xcb, 0x9c, - 0xf8, 0x58, 0x61, 0x3f, 0xfe, 0x22, 0x63, 0xb6, 0x53, 0xc6, 0xa3, 0x70, 0xee, - 0x1f, 0x68, 0x20, 0xab, 0xdc, 0x57, + 0xaa, 0xc3, 0x83, 0xd5, 0x65, 0xdf, 0xc1, 0xa4, 0x2c, 0x02, 0xc3, 0x75, 0xf3, + 0xb1, 0xe1, 0x42, 0xfa, 0xe1, 0xa4, 0x0e, 0xc8, 0xb3, 0x2d, 0x6e, 0x90, 0x75, + 0xa3, 0x35, 0x9e, 0x91, 0x8b, 0xcd, ], - amounts: vec![1800841178198868], - script_pubkeys: vec![vec![0x65, 0x00, 0x51]], + amounts: vec![1779157228250399], + script_pubkeys: vec![vec![0x63, 0x51, 0x53, 0x51, 0x51, 0xac, 0x52]], transparent_input: Some(0), sighash_shielded: [ - 0x88, 0xda, 0x64, 0xb9, 0x5b, 0x56, 0xd8, 0x29, 0x6a, 0xb1, 0xf7, 0x21, 0xeb, - 0x5b, 0xe6, 0x6d, 0x0f, 0xd4, 0x78, 0xf2, 0xb9, 0x6b, 0x93, 0xd5, 0xdc, 0xee, - 0x8f, 0x7a, 0x10, 0x00, 0xb0, 0xff, + 0x42, 0x4c, 0xf4, 0x4c, 0x9d, 0xa3, 0x6b, 0xf1, 0x29, 0xcb, 0x16, 0x10, 0x6f, + 0x39, 0x51, 0x50, 0xb6, 0xa8, 0x93, 0x0a, 0x90, 0x5f, 0x59, 0x6c, 0x94, 0x95, + 0xad, 0xca, 0x67, 0xb6, 0xc3, 0x69, ], sighash_all: Some([ - 0x2d, 0x4e, 0xbf, 0x4d, 0x42, 0x42, 0x38, 0xad, 0x0b, 0xc2, 0x46, 0x99, 0x70, - 0x34, 0x7e, 0xaf, 0x76, 0x7f, 0xf9, 0x06, 0x95, 0x8e, 0x35, 0x10, 0x7f, 0xd2, - 0x2c, 0x1d, 0xc5, 0x36, 0xe4, 0x59, + 0x81, 0x14, 0xa5, 0x4d, 0xc3, 0x6b, 0xfc, 0x72, 0x8f, 0x95, 0x24, 0x83, 0x5a, + 0x6b, 0xac, 0xed, 0xe8, 0x8a, 0xb6, 0x10, 0xb7, 0x92, 0x70, 0xcd, 0xcd, 0xc4, + 0xc0, 0x6a, 0x39, 0x4b, 0xdf, 0x6d, ]), sighash_none: Some([ - 0x68, 0x3e, 0xca, 0xa5, 0x64, 0x00, 0x2c, 0xa5, 0xa8, 0x0b, 0xea, 0x04, 0x37, - 0x0c, 0x78, 0x85, 0x5b, 0x8d, 0x9c, 0x9c, 0x38, 0x23, 0x09, 0xc7, 0x0b, 0x29, - 0xbd, 0xd9, 0x8d, 0x75, 0xb0, 0x66, + 0x79, 0x49, 0x5c, 0xbd, 0xcd, 0xb2, 0xda, 0x4c, 0xb2, 0xa2, 0x23, 0xeb, 0xd1, + 0xd1, 0x0f, 0x00, 0x8f, 0xe3, 0xc5, 0x1c, 0xd1, 0x05, 0xf6, 0x96, 0xe3, 0x3d, + 0xf9, 0x80, 0x1a, 0x84, 0x52, 0x37, ]), sighash_single: None, sighash_all_anyone: Some([ - 0x9c, 0x9e, 0x75, 0xee, 0x15, 0xf4, 0xed, 0xa1, 0x5d, 0x77, 0x79, 0x39, 0x52, - 0x9f, 0xa3, 0xa4, 0xf6, 0x4b, 0x93, 0x5c, 0x7d, 0x21, 0x83, 0x5f, 0x79, 0x39, - 0x3e, 0x7a, 0xa2, 0x3e, 0x28, 0x79, + 0x8e, 0xf9, 0x7d, 0xc5, 0x7d, 0xce, 0xef, 0xf2, 0x81, 0x4d, 0xab, 0xe5, 0x8e, + 0xc1, 0xb4, 0x34, 0xad, 0xa1, 0x7b, 0xbc, 0x76, 0x84, 0xc6, 0xa4, 0x1d, 0x97, + 0xaf, 0xea, 0x1e, 0x4f, 0x5d, 0x02, ]), sighash_none_anyone: Some([ - 0xa7, 0xdf, 0xf0, 0x0a, 0x96, 0xfd, 0x2b, 0x41, 0xc5, 0x80, 0x8d, 0x35, 0xe4, - 0xa6, 0xa2, 0xaa, 0x7b, 0x40, 0xee, 0xeb, 0xb6, 0xdc, 0xf3, 0xb9, 0xf2, 0x81, - 0xeb, 0x6c, 0x17, 0xe4, 0x3a, 0xf4, + 0x67, 0x00, 0x29, 0x64, 0xcc, 0x6e, 0xfe, 0xae, 0xd5, 0x45, 0x2b, 0x92, 0x69, + 0xad, 0x9e, 0x28, 0xdf, 0xc2, 0x5a, 0xd2, 0x00, 0x91, 0x11, 0xaf, 0x02, 0xb9, + 0xc3, 0xf7, 0x63, 0x96, 0xeb, 0x58, ]), sighash_single_anyone: None, }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x1f, - 0xc9, 0x98, 0xc3, 0x1f, 0x4d, 0xd2, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x28, + 0xf8, 0x9d, 0xb8, 0x9f, 0x04, 0xea, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x1f, 0x4d, 0xd2, 0x08, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x01, 0x50, 0x58, 0xe5, 0x75, 0x4c, 0x21, 0x04, 0x00, 0x07, - 0x53, 0xac, 0x51, 0x53, 0x00, 0x51, 0x52, 0x00, 0x01, 0xe5, 0x84, 0x9f, 0x96, - 0xba, 0xe6, 0xf2, 0x05, 0x6f, 0x33, 0xab, 0x1e, 0x69, 0x89, 0xd7, 0xd2, 0x64, - 0xad, 0xc9, 0x78, 0x55, 0xa9, 0x90, 0x10, 0x3b, 0x4d, 0x1e, 0x63, 0x50, 0xd5, - 0xc3, 0x1a, 0x39, 0xc3, 0xca, 0xf6, 0x94, 0x59, 0xe4, 0x62, 0xf1, 0x41, 0xbe, - 0x8b, 0x39, 0x03, 0x7f, 0xfa, 0x25, 0x5c, 0xe2, 0x7e, 0x4a, 0xd7, 0xb5, 0x66, - 0xa2, 0x96, 0x20, 0xa9, 0xf0, 0x11, 0xab, 0x08, 0xfb, 0x2a, 0xd3, 0x05, 0x06, - 0x52, 0xb3, 0xf6, 0x5b, 0x8e, 0x34, 0x52, 0x6a, 0x2a, 0x15, 0xfc, 0x2d, 0xdc, - 0x5b, 0x51, 0x13, 0xe4, 0x88, 0x2c, 0x7c, 0xca, 0x0d, 0xd5, 0x57, 0x7b, 0xe0, - 0x67, 0xba, 0x7a, 0x17, 0x5d, 0xae, 0x4b, 0xbe, 0x3e, 0xf4, 0x86, 0x3d, 0x53, - 0x70, 0x89, 0x15, 0x09, 0x0f, 0x47, 0xa0, 0x68, 0xe2, 0x27, 0x43, 0x3f, 0x9e, - 0x49, 0xd3, 0xaa, 0x09, 0xe3, 0x56, 0xd8, 0xd6, 0x6d, 0x0c, 0x01, 0x21, 0xe9, - 0x1a, 0x3c, 0x4a, 0xa3, 0xf2, 0x7f, 0xa1, 0xb6, 0x33, 0x96, 0xe2, 0xb4, 0x1d, - 0xb9, 0x08, 0xfd, 0xab, 0x8b, 0x18, 0xcc, 0x73, 0x04, 0xe9, 0x4e, 0x97, 0x05, - 0x68, 0xf9, 0x42, 0x1c, 0x0d, 0xbb, 0xba, 0xf8, 0x45, 0x98, 0xd9, 0x72, 0xb0, - 0x53, 0x4f, 0x48, 0xa5, 0xe5, 0x26, 0x70, 0x43, 0x6a, 0xaa, 0x77, 0x6e, 0xd2, - 0x48, 0x2a, 0xd7, 0x03, 0x43, 0x02, 0x01, 0xe5, 0x34, 0x43, 0xc3, 0x6d, 0xcf, - 0xd3, 0x4a, 0x0c, 0xb6, 0x63, 0x78, 0x76, 0x10, 0x5e, 0x79, 0xbf, 0x3b, 0xd5, - 0x8e, 0xc1, 0x48, 0xcb, 0x64, 0x97, 0x0e, 0x32, 0x23, 0xa9, 0x1f, 0x71, 0xdf, - 0xcf, 0xd5, 0xa0, 0x4b, 0x66, 0x7f, 0xba, 0xf3, 0xd4, 0xb3, 0xb9, 0x08, 0xb9, - 0x82, 0x88, 0x20, 0xdf, 0xec, 0xdd, 0x75, 0x37, 0x50, 0xb5, 0xf9, 0xd2, 0x21, - 0x6e, 0x56, 0xc6, 0x15, 0x27, 0x2f, 0x85, 0x44, 0x64, 0xc0, 0xca, 0x4b, 0x1e, - 0x85, 0xae, 0xdd, 0x03, 0x82, 0x92, 0xc4, 0xe1, 0xa5, 0x77, 0x44, 0xeb, 0xba, - 0x01, 0x0b, 0x9e, 0xbf, 0xbb, 0x01, 0x1b, 0xd6, 0xf0, 0xb7, 0x88, 0x05, 0x02, - 0x5d, 0x27, 0xf3, 0xc1, 0x77, 0x46, 0xba, 0xe1, 0x16, 0xc1, 0x5d, 0x9f, 0x47, - 0x1f, 0x0f, 0x62, 0x88, 0xa1, 0x50, 0x64, 0x7b, 0x2a, 0xfe, 0x9d, 0xf7, 0xcc, - 0xcf, 0x01, 0xf5, 0xcd, 0xe5, 0xf0, 0x46, 0x80, 0xbb, 0xfe, 0xd8, 0x7f, 0x6c, - 0xf4, 0x29, 0xfb, 0x27, 0xad, 0x6b, 0xab, 0xe7, 0x91, 0x76, 0x66, 0x11, 0xcf, - 0x5b, 0xc2, 0x0e, 0x48, 0xbe, 0xf1, 0x19, 0x25, 0x9b, 0x9b, 0x8a, 0x0e, 0x39, - 0xc3, 0xdf, 0x28, 0xcb, 0x95, 0x82, 0xea, 0x33, 0x86, 0x01, 0xcd, 0xc4, 0x81, - 0xb3, 0x2f, 0xb8, 0x2a, 0xde, 0xeb, 0xb3, 0xda, 0xde, 0x25, 0xd1, 0xa3, 0xdf, - 0x20, 0xc3, 0x7e, 0x71, 0x25, 0x06, 0xb5, 0xd9, 0x96, 0xc4, 0x9a, 0x9f, 0x0f, - 0x30, 0xdd, 0xcb, 0x91, 0xfe, 0x90, 0x04, 0xe1, 0xe8, 0x32, 0x94, 0xa6, 0xc9, - 0x20, 0x3d, 0x94, 0xe8, 0xdc, 0x2c, 0xbb, 0x44, 0x9d, 0xe4, 0x15, 0x50, 0x32, - 0x60, 0x4e, 0x47, 0x99, 0x70, 0x16, 0xb3, 0x04, 0xfd, 0x43, 0x7d, 0x82, 0x35, - 0x04, 0x5e, 0x25, 0x5a, 0x19, 0xb7, 0x43, 0xa0, 0xa9, 0xf2, 0xe3, 0x36, 0xb4, - 0x4c, 0xae, 0x30, 0x7b, 0xb3, 0x98, 0x7b, 0xd3, 0xe4, 0xe7, 0x77, 0xfb, 0xb3, - 0x4c, 0x0a, 0xb8, 0xcc, 0x3d, 0x67, 0x46, 0x6c, 0x0a, 0x88, 0xdd, 0x4c, 0xca, - 0xd1, 0x8a, 0x07, 0xa8, 0xd1, 0x06, 0x8d, 0xf5, 0xb6, 0x29, 0xe5, 0x71, 0x8d, - 0x0f, 0x6d, 0xf5, 0xc9, 0x57, 0xcf, 0x71, 0xbb, 0x00, 0xa5, 0x17, 0x8f, 0x17, - 0x5c, 0xac, 0xa9, 0x44, 0xe6, 0x35, 0xc5, 0x15, 0x9f, 0x73, 0x8e, 0x24, 0x02, - 0xa2, 0xd2, 0x1a, 0xa0, 0x81, 0xe1, 0x0e, 0x45, 0x6a, 0xfb, 0x00, 0xb9, 0xf6, - 0x24, 0x16, 0xc8, 0xb9, 0xc0, 0xf7, 0x22, 0x8f, 0x51, 0x07, 0x29, 0xe0, 0xbe, - 0x3f, 0x30, 0x53, 0x13, 0xd7, 0x7f, 0x73, 0x79, 0xdc, 0x2a, 0xf2, 0x48, 0x69, - 0xc6, 0xc7, 0x4e, 0xe4, 0x47, 0x14, 0x98, 0x86, 0x1d, 0x19, 0x2f, 0x0f, 0xf0, - 0xf5, 0x08, 0x28, 0x5d, 0xab, 0x6b, 0x6a, 0x36, 0xcc, 0xf7, 0xd1, 0x22, 0x56, - 0xcc, 0x76, 0xb9, 0x55, 0x03, 0x72, 0x0a, 0xc6, 0x72, 0xd0, 0x82, 0x68, 0xd2, - 0xcf, 0x77, 0x73, 0xb6, 0xba, 0x2a, 0x5f, 0x66, 0x48, 0x47, 0xbf, 0x70, 0x7f, - 0x2f, 0xc1, 0x0c, 0x98, 0xf2, 0xf0, 0x06, 0xec, 0x22, 0xcc, 0xb5, 0xa8, 0xc8, - 0xb7, 0xc4, 0x0c, 0x7c, 0x2d, 0x49, 0xa6, 0x63, 0x9b, 0x9f, 0x2c, 0xe3, 0x3c, - 0x25, 0xc0, 0x4b, 0xc4, 0x61, 0xe7, 0x44, 0xdf, 0xa5, 0x36, 0xb0, 0x0d, 0x94, - 0xba, 0xdd, 0xf4, 0xf4, 0xd1, 0x40, 0x44, 0xc6, 0x95, 0xa3, 0x38, 0x81, 0x47, - 0x7d, 0xf1, 0x24, 0xf0, 0xfc, 0xf2, 0x06, 0xa9, 0xfb, 0x2e, 0x65, 0xe3, 0x04, - 0xcd, 0xbf, 0x0c, 0x4d, 0x23, 0x90, 0x17, 0x0c, 0x13, 0x0a, 0xb8, 0x49, 0xc2, - 0xf2, 0x2b, 0x5c, 0xdd, 0x39, 0x21, 0x64, 0x0c, 0x8c, 0xf1, 0x97, 0x6a, 0xe1, - 0x01, 0x0b, 0x0d, 0xfd, 0x9c, 0xb2, 0x54, 0x3e, 0x45, 0xf9, 0x97, 0x49, 0xcc, - 0x4d, 0x61, 0xf2, 0xe8, 0xaa, 0xbf, 0xe9, 0x8b, 0xd9, 0x05, 0xfa, 0x39, 0x95, - 0x1b, 0x33, 0xea, 0x76, 0x9c, 0x45, 0xab, 0x95, 0x31, 0xc5, 0x72, 0x09, 0x86, - 0x2a, 0xd1, 0x2f, 0xd7, 0x6b, 0xa4, 0x80, 0x7e, 0x65, 0x41, 0x7b, 0x6c, 0xd1, - 0x2f, 0xa8, 0xec, 0x91, 0x6f, 0x01, 0x3e, 0xbb, 0x87, 0x06, 0xa9, 0xa5, 0x56, - 0xc7, 0x62, 0xf8, 0x85, 0x00, 0x00, 0x6e, 0xff, 0xed, 0xa0, 0x6c, 0x4b, 0xe2, - 0x4b, 0x04, 0x84, 0x63, 0x92, 0xe9, 0xd1, 0xe6, 0x93, 0x0e, 0xae, 0x01, 0xfa, - 0x21, 0xfb, 0xd7, 0x00, 0x58, 0x3f, 0xb5, 0x98, 0xb9, 0x2c, 0x8f, 0x4e, 0xb8, - 0xa6, 0x1a, 0xa6, 0x23, 0x5d, 0xb6, 0x0f, 0x28, 0x41, 0xcf, 0x3a, 0x1c, 0x6a, - 0xb5, 0x4c, 0x67, 0x06, 0x68, 0x44, 0x71, 0x1d, 0x09, 0x1e, 0xb9, 0x31, 0xa1, - 0xbd, 0x62, 0x81, 0xae, 0xdf, 0x2a, 0x0e, 0x8f, 0xab, 0x18, 0x81, 0x72, 0x02, - 0xa9, 0xbe, 0x06, 0x40, 0x2e, 0xd9, 0xcc, 0x72, 0x0c, 0x16, 0xbf, 0xe8, 0x81, - 0xe4, 0xdf, 0x42, 0x55, 0xe8, 0x7a, 0xfb, 0x7f, 0xc6, 0x2f, 0x38, 0x11, 0x6b, - 0xbe, 0x03, 0xcd, 0x8a, 0x3c, 0xb1, 0x1a, 0x27, 0xd5, 0x68, 0x41, 0x47, 0x82, - 0xf4, 0x7b, 0x1a, 0x44, 0xc9, 0x7c, 0x68, 0x04, 0x67, 0x69, 0x4b, 0xc9, 0x70, - 0x9d, 0x32, 0x91, 0x6c, 0x97, 0xe8, 0x00, 0x6c, 0xbb, 0x07, 0xba, 0x0e, 0x41, - 0x80, 0xa3, 0x73, 0x80, 0x38, 0xc3, 0x74, 0xc4, 0xcc, 0xe8, 0xf3, 0x29, 0x59, - 0xaf, 0xb2, 0x5f, 0x30, 0x3f, 0x58, 0x15, 0xc4, 0x53, 0x31, 0x24, 0xac, 0xf9, - 0xd1, 0x89, 0x40, 0xe7, 0x75, 0x22, 0xac, 0x5d, 0xc4, 0xb9, 0x57, 0x0a, 0xae, - 0x8f, 0x47, 0xb7, 0xf5, 0x7f, 0xd8, 0x76, 0x7b, 0xea, 0x1a, 0x24, 0xae, 0x7b, - 0xed, 0x65, 0xb4, 0x09, 0xe1, 0xdd, 0x26, 0xb8, 0xdd, 0xdd, 0x68, 0x85, 0x8d, - 0x6f, 0x51, 0x61, 0xf0, 0x73, 0xd9, 0x06, 0x36, 0x86, 0x0a, 0x9a, 0xae, 0xe1, - 0x86, 0x29, 0xb0, 0x63, 0x30, 0xa8, 0xee, 0x30, 0x59, 0x1d, 0xeb, 0xfc, 0xef, - 0x56, 0xa0, 0x26, 0xbb, 0x28, 0xc3, 0xb0, 0x6e, 0xc2, 0xcf, 0xaf, 0x5b, 0x79, - 0xab, 0x72, 0x69, 0x4d, 0x1d, 0x01, 0x2a, 0x75, 0x94, 0xdd, 0x80, 0xae, 0x7d, - 0xfa, 0x0c, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x9f, 0x04, 0xea, 0x0e, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x02, 0x93, 0xa6, 0xb6, 0xbf, 0x94, 0x65, 0x06, 0x00, 0x06, + 0x00, 0x51, 0x51, 0x6a, 0x6a, 0x00, 0x92, 0xfe, 0xe4, 0x2b, 0x7a, 0x5b, 0x00, + 0x00, 0x06, 0x65, 0x00, 0x52, 0xac, 0x6a, 0x53, 0x00, 0x00, 0x02, 0x5c, 0xac, + 0x97, 0x4d, 0xec, 0xe1, 0x1e, 0xd8, 0xf7, 0xba, 0x5f, 0x80, 0x1d, 0xf5, 0xbf, + 0xfd, 0x0a, 0xc7, 0x94, 0xa7, 0x52, 0x57, 0x6e, 0x80, 0xa2, 0x5a, 0x4b, 0x60, + 0x8c, 0x5d, 0x2a, 0xb6, 0x2a, 0x66, 0x1f, 0x19, 0x7e, 0x29, 0x18, 0x76, 0x5e, + 0xa7, 0xd7, 0xf7, 0x8f, 0xd4, 0x84, 0x0e, 0xca, 0x28, 0x5b, 0x63, 0x04, 0xb3, + 0x7d, 0xa2, 0xb5, 0x29, 0x4f, 0x5c, 0xb3, 0x54, 0xa8, 0x14, 0x91, 0xc1, 0xfc, + 0x60, 0x1a, 0xa2, 0xee, 0xe2, 0xc3, 0xa9, 0xa0, 0x9e, 0x2d, 0x0b, 0xa9, 0x70, + 0x37, 0x73, 0xe4, 0xc8, 0x9e, 0x45, 0x55, 0xca, 0x21, 0xf6, 0x30, 0xf7, 0xb1, + 0xe5, 0xbc, 0x2a, 0xc2, 0xaf, 0x33, 0xae, 0x5d, 0xa4, 0xfd, 0xe7, 0xd2, 0xe1, + 0xc4, 0x79, 0x4c, 0x84, 0xf3, 0x47, 0xd7, 0x05, 0x25, 0xcd, 0xdb, 0x41, 0x87, + 0x2c, 0xfc, 0xc2, 0x14, 0xb1, 0x32, 0x32, 0xed, 0x07, 0x0a, 0x04, 0xc7, 0x53, + 0x3c, 0x50, 0x3b, 0x23, 0x9a, 0x4e, 0xe9, 0x4e, 0xdc, 0xf2, 0xda, 0xb0, 0xb3, + 0x3f, 0x35, 0x6a, 0x50, 0xeb, 0xc6, 0xaa, 0x11, 0x8a, 0x5c, 0xd5, 0x89, 0x29, + 0xfc, 0x36, 0xa9, 0x61, 0x13, 0x33, 0x38, 0xd7, 0x86, 0xc4, 0xa3, 0xe1, 0x03, + 0xf6, 0x01, 0x10, 0xa1, 0x6b, 0x13, 0x37, 0x12, 0x97, 0x04, 0xbf, 0x47, 0x54, + 0xff, 0x6b, 0xa9, 0xfb, 0xe6, 0x59, 0x51, 0xe6, 0x10, 0x62, 0x0f, 0x71, 0xcd, + 0xa8, 0xfc, 0x87, 0x76, 0x25, 0xf2, 0xc5, 0xbb, 0x04, 0xcb, 0xe1, 0x22, 0x8b, + 0x1e, 0x88, 0x6f, 0x40, 0x50, 0xaf, 0xd8, 0xfe, 0x94, 0xe9, 0x7d, 0x2e, 0x9e, + 0x85, 0xc6, 0xbb, 0x74, 0x8c, 0x00, 0x42, 0xd3, 0x24, 0x9a, 0xbb, 0x13, 0x42, + 0xbb, 0x0e, 0xeb, 0xf6, 0x20, 0x58, 0xbf, 0x3d, 0xe0, 0x80, 0xd9, 0x46, 0x11, + 0xa3, 0x75, 0x09, 0x15, 0xb5, 0xdc, 0x6c, 0x0b, 0x38, 0x99, 0xd4, 0x12, 0x22, + 0xba, 0xce, 0x76, 0x0e, 0xe9, 0xc8, 0x81, 0x8d, 0xed, 0x59, 0x9e, 0x34, 0xc5, + 0x6d, 0x73, 0x72, 0xaf, 0x1e, 0xb8, 0x68, 0x52, 0xf2, 0xa7, 0x32, 0x10, 0x4b, + 0xdb, 0x75, 0x07, 0x39, 0xde, 0x6c, 0x2c, 0x6e, 0x0f, 0x9e, 0xb7, 0xcb, 0x17, + 0xf1, 0x94, 0x2b, 0xfc, 0x9f, 0x4f, 0xd6, 0xeb, 0xb6, 0xb4, 0xcd, 0xd4, 0xda, + 0x2b, 0xca, 0x26, 0xfa, 0xc4, 0x57, 0x8e, 0x9f, 0x54, 0x34, 0x05, 0xac, 0xc7, + 0xd8, 0x6f, 0xf5, 0x91, 0x58, 0xbd, 0x0c, 0xba, 0x3a, 0xef, 0x6f, 0x4a, 0x84, + 0x72, 0xd1, 0x44, 0xd9, 0x9f, 0x8b, 0x8d, 0x1d, 0xed, 0xaa, 0x90, 0x77, 0xd4, + 0xf0, 0x1d, 0x4b, 0xb2, 0x7b, 0xbe, 0x31, 0xd8, 0x8f, 0xbe, 0xfa, 0xc3, 0xdc, + 0xd4, 0x79, 0x75, 0x63, 0xa2, 0x6b, 0x1d, 0x61, 0xfc, 0xd9, 0xa4, 0x64, 0xab, + 0x21, 0xed, 0x55, 0x0f, 0xe6, 0xfa, 0x09, 0x69, 0x5b, 0xa0, 0xb2, 0xf1, 0x0e, + 0xea, 0x64, 0x68, 0xcc, 0x6e, 0x20, 0xa6, 0x6f, 0x82, 0x6e, 0x3d, 0x14, 0xc5, + 0x00, 0x6f, 0x05, 0x63, 0x88, 0x7f, 0x5e, 0x12, 0x89, 0xbe, 0x1b, 0x20, 0x04, + 0xca, 0xca, 0x8d, 0x3f, 0x34, 0xd6, 0xe8, 0x4b, 0xf5, 0x9c, 0x1e, 0x04, 0x61, + 0x9a, 0x7c, 0x23, 0xa9, 0x96, 0x94, 0x1d, 0x88, 0x9e, 0x46, 0x22, 0xa9, 0xb9, + 0xb1, 0xd5, 0x9d, 0x5e, 0x31, 0x90, 0x94, 0x31, 0x8c, 0xd4, 0x05, 0xba, 0x27, + 0xb7, 0xe2, 0xc0, 0x84, 0x76, 0x2d, 0x31, 0x45, 0x3e, 0xc4, 0x54, 0x9a, 0x4d, + 0x97, 0x72, 0x9d, 0x03, 0x34, 0x60, 0xfc, 0xf8, 0x9d, 0x64, 0x94, 0xf2, 0xff, + 0xd7, 0x89, 0xe9, 0x80, 0x82, 0xea, 0x5c, 0xe9, 0x53, 0x4b, 0x3a, 0xcd, 0x60, + 0xfe, 0x49, 0xe3, 0x7e, 0x4f, 0x66, 0x69, 0x31, 0x67, 0x73, 0x19, 0xed, 0x89, + 0xf8, 0x55, 0x88, 0x74, 0x1b, 0x31, 0x28, 0x90, 0x1a, 0x93, 0xbd, 0x78, 0xe4, + 0xbe, 0x02, 0x25, 0xa9, 0xe2, 0x69, 0x2c, 0x77, 0xc9, 0x69, 0xed, 0x01, 0x76, + 0xbd, 0xf9, 0x55, 0x59, 0x48, 0xcb, 0xd5, 0xa3, 0x32, 0xd0, 0x45, 0xde, 0x6b, + 0xa6, 0xbf, 0x44, 0x90, 0xad, 0xfe, 0x74, 0x44, 0xcd, 0x46, 0x7a, 0x09, 0x07, + 0x54, 0x17, 0xfc, 0xc0, 0x06, 0x2e, 0x49, 0xf0, 0x08, 0xc5, 0x1a, 0xd4, 0x22, + 0x74, 0x39, 0xc1, 0xb4, 0x47, 0x6c, 0xcd, 0x8e, 0x97, 0x86, 0x2d, 0xab, 0x7b, + 0xe1, 0xe8, 0xd3, 0x99, 0xc0, 0x5e, 0xf2, 0x7c, 0x6e, 0x22, 0xee, 0x27, 0x3e, + 0x15, 0x78, 0x6e, 0x39, 0x4c, 0x8f, 0x1b, 0xe3, 0x16, 0x82, 0xa3, 0x01, 0x47, + 0x96, 0x3a, 0xc8, 0xda, 0x8d, 0x41, 0xd8, 0x04, 0x25, 0x84, 0x26, 0xa3, 0xf7, + 0x02, 0x89, 0xb8, 0xad, 0x19, 0xd8, 0xde, 0x13, 0xbe, 0x4e, 0xeb, 0xe3, 0xbd, + 0x4c, 0x8a, 0x6f, 0x55, 0xd6, 0xe0, 0xc3, 0x73, 0xd4, 0x56, 0x85, 0x18, 0x79, + 0xf5, 0xfb, 0xc2, 0x82, 0xdb, 0x9e, 0x13, 0x48, 0x06, 0xbf, 0xf7, 0x1e, 0x11, + 0xbc, 0x33, 0xab, 0x75, 0xdd, 0x6c, 0xa0, 0x67, 0xfb, 0x73, 0xa0, 0x43, 0xb6, + 0x46, 0xa7, 0xcf, 0x39, 0xca, 0xb4, 0x92, 0x83, 0x86, 0x78, 0x6d, 0x2f, 0x24, + 0x14, 0x1e, 0xe1, 0x20, 0xfd, 0xc3, 0x4d, 0x67, 0x64, 0xea, 0xfc, 0x66, 0x88, + 0x0e, 0xe0, 0x20, 0x4f, 0x53, 0xcc, 0x11, 0x67, 0xed, 0x20, 0xb4, 0x3a, 0x52, + 0xde, 0xa3, 0xca, 0x7c, 0xff, 0x8e, 0xf3, 0x5c, 0xd8, 0xe6, 0xd7, 0xc1, 0x11, + 0xa6, 0x8e, 0xf4, 0x4b, 0xcd, 0x0c, 0x15, 0x13, 0xad, 0x47, 0xca, 0x61, 0xc6, + 0x59, 0xcc, 0x5d, 0x32, 0x5b, 0x44, 0x0f, 0x6b, 0x9f, 0x59, 0xaf, 0xf6, 0x68, + 0x79, 0xbb, 0x66, 0x88, 0xfd, 0x28, 0x59, 0x36, 0x2b, 0x18, 0x2f, 0x20, 0x7b, + 0x31, 0x75, 0x96, 0x1f, 0x64, 0x11, 0xa4, 0x93, 0xbf, 0xfd, 0x04, 0x8e, 0x7d, + 0x0d, 0x87, 0xd8, 0x2f, 0xe6, 0xf9, 0x90, 0xa2, 0xb0, 0xa2, 0x5f, 0x5a, 0xa0, + 0x11, 0x1a, 0x6e, 0x68, 0xf3, 0x7b, 0xf6, 0xf3, 0xac, 0x2d, 0x26, 0xb8, 0x46, + 0x86, 0xe5, 0x69, 0xd5, 0x8d, 0x99, 0xc1, 0x38, 0x35, 0x97, 0xfa, 0xd8, 0xca, + 0xa7, 0xb7, 0x6a, 0x32, 0xf7, 0xbe, 0xdd, 0xb2, 0x76, 0x8c, 0xdd, 0xdf, 0xa1, + 0x66, 0x6d, 0x5a, 0xa6, 0x29, 0x3b, 0x1a, 0x4c, 0x14, 0x5a, 0xa2, 0xac, 0xa3, + 0x6a, 0x81, 0x76, 0x2c, 0x09, 0xd7, 0x46, 0xa7, 0xd3, 0xf7, 0xc3, 0x7d, 0x9e, + 0x8b, 0xdc, 0x43, 0x3b, 0x7d, 0x79, 0xe0, 0x8a, 0x12, 0xf7, 0x38, 0xa8, 0xf0, + 0xdb, 0xdd, 0xfe, 0xf2, 0xf2, 0x65, 0x7e, 0xf3, 0xe4, 0x7d, 0x1b, 0x05, 0xe7, + 0x99, 0xe9, 0x7b, 0xdd, 0x91, 0xb7, 0xd9, 0x25, 0x2e, 0x95, 0x83, 0x42, 0xce, + 0x68, 0xbe, 0x31, 0x8c, 0x92, 0x61, 0x0b, 0x20, 0x18, 0x85, 0xa9, 0xb2, 0x71, + 0x49, 0x90, 0x62, 0x26, 0xbb, 0x84, 0x62, 0xc0, 0x4d, 0xfe, 0x3c, 0x0d, 0xf0, + 0x54, 0x86, 0xf2, 0xcf, 0x5d, 0x58, 0x2e, 0x26, 0x17, 0x4a, 0x09, 0x87, 0x8f, + 0xe8, 0xfd, 0xde, 0x33, 0xa2, 0x96, 0x04, 0xe5, 0xe5, 0x27, 0x83, 0xbf, 0xc5, + 0x1e, 0x66, 0x1a, 0xe1, 0x14, 0x26, 0xd5, 0xd9, 0x46, 0xba, 0x15, 0xd5, 0xc5, + 0x2b, 0x09, 0x5a, 0x58, 0x46, 0xa7, 0x59, 0x80, 0x75, 0x5e, 0x80, 0x5f, 0xc5, + 0x5b, 0x2d, 0x25, 0x60, 0xcf, 0x33, 0x54, 0xcf, 0xcd, 0xad, 0xa6, 0x63, 0xec, + 0xe8, 0x24, 0xff, 0xd7, 0xe4, 0x43, 0x93, 0x88, 0x6a, 0x86, 0x16, 0x5d, 0xdd, + 0xdf, 0x2b, 0x4c, 0x41, 0x77, 0x35, 0x54, 0xc8, 0x69, 0x95, 0x26, 0x94, 0x08, + 0xb1, 0x1e, 0x67, 0x37, 0xa4, 0xc4, 0x47, 0x58, 0x6f, 0x69, 0x17, 0x34, 0x46, + 0xd8, 0xe4, 0x8b, 0xf8, 0x4c, 0xbc, 0x00, 0x0a, 0x80, 0x78, 0x99, 0x97, 0x3e, + 0xb9, 0x3c, 0x5e, 0x81, 0x9a, 0xad, 0x66, 0x94, 0x13, 0xf8, 0x38, 0x79, 0x33, + 0xad, 0x15, 0x84, 0xaa, 0x35, 0xe4, 0x3f, 0x4e, 0xcd, 0x1e, 0x2d, 0x04, 0x07, + 0xc0, 0xb1, 0xb8, 0x99, 0x20, 0xff, 0xdf, 0xdb, 0x9b, 0xea, 0x51, 0xac, 0x95, + 0xb5, 0x57, 0xaf, 0x71, 0xb8, 0x9f, 0x90, 0x3f, 0x5d, 0x98, 0x48, 0xf1, 0x4f, + 0xcb, 0xeb, 0x18, 0x37, 0x57, 0x0f, 0x54, 0x4d, 0x63, 0x59, 0xeb, 0x23, 0xfa, + 0xf3, 0x8a, 0x08, 0x22, 0xda, 0x36, 0xce, 0x42, 0x6c, 0x4a, 0x2f, 0xbe, 0xff, + 0xeb, 0x0a, 0x8a, 0x2e, 0x29, 0x7a, 0x9d, 0x19, 0xba, 0x15, 0x02, 0x45, 0x90, + 0xe3, 0x32, 0x9d, 0x9f, 0xa9, 0x26, 0x1f, 0x99, 0x38, 0xa4, 0x03, 0x2d, 0xd3, + 0x46, 0x06, 0xc9, 0xcf, 0x9f, 0x3d, 0xd3, 0x3e, 0x57, 0x6f, 0x05, 0xcd, 0x1d, + 0xd6, 0x81, 0x1c, 0x62, 0x98, 0x75, 0x7d, 0x77, 0xd9, 0xe8, 0x10, 0xab, 0xdb, + 0x22, 0x6a, 0xfc, 0xaa, 0x43, 0x46, 0xa6, 0x56, 0x0f, 0x89, 0x32, 0xb3, 0x18, + 0x1f, 0xd3, 0x55, 0xd5, 0xd3, 0x91, 0x97, 0x61, 0x83, 0xf8, 0xd9, 0x93, 0x88, + 0x83, 0x96, 0x32, 0xd6, 0x35, 0x4f, 0x66, 0x6d, 0x09, 0xd3, 0xe5, 0x62, 0x9e, + 0xa1, 0x97, 0x37, 0x38, 0x86, 0x13, 0xd3, 0x8a, 0x34, 0xfd, 0x0f, 0x6e, 0x50, + 0xee, 0x5a, 0x0c, 0xc9, 0x67, 0x71, 0x77, 0xf5, 0x00, 0x28, 0xc1, 0x41, 0x37, + 0x81, 0x87, 0xbd, 0x28, 0x19, 0x40, 0x3f, 0xc5, 0x34, 0xf8, 0x00, 0x76, 0xe9, + 0x38, 0x0c, 0xb4, 0x96, 0x4d, 0x3b, 0x6b, 0x45, 0x81, 0x9d, 0x3b, 0x8e, 0x9c, + 0xaf, 0x54, 0xf0, 0x51, 0x85, 0x2d, 0x67, 0x1b, 0xf8, 0xc1, 0xff, 0xde, 0x2d, + 0x15, 0x10, 0x75, 0x64, 0x18, 0xcb, 0x48, 0x10, 0x93, 0x6a, 0xa5, 0x7e, 0x69, + 0x65, 0xd6, 0xfb, 0x65, 0x6a, 0x76, 0x0b, 0x7f, 0x19, 0xad, 0xf9, 0x6c, 0x17, + 0x34, 0x88, 0x55, 0x21, 0x93, 0xb1, 0x47, 0xee, 0x58, 0x85, 0x80, 0x33, 0xda, + 0xc7, 0xcd, 0x0e, 0xb2, 0x04, 0xc0, 0x64, 0x90, 0xbb, 0xde, 0xdf, 0x5f, 0x75, + 0x71, 0xac, 0xb2, 0xeb, 0xe7, 0x6a, 0xce, 0xf3, 0xf2, 0xa0, 0x1e, 0xe9, 0x87, + 0x48, 0x6d, 0xfe, 0x6c, 0x3f, 0x0a, 0x5e, 0x23, 0x4c, 0x12, 0x72, 0x58, 0xf9, + 0x7a, 0x28, 0xfb, 0x5d, 0x16, 0x4a, 0x81, 0x76, 0xbe, 0x94, 0x6b, 0x80, 0x97, + 0xd0, 0xe3, 0x17, 0x28, 0x7f, 0x33, 0xbf, 0x9c, 0x16, 0xf9, 0xa5, 0x45, 0x40, + 0x9c, 0xe2, 0x9b, 0x1f, 0x42, 0x73, 0x72, 0x5f, 0xc0, 0xdf, 0x02, 0xa0, 0x4e, + 0xba, 0xe1, 0x78, 0xb3, 0x41, 0x4f, 0xb0, 0xa8, 0x2d, 0x50, 0xde, 0xb0, 0x9f, + 0xcf, 0x4e, 0x6e, 0xe9, 0xd1, 0x80, 0xff, 0x4f, 0x56, 0xff, 0x3b, 0xc1, 0xd3, + 0x60, 0x1f, 0xc2, 0xdc, 0x90, 0xd8, 0x14, 0xc3, 0x25, 0x6f, 0x49, 0x67, 0xd3, + 0xa8, 0xd6, 0x4c, 0x83, 0xfe, 0xa3, 0x39, 0xc5, 0x1f, 0x5a, 0x8e, 0x58, 0x01, + 0xfb, 0xb9, 0x78, 0x35, 0x58, 0x1b, 0x60, 0x24, 0x65, 0xde, 0xe0, 0x4b, 0x59, + 0x22, 0xc2, 0x76, 0x1b, 0x54, 0x24, 0x5b, 0xec, 0x0c, 0x9e, 0xef, 0x2d, 0xb9, + 0x7d, 0x22, 0xb2, 0xb3, 0x55, 0x6c, 0xc9, 0x69, 0xfb, 0xb1, 0x3d, 0x06, 0x50, + 0x97, 0x65, 0xa5, 0x2b, 0x3f, 0xac, 0x54, 0xb9, 0x3f, 0x42, 0x1b, 0xf0, 0x8e, + 0x18, 0xd5, 0x2d, 0xdd, 0x52, 0xcc, 0x1c, 0x8c, 0xa8, 0xad, 0xfa, 0xcc, 0xab, + 0x7e, 0x5c, 0xc2, 0xf4, 0x57, 0x3f, 0xbb, 0xf8, 0x23, 0x9b, 0xb0, 0xb8, 0xae, + 0xdb, 0xf8, 0xda, 0xd1, 0x62, 0x82, 0xda, 0x5c, 0x91, 0x25, 0xdb, 0xa1, 0xc0, + 0x59, 0xd0, 0xdf, 0x8a, 0xbf, 0x62, 0x10, 0x78, 0xf0, 0x2d, 0x6c, 0x4b, 0xc8, + 0x6d, 0x40, 0x84, 0x5a, 0xc1, 0xd5, 0x97, 0x10, 0xc4, 0x5f, 0x07, 0xd5, 0x85, + 0xeb, 0x48, 0xb3, 0x2f, 0xc0, 0x16, 0x7b, 0xa2, 0x56, 0xe7, 0x3c, 0xa3, 0xb9, + 0x31, 0x1c, 0x62, 0xd1, 0x09, 0x49, 0x79, 0x57, 0xd8, 0xdb, 0xe1, 0x0a, 0xa3, + 0xe8, 0x66, 0xb4, 0x0c, 0x0b, 0xaa, 0x2b, 0xc4, 0x92, 0xc1, 0x9a, 0xd1, 0xe6, + 0x37, 0x2d, 0x96, 0x22, 0xbf, 0x16, 0x3f, 0xbf, 0xfe, 0xae, 0xee, 0x79, 0x6a, + 0x3c, 0xd9, 0xb6, 0xfb, 0xbf, 0xa4, 0xd7, 0x92, 0xf3, 0x4d, 0x7f, 0xd6, 0xe7, + 0x63, 0xcd, 0x58, 0x59, 0xdd, 0x26, 0x83, 0x3d, 0x21, 0xd9, 0xbc, 0x54, 0x52, + 0x02, 0x8c, 0xaa, 0xeb, 0xf8, 0xd1, 0xcc, 0x06, 0x00, 0x3f, 0x38, 0x02, 0xd2, + 0x6d, 0x87, 0xb3, 0x21, 0x67, 0xf2, 0xe4, 0x90, 0x2b, 0x1c, 0xe3, 0xdc, 0x5d, + 0x14, 0x79, 0xc7, 0x2e, 0x70, 0x89, 0xd0, 0x29, 0xe7, 0xfb, 0xba, 0xf3, 0xcf, + 0x37, 0x29, 0xd9, 0xa6, 0xb7, 0x76, 0x79, 0x1e, 0x4c, 0x5e, 0x6f, 0xda, 0x57, + 0xe8, 0xd5, 0xf1, 0x4c, 0x8c, 0x35, 0xa2, 0xd2, 0x70, 0x84, 0x6b, 0x9d, 0xbe, + 0x00, 0x5c, 0xda, 0x16, 0xaf, 0x44, 0x08, 0xf3, 0xab, 0x06, 0xa9, 0x16, 0xee, + 0xeb, 0x9c, 0x95, 0x94, 0xb7, 0x04, 0x24, 0xa4, 0xc1, 0xd1, 0x71, 0x29, 0x5b, + 0x67, 0x63, 0xb2, 0x2f, 0x47, 0xf8, 0x0b, 0x53, 0xcc, 0xbb, 0x90, 0x4b, 0xd6, + 0x8f, 0xd6, 0x5f, 0xbd, 0x3f, 0xbd, 0xea, 0x10, 0x35, 0xe9, 0x8c, 0x21, 0xa7, + 0xdb, 0xc9, 0x1a, 0x9b, 0x5b, 0xc7, 0x69, 0x0f, 0x05, 0xec, 0x31, 0x7c, 0x97, + 0xf8, 0x76, 0x4e, 0xb4, 0x8e, 0x91, 0x1d, 0x42, 0x8e, 0xc8, 0xd8, 0x61, 0xb7, + 0x08, 0xe8, 0x29, 0x8a, 0xcb, 0x62, 0x15, 0x51, 0x45, 0x15, 0x5a, 0xe9, 0x5f, + 0x0a, 0x1d, 0x15, 0x01, 0x03, 0x47, 0x53, 0x14, 0x6e, 0x22, 0xd0, 0x5f, 0x58, + 0x6d, 0x7f, 0x6b, 0x4f, 0xe1, 0x2d, 0xad, 0x9a, 0x17, 0xf5, 0xdb, 0x70, 0xb1, + 0xdb, 0x96, 0xb8, 0xd9, 0xa8, 0x3e, 0xda, 0xdc, 0x96, 0x6c, 0x8a, 0x54, 0x66, + 0xb6, 0x1f, 0xc9, 0x98, 0xc3, 0x1f, 0x10, 0x70, 0xd9, 0xa5, 0xc9, 0xa6, 0xd2, + 0x68, 0xd3, 0x04, 0xfe, 0x6b, 0x8f, 0xd3, 0xb4, 0x01, 0x03, 0x48, 0x61, 0x1a, + 0xbd, 0xcb, 0xd4, 0x9f, 0xe4, 0xf8, 0x5b, 0x62, 0x3c, 0x78, 0x28, 0xc7, 0x13, + 0x82, 0xe1, 0x03, 0x4e, 0xa6, 0x7b, 0xc8, 0xae, 0x97, 0x40, 0x4b, 0x0c, 0x50, + 0xb2, 0xa0, 0x4f, 0x55, 0x9e, 0x49, 0x95, 0x0a, 0xfc, 0xb0, 0xef, 0x46, 0x27, + 0x76, 0xd2, 0x4b, 0x0c, 0xc1, 0xb8, 0x2c, 0x9d, 0xcc, 0xf9, 0x89, 0xfa, 0xd0, + 0x5a, 0xa7, 0xa8, 0x91, 0xb9, 0x89, 0x60, 0x4d, 0xe8, 0xa3, 0x30, 0xad, 0xc3, + 0x01, 0x89, 0x62, 0x85, 0xac, 0xd8, 0x9f, 0x37, 0x95, 0xcc, 0xfd, 0x19, 0xd2, + 0x16, 0x67, 0xa8, 0x64, 0x9c, 0xf2, 0x7e, 0x86, 0x49, 0x0e, 0x67, 0x7b, 0x51, + 0x5d, 0x01, 0x43, 0x84, 0xaf, 0x07, 0x21, 0x9c, 0x7c, 0x0e, 0x27, 0x14, 0xee, + 0xb0, 0xfb, 0x2a, 0xd0, 0xeb, 0x20, 0xe7, 0x2e, 0x04, 0x7e, 0x45, 0xae, 0x88, + 0xd0, 0xfd, 0x13, 0x03, 0xee, 0x7e, 0xd8, 0x4a, 0x4e, 0xa2, 0xcc, 0x6c, 0x7e, + 0xf5, 0xae, 0x22, 0x87, 0xa5, 0x72, 0x7b, 0x75, 0xa9, 0xe7, 0xdd, 0xa6, 0x40, + 0xf2, 0x8c, 0x27, 0x43, 0xe9, 0xd9, 0xd9, 0x3f, 0xfe, 0xb0, 0xdb, 0x00, 0x29, + 0x74, 0xa3, 0xc3, 0xb1, 0xa7, 0x88, 0x56, 0x72, 0x31, 0x3f, 0x3a, 0x84, 0x3c, + 0x35, 0xb9, 0x3d, 0x04, 0xc7, 0x0a, 0xb8, 0xbc, 0x6f, 0x4b, 0x4c, 0xbe, 0x66, + 0x31, 0xc4, 0x87, 0x14, 0xaa, 0x2c, 0x65, 0x89, 0xf1, 0x98, 0x09, 0x70, 0xe6, + 0x11, 0xbc, 0x3b, 0x47, 0x30, 0x55, 0x21, 0xf0, 0x94, 0x50, 0xf0, 0x9a, 0xde, + 0x5c, 0x33, 0x31, 0xf7, 0x8d, 0x69, 0x25, 0xff, 0x88, 0x22, 0xa1, 0x4c, 0x4b, + 0x66, 0x6a, 0x92, 0x59, 0xad, 0x0d, 0xc4, 0x2a, 0x02, + ], + txid: [ + 0xc2, 0x7c, 0x98, 0x0f, 0x79, 0x7b, 0x41, 0x9d, 0xa3, 0xbb, 0xa2, 0x68, 0x01, + 0x62, 0xa8, 0xe8, 0x8e, 0x13, 0x9a, 0xcf, 0xb1, 0x0c, 0x13, 0xff, 0xce, 0xe7, + 0xbd, 0x08, 0x39, 0x6e, 0xc5, 0xd6, + ], + auth_digest: [ + 0x23, 0xef, 0x95, 0x86, 0xa3, 0xc9, 0x61, 0x18, 0x55, 0x0d, 0x55, 0xbf, 0xa7, + 0x0b, 0x8c, 0x35, 0xbd, 0xa9, 0x55, 0x50, 0xa3, 0xcd, 0x5a, 0x02, 0x73, 0x20, + 0x11, 0x90, 0x12, 0x46, 0x0d, 0xf8, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0xc2, 0x7c, 0x98, 0x0f, 0x79, 0x7b, 0x41, 0x9d, 0xa3, 0xbb, 0xa2, 0x68, 0x01, + 0x62, 0xa8, 0xe8, 0x8e, 0x13, 0x9a, 0xcf, 0xb1, 0x0c, 0x13, 0xff, 0xce, 0xe7, + 0xbd, 0x08, 0x39, 0x6e, 0xc5, 0xd6, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0xac, + 0x7b, 0xc7, 0xf5, 0x3a, 0x82, 0xbd, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x3a, 0x82, 0xbd, 0x02, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xde, 0xbd, 0x1a, 0x65, 0xe7, 0x68, + 0x34, 0x15, 0x2f, 0xfc, 0xc5, 0x0e, 0x28, 0x12, 0xfc, 0xe7, 0x65, 0x28, 0x67, + 0x5d, 0xe1, 0x98, 0x73, 0x10, 0x7f, 0xca, 0x58, 0xf1, 0xab, 0xa7, 0x24, 0x29, + 0x85, 0x80, 0x9a, 0xe2, 0x6a, 0x58, 0x04, 0xf9, 0xe3, 0xb3, 0x78, 0xc5, 0x63, + 0x74, 0x83, 0x79, 0x99, 0xd9, 0xc0, 0x99, 0x01, 0xbf, 0x39, 0xca, 0xac, 0x48, + 0xdc, 0x11, 0x95, 0x6a, 0x8a, 0x29, 0x13, 0x0a, 0x8f, 0x6c, 0x87, 0x99, 0x40, + 0x16, 0xea, 0x41, 0xcf, 0x73, 0x8e, 0x00, 0x68, 0x1f, 0xc6, 0x03, 0x91, 0x00, + 0x22, 0x49, 0xd6, 0xed, 0x48, 0xb3, 0xb7, 0x6f, 0x0f, 0xc4, 0x76, 0x03, 0x15, + 0x38, 0x8e, 0x1a, 0xca, 0x7c, 0x87, 0xf8, 0xcc, 0xc4, 0xa0, 0x5e, 0x65, 0x5a, + 0x10, 0x00, 0x81, 0x9d, 0x37, 0x5b, 0x0a, 0x91, 0x2d, 0x4f, 0xe8, 0x43, 0xb7, + 0x6e, 0xf6, 0xf2, 0x23, 0x30, 0xe8, 0x58, 0xae, 0x37, 0x78, 0x76, 0xb8, 0xf4, + 0xba, 0x86, 0x8b, 0xa9, 0x58, 0xc7, 0x04, 0x58, 0x40, 0xe7, 0x6d, 0xce, 0x9a, + 0x66, 0x42, 0xd2, 0x8b, 0xf3, 0x6f, 0x0b, 0x40, 0xc2, 0x8b, 0x9c, 0x47, 0x27, + 0xb7, 0xaa, 0xa5, 0x35, 0x62, 0xf5, 0x23, 0xe7, 0x39, 0x52, 0xbb, 0xf3, 0x3d, + 0x8a, 0x41, 0x04, 0x07, 0x8a, 0xde, 0x3e, 0xaa, 0xa4, 0x96, 0x99, 0xa6, 0x9f, + 0xdf, 0x1c, 0x5a, 0xc7, 0x73, 0x21, 0x46, 0xee, 0x5e, 0x1d, 0x6b, 0x6c, 0xa9, + 0xb9, 0x18, 0x0f, 0x96, 0x4c, 0xc9, 0xd0, 0x87, 0x8a, 0xe1, 0x37, 0x35, 0x24, + 0xd7, 0xd5, 0x10, 0xe5, 0x82, 0x27, 0xdf, 0x6d, 0xe9, 0xd3, 0x0d, 0x27, 0x18, + 0x67, 0x64, 0x01, 0x77, 0xb0, 0xf1, 0x85, 0x6e, 0x28, 0xd5, 0xc8, 0xaf, 0xb0, + 0x95, 0xef, 0x61, 0x84, 0xfe, 0xd6, 0x51, 0x58, 0x90, 0x22, 0xee, 0xae, 0xa4, + 0xc0, 0xce, 0x1f, 0xa6, 0xf0, 0x85, 0x09, 0x2b, 0x04, 0x97, 0x94, 0x89, 0x17, + 0x2b, 0x3e, 0xf8, 0x19, 0x4a, 0x79, 0x8d, 0xf5, 0x72, 0x4d, 0x6b, 0x05, 0xf1, + 0xae, 0x00, 0x00, 0x13, 0xa0, 0x8d, 0x61, 0x2b, 0xca, 0x8a, 0x8c, 0x31, 0x44, + 0x3c, 0x10, 0x34, 0x6d, 0xbf, 0x61, 0xde, 0x84, 0x75, 0xc0, 0xbb, 0xec, 0x51, + 0x04, 0xb4, 0x75, 0x56, 0xaf, 0x3d, 0x51, 0x44, 0x58, 0xe2, 0x32, 0x1d, 0x14, + 0x60, 0x71, 0x78, 0x9d, 0x23, 0x35, 0x93, 0x4a, 0x68, 0x06, 0x14, 0xe8, 0x35, + 0x62, 0xf8, 0x2d, 0xfd, 0x40, 0x5b, 0x54, 0xa4, 0x5e, 0xb3, 0x2c, 0x16, 0x54, + 0x48, 0xd4, 0xd5, 0xd6, 0x1c, 0xa2, 0x85, 0x95, 0x85, 0x36, 0x9f, 0x53, 0xf1, + 0xa1, 0x37, 0xe9, 0xe8, 0x2b, 0x67, 0xb8, 0xfd, 0xaf, 0x01, 0xbd, 0xa5, 0x4a, + 0x31, 0x73, 0x11, 0x89, 0x6a, 0xe1, 0x02, 0x80, 0xa0, 0x32, 0x44, 0x0c, 0x42, + 0x0a, 0x42, 0x1e, 0x94, 0x4d, 0x1e, 0x95, 0x2b, 0x70, 0xd5, 0x82, 0x6c, 0xd3, + 0xb0, 0x8b, 0x7d, 0xb9, 0x63, 0x0f, 0xe4, 0xfd, 0x5f, 0x22, 0x12, 0x5d, 0xe8, + 0x40, 0xfc, 0xc4, 0x0b, 0x98, 0x03, 0x8a, 0xf1, 0x1d, 0x55, 0xbe, 0x25, 0x43, + 0x25, 0x97, 0xb4, 0xb6, 0x5b, 0x9e, 0xc1, 0xc7, 0xa8, 0xbb, 0xfd, 0x05, 0x2c, + 0xbf, 0x7e, 0x1c, 0x17, 0x85, 0x31, 0x49, 0x34, 0xb2, 0x62, 0xd5, 0x85, 0x37, + 0x54, 0xf1, 0xf1, 0x77, 0x71, 0xcf, 0xb7, 0x50, 0x30, 0x72, 0x65, 0x57, 0x53, + 0xfa, 0x3f, 0x54, 0xec, 0xc5, 0x87, 0xe9, 0xf8, 0x3b, 0x58, 0x19, 0x16, 0x09, + 0x2d, 0xf2, 0x6e, 0x63, 0xe1, 0x89, 0x94, 0xcb, 0x0d, 0xb9, 0x1a, 0x0b, 0xbd, + 0xc7, 0xb6, 0x11, 0x9b, 0x32, 0x22, 0x2a, 0xdf, 0x5e, 0x61, 0xd8, 0xd8, 0xae, + 0x89, 0xda, 0xe4, 0x95, 0x4b, 0x54, 0x81, 0x3b, 0xb3, 0x3f, 0x08, 0xd5, 0x62, + 0xba, 0x51, 0x3f, 0xee, 0x1b, 0x09, 0xc0, 0xfc, 0xd5, 0x16, 0x05, 0x54, 0x19, + 0x47, 0x4d, 0xd7, 0xfd, 0xa0, 0x38, 0xa8, 0x9c, 0x84, 0xea, 0x7b, 0x94, 0x68, + 0x28, 0x7f, 0x0e, 0xb0, 0xc1, 0x0c, 0x4b, 0x13, 0x25, 0x20, 0x19, 0x4d, 0x3d, + 0x8d, 0x53, 0x51, 0xfc, 0x10, 0xd0, 0x9c, 0x15, 0xc8, 0xcc, 0x10, 0x1a, 0xa1, + 0x66, 0x3b, 0xbf, 0x17, 0xb8, 0x41, 0x11, 0xf3, 0x8b, 0xb4, 0x39, 0xf0, 0x73, + 0x53, 0xbd, 0xea, 0x35, 0x96, 0xd1, 0x5e, 0x71, 0x3e, 0x1e, 0x2e, 0x7d, 0x3f, + 0x1c, 0x38, 0x31, 0x35, 0xb4, 0x7f, 0xa7, 0xf8, 0x1f, 0x46, 0xdf, 0x7a, 0x90, + 0x2a, 0x40, 0x46, 0x99, 0xec, 0x91, 0x2f, 0x56, 0x56, 0xc3, 0x5b, 0x85, 0x76, + 0x3e, 0x4d, 0xe5, 0x83, 0xae, 0xca, 0xa1, 0xdf, 0xd5, 0xd2, 0x67, 0x7d, 0x9c, + 0x8f, 0xfe, 0xe8, 0x77, 0xf6, 0x3f, 0x40, 0xa5, 0xca, 0x0d, 0x67, 0xf6, 0xe5, + 0x54, 0x12, 0x47, 0x39, 0xf8, 0x05, 0xaf, 0x87, 0x6a, 0xee, 0xde, 0x53, 0xaa, + 0x8b, 0x0f, 0x8e, 0x56, 0x04, 0xa7, 0x3c, 0x30, 0xcb, 0xd0, 0x9d, 0xad, 0x96, + 0x3d, 0x6f, 0x8a, 0x5d, 0xcc, 0x40, 0xde, 0xf4, 0x07, 0x97, 0x34, 0x21, 0x13, + 0xba, 0x20, 0x6f, 0xae, 0x8e, 0xbe, 0x4f, 0x3b, 0xc3, 0xca, 0xf6, 0x92, 0x59, + 0xe4, 0x62, 0xef, 0xf9, 0xba, 0x8b, 0x3f, 0x4b, 0xfa, 0xa1, 0x30, 0x0c, 0x26, + 0x92, 0x5a, 0x87, 0x29, 0xcd, 0x32, 0x91, 0x5b, 0xfc, 0x96, 0x60, 0x86, 0xf0, + 0xd5, 0x56, 0x0b, 0xbe, 0x32, 0xa5, 0x98, 0xc2, 0x2a, 0xdf, 0xb4, 0x8c, 0xef, + 0x72, 0xba, 0x5d, 0x42, 0x87, 0xc0, 0xce, 0xfb, 0xac, 0xfd, 0x8c, 0xe1, 0x95, + 0xb4, 0x96, 0x3c, 0x34, 0xa9, 0x4b, 0xba, 0x7a, 0x17, 0x5d, 0xae, 0x4b, 0xbe, + 0x3e, 0xf4, 0x86, 0x3d, 0x53, 0x70, 0x89, 0x15, 0x09, 0x0f, 0x47, 0xa0, 0x68, + 0xe2, 0x27, 0x43, 0x3f, 0x9e, 0x49, 0xd3, 0xaa, 0x09, 0xe3, 0x56, 0xd8, 0xd6, + 0x6d, 0x0c, 0x01, 0x21, 0xe9, 0x1a, 0x3c, 0x4a, 0xa3, 0xf2, 0x7f, 0xa1, 0xb6, + 0x33, 0x96, 0xe2, 0xb4, 0x1d, 0xb9, 0x08, 0xfd, 0xab, 0x8b, 0x18, 0xcc, 0x73, + 0x04, 0xe9, 0x4e, 0x97, 0x05, 0x68, 0xf9, 0x42, 0x5c, 0x10, 0x91, 0x67, 0x8e, + 0xc6, 0xde, 0xbf, 0x06, 0xd7, 0x4a, 0xf5, 0x79, 0x4b, 0xc5, 0x0b, 0x29, 0xfd, + 0x0f, 0xda, 0xdd, 0xcc, 0x29, 0xcf, 0x44, 0x57, 0xbe, 0x36, 0xe1, 0xe0, 0x27, + 0x04, 0x63, 0xc0, 0xca, 0x4b, 0x31, 0x54, 0x81, 0x44, 0xe8, 0x88, 0x45, 0xbb, + 0xe5, 0x0c, 0x31, 0x22, 0xeb, 0xba, 0x01, 0x0b, 0x9e, 0xbf, 0xbb, 0x01, 0x1b, + 0xd6, 0xf0, 0xb7, 0x88, 0x05, 0x02, 0x1d, 0xa2, 0x42, 0x78, 0xb0, 0x78, 0x8a, + 0xee, 0xae, 0x7d, 0xb9, 0xa9, 0x07, 0xb6, 0x51, 0x6d, 0xc8, 0x0e, 0xe1, 0xfd, + 0x8d, 0x73, 0x02, 0x51, 0x89, 0x1c, 0xb9, 0x06, 0x88, 0x9a, 0x07, 0x3b, 0x0a, + 0x80, 0xbb, 0xfe, 0xd8, 0x7f, 0x6c, 0xf4, 0x29, 0xfb, 0x27, 0xad, 0x6b, 0xab, + 0xe7, 0x91, 0x76, 0x66, 0x11, 0xcf, 0x5b, 0xc2, 0x0e, 0x48, 0xbe, 0xf1, 0x19, + 0x25, 0x9b, 0x9b, 0x8a, 0x0e, 0x39, 0xfc, 0xe7, 0xbb, 0xad, 0x66, 0xc7, 0x78, + 0x58, 0x86, 0x06, 0x11, 0xb7, 0x6d, 0x8c, 0x75, 0x5e, 0x83, 0x35, 0x77, 0xca, + 0x84, 0x9e, 0xda, 0xa7, 0xd5, 0xf7, 0x51, 0x56, 0xaa, 0x4f, 0x27, 0x24, 0xb5, + 0xd9, 0x96, 0xc4, 0x9a, 0x9f, 0x0f, 0x30, 0xdd, 0xcb, 0x91, 0xfe, 0x90, 0x04, + 0xe1, 0xe8, 0x32, 0x94, 0xa6, 0xc9, 0x20, 0x3d, 0x94, 0xe8, 0xdc, 0x2c, 0xbb, + 0x44, 0x9d, 0xe4, 0x15, 0x50, 0x32, 0x60, 0x4e, 0x47, 0x99, 0x70, 0x16, 0xb3, + 0x04, 0xfd, 0x43, 0x7d, 0x82, 0x35, 0x04, 0x5e, 0x25, 0x5a, 0x19, 0xb7, 0x43, + 0xa0, 0xa9, 0xf2, 0xe3, 0x36, 0xb4, 0x4c, 0xae, 0x30, 0x7b, 0xb3, 0x98, 0x7b, + 0xd3, 0xe4, 0xe7, 0x77, 0xfb, 0xb3, 0x4c, 0x0a, 0xb8, 0xcc, 0x3d, 0x67, 0x46, + 0x6c, 0x0a, 0x88, 0xdd, 0x4c, 0xca, 0xd1, 0x8a, 0x07, 0xa8, 0xd1, 0x06, 0x8d, + 0xf5, 0xb6, 0x29, 0xe5, 0x71, 0x8d, 0x0f, 0x6d, 0xf5, 0xc9, 0x57, 0xcf, 0x71, + 0xbb, 0x00, 0xa5, 0x17, 0x8f, 0x17, 0x5c, 0xac, 0xa9, 0x44, 0xe6, 0x35, 0xc5, + 0x15, 0x9f, 0x73, 0x8e, 0x24, 0x02, 0xa2, 0xd2, 0x1a, 0xa0, 0x81, 0xe1, 0x0e, + 0x45, 0x6a, 0xfb, 0x00, 0xb9, 0xf6, 0x24, 0x16, 0xc8, 0xb9, 0xc0, 0xf7, 0x22, + 0x8f, 0x51, 0x07, 0x29, 0xe0, 0xbe, 0x3f, 0x30, 0x53, 0x13, 0xd7, 0x7f, 0x73, + 0x79, 0xdc, 0x2a, 0xf2, 0x48, 0x69, 0xc6, 0xc7, 0x4e, 0xe4, 0x47, 0x14, 0x98, + 0x86, 0x1d, 0x19, 0x2f, 0x0f, 0xf0, 0xf5, 0x08, 0x28, 0x5d, 0xab, 0x6b, 0x6a, + 0x36, 0xcc, 0xf7, 0xd1, 0x22, 0x56, 0xcc, 0x76, 0xb9, 0x55, 0x03, 0x72, 0x0a, + 0xc6, 0x72, 0xd0, 0x82, 0x68, 0xd2, 0xcf, 0x77, 0x73, 0xb6, 0xba, 0x2a, 0x5f, + 0x66, 0x48, 0x47, 0xbf, 0x70, 0x7f, 0x2f, 0xc1, 0x0c, 0x98, 0xf2, 0xf0, 0x06, + 0xec, 0x22, 0xcc, 0xb5, 0xa8, 0xc8, 0xb7, 0xc4, 0x0c, 0x7c, 0x2d, 0x49, 0xa6, + 0x63, 0x9b, 0x9f, 0x2c, 0xe3, 0x3c, 0x25, 0xc0, 0x4b, 0xc4, 0x61, 0xe7, 0x44, + 0xdf, 0xa5, 0x36, 0xb0, 0x0d, 0x94, 0xba, 0xdd, 0xf4, 0xf4, 0xd1, 0x40, 0x44, + 0xc6, 0x95, 0xa3, 0x38, 0x81, 0x47, 0x7d, 0xf1, 0x24, 0xf0, 0xfc, 0xf2, 0x06, + 0xa9, 0xfb, 0x2e, 0x65, 0xe3, 0x04, 0xcd, 0xbf, 0x0c, 0x4d, 0x23, 0x90, 0x17, + 0x0c, 0x13, 0x0a, 0xb8, 0x49, 0xc2, 0xf2, 0x2b, 0x5c, 0xdd, 0x39, 0x21, 0x64, + 0x0c, 0x8c, 0xf1, 0x97, 0x6a, 0xe1, 0x01, 0x0b, 0x0d, 0xfd, 0x9c, 0xb2, 0x54, + 0x3e, 0x45, 0xf9, 0x97, 0x49, 0xcc, 0x4d, 0x61, 0xf2, 0xe8, 0xaa, 0xbf, 0xe9, + 0x8b, 0xd9, 0x05, 0xfa, 0x39, 0x95, 0x1b, 0x33, 0xea, 0x76, 0x9c, 0x45, 0xab, + 0x95, 0x31, 0xc5, 0x72, 0x09, 0x86, 0x2a, 0xd1, 0x2f, 0xd7, 0x6b, 0xa4, 0x80, + 0x7e, 0x65, 0x41, 0x7b, 0x6c, 0xd1, 0x2f, 0xa8, 0xec, 0x91, 0x6f, 0x01, 0x3e, + 0xbb, 0x87, 0x06, 0xa9, 0x6e, 0xff, 0xed, 0xa0, 0x6c, 0x4b, 0xe2, 0x4b, 0x04, + 0x84, 0x63, 0x92, 0xe9, 0xd1, 0xe6, 0x93, 0x0e, 0xae, 0x01, 0xfa, 0x21, 0xfb, + 0xd7, 0x00, 0x58, 0x3f, 0xb5, 0x98, 0xb9, 0x2c, 0x8f, 0x4e, 0xb8, 0xa6, 0x1a, + 0xa6, 0x23, 0x5d, 0xb6, 0x0f, 0x28, 0x41, 0xcf, 0x3a, 0x1c, 0x6a, 0xb5, 0x4c, + 0x67, 0x06, 0x68, 0x44, 0x71, 0x1d, 0x09, 0x1e, 0xb9, 0x31, 0xa1, 0xbd, 0x62, + 0x81, 0xae, 0xdf, 0x2a, 0x0e, 0x8f, 0xab, 0x18, 0x81, 0x72, 0x02, 0xa9, 0xbe, + 0x06, 0x40, 0x2e, 0xd9, 0xcc, 0x72, 0x0c, 0x16, 0xbf, 0xe8, 0x81, 0xe4, 0xdf, + 0x42, 0x55, 0xe8, 0x7a, 0xfb, 0x7f, 0xc6, 0x2f, 0x38, 0x11, 0x6b, 0xbe, 0x03, + 0xcd, 0x8a, 0x3c, 0xb1, 0x1a, 0x27, 0xd5, 0x68, 0x41, 0x47, 0x82, 0xf4, 0x7b, + 0x1a, 0x44, 0xc9, 0x7c, 0x68, 0x04, 0x67, 0x69, 0x4b, 0xc9, 0x70, 0x9d, 0x32, + 0x91, 0x6c, 0x97, 0xe8, 0x00, 0x6c, 0xbb, 0x07, 0xba, 0x0e, 0x41, 0x80, 0xa3, + 0x73, 0x80, 0x38, 0xc3, 0x74, 0xc4, 0xcc, 0xe8, 0xf3, 0x29, 0x59, 0xaf, 0xb2, + 0x5f, 0x30, 0x3f, 0x58, 0x15, 0xc4, 0x53, 0x31, 0x24, 0xac, 0xf9, 0xd1, 0x89, + 0x40, 0xe7, 0x75, 0x22, 0xac, 0x5d, 0xc4, 0xb9, 0x57, 0x0a, 0xae, 0x8f, 0x47, + 0xb7, 0xf5, 0x7f, 0xd8, 0x76, 0x7b, 0xea, 0x1a, 0x24, 0xae, 0x7b, 0xed, 0x65, + 0xb4, 0xaf, 0xdc, 0x8f, 0x12, 0x78, 0xc3, 0x0e, 0x2d, 0xb9, 0x8f, 0xd1, 0x72, + 0x73, 0x0a, 0xc6, 0xbb, 0xed, 0x4f, 0x11, 0x27, 0xcd, 0x32, 0xb0, 0x4a, 0x95, + 0xb2, 0x05, 0x52, 0x6c, 0xfc, 0xb4, 0xc4, 0xe1, 0xcc, 0x95, 0x51, 0x75, 0xb3, + 0xe8, 0xde, 0x1f, 0x5d, 0x81, 0xb1, 0x86, 0x69, 0x69, 0x23, 0x50, 0xaa, 0xa1, + 0xa1, 0xd7, 0x97, 0x61, 0x75, 0x82, 0xe5, 0x4d, 0x7a, 0x5b, 0x57, 0xa6, 0x83, + 0xb3, 0x2f, 0xb1, 0x09, 0x80, 0x62, 0xda, 0xd7, 0xb0, 0xc2, 0xeb, 0x51, 0x8f, + 0x68, 0x62, 0xe8, 0x3d, 0xb2, 0x5e, 0x3d, 0xba, 0xf7, 0xae, 0xd5, 0x04, 0xde, + 0x93, 0x2a, 0xcb, 0x99, 0xd7, 0x35, 0x99, 0x2c, 0xe6, 0x3b, 0xc4, 0x69, 0xb4, + 0xfc, 0x9b, 0x1e, 0x7a, 0x01, 0x46, 0x9a, 0x99, 0x6b, 0xae, 0xee, 0x5e, 0xcd, + 0xac, 0x45, 0xca, 0x09, 0xa9, 0xc3, 0x8f, 0xf0, 0xcd, 0x59, 0x53, 0x7f, 0x0b, + 0xc9, 0x87, 0x31, 0x62, 0x03, 0x59, 0x66, 0x32, 0x9e, 0xf6, 0xfb, 0xe4, 0xaa, + 0x4c, 0xea, 0x9e, 0x04, 0xec, 0xf5, 0x35, 0x11, 0xda, 0x54, 0x83, 0x2d, 0xe9, + 0x13, 0x6b, 0x39, 0xf4, 0x59, 0x9f, 0x5a, 0x25, 0xb2, 0xfc, 0xe9, 0xd1, 0x3c, + 0xe3, 0x22, 0x28, 0xb8, 0xd8, 0x88, 0x89, 0xb8, 0x4f, 0x7d, 0xe4, 0x01, 0xa5, + 0xc2, 0xfd, 0xe5, 0xce, 0x8b, 0x38, 0xe9, 0x37, 0x25, 0x42, 0x9c, 0xb0, 0xca, + 0xb9, 0x92, 0xe5, 0xdf, 0x54, 0x1b, 0x07, 0x0b, 0x3a, 0x82, 0xd6, 0xe7, 0x7a, + 0x9a, 0x85, 0x9e, 0x46, 0xc3, 0x4d, 0xb7, 0xbb, 0x31, 0x12, 0x48, 0x7e, 0x74, + 0x6e, 0xef, 0xe4, 0xe8, 0x08, 0xbb, 0x32, 0xc2, 0x9b, 0xe8, 0x2d, 0x7b, 0xcf, + 0xbf, 0xc3, 0xf5, 0xef, 0xd9, 0xb8, 0x98, 0x8a, 0x53, 0x93, 0xc4, 0xde, 0xda, + 0xe6, 0xde, 0x88, 0x42, 0xc3, 0xc6, 0xe2, 0x97, 0x94, 0xda, 0xc2, 0xee, 0x25, + 0x35, 0xe8, 0x20, 0x9a, 0x07, 0x4b, 0x21, 0x6b, 0x70, 0x23, 0xfa, 0xdc, 0x2d, + 0x25, 0x94, 0x9c, 0x90, 0x03, 0x7e, 0x71, 0xe3, 0xe5, 0x50, 0x72, 0x6d, 0x21, + 0x0a, 0x2c, 0x68, 0x83, 0x42, 0xe5, 0x24, 0x40, 0x63, 0x5e, 0x9c, 0xc1, 0x4a, + 0xfe, 0x10, 0x10, 0x26, 0x21, 0xa9, 0xc9, 0xac, 0xcb, 0x78, 0x2e, 0x9e, 0x4a, + 0x5f, 0xa8, 0x7f, 0x0a, 0x95, 0x6f, 0x5b, 0x85, 0x50, 0x99, 0x60, 0x28, 0x5c, + 0x22, 0x62, 0x7c, 0x59, 0x48, 0x3a, 0x5a, 0x4c, 0x28, 0xcc, 0xe4, 0xb1, 0x56, + 0xe5, 0x51, 0x40, 0x6a, 0x7e, 0xe8, 0x35, 0x56, 0x56, 0xa2, 0x1e, 0x43, 0xe3, + 0x8c, 0xe1, 0x29, 0xfd, 0xad, 0xb7, 0x59, 0xed, 0xdf, 0xa0, 0x8f, 0x00, 0xfc, + 0x8e, 0x56, 0x7c, 0xef, 0x93, 0xc6, 0x79, 0x2d, 0x01, 0xdf, 0x05, 0xe6, 0xd5, + 0x80, 0xf4, 0xd5, 0xd4, 0x8d, 0xf0, 0x42, 0x45, 0x1a, 0x33, 0x59, 0x0d, 0x3e, + 0x8c, 0xf4, 0x9b, 0x26, 0x27, 0x21, 0x8f, 0x0c, 0x29, 0x2f, 0xa6, 0x6a, 0xda, + 0x94, 0x5f, 0xa5, 0x5b, 0xb2, 0x35, 0x48, 0xe3, 0x3a, 0x83, 0xa5, 0x62, 0x95, + 0x7a, 0x31, 0x49, 0xa9, 0x93, 0xcc, 0x47, 0x23, 0x62, 0x29, 0x87, 0x36, 0xa8, + 0xb7, 0x78, 0xd9, 0x7c, 0xe4, 0x23, 0x01, 0x3d, 0x64, 0xb3, 0x2c, 0xd1, 0x72, + 0xef, 0xa5, 0x51, 0xbf, 0x7f, 0x36, 0x8f, 0x04, 0xbd, 0xae, 0xc6, 0x09, 0x1a, + 0x30, 0x04, 0xa7, 0x57, 0x59, 0x8b, 0x80, 0x1d, 0xcf, 0x67, 0x5c, 0xb8, 0x3e, + 0x43, 0xa5, 0x3a, 0xe8, 0xb2, 0x54, 0xd3, 0x33, 0xbc, 0xda, 0x20, 0xd4, 0x81, + 0x7d, 0x34, 0x77, 0xab, 0xfb, 0xa2, 0x5b, 0xb8, 0x3d, 0xf5, 0x94, 0x9c, 0x12, + 0x6f, 0x14, 0x9b, 0x1d, 0x99, 0x34, 0x1e, 0x4e, 0x6f, 0x91, 0x20, 0xf4, 0xd4, + 0x1e, 0x62, 0x91, 0x85, 0x00, 0x2c, 0x72, 0xc0, 0x12, 0xc4, 0x14, 0xd2, 0x38, + 0x2a, 0x6d, 0x47, 0xc7, 0xb3, 0xde, 0xab, 0xa7, 0x70, 0xc4, 0x00, 0xca, 0x96, + 0xb2, 0x81, 0x4f, 0x6b, 0x26, 0xc3, 0xef, 0x17, 0x42, 0x9f, 0x1a, 0x98, 0xc8, + 0x5d, 0x83, 0xdb, 0x20, 0xef, 0xad, 0x48, 0xbe, 0x89, 0x96, 0xfb, 0x1b, 0xff, + 0x59, 0x1e, 0xff, 0xf3, 0x60, 0xfe, 0x11, 0x99, 0x05, 0x6c, 0x56, 0xe5, 0xfe, + 0xec, 0x61, 0xa7, 0xb8, 0xb9, 0xf6, 0x99, 0xd6, 0x01, 0x2c, 0x28, 0x49, 0x23, + 0x2f, 0x32, 0x9f, 0xef, 0x95, 0xc7, 0xaf, 0x37, 0x00, 0x98, 0xff, 0xe4, 0x91, + 0x8e, 0x0c, 0xa1, 0xdf, 0x47, 0xf2, 0x75, 0x86, 0x7b, 0x73, 0x9e, 0x0a, 0x51, + 0x4d, 0x32, 0x09, 0x32, 0x5e, 0x21, 0x70, 0x45, 0x92, 0x7b, 0x47, 0x9c, 0x1c, + 0xe2, 0xe5, 0xd5, 0x4f, 0x25, 0x48, 0x8c, 0xad, 0x15, 0x13, 0xe3, 0xf4, 0x4a, + 0x21, 0x26, 0x6c, 0xfd, 0x84, 0x16, 0x33, 0x32, 0x7d, 0xee, 0x6c, 0xf8, 0x10, + 0xfb, 0xf7, 0x39, 0x3e, 0x31, 0x7d, 0x9e, 0x53, 0xd1, 0xbe, 0x1d, 0x5a, 0xe7, + 0x83, 0x9b, 0x66, 0xb9, 0x43, 0xb9, 0xed, 0x18, 0xf2, 0xc5, 0x30, 0xe9, 0x75, + 0x42, 0x23, 0x32, 0xc3, 0x43, 0x9c, 0xce, 0x49, 0xa2, 0x9f, 0x2a, 0x33, 0x6a, + 0x48, 0x51, 0x26, 0x3c, 0x5e, 0x9b, 0xd1, 0x3d, 0x73, 0x11, 0x09, 0xe8, 0x44, + 0xb7, 0xf8, 0xc3, 0x92, 0xa5, 0xc1, 0xdc, 0xaa, 0x2a, 0xe5, 0xf5, 0x0f, 0xf6, + 0x3f, 0xab, 0x97, 0x65, 0xe0, 0x16, 0x70, 0x2c, 0x35, 0xa6, 0x7c, 0xd7, 0x36, + 0x4d, 0x3f, 0xab, 0x55, 0x2f, 0xb3, 0x49, 0xe3, 0x5c, 0x15, 0xc5, 0x02, 0x50, + 0x45, 0x3f, 0xd1, 0x8f, 0x7b, 0x85, 0x59, 0x92, 0x63, 0x2e, 0x2c, 0x76, 0xc0, + 0xfb, 0xf1, 0xef, 0x96, 0x3e, 0xa8, 0x0e, 0x32, 0x23, 0xde, 0x32, 0x77, 0xbc, + 0x55, 0x92, 0x51, 0x72, 0x58, 0x29, 0xec, 0x03, 0xf2, 0x13, 0xba, 0x89, 0x55, + 0xca, 0xb2, 0x82, 0x2f, 0xf2, 0x1a, 0x9b, 0x0a, 0x49, 0x04, 0xd6, 0x68, 0xfc, + 0xd7, 0x72, 0x24, 0xbd, 0xe3, 0xdd, 0x01, 0xf6, 0xff, 0xc4, 0x82, 0x8f, 0x6b, + 0x64, 0x23, 0x0b, 0x35, 0xc6, 0xa0, 0x49, 0x87, 0x34, 0x94, 0x27, 0x6e, 0xa1, + 0xd7, 0xed, 0x5e, 0x92, 0xcb, 0x4f, 0x90, 0xba, 0x83, 0xa9, 0xe4, 0x96, 0x01, + 0xb1, 0x94, 0x04, 0x2f, 0x29, 0x00, 0xd9, 0x9d, 0x31, 0x2d, 0x7b, 0x70, 0x50, + 0x8c, 0xf1, 0x76, 0x06, 0x6d, 0x15, 0x4d, 0xbe, 0x96, 0xef, 0x9d, 0x43, 0x67, + 0xe4, 0xc8, 0x40, 0xe4, 0xa1, 0x7b, 0x5e, 0x51, 0x22, 0xe8, 0xeb, 0xe2, 0x15, + 0x8a, 0x3c, 0x5f, 0x4c, 0xba, 0xe2, 0x1e, 0xa3, 0xfa, 0x1a, 0xe6, 0xc2, 0x5a, + 0x94, 0x62, 0xeb, 0xcb, 0xb0, 0xfd, 0x5f, 0x14, 0x55, 0x4b, 0xc9, 0x77, 0x47, + 0xc3, 0x3e, 0x34, 0xda, 0x90, 0xc8, 0x16, 0xd8, 0xd0, 0xd5, 0x0b, 0xfe, 0x37, + 0x61, 0x8c, 0x58, 0x12, 0x89, 0x14, 0x84, 0xfa, 0x25, 0x93, 0x00, 0x2c, 0xa6, + 0x9a, 0x7d, 0x6e, 0xdf, 0x06, 0x00, 0xc1, 0xc6, 0xa5, 0x34, 0x2d, 0x7c, 0x01, + 0xae, 0x9d, 0x8a, 0xd3, 0x07, 0x0c, 0x2b, 0x1a, 0x91, 0x57, 0x3a, 0xf5, 0xe0, + 0xc5, 0xe4, 0xcb, 0xbf, 0x4a, 0xcd, 0xc6, 0xb5, 0x4c, 0x92, 0x72, 0x20, 0x2d, + 0x99, 0x70, 0x25, 0x0c, 0x17, 0xc1, 0x03, 0x6f, 0x06, 0x08, 0x5c, 0x41, 0x85, + 0x8e, 0xd3, 0xa0, 0xc4, 0x81, 0x50, 0xbc, 0x69, 0x7e, 0x4a, 0x69, 0x5f, 0xef, + 0x33, 0x5f, 0x7a, 0xd0, 0x7e, 0x1a, 0x46, 0xdc, 0x76, 0x7f, 0xf8, 0x22, 0xdb, + 0x70, 0xe6, 0x66, 0x90, 0x80, 0xb9, 0x67, 0xa8, 0x36, 0x49, 0xd8, 0xb4, 0x57, + 0x54, 0xbf, 0x86, 0x79, 0x16, 0x12, 0xf3, 0x02, 0x4c, 0x2b, 0x86, 0xab, 0x98, + 0x52, 0xad, 0x98, 0xe6, 0x3b, 0x3a, 0x8b, 0x91, 0xe5, 0x0b, 0x49, 0x1c, 0x40, + 0xc3, 0x6d, 0xcf, 0x70, 0x89, 0x37, 0x11, 0xcb, 0x7d, 0xb8, 0xf3, 0x69, 0xae, + 0xeb, 0xd4, 0xd4, 0x8e, 0xc1, 0x48, 0xcb, 0x64, 0x97, 0x0e, 0x32, 0x23, 0xa9, + 0x1f, 0x71, 0xdf, 0xcf, 0x15, 0xdb, 0xf4, 0x7a, 0x3e, 0x17, 0xa5, 0xca, 0x78, + 0x14, 0xf1, 0x40, 0xac, 0x7f, 0x3b, 0xaa, 0x8c, 0x49, 0x5b, 0xf6, 0xdd, 0x17, + 0x84, 0xb4, 0x55, 0xf2, 0x19, 0xc9, 0x85, 0xd8, 0xe2, 0x31, 0x1d, 0x5f, 0x52, + 0x23, 0xd5, 0x99, 0x8f, 0x99, 0x1f, 0xb3, 0x7c, 0x22, 0x32, 0xc4, 0xa6, 0x38, + 0x8a, 0x36, 0xc0, 0x09, 0xa5, 0x6d, 0x4d, 0x95, 0xd1, 0xe8, 0x1d, 0x3b, 0x3e, + 0xbc, 0xa7, 0xe5, 0x0c, 0x59, 0x10, 0x38, 0x3a, 0xfe, 0x82, 0xfb, 0xac, 0x89, + 0x59, 0x4a, 0x8d, 0x19, 0xe8, 0xe7, 0x7d, 0xd9, 0xe3, 0x47, 0x53, 0x86, 0xb8, + 0x0a, 0x0b, 0x68, 0x52, 0x3a, 0xda, 0xa2, 0xef, 0xaa, 0x18, 0x43, 0x88, 0x56, + 0x49, 0x78, 0x0d, 0xe0, 0xca, 0x92, 0x9d, 0x66, 0xbb, 0xd0, 0x21, 0xb6, 0x02, + 0x5d, 0x97, 0x6a, 0xe1, 0xe9, 0xb2, 0x78, 0x29, 0xce, 0x2a, 0xc5, 0xef, 0xd0, + 0xb3, 0x99, 0x28, 0x63, 0xb2, 0xc1, 0x7b, 0x00, 0x78, 0x54, 0xdf, 0x7c, 0xf9, + 0x52, 0x40, 0x96, 0x25, 0x09, 0x30, 0x0e, 0x2d, 0xf7, 0x6c, 0x8f, 0x3a, 0x31, + 0xbb, 0x77, 0xfd, 0x86, 0xa2, 0xf8, 0xc1, 0xb9, 0x8e, 0xfa, 0x6f, 0xff, 0x9d, + 0xc3, 0x3c, 0x48, 0x02, 0x66, 0x76, 0xe1, 0x23, 0x7e, 0x3f, 0x44, 0xf1, 0xa5, + 0x68, 0xa0, 0xae, 0x2b, 0xb9, 0x34, 0xc8, 0x2c, 0x41, 0x42, 0xda, 0x69, 0xd1, + 0x2c, 0x27, ], txid: [ - 0xa3, 0xcb, 0xad, 0xd7, 0xa5, 0x8d, 0x80, 0xa4, 0xc2, 0xf6, 0x18, 0x09, 0xc2, - 0x4a, 0x2f, 0x08, 0x6c, 0x58, 0xce, 0xec, 0xaf, 0x7a, 0xf9, 0x41, 0x4c, 0x38, - 0xbd, 0xbd, 0xc4, 0xe4, 0x6e, 0x98, + 0xda, 0x7e, 0x74, 0xb3, 0x24, 0x39, 0xd1, 0xec, 0xc5, 0xd4, 0xd5, 0x36, 0x6a, + 0xe3, 0x61, 0x0b, 0xb0, 0x79, 0x06, 0xdc, 0xc3, 0xb1, 0x50, 0x96, 0x0c, 0x7b, + 0x3b, 0xef, 0xfb, 0xb6, 0xef, 0x55, ], auth_digest: [ - 0xad, 0x64, 0x58, 0x0e, 0xd3, 0xa2, 0x8a, 0x3b, 0xa4, 0x1e, 0x2d, 0x32, 0x0b, - 0x5f, 0xf2, 0xa0, 0x7f, 0xa1, 0x9d, 0xb0, 0x74, 0xaf, 0xc4, 0x55, 0xe9, 0x2e, - 0x0f, 0x32, 0x6b, 0xe0, 0x8a, 0x6a, + 0xa6, 0x1f, 0x9a, 0x0b, 0x73, 0x60, 0xbe, 0xf1, 0x09, 0xf9, 0x73, 0x2c, 0xe1, + 0x58, 0x93, 0x22, 0xd4, 0x0a, 0xf5, 0xec, 0xda, 0xd1, 0xff, 0x1e, 0x78, 0x71, + 0xe7, 0x99, 0x12, 0x55, 0xb0, 0x9a, ], amounts: vec![], script_pubkeys: vec![], transparent_input: None, sighash_shielded: [ - 0xa3, 0xcb, 0xad, 0xd7, 0xa5, 0x8d, 0x80, 0xa4, 0xc2, 0xf6, 0x18, 0x09, 0xc2, - 0x4a, 0x2f, 0x08, 0x6c, 0x58, 0xce, 0xec, 0xaf, 0x7a, 0xf9, 0x41, 0x4c, 0x38, - 0xbd, 0xbd, 0xc4, 0xe4, 0x6e, 0x98, + 0xda, 0x7e, 0x74, 0xb3, 0x24, 0x39, 0xd1, 0xec, 0xc5, 0xd4, 0xd5, 0x36, 0x6a, + 0xe3, 0x61, 0x0b, 0xb0, 0x79, 0x06, 0xdc, 0xc3, 0xb1, 0x50, 0x96, 0x0c, 0x7b, + 0x3b, 0xef, 0xfb, 0xb6, 0xef, 0x55, ], sighash_all: None, sighash_none: None, @@ -6133,30 +6313,291 @@ pub mod zip_0244 { }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0xc2, - 0xeb, 0x51, 0x8f, 0x68, 0x98, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x9a, + 0x7d, 0xf7, 0x06, 0x40, 0x15, 0xc4, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x68, 0x98, 0x4d, 0x02, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x40, 0x15, 0xc4, 0x03, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x01, 0x28, 0x62, 0x65, 0x6e, 0x35, 0xba, 0x05, 0x00, 0x03, + 0x52, 0x00, 0x51, 0x00, 0x01, 0x3b, 0xec, 0xbe, 0x95, 0x9e, 0xcb, 0x91, 0xcf, + 0x57, 0x1a, 0x87, 0x0d, 0xfb, 0x53, 0xb1, 0x01, 0x02, 0x97, 0x9f, 0x9a, 0xc0, + 0x0f, 0xba, 0x00, 0x15, 0x17, 0xcb, 0x8a, 0x64, 0xe3, 0x63, 0x04, 0x01, 0xe5, + 0x1b, 0x01, 0x2a, 0xea, 0x94, 0x46, 0xa2, 0x10, 0x4e, 0x93, 0xf8, 0x15, 0xa0, + 0xb3, 0xa2, 0x9b, 0x45, 0x83, 0x14, 0xf3, 0xd8, 0xbe, 0x2b, 0x98, 0x23, 0xd3, + 0x42, 0xf4, 0x62, 0x13, 0x05, 0xe5, 0x79, 0xfc, 0xd3, 0xeb, 0x11, 0x97, 0xb4, + 0x58, 0xc5, 0xcf, 0x7a, 0x78, 0xe2, 0x3b, 0xca, 0xde, 0xbf, 0xbf, 0xf7, 0x9f, + 0x0a, 0x89, 0xb6, 0x17, 0xc6, 0x28, 0x36, 0x8c, 0x52, 0x3b, 0x04, 0x16, 0xfc, + 0xbb, 0x05, 0x24, 0xc9, 0xca, 0x50, 0x74, 0x15, 0x6c, 0xc5, 0xa5, 0xd6, 0xfe, + 0x1c, 0x99, 0x5e, 0xdc, 0x60, 0xa2, 0xf5, 0x50, 0x41, 0x1a, 0xa4, 0x1e, 0x3d, + 0xa3, 0xbd, 0xcf, 0x64, 0xbc, 0xf0, 0x4a, 0x05, 0x10, 0x57, 0x1b, 0x93, 0x6d, + 0x47, 0xe5, 0x5c, 0xec, 0x03, 0x30, 0xee, 0x8d, 0xfe, 0x73, 0x56, 0x34, 0x04, + 0xf0, 0x47, 0xd7, 0xf3, 0xa8, 0xa3, 0xd7, 0x74, 0x3b, 0xc5, 0x54, 0x95, 0x52, + 0x10, 0xf1, 0xeb, 0x0d, 0x08, 0x59, 0x9e, 0xa7, 0x7d, 0x5f, 0x97, 0x4d, 0x87, + 0x17, 0x6d, 0x37, 0xd9, 0x8b, 0x9c, 0x0a, 0xd4, 0x40, 0x40, 0x72, 0x09, 0xed, + 0x6a, 0x9f, 0x08, 0x46, 0x4d, 0x56, 0x55, 0x93, 0xe1, 0xa6, 0x3b, 0x93, 0x85, + 0x36, 0xb4, 0x92, 0x44, 0xe9, 0x7d, 0x88, 0x01, 0x73, 0xb6, 0x40, 0xf2, 0xdd, + 0xb7, 0x4d, 0x06, 0x8e, 0xcb, 0x46, 0xcf, 0x28, 0x9b, 0x7d, 0x89, 0x13, 0x07, + 0xbb, 0xa3, 0x70, 0x54, 0xcf, 0x91, 0xb3, 0x1f, 0xc8, 0x2f, 0x74, 0xd5, 0xfc, + 0xc0, 0x00, 0x94, 0x2e, 0xde, 0x91, 0x18, 0x25, 0xf5, 0x3f, 0xe6, 0x09, 0x68, + 0x6f, 0x46, 0x32, 0x23, 0xb1, 0xe9, 0xbc, 0x03, 0xbd, 0xe8, 0x95, 0xd1, 0x23, + 0x8f, 0xad, 0x04, 0xa3, 0xbf, 0xce, 0x68, 0xa0, 0x75, 0xe8, 0xa3, 0x7c, 0x0e, + 0x87, 0xbf, 0x46, 0xdd, 0x01, 0x55, 0x45, 0xf9, 0xb4, 0xfb, 0x0e, 0xec, 0x64, + 0x5f, 0xfc, 0xbb, 0xe0, 0xca, 0x5f, 0x8c, 0x56, 0x1b, 0x25, 0x7d, 0x52, 0xd6, + 0x02, 0xd8, 0xc9, 0x4c, 0x50, 0x28, 0x73, 0xa0, 0x1d, 0x92, 0x51, 0xd8, 0xc8, + 0x60, 0xc0, 0x41, 0x52, 0x5b, 0x3b, 0xf4, 0xe3, 0xa2, 0xeb, 0x92, 0x72, 0x81, + 0x5c, 0x75, 0x86, 0x76, 0x84, 0x28, 0xb4, 0xc2, 0xb2, 0x5e, 0x37, 0x45, 0xf0, + 0x09, 0xc5, 0xdc, 0xe2, 0x0b, 0x69, 0xd5, 0xd7, 0xc4, 0x3c, 0xeb, 0x73, 0x6b, + 0x68, 0x31, 0xe8, 0xc1, 0x10, 0xf1, 0x6c, 0xfd, 0xb3, 0xa4, 0x67, 0xe9, 0x41, + 0x4c, 0x00, 0xec, 0xf1, 0x37, 0x31, 0x50, 0x08, 0x94, 0x55, 0x56, 0x78, 0xc4, + 0x97, 0xfa, 0xba, 0x9a, 0x95, 0xd0, 0x1c, 0xc4, 0x64, 0x39, 0x0f, 0xc4, 0xa7, + 0x6b, 0xfa, 0x8b, 0x0e, 0x1c, 0x68, 0xa5, 0x25, 0xd7, 0x06, 0xd6, 0x60, 0x4b, + 0x23, 0x30, 0xb6, 0xb3, 0x48, 0x52, 0x15, 0xf6, 0x06, 0xf1, 0x88, 0x3a, 0x75, + 0x15, 0x88, 0xc7, 0xef, 0xa5, 0x06, 0xc3, 0xe8, 0xd0, 0xc6, 0x01, 0x92, 0xe8, + 0x47, 0x6b, 0xd1, 0x17, 0x5d, 0x95, 0x62, 0x08, 0x7b, 0xdb, 0x81, 0x8e, 0x66, + 0x21, 0x62, 0x86, 0xba, 0xfe, 0x47, 0xff, 0x4d, 0xbc, 0xce, 0xd5, 0x14, 0x44, + 0x48, 0x0a, 0x9a, 0x56, 0x73, 0xec, 0xe7, 0xfa, 0xc7, 0x3a, 0x0e, 0xd4, 0x1a, + 0xb0, 0x05, 0x17, 0x53, 0xa7, 0xca, 0xa8, 0x9b, 0xe3, 0x13, 0x9a, 0xfd, 0x97, + 0x93, 0xb3, 0xe0, 0x2f, 0x27, 0xf0, 0x40, 0x04, 0x65, 0x95, 0xac, 0xd4, 0x7b, + 0xf1, 0x3f, 0xd0, 0xda, 0x27, 0xf0, 0x9e, 0xda, 0x48, 0x03, 0x6d, 0x3e, 0xe4, + 0x37, 0xf2, 0xee, 0x8f, 0x86, 0x06, 0xea, 0x97, 0x34, 0x3c, 0x33, 0x58, 0x46, + 0x57, 0xf4, 0x6d, 0xba, 0x99, 0xdb, 0x5c, 0xfe, 0x6c, 0xa1, 0x76, 0xfa, 0xb7, + 0xb0, 0xf3, 0xbf, 0xa0, 0xab, 0x61, 0xe3, 0x40, 0xc3, 0x4e, 0xb9, 0xf1, 0x7c, + 0x7e, 0xc2, 0xbe, 0x03, 0xb1, 0x80, 0xf0, 0xbb, 0x6f, 0x43, 0x4c, 0x2a, 0x65, + 0x42, 0xe0, 0x0e, 0x84, 0x37, 0x3f, 0x4f, 0x46, 0x49, 0xcd, 0xa3, 0x2b, 0xf6, + 0x86, 0x66, 0x61, 0x43, 0xf6, 0x22, 0xaa, 0x48, 0x04, 0x60, 0xb5, 0xaf, 0xac, + 0x51, 0x86, 0x07, 0xcd, 0x9a, 0xf8, 0xbc, 0xd6, 0xb5, 0x8c, 0x30, 0x12, 0x73, + 0x16, 0xb2, 0x5d, 0x5e, 0xa7, 0xbf, 0x6b, 0x0c, 0xab, 0x85, 0x42, 0xff, 0x69, + 0xd9, 0xb2, 0xf1, 0x80, 0xbe, 0x12, 0xed, 0x75, 0x34, 0x4a, 0x39, 0x5a, 0xa1, + 0x0f, 0x85, 0x2f, 0x08, 0x3a, 0xd6, 0x4e, 0xf4, 0x0e, 0x9c, 0x03, 0x09, 0xe9, + 0xbb, 0xa5, 0x4b, 0x8c, 0xb3, 0x3c, 0x95, 0x49, 0x8a, 0x69, 0x53, 0x8d, 0x3a, + 0xe5, 0xb2, 0x5e, 0x24, 0x70, 0x98, 0x30, 0x6f, 0xa8, 0xc7, 0x4a, 0x8e, 0xe5, + 0xbc, 0xa9, 0x41, 0x53, 0x1d, 0x61, 0xaa, 0xc2, 0x7a, 0xab, 0x3d, 0xc5, 0x61, + 0x7d, 0x56, 0x06, 0xc9, 0x57, 0x7a, 0x2a, 0x83, 0x46, 0xe8, 0xd8, 0x5b, 0x32, + 0xb8, 0x50, 0x57, 0x75, 0x10, 0x8d, 0xc8, 0x5e, 0x2a, 0xde, 0x2e, 0xac, 0x1e, + 0x63, 0x6e, 0x1a, 0xf4, 0x05, 0x4c, 0x8b, 0x6f, 0x57, 0x63, 0x2d, 0xf2, 0x69, + 0xc3, 0x72, 0x3b, 0x32, 0x08, 0x72, 0xe4, 0xc5, 0x7b, 0x21, 0x83, 0x58, 0xdc, + 0x7e, 0x99, 0x05, 0xbb, 0x04, 0xed, 0xf9, 0x2e, 0xdf, 0x0d, 0xf6, 0x35, 0xf3, + 0xbf, 0x36, 0x1e, 0x57, 0xa1, 0x32, 0x96, 0xbd, 0x03, 0x63, 0x63, 0xbc, 0x4f, + 0x01, 0x00, 0xe1, 0x44, 0x7a, 0xf5, 0x08, 0x78, 0x72, 0xd6, 0x36, 0xe2, 0x75, + 0x18, 0xa9, 0x87, 0x6e, 0x15, 0xeb, 0x01, 0xf5, 0xe8, 0xde, 0xd8, 0x18, 0x92, + 0x51, 0x1c, 0xc2, 0x85, 0x1b, 0x00, 0xb8, 0x32, 0x71, 0x2a, 0x6d, 0x3b, 0xa5, + 0x66, 0x65, 0x17, 0xbc, 0xd3, 0x56, 0x76, 0x21, 0xa7, 0xcf, 0x84, 0x45, 0x58, + 0x96, 0x53, 0x26, 0x20, 0x20, 0xc3, 0x3b, 0xf7, 0x80, 0x31, 0xb8, 0xee, 0x07, + 0x07, 0xde, 0x07, 0x20, 0x68, 0xc1, 0x70, 0x57, 0x03, 0x27, 0xe6, 0xd9, 0xf5, + 0xc6, 0xdd, 0xc3, 0x35, 0x40, 0x2e, 0xfc, 0x54, 0x88, 0x62, 0xf5, 0xa0, 0x70, + 0x94, 0xfd, 0x42, 0x8a, 0x7b, 0xbc, 0x15, 0xd7, 0xb3, 0x8d, 0x05, 0x36, 0x2c, + 0x9c, 0xa9, 0x85, 0xf5, 0x8a, 0x76, 0x64, 0x7d, 0x2b, 0xe4, 0xc2, 0xcd, 0x6b, + 0x3d, 0x17, 0xd6, 0x87, 0x09, 0x71, 0xd7, 0xa0, 0x98, 0xba, 0xf7, 0x2c, 0x6f, + 0x6f, 0x12, 0x14, 0xcf, 0x1f, 0xaa, 0xe4, 0x88, 0xbd, 0x7d, 0xe2, 0x59, 0xd3, + 0x41, 0x5c, 0x2f, 0x0d, 0xde, 0xc7, 0x45, 0x70, 0x04, 0xf3, 0x57, 0x08, 0xd1, + 0xec, 0xcc, 0xcc, 0x0d, 0xf6, 0x5a, 0x04, 0x94, 0x3a, 0xd5, 0xcb, 0xc1, 0x3f, + 0x29, 0x5f, 0x00, 0x0f, 0xe0, 0x56, 0xc4, 0x0b, 0x2d, 0x88, 0xf2, 0x7d, 0xc3, + 0x4c, 0xfe, 0xb8, 0x03, 0xbe, 0x34, 0x83, 0xa9, 0xeb, 0xf9, 0xb5, 0xa9, 0x34, + 0xec, 0xcf, 0xef, 0x5a, 0xb5, 0xb5, 0x93, 0xa7, 0xb1, 0x5b, 0xef, 0x41, 0xd6, + 0xcf, 0xca, 0xa3, 0x1c, 0x69, 0x63, 0x83, 0xa6, 0x43, 0xac, 0x4f, 0xb8, 0xe0, + 0x3b, 0x3b, 0x5a, 0xf9, 0x9a, 0xae, 0x28, 0xb1, 0x1b, 0x3e, 0xb5, 0x41, 0x0d, + 0xc6, 0x7f, 0x6f, 0x63, 0x77, 0xcf, 0x84, 0x46, 0x75, 0x8b, 0x21, 0x07, 0x9a, + 0xb5, 0x7a, 0xb6, 0xaf, 0x7d, 0x64, 0x3b, 0x78, 0x4f, 0xa6, 0x0b, 0x00, + ], + txid: [ + 0x48, 0xe6, 0x50, 0x72, 0xe4, 0x0f, 0xaa, 0xf6, 0x59, 0xd6, 0xfa, 0xdb, 0x2a, + 0x07, 0x73, 0x6b, 0x9a, 0x26, 0x58, 0x0c, 0x4e, 0xd3, 0x6d, 0xe7, 0x77, 0x3b, + 0x3a, 0xbd, 0x43, 0xec, 0x45, 0x81, + ], + auth_digest: [ + 0xb8, 0xe8, 0x4e, 0xc7, 0x97, 0xf4, 0x8b, 0x58, 0xc3, 0xba, 0xee, 0xaf, 0x20, + 0x1c, 0xf0, 0x01, 0x93, 0x6a, 0x5c, 0xef, 0xaa, 0x3e, 0x8a, 0xdf, 0x27, 0xdc, + 0x10, 0x0b, 0xd7, 0x68, 0xec, 0x9b, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0x48, 0xe6, 0x50, 0x72, 0xe4, 0x0f, 0xaa, 0xf6, 0x59, 0xd6, 0xfa, 0xdb, 0x2a, + 0x07, 0x73, 0x6b, 0x9a, 0x26, 0x58, 0x0c, 0x4e, 0xd3, 0x6d, 0xe7, 0x77, 0x3b, + 0x3a, 0xbd, 0x43, 0xec, 0x45, 0x81, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x6a, + 0xc4, 0xe4, 0x6c, 0xc0, 0xca, 0x87, 0x09, 0x00, 0x00, 0x00, 0x02, 0xd5, 0x28, + 0x42, 0x60, 0x65, 0xa2, 0xe0, 0x64, 0x61, 0x08, 0x55, 0xd7, 0x27, 0x41, 0x26, + 0x08, 0xa3, 0xfa, 0xb9, 0x79, 0xb1, 0x47, 0xf3, 0xe4, 0xbe, 0x7b, 0xbc, 0x89, + 0xcb, 0x48, 0x2c, 0xbf, 0x1e, 0x1b, 0x58, 0x0d, 0x35, 0xc3, 0xa9, 0x52, 0x93, + 0xaf, 0x26, 0x4a, 0x11, 0xbb, 0x2c, 0xfe, 0x79, 0x83, 0xa0, 0xa8, 0xee, 0x86, + 0x93, 0xdc, 0x39, 0xdc, 0xb6, 0x4e, 0x85, 0x63, 0xf7, 0x54, 0x16, 0x02, 0xc7, + 0x60, 0x4f, 0x75, 0x36, 0x97, 0x7a, 0x67, 0x8d, 0x90, 0xbe, 0x2e, 0xdd, 0x6f, + 0xec, 0x31, 0x53, 0x83, 0xa4, 0x81, 0x47, 0x5f, 0x87, 0xc7, 0x0a, 0x05, 0xcf, + 0x1f, 0xd9, 0xba, 0x3c, 0xea, 0xe7, 0xd3, 0x41, 0x9b, 0x1f, 0xca, 0x26, 0x5a, + 0x55, 0x59, 0xcf, 0x9e, 0x2d, 0x3b, 0x60, 0x97, 0x8d, 0x81, 0xa6, 0x78, 0xb9, + 0xed, 0x8e, 0x44, 0x86, 0xb4, 0xd1, 0x46, 0x09, 0xd6, 0xc1, 0x27, 0xc0, 0xc2, + 0xfb, 0xff, 0xe3, 0x0a, 0x60, 0xf7, 0xbf, 0xf1, 0xd9, 0xfb, 0x83, 0x00, 0xed, + 0x00, 0x92, 0x53, 0xba, 0x9b, 0x99, 0x6f, 0xa0, 0x52, 0x41, 0xb1, 0x0f, 0x5a, + 0xc9, 0xa8, 0x40, 0x8e, 0x92, 0x5b, 0x62, 0x6b, 0xb2, 0x1a, 0x47, 0x1f, 0xe3, + 0xbe, 0xde, 0x52, 0xbb, 0xa0, 0x97, 0xb2, 0xa9, 0x9a, 0x9b, 0xa5, 0xa8, 0x66, + 0x58, 0xc3, 0xfd, 0x9e, 0xc5, 0x5b, 0xfa, 0x9b, 0x32, 0x85, 0x67, 0x25, 0x4a, + 0xb3, 0x6d, 0x2c, 0x7f, 0x44, 0xd2, 0xc7, 0xe1, 0x3e, 0xb5, 0x4b, 0xeb, 0x70, + 0xea, 0x8f, 0xa9, 0x4b, 0x6c, 0x6e, 0x01, 0x2d, 0x79, 0xe3, 0xf5, 0x36, 0x89, + 0xc2, 0xb1, 0xa1, 0x8e, 0xaf, 0x2d, 0x47, 0x1d, 0x13, 0xc1, 0xab, 0x39, 0xd9, + 0x19, 0x4a, 0xe8, 0x43, 0xab, 0x1d, 0x28, 0xff, 0xa8, 0xf6, 0x9d, 0xc7, 0xe1, + 0x5c, 0xc3, 0x8b, 0x12, 0xe8, 0xfc, 0xd7, 0x92, 0x55, 0xb7, 0x21, 0x60, 0x56, + 0xd9, 0xed, 0xb7, 0x48, 0x2f, 0xb9, 0x8a, 0xa0, 0x33, 0xb6, 0x5e, 0x51, 0xc1, + 0xa0, 0x8b, 0x8a, 0x11, 0xd8, 0x4d, 0x04, 0x09, 0xb7, 0x34, 0xf4, 0x52, 0xaa, + 0xf0, 0xd6, 0xb1, 0x8f, 0x50, 0x25, 0x86, 0x83, 0xd3, 0xf9, 0xa7, 0x6d, 0x39, + 0x9f, 0xd0, 0x47, 0xee, 0xe2, 0x88, 0xbb, 0x45, 0x85, 0x85, 0x1d, 0xc9, 0x3e, + 0xcc, 0xc6, 0x23, 0x22, 0x92, 0x4c, 0xd1, 0x3b, 0x5d, 0xd4, 0xee, 0xd6, 0x6e, + 0xd8, 0xd9, 0x97, 0x2d, 0x77, 0x26, 0x29, 0xea, 0x64, 0x74, 0x2e, 0x54, 0x73, + 0x39, 0x81, 0xb0, 0x06, 0xc0, 0x62, 0x46, 0x8e, 0x4b, 0xd8, 0xf7, 0xdd, 0x9a, + 0xf6, 0x98, 0xf5, 0x2a, 0xe8, 0x14, 0x63, 0x4e, 0x81, 0xd7, 0xf3, 0xe0, 0xc4, + 0x20, 0x31, 0x7c, 0xac, 0xa9, 0xae, 0x48, 0x11, 0xc6, 0xaf, 0x06, 0xfe, 0x80, + 0xa8, 0xc0, 0x2a, 0xb7, 0xa0, 0x0e, 0x18, 0xe4, 0xa6, 0xaa, 0x1e, 0xa1, 0xb7, + 0x69, 0x45, 0xd2, 0x61, 0x5d, 0x43, 0xac, 0x11, 0x8b, 0x56, 0xc2, 0xf2, 0x96, + 0x0f, 0xe9, 0x3a, 0x02, 0x5f, 0x13, 0xec, 0x91, 0xff, 0xc6, 0xd2, 0xc3, 0x53, + 0x69, 0x9a, 0xbb, 0x09, 0x2d, 0xed, 0xc0, 0x65, 0xdb, 0x8f, 0xa2, 0x14, 0xdb, + 0xc4, 0x64, 0x66, 0xf8, 0x97, 0xb8, 0x8c, 0x58, 0xb3, 0x01, 0x52, 0x13, 0x3a, + 0xa3, 0x83, 0x1a, 0xf3, 0x7c, 0x74, 0xd9, 0x9e, 0x9e, 0x36, 0xff, 0x70, 0x11, + 0xd3, 0x23, 0x83, 0x05, 0x69, 0x15, 0x08, 0xa2, 0xc3, 0xa4, 0x3e, 0x75, 0x5d, + 0xc0, 0x81, 0xb5, 0x11, 0xd6, 0x48, 0x2a, 0x7d, 0xb6, 0x5f, 0xa9, 0x69, 0x9e, + 0xa8, 0x7f, 0xf4, 0x70, 0x99, 0xed, 0x36, 0x37, 0xdb, 0xb0, 0xa3, 0xd0, 0xef, + 0x79, 0x79, 0x6a, 0x8e, 0xf1, 0xe4, 0xd9, 0x4d, 0x42, 0xb4, 0xbc, 0x2b, 0x4a, + 0x03, 0x8a, 0xe6, 0xe4, 0x6b, 0x24, 0xcf, 0xc8, 0x41, 0x53, 0xd3, 0x1e, 0xaf, + 0x89, 0x50, 0x63, 0xa5, 0xca, 0x95, 0x9b, 0xe6, 0x3f, 0x37, 0xf2, 0xba, 0x0d, + 0x43, 0x23, 0x66, 0x73, 0x6d, 0x86, 0x32, 0xfc, 0xe0, 0x72, 0xb6, 0xae, 0x5b, + 0x6f, 0x3f, 0xd5, 0x9d, 0x3f, 0xaf, 0xf6, 0x38, 0x27, 0x5a, 0x99, 0x2f, 0xef, + 0xc8, 0x7e, 0x60, 0xd4, 0x4c, 0x2c, 0xad, 0xc2, 0xb5, 0xc4, 0x94, 0xe3, 0xe7, + 0x2e, 0xb4, 0x59, 0x7c, 0x96, 0xb4, 0x01, 0x67, 0x79, 0x9a, 0x90, 0x01, 0xa2, + 0xed, 0x36, 0x76, 0xa8, 0xb4, 0x03, 0xae, 0x25, 0xff, 0xd7, 0x72, 0xf7, 0x08, + 0x1e, 0x9a, 0x32, 0xbc, 0xc1, 0xc5, 0xe2, 0xed, 0xd4, 0xe2, 0xa6, 0x57, 0x6b, + 0x78, 0x3c, 0xce, 0x3a, 0xae, 0x11, 0xfa, 0x43, 0x22, 0x62, 0x54, 0x88, 0x56, + 0x18, 0x3e, 0xe6, 0x82, 0xd5, 0xdc, 0x31, 0xbe, 0xb3, 0x8f, 0x06, 0x1c, 0xbd, + 0xec, 0xa7, 0x02, 0x1a, 0x44, 0x4e, 0x2d, 0xd4, 0x17, 0xdf, 0x26, 0xdc, 0xd2, + 0x20, 0xf2, 0xb7, 0x31, 0x77, 0x2b, 0x43, 0x9e, 0x96, 0xd6, 0x14, 0xe1, 0xfa, + 0xcb, 0x48, 0x6c, 0x7a, 0x7d, 0x51, 0x71, 0xb1, 0xde, 0x35, 0x9f, 0x6a, 0xd3, + 0xa9, 0x6f, 0x64, 0x9c, 0x96, 0x91, 0x02, 0xa1, 0x96, 0x4f, 0xb4, 0xb4, 0xa1, + 0xa4, 0x27, 0x9c, 0x68, 0xe6, 0xc3, 0x72, 0xe4, 0x21, 0x87, 0xd7, 0x54, 0xe8, + 0x04, 0xa6, 0x16, 0x53, 0x09, 0x20, 0x69, 0xfb, 0x9b, 0x6d, 0x25, 0x26, 0x68, + 0x90, 0x80, 0x8b, 0x01, 0x5d, 0xf2, 0x8c, 0x80, 0x10, 0x65, 0xda, 0x6f, 0xeb, + 0xdc, 0x1a, 0x56, 0xbf, 0xd0, 0x02, 0x62, 0x5a, 0xcf, 0xaa, 0x53, 0x73, 0xfd, + 0xe1, 0x49, 0xc1, 0xcf, 0xc3, 0x64, 0x9b, 0x48, 0x69, 0x69, 0x6d, 0x44, 0xec, + 0xaf, 0x0a, 0x59, 0x95, 0x5e, 0x79, 0xe4, 0xec, 0x15, 0x2b, 0x19, 0x77, 0x71, + 0x69, 0x18, 0xe0, 0xcd, 0x4b, 0xb4, 0xa7, 0x88, 0x8d, 0xae, 0x93, 0x9a, 0xa6, + 0x1a, 0xda, 0x08, 0xd9, 0xb0, 0x8f, 0xd9, 0xc0, 0x68, 0x93, 0xbd, 0x02, 0xdb, + 0x9b, 0x61, 0x19, 0x1d, 0xfb, 0x13, 0x3b, 0xfa, 0xbe, 0x48, 0x58, 0xe4, 0x7a, + 0x4c, 0xc3, 0x2e, 0x41, 0x6e, 0xc0, 0x8b, 0x8a, 0xc7, 0x91, 0x5a, 0x43, 0x91, + 0x83, 0xd2, 0xba, 0x23, 0x58, 0x34, 0x99, 0xf0, 0xe4, 0xd2, 0x3a, 0x59, 0x76, + 0x9b, 0x00, 0xbf, 0x7c, 0xff, 0x6d, 0x34, 0x83, 0xaa, 0x33, 0xc3, 0xdc, 0x0e, + 0x17, 0x5e, 0x85, 0x9c, 0x4a, 0xeb, 0xb4, 0x8f, 0xaf, 0x58, 0xf1, 0xb6, 0x5d, + 0xca, 0x24, 0x97, 0xe0, 0x9a, 0x70, 0xaa, 0xd4, 0x86, 0x5f, 0x85, 0x71, 0x5a, + 0x28, 0x0e, 0x18, 0x6f, 0x3f, 0xc1, 0x74, 0x0d, 0x81, 0x84, 0xd3, 0x3e, 0x83, + 0x22, 0x16, 0x95, 0x21, 0xcd, 0xc1, 0x32, 0x21, 0x29, 0x39, 0xc8, 0x4a, 0x10, + 0x89, 0x64, 0xe2, 0xde, 0x74, 0xb6, 0xea, 0x55, 0xb4, 0xcb, 0x8f, 0x6f, 0x9b, + 0xee, 0x98, 0xb1, 0x0d, 0x41, 0x51, 0x09, 0x45, 0x5f, 0x48, 0xb7, 0x76, 0x08, + 0x2d, 0xc3, 0x0b, 0x4b, 0xc7, 0x34, 0x77, 0x07, 0x55, 0x11, 0x70, 0x03, 0x08, + 0x15, 0x8c, 0xe2, 0xf2, 0xf9, 0xbf, 0x0f, 0x69, 0x1b, 0x2c, 0xe5, 0x3e, 0x61, + 0x14, 0x2c, 0xb7, 0x40, 0xc1, 0x5b, 0x7b, 0x62, 0x3c, 0xf4, 0x8b, 0x3f, 0x7b, + 0xfe, 0xfa, 0x31, 0xbc, 0xdc, 0x66, 0x5c, 0x6d, 0x71, 0x23, 0xe9, 0x53, 0x50, + 0x81, 0x13, 0x75, 0x94, 0x7b, 0x05, 0x5a, 0x43, 0xdb, 0x07, 0xe0, 0x3f, 0x33, + 0x62, 0x7d, 0xf5, 0xc6, 0x38, 0xbf, 0xad, 0x95, 0x6d, 0xdc, 0x1e, 0xa7, 0xd7, + 0x62, 0x0a, 0x20, 0xf2, 0x79, 0x2f, 0x63, 0x81, 0x7a, 0x1c, 0xf3, 0x25, 0x80, + 0xd0, 0x42, 0x74, 0x23, 0x4a, 0xf2, 0xa5, 0x1b, 0x56, 0xbb, 0x68, 0xa2, 0x9e, + 0x43, 0xa9, 0x54, 0x14, 0x2b, 0xa4, 0xca, 0x68, 0x23, 0xbd, 0xe9, 0x05, 0x3d, + 0x72, 0xfd, 0xad, 0xbc, 0x61, 0xad, 0x59, 0x36, 0xc5, 0x3f, 0xdd, 0x75, 0x79, + 0x44, 0x6d, 0x11, 0xc4, 0x46, 0x07, 0xf4, 0x16, 0x30, 0xe4, 0xc0, 0x89, 0x15, + 0xe6, 0x31, 0x77, 0x15, 0x50, 0xe9, 0xce, 0x1f, 0xca, 0x2c, 0x63, 0xfe, 0x06, + 0xb7, 0x98, 0x9d, 0x58, 0x4f, 0xa7, 0xd7, 0x82, 0xa8, 0x8c, 0x1e, 0x7d, 0x64, + 0xb6, 0xfb, 0xf5, 0x5e, 0x35, 0x96, 0xaf, 0x9b, 0xcb, 0x75, 0x85, 0xf8, 0xc7, + 0xd3, 0xaa, 0x5c, 0x20, 0x82, 0xb2, 0x65, 0x24, 0x9d, 0xf0, 0x57, 0x01, 0xda, + 0xb0, 0x31, 0xc4, 0xba, 0xc1, 0xea, 0x26, 0x7a, 0x29, 0x96, 0xa2, 0x02, 0x8d, + 0x1e, 0x6a, 0x0f, 0x80, 0xa3, 0x84, 0x7c, 0x53, 0x1d, 0xba, 0x96, 0xee, 0x65, + 0xa2, 0x41, 0x89, 0xbd, 0x27, 0x12, 0xe4, 0x0e, 0x95, 0x96, 0x64, 0x98, 0x1e, + 0x58, 0xb2, 0xa4, 0xf9, 0x51, 0xef, 0x8f, 0x49, 0x7d, 0xff, 0xf2, 0xf2, 0xf2, + 0x71, 0xea, 0xb8, 0x9c, 0x62, 0x8e, 0x18, 0xb5, 0xfc, 0xb4, 0x38, 0x82, 0x53, + 0x7e, 0xaf, 0x6a, 0xd2, 0xa6, 0xb1, 0x75, 0x46, 0x33, 0xca, 0xa8, 0x6b, 0xf2, + 0xc7, 0x6f, 0x39, 0x93, 0x15, 0x4f, 0xc7, 0x3e, 0x6f, 0xbb, 0xa2, 0x21, 0x0c, + 0x27, 0x43, 0xf5, 0x30, 0xa4, 0x27, 0x84, 0x9a, 0x30, 0x1e, 0x00, 0xe0, 0x11, + 0x29, 0xf0, 0x3a, 0x46, 0x07, 0xf8, 0x7c, 0xbe, 0x07, 0x62, 0xc0, 0xb1, 0xc6, + 0x58, 0x55, 0xde, 0xba, 0x84, 0x22, 0xca, 0x4b, 0x88, 0xab, 0xee, 0xa6, 0xa4, + 0x38, 0x2c, 0xf1, 0x6c, 0xcd, 0x6d, 0xc7, 0xc3, 0x7c, 0x44, 0xe5, 0x49, 0xc4, + 0x53, 0x48, 0x19, 0xac, 0xd8, 0xbb, 0x0a, 0x02, 0xa5, 0xfa, 0x7a, 0x1c, 0x1d, + 0x38, 0x06, 0xfb, 0xc3, 0x40, 0x7f, 0xd7, 0xda, 0x93, 0xfd, 0x0d, 0xe6, 0x40, + 0x0d, 0x3a, 0xb8, 0x97, 0x74, 0x85, 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, 0x50, + 0x7b, 0x79, 0x94, 0x7a, 0xdb, 0x2f, 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, 0xdb, + 0x5f, 0x29, 0x80, 0x99, 0xf2, 0x0f, 0x26, 0x3b, 0x35, 0x9a, 0x11, 0x51, 0xa6, + 0xb7, 0x5c, 0x01, 0x36, 0x5e, 0xb1, 0x54, 0xae, 0x42, 0x14, 0x0d, 0x6e, 0x10, + 0x34, 0x2f, 0x14, 0xf3, 0x4d, 0xc3, 0x3e, 0x07, 0xff, 0x0e, 0x4d, 0x1a, 0x6b, + 0xe3, 0x75, 0xb3, 0x2f, 0x84, 0xb9, 0x2e, 0x5d, 0x81, 0xeb, 0xb6, 0x39, 0xc4, + 0xf2, 0x7e, 0x71, 0x5a, 0xa4, 0x2c, 0xc7, 0x57, 0x07, 0xd4, 0xeb, 0xd1, 0xbb, + 0xfb, 0xe8, 0xf9, 0x0f, 0xc7, 0xc9, 0x53, 0xe7, 0xa9, 0x71, 0x5e, 0x65, 0xaf, + 0x82, 0x67, 0x37, 0x3d, 0x34, 0x51, 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, 0x2c, + 0xcf, 0x3b, 0xcc, 0x7a, 0xca, 0x14, 0x67, 0xb6, 0x32, 0x7e, 0x4f, 0x95, 0x22, + 0xb2, 0xcc, 0x57, 0x9a, 0x7a, 0x8f, 0xff, 0x7c, 0xa7, 0xcf, 0x14, 0x5d, 0xfc, + 0x13, 0xea, 0xfc, 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, 0xfb, 0xe5, 0x34, 0x44, + 0xd0, 0xc7, 0x3b, 0x3b, 0xd5, 0xbc, 0x87, 0x0b, 0x01, 0xcd, 0x45, 0x79, 0x11, + 0xe3, 0x56, 0x31, 0x3f, 0xd1, 0xda, 0xfb, 0x4c, 0x81, 0x51, 0x63, 0x4a, 0x01, + 0xaf, 0xf7, 0xcf, 0x11, 0x6d, 0x43, 0x3c, 0x3d, 0x2b, 0x3a, 0xdd, 0xa9, 0xce, + 0xbe, 0x18, 0xf7, 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, 0x5a, 0xc9, 0xab, 0xe8, + 0xdb, 0x22, 0x56, 0xd7, 0xeb, 0xe2, 0xff, 0x28, 0x02, 0x09, 0x39, 0x50, 0x38, + 0x70, 0x59, 0x7a, 0x60, 0x05, 0x18, 0xcc, 0x48, 0x06, 0x00, 0xb1, 0x24, 0x79, + 0xc5, 0xeb, 0xef, 0x99, 0x5f, 0x10, 0x02, 0x9f, 0x8b, 0x53, 0x0e, 0xeb, 0x3f, + 0xdc, 0x2e, 0x50, 0xe8, 0x75, 0x7f, 0xc0, 0xbb, 0x9e, 0x26, 0x30, 0x23, 0xdb, + 0x82, 0xf8, 0x78, 0xd9, 0xac, 0x7f, 0xfb, 0x0b, 0xd4, 0x39, 0x1d, 0xf1, 0xd8, + 0x79, 0x89, 0x9a, 0x3e, 0xf5, 0x7b, 0xfd, 0x0d, 0x1f, 0x77, 0x55, 0x64, 0x8e, + 0xdd, 0x85, 0xbb, 0x05, 0x2a, 0x6e, 0xdf, 0x71, 0xcd, 0x26, 0x28, 0xc9, 0x87, + 0x42, 0x9f, 0x36, 0xdc, 0x50, 0x5c, 0xcc, 0x43, 0xf3, 0x0e, 0x7a, 0x86, 0x9c, + 0x9e, 0x25, 0x5e, 0x2a, 0xf9, 0xfc, 0xf3, 0x0c, 0x12, 0x17, 0x96, 0xd1, 0x90, + 0x00, 0x09, 0x60, 0xcb, 0x6f, 0xe2, 0xf1, 0xbf, 0x24, 0x61, 0x18, 0xb4, 0x98, + 0xf3, 0x24, 0x7f, 0x9d, 0x48, 0x4c, 0x73, 0xcf, 0x09, 0x39, 0x30, 0x39, 0xe4, + 0x53, 0x26, 0xb8, 0xff, 0xff, 0xb3, 0xe7, 0xe6, 0x15, 0x9c, 0x46, 0x69, 0x9f, + 0x10, 0x07, 0x92, 0xd4, 0x67, 0x29, 0x50, 0x34, 0x8a, 0x90, 0x55, 0x2e, 0x45, + 0x94, 0x3b, 0xee, 0xac, 0xf0, 0x3f, 0x32, 0x16, 0xf9, 0x4e, 0x27, 0x4d, 0x63, + 0xd6, 0x37, 0xd9, 0xf1, 0x90, 0xe8, 0xa2, 0x66, 0xcd, 0xee, 0xf1, 0x53, 0x53, + 0x0b, 0xee, 0x5c, 0xb8, 0x35, 0x52, 0x60, 0x50, 0x5c, 0x2c, 0x2e, 0x5d, 0x99, + 0x0f, 0xff, 0xdc, 0x34, 0xec, 0x0f, 0xf7, 0x7b, 0x9a, 0x95, 0x58, 0x92, 0xc7, + 0x38, 0x96, 0x50, 0xa2, 0xd4, 0x2e, 0xc9, 0x2b, 0xe7, 0x23, 0xfe, 0xdf, 0x2f, + 0x2e, 0xde, 0x5a, 0x47, 0x2a, 0xa1, 0xe7, 0x4f, 0x33, 0xad, 0x41, 0x90, 0x15, + 0x44, 0xed, 0xbb, 0xe3, 0xac, 0x46, 0x4c, 0xf4, 0x39, 0x19, 0x60, 0x15, 0xf4, + 0xf2, 0x2a, 0xc2, 0xb8, 0xfc, 0x01, 0x49, 0x6b, 0xea, 0xb4, 0xd4, 0x59, 0x07, + 0xf4, 0x79, 0x81, 0x2a, 0x25, 0x94, 0x31, 0xa2, 0xcb, 0xc9, 0x3d, 0x4f, 0x3b, + 0x84, 0xe4, 0xdd, 0x36, 0x60, 0x20, 0x27, 0x3a, 0x67, 0x52, 0xe5, 0x01, 0xaf, + 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, 0x81, 0x7e, 0x6e, 0xa3, 0x51, 0xd6, 0x00, 0x6b, + 0xec, 0xf8, 0xd2, 0xff, 0xb0, 0x39, 0x90, 0xf6, 0x77, 0x74, 0xa8, 0x1e, 0x05, + 0xb7, 0xf4, 0xbb, 0xad, 0x85, 0x77, 0xfa, 0x27, 0xc9, 0xde, 0x64, 0xe1, 0xb1, + 0x1d, 0xcf, 0x38, 0x4f, 0x59, 0x56, 0x44, 0x37, 0x48, 0x75, 0x5a, 0x9f, 0xc6, + 0xf2, 0xa0, 0x0b, 0x10, 0xc3, 0x65, 0x7e, 0xba, 0xc0, 0x3b, 0xfc, 0x0b, 0x58, + 0x7b, 0xef, 0x2f, 0x45, 0xec, 0x8a, 0xcd, 0xaa, 0x51, 0xc1, 0x43, 0xb0, 0xcb, + 0x25, 0xb9, 0x14, 0x2c, 0x61, 0xbd, 0x79, 0x0a, 0x80, 0xd7, 0xc2, 0x3f, 0x90, + 0xcc, 0x03, 0x49, 0x5b, 0x51, 0xe4, 0xd2, 0x84, 0x3e, 0x55, 0x7f, 0x9e, 0x25, + 0x45, 0x10, 0x8c, 0x6c, 0x67, 0x5d, 0x01, 0x2b, 0x55, 0xbe, 0x19, 0xbf, 0x59, + 0xb3, 0x19, 0x16, 0x86, 0x7c, 0x68, 0xb8, 0x77, 0xc4, 0x87, 0xc5, 0xd9, 0xe3, + 0x24, 0x3e, 0xb6, 0x4d, 0xcc, 0x94, 0x89, 0xd0, 0x25, 0xdf, 0x33, 0x94, 0x95, + 0x99, 0x67, 0xd6, 0xb9, 0xa4, 0x50, 0x15, 0x1a, 0x84, 0xe7, 0x88, 0x23, 0xb4, + 0x73, 0xc7, 0x51, 0xfd, 0x2d, 0xbd, 0x3d, 0xef, 0x38, 0x03, 0x95, 0x40, 0x08, + 0x63, 0x06, 0x02, 0x00, ], txid: [ - 0x28, 0xd1, 0x6c, 0x3c, 0xd7, 0x8a, 0x6b, 0x7a, 0x50, 0xb1, 0x1a, 0x1b, 0x84, - 0x17, 0x76, 0x4c, 0x4e, 0x63, 0xc6, 0xe3, 0xd8, 0xaa, 0x28, 0x9f, 0x7e, 0x87, - 0xe3, 0x98, 0x45, 0x87, 0x27, 0x64, + 0xb6, 0x0e, 0x29, 0xf5, 0xa8, 0xe1, 0x20, 0x7a, 0x90, 0x81, 0xa0, 0x7f, 0x86, + 0x4d, 0xc3, 0xa5, 0x50, 0x50, 0xfb, 0x8d, 0xeb, 0xe9, 0xe1, 0xe9, 0x7f, 0x86, + 0x67, 0x45, 0xf0, 0xc5, 0xf0, 0xc5, ], auth_digest: [ - 0x33, 0x21, 0x55, 0xb1, 0xcc, 0x23, 0xa2, 0x57, 0x1e, 0x86, 0xe4, 0x9e, 0x06, - 0x01, 0x0c, 0xd2, 0x53, 0x21, 0xdc, 0xfc, 0xca, 0x34, 0xae, 0x14, 0xe8, 0xb3, - 0xf4, 0xf0, 0x02, 0x70, 0xd2, 0x87, + 0x22, 0xb9, 0x0a, 0x71, 0x0f, 0x89, 0x07, 0xbc, 0xb1, 0x4f, 0x44, 0xa3, 0x4a, + 0xe3, 0xf9, 0x9a, 0xcd, 0x39, 0x7a, 0xb2, 0x18, 0x70, 0x7f, 0xaf, 0x9c, 0x15, + 0xa6, 0xad, 0x39, 0x26, 0x75, 0x98, ], amounts: vec![], script_pubkeys: vec![], transparent_input: None, sighash_shielded: [ - 0x28, 0xd1, 0x6c, 0x3c, 0xd7, 0x8a, 0x6b, 0x7a, 0x50, 0xb1, 0x1a, 0x1b, 0x84, - 0x17, 0x76, 0x4c, 0x4e, 0x63, 0xc6, 0xe3, 0xd8, 0xaa, 0x28, 0x9f, 0x7e, 0x87, - 0xe3, 0x98, 0x45, 0x87, 0x27, 0x64, + 0xb6, 0x0e, 0x29, 0xf5, 0xa8, 0xe1, 0x20, 0x7a, 0x90, 0x81, 0xa0, 0x7f, 0x86, + 0x4d, 0xc3, 0xa5, 0x50, 0x50, 0xfb, 0x8d, 0xeb, 0xe9, 0xe1, 0xe9, 0x7f, 0x86, + 0x67, 0x45, 0xf0, 0xc5, 0xf0, 0xc5, ], sighash_all: None, sighash_none: None, @@ -6167,31 +6608,33 @@ pub mod zip_0244 { }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x5e, - 0x3d, 0xba, 0xf7, 0xae, 0x12, 0x67, 0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x54, + 0xb2, 0x07, 0xb4, 0x1f, 0x63, 0x7b, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0xae, 0x12, 0x67, 0x0d, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x01, 0x51, 0x6c, 0xf4, 0xad, 0xec, 0x75, 0x07, 0x00, 0x03, - 0x65, 0x65, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x1f, 0x63, 0x7b, 0x1d, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x03, 0x10, 0xa4, 0xfe, 0xf5, 0x63, 0x14, 0x00, 0x00, 0x00, + 0x69, 0xb9, 0xc1, 0xe9, 0xdb, 0x6a, 0x04, 0x00, 0x05, 0x00, 0x00, 0x51, 0x00, + 0xac, 0x8f, 0x97, 0x7c, 0x48, 0xd6, 0x4b, 0x05, 0x00, 0x04, 0x52, 0x00, 0x53, + 0x63, 0x00, 0x00, 0x00, ], txid: [ - 0x6b, 0xf4, 0xef, 0xe7, 0x7a, 0xf6, 0x9b, 0x72, 0x19, 0x47, 0x5f, 0x60, 0xa0, - 0xf7, 0x92, 0xdb, 0x02, 0x63, 0xe4, 0xe1, 0x2f, 0xa1, 0xd9, 0xee, 0x1a, 0x1b, - 0x9a, 0x68, 0x54, 0x05, 0x90, 0xda, + 0xdb, 0x52, 0x60, 0x61, 0xdd, 0x87, 0x24, 0x3a, 0xa9, 0xd7, 0xcd, 0x18, 0x2f, + 0x20, 0xb5, 0x72, 0xee, 0x34, 0x9b, 0x84, 0x58, 0xf6, 0x81, 0x6f, 0x90, 0x32, + 0xd0, 0xe2, 0xd5, 0x60, 0x96, 0x95, ], auth_digest: [ - 0x99, 0x3b, 0xfc, 0xa6, 0x14, 0x99, 0x75, 0xa4, 0x01, 0x37, 0x97, 0xea, 0xd5, - 0x58, 0x39, 0xa1, 0x3a, 0x0f, 0xb1, 0x52, 0xf6, 0x83, 0x72, 0xbb, 0x0e, 0x0f, - 0xd9, 0x49, 0x94, 0x77, 0xf9, 0x03, + 0xdc, 0x7c, 0xe6, 0x6d, 0x95, 0xbd, 0x18, 0x80, 0x91, 0x01, 0xb2, 0xd1, 0xa3, + 0x5b, 0x71, 0x1d, 0xf0, 0x43, 0x64, 0xe9, 0x50, 0xe0, 0x8b, 0xf9, 0x30, 0xc7, + 0x04, 0x11, 0x93, 0x0e, 0x4e, 0xbd, ], amounts: vec![], script_pubkeys: vec![], transparent_input: None, sighash_shielded: [ - 0x6b, 0xf4, 0xef, 0xe7, 0x7a, 0xf6, 0x9b, 0x72, 0x19, 0x47, 0x5f, 0x60, 0xa0, - 0xf7, 0x92, 0xdb, 0x02, 0x63, 0xe4, 0xe1, 0x2f, 0xa1, 0xd9, 0xee, 0x1a, 0x1b, - 0x9a, 0x68, 0x54, 0x05, 0x90, 0xda, + 0xdb, 0x52, 0x60, 0x61, 0xdd, 0x87, 0x24, 0x3a, 0xa9, 0xd7, 0xcd, 0x18, 0x2f, + 0x20, 0xb5, 0x72, 0xee, 0x34, 0x9b, 0x84, 0x58, 0xf6, 0x81, 0x6f, 0x90, 0x32, + 0xd0, 0xe2, 0xd5, 0x60, 0x96, 0x95, ], sighash_all: None, sighash_none: None, @@ -6202,532 +6645,1019 @@ pub mod zip_0244 { }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0xff, - 0x6a, 0xcc, 0x0f, 0xfc, 0x2e, 0x49, 0x0d, 0x03, 0x14, 0x6b, 0x9d, 0x49, 0xdd, - 0x8c, 0x78, 0x35, 0xf4, 0x3a, 0x37, 0xdc, 0xa0, 0x78, 0x7e, 0x3e, 0xc9, 0xf6, - 0x60, 0x52, 0x23, 0xd5, 0xba, 0x7a, 0xe0, 0xab, 0x90, 0x25, 0xb7, 0x3b, 0xc0, - 0x3f, 0x7f, 0xac, 0x36, 0xc0, 0x09, 0x63, 0x63, 0x63, 0x63, 0x51, 0x00, 0x63, - 0x53, 0x65, 0xbc, 0xa7, 0xe5, 0x4c, 0xc1, 0xa1, 0x2d, 0x12, 0x7b, 0x57, 0xc8, - 0x13, 0x89, 0x76, 0xe7, 0x91, 0x01, 0x3b, 0x01, 0x5f, 0x06, 0xa6, 0x24, 0xf5, - 0x21, 0xb6, 0xee, 0x04, 0xec, 0x98, 0x08, 0x93, 0xc7, 0xe5, 0xe0, 0x1a, 0x33, - 0x62, 0x03, 0x59, 0x04, 0xac, 0x00, 0x00, 0x53, 0xd7, 0x44, 0x5f, 0xe2, 0xd0, - 0x91, 0x30, 0xf6, 0x35, 0x11, 0xda, 0x54, 0x83, 0x2d, 0xe9, 0x13, 0x6b, 0x39, - 0xf4, 0x59, 0x9f, 0x5a, 0xa5, 0xdf, 0xbb, 0x45, 0xda, 0x60, 0xcd, 0xce, 0xab, - 0x7e, 0xef, 0xde, 0x89, 0xbe, 0x63, 0xf3, 0xf7, 0xc0, 0x04, 0x52, 0x00, 0x6a, - 0xac, 0xe1, 0x40, 0x5d, 0xef, 0x02, 0x44, 0xfd, 0x7f, 0x99, 0xb6, 0x7d, 0x04, - 0x00, 0x04, 0x63, 0x00, 0x63, 0xac, 0x12, 0xf6, 0x46, 0x50, 0x73, 0xe1, 0x02, - 0x00, 0x09, 0x63, 0x6a, 0x53, 0x51, 0x52, 0x00, 0x65, 0xac, 0x65, 0x00, 0x00, - 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0xaa, + 0xba, 0x56, 0x5b, 0x84, 0xf5, 0xa7, 0x10, 0x01, 0xd1, 0xca, 0xef, 0x25, 0x33, + 0xc3, 0x98, 0x16, 0x37, 0x20, 0x4f, 0x96, 0xa5, 0x9c, 0x8e, 0x80, 0x24, 0xd9, + 0x04, 0x1b, 0x20, 0x29, 0xe9, 0x4c, 0x15, 0x24, 0x5f, 0x1a, 0x95, 0x88, 0x40, + 0xba, 0x3f, 0x38, 0x0a, 0x4d, 0x02, 0x51, 0x00, 0x4e, 0x77, 0x82, 0x7d, 0x03, + 0x0a, 0x4b, 0x4d, 0x2d, 0xd7, 0xf9, 0x02, 0x00, 0x01, 0x52, 0x0f, 0xc0, 0x01, + 0x16, 0x13, 0xd0, 0x00, 0x00, 0x01, 0x51, 0x3f, 0xa4, 0x0d, 0x10, 0x30, 0x29, + 0x05, 0x00, 0x01, 0x52, 0x00, 0x00, 0x00, ], txid: [ - 0xbc, 0x34, 0xe5, 0xca, 0x58, 0x1c, 0x5c, 0x65, 0x44, 0xaa, 0xfb, 0x3e, 0x58, - 0x65, 0x34, 0x8f, 0x71, 0xb8, 0xaa, 0x2a, 0x78, 0x2d, 0xf8, 0xb6, 0xbf, 0xa1, - 0x79, 0x1b, 0xf5, 0xa7, 0x37, 0x58, + 0x25, 0x8b, 0xdb, 0xfb, 0x4e, 0x9a, 0xb0, 0x45, 0xd6, 0x9f, 0x31, 0x65, 0x49, + 0xf0, 0x56, 0x25, 0xa0, 0x73, 0xb6, 0xe1, 0xe3, 0xde, 0x9c, 0xdd, 0xca, 0xc9, + 0xa6, 0xa6, 0x92, 0x4c, 0xde, 0x5c, ], auth_digest: [ - 0x6c, 0x36, 0xbc, 0x25, 0xfc, 0x48, 0x56, 0xe5, 0x09, 0x8e, 0x5d, 0x33, 0x03, - 0x3c, 0x5b, 0x38, 0x75, 0x21, 0x7f, 0xcb, 0x45, 0x52, 0x61, 0x18, 0xbb, 0x05, - 0x8a, 0x2d, 0xd7, 0xb6, 0xea, 0x5e, + 0xa4, 0xbc, 0x17, 0x6d, 0x45, 0xf8, 0x13, 0x96, 0x47, 0x3d, 0x70, 0xe7, 0x94, + 0x5a, 0x4a, 0xc2, 0xb7, 0xbe, 0xc1, 0xa4, 0x54, 0x33, 0xc4, 0xde, 0x62, 0xad, + 0x14, 0x34, 0x1f, 0xac, 0x2d, 0x44, ], - amounts: vec![1848924248978091, 447389782351145, 620151782842275], - script_pubkeys: vec![vec![0xac, 0x00, 0x00], vec![0x65, 0x65], vec![]], + amounts: vec![1768120831340850], + script_pubkeys: vec![vec![0x63, 0x51, 0x6a, 0xac, 0x65, 0xac, 0x53]], transparent_input: Some(0), sighash_shielded: [ - 0xa9, 0x60, 0xf4, 0xba, 0xa5, 0xf4, 0x33, 0x1f, 0x4d, 0xad, 0xc3, 0x74, 0x56, - 0x6b, 0xc0, 0x47, 0xe7, 0xc0, 0x71, 0x53, 0xb0, 0x38, 0x5a, 0x58, 0x7a, 0x2b, - 0xe8, 0x6a, 0x51, 0x8a, 0xb5, 0xd3, + 0x8a, 0x91, 0xd0, 0xa4, 0x91, 0xc2, 0x4e, 0xc7, 0x10, 0xb4, 0xd7, 0x2a, 0xed, + 0x39, 0x77, 0x53, 0x4e, 0x52, 0xf0, 0x90, 0xef, 0xde, 0xa7, 0x44, 0x74, 0x18, + 0x57, 0xf3, 0x04, 0xef, 0xde, 0xf4, ], sighash_all: Some([ - 0x8f, 0x60, 0x76, 0x56, 0xc5, 0x2d, 0x9a, 0xd2, 0x23, 0x11, 0x20, 0xc2, 0x4f, - 0xaa, 0x7b, 0x68, 0x55, 0xae, 0x57, 0x1b, 0xee, 0x46, 0xe6, 0x1d, 0x76, 0xa2, - 0x5c, 0xff, 0xb2, 0xbb, 0x4f, 0xcb, + 0xed, 0x7e, 0xad, 0x9d, 0x3f, 0xfe, 0xe8, 0xaa, 0x01, 0x98, 0xcf, 0xab, 0x2b, + 0x2e, 0xa6, 0x65, 0x08, 0x0c, 0x79, 0x0a, 0xfc, 0xf7, 0xe4, 0x3e, 0x87, 0x15, + 0x04, 0x26, 0x83, 0x34, 0xea, 0x56, ]), sighash_none: Some([ - 0xfd, 0xcf, 0x8a, 0x04, 0x69, 0x0d, 0xc2, 0x76, 0x9d, 0x93, 0x43, 0x37, 0xfe, - 0x8b, 0x47, 0x24, 0x2a, 0x6e, 0xd7, 0xc9, 0xd8, 0x6d, 0x3e, 0x01, 0x33, 0x24, - 0x84, 0xd3, 0x8d, 0x71, 0xe7, 0x85, + 0xff, 0x42, 0xc6, 0x72, 0xf5, 0x04, 0x4d, 0x1f, 0x8e, 0x4a, 0x66, 0x6c, 0x52, + 0x1a, 0x5a, 0xcd, 0xa9, 0xea, 0x9a, 0x20, 0x93, 0x3f, 0xea, 0x27, 0x9f, 0x1a, + 0xa5, 0xf5, 0xf0, 0x20, 0x0c, 0xa6, ]), sighash_single: Some([ - 0xb3, 0xa2, 0x8e, 0xbd, 0x7c, 0xf3, 0x7a, 0x44, 0x3a, 0x40, 0x90, 0x9f, 0x51, - 0x3f, 0x08, 0x1f, 0xbe, 0x0f, 0xd7, 0x8c, 0x67, 0xf7, 0xc4, 0xf0, 0x1b, 0x5f, - 0xb1, 0x15, 0x97, 0x89, 0x86, 0x1a, + 0x40, 0x5b, 0x9b, 0x24, 0xe2, 0x0b, 0xee, 0x15, 0xc6, 0x69, 0x96, 0xb4, 0xf8, + 0x8d, 0xe3, 0x07, 0x0e, 0x7f, 0xa9, 0xf4, 0xaa, 0xca, 0xa3, 0xef, 0x6b, 0x49, + 0x79, 0xcd, 0xc1, 0x93, 0xc9, 0x72, ]), sighash_all_anyone: Some([ - 0x62, 0xea, 0xda, 0x92, 0xbb, 0xc5, 0xaf, 0x09, 0xab, 0x7b, 0x95, 0x83, 0x4a, - 0xe6, 0xba, 0x41, 0x3b, 0x17, 0xcd, 0xf1, 0x96, 0xa6, 0xf9, 0x9c, 0x54, 0x1b, - 0x71, 0x0d, 0xda, 0xcf, 0xa5, 0x45, + 0x8b, 0xc4, 0x12, 0x1a, 0x64, 0x8f, 0xbe, 0x55, 0x84, 0x42, 0xa6, 0xae, 0xa8, + 0x95, 0x7c, 0x9f, 0xb8, 0x13, 0x31, 0x0c, 0xae, 0xc9, 0xa0, 0x4e, 0x80, 0xd4, + 0xfe, 0x70, 0x15, 0xdc, 0x8f, 0x8b, ]), sighash_none_anyone: Some([ - 0xdf, 0xf0, 0xeb, 0x1e, 0x03, 0xb9, 0xc2, 0xfe, 0x30, 0x1d, 0xb9, 0xb0, 0x18, - 0x35, 0x83, 0x61, 0x88, 0x93, 0xc8, 0x47, 0x4e, 0xf5, 0x65, 0x92, 0x1d, 0x5f, - 0x28, 0x32, 0xed, 0xe3, 0xbf, 0x49, + 0xfc, 0x5b, 0x0b, 0x69, 0x1e, 0xf2, 0x16, 0x8b, 0x34, 0xfe, 0x17, 0xb7, 0x5e, + 0xd2, 0xda, 0xad, 0x1d, 0xdb, 0x12, 0x80, 0x89, 0x64, 0xf3, 0xbe, 0x33, 0xd1, + 0x81, 0x56, 0x1a, 0xea, 0x9a, 0x3e, ]), sighash_single_anyone: Some([ - 0x1d, 0xe6, 0x07, 0xf1, 0x88, 0xa4, 0x0b, 0x5c, 0x15, 0x22, 0x26, 0xd9, 0x4e, - 0x44, 0x41, 0x1b, 0x69, 0x02, 0x94, 0x7d, 0x42, 0xfb, 0xb2, 0x5f, 0xb8, 0x6c, - 0x9a, 0x4e, 0x77, 0xa4, 0xf3, 0x5b, + 0x2e, 0x8c, 0x8f, 0xfc, 0x65, 0x64, 0xd1, 0x89, 0x21, 0x38, 0xa8, 0x49, 0x94, + 0xbd, 0x60, 0xae, 0x47, 0x57, 0xd6, 0x91, 0x36, 0xb8, 0x2a, 0xd1, 0x9b, 0xbc, + 0xb9, 0x5e, 0x61, 0x0f, 0x47, 0x8e, + ]), + }, + TestVector { + tx: vec![ + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x42, + 0xd2, 0x05, 0xf6, 0x64, 0x3e, 0x84, 0x17, 0x03, 0x27, 0x11, 0xdc, 0xcc, 0xd9, + 0x31, 0xa5, 0x0b, 0x9c, 0x56, 0x61, 0x88, 0x23, 0x60, 0xd4, 0xca, 0xc0, 0x04, + 0x76, 0x81, 0xbc, 0x2e, 0x2b, 0x3b, 0xf6, 0xc9, 0x97, 0x60, 0xd7, 0xcf, 0xb4, + 0xfa, 0x21, 0x39, 0x43, 0x77, 0x08, 0x63, 0xac, 0x65, 0x51, 0x6a, 0x52, 0x00, + 0xac, 0x26, 0x20, 0x54, 0xdf, 0xfd, 0x79, 0xa9, 0xde, 0xd0, 0x5e, 0x88, 0x89, + 0x58, 0x19, 0x9e, 0xea, 0x45, 0x01, 0xe2, 0x99, 0x0a, 0x53, 0xa5, 0xcd, 0x2a, + 0x46, 0xa4, 0x01, 0x57, 0x65, 0x88, 0xfd, 0x7d, 0x05, 0x8a, 0x26, 0xf2, 0x84, + 0x38, 0xe5, 0x00, 0x2f, 0x45, 0xac, 0x1d, 0x07, 0xf6, 0xf6, 0xf5, 0xed, 0x73, + 0x74, 0x1d, 0x57, 0x85, 0x83, 0x7a, 0x6b, 0x84, 0x4b, 0x47, 0x47, 0x75, 0x71, + 0x8c, 0x29, 0xdd, 0x99, 0x08, 0x4e, 0x9f, 0x88, 0xef, 0x15, 0x3a, 0x83, 0x29, + 0xf5, 0x32, 0xa6, 0x90, 0x03, 0xac, 0x52, 0x6a, 0xed, 0x75, 0x43, 0x67, 0x00, + 0x00, 0x02, 0x17, 0x84, 0xe1, 0x7a, 0x32, 0xf2, 0xf1, 0x63, 0x89, 0x64, 0x23, + 0xf3, 0x18, 0xd6, 0x08, 0x78, 0x63, 0xee, 0x2f, 0x34, 0x40, 0x34, 0x0d, 0xcd, + 0xb0, 0xd0, 0xf8, 0x4c, 0xbe, 0x45, 0x46, 0x3c, 0x1c, 0x93, 0x57, 0x14, 0xe2, + 0x4a, 0xab, 0x56, 0x6f, 0x4f, 0x08, 0x42, 0x40, 0x14, 0xc4, 0xec, 0xa9, 0x1b, + 0x59, 0x0f, 0x08, 0x2b, 0x47, 0x3f, 0x36, 0x1c, 0x87, 0x41, 0x5d, 0x37, 0xbd, + 0x20, 0x2e, 0xfa, 0xbb, 0xe7, 0xd9, 0xf4, 0x1f, 0x03, 0xb8, 0xf8, 0xf4, 0xa0, + 0x11, 0x5f, 0xf3, 0x2f, 0x59, 0x34, 0x73, 0xc9, 0x78, 0xf8, 0x17, 0x48, 0x98, + 0x3d, 0xa3, 0xb2, 0x3d, 0x7f, 0xee, 0xa1, 0xc5, 0xbe, 0x32, 0xc6, 0x75, 0xbe, + 0x18, 0x17, 0xef, 0xbf, 0xfd, 0x93, 0x69, 0x04, 0x1a, 0x08, 0x9c, 0x28, 0x3f, + 0x19, 0x64, 0x99, 0x68, 0xc2, 0x49, 0x8c, 0xde, 0x56, 0xf5, 0x00, 0x43, 0x4f, + 0x28, 0x0d, 0x77, 0xa9, 0xc6, 0x2e, 0x43, 0xcb, 0xd3, 0xf1, 0x36, 0xa4, 0xc6, + 0xa0, 0x0a, 0x43, 0xe6, 0xed, 0x53, 0x0c, 0xb2, 0xe8, 0xae, 0x83, 0x88, 0x60, + 0xad, 0xc8, 0x8a, 0xac, 0xc7, 0xbd, 0x6a, 0x00, 0xae, 0x0c, 0x19, 0xff, 0x45, + 0x33, 0xa4, 0x85, 0xef, 0xde, 0x08, 0x2b, 0x5f, 0x4d, 0x1f, 0x7a, 0x8e, 0xbe, + 0x7e, 0xd8, 0x2b, 0x7b, 0x05, 0xa8, 0xcf, 0xe1, 0xe3, 0x73, 0x45, 0x9f, 0x1b, + 0xdc, 0xbf, 0x95, 0x25, 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, + 0x79, 0x87, 0x40, 0xe0, 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, + 0xa0, 0xae, 0x0f, 0x07, 0x6c, 0x58, 0x2c, 0x0f, 0x5b, 0xa8, 0x78, 0xb9, 0x9b, + 0x82, 0x49, 0xdb, 0x1d, 0x7e, 0x95, 0x05, 0x6c, 0x98, 0xaf, 0x08, 0x3d, 0x98, + 0xcb, 0x0e, 0xd9, 0xe3, 0xf7, 0x43, 0x6e, 0x1c, 0x76, 0x43, 0x76, 0x6f, 0x96, + 0x6b, 0x83, 0xe9, 0x99, 0x20, 0x6e, 0xbd, 0x13, 0x93, 0xb9, 0xb2, 0xa7, 0xf4, + 0x14, 0x48, 0x0f, 0xa0, 0x17, 0x48, 0x00, 0x69, 0xf8, 0x5c, 0x77, 0x49, 0xc4, + 0x35, 0xae, 0x2f, 0xba, 0x2d, 0xdc, 0x10, 0x38, 0xd5, 0x47, 0xd8, 0x48, 0x54, + 0x81, 0x7e, 0xf3, 0x96, 0x35, 0xc2, 0x98, 0x27, 0xaa, 0xd8, 0x67, 0x26, 0xc9, + 0xad, 0xe3, 0xb2, 0x65, 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, 0x56, 0xfe, + 0x4b, 0xd8, 0xb4, 0xd6, 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, 0xda, + 0xc4, 0x64, 0x15, 0x6d, 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0x1d, 0x83, 0xb8, 0x6f, + 0x65, 0x96, 0x37, 0xe3, 0xb1, 0x42, 0xc1, 0x64, 0x96, 0x3b, 0x8c, 0xdc, 0xf4, + 0xba, 0x4f, 0x40, 0x35, 0xdf, 0xfc, 0x5a, 0x78, 0x94, 0x58, 0x84, 0x77, 0x81, + 0x91, 0x8a, 0xc7, 0x2f, 0xc1, 0x8b, 0xbb, 0xf5, 0x11, 0x00, 0x32, 0xe6, 0x6d, + 0x75, 0xb3, 0x17, 0x1e, 0xf4, 0xb5, 0x13, 0x29, 0x01, 0x64, 0xa7, 0x7b, 0x42, + 0xb0, 0xa4, 0xcf, 0xb8, 0x96, 0x39, 0xab, 0x23, 0x84, 0x5e, 0x1a, 0xa2, 0xa4, + 0x52, 0xf3, 0x73, 0x1c, 0x8c, 0xb6, 0x50, 0x82, 0xa6, 0x22, 0xa7, 0xc2, 0xe0, + 0x01, 0x3e, 0xa4, 0x7d, 0x0b, 0xdd, 0x42, 0xd6, 0x99, 0x04, 0x66, 0x64, 0x9a, + 0x90, 0x5c, 0x68, 0x4c, 0x32, 0x51, 0x71, 0x6d, 0x61, 0xf7, 0x60, 0xd5, 0x3d, + 0xe6, 0xe3, 0xf7, 0x90, 0xfb, 0xa7, 0xf5, 0xf1, 0xf4, 0xde, 0x26, 0x71, 0x13, + 0xbd, 0xfc, 0xd7, 0x42, 0x28, 0x22, 0x33, 0x0b, 0x32, 0xd5, 0x8e, 0x67, 0x77, + 0x76, 0x5f, 0x22, 0xa4, 0x11, 0x63, 0x44, 0xee, 0xb6, 0x5b, 0x2e, 0xc5, 0x16, + 0x39, 0x3a, 0xb3, 0x75, 0x1b, 0x53, 0x56, 0xd2, 0xb0, 0xc9, 0x50, 0x0c, 0x0f, + 0x3e, 0x46, 0x91, 0x81, 0x03, 0x5b, 0xc3, 0x66, 0x0f, 0x0b, 0x8f, 0x9f, 0xbe, + 0x6e, 0x40, 0xb5, 0xe8, 0x9c, 0xb7, 0x9b, 0x06, 0x37, 0x14, 0xca, 0x75, 0xe7, + 0x2e, 0x2e, 0x10, 0x0a, 0x10, 0xd6, 0x3b, 0xf7, 0x84, 0xdf, 0x08, 0x20, 0xef, + 0x25, 0xf8, 0xef, 0x40, 0xfe, 0x5f, 0x05, 0xfb, 0x95, 0x68, 0x3f, 0x91, 0x05, + 0xff, 0x3c, 0xb2, 0xd2, 0x19, 0xab, 0x76, 0x60, 0x5a, 0x06, 0x4f, 0x69, 0x21, + 0x9f, 0x1d, 0xc0, 0xd0, 0x0b, 0x3b, 0x48, 0x64, 0x2f, 0x97, 0x0d, 0xc0, 0x0c, + 0xca, 0x4b, 0x8b, 0x43, 0x30, 0x8b, 0xe1, 0x82, 0x86, 0xec, 0x5a, 0x42, 0x88, + 0xd6, 0x00, 0xa3, 0x78, 0x5c, 0xb6, 0x22, 0xd4, 0x68, 0xa4, 0xc6, 0x96, 0x9b, + 0x37, 0x92, 0xf2, 0x48, 0x50, 0x27, 0xd0, 0xad, 0x9a, 0xa4, 0xa9, 0xc2, 0xcc, + 0x97, 0x2f, 0x9e, 0xe5, 0x19, 0x0a, 0x95, 0xb1, 0xeb, 0x05, 0x8d, 0xdd, 0xd8, + 0xc0, 0x8e, 0x7d, 0x75, 0x3f, 0x5e, 0x01, 0x1b, 0x2b, 0xcf, 0xee, 0x1d, 0x52, + 0xc1, 0xc4, 0xf2, 0xca, 0xcd, 0xa3, 0x0b, 0xdb, 0x69, 0x30, 0x65, 0x3c, 0x0c, + 0xc4, 0x48, 0x6e, 0x60, 0xe8, 0x9f, 0xa8, 0x49, 0xb3, 0x20, 0x83, 0xba, 0x9d, + 0xb4, 0x53, 0xfb, 0x8d, 0xf6, 0x83, 0xcd, 0x68, 0x75, 0x4c, 0x87, 0xda, 0xa7, + 0x31, 0xf5, 0x70, 0xa7, 0xa4, 0x06, 0x0a, 0xf0, 0xce, 0x70, 0x0d, 0x31, 0xbc, + 0xa7, 0xe7, 0x4b, 0x3e, 0x3b, 0xa3, 0xd0, 0xe8, 0xa6, 0x39, 0x2a, 0x06, 0x2b, + 0x8e, 0x86, 0xd9, 0xd7, 0xd0, 0x0b, 0x21, 0x70, 0x1e, 0x7b, 0x06, 0x2e, 0x06, + 0xb1, 0xbc, 0xd8, 0x2a, 0x01, 0xd3, 0x75, 0x62, 0x6f, 0xbf, 0x87, 0x2d, 0x27, + 0xfa, 0x45, 0x11, 0xf5, 0xf8, 0xcf, 0x8c, 0x9a, 0xbc, 0xef, 0x2a, 0x99, 0x01, + 0x76, 0xae, 0x33, 0x93, 0xde, 0x93, 0x65, 0x5a, 0x92, 0x05, 0x56, 0x92, 0xf9, + 0x17, 0x08, 0xde, 0xc1, 0x4a, 0xda, 0x3b, 0x62, 0xc4, 0x7d, 0x93, 0x1b, 0xba, + 0xcb, 0x13, 0x95, 0xa1, 0xcb, 0xbe, 0x86, 0x20, 0x97, 0x0b, 0xa0, 0xe4, 0x82, + 0x00, 0x11, 0x82, 0x9c, 0x54, 0x52, 0xbb, 0xa4, 0x5d, 0x56, 0x88, 0x81, 0x1e, + 0x6a, 0x89, 0x60, 0x22, 0xfe, 0xfe, 0x95, 0x26, 0x6b, 0x88, 0x65, 0x32, 0x44, + 0x3c, 0x6f, 0x0e, 0xe6, 0x4d, 0xc1, 0xe1, 0x11, 0x07, 0xe2, 0x68, 0x50, 0xe8, + 0x42, 0xfe, 0xe2, 0xa4, 0xec, 0x52, 0x0c, 0xec, 0xdd, 0x3b, 0xec, 0x91, 0xfe, + 0xc9, 0xa5, 0x86, 0xdf, 0x55, 0x01, 0x90, 0x6e, 0xd2, 0xa7, 0xa5, 0x7c, 0xcf, + 0x34, 0xc4, 0x83, 0xac, 0x7d, 0xa1, 0x58, 0x8a, 0x1b, 0x6b, 0x99, 0x41, 0xf1, + 0x10, 0x40, 0xf9, 0x4c, 0xf7, 0x8f, 0xad, 0x89, 0xbf, 0x11, 0xfe, 0xd6, 0x9a, + 0xa0, 0xd8, 0x31, 0x05, 0xad, 0xac, 0xdd, 0x4e, 0x5f, 0x04, 0xa6, 0x24, 0x24, + 0x02, 0x3c, 0x9b, 0x9e, 0x33, 0xc4, 0xfb, 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, + 0xf2, 0x65, 0xc5, 0x37, 0xd5, 0x1c, 0x65, 0x51, 0xf4, 0x61, 0x7b, 0x91, 0x5d, + 0x21, 0x99, 0x18, 0x39, 0xc3, 0xd0, 0xd3, 0x63, 0x93, 0xd6, 0x46, 0xe0, 0xa8, + 0xa4, 0x15, 0x09, 0x21, 0x7d, 0x0e, 0x7d, 0x2c, 0xa1, 0xa0, 0xa0, 0xd6, 0x77, + 0xa3, 0xea, 0xca, 0x23, 0xed, 0xeb, 0x07, 0xb7, 0x4e, 0x65, 0x2a, 0x0b, 0xc5, + 0x0c, 0x6c, 0x08, 0x3a, 0x55, 0xd6, 0xc7, 0x30, 0x6e, 0x74, 0x08, 0x6f, 0x47, + 0x68, 0x93, 0x3a, 0xa2, 0x48, 0x73, 0x68, 0x18, 0x67, 0xa7, 0x89, 0x3d, 0x77, + 0xcb, 0x7f, 0x29, 0xb8, 0xc8, 0x47, 0xc5, 0x83, 0xf2, 0xd0, 0x71, 0xa6, 0x86, + 0x61, 0x6e, 0x20, 0x67, 0x19, 0xf7, 0x61, 0xae, 0x39, 0xc1, 0x10, 0x44, 0x2e, + 0x06, 0x16, 0x3d, 0x2b, 0x84, 0x59, 0x03, 0x60, 0x69, 0x5d, 0x4e, 0x19, 0x84, + 0x9e, 0x63, 0x4f, 0x24, 0xd9, 0xad, 0x39, 0x6c, 0x19, 0xff, 0x83, 0xce, 0x74, + 0xf4, 0x6e, 0x64, 0x5f, 0x93, 0x2e, 0x14, 0x1a, 0x41, 0x19, 0x59, 0x36, 0xc8, + 0x5d, 0x51, 0x44, 0x14, 0xf1, 0x12, 0xe6, 0x0b, 0x1a, 0x25, 0x37, 0xc3, 0x8d, + 0x6d, 0xc6, 0xc4, 0x63, 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, + 0x63, 0x12, 0x3e, 0x3e, 0x6d, 0xd3, 0x6e, 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, + 0xee, 0xca, 0x2a, 0xa0, 0x9a, 0x32, 0x98, 0xa3, 0x9d, 0x83, 0x85, 0x9e, 0xfc, + 0x9b, 0x2b, 0x69, 0xcf, 0x9a, 0x7d, 0xee, 0x08, 0xa9, 0x8e, 0x4b, 0xe5, 0x58, + 0xac, 0x79, 0x12, 0xfd, 0xcb, 0x42, 0x20, 0x90, 0x75, 0x42, 0x02, 0x60, 0xf7, + 0xca, 0xd0, 0xf2, 0xc0, 0x1f, 0x2a, 0xfe, 0x33, 0x07, 0x3f, 0x26, 0x24, 0x9d, + 0x94, 0x4f, 0x7a, 0x50, 0xdd, 0x84, 0x83, 0x9b, 0xc3, 0xea, 0x7f, 0xde, 0xe4, + 0xed, 0x71, 0x44, 0x9c, 0xf0, 0x75, 0x33, 0xd2, 0x6e, 0x1e, 0x27, 0xa3, 0xef, + 0xb0, 0x32, 0xc3, 0xa3, 0xb3, 0x4b, 0xd3, 0x09, 0x26, 0x22, 0xd2, 0x06, 0x2a, + 0xe5, 0x36, 0xef, 0x51, 0x49, 0xc4, 0x9b, 0x5b, 0xc9, 0x47, 0x5e, 0xaf, 0xab, + 0x6e, 0x67, 0x57, 0x61, 0x00, 0x8b, 0x0d, 0xad, 0xde, 0xec, 0xaa, 0x60, 0x44, + 0x70, 0xbb, 0xe0, 0xfa, 0xda, 0x25, 0x5d, 0x29, 0x0e, 0x92, 0xb1, 0x90, 0xc2, + 0xc2, 0xd8, 0xc2, 0xde, 0xe5, 0x45, 0x5d, 0x1f, 0xa9, 0xa9, 0xf3, 0xdb, 0x77, + 0x79, 0xb5, 0x84, 0x64, 0x34, 0x64, 0xaa, 0x80, 0x14, 0xba, 0x66, 0x99, 0x4d, + 0xe2, 0x55, 0x17, 0xf8, 0x39, 0x80, 0xe6, 0x6e, 0xe4, 0xf6, 0x23, 0x14, 0xae, + 0x6d, 0xbe, 0xf4, 0x52, 0xd5, 0xd3, 0x8b, 0x0a, 0x16, 0xf3, 0x99, 0x1f, 0x36, + 0xd8, 0xa8, 0xb3, 0x9d, 0xdc, 0x0d, 0x55, 0x95, 0xee, 0xd9, 0x87, 0x62, 0x87, + 0x8c, 0xdf, 0x3f, 0x4a, 0x2e, 0xdc, 0x5c, 0xda, 0x77, 0xd5, 0xfe, 0x4f, 0xaf, + 0x63, 0xa1, 0x5f, 0x56, 0x8a, 0x54, 0x0d, 0xa5, 0x7d, 0xd9, 0xbe, 0xb6, 0xfb, + 0x1a, 0x97, 0x7c, 0xcb, 0x91, 0xb4, 0xd7, 0x9c, 0xb3, 0x9b, 0x28, 0x91, 0x1a, + 0x29, 0xe7, 0xbf, 0x02, 0x8a, 0xc6, 0x10, 0x37, 0x96, 0xdf, 0xb6, 0xb2, 0x09, + 0x67, 0x23, 0x9a, 0xd3, 0x73, 0xc3, 0x8c, 0x53, 0xf6, 0xdf, 0x18, 0x23, 0xd4, + 0x95, 0x0a, 0x02, 0x83, 0xe9, 0x9b, 0x9c, 0x06, 0xab, 0x29, 0x66, 0x66, 0x7c, + 0x9d, 0xf6, 0x77, 0x71, 0x6b, 0x0c, 0xad, 0xed, 0x81, 0x8d, 0xf9, 0xe4, 0x49, + 0xc0, 0x72, 0xe2, 0x2f, 0x9d, 0x98, 0xbb, 0x0f, 0x9b, 0x03, 0xbd, 0x5f, 0xd0, + 0x13, 0xfc, 0xef, 0x3e, 0xd6, 0xa4, 0x9a, 0xeb, 0x98, 0x72, 0x02, 0x54, 0x08, + 0x7e, 0xf7, 0x28, 0xe3, 0x19, 0x47, 0xff, 0xe8, 0xf7, 0x66, 0xe6, 0x3e, 0xe4, + 0x6f, 0xf2, 0x08, 0x16, 0xd5, 0xfa, 0x8f, 0xf5, 0x5a, 0x26, 0x39, 0x89, 0x61, + 0x49, 0x0a, 0xb9, 0xae, 0x36, 0x6f, 0xc5, 0xa2, 0xd1, 0x99, 0x6e, 0xd6, 0x93, + 0xcc, 0xca, 0x82, 0x35, 0x6f, 0x60, 0x0a, 0xb0, 0x99, 0xf6, 0xec, 0xa8, 0xbf, + 0xe6, 0x45, 0x27, 0x0d, 0x3f, 0x95, 0xed, 0xba, 0x5b, 0x0d, 0xe7, 0xa3, 0x28, + 0x19, 0x23, 0x3b, 0xcc, 0x75, 0x4a, 0x5c, 0xe2, 0xe5, 0xea, 0x07, 0x84, 0x2e, + 0x5f, 0xf2, 0xce, 0xbe, 0x62, 0xad, 0x76, 0xe8, 0xef, 0xf8, 0xd1, 0x5e, 0xa4, + 0xc2, 0x4a, 0x5f, 0x20, 0x78, 0x68, 0x31, 0x9a, 0x5a, 0xf6, 0xb0, 0x35, 0xbe, + 0x3f, 0x44, 0xf4, 0x34, 0x09, 0x4f, 0x83, 0x9f, 0xed, 0x7a, 0x68, 0x25, 0x01, + 0x00, 0x25, 0xd5, 0xa5, 0x88, 0xda, 0x57, 0x96, 0xfa, 0xae, 0x5b, 0xab, 0x7c, + 0x82, 0x97, 0x7c, 0x0f, 0xf7, 0x97, 0x09, 0x3e, 0x2c, 0x1f, 0x3a, 0xe8, 0x55, + 0xf6, 0x5a, 0xea, 0x91, 0xe1, 0x31, 0x2f, 0xc6, 0xb8, 0xa4, 0x35, 0x1a, 0x2e, + 0xc0, 0x3e, 0x02, 0xe5, 0xd0, 0x2f, 0x53, 0x35, 0x4b, 0x05, 0x2f, 0xd3, 0xda, + 0x0d, 0xff, 0x82, 0xcd, 0x1f, 0x55, 0xeb, 0xca, 0x57, 0xb6, 0x33, 0x7c, 0x85, + 0x93, 0x8a, 0x79, 0x81, 0x3d, 0x20, 0x21, 0xd6, 0x09, 0x4c, 0x68, 0xb3, 0x75, + 0xe9, 0x84, 0xf6, 0x83, 0x93, 0x30, 0x08, 0x71, 0xe3, 0x48, 0xfc, 0x52, 0x36, + 0xcc, 0xa6, 0x33, 0x05, 0x44, 0xe5, 0x46, 0x39, 0xb5, 0x41, 0x87, 0x01, 0xff, + 0x4c, 0xc4, 0x5a, 0x31, 0xf6, 0x2e, 0xdd, 0x84, 0x3d, 0xbb, 0xdc, 0x5a, 0xa7, + 0x27, 0xab, 0x79, 0xb4, 0x42, 0x68, 0x3c, 0x49, 0x56, 0xbb, 0xb1, 0x95, 0xa4, + 0xfa, 0x66, 0xdc, 0x9c, 0xd5, 0x42, 0xc7, 0x6b, 0x91, 0x50, 0xc8, 0x4b, 0xf8, + 0x90, 0x78, 0x99, 0x42, 0xf5, 0x5c, 0x20, 0x0b, 0x77, 0x3e, 0xcd, 0xd7, 0x99, + 0x2c, 0xff, 0x3e, 0xca, 0x24, 0xde, 0x3e, 0x09, 0x84, 0xe1, 0x0e, 0x68, 0xae, + 0x38, 0x75, 0x34, 0xb9, 0x6c, 0xde, 0x37, 0x92, 0xf1, 0x35, 0xbf, 0x5f, 0x68, + 0x78, 0x7d, 0x37, 0x0c, 0xa8, 0xc4, 0xc4, 0x07, 0x4d, 0xc5, 0xd6, 0x6e, 0x52, + 0x5b, 0xe6, 0x14, 0xda, 0xc9, 0x20, 0xa3, 0x30, 0xbd, 0xfb, 0x26, 0xd7, 0x5f, + 0xe7, 0xb4, 0xb3, 0x65, 0xd0, 0x94, 0x45, 0x92, 0x50, 0xaa, 0xa5, 0x54, 0x44, + 0x89, 0xfb, 0x1d, 0x99, 0x25, 0x81, 0x80, 0x0a, 0x77, 0xb8, 0x91, 0x21, 0x57, + 0xfc, 0x97, 0x13, 0xaa, 0xac, 0x25, 0xb4, 0xc2, 0x6e, 0xb0, 0x3f, 0x71, 0x66, + 0x46, 0x61, 0x9a, 0xf0, 0x24, 0x56, 0xae, 0x69, 0x59, 0x62, 0xfe, 0x5e, 0x93, + 0x1a, 0x63, 0xb5, 0xc7, 0x90, 0x52, 0xec, 0xd3, 0x33, 0xe1, 0x84, 0x12, 0xdb, + 0x91, 0xe1, 0x5f, 0x7c, 0xbc, 0x70, 0xb4, 0xcd, 0x7e, 0x8e, 0x3c, 0x95, 0x1f, + 0x35, 0x85, 0x72, 0xe3, 0x77, 0x67, 0xe7, 0xd5, 0x27, 0x04, 0xa6, 0x72, 0x1b, + 0x30, 0xef, 0xc4, 0x10, 0x17, 0xae, 0x4d, 0x23, 0x15, 0x58, 0xc5, 0xc8, 0x2c, + 0xc7, 0xdd, 0x7e, 0x33, 0x56, 0xc0, 0x9d, 0xc2, 0x49, 0x06, 0xf0, 0x43, 0x8d, + 0xfc, 0xc3, 0x00, 0x85, 0x6a, 0xc2, 0xce, 0xd8, 0xf7, 0x7f, 0xa8, 0x01, 0x57, + 0x36, 0xc6, 0x61, 0xe8, 0x02, 0x48, 0xae, 0xeb, 0x77, 0x48, 0x74, 0xaa, 0x79, + 0xd2, 0x90, 0xb8, 0xf5, 0x02, 0x7a, 0x0a, 0x50, 0x95, 0x37, 0xfc, 0x7c, 0x68, + 0x9b, 0x7a, 0xd8, 0x61, 0x16, 0xcf, 0xec, 0x26, 0x47, 0xcc, 0xaa, 0xe1, 0xc7, + 0x4b, 0x41, 0x6f, 0x3e, 0x6a, 0xe8, 0xf7, 0xcc, 0xa8, 0x16, 0x77, 0x1b, 0xee, + 0x88, 0x90, 0x70, 0xa6, 0x8f, 0xd4, 0x11, 0x6f, 0x4d, 0xe7, 0xb0, 0xaf, 0xe4, + 0xa0, 0x0b, 0x1a, 0x35, 0x84, 0x18, 0x13, 0xfb, 0x1d, 0xee, 0xba, 0x2d, 0xd6, + 0x98, 0x59, 0x95, 0x74, 0xe3, 0x55, 0x1c, 0xee, 0x7c, 0xa4, 0x98, 0x77, 0x6a, + 0xdf, 0x74, 0x3a, 0xc2, 0xd9, 0x7a, 0x1a, 0xe5, 0xa8, 0x4b, 0xc7, 0x94, 0x4e, + 0xad, 0x23, 0xd3, 0xb1, 0xe9, 0xee, 0x0d, 0x03, 0xa2, 0x45, 0xcb, 0xcb, 0x94, + 0x9c, 0x37, 0xf9, 0xdc, 0xf2, 0x34, 0x86, 0x42, 0x52, 0xf0, 0x2b, 0x3f, 0x8a, + 0x6b, 0x11, 0x3b, 0x37, 0x2f, 0xc4, 0xa9, 0xd9, 0x5c, 0xd7, 0x3b, 0x6e, 0xc7, + 0xa0, 0x5c, 0x12, 0x50, 0x92, 0xa8, 0xd7, 0x9a, 0xcd, 0x3d, 0xf8, 0xa8, 0x4d, + 0xb9, 0xcf, 0xbd, 0x2b, 0xb3, 0x02, 0xf2, 0x6b, 0xdd, 0xa4, 0x65, 0xd9, 0x0b, + 0x94, 0xb1, 0x2c, 0x57, 0xfa, 0x3f, 0x16, 0x0d, 0x1c, 0xc2, 0xcb, 0x4b, 0xa9, + 0xe0, 0xed, 0xae, 0xce, 0x24, 0x7b, 0x78, 0x4d, 0x84, 0x5f, 0x6a, 0xe3, 0x4e, + 0x2b, 0x7c, 0xca, 0x5e, 0xf1, 0x8c, 0x8c, 0xcb, 0x7e, 0x6d, 0xb5, 0x1e, 0x33, + 0xa5, 0x07, 0x13, 0x7e, 0xbb, 0x70, 0x53, 0x27, 0x18, 0x7a, 0x69, 0xbf, 0x51, + 0xf1, 0x78, 0x35, 0xe4, 0x7f, 0xd6, 0x42, 0x5e, 0xfb, 0x9c, 0x1d, 0x50, 0x4e, + 0x6f, 0xd5, 0x57, 0x53, 0x40, 0x14, 0xc0, 0xd6, 0x65, 0x58, 0xe6, 0x11, 0x1d, + 0x0f, 0xa0, 0xdf, 0xc8, 0x29, 0xd5, 0x89, 0xbe, 0x47, 0x9a, 0x06, 0xe2, 0xd0, + 0x97, 0xc4, 0x26, 0x5a, 0xef, 0x4b, 0x04, 0xfe, 0x0c, 0xab, 0xc2, 0x31, 0x96, + 0xd3, 0xc3, 0x36, 0x64, 0x8e, 0x86, 0x94, 0xd3, 0xa1, 0x9d, 0x3d, 0xca, 0x53, + 0x1b, 0xeb, 0x50, 0xd4, 0x32, 0x7c, 0x5c, 0x0c, 0x23, 0xcb, 0x7c, 0xfd, 0xb0, + 0x8c, 0xa7, 0xcf, 0x2c, 0xac, 0x6b, 0xc1, 0x39, 0xd0, 0x74, 0x14, 0x73, 0xd3, + 0x76, 0x02, 0x9c, 0xb4, 0xab, 0x6b, 0xf0, 0x54, 0x55, 0x7c, 0xe2, 0x94, 0xc7, + 0x28, 0xa4, 0x68, 0x7d, 0x57, 0xec, 0x89, 0x09, 0xff, 0x51, 0xa4, 0xd0, 0x2f, + 0x9d, 0xcd, 0x11, 0x19, 0x3d, 0x7d, 0x1c, 0x9f, 0xda, 0xe6, 0xa1, 0x73, 0x96, + 0xa1, 0xbf, 0x57, 0xa9, 0x94, 0x93, 0x4f, 0x5e, 0x7a, 0x59, 0xf0, 0x45, 0xde, + 0xbe, 0xaf, 0xf6, 0x2e, 0xf3, 0x26, 0xb9, 0x47, 0xf2, 0xa8, 0xb4, 0x95, 0x55, + 0xe4, 0xd9, 0x9b, 0x3b, 0xf5, 0xc8, 0x1f, 0xf9, 0xfe, 0x31, 0x4e, 0x04, 0x7a, + 0xf1, 0x52, 0x50, 0x8f, 0x57, 0x01, 0x5c, 0xa4, 0x02, 0xc6, 0x7d, 0x92, 0x5c, + 0x99, 0xac, 0xea, 0x3e, 0xe8, 0xcc, 0x4b, 0x00, 0x8c, 0x5c, 0xb4, 0x39, 0x66, + 0xe7, 0x14, 0xef, 0x48, 0x0f, 0xd0, 0x5e, 0x07, 0xc7, 0xb2, 0xdd, 0xa9, 0xaa, + 0x39, 0x66, 0x11, 0x3e, 0xaa, 0x29, 0x3d, 0x3f, 0x62, 0x2b, 0x30, 0x9d, 0x64, + 0x80, 0x3c, 0xe1, 0xe6, 0x37, 0x8b, 0x6a, 0xac, 0x4f, 0xab, 0x52, 0x7c, 0x43, + 0xcd, 0x45, 0xed, 0x0a, 0x3c, 0x1a, 0x4b, 0x9f, 0xb1, 0x8d, 0xcc, 0xcf, 0xcd, + 0xb6, 0xac, 0x0c, 0x24, 0x21, 0x63, 0x9c, 0xda, 0x00, 0x75, 0xa2, 0x0d, 0xc5, + 0x11, 0x1b, 0x8d, 0x3d, 0x31, 0x99, 0x49, 0x5b, 0xd9, 0x13, 0x3d, 0xba, 0xb9, + 0x45, 0x41, 0x41, 0x0e, 0x4f, 0xba, 0x92, 0xc7, 0xb6, 0x06, 0xa5, 0xcb, 0x12, + 0x2f, 0x14, 0x0c, 0xf1, 0xa3, 0x59, 0x6f, 0x27, 0x88, 0xf3, 0xc8, 0xb9, 0x26, + 0x60, 0xf1, 0x4c, 0xb6, 0x5a, 0xf5, 0xdd, 0x23, 0xdf, 0xdb, 0xac, 0x13, 0x71, + 0xec, 0xf4, 0xb3, 0x37, 0x12, 0xfe, 0xd2, 0x29, 0x2c, 0x44, 0xf7, 0x08, 0x34, + 0xcf, 0x96, 0xc0, 0x5d, 0x58, 0x82, 0x7e, 0x69, 0xbf, 0xc2, 0xe6, 0x96, 0xfa, + 0x08, 0x74, 0x86, 0x9c, 0x02, 0xf3, 0xdc, 0xa1, 0x1c, 0x3b, 0x90, 0xcb, 0x21, + 0x4e, 0x68, 0xbc, 0x1c, 0xae, 0x03, 0x9d, 0x7a, 0x14, 0x6c, 0xdc, 0x1d, 0x60, + 0x9d, 0x7a, 0x6b, 0x3f, 0xd5, 0xd4, 0x61, 0xb0, 0x95, 0x1c, 0x82, 0xcf, 0xb3, + 0xe7, 0x63, 0xfa, 0xd2, 0xd1, 0xbc, 0x76, 0x78, 0xcd, 0xf8, 0x27, 0x79, 0xf8, + 0xfd, 0x5a, 0x1c, 0xe2, 0x2a, 0x8d, 0x3c, 0x45, 0x47, 0xab, 0xd9, 0x59, 0x83, + 0x8a, 0x46, 0xfb, 0x80, 0xaf, 0xe0, 0x1f, 0x8e, 0xcc, 0x99, 0x31, 0x51, 0x3b, + 0x19, 0x62, 0xec, 0x54, 0x08, 0x56, 0xcb, 0x18, 0x93, 0x87, 0xcf, 0xbf, 0xcc, + 0x0f, 0x7c, 0x68, 0x22, 0x3c, 0xba, 0x47, 0xfb, 0x0c, 0x9b, 0x48, 0x6e, 0x4d, + 0x99, 0x17, 0x19, 0x41, 0xf7, 0x67, 0x5a, 0x8b, 0x46, 0x32, 0x8a, 0x3b, 0xc1, + 0x09, 0xbf, 0x07, 0xc6, 0x6d, 0x5e, 0xde, 0x77, 0x1c, 0xc4, 0xc7, 0x4c, 0xe8, + 0x03, 0x33, 0x82, 0x91, 0x91, 0xee, 0xdc, 0x49, 0x35, 0x08, 0xa6, 0x44, 0x53, + 0x0a, 0x61, 0x44, 0xf2, 0x2d, 0xcf, 0x97, 0x52, 0x5a, 0x4c, 0xdc, 0xa1, 0xad, + 0x71, 0x07, 0x3b, 0x08, 0x0b, 0x73, 0xea, 0x45, 0x49, 0xf5, 0x40, 0x1b, 0xff, + 0x43, 0x18, 0x26, 0x8e, 0x6a, 0xd6, 0x37, 0x36, 0x31, 0x57, 0xa1, 0x9a, 0x53, + 0xf1, 0x23, 0xa0, 0xb0, 0xe1, 0x6d, 0x0b, 0x77, 0xf0, 0x20, 0x28, 0xda, 0x46, + 0x41, 0x00, 0xfd, 0xe7, 0x6d, 0x83, 0xdd, 0x0b, 0xb2, 0x24, 0xf7, 0xb5, 0x7a, + 0x00, 0xc0, 0x2f, 0x68, 0xae, 0x64, 0x8f, 0xdc, 0x52, 0x99, 0x57, 0xa1, 0x04, + 0x90, 0xdc, 0xe1, 0xfd, 0xdb, 0xb0, 0x90, 0x4f, 0x0d, 0x51, 0x8b, 0xb3, 0x87, + 0x54, 0x40, 0x19, 0x98, 0x3b, 0x61, 0x69, 0x75, 0xa7, 0x8e, 0x74, 0xd8, 0x54, + 0xfd, 0xdc, 0x49, 0xb2, 0x55, 0x16, 0x7b, 0x55, 0xef, 0x4b, 0xee, 0x46, 0x56, + 0x68, 0xb2, 0x0e, 0xa4, 0x11, 0x8c, 0xa5, 0x69, 0xae, 0x48, 0x0e, 0x0f, 0x6e, + 0x5e, 0x04, 0x3a, 0x35, 0x7b, 0x36, 0xd3, 0xab, 0x36, 0xc8, 0x61, 0xf2, 0x27, + 0x83, 0x01, 0xdc, 0xe5, 0x76, 0x74, 0xd5, 0x07, 0x3b, 0x3a, 0x6f, 0x51, 0x03, + 0xa0, 0x79, 0x3a, 0xf1, 0xb7, 0xd4, 0x6f, 0x95, 0x7e, 0x22, 0xd8, 0xd2, 0x58, + 0x3b, 0xf1, 0x81, 0x83, 0x6c, 0x3b, 0xe9, 0x93, 0x0b, 0xac, 0x8f, 0xa4, 0x60, + 0xe9, 0x68, 0xaa, 0x71, 0x09, 0x87, 0x0b, 0xbe, 0xd1, 0x7d, 0xf5, 0xf8, 0x88, + 0xc8, 0xca, 0x14, 0x67, 0xae, 0x17, 0xdb, 0xbc, 0xde, 0x31, 0xc1, 0x10, 0x5c, + 0xb5, 0xbd, 0xa8, 0x8a, 0xc6, 0xc6, 0x27, 0x00, 0x2c, 0xe2, 0x1c, 0x02, 0x14, + 0x0f, 0xfe, 0x81, 0xec, 0x58, 0xbf, 0x1e, 0x6d, 0x1b, 0x2b, 0xf9, 0xfa, 0x9c, + 0x40, 0x37, 0x47, 0x47, 0xde, 0x34, 0xb6, 0x48, 0xda, 0x0c, 0x93, 0xaa, 0xc9, + 0xe8, 0xe5, 0xe6, 0xb1, 0xaa, 0xc5, 0x89, 0xe3, 0x67, 0x76, 0x8f, 0x54, 0xc5, + 0xe3, 0x8a, 0x3e, 0xc9, 0x1c, 0xe6, 0xdd, 0x28, 0x13, 0x0c, 0x3a, 0xb0, 0xb2, + 0x3b, 0x60, 0x2b, 0xd5, 0xbe, 0x5d, 0xc2, 0x60, 0x03, 0xaa, 0xe0, 0x4b, 0x33, + 0xd7, 0xbd, 0x25, 0x90, 0xe9, 0x0c, 0x8c, 0x38, 0xcb, 0xcf, 0x9d, 0xcc, 0x66, + 0x69, 0x90, 0x52, 0xde, 0xcb, 0xf1, 0x00, 0x25, 0x39, 0x6c, 0xb8, 0x1f, 0x3b, + 0x24, 0x51, 0x2c, 0x84, 0x00, 0xb4, 0x7c, 0x82, 0x99, 0x02, 0x6e, 0x82, 0x84, + 0x2c, 0x19, 0x8e, 0x5d, 0xd9, 0x57, 0x1a, 0x56, 0xa7, 0xe0, 0xd4, 0x23, 0xff, + 0x27, 0x98, 0x9d, 0x3e, 0xb4, 0x17, 0xec, 0xd3, 0xc3, 0x09, 0x3f, 0xb8, 0x2c, + 0x56, 0x58, 0xe2, 0x96, 0x24, 0xc5, 0x32, 0x80, 0xc8, 0x14, 0xe5, 0x9c, 0x03, + 0xb8, 0x7a, 0x86, 0x51, 0xce, 0xe6, 0x3b, 0x85, 0x93, 0x8c, 0xb9, 0x95, 0x02, + 0x1e, 0x07, 0x91, 0xaf, 0x9b, 0xb2, 0xaf, 0x5f, 0x97, 0xc2, 0x78, 0x76, 0xa0, + 0xf0, 0xfa, 0xee, 0x9b, 0xc3, 0xbd, 0x7a, 0x3a, 0x60, 0x6a, 0x9f, 0xdb, 0x84, + 0x9c, 0x5d, 0x82, 0xd0, 0xa6, 0x19, 0x23, 0xc2, 0xe5, 0xd8, 0xaa, 0x63, 0xa8, + 0xa5, 0x0c, 0x38, 0xbd, 0x03, 0x87, 0x72, 0xc4, 0x14, 0x3d, 0x8b, 0x7a, 0xcf, + 0xd7, 0x4e, 0x72, 0xc0, 0x4d, 0x89, 0x24, 0x8d, 0xff, 0x20, 0xfe, 0x8d, 0xc5, + 0xec, 0x21, 0x49, 0x05, 0x4e, 0xa2, 0x41, 0x64, 0xe8, 0x5f, 0x67, 0x44, 0xad, + 0x0c, 0xac, 0xf1, 0xa8, 0xb7, 0x01, 0x26, 0xf4, 0x82, 0xc0, 0x92, 0xed, 0x9f, + 0x61, 0x27, 0xd2, 0x05, 0x0d, 0x12, 0xe8, 0x78, 0xa7, 0x96, 0x53, 0xa1, 0xe8, + 0x4d, 0xae, 0xc3, 0xeb, 0xe6, 0x2d, 0x5f, 0x6c, 0x4a, 0xbe, 0x5c, 0xe9, 0x0a, + 0x7f, 0xe2, 0xe5, 0x2a, 0x8d, 0x78, 0x46, 0xe8, 0xed, 0xf2, 0xf2, 0xbc, 0xe0, + 0x5a, 0x03, 0x7c, 0x82, 0x6f, 0x22, 0xca, 0xad, 0x12, 0x61, 0x46, 0x7d, 0xcf, + 0xb7, 0xd6, 0xb6, 0x13, 0x3d, 0xc2, 0x1e, 0x80, 0x96, 0xc7, 0xe9, 0xf8, 0xe9, + 0xe1, 0x0c, 0x1e, 0x3f, 0xac, 0x40, 0x58, 0xb6, 0x82, 0xc6, 0x8e, 0x54, 0xfa, + 0xca, 0xe0, 0xf9, 0xc2, 0xdd, 0x4d, 0x64, 0xd9, 0x04, 0x61, 0x52, 0xb4, 0x76, + 0x23, 0x32, 0x93, 0x9f, 0x17, 0xe6, 0xaa, 0xf7, 0xd8, 0xb9, 0xd3, 0x58, 0xe2, + 0x21, 0x8d, 0x4e, 0x0d, 0x69, 0xa4, 0xf1, 0x19, 0xe1, 0xc6, 0x4e, 0xec, 0x4c, + 0x8b, 0x53, 0x28, 0x09, 0x70, 0x71, 0x31, 0xf0, 0x1f, 0x55, 0xc7, 0xad, 0x04, + 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, 0x3d, 0x0a, 0x2b, 0x0f, 0xfb, 0x0b, 0x05, 0xa6, + 0xbe, 0x05, 0x5b, 0x8c, 0x94, 0xca, 0x80, 0xbb, 0x0a, 0x1d, 0x13, 0xcd, 0x4c, + 0xd6, 0x9a, 0xb9, 0x83, 0x04, 0xae, 0x25, 0x15, 0xd5, 0xf7, 0x69, 0x9d, 0x4a, + 0xbe, 0xe5, 0xc2, 0x0b, 0xe6, 0x09, 0xd8, 0x73, 0x51, 0x10, 0x12, 0xf2, 0x34, + 0xbd, 0x85, 0xa7, 0xef, 0xf5, 0xfb, 0x63, 0x4c, 0xff, 0x26, 0x58, 0xba, 0x65, + 0x16, 0x04, 0x85, 0x63, 0x09, 0x5e, 0xce, 0xfb, 0x30, 0x15, 0xee, 0x3f, 0x03, + 0xca, 0x52, 0xa1, 0x77, 0xf2, 0x61, 0xec, 0xdc, 0x26, 0xbc, 0x08, 0x9d, 0x34, + 0xc6, 0x40, 0x48, 0x46, 0xe9, 0xc6, 0x47, 0xfc, 0xfe, 0x98, 0xcc, 0x6a, 0xcd, + 0xbb, 0x46, 0x4f, 0x64, 0x27, 0x8a, 0xd8, 0xce, 0x9d, 0x1a, 0xe0, 0xd4, 0x15, + 0xbc, 0x0c, 0x05, 0x24, 0x5f, 0xdd, 0xaf, 0x4e, 0xbc, 0x8d, 0xc7, 0x03, 0xa8, + 0x5c, 0xb2, 0x70, 0xf7, 0x96, 0xad, 0x2d, 0x93, 0x7e, 0x2a, 0xc0, 0xd5, 0xe0, + 0xa3, 0x48, 0x21, 0x75, 0x80, 0x00, 0xaa, 0x59, 0xc9, 0xd4, 0x65, 0x24, 0x85, + 0x29, 0x4e, 0xe0, 0xab, 0x29, 0x69, 0x6b, 0x21, 0x43, 0x0f, 0xa5, 0x4d, 0xcf, + 0xbf, 0x2b, 0x9c, 0x49, 0xd1, 0x42, 0x06, 0x42, 0x09, 0xee, 0xee, 0xd4, 0xd4, + 0x71, 0xff, 0xc0, 0x17, 0xd4, 0xe2, 0x0a, 0x79, 0x6b, 0x09, 0x27, 0x80, 0x4c, + 0x06, 0x1b, 0x9f, 0x4a, 0x70, 0x91, 0xfe, 0x01, 0x5a, 0xda, 0x68, 0xfd, 0x84, + 0x42, 0xe0, 0x18, 0x25, 0xc8, 0x8d, 0xfe, 0x55, 0xcf, 0x5d, 0xe3, 0x89, 0x36, + 0xf7, 0xce, 0x25, 0x31, 0x1b, 0x90, 0x2b, 0xa9, 0x7a, 0x3c, 0x12, 0xa9, 0x5c, + 0xfa, 0x1c, 0x3a, 0x59, 0x1b, 0x81, 0x8f, 0x60, 0x83, 0x27, 0x09, 0xd9, 0xe4, + 0x83, 0x9e, 0x41, 0x0f, 0xb3, 0x6b, 0x84, 0xf3, 0xac, 0x4f, 0x07, 0x0f, 0xc3, + 0x5e, 0x16, 0x19, 0x78, 0x25, 0x9e, 0x5b, 0x8e, 0xdc, 0x74, 0x4d, 0x90, 0x91, + 0x9a, 0xa7, 0x70, 0xbb, 0x36, 0x21, 0x51, 0x28, 0xe5, 0x82, 0xb5, 0x96, 0x41, + 0xe2, 0x38, 0x52, 0xe9, 0x58, 0xeb, 0x8f, 0xc3, 0xc0, 0xaa, 0x96, 0x15, 0x2b, + 0xa4, 0xf7, 0x7f, 0x13, 0x8d, 0x6a, 0x67, 0x12, 0xa3, 0xae, 0x32, 0x26, 0x01, + 0x58, 0x83, 0xf8, 0x1d, 0xb2, 0x3e, 0x58, 0x3c, 0x86, 0x9c, 0x4c, 0x71, 0x14, + 0x3a, 0x6f, 0xff, 0xd6, 0x5e, 0x8d, 0xfd, 0xc5, 0x0c, 0x99, 0xa2, 0xf1, 0xf3, + 0x14, 0xcd, 0xcc, 0x71, 0x35, 0x9e, 0x23, 0x5f, 0x1d, 0x7d, 0xc2, 0xb5, 0xf3, + 0x8e, 0xf7, 0xb9, 0x70, 0x84, 0x31, 0x63, 0xc0, 0x3f, 0x9d, 0xd4, 0x0a, 0x80, + 0x15, 0xef, 0xdc, 0x87, 0x91, 0x95, 0x6a, 0x3f, 0x3c, 0xed, 0xd9, 0xea, 0x64, + 0xf8, 0xef, 0xa7, 0xa0, 0x81, 0x5a, 0x70, 0x38, 0x1d, 0x71, 0x46, 0x78, 0x17, + 0xbd, 0x04, 0xca, 0x52, 0x9a, 0xed, 0xe0, 0x7f, 0xf6, 0x0d, 0x17, 0x6a, 0xed, + 0x0f, 0x85, 0x5a, 0x2e, 0xae, 0xa8, 0x9e, 0xae, 0xac, 0xa8, 0x93, 0x58, 0xc0, + 0x81, 0x82, 0x6a, 0x08, 0x12, 0xa5, 0xbc, 0xa2, 0x8b, 0xe1, 0x37, 0x3f, 0x08, + 0x6d, 0xbd, 0xba, 0x7e, 0x43, 0xe2, 0x03, 0x21, 0x2c, 0x9f, 0xed, 0x21, 0x47, + 0x4b, 0xa1, 0x9a, 0x05, 0x5f, 0xfc, 0xc1, 0x79, 0x41, 0x2e, 0x76, 0x7d, 0xf9, + 0x99, 0xb9, 0x58, 0x76, 0xe3, 0xb8, 0x04, 0x5a, 0x12, 0x95, 0xd9, 0xae, 0xad, + 0x0f, 0x16, 0xb2, 0x6c, 0x5c, 0xc7, 0x66, 0x70, 0x4d, 0xe4, 0x8c, 0x69, 0x0d, + 0xe8, 0x3d, 0x22, 0x5d, 0x1c, 0x30, 0x3f, 0xba, 0x68, 0x98, 0xd5, 0x88, 0x5d, + 0x6c, 0x21, 0x49, 0xa0, 0x54, 0x27, 0x4d, 0x9a, 0x4d, 0xff, 0x8e, 0xc2, 0x1c, + 0x96, 0xf5, 0x78, 0x39, 0x97, 0x10, 0xc8, 0x25, 0x3e, 0x8e, 0x9a, 0xbc, 0xfa, + 0x76, 0xcf, 0x01, 0x07, 0x9f, 0xb2, 0x85, 0x62, 0x7b, 0xa7, 0x04, 0xc9, 0x05, + 0x13, 0x44, 0x3c, 0x78, 0x8f, 0x5c, 0x9d, 0xe0, 0xe9, 0x05, 0xb9, 0x4a, 0xea, + 0x75, 0x88, 0xa1, 0x49, 0x98, 0xdc, 0x1b, 0x22, 0x7a, 0x06, 0x3c, 0x6f, 0x55, + 0x2d, 0x00, 0x3e, 0xc3, 0xa7, 0x53, 0xf4, 0x92, 0x49, 0xe4, 0xad, 0x34, 0x96, + 0x03, 0x06, 0x6f, 0xc9, 0xc6, 0x61, 0xd6, 0x1f, 0x97, 0xcf, 0xf7, 0x9c, 0xaf, + 0x7c, 0xd2, 0x75, 0x92, 0x49, 0x67, 0xed, 0x1b, 0xc7, 0x0b, 0xe9, 0xc7, 0xea, + 0x84, 0x5b, 0x1e, 0x05, 0xcf, 0xb3, 0x37, 0x56, 0x15, 0xbf, 0xdf, 0xef, 0x42, + 0x3b, 0x96, 0xd7, 0x9b, 0xc5, 0x78, 0x33, 0xe9, 0x77, 0x17, 0x1c, 0x32, 0x4d, + 0xce, 0x2a, 0x1e, 0xa1, 0xe4, 0x30, 0x4f, 0x49, 0xe4, 0x3a, 0xe0, 0x65, 0xe3, + 0xfb, 0x19, 0x6f, 0x76, 0xd9, 0xb8, 0x79, 0xc7, 0x20, 0x08, 0x62, 0xea, 0xd1, + 0x8d, 0xea, 0x5f, 0xb6, 0xa1, 0x7a, 0xce, 0xa3, 0x33, 0x86, 0xeb, 0x4c, 0xa1, + 0xb5, 0x14, 0x86, 0xa9, 0x14, 0x8f, 0xbd, 0xf9, 0xa9, 0x53, 0x32, 0xaa, 0x60, + 0x5c, 0x5d, 0x54, 0x83, 0xce, 0x4b, 0xa8, 0xec, 0xe0, 0x1a, 0x8f, 0xf2, 0xb7, + 0xef, 0x82, 0xd0, 0x5c, 0x0b, 0x6e, 0x86, 0x1b, 0x91, 0x5f, 0x13, 0xca, 0x0e, + 0xb3, 0xea, 0x13, 0xd5, 0x07, 0x08, 0x07, 0xa2, 0xcb, 0x66, 0x80, 0xa2, 0x49, + 0xea, 0x9c, 0x72, 0x24, 0x39, 0x2c, 0xbc, 0x8a, 0xb8, 0x25, 0x01, 0xb2, 0x6f, + 0x11, 0x2a, 0xc7, 0x89, 0xa1, 0x2a, 0x31, 0xad, 0x13, 0x14, 0xe2, 0xed, 0xe0, + 0x8f, 0xad, 0x31, 0x43, 0xaf, 0x30, 0xc2, 0x7f, 0x40, 0x3b, 0xc8, 0x66, 0xc7, + 0x55, 0x17, 0x78, 0x52, 0xaf, 0xd0, 0xab, 0xb9, 0x0a, 0xde, 0x1d, 0x68, 0x27, + 0x26, 0xf4, 0x20, 0x08, 0xb4, 0x6a, 0xd7, 0xf8, 0xab, 0xdb, 0x18, 0x11, 0x7f, + 0x72, 0x64, 0x13, 0x90, 0xf0, 0x86, 0xb6, 0xe1, 0x49, 0x8b, 0xe6, 0x95, 0x48, + 0x52, 0x7e, 0x6a, 0xda, 0x2b, 0x38, 0xb9, 0xfe, 0x12, 0x1e, 0xf6, 0x70, 0xaf, + 0x74, 0x37, 0xd3, 0x25, 0x36, 0xd5, 0xcf, 0x5c, 0x4a, 0xb1, 0x9d, 0xd9, 0x97, + 0x71, 0x58, 0x2d, 0x03, 0x81, 0x04, 0xb7, 0xe0, 0x39, 0xa3, 0x76, 0xf7, 0xac, + 0xbb, 0xea, 0xdb, 0x34, 0xf9, 0x45, 0xbe, 0xb9, 0xd7, 0xca, 0x0e, 0x4e, 0x3d, + 0x5c, 0x5e, 0x4e, 0xb1, 0xd8, 0x52, 0x6e, 0xbd, 0x13, 0xda, 0xcb, 0x1b, 0xa3, + 0x57, 0x35, 0xc6, 0xd0, 0x4a, 0x45, 0x55, 0xac, 0xf4, 0xbf, 0x11, 0x76, 0x26, + 0x50, 0x0d, 0x77, 0xb3, 0x81, 0x89, 0xdd, 0x48, 0x88, 0x04, 0x12, 0x25, 0xac, + 0xbe, 0x38, 0x74, 0xa4, 0xc0, 0xf6, 0x07, 0xfe, 0x67, 0x45, 0xf9, 0x35, 0x5b, + 0x3f, 0xa1, 0x88, 0xf1, 0xd6, 0x5c, 0x09, 0xf3, 0x89, 0xaf, 0x1b, 0x9d, 0x62, + 0x32, 0xaa, 0x79, 0x44, 0x79, 0x19, 0xc5, 0x50, 0xf6, 0xf3, 0x1f, 0xec, 0x35, + 0x48, 0x1c, 0xb9, 0x22, 0xde, 0x2d, 0xb5, 0xb4, 0xda, 0x2f, 0x81, 0x94, 0x86, + 0x17, 0x02, 0x8e, 0x32, 0x17, 0x06, 0xa3, 0xa7, 0x78, 0xc1, 0x93, 0x8c, 0x44, + 0x3b, 0xb0, 0x0e, 0x5b, 0x0f, 0xf0, 0x6a, 0xd8, 0xab, 0x9b, 0x1a, 0xb0, 0xc1, + 0x14, 0x77, 0x67, 0x3f, 0x85, 0xdf, 0x95, 0x61, 0xdb, 0xea, 0x45, 0xd5, 0xf9, + 0x78, 0x1e, 0xbe, 0x31, 0x7a, 0x07, 0x10, 0xae, 0x54, 0x61, 0xe3, 0x4f, 0xe6, + 0xf1, 0xb1, 0xaa, 0x9b, 0x4e, 0x67, 0xb1, 0x49, 0x10, 0x98, 0x48, 0x02, 0xc2, + 0xa7, 0xe3, 0x81, 0x93, 0xbc, 0x7b, 0xdc, 0x8b, 0xa3, 0xe4, 0xe3, 0xd1, 0xd9, + 0x33, 0xbf, 0xb5, 0x80, 0xf5, 0xb3, 0xe8, 0x7a, 0x2a, 0x06, 0x51, 0x70, 0x51, + 0x41, 0x0f, 0xe1, 0xb4, 0xff, 0x1e, 0xa0, 0xad, 0xe8, 0x24, 0xf3, 0x38, 0x51, + 0x54, 0x56, 0xa5, 0x7c, 0x7a, 0x91, 0x6a, 0x74, 0x38, 0x8e, 0xe8, 0xf1, 0x28, + 0x1f, 0x9a, 0xde, 0x0a, 0xe2, 0xa2, 0x61, 0x3a, 0x06, 0x12, 0xc4, 0x69, 0xdf, + 0x79, 0x2b, 0x8d, 0xf4, 0xca, 0xe4, 0xfc, 0x25, 0xc1, 0xca, 0xdb, 0xa9, 0x5a, + 0x80, 0x7c, 0xe6, 0x1e, 0x5a, 0x53, 0x03, 0xfa, 0xaf, 0x9e, 0x14, 0x65, 0x39, + 0x96, 0xb5, 0xa8, 0xad, 0xc3, 0x4f, 0xd4, 0x75, 0xef, 0x14, 0x99, 0x09, 0x4b, + 0xab, 0xaf, 0x1f, 0x3f, 0x07, 0xda, 0x9a, 0x39, 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, + 0x83, 0x27, 0x98, 0x7a, 0xdf, 0xe9, 0x56, 0x48, 0x63, 0xfb, 0xdf, 0xa8, 0xf6, + 0xb4, 0x6a, 0x88, 0x41, 0x58, 0x30, 0x99, 0xaf, 0xb7, 0x87, 0x01, 0x18, 0xfa, + 0xce, 0x76, 0x34, 0x7e, 0x40, 0xb6, 0xfd, 0x8c, 0xd1, 0x55, 0x82, 0xae, 0x8e, + 0x23, 0xbe, 0x9a, 0x02, 0x19, 0xbc, 0x3e, 0x4e, 0x45, 0x46, 0xa3, 0x0d, 0x3b, + 0xbb, 0xbd, 0x16, 0x86, 0x08, 0x68, 0x76, 0xbe, 0x0e, 0x4c, 0x85, 0x9b, 0xe7, + 0x1f, 0xb5, 0x8f, 0x4f, 0xab, 0x3d, 0x28, 0xc0, 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, + 0xed, 0xb7, 0xf8, 0x89, 0x46, 0xfb, 0x40, 0xcf, 0xa5, 0x78, 0x6a, 0x0f, 0xcb, + 0xa1, 0x30, 0x3c, 0x83, 0x47, 0xec, 0xee, 0x93, 0xd4, 0x6d, 0x14, 0x0b, 0xb5, + 0xf6, 0x95, 0x31, 0xd6, 0x66, 0x54, 0x8b, 0x10, 0x9c, 0xe7, 0x64, 0xbe, 0xad, + 0x7c, 0x87, 0xbd, 0x4c, 0x87, 0x64, 0x94, 0xde, 0x82, 0xdb, 0x6e, 0x50, 0x73, + 0xa6, 0xc9, 0x4f, 0x7c, 0x09, 0x9a, 0x40, 0xd7, 0xa3, 0x1c, 0x4a, 0x04, 0xb6, + 0x9c, 0x9f, 0xcc, 0xf3, 0xc7, 0xdd, 0x56, 0xf5, 0x54, 0x47, 0x76, 0x03, 0x48, + 0x75, 0xa3, 0x2d, 0x3a, 0x7f, 0x01, 0x00, 0x6b, 0x65, 0x90, 0xd6, 0x75, 0x2d, + 0x63, 0x89, 0x9e, 0x20, 0x8c, 0x9e, 0x30, 0x50, 0x23, 0xe5, 0x62, 0x55, 0x51, + 0xa2, 0xaa, 0xca, 0x96, 0x87, 0xac, 0x52, 0x69, 0xfd, 0x36, 0x8b, 0x26, 0x17, + 0x2a, 0x73, 0x7f, 0x26, 0x76, 0x85, 0x99, 0x8a, 0x3f, 0x7d, 0x26, 0x37, 0x91, + 0x49, 0x09, 0xc7, 0x46, 0x49, 0x5d, 0x24, 0xc4, 0x98, 0x63, 0x5e, 0xf9, 0x7a, + 0xc6, 0x6a, 0x40, 0x08, 0x94, 0xc0, 0x9f, 0x73, 0x48, 0x8e, 0xb7, 0xcf, 0x33, + 0xf6, 0xda, 0xd1, 0x66, 0x17, 0x1c, 0xdb, 0x0a, 0xb5, 0xdb, 0x5f, 0x9c, 0x17, + 0xcb, 0x33, 0xde, 0x1c, 0x43, 0x17, 0x17, 0x5a, 0xb4, 0x92, 0x0f, 0x3c, 0x6f, + 0xd6, 0x5c, 0xa7, 0x9b, 0x5e, 0x08, 0xe5, 0x28, 0x42, 0x12, 0x3d, 0x9a, 0xe9, + 0xdc, 0x9a, 0x02, 0xe1, 0xb7, 0xc6, 0x50, 0xbe, 0x2f, 0x4f, 0xe7, 0x15, 0x8d, + 0x85, 0xb7, 0xe0, 0xa4, 0x3a, 0x47, 0x2e, 0x29, 0x8a, 0xc0, 0xaf, 0xdc, 0x52, + 0x87, 0xd7, 0x2d, 0x74, 0xa3, 0xf7, 0x4e, 0x5a, 0x0a, 0xcd, 0x81, 0x85, 0x29, + 0x99, 0x96, 0xd7, 0x90, 0xe5, 0x91, 0xa4, 0x94, 0x93, 0xfe, 0x7d, 0x7d, 0xab, + 0xcd, 0xbb, 0xe5, 0x3c, 0x18, 0xb0, 0x0a, 0xef, 0x1b, 0x1b, 0x91, 0xd2, 0x81, + 0xb7, 0x42, 0x66, 0x84, 0x8b, 0x40, 0x48, 0x7e, 0x43, 0x8d, 0xa4, 0xe0, 0xdb, + 0x6f, 0xcd, 0xdb, 0x18, 0x31, 0xbd, 0x1c, 0xc2, 0x56, 0x7c, 0xa0, 0x33, 0xac, + 0x40, 0x37, 0x62, 0xbd, 0xf5, 0x16, 0x01, 0x45, 0x23, 0xa0, 0xdd, 0x53, 0xcf, + 0x8e, 0x05, 0xb2, 0x28, 0x36, 0x1e, 0x4c, 0xac, 0x37, 0xb4, 0xad, 0xf0, 0xec, + 0xd4, 0xcc, 0xba, 0x22, 0x60, 0x0a, 0x8c, 0x82, 0xf9, 0x8f, 0xeb, 0x82, 0xa1, + 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, 0x76, 0x79, 0x82, 0x36, 0xc5, 0xca, 0x7f, + 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, 0x4d, 0x87, 0x13, 0xe5, 0x6c, 0x77, 0x2f, + 0x2c, 0x18, 0x54, 0xb1, 0x01, 0xcd, 0xd0, 0xfe, 0xee, 0xaf, 0x95, 0xbc, 0x80, + 0xd9, 0x39, 0xde, 0x77, 0x1d, 0x25, 0xc2, 0xdc, 0x0f, 0xc0, 0xd4, 0x93, 0x77, + 0xc2, 0x50, 0x11, 0x3b, 0xe7, 0x7d, 0x9e, 0xde, 0x68, 0x08, 0x8a, 0x1b, 0x26, + 0x48, 0xb8, 0x17, 0x4c, 0xbc, 0xfc, 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x11, 0x5a, + 0xfd, 0xe1, 0x84, 0x05, 0x05, 0x4e, 0x5d, 0xa9, 0xa0, 0x43, 0x10, 0x34, 0x2c, + ], + txid: [ + 0x40, 0x6a, 0x57, 0x3c, 0x1f, 0x72, 0xf4, 0x85, 0x8f, 0x8b, 0xba, 0x51, 0x77, + 0x41, 0x19, 0xdb, 0x87, 0x0d, 0x57, 0x6c, 0x9a, 0xd5, 0xaf, 0xc2, 0x64, 0x93, + 0x0e, 0x2c, 0xe9, 0x11, 0x3e, 0xd2, + ], + auth_digest: [ + 0x04, 0x07, 0x22, 0x74, 0x0f, 0x68, 0x5a, 0x8d, 0x66, 0x17, 0x5e, 0x80, 0xbe, + 0x70, 0xe8, 0x70, 0x81, 0x2a, 0x0d, 0x10, 0x77, 0x56, 0xcf, 0xbb, 0x90, 0x00, + 0x8a, 0x86, 0x3f, 0x0a, 0xd3, 0x55, + ], + amounts: vec![977707669677105, 1086470537676782, 717881794498989], + script_pubkeys: vec![vec![0x53, 0x52, 0x65], vec![0x53, 0x51], vec![0x00, 0xac]], + transparent_input: Some(1), + sighash_shielded: [ + 0xe7, 0x0d, 0x54, 0x15, 0x5a, 0xf3, 0x6f, 0x88, 0x7b, 0x3b, 0xd4, 0xeb, 0x8b, + 0x44, 0x72, 0xea, 0x53, 0x29, 0xc7, 0x10, 0x10, 0x34, 0xe3, 0xc4, 0xe3, 0x87, + 0x70, 0x9b, 0x22, 0xa1, 0xcd, 0xe1, + ], + sighash_all: Some([ + 0x0f, 0x49, 0xe9, 0x42, 0x2a, 0xd8, 0x73, 0x85, 0x3e, 0xaa, 0x41, 0x97, 0xc8, + 0xef, 0xe8, 0x2e, 0xcc, 0xf3, 0xd1, 0xe3, 0x1f, 0xb2, 0x9d, 0x5c, 0x8d, 0x60, + 0x40, 0x48, 0xb1, 0x11, 0x30, 0x7e, + ]), + sighash_none: Some([ + 0xad, 0x51, 0x81, 0xe0, 0x4e, 0x00, 0xe6, 0x23, 0x3b, 0x81, 0x3f, 0x9b, 0x55, + 0x73, 0x62, 0x17, 0xe0, 0x44, 0xcf, 0xeb, 0x06, 0x25, 0x0f, 0x01, 0x1a, 0x78, + 0xbc, 0xf4, 0x3f, 0xe6, 0x4e, 0x7d, + ]), + sighash_single: None, + sighash_all_anyone: Some([ + 0x5c, 0x18, 0xba, 0xca, 0x32, 0x30, 0x83, 0x74, 0xf4, 0x70, 0x48, 0x69, 0x00, + 0x25, 0xee, 0x36, 0x64, 0xa9, 0x86, 0x68, 0x52, 0x41, 0x52, 0xb4, 0x25, 0xc0, + 0x63, 0x8c, 0x34, 0x4a, 0x6d, 0xf4, ]), + sighash_none_anyone: Some([ + 0x85, 0xaf, 0xd9, 0x13, 0x58, 0xdd, 0x6f, 0x03, 0x30, 0x14, 0x63, 0x2c, 0xe6, + 0xbd, 0x02, 0xc7, 0xd9, 0x4c, 0xb9, 0x07, 0x22, 0x35, 0xce, 0xe6, 0x8e, 0x5d, + 0xeb, 0x41, 0x9a, 0x17, 0xdd, 0x02, + ]), + sighash_single_anyone: None, }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x23, - 0xe1, 0x19, 0xf6, 0x35, 0xef, 0x1d, 0x05, 0x02, 0x4b, 0x21, 0x6b, 0x70, 0x23, - 0xfa, 0xdc, 0x2d, 0x25, 0x94, 0x9c, 0x90, 0x03, 0x7e, 0x71, 0xe3, 0xe5, 0x50, - 0x72, 0x6d, 0x21, 0x0a, 0x2c, 0x68, 0x83, 0x42, 0xe5, 0x24, 0x40, 0x63, 0x5e, - 0x9c, 0xc1, 0x4a, 0xfe, 0x10, 0x06, 0x65, 0x51, 0x51, 0x51, 0xac, 0x53, 0x78, - 0x2e, 0x9e, 0x4a, 0x5f, 0xa8, 0x7f, 0x0a, 0x95, 0x6f, 0x5b, 0x85, 0x50, 0x99, - 0x60, 0x28, 0x5c, 0x22, 0x62, 0x7c, 0x59, 0x48, 0x3a, 0x5a, 0x4c, 0x28, 0xcc, - 0xe4, 0xb1, 0x56, 0xe5, 0x51, 0x40, 0x6a, 0x7e, 0xe8, 0x35, 0x56, 0x56, 0xa2, - 0x00, 0x43, 0xe3, 0x8c, 0xe1, 0x03, 0xbd, 0x9a, 0x27, 0x4e, 0x28, 0x8d, 0x02, - 0x00, 0x00, 0xaa, 0xfe, 0x03, 0x32, 0x52, 0xc7, 0x03, 0x00, 0x05, 0x51, 0x6a, - 0x63, 0x65, 0x63, 0x38, 0xeb, 0x8b, 0x41, 0xca, 0x51, 0x04, 0x00, 0x06, 0x53, - 0x51, 0x63, 0x65, 0xac, 0xac, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x11, + 0x12, 0xf4, 0x02, 0x8a, 0x12, 0x7f, 0x12, 0x02, 0x38, 0x2c, 0x6b, 0x03, 0xe7, + 0xd8, 0x08, 0x5e, 0x90, 0x6c, 0xf8, 0x4c, 0xa2, 0xc1, 0x20, 0x7c, 0x87, 0xa2, + 0xbc, 0xe2, 0x08, 0x0a, 0x98, 0x91, 0x66, 0x8d, 0x69, 0xb0, 0x44, 0xbe, 0xce, + 0xd6, 0xcd, 0xa3, 0x2c, 0x22, 0x00, 0x91, 0x17, 0x91, 0x7a, 0xa0, 0x7d, 0xdf, + 0xfc, 0xd3, 0x77, 0x39, 0x5c, 0xba, 0x61, 0x6d, 0x63, 0xc0, 0xb6, 0x9c, 0x01, + 0xfc, 0xc4, 0x53, 0x91, 0xfd, 0x5b, 0x87, 0x63, 0xfb, 0x96, 0xd7, 0xca, 0x33, + 0x3a, 0x12, 0xde, 0x3c, 0xef, 0xa9, 0x1c, 0x08, 0x00, 0x51, 0x6a, 0x53, 0x65, + 0x00, 0x52, 0x51, 0x29, 0x3e, 0x46, 0x37, 0x03, 0x06, 0xe1, 0xbd, 0x04, 0xca, + 0x10, 0x07, 0x00, 0x02, 0x65, 0xac, 0x49, 0xc6, 0xe2, 0x0d, 0x87, 0x7e, 0x02, + 0x00, 0x05, 0x52, 0x53, 0x53, 0x63, 0xac, 0x51, 0xd1, 0x58, 0x22, 0xdc, 0x20, + 0x05, 0x00, 0x01, 0x53, 0x00, 0x00, 0x02, 0x36, 0xeb, 0x2d, 0x22, 0xe4, 0x95, + 0x1c, 0xb3, 0x3b, 0x2e, 0x33, 0xf2, 0xb0, 0x57, 0x3e, 0x39, 0x2e, 0x96, 0x13, + 0x53, 0xef, 0x1f, 0x9c, 0x8d, 0x5b, 0x4a, 0x2b, 0x79, 0x1c, 0xfe, 0x50, 0x35, + 0x00, 0x66, 0xfa, 0xc6, 0xb3, 0x3f, 0x8d, 0x6c, 0x97, 0xeb, 0x8e, 0xf4, 0x3e, + 0x92, 0xb5, 0xa7, 0xee, 0x6e, 0xd0, 0x16, 0xc0, 0xf6, 0x65, 0xbe, 0x81, 0x33, + 0xb7, 0xdc, 0x1d, 0x86, 0x04, 0x0d, 0x84, 0x70, 0x02, 0x25, 0x4e, 0x02, 0x71, + 0xd5, 0xc2, 0x77, 0xde, 0x74, 0x03, 0x0a, 0xd9, 0x69, 0x88, 0x1a, 0xe4, 0xb3, + 0x67, 0xd6, 0x87, 0x9c, 0x4a, 0x1b, 0xef, 0xaf, 0x45, 0x64, 0x5a, 0xa0, 0xbf, + 0x46, 0x70, 0xb7, 0xe0, 0x5d, 0xfd, 0xaf, 0xbb, 0x0c, 0xf3, 0xdd, 0xee, 0x28, + 0xd7, 0x6a, 0x82, 0x42, 0x8e, 0x8a, 0xba, 0x43, 0x64, 0xe8, 0x4b, 0xac, 0x37, + 0x92, 0x98, 0xdf, 0x29, 0x32, 0xff, 0xe5, 0x09, 0x25, 0x47, 0x28, 0x81, 0xf6, + 0x4a, 0xbc, 0x2b, 0x30, 0xda, 0xde, 0xfe, 0x4a, 0x8c, 0x52, 0x94, 0x3f, 0x02, + 0xc1, 0x79, 0x2b, 0x95, 0x8a, 0x90, 0x4f, 0x00, 0x80, 0x41, 0x04, 0xea, 0x4e, + 0x27, 0xd0, 0xcd, 0xf7, 0xdd, 0xd3, 0x48, 0xab, 0xff, 0x77, 0x7f, 0x4a, 0x13, + 0xbb, 0xc7, 0x16, 0xb6, 0xa5, 0x94, 0x4e, 0xe7, 0x27, 0x96, 0x56, 0x90, 0xe2, + 0x09, 0xb4, 0x9e, 0xb9, 0x62, 0xc0, 0x39, 0x97, 0x5f, 0x93, 0x9e, 0xd5, 0xc6, + 0xe4, 0xc4, 0x00, 0xd8, 0x87, 0x75, 0x94, 0x33, 0xd3, 0xad, 0x71, 0x6d, 0xa0, + 0xcb, 0x44, 0x61, 0x13, 0xc7, 0x72, 0x7a, 0x64, 0xb5, 0x8c, 0x3f, 0x8a, 0x0f, + 0x81, 0x18, 0x9f, 0x98, 0x00, 0x52, 0x33, 0xa8, 0x13, 0x66, 0xae, 0xe7, 0x3c, + 0xec, 0x85, 0x22, 0x8e, 0xbc, 0xfd, 0x5e, 0xe3, 0xc3, 0xfb, 0x44, 0xdb, 0x76, + 0xba, 0x24, 0x3f, 0x28, 0x42, 0xb7, 0xb5, 0xfc, 0x74, 0x6a, 0xe5, 0x1b, 0x0b, + 0xc4, 0xbd, 0x4f, 0xc9, 0xfd, 0x83, 0x35, 0x65, 0xea, 0x85, 0x2b, 0x92, 0xb2, + 0x24, 0xf6, 0x99, 0x03, 0x18, 0xad, 0x8c, 0x7d, 0x94, 0x37, 0xe2, 0x0e, 0x2a, + 0x1f, 0x20, 0xe8, 0x18, 0xf9, 0x05, 0x7c, 0x5a, 0xba, 0xaa, 0x2e, 0x5c, 0x15, + 0xb9, 0x49, 0x45, 0xcd, 0x42, 0x4c, 0x28, 0xa5, 0xfa, 0x38, 0x5d, 0xad, 0xfe, + 0x49, 0x07, 0xb2, 0x74, 0xd8, 0x42, 0x70, 0x7d, 0xb3, 0x69, 0x7a, 0x5a, 0xe6, + 0xc8, 0xf5, 0x42, 0xe5, 0xec, 0xc0, 0x7f, 0xe4, 0x73, 0x50, 0xd1, 0x01, 0x46, + 0x70, 0x21, 0x2e, 0xfe, 0x81, 0xfb, 0x7c, 0x73, 0xe8, 0x45, 0x0d, 0xf8, 0x14, + 0xef, 0x62, 0x32, 0xf7, 0x49, 0x0f, 0x63, 0xcc, 0xf0, 0x74, 0x80, 0xf8, 0x84, + 0xa6, 0x6e, 0xaf, 0xfc, 0x28, 0xfe, 0xa4, 0x48, 0xd7, 0xb4, 0x01, 0xcd, 0xae, + 0x10, 0xe7, 0xc0, 0xc7, 0xf9, 0xa7, 0xb1, 0x53, 0x31, 0x96, 0x9f, 0xc8, 0xcb, + 0x36, 0x39, 0x67, 0x73, 0xde, 0x19, 0x19, 0x31, 0xc7, 0x50, 0xf6, 0xce, 0x5c, + 0xaa, 0xf2, 0x97, 0x68, 0xeb, 0xb2, 0x7d, 0xac, 0xc7, 0x38, 0x05, 0x6a, 0x81, + 0x25, 0xb4, 0x77, 0x2b, 0xf8, 0x7a, 0xe1, 0x0a, 0x8a, 0x30, 0x9b, 0x9b, 0xd6, + 0x55, 0x04, 0x3c, 0xfc, 0x31, 0x59, 0x49, 0x43, 0x68, 0xc5, 0xab, 0x8c, 0xad, + 0xb7, 0xf6, 0x71, 0xe9, 0x62, 0x6b, 0xd2, 0x63, 0xe3, 0x11, 0x81, 0xa6, 0x04, + 0xb5, 0x06, 0xa0, 0x3b, 0x43, 0x9a, 0x7f, 0xfe, 0x43, 0x55, 0x89, 0x24, 0x77, + 0xe2, 0xbd, 0xf3, 0x38, 0xc6, 0x2c, 0x39, 0x22, 0xf7, 0xd3, 0xc9, 0xa5, 0x6c, + 0x71, 0x03, 0xd9, 0x11, 0x94, 0x8a, 0x84, 0xb5, 0xae, 0x2d, 0xbb, 0x16, 0xa3, + 0x76, 0x1a, 0xdd, 0x05, 0x3a, 0x0f, 0x96, 0x7e, 0x6b, 0x5b, 0xc9, 0x42, 0x11, + 0xb6, 0x54, 0x71, 0x53, 0x26, 0x7c, 0x6e, 0xe1, 0xca, 0xd0, 0xd9, 0x74, 0xa7, + 0x10, 0x88, 0x58, 0x37, 0x35, 0xe4, 0xf6, 0x3d, 0x33, 0x15, 0x6d, 0xad, 0xd5, + 0x4c, 0x2f, 0xaf, 0x89, 0x11, 0x4a, 0x12, 0x7b, 0x97, 0xb9, 0x4c, 0xc2, 0xa2, + 0x2e, 0xf3, 0x03, 0xf4, 0x59, 0xd0, 0x4f, 0xc0, 0xb5, 0x3a, 0xce, 0x59, 0x18, + 0xd4, 0x7f, 0xf3, 0x3a, 0x55, 0x8b, 0xd7, 0x1a, 0x75, 0xf3, 0x55, 0xfb, 0xd0, + 0x6b, 0xbc, 0xcf, 0x4e, 0x02, 0xc3, 0xc0, 0xa4, 0xb6, 0x3d, 0x0c, 0xc9, 0x49, + 0x80, 0x1d, 0x63, 0xa6, 0x4c, 0xb2, 0xd3, 0x23, 0x73, 0xb2, 0xc7, 0xb2, 0x74, + 0xab, 0x2d, 0xb4, 0x68, 0x21, 0x42, 0xc8, 0xb2, 0x1d, 0x84, 0xc4, 0x81, 0xf5, + 0xef, 0x21, 0xe4, 0xb5, 0xe3, 0x60, 0x34, 0x51, 0xbf, 0x94, 0x77, 0x4d, 0x0e, + 0xf4, 0x7f, 0x63, 0xfa, 0x6a, 0xbb, 0x78, 0xd2, 0x1c, 0x19, 0x3c, 0xbe, 0x65, + 0xb6, 0x95, 0xfe, 0x67, 0x42, 0x3c, 0x1e, 0x2d, 0x31, 0x2e, 0x27, 0x76, 0xfa, + 0x24, 0xec, 0xe8, 0x46, 0x83, 0xe7, 0x48, 0x76, 0xc5, 0x5e, 0xa0, 0x36, 0x9e, + 0x4e, 0xa0, 0xe8, 0x64, 0x94, 0xe0, 0x0d, 0xde, 0x23, 0x6a, 0x16, 0x89, 0x73, + 0x1f, 0x0a, 0x5d, 0x82, 0x03, 0xaf, 0xde, 0x5c, 0x42, 0x36, 0x40, 0xb8, 0x1e, + 0x4f, 0x63, 0x1c, 0x98, 0x1c, 0x11, 0xa2, 0xe1, 0xd1, 0x84, 0xc6, 0x7c, 0x52, + 0x8d, 0xf9, 0x2d, 0x53, 0xae, 0xc4, 0x4a, 0x40, 0xa4, 0xea, 0x2a, 0x13, 0x1b, + 0x47, 0x33, 0xcf, 0xe4, 0x5c, 0x6b, 0x00, 0x12, 0xc3, 0xe9, 0xe2, 0x09, 0x75, + 0xba, 0xae, 0xcb, 0x02, 0x32, 0xdf, 0x88, 0x0b, 0xd7, 0xd1, 0xde, 0x13, 0xe1, + 0x34, 0x94, 0x62, 0xec, 0x8d, 0x5d, 0xf3, 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, + 0x8a, 0x8d, 0xf7, 0xfc, 0xf3, 0x98, 0xec, 0x23, 0x05, 0x13, 0xca, 0x9d, 0x61, + 0x23, 0xf8, 0xb9, 0xd8, 0x17, 0x85, 0x60, 0xda, 0xf9, 0x75, 0x11, 0x19, 0x55, + 0xa2, 0xbc, 0xa3, 0x42, 0x3e, 0xee, 0xfc, 0x52, 0x7b, 0xe3, 0xa8, 0x54, 0x3e, + 0xb9, 0x0a, 0x5e, 0xc0, 0x2f, 0x35, 0xa7, 0xc6, 0x4b, 0x7d, 0xd5, 0x9a, 0x72, + 0xda, 0x00, 0x74, 0x63, 0x4e, 0x01, 0xd2, 0xab, 0xa5, 0x69, 0x84, 0xb5, 0x94, + 0x23, 0x39, 0x7e, 0x9f, 0xdb, 0x36, 0x20, 0x86, 0xc1, 0x12, 0x9f, 0xd1, 0x40, + 0xd5, 0x60, 0x44, 0x23, 0x3e, 0x80, 0x74, 0x0c, 0x22, 0x73, 0x38, 0x0e, 0xcd, + 0xaa, 0xf1, 0x09, 0x46, 0x2a, 0x22, 0x83, 0x08, 0x75, 0x64, 0xc7, 0xcf, 0x7b, + 0x2a, 0x97, 0xca, 0x80, 0x90, 0xa7, 0x53, 0xa7, 0x6b, 0x87, 0xe0, 0x09, 0x12, + 0x1e, 0x06, 0xf6, 0xa1, 0xbf, 0x62, 0x20, 0xbe, 0xee, 0xd9, 0x33, 0x4a, 0xd2, + 0xbc, 0xa1, 0xd1, 0xdb, 0xdf, 0x99, 0xc2, 0x9f, 0xe0, 0x14, 0x26, 0xcb, 0x77, + 0x2b, 0x88, 0xe2, 0xe5, 0xf5, 0x62, 0x5a, 0x17, 0x65, 0xa1, 0xf9, 0xba, 0x2d, + 0xad, 0x41, 0x5b, 0x24, 0x70, 0x7a, 0x05, 0x25, 0x00, 0x8b, 0x54, 0xcd, 0x4e, + 0xd8, 0x15, 0x7a, 0xb4, 0x34, 0x19, 0xc6, 0xb0, 0x82, 0xe8, 0x35, 0xce, 0x84, + 0xca, 0x13, 0xb6, 0x90, 0x8a, 0x08, 0xa7, 0x14, 0x1f, 0x51, 0x46, 0x30, 0x24, + 0x1c, 0x1e, 0x85, 0xb8, 0x3e, 0x3e, 0x35, 0xfa, 0x0c, 0xfa, 0x36, 0xeb, 0x4e, + 0x7f, 0x72, 0x0b, 0xb0, 0x7d, 0x38, 0x12, 0x58, 0x3b, 0x35, 0x77, 0x22, 0x6b, + 0xee, 0xbb, 0xdb, 0xd1, 0xd4, 0x92, 0x99, 0xa5, 0x5b, 0xd4, 0x99, 0x27, 0xe9, + 0xd7, 0xf4, 0x88, 0x4e, 0x6e, 0xd3, 0xfd, 0x5e, 0x4b, 0x7c, 0xb8, 0x35, 0xb8, + 0x33, 0x08, 0x96, 0x4e, 0x3c, 0x46, 0x87, 0x3f, 0xd6, 0x13, 0x31, 0x7b, 0x91, + 0xd2, 0x92, 0x36, 0xea, 0x90, 0xe3, 0x65, 0xd1, 0x62, 0xcc, 0x05, 0x1c, 0x84, + 0x6d, 0x24, 0x21, 0x76, 0xda, 0xf6, 0xd2, 0x86, 0x18, 0xae, 0x31, 0xfb, 0xaa, + 0xe9, 0x99, 0xa9, 0x3f, 0x17, 0x5c, 0x69, 0x38, 0xe6, 0x31, 0xa0, 0x81, 0xf2, + 0xc1, 0xf3, 0xfd, 0x78, 0x25, 0x49, 0xd3, 0xf3, 0x24, 0x57, 0x59, 0x60, 0x6d, + 0x9f, 0x92, 0xd5, 0x54, 0x8a, 0xcf, 0xea, 0xdb, 0xaf, 0x9c, 0xaa, 0x6b, 0x93, + 0xdc, 0x08, 0x82, 0x8d, 0x74, 0xf6, 0xd5, 0xfd, 0xd8, 0x33, 0x31, 0xf0, 0x96, + 0x91, 0x45, 0x95, 0x52, 0x97, 0xe6, 0x9f, 0x00, 0xfd, 0x29, 0x87, 0xf2, 0xda, + 0x2b, 0x94, 0xb9, 0x95, 0xfe, 0xcb, 0xe6, 0x22, 0xa7, 0x35, 0xef, 0x7f, 0x12, + 0x07, 0xf6, 0x71, 0x62, 0x94, 0x89, 0x20, 0x2b, 0xea, 0x0b, 0x47, 0x5e, 0x51, + 0x68, 0x1a, 0xa1, 0x67, 0x78, 0xb3, 0x9b, 0xd9, 0x23, 0xc9, 0x8d, 0xc6, 0xff, + 0x83, 0x73, 0xc7, 0x9b, 0xb1, 0x70, 0x30, 0x41, 0x7b, 0xc2, 0x00, 0xc8, 0xf0, + 0xb8, 0x55, 0xac, 0xfe, 0xc1, 0x79, 0xf7, 0x67, 0x4c, 0xec, 0x27, 0x21, 0xa1, + 0x0f, 0xca, 0x69, 0x3d, 0x83, 0xcf, 0xe5, 0xb8, 0xcd, 0xcc, 0x18, 0xf8, 0x1a, + 0xd6, 0x17, 0xfa, 0x26, 0xf0, 0xdf, 0xb8, 0x36, 0x55, 0xb8, 0xa2, 0x9a, 0x7f, + 0x83, 0x42, 0x32, 0x42, 0x5e, 0x8c, 0x47, 0x45, 0x88, 0xf1, 0x8d, 0xd3, 0x26, + 0xaa, 0x39, 0x6c, 0x3e, 0x47, 0x75, 0xe0, 0x02, 0x05, 0xfc, 0x9e, 0x45, 0xf7, + 0xb7, 0xd2, 0xe6, 0xd5, 0x5d, 0xcb, 0x90, 0xe2, 0x3f, 0xf6, 0xb5, 0x08, 0x45, + 0x9a, 0xa6, 0x99, 0xbf, 0xcb, 0xd5, 0x6f, 0x10, 0x99, 0x77, 0x64, 0xd0, 0x87, + 0x40, 0x89, 0x86, 0xe7, 0x3d, 0x6e, 0x28, 0x4f, 0xea, 0x9a, 0x23, 0xc3, 0x93, + 0x11, 0x78, 0x2f, 0x86, 0xca, 0xbf, 0xf9, 0x45, 0x5e, 0x4c, 0xf6, 0x99, 0xe5, + 0xf5, 0xd4, 0xbc, 0x0b, 0x39, 0x05, 0xa4, 0xe3, 0xbd, 0x01, 0xc5, 0x4d, 0xf8, + 0x64, 0x34, 0x43, 0xbe, 0x0f, 0x88, 0x90, 0x32, 0xea, 0x32, 0x5b, 0xf0, 0x71, + 0x07, 0xfd, 0x41, 0xd6, 0x73, 0xee, 0xba, 0xe6, 0xfa, 0x63, 0x7b, 0x70, 0xcc, + 0x0e, 0xd3, 0xf0, 0x09, 0x58, 0xdf, 0xb8, 0xdc, 0xf0, 0x0e, 0x85, 0xa1, 0xd0, + 0xa6, 0xa8, 0x90, 0x81, 0x40, 0xc2, 0xf4, 0x34, 0xc2, 0xe2, 0x60, 0xef, 0xb0, + 0xbc, 0xa2, 0x00, 0x35, 0x04, 0xc9, 0x99, 0x93, 0xa9, 0xe1, 0xc0, 0xff, 0x9c, + 0xef, 0xe6, 0xa6, 0x65, 0xd7, 0x91, 0x42, 0x86, 0x90, 0xe4, 0x7e, 0xf8, 0xc1, + 0x31, 0xa8, 0xe9, 0xbf, 0xb4, 0xc3, 0x08, 0x02, 0x35, 0x03, 0x2d, 0x73, 0x1b, + 0x0d, 0x38, 0x41, 0x22, 0x5f, 0x1c, 0x11, 0xe2, 0xc2, 0x8e, 0xe8, 0x4d, 0x35, + 0xf9, 0x22, 0x61, 0x00, 0x56, 0x59, 0x72, 0xeb, 0x26, 0x9d, 0x27, 0x8e, 0xf6, + 0x49, 0x79, 0xbf, 0x65, 0x15, 0xed, 0x4a, 0x68, 0x40, 0xb0, 0x88, 0x3a, 0x9e, + 0x6e, 0xf6, 0x4a, 0x0e, 0xfc, 0xae, 0x1c, 0xf2, 0x1d, 0xfe, 0x74, 0x85, 0x4e, + 0x84, 0xc2, 0x74, 0x9f, 0xac, 0x03, 0x82, 0x52, 0x75, 0xc9, 0xb6, 0x30, 0x21, + 0x84, 0xc7, 0x2d, 0xf4, 0xc4, 0xbb, 0x28, 0x62, 0xe4, 0xe8, 0xa7, 0xd9, 0xa4, + 0xa2, 0x82, 0x86, 0x6f, 0x9a, 0x7b, 0x2c, 0xfc, 0x9a, 0x56, 0x31, 0x3d, 0xa0, + 0xc4, 0x7a, 0x34, 0xb7, 0xb9, 0xcd, 0xa3, 0xac, 0xe8, 0x18, 0x5f, 0x07, 0xdf, + 0x36, 0xe4, 0x48, 0xa7, 0x6a, 0xa4, 0x77, 0xf2, 0x24, 0xd8, 0x7a, 0x07, 0x4f, + 0x43, 0xaf, 0x5d, 0x5f, 0x79, 0xb3, 0xab, 0x11, 0x28, 0xf0, 0x81, 0x91, 0x44, + 0x7f, 0xa6, 0x46, 0xbf, 0xdd, 0xe5, 0xb5, 0x1e, 0x23, 0x3c, 0xa6, 0x15, 0x5d, + 0x10, 0x15, 0x85, 0xbc, 0x2c, 0x40, 0x15, 0x8a, 0xc2, 0x10, 0x6e, 0x66, 0xa2, + 0x6e, 0x46, 0x42, 0x33, 0x70, 0x63, 0x68, 0x76, 0xb4, 0x34, 0xa7, 0x4f, 0x8c, + 0xe8, 0x06, 0x00, 0x50, 0xb0, 0x82, 0xa7, 0x9b, 0x61, 0xbb, 0x5d, 0x34, 0x4e, + 0xb5, 0xa1, 0x15, 0x83, 0x26, 0xce, 0xd9, 0xa9, 0xd9, 0xf5, 0x4f, 0xb2, 0xfe, + 0x8f, 0x9f, 0x05, 0xcd, 0x11, 0x1e, 0xe4, 0x6c, 0x47, 0x10, 0xf6, 0xf6, 0x3a, + 0x62, 0x69, 0x45, 0x57, 0xef, 0x1b, 0x12, 0xc8, 0x80, 0x06, 0xb6, 0x78, 0x72, + 0x50, 0x5f, 0x4e, 0x88, 0x3b, 0x58, 0x59, 0x07, 0x92, 0x9a, 0x2f, 0x3f, 0xdb, + 0x0d, 0x8f, 0x79, 0x14, 0xc4, 0x2d, 0xde, 0x2d, 0x20, 0x00, 0xf5, 0xae, 0x02, + 0xd4, 0x18, 0x21, 0xc8, 0xe1, 0xee, 0x01, 0x38, 0xeb, 0x01, 0xfd, 0xba, 0x48, + 0x53, 0x1b, 0x68, 0x02, 0x00, 0x14, 0x96, 0x80, 0x9f, 0xe4, 0xae, 0x9c, 0x9d, + 0xd3, 0xc3, 0xb2, 0x0f, 0x7a, 0x23, 0xc2, 0x42, 0xa0, 0x6b, 0xc4, 0x56, 0x2c, + 0x5f, 0x2f, 0x1b, 0x19, 0x54, 0x95, 0x00, 0x37, 0x2e, 0x7a, 0x15, 0x99, 0xa6, + 0xd6, 0xd7, 0x8b, 0x33, 0x15, 0x31, 0x30, 0xfb, 0x44, 0x8f, 0xb7, 0x9e, 0x8a, + 0x66, 0x9d, 0xb8, 0xa0, 0xf3, 0x5c, 0xdf, 0x9a, 0xe5, 0xd3, 0x2d, 0x73, 0x2f, + 0xc7, 0x94, 0x18, 0xe2, 0x3b, 0x45, 0x1d, 0xdc, 0x95, 0xa2, 0x2a, 0xba, 0xbb, + 0x05, 0x6e, 0xc6, 0xb5, 0xe8, 0xba, 0x4f, 0x52, 0x4d, 0xfa, 0xfe, 0x87, 0x52, + 0x62, 0xdd, 0x7b, 0xe4, 0x1c, 0xbb, 0xc6, 0x24, 0x20, 0xd4, 0xad, 0x6d, 0xf5, + 0xc9, 0xb7, 0x13, 0x60, 0x4f, 0x65, 0x60, 0x88, 0xa4, 0x48, 0x5e, 0x93, 0xbe, + 0x19, 0x07, 0xd2, 0x7a, 0xc6, 0xec, 0x3c, 0x57, 0x25, 0x9b, 0xd6, 0x98, 0x1d, + 0x42, 0xc1, 0xb7, 0x8a, 0x29, 0xad, 0x96, 0x85, 0xe6, 0x3c, 0x49, 0x4d, 0x41, + 0x29, 0x62, 0x3e, 0xa1, 0xa7, 0xff, 0xec, 0x85, 0xfa, 0x29, 0x41, 0x10, 0x73, + 0xed, 0xb2, 0x97, 0x8e, 0xf4, 0xe4, 0x69, 0xdd, 0xd5, 0xcd, 0xa9, 0x86, 0x18, + 0x99, 0x95, 0xf8, 0x8d, 0x6a, 0xb3, 0x66, 0xdb, 0x01, 0x90, 0x01, 0xf5, 0xb2, + 0x52, 0x88, 0xcf, 0x86, 0x0f, 0xd9, 0x98, 0xee, 0x57, 0xa6, 0xf9, 0xe3, 0xdc, + 0x39, 0x37, 0xb2, 0xe5, 0x43, 0x3a, 0x60, 0x7d, 0x5e, 0x70, 0x1a, 0x70, 0xdf, + 0xfb, 0x03, 0xd7, 0x2a, 0x8a, 0xb7, 0xf3, 0xde, 0x89, 0x03, 0xa1, 0x1c, 0x4b, + 0x3b, 0x97, 0x7b, 0xac, 0xb1, 0xf9, 0x0a, 0x83, 0x05, 0x98, 0xb9, 0x16, 0x66, + 0x96, 0x1b, 0x31, 0x8c, 0x20, 0xfa, 0x9c, 0x31, 0x79, 0xc1, 0xa3, 0xaa, 0x81, + 0xf7, 0x36, 0x16, 0x49, 0x57, 0x2c, 0x71, 0x1c, 0x84, 0x11, 0x88, 0x0c, 0xfc, + 0x30, 0x2e, 0x3c, 0xd6, 0xdf, 0x4d, 0x64, 0x1b, 0x60, 0x10, 0xf0, 0x7c, 0xfe, + 0x82, 0x1a, 0xa2, 0xdc, 0x9b, 0x59, 0x68, 0x03, 0xab, 0xfb, 0xc9, 0xde, 0x68, + 0x18, 0x50, 0xaa, 0xa6, 0xfc, 0x80, 0x9b, 0xdb, 0xe9, 0x04, 0x12, 0x0c, 0xf5, + 0x0f, 0x7d, 0xe3, 0xc8, 0xcf, 0xe3, 0xd9, 0x34, 0x9c, 0x8d, 0x15, 0x4b, 0xb7, + 0xee, 0x28, 0x21, 0x2c, 0x1b, 0xaa, 0x30, 0x4b, 0xb2, 0x88, 0x9a, 0x3a, 0x88, + 0xfb, 0x02, 0xda, 0xab, 0xaa, 0x45, 0x36, 0xbc, 0x7f, 0xff, 0xa5, 0xb2, 0x0c, + 0xd9, 0x22, 0x11, 0xe6, 0x5a, 0x22, 0x82, 0xdf, 0x56, 0x73, 0xdc, 0x78, 0x9c, + 0xa7, 0x0d, 0xb5, 0x27, 0xd3, 0xa0, 0x99, 0x2c, 0xff, 0x8d, 0xb7, 0x6b, 0x9a, + 0xfc, 0x98, 0x1d, 0x6b, 0xc2, 0x27, 0x27, 0x2a, 0x58, 0x53, 0x17, 0xdf, 0xf0, + 0xb1, 0x14, 0x8d, 0x92, 0xd6, 0x35, ], txid: [ - 0x90, 0xd2, 0x88, 0x6c, 0xb6, 0x28, 0x81, 0x33, 0x71, 0xc7, 0xd1, 0xbd, 0x02, - 0x03, 0x1b, 0x6c, 0xa6, 0x6b, 0x42, 0xd1, 0xdb, 0x4e, 0x11, 0x8d, 0x65, 0xf3, - 0x1b, 0x2d, 0xcc, 0xb6, 0x32, 0x35, + 0x1a, 0xad, 0x9f, 0xc4, 0xf4, 0x4c, 0xf8, 0xee, 0xf9, 0x25, 0xcd, 0x95, 0xf1, + 0xb3, 0x5d, 0x5c, 0xa2, 0xdf, 0xf5, 0x1f, 0x35, 0x5e, 0x50, 0x68, 0xba, 0x15, + 0xaf, 0xb1, 0x82, 0xa9, 0xe2, 0x8a, ], auth_digest: [ - 0x9c, 0x05, 0x32, 0xe6, 0x78, 0x8f, 0xe9, 0xe2, 0x8b, 0x3b, 0x67, 0xf5, 0x71, - 0x98, 0x9b, 0xe7, 0x7a, 0xe7, 0x61, 0xdf, 0xd3, 0x75, 0xc7, 0x4b, 0xbf, 0x5d, - 0xb3, 0xca, 0xfa, 0xa1, 0xf9, 0xa5, + 0x94, 0xec, 0x67, 0xab, 0x82, 0xb4, 0xbb, 0x49, 0xaf, 0x51, 0x5b, 0xad, 0x85, + 0xc3, 0xd4, 0x44, 0x88, 0xa7, 0xa7, 0xd2, 0x6c, 0xa1, 0x7e, 0x7b, 0xb5, 0xf3, + 0x13, 0x11, 0x6c, 0xef, 0xc8, 0x81, ], - amounts: vec![1561051182746413, 1535468271734483], + amounts: vec![563911776620709, 524628216960972], script_pubkeys: vec![ - vec![0x65, 0x6a, 0x51, 0x6a, 0xac, 0x51, 0x6a, 0x65, 0x52], - vec![0x52], + vec![0x63, 0x63, 0x53, 0x6a, 0x00], + vec![0x53, 0x00, 0x52, 0x51, 0x00, 0x53, 0x53, 0x6a], ], transparent_input: Some(1), sighash_shielded: [ - 0x24, 0xa9, 0x1d, 0x01, 0x7e, 0x69, 0x1f, 0xe7, 0xd5, 0x80, 0xe3, 0xfc, 0x16, - 0x87, 0x2d, 0x61, 0x2c, 0x14, 0xbf, 0xcb, 0xe5, 0xe2, 0x72, 0x5e, 0x16, 0xd0, - 0x9e, 0xc0, 0xc1, 0xc9, 0x13, 0x05, + 0x61, 0x30, 0x55, 0x0a, 0x76, 0x44, 0x09, 0x61, 0xd9, 0x5f, 0x10, 0xa3, 0xfc, + 0x97, 0xcd, 0xdf, 0xe2, 0xdb, 0xe2, 0xa5, 0x75, 0xb5, 0x98, 0x38, 0x02, 0x3c, + 0xf1, 0x29, 0x9c, 0xac, 0x3c, 0xe3, ], sighash_all: Some([ - 0x2b, 0xea, 0x7c, 0x00, 0xcf, 0x77, 0xfa, 0x59, 0xa6, 0x3a, 0xb0, 0xbd, 0x3e, - 0xb7, 0xb1, 0x06, 0x59, 0xf8, 0xfc, 0x9e, 0x4c, 0x48, 0x94, 0xba, 0xfc, 0x37, - 0x64, 0x0e, 0x86, 0x55, 0xf5, 0x62, + 0xb6, 0xbe, 0x5c, 0x0b, 0xd3, 0xe0, 0x9b, 0x9e, 0x9c, 0x6c, 0xe4, 0xa2, 0x78, + 0x4f, 0xe1, 0x38, 0xc9, 0xf4, 0x3d, 0x55, 0xd5, 0xb0, 0x3b, 0xf8, 0x43, 0x80, + 0x3d, 0x57, 0x20, 0xc6, 0xc0, 0x55, ]), sighash_none: Some([ - 0xe6, 0x36, 0x03, 0xea, 0xde, 0x7d, 0xde, 0x98, 0xef, 0x0e, 0xd6, 0x8d, 0xe6, - 0x40, 0x70, 0x7d, 0xf6, 0xcc, 0x9c, 0x33, 0x78, 0x37, 0xbc, 0xbd, 0xcd, 0xe0, - 0x5a, 0x07, 0xff, 0x7d, 0x87, 0x3b, + 0xb1, 0x2f, 0x9d, 0xa8, 0xd4, 0xe1, 0x84, 0xd3, 0x6d, 0xe2, 0x93, 0xfc, 0x9c, + 0xaa, 0x77, 0xf6, 0x5c, 0xb0, 0xb5, 0x43, 0x79, 0x50, 0x16, 0x2d, 0x56, 0xa7, + 0xa2, 0xd1, 0x0c, 0x04, 0x0c, 0x4a, ]), sighash_single: Some([ - 0xe4, 0xb2, 0xf9, 0x8a, 0xd7, 0xb5, 0x5f, 0xb2, 0x56, 0xa1, 0x29, 0x23, 0x30, - 0x3a, 0xbc, 0xae, 0xee, 0x38, 0x35, 0x10, 0x90, 0xe9, 0x76, 0xb0, 0x19, 0x5d, - 0xd7, 0x5b, 0xdc, 0xf9, 0x4a, 0xd9, + 0x63, 0x10, 0xda, 0x0c, 0xc2, 0xc2, 0xc4, 0xb5, 0xf7, 0x72, 0x46, 0x52, 0x06, + 0x12, 0x25, 0x16, 0x94, 0x5f, 0xba, 0xc0, 0x27, 0xd0, 0xde, 0x9a, 0xbd, 0xb3, + 0xe3, 0x56, 0xf2, 0x02, 0xda, 0x56, ]), sighash_all_anyone: Some([ - 0x61, 0xc7, 0x05, 0xd5, 0x50, 0x5f, 0x0d, 0x5c, 0xfb, 0x3a, 0x28, 0x51, 0x9d, - 0x79, 0x1f, 0x14, 0x57, 0x70, 0x4f, 0x7b, 0x38, 0x39, 0x2e, 0xff, 0x88, 0x5a, - 0x82, 0x07, 0xfa, 0x68, 0x3c, 0x57, + 0x08, 0x4d, 0x14, 0x63, 0x12, 0xe7, 0xe2, 0x1a, 0x42, 0x5c, 0xbd, 0x47, 0xb6, + 0xc2, 0x8f, 0xe5, 0x90, 0xf1, 0xd1, 0x07, 0x49, 0xe2, 0x25, 0x59, 0x60, 0xea, + 0x69, 0xbf, 0xf4, 0x25, 0xa0, 0x81, ]), sighash_none_anyone: Some([ - 0xf3, 0x5e, 0xa9, 0xbe, 0xb0, 0xb7, 0xed, 0x68, 0x2d, 0x27, 0xef, 0x78, 0xdd, - 0xe1, 0x17, 0x8d, 0x6a, 0x55, 0xf3, 0x07, 0xc8, 0x51, 0x21, 0xcd, 0x83, 0x02, - 0x58, 0xd8, 0x9d, 0x33, 0xcd, 0xd1, + 0x24, 0x7c, 0xee, 0x23, 0xf4, 0x84, 0x89, 0x05, 0xb0, 0x36, 0xfd, 0x5b, 0xa0, + 0x34, 0x7e, 0xc5, 0x33, 0x0c, 0x5a, 0xca, 0xf0, 0xa2, 0x71, 0x71, 0xfa, 0xce, + 0xff, 0x6e, 0x9b, 0x17, 0xfb, 0xaa, ]), sighash_single_anyone: Some([ - 0xae, 0xce, 0x3f, 0x45, 0x76, 0x98, 0x76, 0xd8, 0x7b, 0x50, 0x47, 0x8b, 0x90, - 0xcd, 0x5e, 0x3b, 0x37, 0xb7, 0xf4, 0xc5, 0x5b, 0x38, 0xf7, 0x56, 0xa5, 0x74, - 0x86, 0xa3, 0x10, 0x61, 0xdf, 0xa8, + 0xf4, 0x8f, 0xd1, 0x35, 0x47, 0x75, 0xbb, 0x0f, 0x80, 0x9c, 0xf3, 0xf1, 0xd9, + 0xa1, 0x4c, 0xfe, 0xf9, 0x86, 0x5e, 0xd9, 0x90, 0xe0, 0xa7, 0xf1, 0xa0, 0x11, + 0xfc, 0x10, 0xc0, 0x8e, 0x29, 0xe0, ]), }, TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x47, - 0x23, 0x62, 0x29, 0x87, 0xd8, 0xd7, 0x04, 0x00, 0x00, 0x02, 0xac, 0xa3, 0xc4, - 0xc6, 0x43, 0x3b, 0x1d, 0xa6, 0x05, 0x95, 0xc2, 0xba, 0xfc, 0x72, 0x2b, 0x38, - 0xe7, 0x91, 0x0f, 0x63, 0x61, 0x6b, 0x22, 0xc9, 0xd6, 0x77, 0xb1, 0x79, 0x79, - 0x56, 0x6d, 0xb2, 0x14, 0x9b, 0x1d, 0x99, 0x34, 0x1e, 0x4e, 0x6f, 0x91, 0x20, - 0xf4, 0xd4, 0x1e, 0x62, 0x91, 0x85, 0x00, 0x2c, 0x72, 0xc0, 0x12, 0xc4, 0x14, - 0xd2, 0x38, 0x2a, 0x6d, 0x47, 0xc7, 0xb3, 0xde, 0xab, 0x59, 0x1e, 0xff, 0xf3, - 0x60, 0xfe, 0x11, 0x99, 0x05, 0x6c, 0x56, 0xe5, 0xfe, 0xec, 0x61, 0xa7, 0xb8, - 0xb9, 0xf6, 0x99, 0xd6, 0x01, 0x2c, 0x28, 0x49, 0x23, 0x2f, 0x32, 0x9f, 0xef, - 0x95, 0xc7, 0xd1, 0x81, 0x17, 0x2c, 0x28, 0x4c, 0xe8, 0xa4, 0xb3, 0x22, 0x96, - 0x1a, 0xd7, 0x81, 0xa5, 0xb9, 0x73, 0x6d, 0x7f, 0x12, 0xe8, 0x64, 0x34, 0x53, - 0xc1, 0x05, 0xa7, 0x9a, 0x9f, 0x5a, 0xe0, 0x09, 0xfa, 0x1a, 0xe6, 0xc2, 0x5a, - 0x94, 0x62, 0xeb, 0xcb, 0xb0, 0xfd, 0x5f, 0x14, 0x55, 0x4b, 0xc9, 0x77, 0x47, - 0xc3, 0x3e, 0x34, 0xda, 0x90, 0xc8, 0x16, 0xd8, 0xd0, 0xd5, 0x0b, 0xfe, 0x37, - 0x61, 0x8c, 0x58, 0x12, 0x89, 0x14, 0x84, 0xfa, 0x25, 0x93, 0x22, 0xc1, 0x50, - 0x92, 0xd4, 0x15, 0x5d, 0x86, 0x96, 0xd6, 0xf1, 0x2f, 0x24, 0xfd, 0x36, 0x44, - 0x96, 0xb3, 0xbe, 0x08, 0x71, 0xca, 0x3d, 0x02, 0xd2, 0xb6, 0xbc, 0xd5, 0x9e, - 0xad, 0x5e, 0x27, 0xe8, 0x3e, 0xf2, 0xd4, 0x40, 0x87, 0x54, 0xe9, 0x00, 0x31, - 0x61, 0x87, 0x76, 0x69, 0xe1, 0xa4, 0xd8, 0x50, 0xbf, 0x9f, 0xc1, 0xc2, 0x31, - 0x85, 0x4d, 0x03, 0x7e, 0x26, 0x2f, 0x9a, 0x9f, 0x9b, 0xd8, 0x90, 0x44, 0x67, - 0xea, 0xea, 0xd8, 0x3f, 0x09, 0x38, 0xe2, 0x6e, 0x34, 0x5f, 0x9c, 0xc6, 0x95, - 0x98, 0x5f, 0x00, 0xa1, 0x25, 0x5a, 0x0a, 0x4f, 0x95, 0xdb, 0x9d, 0xad, 0xcd, - 0xb7, 0xc2, 0x40, 0x89, 0x9a, 0xea, 0x27, 0x83, 0xc2, 0xd2, 0x1c, 0x2d, 0x32, - 0x79, 0xf8, 0x86, 0xf7, 0xab, 0x3d, 0x4e, 0x8a, 0xf5, 0x38, 0x1f, 0xa0, 0xb0, - 0x18, 0x48, 0xf1, 0xab, 0x14, 0xad, 0x33, 0x4f, 0x2b, 0x68, 0x03, 0x58, 0x08, - 0xcd, 0xf1, 0xbb, 0x9e, 0x9d, 0x9a, 0x81, 0x6b, 0xaf, 0x72, 0x8a, 0x95, 0x5b, - 0x96, 0x0b, 0x77, 0x01, 0xfa, 0x62, 0x66, 0x87, 0xdc, 0x3c, 0x9c, 0xba, 0x64, - 0x63, 0x37, 0xb5, 0x3e, 0x29, 0x81, 0x6e, 0x94, 0x82, 0xdd, 0xf5, 0x57, 0x8a, - 0x87, 0x68, 0xaa, 0xe4, 0x77, 0xfc, 0xe4, 0x10, 0xac, 0x2d, 0x5d, 0xe6, 0x09, - 0x58, 0x61, 0xc1, 0x11, 0xd7, 0xfe, 0xb3, 0xe6, 0xbb, 0x4f, 0xbb, 0x5a, 0x54, - 0x95, 0x54, 0x95, 0x97, 0x27, 0x98, 0x35, 0x0a, 0x25, 0x3f, 0x05, 0xf6, 0x6c, - 0x2e, 0xcf, 0xcb, 0xc0, 0xed, 0x43, 0xf5, 0xec, 0x2e, 0x6d, 0x8d, 0xba, 0x15, - 0xa5, 0x12, 0x54, 0xd9, 0x7b, 0x18, 0x21, 0x10, 0x7c, 0x07, 0xdd, 0x9a, 0x16, - 0xef, 0x84, 0x06, 0xf9, 0x43, 0xe2, 0x82, 0xb9, 0x5d, 0x4b, 0x36, 0x25, 0x30, - 0xc9, 0x13, 0xd6, 0xba, 0x42, 0x1d, 0xf6, 0x02, 0x7d, 0xe5, 0xaf, 0x1e, 0x47, - 0x45, 0xd5, 0x86, 0x81, 0x06, 0x95, 0x4b, 0xe6, 0xc1, 0x96, 0x27, 0x80, 0xa2, - 0x94, 0x10, 0x72, 0xe9, 0x51, 0x31, 0xb1, 0x67, 0x9d, 0xf0, 0x63, 0x76, 0x25, - 0x04, 0x2c, 0x37, 0xd4, 0x8f, 0xfb, 0x15, 0x2e, 0x5e, 0xbc, 0x18, 0x5c, 0x8a, - 0x2b, 0x7d, 0x43, 0x85, 0xf1, 0xc9, 0x5a, 0xf9, 0x37, 0xdf, 0x78, 0xdf, 0xd8, - 0x75, 0x7f, 0xab, 0x43, 0x49, 0x68, 0xb0, 0xb5, 0x7c, 0x66, 0x57, 0x44, 0x68, - 0xf1, 0x60, 0xb4, 0x47, 0xac, 0x82, 0x21, 0xe5, 0x06, 0x06, 0x76, 0xa8, 0x42, - 0xa1, 0xc6, 0xb7, 0x17, 0x2d, 0xd3, 0x34, 0x0f, 0x76, 0x40, 0x70, 0xab, 0x1f, - 0xe0, 0x91, 0xc5, 0xc7, 0x4c, 0x95, 0xa5, 0xdc, 0x04, 0x33, 0x90, 0x72, 0x3a, - 0x4c, 0x12, 0x7d, 0xa1, 0x4c, 0xdd, 0xe1, 0xdc, 0x26, 0x75, 0xa6, 0x23, 0x40, - 0xb3, 0xe6, 0xaf, 0xd0, 0x52, 0x2a, 0x31, 0xde, 0x26, 0xe7, 0xd1, 0xec, 0x3a, - 0x9c, 0x8a, 0x09, 0x1f, 0xfd, 0xc7, 0x5b, 0x7e, 0xcf, 0xdc, 0x7c, 0x12, 0x99, - 0x5a, 0x5e, 0x37, 0xce, 0x34, 0x88, 0xbd, 0x29, 0xf8, 0x62, 0x9d, 0x68, 0xf6, - 0x96, 0x49, 0x24, 0x48, 0xdd, 0x52, 0x66, 0x97, 0x47, 0x6d, 0xc0, 0x61, 0x34, - 0x6e, 0xbe, 0x3f, 0x67, 0x72, 0x17, 0xff, 0x9c, 0x60, 0xef, 0xce, 0x94, 0x3a, - 0xf2, 0x8d, 0xfd, 0x3f, 0x9e, 0x59, 0x69, 0x25, 0x98, 0xa6, 0x04, 0x7c, 0x23, - 0xc4, 0xc0, 0x14, 0x00, 0xf1, 0xab, 0x57, 0x30, 0xea, 0xc0, 0xae, 0x8d, 0x58, - 0x43, 0xd5, 0x05, 0x1c, 0x37, 0x62, 0x40, 0x17, 0x2a, 0xf2, 0x18, 0xd7, 0xa1, - 0xec, 0xfe, 0x65, 0xb4, 0xf7, 0x51, 0x00, 0x63, 0x89, 0x83, 0xc1, 0x4d, 0xe4, - 0x97, 0x47, 0x55, 0xda, 0xde, 0x80, 0x18, 0xc9, 0xb8, 0xf4, 0x54, 0x3f, 0xb0, - 0x95, 0x96, 0x15, 0x13, 0xe6, 0x7c, 0x61, 0xdb, 0xc5, 0x9c, 0x60, 0x7f, 0x9b, - 0x51, 0xf8, 0xd0, 0x9b, 0xdc, 0xad, 0x28, 0xbc, 0xfb, 0x9e, 0x5d, 0x27, 0x44, - 0xea, 0x88, 0x48, 0xb2, 0x62, 0x3a, 0xc0, 0x7f, 0x8e, 0xf6, 0x1a, 0x81, 0xa3, - 0x59, 0x10, 0xb8, 0xa1, 0xba, 0xf3, 0x9a, 0x91, 0x9a, 0x7b, 0x60, 0xbc, 0x60, - 0x4d, 0x63, 0x18, 0x5f, 0x75, 0x92, 0x21, 0xd8, 0x47, 0xcc, 0x54, 0xa2, 0x27, - 0x65, 0xa4, 0xc3, 0x34, 0x75, 0xb5, 0x79, 0x1e, 0x9a, 0xf3, 0x27, 0x1f, 0xc8, - 0xd9, 0x35, 0x06, 0x67, 0x09, 0x0d, 0x81, 0x84, 0xec, 0x50, 0x52, 0x2d, 0x80, - 0x4f, 0x23, 0xc4, 0xfb, 0x44, 0xff, 0xa4, 0x81, 0xbc, 0x92, 0xae, 0x40, 0x8d, - 0x1b, 0x9f, 0x2b, 0x13, 0x19, 0x04, 0xf9, 0x70, 0x5c, 0x59, 0xe2, 0xf4, 0xbd, - 0xe7, 0xa3, 0xb2, 0xc0, 0x85, 0xd9, 0x3f, 0xd2, 0xab, 0xc5, 0xe1, 0x4d, 0x16, - 0x30, 0x01, 0xa1, 0x2f, 0x51, 0x93, 0x8d, 0x02, 0x1a, 0xfa, 0x92, 0x23, 0x9b, - 0x87, 0x3d, 0xc6, 0xc3, 0x57, 0xea, 0xa8, 0xaf, 0x4e, 0xe6, 0xd0, 0x05, 0x40, - 0x65, 0x7f, 0xe3, 0x29, 0x14, 0x10, 0x3b, 0x5d, 0x98, 0xf6, 0x8b, 0xd3, 0xe2, - 0xb5, 0x35, 0x9f, 0x08, 0xcc, 0xd8, 0x8d, 0x0c, 0x81, 0x1e, 0x4c, 0x31, 0xfb, - 0xb4, 0x9f, 0x3a, 0x90, 0xbb, 0xd0, 0x5d, 0xce, 0x62, 0xf3, 0x44, 0xe7, 0x07, - 0x75, 0x93, 0x15, 0x9a, 0xe3, 0x50, 0x50, 0xb0, 0x4c, 0x9e, 0x6b, 0x86, 0xbc, - 0x43, 0x2d, 0xc8, 0xb0, 0x48, 0xc7, 0x3c, 0x00, 0x18, 0xca, 0x5b, 0x69, 0x41, - 0x12, 0x97, 0x73, 0x2a, 0x4e, 0x1a, 0xa9, 0x9a, 0x92, 0x8c, 0x71, 0xe7, 0xa2, - 0x4f, 0xd2, 0x77, 0x85, 0x6a, 0xa4, 0x25, 0x01, 0xe5, 0x1b, 0x01, 0x2a, 0xea, - 0x94, 0x46, 0xa2, 0x10, 0x4e, 0x93, 0xf8, 0x15, 0xa0, 0xb3, 0xa2, 0x9b, 0x45, - 0x83, 0x14, 0xf3, 0xd8, 0xbe, 0x2b, 0x98, 0x23, 0xd3, 0x42, 0x15, 0x05, 0xff, - 0x6d, 0x88, 0x90, 0xe9, 0x04, 0xa2, 0x4a, 0x7d, 0xe9, 0x51, 0xa2, 0xa1, 0xc6, - 0x4e, 0xd2, 0xe4, 0xf9, 0xe9, 0xa5, 0x16, 0x5e, 0xba, 0x47, 0x99, 0xce, 0xfe, - 0xb5, 0xd1, 0x48, 0x00, 0x55, 0x45, 0xf9, 0xb5, 0xfb, 0x0e, 0xec, 0x65, 0x03, - 0xfe, 0xbb, 0xdd, 0x26, 0xa2, 0x38, 0x51, 0x43, 0x83, 0x73, 0x4a, 0xfe, 0xc8, - 0xa4, 0x81, 0xcf, 0xb2, 0xfe, 0x1f, 0xf9, 0x2f, 0x1e, 0xa7, 0x84, 0x07, 0xb4, - 0x07, 0xc6, 0xb8, 0x4a, 0x21, 0x4e, 0xf6, 0x07, 0xcc, 0x59, 0x04, 0xd9, 0xe8, - 0xc7, 0x3f, 0xeb, 0xff, 0xa0, 0x1c, 0x2b, 0x17, 0x79, 0xdc, 0x42, 0x0f, 0x08, - 0x9e, 0xad, 0xe2, 0x0b, 0x69, 0xd5, 0xd7, 0xc4, 0x3c, 0xeb, 0x73, 0x6b, 0x68, - 0x31, 0xe8, 0xc1, 0x10, 0xf1, 0x6c, 0xfd, 0xb3, 0xa4, 0x67, 0xe9, 0x41, 0x4c, - 0x00, 0xec, 0xf1, 0x37, 0x31, 0x50, 0x08, 0x94, 0x55, 0x56, 0x78, 0xc4, 0x97, - 0xfa, 0xba, 0x9a, 0x95, 0xd0, 0x1c, 0xc4, 0x64, 0x39, 0x0f, 0xc4, 0xa7, 0x6b, - 0xfa, 0x8b, 0x0e, 0x1c, 0x68, 0xa5, 0x25, 0xd7, 0x06, 0xd6, 0x60, 0x4b, 0x23, - 0x30, 0xb6, 0xb3, 0x48, 0x52, 0x15, 0xf6, 0x06, 0xf1, 0x88, 0x3a, 0x75, 0x15, - 0x88, 0xc7, 0xef, 0xa5, 0x06, 0xc3, 0xe8, 0xd0, 0xc6, 0x01, 0x92, 0xe8, 0x47, - 0x6b, 0xd1, 0x17, 0x5d, 0x95, 0x62, 0x08, 0x7b, 0xdb, 0x81, 0x8e, 0x66, 0x21, - 0x62, 0x86, 0xba, 0xfe, 0x47, 0xff, 0x4d, 0xbc, 0xce, 0xd5, 0x14, 0x44, 0x48, - 0x0a, 0x9a, 0x56, 0x73, 0xec, 0xe7, 0xfa, 0xc7, 0x3a, 0x0e, 0xd4, 0x1a, 0xb0, - 0x05, 0x17, 0x53, 0xa7, 0xca, 0xa8, 0x9b, 0xe3, 0x13, 0x9a, 0xfd, 0x97, 0x93, - 0xb3, 0xe0, 0x2f, 0x27, 0xf0, 0x40, 0x04, 0x65, 0x95, 0xac, 0xd4, 0x7b, 0xf1, - 0x3f, 0xd0, 0xda, 0x27, 0xf0, 0x9e, 0xda, 0x48, 0x03, 0x6d, 0x3e, 0xe4, 0x37, - 0xf2, 0xee, 0x8f, 0x86, 0x06, 0xea, 0x97, 0x34, 0x3c, 0x33, 0x58, 0x46, 0x57, - 0xf4, 0x6d, 0xba, 0x99, 0xdb, 0x5c, 0xfe, 0x6c, 0xa1, 0x76, 0xfa, 0xb7, 0xb0, - 0xf3, 0xbf, 0xa0, 0xab, 0x61, 0xe3, 0x40, 0xc3, 0x4e, 0xb9, 0xf1, 0x7c, 0x7e, - 0xc2, 0xbe, 0x03, 0xb1, 0x80, 0xf0, 0xbb, 0x6f, 0x43, 0x4c, 0x2a, 0x65, 0x42, - 0xe0, 0x0e, 0x84, 0x37, 0x3f, 0x4f, 0x46, 0x49, 0xcd, 0xa3, 0x2b, 0xf6, 0x86, - 0x66, 0x61, 0x43, 0xf6, 0x22, 0xaa, 0x48, 0x04, 0x60, 0xb5, 0xaf, 0xac, 0x51, - 0x86, 0x07, 0xcd, 0x9a, 0xf8, 0xbc, 0xd6, 0xb5, 0x8c, 0x30, 0x12, 0x73, 0x16, - 0xb2, 0x5d, 0x5e, 0xa7, 0xbf, 0x6b, 0x0c, 0xab, 0x85, 0x42, 0xff, 0x69, 0xd9, - 0xb2, 0xf1, 0x80, 0xbe, 0x12, 0xed, 0x75, 0x34, 0x4a, 0x39, 0x5a, 0xa1, 0x0f, - 0x85, 0x2f, 0x08, 0x3a, 0xd6, 0x4e, 0xf4, 0x0e, 0x9c, 0x03, 0x09, 0xe9, 0xbb, - 0xa5, 0x4b, 0x8c, 0xb3, 0x3c, 0x95, 0x49, 0x8a, 0x69, 0x53, 0x8d, 0x3a, 0xe5, - 0xb2, 0x5e, 0x24, 0x70, 0x98, 0x30, 0x6f, 0xa8, 0xc7, 0x4a, 0x8e, 0xe5, 0xbc, - 0xa9, 0x41, 0x53, 0x1d, 0x61, 0xaa, 0xc2, 0x7a, 0xab, 0x3d, 0xc5, 0x61, 0x7d, - 0x56, 0x06, 0xc9, 0x57, 0x7a, 0x2a, 0x83, 0x46, 0xe8, 0xd8, 0x5b, 0x32, 0xb8, - 0x50, 0x57, 0x75, 0x10, 0x8d, 0xc8, 0x5e, 0x2a, 0xde, 0x2e, 0xac, 0x1e, 0x63, - 0x6e, 0x1a, 0xf4, 0x05, 0x4c, 0x8b, 0x6f, 0x57, 0x63, 0x2d, 0xf2, 0x69, 0xc3, - 0x72, 0x3b, 0x32, 0x08, 0x72, 0xe4, 0xc5, 0x7b, 0x21, 0x83, 0x58, 0xdc, 0x7e, - 0x99, 0x05, 0xbb, 0x04, 0xed, 0xf9, 0x2e, 0xdf, 0x0d, 0xf6, 0x35, 0xf3, 0xbf, - 0x36, 0x1e, 0x57, 0xa1, 0x32, 0x96, 0xe1, 0x44, 0x7a, 0xf5, 0x08, 0x78, 0x72, - 0xd6, 0x36, 0xe2, 0x75, 0x18, 0xa9, 0x87, 0x6e, 0x15, 0xeb, 0x01, 0xf5, 0xe8, - 0xde, 0xd8, 0x18, 0x92, 0x51, 0x1c, 0xc2, 0x85, 0x1b, 0x00, 0xb8, 0x32, 0x71, - 0x2a, 0x6d, 0x3b, 0xa5, 0x66, 0x65, 0x17, 0xbc, 0xd3, 0x56, 0x76, 0x21, 0xa7, - 0xcf, 0x84, 0x45, 0x58, 0x96, 0x53, 0x26, 0x20, 0x20, 0xc3, 0x3b, 0xf7, 0x80, - 0x31, 0xb8, 0xee, 0x07, 0x07, 0xde, 0x07, 0x20, 0x68, 0xc1, 0x70, 0x57, 0x03, - 0x27, 0xe6, 0xd9, 0xf5, 0xc6, 0xdd, 0xc3, 0x35, 0x40, 0x2e, 0xfc, 0x54, 0x88, - 0x62, 0xf5, 0xa0, 0x70, 0x94, 0xfd, 0x42, 0x8a, 0x7b, 0xbc, 0x15, 0xd7, 0xb3, - 0x8d, 0x05, 0x36, 0x2c, 0x9c, 0xa9, 0x85, 0xf5, 0x8a, 0x76, 0x64, 0x7d, 0x2b, - 0xe4, 0xc2, 0xcd, 0x6b, 0x3d, 0x17, 0xd6, 0x87, 0x09, 0x71, 0xd7, 0xa0, 0x98, - 0xba, 0xf7, 0x2c, 0x6f, 0x6f, 0x12, 0x14, 0xcf, 0x1f, 0xaa, 0xe4, 0x88, 0xbd, - 0x7d, 0xe2, 0x59, 0xd3, 0x41, 0x5c, 0x2f, 0x0d, 0xde, 0xc7, 0x45, 0x70, 0x04, - 0xf3, 0x57, 0x08, 0xd1, 0xec, 0xcc, 0xcc, 0x0d, 0xf6, 0x5a, 0x04, 0x94, 0x3a, - 0xd5, 0xcb, 0xc1, 0x3f, 0x29, 0x5f, 0x00, 0x0f, 0xe0, 0x56, 0xc4, 0x0b, 0x2d, - 0x88, 0xf2, 0x7d, 0xc3, 0x4c, 0xfe, 0xb8, 0x03, 0xbe, 0x34, 0x83, 0xa9, 0xeb, - 0xf9, 0xb5, 0xa9, 0x02, 0x60, 0x57, 0x72, 0x5d, 0x63, 0xea, 0xd2, 0xc0, 0xc0, - 0xff, 0x1f, 0xe2, 0x6a, 0xc1, 0xe7, 0xbd, 0xfc, 0xd6, 0xfa, 0xd8, 0x75, 0x84, - 0x2d, 0x19, 0x4f, 0x33, 0x17, 0x50, 0x46, 0x2c, 0x06, 0xb8, 0xd7, 0x98, 0x2d, - 0x67, 0x99, 0x5e, 0xd5, 0xd3, 0xae, 0x96, 0xa0, 0x5a, 0xe0, 0x06, 0x7f, 0x4e, - 0xb1, 0xc7, 0xc9, 0x32, 0x31, 0xbd, 0x39, 0x77, 0x3c, 0xbe, 0x0a, 0x9d, 0x33, - 0xa0, 0xa4, 0x0b, 0x10, 0x1d, 0x02, 0x00, 0x77, 0xd9, 0x7c, 0xe4, 0x24, 0x01, - 0x3d, 0x64, 0xb4, 0xd0, 0xd2, 0x72, 0xec, 0x01, 0x94, 0x6b, 0x7a, 0x5e, 0xed, - 0xfa, 0xb4, 0xd6, 0x8c, 0xd6, 0xd1, 0xb2, 0x66, 0x7d, 0x04, 0xb2, 0x9d, 0x0c, - 0xaf, 0x37, 0x00, 0x98, 0xff, 0xe4, 0x91, 0x8e, 0x0c, 0xa1, 0xdf, 0x47, 0xf2, - 0x75, 0x86, 0x7b, 0x73, 0x9e, 0x0a, 0x51, 0x4d, 0x32, 0x09, 0x32, 0x5e, 0x21, - 0x70, 0x45, 0x92, 0x7b, 0x47, 0x9c, 0x1c, 0xe2, 0xe5, 0xd5, 0x4f, 0x25, 0x48, - 0x8c, 0xad, 0x15, 0x13, 0xe3, 0xf4, 0x4a, 0x21, 0x26, 0x6c, 0xfd, 0x84, 0x16, - 0x33, 0x32, 0x7d, 0xee, 0x6c, 0xf8, 0x10, 0xfb, 0xf7, 0x39, 0x3e, 0x31, 0x7d, - 0x9e, 0x53, 0xd1, 0xbe, 0x1d, 0x5a, 0xe7, 0x83, 0x9b, 0x66, 0xb9, 0x43, 0xb9, - 0xed, 0x18, 0xf2, 0xc5, 0x30, 0xe9, 0x75, 0x42, 0x23, 0x32, 0xc3, 0x43, 0x9c, - 0xce, 0x49, 0xa2, 0x9f, 0x2a, 0x33, 0x6a, 0x48, 0x51, 0x26, 0x3c, 0x5e, 0x9b, - 0xd1, 0x3d, 0x73, 0x11, 0x09, 0xe8, 0x44, 0xb7, 0xf8, 0xc3, 0x92, 0xa5, 0xc1, - 0xdc, 0xaa, 0x2a, 0xe5, 0xf5, 0x0f, 0xf6, 0x3f, 0xab, 0x97, 0x65, 0xe0, 0x16, - 0x70, 0x2c, 0x35, 0xa6, 0x7c, 0xd7, 0x36, 0x4d, 0x3f, 0xab, 0x55, 0x2f, 0xb3, - 0x49, 0xe3, 0x5c, 0x15, 0xc5, 0x02, 0x50, 0x45, 0x3f, 0xd1, 0x8f, 0x7b, 0x85, - 0x59, 0x92, 0x63, 0x2e, 0x2c, 0x76, 0xc0, 0xfb, 0xf1, 0xef, 0x96, 0x3e, 0xa8, - 0x0e, 0x32, 0x23, 0xde, 0x32, 0x77, 0xbc, 0x55, 0x92, 0x51, 0x72, 0x58, 0x29, - 0xec, 0x03, 0xf2, 0x13, 0xba, 0x89, 0x55, 0xca, 0xb2, 0x82, 0xd9, 0x62, 0x53, - 0x48, 0xa6, 0x14, 0xb5, 0x9b, 0xde, 0x45, 0x88, 0x56, 0x49, 0xba, 0xe3, 0x6d, - 0xe3, 0x4d, 0xef, 0x8f, 0xce, 0xc8, 0x53, 0x43, 0x47, 0x5d, 0x97, 0x6a, 0xe1, - 0xe9, 0xb2, 0x78, 0x29, 0xce, 0x2a, 0xc5, 0xef, 0xd0, 0xb3, 0x99, 0xa8, 0xb4, - 0x48, 0xbe, 0x65, 0x04, 0x29, 0x4e, 0xe6, 0xb3, 0xc1, 0xc6, 0xa5, 0x34, 0x2d, - 0x7c, 0x01, 0xae, 0x9d, 0x8a, 0xd3, 0x07, 0x0c, 0x2b, 0x1a, 0x91, 0x57, 0x3a, - 0xf5, 0xe0, 0xc5, 0xe4, 0xcb, 0xbf, 0x4a, 0xcd, 0xc6, 0xb5, 0x4c, 0x92, 0x72, - 0x20, 0x0d, 0x99, 0x70, 0x25, 0x0c, 0x17, 0xc1, 0x03, 0x6f, 0x06, 0x08, 0x5c, - 0x41, 0x85, 0x8e, 0xd3, 0xa0, 0xc4, 0x81, 0x50, 0xbc, 0x69, 0x7e, 0x4a, 0x69, - 0x5f, 0xef, 0x33, 0x5f, 0x7a, 0xd0, 0x7e, 0x1a, 0x46, 0xdc, 0x76, 0x7f, 0xf8, - 0x22, 0xdb, 0x70, 0xe6, 0x66, 0x90, 0x80, 0xb9, 0x81, 0x6b, 0x22, 0x32, 0xc8, - 0x1a, 0x4c, 0x66, 0xcc, 0x58, 0x6a, 0xbf, 0xe1, 0xea, 0xa8, 0xca, 0x6c, 0xf4, - 0x1f, 0xc3, 0xc3, 0xe6, 0xc7, 0xb8, 0x86, 0xfb, 0x6d, 0xac, 0x9f, 0x48, 0x22, - 0xb4, 0xfc, 0x6f, 0xff, 0x9d, 0x05, 0x13, 0xd6, 0x1a, 0x21, 0xc8, 0x0a, 0x37, - 0x76, 0x71, 0xd1, 0x35, 0xa6, 0x68, 0xa0, 0xae, 0x2b, 0xb9, 0x34, 0xc8, 0x2c, - 0x41, 0x42, 0xda, 0x69, 0xd1, 0x2c, 0xa7, 0x24, 0x75, 0x6a, 0x37, 0x9a, 0x69, - 0xf8, 0x3e, 0x70, 0xce, 0xe0, 0xc7, 0x8c, 0xf3, 0x13, 0xa7, 0x77, 0xfa, 0xb4, - 0x8e, 0xe2, 0x03, 0xe1, 0x4f, 0xed, 0x62, 0x41, 0x62, 0xe9, 0xcf, 0x38, 0x65, - 0x24, 0x5c, 0xfb, 0x31, 0xea, 0x07, 0xee, 0x88, 0x9e, 0x47, 0x0f, 0xee, 0x46, - 0xa0, 0x62, 0x30, 0xf7, 0x00, 0x51, 0xf1, 0x1e, 0x79, 0x8c, 0x72, 0x0d, 0x37, - 0xf2, 0x27, 0xca, 0x01, 0xb1, 0x09, 0xa1, 0xce, 0xe9, 0x2a, 0xd5, 0xf6, 0xb0, - 0x20, 0x1a, 0xe7, 0x1e, 0xab, 0x44, 0x69, 0x99, 0xcd, 0xcb, 0xc4, 0xa5, 0xfc, - 0x3b, 0x1a, 0xf1, 0x38, 0x94, 0xae, 0x93, 0xdd, 0xff, 0xe8, 0xee, 0x18, 0x50, - 0x13, 0x6b, 0x30, 0xcd, 0xa1, 0xd8, 0x3d, 0x8d, 0x3b, 0xea, 0x7b, 0x13, 0x1c, - 0x06, 0x14, 0x1c, 0xc2, 0xa8, 0x5f, 0xa5, 0xb4, 0x3d, 0x05, 0xec, 0x95, 0x4e, - 0x11, 0xb6, 0xf3, 0x7b, 0x03, 0xf4, 0x62, 0x13, 0xe9, 0x42, 0xa7, 0xe1, 0x9a, - 0x46, 0xe9, 0x70, 0xb5, 0xc5, 0x06, 0x70, 0x84, 0x30, 0x31, 0x7b, 0x1b, 0xb3, - 0xb3, 0x5d, 0xf6, 0x8a, 0xe3, 0x3a, 0x49, 0x26, 0xa0, 0x3e, 0x6b, 0xfe, 0xb5, - 0x51, 0x04, 0x16, 0xfc, 0xbb, 0x05, 0x24, 0xc9, 0xca, 0x50, 0x74, 0x15, 0x6c, - 0xc5, 0xa5, 0xd6, 0xfe, 0x1c, 0x99, 0x5e, 0xdc, 0x60, 0xa2, 0xf5, 0x50, 0x41, - 0x1a, 0xa4, 0x1e, 0x3d, 0xa3, 0xbd, 0xcf, 0x64, 0xbc, 0xf0, 0x4a, 0x05, 0x10, - 0x57, 0x1b, 0x93, 0x6d, 0x47, 0xe5, 0x5c, 0xec, 0x03, 0x30, 0xee, 0x8d, 0xfe, - 0x73, 0x56, 0x34, 0x04, 0xf0, 0x47, 0xd7, 0xf3, 0xa8, 0xa3, 0xd7, 0x74, 0x3b, - 0xc5, 0x54, 0x95, 0x52, 0x10, 0xf1, 0xeb, 0x0d, 0x08, 0x59, 0x9e, 0xa7, 0x7d, - 0x5f, 0x97, 0x4d, 0x87, 0x17, 0x6d, 0x37, 0xd9, 0x8b, 0x9c, 0x0a, 0xd4, 0x40, - 0x40, 0x72, 0x09, 0xed, 0x6a, 0x9f, 0x08, 0x46, 0x4d, 0x56, 0x55, 0x93, 0xe1, - 0xa6, 0x3b, 0x93, 0x85, 0x36, 0xb4, 0x92, 0x44, 0xe9, 0x7d, 0x88, 0x01, 0x73, - 0xb6, 0x40, 0xf2, 0xdd, 0xb7, 0x4d, 0x06, 0x8e, 0xcb, 0x46, 0xcf, 0x28, 0x9b, - 0x7d, 0x89, 0x13, 0x07, 0xbb, 0xa3, 0x70, 0x54, 0xcf, 0x91, 0xb3, 0x1f, 0xc8, - 0x2f, 0x74, 0xd5, 0xfc, 0xc0, 0x00, 0x94, 0x2e, 0xde, 0x91, 0x18, 0x25, 0xf5, - 0x3f, 0xe6, 0x66, 0xb0, 0xc9, 0xaa, 0x8c, 0xff, 0x6a, 0x37, 0x6e, 0x1f, 0x37, - 0x2e, 0xac, 0x6a, 0xc4, 0xe4, 0x6c, 0xc0, 0x94, 0x22, 0x45, 0xd4, 0xc2, 0xdc, - 0xf0, 0x2d, 0x76, 0x40, 0xff, 0xcc, 0x5a, 0x6a, 0xc3, 0xa8, 0x7f, 0x5c, 0x41, - 0x15, 0x51, 0xbc, 0xc2, 0xf2, 0x6c, 0xb9, 0x49, 0x61, 0xd5, 0x3f, 0x95, 0xdd, - 0xb1, 0x9a, 0xe9, 0x30, 0xc8, 0xd7, 0x0f, 0x03, 0x1b, 0x29, 0xa5, 0xdf, 0x99, - 0xff, 0x36, 0x69, 0x5e, 0x80, 0x2c, 0xbc, 0xb6, 0xb5, 0x8c, 0x1b, 0xa7, 0xed, - 0x5e, 0xac, 0xfa, 0x76, 0x41, 0x4a, 0x41, 0xad, 0x4a, 0x44, 0xf7, 0x1f, 0x1b, - 0x58, 0x0d, 0x34, 0xc3, 0xa9, 0x52, 0x92, 0x0b, 0x25, 0x4a, 0x14, 0x5f, 0xea, - 0x51, 0x7f, 0x5b, 0x42, 0xb2, 0xf6, 0x5e, 0xcd, 0x0f, 0x82, 0x59, 0x54, 0x78, - 0xd8, 0x0a, 0xe5, 0xc8, 0xce, 0xea, 0x12, 0xa1, 0x61, 0xcc, 0xbb, 0x5e, 0xac, - 0x09, 0x99, 0x0f, 0xc6, 0x19, 0xa4, 0x60, 0x80, 0x43, 0x6d, 0xbd, 0x08, 0xd7, - 0x47, 0x84, 0xaf, 0x00, 0x2d, 0x58, 0xe0, 0x6f, 0xaf, 0x7f, 0x3c, 0xea, 0xe7, - 0xd3, 0x41, 0x9b, 0x1f, 0xca, 0x26, 0x5a, 0x55, 0x59, 0xcf, 0x9e, 0x2d, 0x3b, - 0x60, 0x97, 0x8d, 0x81, 0xa6, 0x78, 0xb9, 0xed, 0x8e, 0x44, 0x86, 0xb4, 0xd1, - 0x46, 0x09, 0xd6, 0xc1, 0x27, 0xc0, 0xc2, 0xfb, 0xff, 0xe3, 0x0a, 0x60, 0x51, - 0x98, 0x36, 0x70, 0x17, 0xdf, 0x5c, 0x2b, 0x2c, 0x02, 0x0b, 0x40, 0x50, 0x35, - 0xfe, 0xb4, 0xb2, 0xcd, 0xfe, 0x3a, 0x28, 0x1b, 0xdb, 0xd9, 0x68, 0xe0, 0xa9, - 0x0f, 0xa6, 0x51, 0x36, 0x1a, 0x42, 0xde, 0x27, 0x2c, 0xb8, 0xc2, 0xf5, 0x4e, - 0x96, 0xf5, 0x1d, 0xf9, 0x1e, 0xf1, 0x19, 0xcc, 0x7a, 0xb7, 0xe1, 0x36, 0xa3, - 0xbd, 0xb8, 0x18, 0xb4, 0xd7, 0x8c, 0x8e, 0x98, 0x66, 0x70, 0x03, 0x02, 0x74, - 0x39, 0x22, 0x65, 0x43, 0x32, 0x81, 0xc8, 0xa7, 0x71, 0x17, 0x1c, 0x2b, 0x70, - 0xa0, 0x72, 0x72, 0xd2, 0xfb, 0xaa, 0xbf, 0x81, 0x3b, 0xf2, 0xcc, 0x8c, 0x2b, - 0x2b, 0xc2, 0x56, 0xd4, 0x98, 0x27, 0xff, 0xa8, 0xf6, 0xb0, 0x96, 0xb4, 0xc3, - 0xa7, 0x92, 0xc5, 0xde, 0x00, 0x3f, 0x4c, 0x33, 0xb7, 0x21, 0x60, 0x56, 0xd9, - 0xed, 0xb7, 0x48, 0x2f, 0xb9, 0x8a, 0xa0, 0x33, 0xb6, 0x5e, 0x11, 0x99, 0xf5, - 0x83, 0x7e, 0x81, 0xed, 0x2f, 0xe4, 0x94, 0xa7, 0x19, 0xff, 0xc6, 0x53, 0xfd, - 0x2b, 0xb9, 0xef, 0x91, 0x32, 0x7a, 0xc2, 0x10, 0x48, 0x2a, 0x6d, 0xed, 0x0a, - 0xb8, 0xe1, 0xc8, 0x09, 0x88, 0xbb, 0x45, 0x85, 0x85, 0x1d, 0xc9, 0x3e, 0xcc, - 0xc6, 0x23, 0x22, 0x92, 0x4c, 0xd1, 0x3b, 0x5d, 0xd4, 0xee, 0xd6, 0x6e, 0xd8, - 0xd9, 0x97, 0x2d, 0x77, 0x26, 0x29, 0xea, 0x64, 0x74, 0x2e, 0xe8, 0x3c, 0x04, - 0x11, 0x2f, 0x09, 0xae, 0x57, 0x48, 0x27, 0xaa, 0x4b, 0xeb, 0x00, 0x38, 0xf2, - 0x55, 0x5a, 0x8b, 0xa3, 0x6a, 0x9b, 0xfb, 0xa0, 0x28, 0xd7, 0xc2, 0x1e, 0xa3, - 0xcd, 0x0b, 0xba, 0xa9, 0xae, 0x48, 0x11, 0xc6, 0xaf, 0x06, 0xfe, 0x80, 0xa8, - 0xc0, 0x2a, 0xb7, 0xa0, 0x0e, 0x18, 0xe4, 0xa6, 0xaa, 0x1e, 0xa1, 0xb7, 0x69, - 0x45, 0xd2, 0x61, 0x5d, 0x43, 0xac, 0x11, 0x8b, 0x56, 0xc2, 0xf2, 0x96, 0x0f, - 0xe9, 0x3a, 0x02, 0x5f, 0x13, 0xec, 0x91, 0xff, 0xc6, 0xd2, 0xc3, 0x53, 0x69, - 0x9a, 0xbb, 0x09, 0x2d, 0xed, 0xc0, 0x65, 0xdb, 0x8f, 0xa2, 0x14, 0xdb, 0xc4, - 0x64, 0x66, 0xf8, 0x97, 0xb8, 0x8c, 0x58, 0xb3, 0x01, 0x52, 0x13, 0x3a, 0xa3, - 0x83, 0x1a, 0xf3, 0x7c, 0x74, 0xd9, 0x9e, 0x9e, 0x36, 0xff, 0x70, 0x11, 0xd3, - 0x23, 0x83, 0x05, 0x69, 0x15, 0x08, 0xa2, 0xc3, 0xa4, 0x3e, 0x75, 0x5d, 0xc0, - 0x81, 0xb5, 0x11, 0xd6, 0x48, 0x2a, 0x7d, 0xb6, 0x5f, 0xa9, 0x69, 0x9e, 0xa8, - 0x7f, 0xf4, 0x70, 0x99, 0xed, 0x36, 0x37, 0xdb, 0xb0, 0xa3, 0xd0, 0xef, 0x79, - 0x79, 0x6a, 0x8e, 0xf1, 0xe4, 0xd9, 0x4d, 0x42, 0xb4, 0xbc, 0x2b, 0x4a, 0x03, - 0x8a, 0xe6, 0xe4, 0x6b, 0x24, 0xcf, 0xc8, 0x41, 0x53, 0xd3, 0x1e, 0xaf, 0x89, - 0x50, 0x63, 0xa5, 0xca, 0x95, 0x9b, 0xe6, 0x3f, 0x37, 0xf2, 0xba, 0x0d, 0x43, - 0x23, 0x66, 0x73, 0x6d, 0x86, 0x32, 0xfc, 0xe0, 0x72, 0xb6, 0xae, 0x5b, 0x6f, - 0x3f, 0xd5, 0x9d, 0x3f, 0xaf, 0xf6, 0x38, 0x27, 0x5a, 0x99, 0x2f, 0xef, 0xc8, - 0x7e, 0x60, 0xd4, 0x4c, 0x2c, 0xad, 0xc2, 0xb5, 0xc4, 0x94, 0xe3, 0xe7, 0x2e, - 0xb4, 0x59, 0x7c, 0x96, 0xb4, 0x01, 0x67, 0x79, 0x9a, 0x90, 0x01, 0xa2, 0xed, - 0x36, 0x76, 0xa8, 0xb4, 0x03, 0xae, 0x25, 0xff, 0xd7, 0x72, 0xf7, 0x08, 0x1e, - 0x9a, 0x32, 0xbc, 0xc1, 0xc5, 0xe2, 0xed, 0xd4, 0xe2, 0xa6, 0x57, 0x6b, 0x78, - 0x3c, 0xce, 0x3a, 0xae, 0x11, 0xfa, 0x43, 0x22, 0x62, 0x54, 0x88, 0x56, 0x18, - 0x3e, 0xe6, 0x82, 0xd5, 0xdc, 0x31, 0xbe, 0xb3, 0x8f, 0x06, 0x1c, 0xbd, 0xec, - 0xa7, 0x02, 0x1a, 0x44, 0x4e, 0x2d, 0xd4, 0x17, 0xdf, 0x26, 0xdc, 0xd2, 0x20, - 0xf2, 0xb7, 0x31, 0x77, 0x2b, 0x43, 0x9e, 0x96, 0xd6, 0x14, 0xe1, 0xfa, 0xcb, - 0x48, 0x6c, 0x7a, 0x7d, 0x51, 0x71, 0xb1, 0xde, 0x35, 0x9f, 0x6a, 0xd3, 0xa9, - 0x6f, 0x64, 0x9c, 0x96, 0x91, 0x02, 0xa1, 0x96, 0x4f, 0xb4, 0xb4, 0xa1, 0xa4, - 0x27, 0x9c, 0x68, 0xe6, 0xc3, 0x72, 0xe4, 0x21, 0x87, 0xd7, 0x54, 0xe8, 0x04, - 0xa6, 0x16, 0x53, 0x09, 0x20, 0x69, 0xfb, 0x9b, 0x6d, 0x25, 0x26, 0x68, 0x90, - 0x80, 0x8b, 0x01, 0x5d, 0xf2, 0x8c, 0x80, 0x10, 0x65, 0xda, 0x6f, 0xeb, 0xdc, - 0x1a, 0x56, 0xbf, 0xd0, 0x02, 0x62, 0x5a, 0xcf, 0xaa, 0x53, 0x73, 0xfd, 0xe1, - 0x49, 0xc1, 0xcf, 0xc3, 0x64, 0x9b, 0x48, 0x69, 0x69, 0x6d, 0x44, 0xec, 0xb1, - 0x24, 0x79, 0xc5, 0xeb, 0xef, 0x99, 0x5f, 0x10, 0x02, 0x9f, 0x8b, 0x53, 0x0e, - 0xeb, 0x3f, 0xdc, 0x2e, 0x50, 0xe8, 0x75, 0x7f, 0xc0, 0xbb, 0x9e, 0x26, 0x30, - 0x23, 0xdb, 0x82, 0xf8, 0x78, 0xd9, 0xac, 0x7f, 0xfb, 0x0b, 0xd4, 0x39, 0x1d, - 0xf1, 0xd8, 0x79, 0x89, 0x9a, 0x3e, 0xf5, 0x7b, 0xfd, 0x0d, 0x1f, 0x77, 0x55, - 0x64, 0x8e, 0xdd, 0x85, 0xbb, 0x05, 0x2a, 0x6e, 0xdf, 0x71, 0xcd, 0x26, 0x28, - 0xc9, 0x87, 0x42, 0x9f, 0x36, 0xdc, 0x50, 0x5c, 0xcc, 0x43, 0xf3, 0x0e, 0x7a, - 0x86, 0x9c, 0x9e, 0x25, 0x5e, 0x2a, 0xf9, 0xfc, 0xf3, 0x0c, 0x12, 0x17, 0x96, - 0xd1, 0x90, 0x00, 0x09, 0x60, 0xcb, 0x6f, 0xe2, 0xf1, 0xbf, 0x24, 0x61, 0x18, - 0xb4, 0x98, 0xf3, 0x24, 0x7f, 0x9d, 0x48, 0x4c, 0x73, 0xcf, 0x09, 0x39, 0x30, - 0x39, 0xe4, 0x53, 0x26, 0xb8, 0xff, 0xff, 0xb3, 0xe7, 0xe6, 0x15, 0x9c, 0x46, - 0x69, 0x9f, 0x10, 0x07, 0x92, 0xd4, 0x67, 0x29, 0x50, 0x34, 0x8a, 0x90, 0x55, - 0x2e, 0x45, 0x94, 0x3b, 0xee, 0xac, 0xf0, 0x3f, 0x32, 0x16, 0xf9, 0x4e, 0x27, - 0x4d, 0x63, 0xd6, 0x37, 0xd9, 0xf1, 0x90, 0xe8, 0xa2, 0x66, 0xcd, 0xee, 0xf1, - 0x53, 0x53, 0x0b, 0xee, 0x5c, 0xb8, 0x35, 0x52, 0x60, 0x50, 0x5c, 0x2c, 0x2e, - 0x5d, 0x99, 0x0f, 0xff, 0xdc, 0x34, 0xec, 0x0f, 0xf7, 0xf1, 0xaf, 0x81, 0xb2, - 0x4c, 0xed, 0x0e, 0xfa, 0x62, 0x13, 0xda, 0x6c, 0x7c, 0x60, 0xc4, 0x87, 0xf5, - 0xf7, 0xb0, 0x3f, 0x81, 0x60, 0xa0, 0x57, 0xf4, 0x6d, 0x05, 0xbf, 0x82, 0x18, - 0xb3, 0xad, 0xd9, 0xc0, 0x68, 0x93, 0xbd, 0x02, 0xdb, 0x9b, 0x61, 0x19, 0x1d, - 0xfb, 0x13, 0x3b, 0xfa, 0xbe, 0x48, 0x58, 0xe4, 0x7a, 0x4c, 0xc3, 0x2e, 0x41, - 0x6e, 0xc0, 0x8b, 0x8a, 0xc7, 0x91, 0x5a, 0x43, 0x73, 0x3f, 0x44, 0x06, 0xe9, - 0xd9, 0x67, 0xc5, 0x60, 0xf3, 0x44, 0xd7, 0xe9, 0x04, 0xa2, 0x80, 0x45, 0xd9, - 0x1e, 0x50, 0xd7, 0x9e, 0x42, 0x86, 0x7c, 0x0a, 0xd0, 0xff, 0xb5, 0x5f, 0x68, - 0x87, 0x5e, 0x58, 0x64, 0x20, 0x10, 0x8a, 0x1b, 0x09, 0x25, 0x76, 0x41, 0x5d, - 0xc1, 0x36, 0x93, 0xa1, 0x21, 0x2b, 0x0e, 0x70, 0x03, 0x08, 0x4e, 0xf9, 0x5a, - 0x27, 0xa7, 0xd4, 0x28, 0x4d, 0x27, 0x61, 0x11, 0xd8, 0x60, 0x14, 0x2c, 0xb7, - 0x40, 0xc1, 0x5b, 0x7b, 0x62, 0x3c, 0xf4, 0x8b, 0x3f, 0x7b, 0xfe, 0x3a, 0xf0, - 0x8d, 0xf8, 0xd1, 0xd3, 0xe1, 0x1f, 0xf1, 0x98, 0x21, 0x4e, 0x67, 0x37, 0x76, - 0xf0, 0x4f, 0x0c, 0x4e, 0x84, 0x6c, 0x32, 0xa1, 0x0c, 0x0d, 0x55, 0x9e, 0x49, - 0x68, 0xb4, 0xf8, 0xe1, 0xb9, 0x6c, 0xdc, 0x1e, 0xa7, 0xea, 0x31, 0xdd, 0x86, - 0xd6, 0x80, 0xe2, 0x59, 0x85, 0xe1, 0xd5, 0xd0, 0x25, 0x80, 0xd0, 0x42, 0x74, - 0x23, 0x4a, 0xf2, 0xa5, 0x1b, 0x56, 0xbb, 0x68, 0xa2, 0x9e, 0x03, 0xba, 0xb7, - 0xb5, 0x0f, 0x30, 0x6e, 0xf5, 0xd9, 0xa4, 0xf8, 0x13, 0x5d, 0x69, 0x61, 0x4a, - 0xb3, 0x41, 0x58, 0xfb, 0xa3, 0x70, 0xf7, 0x87, 0x63, 0xd4, 0x02, 0x00, 0x81, - 0xfe, 0x39, 0xcc, 0x23, 0x16, 0x30, 0xe4, 0xc0, 0x89, 0x15, 0xe6, 0x31, 0x77, - 0x15, 0x50, 0xe9, 0xce, 0x1f, 0xca, 0x2c, 0x63, 0xfe, 0x06, 0xb7, 0x98, 0x9d, - 0x58, 0x4f, 0xa7, 0xd7, 0x82, 0xa8, 0x8c, 0x1e, 0x7d, 0x64, 0xb6, 0xfb, 0xf5, - 0x5e, 0x35, 0x96, 0xaf, 0x9b, 0xcb, 0x75, 0x85, 0xf8, 0xc7, 0xd3, 0xaa, 0x5c, - 0x20, 0x82, 0xb2, 0x65, 0x24, 0x9d, 0xf0, 0x57, 0x01, 0xda, 0xb0, 0x31, 0xc4, - 0xba, 0xc1, 0xea, 0x26, 0x7a, 0x29, 0x96, 0xa2, 0x02, 0x8d, 0x1e, 0x6a, 0x0f, - 0x80, 0xa3, 0x84, 0x7c, 0x53, 0x1d, 0xba, 0x96, 0xee, 0x65, 0xa2, 0x41, 0x89, - 0xbd, 0x27, 0x12, 0xe4, 0x0e, 0x95, 0x96, 0x64, 0x98, 0x1e, 0x58, 0xb2, 0xa4, - 0xf9, 0x51, 0xef, 0x8f, 0x49, 0x7d, 0xff, 0xf2, 0xf2, 0xf2, 0x71, 0xea, 0xb8, - 0x9c, 0x62, 0x8e, 0x18, 0xb5, 0xfc, 0xb4, 0x38, 0x82, 0x53, 0x7e, 0xaf, 0x6a, - 0xd2, 0xa6, 0xb1, 0x75, 0x46, 0x33, 0xca, 0xa8, 0x6b, 0xf2, 0xc7, 0x6f, 0x39, - 0x93, 0x15, 0x4f, 0xc7, 0x3e, 0x6f, 0xbb, 0xa2, 0x21, 0x0c, 0x27, 0x43, 0xf5, - 0x30, 0xa4, 0x27, 0x84, 0x9a, 0x30, 0x1e, 0x00, 0xe0, 0x11, 0x29, 0xf0, 0x3a, - 0x46, 0x07, 0xf8, 0x7c, 0xbe, 0x07, 0x62, 0xc0, 0xb1, 0xc6, 0x58, 0x55, 0xde, - 0xba, 0x84, 0x22, 0xca, 0x4b, 0x88, 0xab, 0xee, 0xa6, 0xa4, 0x38, 0x2c, 0xf1, - 0x6c, 0xcd, 0x6d, 0xc7, 0xc3, 0x7c, 0x44, 0xe5, 0x49, 0xc4, 0x53, 0x48, 0x19, - 0xac, 0xd8, 0xbb, 0x0a, 0x02, 0xa5, 0xfa, 0x7a, 0x1c, 0x1d, 0x38, 0x06, 0xfb, - 0xc3, 0x40, 0x7f, 0xd7, 0xda, 0x93, 0xfd, 0x0d, 0xe6, 0x40, 0x0d, 0x3a, 0xb8, - 0x97, 0x74, 0x85, 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, 0x50, 0x7b, 0x79, 0x94, - 0x7a, 0xdb, 0x2f, 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, 0xdb, 0x5f, 0x29, 0x80, - 0x99, 0xf2, 0x0f, 0x26, 0x3b, 0x35, 0x9a, 0x11, 0x51, 0xa6, 0xb7, 0x5c, 0x01, - 0x36, 0x5e, 0xb1, 0x54, 0xae, 0x42, 0x14, 0x0d, 0x6e, 0x10, 0x34, 0x2f, 0x14, - 0xf3, 0x4d, 0xc3, 0x3e, 0x07, 0xff, 0x0e, 0x4d, 0x1a, 0x6b, 0xe3, 0x75, 0xb3, - 0x2f, 0x84, 0xb9, 0x2e, 0x5d, 0x81, 0xeb, 0xb6, 0x39, 0xc4, 0xf2, 0x7e, 0x71, - 0x5a, 0xa4, 0x2c, 0xc7, 0x57, 0x07, 0xd4, 0xeb, 0xd1, 0xbb, 0xfb, 0xe8, 0xf9, - 0x0f, 0xc7, 0xc9, 0x53, 0xe7, 0xa9, 0x71, 0x5e, 0x65, 0xaf, 0x82, 0x67, 0x37, - 0x3d, 0x34, 0x51, 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, 0x2c, 0xcf, 0x3b, 0xcc, - 0x7a, 0xca, 0x14, 0x67, 0xb6, 0x32, 0x7e, 0x4f, 0x95, 0x22, 0xb2, 0xcc, 0x57, - 0x9a, 0x7a, 0x8f, 0xff, 0x7c, 0xa7, 0xcf, 0x14, 0x5d, 0xfc, 0x13, 0xea, 0xfc, - 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, 0xfb, 0xe5, 0x34, 0x44, 0xd0, 0xc7, 0x3b, - 0x3b, 0xd5, 0xbc, 0x87, 0x0b, 0x01, 0xcd, 0x45, 0x79, 0x11, 0xe3, 0x56, 0x31, - 0x3f, 0xd1, 0xda, 0xfb, 0x4c, 0x81, 0x51, 0x63, 0x4a, 0x01, 0xaf, 0xf7, 0xcf, - 0x11, 0x6d, 0x43, 0x3c, 0x3d, 0x2b, 0x3a, 0xdd, 0xa9, 0xce, 0xbe, 0x18, 0xf7, - 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, 0x5a, 0xc9, 0xab, 0xe8, 0xdb, 0x22, 0x56, - 0xd7, 0xeb, 0xe2, 0xff, 0x28, 0x02, 0x09, 0x39, 0x50, 0x38, 0x70, 0x59, 0x7b, - 0x9a, 0x95, 0x58, 0x92, 0xc7, 0x38, 0x96, 0x50, 0xa2, 0xd4, 0x2e, 0xc9, 0x2b, - 0xe7, 0x23, 0xfe, 0xdf, 0x2f, 0x2e, 0xde, 0x5a, 0x47, 0x2a, 0xa1, 0xe7, 0x4f, - 0x33, 0xad, 0x41, 0x90, 0x15, 0x44, 0xed, 0xbb, 0xe3, 0xac, 0x46, 0x4c, 0xf4, - 0x39, 0x19, 0x60, 0x15, 0xf4, 0xf2, 0x2a, 0xc2, 0xb8, 0xfc, 0x01, 0x49, 0x6b, - 0xea, 0xb4, 0xd4, 0x59, 0x07, 0xf4, 0x79, 0x81, 0x2a, 0x25, 0x94, 0x31, 0xa2, - 0xcb, 0xc9, 0x3d, 0x4f, 0x3b, 0x84, 0xe4, 0xdd, 0x36, 0x60, 0x20, 0x27, 0x3a, - 0x67, 0x52, 0xe5, 0x01, 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, 0x81, 0x7e, 0x6e, - 0xa3, 0x51, 0xd6, 0x00, 0x6b, 0xec, 0xf8, 0xd2, 0xff, 0xb0, 0x39, 0x90, 0xf6, - 0x77, 0x74, 0xa8, 0x1e, 0x05, 0xb7, 0xf4, 0xbb, 0xad, 0x85, 0x77, 0xfa, 0x27, - 0xc9, 0xde, 0x64, 0xe1, 0xb1, 0x1d, 0xcf, 0x38, 0x4f, 0x59, 0x56, 0x44, 0x37, - 0x48, 0x75, 0x5a, 0x9f, 0xc6, 0xf2, 0xa0, 0x0b, 0x10, 0xc3, 0x65, 0x7e, 0xba, - 0xc0, 0x3b, 0xfc, 0x0b, 0x58, 0x7b, 0xef, 0x2f, 0x45, 0xec, 0x8a, 0xcd, 0xaa, - 0x51, 0xc1, 0x43, 0xb0, 0xcb, 0x25, 0xb9, 0x14, 0x2c, 0x61, 0xbd, 0x79, 0x0a, - 0x80, 0xd7, 0xc2, 0x3f, 0x90, 0xcc, 0x03, 0x49, 0x5b, 0x51, 0xe4, 0xd2, 0x84, - 0x3e, 0x55, 0x7f, 0x9e, 0x25, 0x45, 0x10, 0x8c, 0x6c, 0x6f, 0xae, 0x35, 0x9f, - 0x64, 0x5c, 0x27, 0x68, 0x91, 0xc0, 0xdc, 0xab, 0x3f, 0xaf, 0x18, 0x77, 0x00, - 0xc0, 0x03, 0x10, 0xa4, 0xfe, 0xf5, 0x63, 0x14, 0x00, 0x00, 0x9a, 0x2d, 0xbd, - 0x0e, 0x13, 0x8d, 0x2d, 0xea, 0xe4, 0x1c, 0xae, 0xa5, 0xf1, 0x86, 0x57, 0x7a, - 0x77, 0xd1, 0xb7, 0x37, 0xfe, 0x21, 0xf0, 0xfa, 0x5a, 0x18, 0xeb, 0xb5, 0x27, - 0x55, 0xb5, 0x26, 0xef, 0x61, 0x30, 0xfb, 0x56, 0x94, 0x4c, 0xfa, 0xb8, 0x75, - 0x27, 0xc2, 0x50, 0xd1, 0x13, 0xb2, 0x9b, 0xca, 0xc9, 0xaa, 0xa1, 0x0c, 0x2e, - 0x7d, 0xe4, 0x15, 0xed, 0xb0, 0x80, 0x6c, 0x6d, 0xa0, 0x30, 0x20, 0xa1, 0x34, - 0xca, 0x7e, 0xcd, 0xc8, 0xda, 0x1b, 0xd5, 0x7a, 0x37, 0xf5, 0x5a, 0x46, 0x94, - 0x0b, 0x45, 0xb2, 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, 0x92, 0x7d, 0x1b, 0xd8, - 0x60, 0xd4, 0x45, 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, 0xe1, 0xd0, 0x01, - 0x08, 0x02, 0x6c, 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, 0xf5, 0xc3, 0x70, - 0xbc, 0xe1, 0x8d, 0x3a, 0xcb, 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, 0xe1, 0xd8, - 0x02, 0xf7, 0x73, 0x33, 0x49, 0x4a, 0x7a, 0xe1, 0x30, 0xfe, 0x86, 0xe8, 0xf8, - 0x18, 0xf9, 0x26, 0x1a, 0x2d, 0xad, 0xb4, 0x12, 0x52, 0x29, 0xba, 0x0f, 0xfc, - 0x0e, 0x70, 0x90, 0x32, 0x44, 0x30, 0xb5, 0x21, 0xa9, 0x0d, 0x22, 0x4a, 0xb7, - 0xa1, 0x02, 0x4e, 0x1d, 0x89, 0x3e, 0x74, 0x04, 0xfe, 0xdb, 0x34, 0x8e, 0x4d, - 0x5e, 0x22, 0x35, 0xc5, 0x9a, 0x78, 0x76, 0xa0, 0xfc, 0x60, 0x14, 0x5c, 0x6a, - 0x00, 0x96, 0x87, 0x68, 0x44, 0x60, 0x27, 0x1e, 0xe1, 0x33, 0xa4, 0x37, 0xfe, - 0x52, 0xfb, 0x6c, 0xfb, 0xa9, 0x7f, 0xce, 0xc1, 0x61, 0xdf, 0x51, 0x5d, 0xde, - 0x90, 0x5a, 0x24, 0xda, 0x6d, 0x37, 0xbd, 0xc3, 0x40, 0x44, 0xa9, 0x55, 0xe6, - 0x82, 0xb4, 0x74, 0x71, 0xca, 0x1e, 0x8c, 0x78, 0xc5, 0x1e, 0xd3, 0x77, 0xcd, - 0x4a, 0xfa, 0x89, 0x4b, 0xd9, 0xbd, 0x12, 0xe7, 0x07, 0x15, 0x6d, 0xa0, 0x72, - 0x6f, 0x7c, 0xf5, 0x72, 0x9f, 0xab, 0xe3, 0x72, 0x16, 0x22, 0x15, 0x07, 0xc5, - 0x50, 0x6e, 0xf5, 0x9e, 0xce, 0x2a, 0x58, 0x1c, 0x9d, 0x8b, 0x0b, 0x20, 0x74, - 0xab, 0x0e, 0x84, 0x8c, 0xa6, 0xb7, 0x05, 0x4d, 0x18, 0x41, 0x83, 0x7e, 0x87, - 0x91, 0xbd, 0x82, 0x71, 0x5a, 0x28, 0xab, 0x56, 0x9a, 0x9a, 0x28, 0x7a, 0x4f, - 0x64, 0x90, 0x08, 0x6b, 0x1c, 0x22, 0x16, 0x95, 0x21, 0xcd, 0xc1, 0x32, 0x21, - 0x29, 0x39, 0xc8, 0x4a, 0x10, 0x89, 0x64, 0x22, 0x17, 0x02, 0x34, 0xcd, 0x82, - 0x05, 0x5a, 0x8c, 0x1c, 0x2e, 0x53, 0xa0, 0xe2, 0x14, 0x93, 0x8a, 0x97, 0xed, - 0x7c, 0xc8, 0xde, 0x0f, 0x4e, 0xd4, 0xb2, 0x1b, 0x94, 0x5b, 0x55, 0xe9, 0xeb, - 0x05, 0x59, 0xea, 0x85, 0x8d, 0x43, 0xfc, 0x31, 0x13, 0x16, 0x5e, 0xa1, 0x8b, - 0x7b, 0x89, 0x3a, 0x5e, 0x32, 0x6a, 0x5b, 0x0a, 0xf4, 0x75, 0xe2, 0x7a, 0x54, - 0xb2, 0x07, 0xb4, 0x1f, 0x92, 0xe3, 0x36, 0x99, 0x06, 0x0c, 0xb6, 0x70, 0x4a, - 0xb5, 0x69, 0x0d, 0xb5, 0x7a, 0xa8, 0x12, 0xcb, 0x9c, 0x24, 0x43, 0x06, 0x44, - 0xc3, 0xb3, 0xb2, 0xa4, 0x4f, 0x27, 0x18, 0xa7, 0xdf, 0x88, 0xab, 0xc4, 0x11, - 0x7b, 0x58, 0x7d, 0xef, 0xf7, 0x8d, 0xe9, 0xc7, 0x3a, 0xf2, 0x80, 0x80, 0xb2, - 0xfd, 0x05, 0x00, 0x3e, 0x11, 0xd3, 0xe1, 0xb3, 0x29, 0x9d, 0xc9, 0x52, 0x1f, - 0x8b, 0x51, 0x3b, 0xad, 0xb0, 0x10, + 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x72, + 0x09, 0x62, 0x34, 0xae, 0x11, 0xf0, 0x17, 0x00, 0x00, 0x02, 0x39, 0x17, 0x2d, + 0x51, 0x94, 0x1a, 0x45, 0x44, 0x39, 0x13, 0xfd, 0xc1, 0x61, 0x65, 0x2a, 0xc8, + 0xd5, 0xa2, 0x57, 0xc9, 0x77, 0xdd, 0xd8, 0x7c, 0xd3, 0xfc, 0x1b, 0xed, 0xa2, + 0x3a, 0x40, 0xbb, 0xa7, 0x84, 0x2b, 0x3e, 0x90, 0x30, 0x53, 0x83, 0x89, 0x6e, + 0xc4, 0x90, 0x5f, 0x70, 0xc7, 0x8b, 0x69, 0x4e, 0x6a, 0x5a, 0x3e, 0x43, 0x12, + 0xcd, 0x82, 0x08, 0x13, 0x2b, 0x84, 0x0f, 0x05, 0xc7, 0x14, 0x52, 0x3c, 0xa8, + 0x19, 0x72, 0x0a, 0xe2, 0x27, 0xfd, 0x1a, 0xcb, 0xa7, 0x14, 0xfa, 0x4f, 0xc4, + 0x5f, 0xc5, 0x39, 0x88, 0x57, 0xb4, 0x0d, 0xc1, 0x48, 0x79, 0x85, 0x6f, 0x35, + 0x4b, 0xa4, 0xb2, 0xa9, 0x54, 0x72, 0xf1, 0x5d, 0xd3, 0x4f, 0xf6, 0x59, 0xb6, + 0x46, 0xa2, 0xc8, 0x4d, 0x9e, 0xb8, 0x4f, 0x57, 0xfb, 0x1e, 0xdf, 0xbf, 0x63, + 0xfe, 0x6d, 0xf0, 0x59, 0x3b, 0x51, 0x7a, 0x56, 0x31, 0x62, 0x2d, 0x0f, 0x0f, + 0x87, 0xa8, 0x55, 0xba, 0x54, 0x00, 0x03, 0x32, 0x03, 0x1f, 0x73, 0xab, 0xff, + 0xd4, 0x65, 0x91, 0xda, 0x0b, 0x88, 0x72, 0x35, 0x04, 0xed, 0xb2, 0x33, 0x72, + 0x30, 0xda, 0xd2, 0xac, 0xc0, 0xd8, 0xbb, 0x68, 0xbc, 0x83, 0x7a, 0x2f, 0xf9, + 0x30, 0xbf, 0xf0, 0x6f, 0xde, 0x74, 0xeb, 0x90, 0xaa, 0xe4, 0xf6, 0x0d, 0xbb, + 0x6e, 0xb8, 0x27, 0xea, 0x99, 0x88, 0x4a, 0x00, 0x5b, 0xc5, 0xcf, 0x08, 0xa9, + 0x17, 0x07, 0x00, 0x90, 0xff, 0x73, 0x55, 0x09, 0x3b, 0xbf, 0x06, 0x17, 0x3e, + 0x7f, 0x11, 0xfa, 0x83, 0xb3, 0xfb, 0xaf, 0x8d, 0x28, 0x07, 0x0a, 0xe0, 0x13, + 0x4b, 0x89, 0xbf, 0xb3, 0x6c, 0x00, 0xdd, 0xed, 0x08, 0xd2, 0x58, 0x1d, 0x0c, + 0xda, 0x54, 0xb6, 0x38, 0xba, 0x9d, 0x76, 0xf9, 0xb5, 0x2d, 0x17, 0xc8, 0xf8, + 0x8e, 0xe6, 0x3f, 0x58, 0x45, 0xb5, 0xdc, 0xef, 0xa4, 0xc3, 0x47, 0x9b, 0xce, + 0x9a, 0xca, 0xd1, 0x8b, 0x4a, 0xea, 0xe0, 0x3c, 0x0e, 0xae, 0x22, 0x5d, 0x42, + 0x84, 0x8b, 0xde, 0xaa, 0x53, 0x6d, 0x7d, 0x8d, 0xd3, 0xbc, 0x97, 0x9f, 0x06, + 0x58, 0x66, 0x73, 0xbc, 0x6f, 0xf1, 0xc5, 0xd3, 0xb3, 0x20, 0xf3, 0x49, 0xa5, + 0xb3, 0xa8, 0xb3, 0x55, 0x59, 0x22, 0x96, 0xaa, 0xf6, 0x1c, 0x5b, 0x72, 0x52, + 0xf7, 0x3e, 0xc0, 0xa9, 0x46, 0x6a, 0x1b, 0x85, 0x76, 0x4f, 0xb0, 0x83, 0x1b, + 0x4a, 0x1a, 0x36, 0x89, 0x0e, 0x22, 0x4c, 0x01, 0xac, 0xfc, 0xe4, 0x8e, 0xe3, + 0xed, 0x93, 0x87, 0x73, 0x98, 0xe0, 0x72, 0x6d, 0x02, 0x93, 0x6d, 0x0d, 0x03, + 0x2e, 0x18, 0xe3, 0x28, 0x8b, 0x26, 0x70, 0xe1, 0x36, 0x2c, 0x32, 0xd6, 0xe4, + 0x73, 0x3b, 0x9d, 0xd2, 0xd5, 0xf2, 0x6e, 0x1f, 0xe3, 0x06, 0xf7, 0x3c, 0x00, + 0x7f, 0xdd, 0xca, 0xe9, 0xd9, 0xc0, 0xaa, 0xf1, 0x87, 0xd7, 0x42, 0x8b, 0x1e, + 0x9d, 0x47, 0x9c, 0x18, 0x23, 0x7b, 0x98, 0x28, 0xbc, 0xa8, 0xb9, 0x8c, 0x9d, + 0x9b, 0xec, 0x7d, 0x82, 0x70, 0xb5, 0xd8, 0xee, 0xc3, 0xcc, 0x4f, 0x43, 0xfa, + 0x01, 0x88, 0x52, 0x1b, 0xc6, 0x1b, 0xcd, 0x62, 0x85, 0xa9, 0x88, 0x92, 0x80, + 0x2c, 0xf5, 0x9d, 0x5d, 0x60, 0xd0, 0x16, 0x63, 0x38, 0x7b, 0x3e, 0xd2, 0x72, + 0x3b, 0xd6, 0x48, 0x9e, 0x9c, 0x2c, 0x10, 0x6d, 0x4a, 0xa2, 0xde, 0x23, 0xce, + 0xd1, 0x6c, 0x72, 0x04, 0x29, 0xc7, 0x75, 0x3a, 0x77, 0x38, 0xec, 0x7d, 0x9d, + 0xb8, 0x62, 0x42, 0x29, 0xed, 0xd2, 0x17, 0xb8, 0x0d, 0x74, 0x87, 0x5a, 0x14, + 0xca, 0xe4, 0x86, 0x3f, 0x13, 0x9e, 0x9c, 0x0b, 0x13, 0x1b, 0x2a, 0x4c, 0x28, + 0x07, 0x1a, 0x38, 0xec, 0x61, 0xf6, 0x68, 0x01, 0xaa, 0x59, 0x56, 0xfc, 0xb2, + 0xa4, 0x6b, 0x95, 0x87, 0x66, 0x5b, 0x75, 0x71, 0xaa, 0x03, 0x48, 0x1f, 0xd8, + 0xd9, 0xd5, 0x69, 0x8f, 0x83, 0x6f, 0xc8, 0x63, 0x5e, 0x69, 0xe3, 0xbd, 0xe4, + 0x2f, 0x4a, 0xc0, 0x71, 0x32, 0x8b, 0x54, 0x09, 0xf6, 0xe4, 0x2d, 0x79, 0x0a, + 0xed, 0xd7, 0x3b, 0xc1, 0xa2, 0x35, 0x47, 0x23, 0xb3, 0xb8, 0x19, 0xd0, 0x63, + 0x7a, 0x6f, 0xa4, 0x66, 0x39, 0x46, 0xa3, 0x0a, 0xc5, 0xaf, 0xdd, 0x30, 0xce, + 0x83, 0x0f, 0x67, 0x91, 0xb4, 0x57, 0x52, 0x70, 0xa1, 0x72, 0x0f, 0x91, 0x86, + 0x6e, 0x2b, 0x86, 0xf4, 0x78, 0x88, 0x94, 0xc8, 0xda, 0x62, 0xd8, 0xb9, 0x1f, + 0xaf, 0x52, 0x0e, 0x3b, 0xed, 0xbc, 0x12, 0x06, 0xa5, 0xa5, 0xe6, 0xef, 0xd3, + 0xdf, 0xde, 0x08, 0x13, 0x25, 0x0f, 0x1c, 0xf7, 0xfe, 0x55, 0x24, 0x45, 0xc5, + 0x06, 0x5d, 0xd8, 0x71, 0x3c, 0x25, 0xbc, 0x2d, 0xf8, 0x85, 0x33, 0x56, 0x9d, + 0x68, 0xd9, 0xa8, 0xf5, 0xf5, 0x84, 0xb8, 0xe4, 0x80, 0x0a, 0xbb, 0xb7, 0x60, + 0x3c, 0x56, 0x7c, 0xec, 0xb0, 0x96, 0x59, 0x12, 0xb2, 0x2a, 0x49, 0xec, 0x21, + 0x20, 0xce, 0x77, 0xad, 0xd1, 0xa6, 0x67, 0x0a, 0x29, 0x82, 0x50, 0xf4, 0x6b, + 0x97, 0x09, 0x36, 0xeb, 0x7d, 0xcd, 0x42, 0x63, 0x4d, 0xae, 0x71, 0x90, 0xce, + 0x6e, 0xe7, 0x99, 0x66, 0x4d, 0xfb, 0x9f, 0x16, 0x3c, 0xdb, 0x96, 0x74, 0x0e, + 0x04, 0xc0, 0xb4, 0x41, 0x8f, 0x80, 0x0a, 0xf2, 0xc0, 0x25, 0x4a, 0x0b, 0xf4, + 0xa2, 0x84, 0x09, 0x57, 0x18, 0xc0, 0xfd, 0x9d, 0x15, 0x83, 0x91, 0x5c, 0x22, + 0x13, 0x1a, 0xae, 0x59, 0x50, 0x4e, 0xa0, 0x6d, 0xbc, 0x01, 0x34, 0x85, 0x72, + 0x08, 0x39, 0xf2, 0xdc, 0x41, 0x38, 0x8e, 0xbb, 0x27, 0xc2, 0xe3, 0xd9, 0xd7, + 0x1f, 0xa4, 0x0e, 0xea, 0xc5, 0x32, 0x37, 0xf8, 0x3e, 0xdb, 0xf9, 0xf9, 0x1a, + 0xb2, 0xd1, 0x7d, 0xd1, 0x76, 0x3a, 0xef, 0x6b, 0xa7, 0x34, 0x41, 0x3d, 0x69, + 0x72, 0xcd, 0x8a, 0xee, 0xdc, 0x83, 0xf8, 0xf0, 0xfb, 0x49, 0xd6, 0xaf, 0xbb, + 0xb3, 0x38, 0x44, 0x22, 0x7b, 0xeb, 0x56, 0x16, 0x43, 0xe8, 0x1d, 0x2c, 0x08, + 0x03, 0xc3, 0x27, 0xf2, 0x41, 0x18, 0x0d, 0xe4, 0x18, 0xdf, 0x3b, 0x6a, 0xd8, + 0x85, 0x14, 0xf9, 0x5b, 0xaa, 0xaa, 0xbe, 0x6a, 0x00, 0xe0, 0x52, 0x9b, 0x88, + 0xfc, 0xf4, 0xfc, 0x30, 0x41, 0xa6, 0x0d, 0x16, 0x09, 0xf6, 0x3a, 0xf3, 0x76, + 0xd5, 0xcc, 0x24, 0xbd, 0x0b, 0xc1, 0x5f, 0x29, 0x9c, 0x05, 0x9b, 0x07, 0xad, + 0xdf, 0x14, 0x6f, 0x4f, 0xfa, 0x50, 0x1f, 0x9d, 0xd3, 0xcf, 0xf9, 0x24, 0x23, + 0x19, 0x78, 0x8c, 0x11, 0xc7, 0x8b, 0x0b, 0x85, 0xf1, 0xd7, 0x01, 0x9b, 0xc0, + 0xa8, 0x51, 0xd4, 0xdb, 0xf2, 0xf1, 0xb3, 0xa2, 0xa2, 0x69, 0xec, 0x71, 0xca, + 0xcd, 0x67, 0xfe, 0xc9, 0xd2, 0x25, 0x6e, 0x92, 0x19, 0x07, 0xa1, 0xb7, 0xb3, + 0x75, 0x12, 0x13, 0x24, 0x1b, 0x2c, 0xfa, 0xa5, 0x5a, 0x5e, 0xa4, 0xdd, 0x51, + 0x7e, 0x7b, 0x49, 0xd2, 0xde, 0x8c, 0x09, 0x08, 0x43, 0x73, 0x0d, 0x24, 0xba, + 0x0d, 0x3e, 0xbc, 0xf4, 0xae, 0x8d, 0xa9, 0x11, 0x92, 0x0a, 0x6d, 0xfb, 0x29, + 0xa8, 0x49, 0x34, 0x15, 0xfa, 0x20, 0xc8, 0x08, 0x04, 0x29, 0x1e, 0xc2, 0x30, + 0xbf, 0x8d, 0x9e, 0x10, 0x31, 0x39, 0xa9, 0x4e, 0xa8, 0xb9, 0x75, 0xc0, 0x65, + 0xa9, 0x1f, 0xf2, 0x57, 0xca, 0xc7, 0xa9, 0x23, 0x85, 0xfc, 0x8f, 0xa9, 0x21, + 0xb1, 0x06, 0xba, 0x86, 0x60, 0xc6, 0x0a, 0xc8, 0xba, 0x5e, 0xce, 0x45, 0x60, + 0x6f, 0x04, 0xf3, 0x6a, 0x3a, 0x90, 0xbb, 0x38, 0x38, 0xc4, 0x2a, 0xbf, 0x62, + 0xdd, 0x2d, 0x84, 0xba, 0xbe, 0xf3, 0xe1, 0x88, 0xe9, 0x17, 0x1a, 0xff, 0x9b, + 0xc1, 0x16, 0x66, 0x90, 0x09, 0xd8, 0x87, 0x13, 0x0a, 0xc9, 0xf7, 0x39, 0x6a, + 0x62, 0x7a, 0x84, 0x74, 0xc1, 0x81, 0x1b, 0x69, 0x6f, 0x99, 0x55, 0x2b, 0x14, + 0xc4, 0x84, 0xdf, 0xe4, 0x2c, 0x24, 0xd5, 0x7c, 0x3a, 0x9c, 0x3f, 0xea, 0x13, + 0x76, 0xcd, 0xcb, 0x63, 0x42, 0x1c, 0x31, 0x4a, 0x62, 0x2a, 0x9a, 0xef, 0x0b, + 0xc0, 0x57, 0xcb, 0x11, 0xbc, 0x5e, 0x30, 0x66, 0xe3, 0x3a, 0x3b, 0x9b, 0x31, + 0xdf, 0x25, 0x75, 0xcd, 0x51, 0x85, 0xa4, 0xf3, 0xfc, 0x4e, 0x4c, 0x3d, 0x40, + 0x2e, 0xd4, 0x20, 0x46, 0xf8, 0x1f, 0x97, 0x48, 0x16, 0xd2, 0x79, 0xb1, 0x51, + 0x3a, 0xb8, 0x1d, 0x3f, 0x0a, 0x3c, 0x7f, 0x7f, 0xcf, 0x2f, 0xbb, 0x4e, 0x26, + 0x32, 0x19, 0x93, 0xa5, 0x13, 0xad, 0x3d, 0x7f, 0x4a, 0xfe, 0x6c, 0x1b, 0xbd, + 0xc6, 0x57, 0x58, 0x50, 0x80, 0xbb, 0x5a, 0x0f, 0x25, 0x97, 0x3d, 0x63, 0xeb, + 0x20, 0xad, 0xa0, 0x16, 0x6b, 0xbd, 0x8a, 0x39, 0xff, 0x93, 0x24, 0x6f, 0x27, + 0x89, 0x73, 0x2a, 0xd0, 0x55, 0x87, 0xf8, 0xdb, 0x7b, 0xc8, 0x7c, 0x24, 0x2c, + 0xfd, 0x36, 0xce, 0x68, 0x5a, 0x4b, 0x65, 0x69, 0x86, 0xc3, 0x9f, 0xd7, 0xfc, + 0xb2, 0x3c, 0x91, 0x91, 0x3e, 0x46, 0x11, 0x19, 0x1e, 0xdc, 0xc8, 0x8b, 0x78, + 0xf1, 0x45, 0xea, 0x29, 0xd2, 0x71, 0xb9, 0x40, 0xc6, 0x99, 0x41, 0xe4, 0xc3, + 0xfd, 0x2d, 0x71, 0xf3, 0xb1, 0x90, 0x69, 0x0e, 0xe1, 0x6f, 0x5d, 0x14, 0xac, + 0x22, 0x24, 0xe6, 0xfc, 0x89, 0x59, 0x76, 0x54, 0x52, 0x7d, 0xab, 0xe7, 0x2e, + 0x75, 0xd2, 0xd2, 0xa1, 0x3a, 0x9f, 0xba, 0xa6, 0x37, 0x8e, 0x8a, 0x26, 0x43, + 0x21, 0x08, 0x7a, 0x19, 0x00, 0xef, 0xe3, 0xca, 0xd1, 0x4a, 0x57, 0x96, 0x86, + 0xaa, 0x36, 0x36, 0xbd, 0x37, 0x5b, 0xd3, 0x13, 0x6b, 0xee, 0x0b, 0xda, 0xab, + 0xcf, 0xac, 0x88, 0x1b, 0xc7, 0x01, 0x81, 0x27, 0x21, 0xe6, 0xfb, 0x75, 0xaa, + 0x07, 0x2d, 0x2d, 0x18, 0x7e, 0x62, 0x25, 0x8d, 0x65, 0xa1, 0x92, 0x15, 0x7c, + 0xdf, 0x2e, 0xc3, 0x21, 0x40, 0x7f, 0x68, 0x2f, 0x5e, 0xec, 0x6a, 0x32, 0x97, + 0xab, 0x20, 0xb7, 0x06, 0x1c, 0x62, 0x24, 0x57, 0x16, 0xa4, 0x4f, 0x71, 0xfb, + 0xfc, 0x34, 0xc7, 0x9b, 0x44, 0xe0, 0x9e, 0x42, 0x12, 0xac, 0x26, 0x53, 0xf6, + 0xc4, 0x03, 0x64, 0x3e, 0x1c, 0x5b, 0x9a, 0xd1, 0x34, 0xd8, 0x9c, 0x68, 0x0b, + 0x70, 0x72, 0x83, 0xaf, 0x54, 0x32, 0x6f, 0xc4, 0xf8, 0x4d, 0x6a, 0x58, 0x29, + 0xa0, 0xad, 0x48, 0x30, 0x80, 0x6c, 0x05, 0x75, 0x84, 0x92, 0xcd, 0x6a, 0xc4, + 0x6b, 0xa0, 0x1a, 0x2b, 0x37, 0x22, 0xb5, 0xe4, 0xcd, 0xaf, 0xbb, 0x3f, 0x36, + 0x78, 0x5f, 0x42, 0x4a, 0xf0, 0x44, 0xda, 0xc5, 0xdb, 0x5f, 0x7d, 0xf8, 0x39, + 0xeb, 0x63, 0xc0, 0xc1, 0x7d, 0x8b, 0x0c, 0x79, 0xdb, 0x86, 0x30, 0x94, 0x20, + 0x15, 0xbe, 0x13, 0xf7, 0x9a, 0xf6, 0xf4, 0x3e, 0x5a, 0xb0, 0x77, 0x81, 0x14, + 0x79, 0x8f, 0x44, 0x22, 0x58, 0xee, 0xdc, 0x43, 0x6f, 0xcc, 0x38, 0x6b, 0x36, + 0xb5, 0x7e, 0x19, 0x17, 0xd7, 0x20, 0x17, 0x73, 0x66, 0xf4, 0x24, 0xb0, 0xa5, + 0x4b, 0x0b, 0x60, 0xf4, 0xfb, 0x13, 0x58, 0xc2, 0x0a, 0xa4, 0x1d, 0xc5, 0x02, + 0xe1, 0xdd, 0x8a, 0x16, 0x33, 0xf3, 0xd8, 0xe3, 0x27, 0x6b, 0x59, 0xe7, 0xd2, + 0xc4, 0xe6, 0x24, 0xa6, 0xf5, 0x36, 0x95, 0xbc, 0xaf, 0x24, 0x7e, 0x36, 0x48, + 0x3f, 0x13, 0xb2, 0x04, 0x42, 0x22, 0x37, 0xfc, 0x6a, 0xb3, 0xeb, 0xa0, 0x2f, + 0xc4, 0x14, 0x2b, 0x42, 0x97, 0xeb, 0xb5, 0x68, 0x3d, 0xb8, 0xd2, 0x43, 0x19, + 0x70, 0x6a, 0xd2, 0x6a, 0xaf, 0xd8, 0x1c, 0x53, 0xb7, 0x40, 0xf3, 0x45, 0x43, + 0xa6, 0xb3, 0xe9, 0xf5, 0xbb, 0x7d, 0x5c, 0x49, 0xe8, 0xc3, 0x7f, 0x61, 0x49, + 0x21, 0x25, 0x4f, 0x32, 0x12, 0x39, 0x4c, 0x79, 0x7d, 0x1c, 0xee, 0x78, 0x99, + 0xb7, 0xb4, 0xb6, 0x5b, 0x59, 0xb7, 0x34, 0x2f, 0x92, 0x53, 0x1c, 0x1d, 0x59, + 0xe1, 0x79, 0x70, 0xb7, 0x31, 0x74, 0x14, 0x43, 0x8c, 0xd8, 0x0b, 0xd0, 0xf9, + 0xa6, 0x7c, 0x9b, 0x9e, 0x55, 0x2f, 0x01, 0x3c, 0x11, 0x5a, 0x95, 0x4f, 0x35, + 0xe0, 0x61, 0x6c, 0x68, 0xd4, 0x31, 0x63, 0xd3, 0x34, 0xda, 0xc3, 0x82, 0x70, + 0x33, 0xe5, 0x4f, 0x72, 0x70, 0xc7, 0xcb, 0xb1, 0x1c, 0x0b, 0x65, 0xe3, 0x85, + 0xc9, 0x49, 0x05, 0x60, 0x67, 0xa0, 0xd2, 0x22, 0xd0, 0x2a, 0x48, 0x4b, 0xf8, + 0xa4, 0x19, 0x1d, 0xfb, 0x0f, 0x5e, 0xbe, 0x89, 0xae, 0xff, 0x7c, 0xb0, 0x5f, + 0x31, 0x5c, 0x58, 0xaa, 0x68, 0x96, 0xd5, 0x81, 0x17, 0x1d, 0xc4, 0x0d, 0x94, + 0xab, 0xde, 0x68, 0x89, 0x8c, 0x33, 0x92, 0xa2, 0x17, 0xd6, 0x49, 0x61, 0x6b, + 0x3e, 0xbc, 0x44, 0xd1, 0x6c, 0xba, 0x6a, 0x0f, 0xed, 0x4b, 0xb0, 0xf6, 0x49, + 0x91, 0xc2, 0xc3, 0xe8, 0xed, 0xc0, 0x1b, 0x7a, 0x47, 0xf6, 0x5e, 0x72, 0xf3, + 0x9b, 0xab, 0xf5, 0xa1, 0x7c, 0xd6, 0xad, 0xfc, 0x8d, 0x1e, 0x5c, 0xf5, 0x9f, + 0xb1, 0xe6, 0xde, 0x97, 0x51, 0x06, 0xb2, 0x6b, 0xdb, 0x39, 0x24, 0xad, 0xc0, + 0xb1, 0x13, 0x5c, 0x70, 0xc9, 0x70, 0xe0, 0x90, 0x3a, 0xf6, 0xe1, 0x70, 0x01, + 0x9e, 0xea, 0xd1, 0xf2, 0x75, 0xec, 0x3b, 0x31, 0x43, 0xe4, 0xa5, 0x8e, 0x5e, + 0x72, 0x0e, 0xe2, 0xab, 0x68, 0xca, 0x25, 0x63, 0x86, 0x41, 0xc0, 0xe1, 0xac, + 0xd5, 0x48, 0x91, 0xcb, 0xf2, 0x03, 0x62, 0xa7, 0x77, 0xd1, 0x75, 0x00, 0x2a, + 0x13, 0x7d, 0xe8, 0x5b, 0x88, 0x88, 0x92, 0x91, 0x98, 0x11, 0x7a, 0xa5, 0xd6, + 0x19, 0x93, 0xe1, 0xdc, 0xf7, 0x58, 0x76, 0xdc, 0xa6, 0x09, 0xf9, 0xd2, 0x84, + 0x71, 0xf9, 0x97, 0xfa, 0x11, 0xf9, 0x9d, 0x42, 0x3f, 0x9c, 0xf1, 0x73, 0x4b, + 0xe8, 0xa5, 0xff, 0x99, 0x7d, 0x45, 0x1e, 0xb3, 0xcf, 0x4b, 0x3d, 0xfd, 0xd9, + 0xd4, 0x54, 0x5c, 0x35, 0xb2, 0xb5, 0xa7, 0xdc, 0x17, 0xa8, 0x36, 0xb1, 0x2b, + 0x43, 0xbe, 0xfc, 0x0b, 0xe0, 0xa1, 0xbd, 0x36, 0x97, 0x72, 0x33, 0x80, 0x78, + 0xb4, 0xff, 0x7d, 0x8e, 0x2d, 0x97, 0x9a, 0x34, 0x41, 0xe1, 0xc8, 0xf5, 0xaf, + 0xe4, 0x7b, 0x1e, 0x7d, 0xa5, 0x6c, 0xf0, 0x06, 0x02, 0xd0, 0x1b, 0x11, 0x0c, + 0x05, 0xcf, 0x48, 0xfd, 0xa3, 0xe6, 0xcc, 0xe3, 0x2a, 0x04, 0x40, 0x00, 0xf4, + 0x5c, 0x6d, 0x1e, 0x69, 0x6d, 0x24, 0x5c, 0xbd, 0x31, 0x2b, 0xdc, 0x3a, 0x3a, + 0x21, 0xc9, 0x92, 0xd0, 0xeb, 0xc8, 0xcc, 0x8f, 0xa6, 0x30, 0x6d, 0x7e, 0x13, + 0x0a, 0x2b, 0xa4, 0x20, 0x18, 0xfe, 0x59, 0x69, 0x49, 0xfd, 0x82, 0x26, 0x7b, + 0xcc, 0x59, 0xdd, 0x46, 0x26, 0xef, 0xc3, 0xea, 0x74, 0x38, 0xd0, 0x5c, 0x91, + 0xb0, 0xf8, 0xe0, 0x92, 0x55, 0x0d, 0x2d, 0x39, 0xa0, 0x1e, 0xb4, 0x5e, 0xe8, + 0xf7, 0xd0, 0x9b, 0x03, 0x8d, 0x83, 0x83, 0xe1, 0x9b, 0xc3, 0x0e, 0x64, 0x03, + 0x82, 0x8c, 0xdb, 0x65, 0x2a, 0x55, 0x6b, 0x12, 0x04, 0x09, 0x31, 0x40, 0x2a, + 0xa6, 0xac, 0x34, 0xfc, 0x19, 0xfd, 0xc0, 0x6e, 0x2e, 0x77, 0x87, 0xf5, 0xb7, + 0x7b, 0x04, 0x5f, 0xd0, 0x98, 0xc0, 0x31, 0xbd, 0xbd, 0x46, 0x27, 0x76, 0x09, + 0xd8, 0x42, 0xf4, 0x84, 0x24, 0xed, 0xa3, 0x1e, 0x3c, 0xf2, 0xcd, 0xd6, 0x43, + 0x85, 0xba, 0xd3, 0x11, 0x88, 0x58, 0xd1, 0x42, 0xd9, 0x06, 0xea, 0xdb, 0x75, + 0x90, 0xc9, 0x41, 0x36, 0xda, 0x6a, 0x06, 0x35, 0x14, 0xd6, 0xa2, 0x5f, 0x7b, + 0x37, 0xd7, 0x66, 0x4f, 0x9b, 0x97, 0x09, 0x43, 0x3e, 0x6e, 0x70, 0x21, 0x18, + 0xa4, 0xab, 0x9e, 0x7a, 0x7a, 0x3e, 0x62, 0x59, 0x12, 0x99, 0x37, 0xd2, 0x9d, + 0x0d, 0xb2, 0x60, 0x70, 0x52, 0x3e, 0x8b, 0x06, 0x43, 0x13, 0x0a, 0xbe, 0xfe, + 0x94, 0x3b, 0x40, 0x12, 0x98, 0xae, 0x01, 0xa3, 0xab, 0x00, 0xab, 0xbc, 0x60, + 0xd7, 0xdb, 0x93, 0x3c, 0x7f, 0x07, 0xa8, 0xbf, 0x0f, 0x7c, 0xe1, 0x66, 0x0b, + 0xcc, 0xb4, 0x5e, 0x04, 0x2b, 0x45, 0x1b, 0x93, 0x50, 0x02, 0xce, 0xce, 0x27, + 0xf3, 0x6a, 0xba, 0x56, 0x47, 0xac, 0x28, 0xd8, 0x18, 0x6c, 0xdd, 0x1f, 0xb9, + 0x5d, 0xc1, 0x35, 0xd4, 0x89, 0x92, 0xf6, 0x8d, 0xa1, 0x2a, 0xd6, 0x1a, 0xc7, + 0x56, 0x68, 0x0d, 0xd7, 0xf8, 0xd0, 0x77, 0x4a, 0xbd, 0x6c, 0xfd, 0xa2, 0xf0, + 0x32, 0xaf, 0x3b, 0xe1, 0x39, 0xa6, 0x33, 0xd6, 0x73, 0x3c, 0x75, 0xd1, 0xab, + 0xa8, 0x90, 0x18, 0xc8, 0x57, 0x2b, 0x99, 0xcd, 0x30, 0xc5, 0x37, 0x06, 0x79, + 0x41, 0xdf, 0x1c, 0x4b, 0xc1, 0xfd, 0x57, 0x0f, 0x7b, 0x4d, 0xdc, 0x97, 0x51, + 0x86, 0x23, 0xe3, 0xae, 0x4a, 0x87, 0xbd, 0xb9, 0x66, 0xc9, 0x4d, 0x86, 0x1e, + 0x80, 0xde, 0x88, 0xc2, 0x92, 0xae, 0xe9, 0x38, 0x71, 0x94, 0xe2, 0x56, 0xc6, + 0x70, 0x07, 0x52, 0x30, 0x1c, 0x73, 0xfc, 0x95, 0x65, 0xa4, 0x04, 0x80, 0xd8, + 0x12, 0x6e, 0x9d, 0x08, 0x58, 0x79, 0xe2, 0x4b, 0x16, 0xe9, 0xc4, 0x85, 0xd8, + 0xf0, 0xd6, 0x18, 0xca, 0x0d, 0xd1, 0x21, 0xb5, 0x1a, 0x7c, 0xab, 0x23, 0x0c, + 0x5b, 0x45, 0x67, 0x2b, 0xdb, 0x8e, 0xa3, 0xa0, 0x40, 0xf7, 0xaa, 0xa0, 0x98, + 0xba, 0x26, 0x02, 0x5d, 0x2e, 0xab, 0x79, 0x48, 0x69, 0x3d, 0xd5, 0xf6, 0xd3, + 0x09, 0x65, 0x01, 0xe9, 0xe0, 0x71, 0x25, 0xd7, 0xeb, 0x29, 0x3b, 0x3a, 0xba, + 0xd5, 0x7f, 0xd5, 0xf0, 0x11, 0x64, 0x70, 0x2d, 0xae, 0x64, 0xbd, 0xba, 0x8c, + 0x92, 0x4f, 0xb0, 0x79, 0x96, 0x79, 0xd7, 0x7f, 0x98, 0xd3, 0x03, 0x91, 0x9f, + 0xb4, 0xa7, 0xff, 0x26, 0xa9, 0x6f, 0x13, 0x7a, 0x5e, 0x5c, 0xb9, 0x5b, 0xc4, + 0xc6, 0xff, 0x99, 0x93, 0x52, 0x6b, 0xda, 0x15, 0x03, 0x16, 0x8a, 0xb4, 0x8c, + 0xbd, 0x45, 0x15, 0x39, 0x27, 0xd3, 0x04, 0x30, 0x42, 0x3d, 0xbd, 0xf0, 0x66, + 0x05, 0xf5, 0xb5, 0x4b, 0x80, 0x8f, 0xeb, 0x22, 0xb2, 0x08, 0xb0, 0x64, 0x58, + 0x18, 0x47, 0xb2, 0xf6, 0x4c, 0xa6, 0x48, 0x37, 0x00, 0x72, 0x16, 0xde, 0x6e, + 0xca, 0xff, 0xeb, 0x4b, 0x69, 0xe6, 0x33, 0x47, 0xf8, 0x4a, 0xbc, 0xad, 0x8f, + 0x2e, 0x75, 0x7d, 0x58, 0x61, 0xce, 0x77, 0xee, 0x46, 0x51, 0x3d, 0xa7, 0x41, + 0x68, 0x37, 0xdc, 0x77, 0x12, 0x77, 0x06, 0xe4, 0x5e, 0xf2, 0x4c, 0xf3, 0x95, + 0x11, 0x42, 0x89, 0x9e, 0x06, 0x5f, 0x5c, 0x22, 0xad, 0x68, 0x51, 0x99, 0x2c, + 0x98, 0x2e, 0x9a, 0x75, 0xfe, 0x70, 0x77, 0xe9, 0x39, 0xfc, 0xd0, 0x05, 0x57, + 0x62, 0x76, 0x69, 0xf9, 0xda, 0xeb, 0x5e, 0xd2, 0xfa, 0xd2, 0x02, 0x4e, 0x43, + 0x9c, 0x9f, 0x3f, 0x98, 0xa1, 0x18, 0xfe, 0x16, 0x69, 0x8e, 0x9c, 0xef, 0xf5, + 0x58, 0x31, 0x22, 0xe1, 0x97, 0xcd, 0xb4, 0x70, 0xb0, 0x90, 0xdc, 0xde, 0x5a, + 0xa0, 0x73, 0xfd, 0x70, 0xce, 0xa9, 0xb6, 0xac, 0xf7, 0x25, 0xbd, 0x22, 0x6a, + 0x59, 0x46, 0x64, 0x67, 0x7e, 0xf5, 0x9b, 0x24, 0x86, 0xae, 0x4b, 0x40, 0xc7, + 0x90, 0x4e, 0xd9, 0xe4, 0xe8, 0xb1, 0x7f, 0x5d, 0xd0, 0xa6, 0x37, 0xb0, 0x8a, + 0xe6, 0xd4, 0x48, 0xa7, 0xa1, 0x6e, 0x8a, 0xed, 0x26, 0xa2, 0xec, 0xd0, 0xca, + 0x18, 0x6a, 0x5a, 0xa4, 0x3f, 0x89, 0x3e, 0x81, 0x53, 0xc8, 0x1b, 0x44, 0xcb, + 0xf6, 0xef, 0x6b, 0xec, 0x9d, 0x0f, 0xf7, 0x8f, 0x3a, 0x3a, 0xf6, 0xca, 0x37, + 0x97, 0xde, 0x79, 0x83, 0xb5, 0x0b, 0x15, 0x66, 0x5b, 0x48, 0x45, 0xac, 0xd1, + 0xa8, 0xe3, 0x41, 0x01, 0xe6, 0x8b, 0xb6, 0x44, 0xac, 0x03, 0x4d, 0xc6, 0x3e, + 0x6e, 0x34, 0x4c, 0x3d, 0x63, 0x76, 0x2a, 0x7a, 0x5b, 0xf5, 0x9f, 0x13, 0x09, + 0x54, 0x10, 0x98, 0x1d, 0x6b, 0x6b, 0x16, 0xbc, 0xd4, 0xc9, 0xfa, 0x68, 0xaf, + 0x6e, 0x53, 0x65, 0xe9, 0x4e, 0xcb, 0xe7, 0xab, 0x8b, 0x80, 0x43, 0xdf, 0xba, + 0xcb, 0x23, 0xc8, 0x4d, 0x71, 0xa8, 0xfe, 0x5d, 0x9a, 0xc5, 0x50, 0x2c, 0xe9, + 0xf7, 0x3f, 0x40, 0x8e, 0x14, 0x37, 0x6d, 0xb8, 0x6e, 0xf5, 0x7c, 0xc3, 0x7d, + 0x09, 0x89, 0x6f, 0xa9, 0x06, 0x97, 0x2e, 0x55, 0x71, 0x80, 0xa4, 0xab, 0x5a, + 0xd0, 0x9d, 0x88, 0x46, 0xdd, 0x6d, 0xa7, 0x48, 0x76, 0x54, 0x36, 0xe0, 0x16, + 0x02, 0x40, 0xf8, 0xd4, 0x1c, 0x0a, 0xc7, 0x83, 0xf9, 0x39, 0xf2, 0xd0, 0xed, + 0x26, 0x2c, 0xe8, 0x59, 0xc1, 0x31, 0xeb, 0xc9, 0x3f, 0xf2, 0xe6, 0xe4, 0x07, + 0xd4, 0xe2, 0x43, 0xe1, 0xe9, 0x31, 0xd5, 0x3a, 0x45, 0x43, 0xb6, 0xe2, 0x6d, + 0x82, 0x59, 0x6f, 0xc5, 0x3b, 0x52, 0x31, 0x2c, 0x77, 0x6d, 0x12, 0xeb, 0x2b, + 0x65, 0x9b, 0x4f, 0xb0, 0x98, 0xdf, 0x87, 0xd6, 0x83, 0xcf, 0x9e, 0x54, 0x12, + 0xee, 0x56, 0xc3, 0xfe, 0x98, 0x41, 0xd7, 0x3f, 0xd0, 0x70, 0xdf, 0xa5, 0x1f, + 0x5b, 0xaf, 0xed, 0xf2, 0x06, 0xf1, 0x3c, 0x52, 0x4e, 0x5c, 0x50, 0xca, 0xc9, + 0x90, 0x6e, 0xfa, 0x39, 0x32, 0x90, 0x04, 0x2e, 0x3b, 0xc5, 0x9f, 0x96, 0x0b, + 0x7d, 0x24, 0x0a, 0xe4, 0x43, 0xfc, 0x49, 0x26, 0x9c, 0xe0, 0x00, 0x61, 0xe6, + 0x5c, 0x6d, 0x74, 0x81, 0x2a, 0x30, 0xdd, 0x5f, 0x5f, 0xe7, 0x4e, 0xff, 0x61, + 0xe0, 0xcb, 0xab, 0x3c, 0xec, 0x75, 0xd0, 0xae, 0xf9, 0x50, 0x83, 0x18, 0x94, + 0x52, 0xdd, 0x3d, 0x9e, 0xdf, 0x44, 0x87, 0xbc, 0x73, 0x4c, 0x8b, 0x24, 0xf2, + 0x12, 0x96, 0xe4, 0xe9, 0xef, 0x11, 0x7d, 0x7f, 0xb9, 0x77, 0xe3, 0xb0, 0xe6, + 0x40, 0x6e, 0x63, 0x08, 0x59, 0x06, 0x33, 0x1a, 0x93, 0x03, 0x3d, 0x1c, 0xb8, + 0x36, 0x0f, 0xe6, 0xfe, 0xa6, 0x1a, 0x68, 0x26, 0xdf, 0x36, 0x25, 0x57, 0x89, + 0xf9, 0x2e, 0x40, 0xba, 0xfc, 0xb2, 0xeb, 0xcb, 0x9e, 0x55, 0x6f, 0x6c, 0x0c, + 0xca, 0xdc, 0x6a, 0xf0, 0x8e, 0x31, 0xec, 0x4a, 0xd5, 0x28, 0x80, 0x34, 0xe1, + 0x6d, 0x15, 0x5c, 0xfd, 0xca, 0xda, 0x7b, 0xab, 0x59, 0x9c, 0x2f, 0xa4, 0xad, + 0x2e, 0x62, 0x93, 0xf9, 0xfe, 0x09, 0x71, 0x69, 0x14, 0x82, 0x76, 0xb6, 0xa9, + 0xea, 0xa7, 0x2f, 0x14, 0x8b, 0x0c, 0x95, 0x65, 0xc3, 0xc2, 0xdd, 0x63, 0x12, + 0x5e, 0x0f, 0xa5, 0x30, 0x86, 0x1a, 0x71, 0x0d, 0xf8, 0xe4, 0x81, 0xf2, 0x71, + 0x29, 0x20, 0xf8, 0x78, 0x7e, 0x0a, 0xed, 0xfe, 0x61, 0x8a, 0xff, 0x50, 0xa3, + 0xb5, 0x62, 0x13, 0x88, 0x4d, 0x62, 0x62, 0xc1, 0x1d, 0xeb, 0xf2, 0xba, 0x7e, + 0x8a, 0xd6, 0x69, 0x2c, 0xb1, 0x70, 0x78, 0x33, 0x14, 0x18, 0xda, 0x4b, 0xe0, + 0x64, 0xff, 0x52, 0x70, 0x07, 0x39, 0x34, 0xab, 0xcd, 0x2a, 0xb0, 0x46, 0x9e, + 0xca, 0xf7, 0x27, 0x5b, 0x4b, 0xd7, 0x2b, 0xc6, 0xed, 0x34, 0x47, 0x8e, 0xa4, + 0x08, 0x9b, 0x73, 0x6a, 0x16, 0xdd, 0x90, 0x6d, 0x49, 0xf2, 0x5c, 0x33, 0x82, + 0x7c, 0x57, 0x1c, 0xe0, 0xb5, 0xd7, 0x21, 0x77, 0xaa, 0x35, 0x08, 0x80, 0x4b, + 0xc0, 0xf8, 0xfa, 0xa9, 0x47, 0x12, 0x22, 0x31, 0x40, 0x2d, 0x2f, 0x5c, 0xc9, + 0xa0, 0xeb, 0x0e, 0x09, 0xd4, 0x27, 0xb4, 0x27, 0x28, 0x8d, 0x93, 0x7d, 0x9d, + 0x72, 0xb7, 0x74, 0x56, 0xf8, 0x86, 0x59, 0x4c, 0xd8, 0xc6, 0xa4, 0x62, 0xf7, + 0x7f, 0xd8, 0x30, 0x76, 0x46, 0x9c, 0xc0, 0xec, 0xba, 0x3c, 0xc4, 0x0c, 0xad, + 0x69, 0xe5, 0xb5, 0x41, 0x12, 0xea, 0xb3, 0x33, 0x96, 0xae, 0xcf, 0xbc, 0x21, + 0x1f, 0x1f, 0x79, 0xcf, 0x33, 0x10, 0x8e, 0x93, 0xd9, 0x53, 0x78, 0xba, 0xe6, + 0x95, 0x82, 0x74, 0xb3, 0x10, 0x88, 0xfb, 0xd8, 0xb3, 0xa3, 0xa0, 0xd1, 0x54, + 0xa7, 0x89, 0x73, 0x5b, 0x03, 0x49, 0xc4, 0xd5, 0x1c, 0x88, 0x9d, 0x08, 0x95, + 0x2d, 0xdd, 0x54, 0x88, 0xbe, 0x95, 0x56, 0x05, 0x94, 0xe6, 0x73, 0xfa, 0x05, + 0x1b, 0xf9, 0xb6, 0x14, 0xa1, 0x5e, 0x10, 0x0b, 0x60, 0xa0, 0xfe, 0x9a, 0x7e, + 0x12, 0xa9, 0xb2, 0x56, 0xdf, 0x58, 0x9b, 0x3e, 0x48, 0xe5, 0xb8, 0x0f, 0xb8, + 0xcf, 0xf0, 0x3e, 0x86, 0xf6, 0x0c, 0xc0, 0x70, 0xfb, 0x23, 0xc9, 0x7d, 0x4c, + 0x14, 0xfa, 0x3a, 0x73, 0x46, 0xff, 0x55, 0x6b, 0xc6, 0x85, 0x5a, 0x5f, 0x83, + 0xe3, 0xdc, 0xd9, 0xf6, 0xea, 0xb3, 0xda, 0xbc, 0xd4, 0x77, 0x50, 0xe3, 0x4e, + 0x7c, 0x09, 0x38, 0xf6, 0x03, 0xb4, 0x0f, 0x28, 0xa0, 0x29, 0x5e, 0x04, 0x00, + 0x15, 0xb0, 0xfe, 0xd2, 0x08, 0x6b, 0x6f, 0x54, 0x86, 0xa8, 0x64, 0x44, 0x7f, + 0x64, 0x79, 0xd0, 0x80, 0x0a, 0x91, 0xac, 0xef, 0x1e, 0x03, 0x8b, 0x81, 0xd7, + 0x36, 0xd9, 0x8e, 0xad, 0xa9, 0x0d, 0x9e, 0x0c, 0x2b, 0xe2, 0x7a, 0xb8, 0x50, + 0x32, 0x06, 0x60, 0x91, 0x22, 0x4e, 0xdf, 0x87, 0x2f, 0x79, 0x63, 0x7d, 0xda, + 0x39, 0x16, 0x79, 0x6a, 0x5c, 0x62, 0xf5, 0x7f, 0x1d, 0xe3, 0x76, 0x78, 0xb6, + 0xde, 0xa0, 0x08, 0x69, 0x93, 0x36, 0x74, 0xf8, 0x8e, 0x41, 0xa9, 0x18, 0x08, + 0x07, 0x3b, 0x0f, 0x43, 0x6e, 0xbe, 0x25, 0xa5, 0xf4, 0x4a, 0x60, 0x10, 0x33, + 0xe2, 0x18, 0x4b, 0x88, 0xdb, 0x79, 0xe9, 0x68, 0xca, 0x6d, 0x89, 0xb7, 0x49, + 0x01, 0xbe, 0x6c, 0x6d, 0xb3, 0x63, 0x65, 0x80, 0x18, 0x2e, 0x65, 0x8d, 0xfc, + 0x68, 0x67, 0x67, 0xd6, 0xd8, 0x19, 0xfa, 0x92, 0x3e, 0x0c, 0xdf, 0x3e, 0xa3, + 0x65, 0x76, 0xf8, 0x52, 0xbc, 0xd4, 0xe1, 0x96, 0xa7, 0x1a, 0x13, 0x29, 0xf6, + 0xc3, 0xff, 0x8e, 0x42, 0xe3, 0x09, 0x5a, 0xbd, 0x8e, 0xc1, 0x97, 0x99, 0x07, + 0x13, 0xee, 0x89, 0x39, 0x4c, 0x57, 0x19, 0xb2, 0x76, 0xde, 0x8f, 0x81, 0x8a, + 0x34, 0xa7, 0xbe, 0xc1, 0xf2, 0x68, 0x68, 0x2e, 0x91, 0x42, 0xc7, 0xd3, 0x87, + 0x89, 0xf6, 0x76, 0xcc, 0x12, 0xb7, 0x1a, 0xb6, 0x66, 0x40, 0x52, 0xcc, 0xb9, + 0x1c, 0x58, 0x9d, 0x6e, 0x29, 0x5a, 0xbb, 0xfc, 0x28, 0x2a, 0xf4, 0x45, 0x3b, + 0xd6, 0x3a, 0x4a, 0x82, 0x69, 0x5d, 0x27, 0x74, 0x11, 0x67, 0x3b, 0x31, 0x97, + 0xbe, 0x22, 0x7d, 0x6b, 0x54, 0xfe, 0xc8, 0xb8, 0x84, 0x02, 0xf0, 0x47, 0x52, + 0x45, 0xe1, 0x74, 0xa7, 0x45, 0xb8, 0x31, 0xf8, 0xfe, 0x03, 0xa7, 0x6f, 0xb9, + 0xce, 0xca, 0x4d, 0x22, 0xb7, 0x83, 0xc3, 0x28, 0x88, 0xe1, 0x7f, 0x3c, 0x77, + 0x55, 0xac, 0x44, 0x35, 0x92, 0xc9, 0x30, 0x17, 0x6c, 0xcb, 0x8c, 0x98, 0x3a, + 0x19, 0x85, 0x57, 0xd2, 0x7d, 0x8f, 0x53, 0xb2, 0x3c, 0xc4, 0x37, 0x19, 0xab, + 0x88, 0xee, 0x50, 0x93, 0x94, 0x81, 0x70, 0x8e, 0xa7, 0x08, 0xeb, 0x9f, 0x66, + 0x43, 0x88, 0xb9, 0xc6, 0x4d, 0x6a, 0xf0, 0xf9, 0x66, 0x90, 0x34, 0x24, 0x00, + 0x34, 0x8e, 0x92, 0x9e, 0x07, 0x46, 0x02, 0xf1, 0x6e, 0x1e, 0x3e, 0xd8, 0x62, + 0x88, 0x0b, 0x60, 0x38, 0x6e, 0xb8, 0x92, 0xb2, 0xb1, 0x4e, 0x56, 0xfd, 0xfd, + 0x16, 0x7c, 0xed, 0xcb, 0x1c, 0x96, 0xd1, 0x8b, 0xb1, 0x00, 0x4d, 0xbe, 0x93, + 0x7e, 0xbd, 0xc5, 0x5e, 0x37, 0xc6, 0x73, 0x94, 0xcb, 0xef, 0x66, 0x3b, 0x43, + 0xeb, 0x44, 0x5a, 0x1a, 0x96, 0x4c, 0x73, 0x7d, 0x3c, 0x15, 0x5a, 0xfb, 0x30, + 0x7b, 0x74, 0x8e, 0x41, 0x12, 0x34, 0xa2, 0x3b, 0xa4, 0xe5, 0xec, 0xc5, 0x4b, + 0x59, 0x65, 0xaf, 0x3b, 0xd0, 0x83, 0xea, 0x89, 0x2a, 0xe2, 0x14, 0x8b, 0xb6, + 0xff, 0xa1, 0x7d, 0x9e, 0xd2, 0xcb, 0x93, 0x42, 0x62, 0x71, 0x0f, 0x0b, 0x52, + 0x88, 0x7f, 0xb5, 0xd8, 0x78, 0xa0, 0x20, 0xe4, 0xb9, 0x5d, 0x77, 0x63, 0xac, + 0xad, 0x22, 0x87, 0xf8, 0x5e, 0x19, 0x9c, 0x1d, 0xf4, 0xa0, 0xfc, 0xa4, 0xd4, + 0x4b, 0xaa, 0x62, 0xda, 0x3a, ], txid: [ - 0x3f, 0x1b, 0x9f, 0xaa, 0x40, 0x5d, 0x82, 0x70, 0xe2, 0xd9, 0x53, 0x8e, 0x33, - 0x9f, 0x91, 0x97, 0x93, 0x84, 0x16, 0x91, 0xab, 0x03, 0x3d, 0x18, 0x30, 0xa8, - 0xdc, 0xbe, 0xed, 0x4a, 0xfc, 0x4d, + 0x29, 0x26, 0x55, 0x61, 0x0e, 0x3f, 0x90, 0x98, 0xf1, 0xa2, 0xd8, 0xec, 0x38, + 0x27, 0xb3, 0x15, 0x64, 0x74, 0x4a, 0x1d, 0x7d, 0xc7, 0x46, 0xf7, 0x55, 0xef, + 0x61, 0x50, 0xf5, 0x46, 0xe3, 0x93, ], auth_digest: [ - 0xc9, 0x0c, 0x05, 0x9f, 0xeb, 0x7c, 0x80, 0x7a, 0x6b, 0x34, 0x77, 0x7c, 0x14, - 0xa6, 0xc0, 0x28, 0xb0, 0x92, 0xd8, 0x2c, 0xd5, 0x85, 0x5e, 0xd5, 0xfe, 0x8d, - 0xef, 0xae, 0x87, 0xd2, 0x89, 0xf7, + 0x98, 0xa5, 0x1d, 0x9e, 0x69, 0xa7, 0x53, 0x24, 0x19, 0x22, 0xec, 0x5f, 0x1c, + 0x44, 0x37, 0xf1, 0xfa, 0xd0, 0xcc, 0x74, 0x48, 0x63, 0x39, 0xec, 0x04, 0xd1, + 0x7d, 0x00, 0xba, 0x2d, 0x63, 0x7d, ], amounts: vec![], script_pubkeys: vec![], transparent_input: None, sighash_shielded: [ - 0x3f, 0x1b, 0x9f, 0xaa, 0x40, 0x5d, 0x82, 0x70, 0xe2, 0xd9, 0x53, 0x8e, 0x33, - 0x9f, 0x91, 0x97, 0x93, 0x84, 0x16, 0x91, 0xab, 0x03, 0x3d, 0x18, 0x30, 0xa8, - 0xdc, 0xbe, 0xed, 0x4a, 0xfc, 0x4d, + 0x29, 0x26, 0x55, 0x61, 0x0e, 0x3f, 0x90, 0x98, 0xf1, 0xa2, 0xd8, 0xec, 0x38, + 0x27, 0xb3, 0x15, 0x64, 0x74, 0x4a, 0x1d, 0x7d, 0xc7, 0x46, 0xf7, 0x55, 0xef, + 0x61, 0x50, 0xf5, 0x46, 0xe3, 0x93, ], sighash_all: None, sighash_none: None, @@ -6736,159 +7666,1172 @@ pub mod zip_0244 { sighash_none_anyone: None, sighash_single_anyone: None, }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x1b, - 0xfe, 0xb9, 0x1b, 0x0b, 0x31, 0x69, 0x1c, 0x03, 0xc2, 0xe8, 0x25, 0xa5, 0x97, - 0xb8, 0xfb, 0x75, 0xbc, 0x56, 0x2d, 0x65, 0x4d, 0x62, 0x10, 0x46, 0x40, 0xdd, - 0x74, 0xe5, 0x6c, 0xd1, 0x4b, 0xaa, 0xba, 0x56, 0x5b, 0x84, 0xb8, 0x45, 0xe1, - 0x63, 0xd1, 0xca, 0xef, 0x25, 0x01, 0x53, 0x98, 0x16, 0x37, 0x20, 0x4f, 0x96, - 0xa5, 0x9c, 0x8e, 0x80, 0x24, 0xd9, 0x04, 0x1b, 0x20, 0x29, 0xe9, 0x4c, 0x15, - 0x24, 0x5f, 0x1a, 0x95, 0x88, 0x40, 0xba, 0x3f, 0x38, 0x0a, 0x4d, 0x20, 0xf1, - 0x18, 0x4e, 0x77, 0x82, 0x7d, 0xe3, 0xff, 0x8f, 0x01, 0x53, 0x45, 0x9a, 0xfe, - 0x24, 0x1f, 0x72, 0x3c, 0x08, 0x48, 0x23, 0x23, 0x0e, 0x00, 0x3d, 0x3d, 0x21, - 0xe5, 0x35, 0x01, 0xec, 0x04, 0x99, 0xb0, 0x83, 0xa7, 0xda, 0xd6, 0x85, 0xc5, - 0x71, 0x27, 0xf4, 0xde, 0x64, 0x73, 0x3a, 0x88, 0x0c, 0x2d, 0xb2, 0x07, 0x52, - 0x53, 0x51, 0x63, 0x52, 0x52, 0x63, 0xf6, 0x64, 0xa3, 0x51, 0x00, 0x00, 0x00, - 0x03, 0xf9, 0x27, 0xb9, 0x46, 0x9e, 0x18, 0x22, 0x9d, 0x02, 0xc3, 0x3d, 0xec, - 0x3f, 0x11, 0x7c, 0x5d, 0x2a, 0x8a, 0x85, 0xdb, 0x9b, 0x57, 0x56, 0xdd, 0x52, - 0xb8, 0x19, 0x0d, 0xb2, 0x59, 0x62, 0x80, 0xfa, 0x21, 0x39, 0x43, 0x77, 0xa4, - 0x55, 0x1c, 0x76, 0xd1, 0xf7, 0x5a, 0xc0, 0x3c, 0x26, 0x20, 0x54, 0xdf, 0xfd, - 0x79, 0xa9, 0xde, 0xd0, 0x5e, 0x88, 0x89, 0x58, 0x19, 0x9e, 0xea, 0x45, 0x01, - 0xcc, 0xfa, 0x41, 0x52, 0xd4, 0x45, 0xa6, 0xb3, 0x08, 0x54, 0x9e, 0xfc, 0x1d, - 0x9b, 0x2b, 0x97, 0xd3, 0x9d, 0xa9, 0x0c, 0x63, 0x88, 0xbe, 0x80, 0x52, 0x45, - 0x83, 0x25, 0xbf, 0xd2, 0xf5, 0xbf, 0x73, 0x74, 0x1d, 0x57, 0x85, 0x83, 0x7a, - 0x6b, 0x84, 0x4b, 0x47, 0x47, 0x75, 0x71, 0x8c, 0x29, 0xdd, 0x99, 0x08, 0x4e, - 0x9f, 0x88, 0xef, 0x15, 0x3a, 0x83, 0x29, 0xf5, 0x32, 0xa6, 0x90, 0x17, 0x1c, - 0x2d, 0x1e, 0x30, 0x74, 0xdf, 0xae, 0x3e, 0x23, 0xdb, 0x39, 0x48, 0xa4, 0x53, - 0xc3, 0x94, 0x81, 0xa9, 0x91, 0x4d, 0xd0, 0xac, 0x79, 0xe9, 0x27, 0x36, 0x01, - 0x29, 0xbe, 0x3a, 0x7f, 0x11, 0x95, 0x44, 0x12, 0x20, 0x00, 0x61, 0x0b, 0xd2, - 0xaa, 0xcb, 0xd8, 0x23, 0x25, 0xa5, 0x9b, 0x95, 0x15, 0x4e, 0xcd, 0x82, 0xc8, - 0x8d, 0x23, 0xab, 0xd1, 0xe2, 0x07, 0x70, 0xff, 0xb8, 0xaa, 0xbf, 0x83, 0xfc, - 0x07, 0x34, 0x96, 0x4c, 0xcd, 0x41, 0x1d, 0x1c, 0x93, 0x57, 0x14, 0xe2, 0x4a, - 0xab, 0x56, 0x6f, 0x4f, 0x08, 0x42, 0x40, 0x14, 0xc4, 0xec, 0xa9, 0x1b, 0x59, - 0x0f, 0x08, 0x2b, 0x47, 0x3f, 0x36, 0x1c, 0x87, 0x41, 0x5d, 0x37, 0xbd, 0x20, - 0xd7, 0x0f, 0xd0, 0xb5, 0x2b, 0x6d, 0xdf, 0x18, 0x65, 0xf7, 0x66, 0x70, 0x2e, - 0x32, 0xb0, 0x5b, 0x3c, 0xf1, 0x63, 0x0e, 0xe8, 0x59, 0x7a, 0xae, 0x19, 0x63, - 0x3f, 0x35, 0x16, 0xa8, 0x55, 0x5a, 0xc5, 0xbe, 0x32, 0xc6, 0x75, 0xbe, 0x18, - 0x17, 0xef, 0xbf, 0xfd, 0x93, 0x69, 0x04, 0x1a, 0x08, 0x9c, 0x28, 0x3f, 0x19, - 0x64, 0x99, 0x68, 0xc2, 0x49, 0x8c, 0xde, 0x56, 0xf5, 0x00, 0x43, 0x4f, 0x28, - 0x0d, 0x77, 0xa9, 0xc6, 0x2e, 0x43, 0xcb, 0xd3, 0xf1, 0x36, 0xa4, 0xc6, 0xa0, - 0x0a, 0x43, 0xe6, 0xed, 0x53, 0x0c, 0xb2, 0xe8, 0xae, 0x83, 0x88, 0x60, 0xad, - 0xc8, 0x8a, 0xac, 0xc7, 0xbd, 0x6a, 0x00, 0xae, 0x0c, 0x19, 0xff, 0x45, 0x33, - 0xa4, 0x85, 0xef, 0xde, 0x08, 0x2b, 0x5f, 0x4d, 0x1f, 0x7a, 0x8e, 0xbe, 0x7e, - 0xd8, 0x2b, 0x7b, 0x05, 0xa8, 0xcf, 0xe1, 0xe3, 0x73, 0x45, 0x9f, 0x1b, 0xdc, - 0xbf, 0x95, 0x25, 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, 0x79, - 0x87, 0x40, 0xe0, 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, 0xa0, - 0xae, 0x0f, 0x07, 0x6c, 0x58, 0x2c, 0x0f, 0x5b, 0xa8, 0x78, 0xb9, 0x9b, 0x82, - 0x49, 0xdb, 0x1d, 0x7e, 0x95, 0x05, 0x6c, 0x98, 0xaf, 0x08, 0x3d, 0x98, 0xcb, - 0x0e, 0xd9, 0xe3, 0xf7, 0x43, 0x6e, 0x1c, 0x76, 0x43, 0x76, 0x6f, 0x96, 0x6b, - 0x83, 0xe9, 0x99, 0x20, 0x6e, 0xbd, 0x13, 0x93, 0xb9, 0xb2, 0xa7, 0xf4, 0x14, - 0x48, 0x0f, 0xa0, 0x17, 0x48, 0x00, 0x69, 0xf8, 0x5c, 0x77, 0x49, 0xc4, 0x35, - 0xae, 0x2f, 0xba, 0x2d, 0xdc, 0x10, 0x38, 0xd5, 0x47, 0xd8, 0x48, 0x54, 0x81, - 0x7e, 0xf3, 0x96, 0x35, 0xc2, 0x98, 0x27, 0xaa, 0xd8, 0x67, 0x26, 0xc9, 0xad, - 0xe3, 0xb2, 0x65, 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, 0x56, 0xfe, 0x4b, - 0xd8, 0xb4, 0xd6, 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, 0xda, 0xc4, - 0x64, 0x15, 0x6d, 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0x1d, 0x83, 0xb8, 0x6f, 0x65, - 0x96, 0x37, 0xe3, 0xb1, 0x42, 0xc1, 0x64, 0x96, 0x3b, 0x8c, 0xdc, 0xf4, 0xba, - 0x4f, 0x40, 0x35, 0xdf, 0xfc, 0x5a, 0x78, 0x94, 0x58, 0x84, 0x77, 0x81, 0x91, - 0x8a, 0xc7, 0x2f, 0xc1, 0x8b, 0xbb, 0xf5, 0x11, 0x00, 0x32, 0xe6, 0x6d, 0x75, - 0xb3, 0x17, 0x1e, 0xf4, 0xb5, 0x13, 0x29, 0x01, 0x64, 0xa7, 0x7b, 0x42, 0xb0, - 0xa4, 0xcf, 0xb8, 0x96, 0x39, 0xab, 0x23, 0x84, 0x5e, 0x1a, 0xa2, 0xa4, 0x52, - 0xf3, 0x73, 0x1c, 0x8c, 0xb6, 0x50, 0x82, 0xa6, 0x22, 0xa7, 0xc2, 0xe0, 0x01, - 0x3e, 0xa4, 0x7d, 0x0b, 0xdd, 0x42, 0xd6, 0x99, 0x04, 0x66, 0x64, 0x9a, 0x90, - 0x5c, 0x68, 0x4c, 0x32, 0x51, 0x71, 0x6d, 0x61, 0xf7, 0x60, 0xd5, 0x3d, 0xe6, - 0xe3, 0xf7, 0x90, 0xfb, 0xa7, 0xf5, 0xf1, 0xf4, 0xde, 0x26, 0x71, 0x13, 0xbd, - 0xfc, 0xd7, 0x42, 0x28, 0x22, 0x33, 0x0b, 0x32, 0xd5, 0x8e, 0x67, 0x77, 0x76, - 0x5f, 0x22, 0xa4, 0x11, 0x63, 0x44, 0xee, 0xb6, 0x5b, 0x2e, 0xc5, 0x16, 0x39, - 0x3a, 0xb3, 0x75, 0x1b, 0x53, 0x56, 0xd2, 0xb0, 0xc9, 0x50, 0x0c, 0x0f, 0x3e, - 0x46, 0x91, 0x81, 0x03, 0x5b, 0xc3, 0x66, 0x0f, 0x0b, 0x8f, 0x9f, 0xbe, 0x6e, - 0x40, 0xb5, 0xe8, 0x9c, 0xb7, 0x9b, 0x06, 0x37, 0x14, 0xca, 0x75, 0xe7, 0x2e, - 0x2e, 0x10, 0x0a, 0x10, 0xd6, 0x3b, 0xf7, 0x84, 0xdf, 0x08, 0x20, 0xef, 0x25, - 0xf8, 0xef, 0x40, 0xfe, 0x5f, 0x05, 0xfb, 0x95, 0x68, 0x3f, 0x91, 0x05, 0xff, - 0x3c, 0xb2, 0xd2, 0x19, 0xab, 0x76, 0x60, 0x5a, 0x06, 0x4f, 0x69, 0x21, 0x9f, - 0x1d, 0xc0, 0xd0, 0x0b, 0x3b, 0x48, 0x64, 0x2f, 0x97, 0x0d, 0xc0, 0x0c, 0xca, - 0x4b, 0x8b, 0x43, 0x30, 0x8b, 0xe1, 0x82, 0x86, 0xec, 0x5a, 0x42, 0x88, 0xd6, - 0x00, 0xa3, 0x78, 0x5c, 0xb6, 0x22, 0xd4, 0x68, 0xa4, 0xc6, 0x96, 0x9b, 0x37, - 0x92, 0xf2, 0x48, 0x50, 0x27, 0xd0, 0xad, 0x9a, 0xa4, 0xa9, 0xc2, 0xcc, 0x97, - 0x2f, 0x9e, 0xe5, 0x19, 0x0a, 0x95, 0xb1, 0xeb, 0x05, 0x8d, 0xdd, 0xd8, 0xc0, - 0x8e, 0x7d, 0x75, 0x3f, 0x5e, 0x01, 0x1b, 0x2b, 0xcf, 0xee, 0x1d, 0x52, 0xc1, - 0xc4, 0xf2, 0x0a, 0xa3, 0xf7, 0x12, 0x74, 0x1f, 0xc0, 0x93, 0xa1, 0xb3, 0x6a, - 0xf5, 0x55, 0xf7, 0x4e, 0x30, 0xf8, 0x5d, 0x5c, 0xc9, 0x59, 0x30, 0x7f, 0x74, - 0x35, 0xf7, 0xef, 0x04, 0xca, 0x2c, 0x31, 0x25, 0xbc, 0xef, 0x2a, 0x99, 0x01, - 0x76, 0xae, 0x33, 0x93, 0x25, 0xd5, 0xa5, 0x88, 0xda, 0x57, 0x96, 0xfa, 0xae, - 0x5b, 0xab, 0x7c, 0x82, 0x97, 0x7c, 0x0f, 0xf7, 0x97, 0x09, 0x3e, 0x2c, 0x1f, - 0x3a, 0x77, 0x82, 0xa6, 0xd3, 0x9a, 0x61, 0xee, 0x55, 0x28, 0x99, 0x0d, 0x8d, - 0x36, 0x9e, 0x8e, 0xdc, 0xfe, 0x38, 0xbb, 0x70, 0x2d, 0xff, 0x02, 0xda, 0x34, - 0x28, 0x54, 0x5d, 0x9d, 0x61, 0x57, 0xa5, 0x1e, 0x55, 0xeb, 0xca, 0x6a, 0x85, - 0x06, 0xe3, 0x69, 0x9a, 0x3d, 0x70, 0x85, 0xa4, 0xd9, 0xfe, 0xd5, 0x09, 0x4c, - 0x68, 0xb3, 0x75, 0xe9, 0x84, 0xf6, 0x83, 0x93, 0x30, 0x08, 0x71, 0xe3, 0x08, - 0xfc, 0xf7, 0x4e, 0x27, 0x6b, 0x62, 0x26, 0x6a, 0x8f, 0x4e, 0xe3, 0x94, 0x5f, - 0x09, 0x4d, 0x17, 0xa7, 0xc0, 0x7c, 0xfe, 0x0b, 0xfd, 0x48, 0x95, 0xa1, 0x4f, - 0xac, 0x97, 0x1c, 0x92, 0xa1, 0x95, 0xb4, 0x42, 0x68, 0x3c, 0x49, 0x56, 0xbb, - 0xb1, 0x95, 0xa4, 0xfa, 0x66, 0xdc, 0x9c, 0xd5, 0x42, 0xc7, 0x6b, 0x91, 0x50, - 0xc8, 0x4b, 0xf8, 0x90, 0x78, 0x99, 0x42, 0xf5, 0x5c, 0x20, 0x0b, 0x77, 0x3e, - 0xcd, 0xd7, 0x99, 0x2c, 0xff, 0x3e, 0xca, 0x24, 0xde, 0x3e, 0x09, 0x84, 0xe1, - 0x0e, 0x68, 0xae, 0x38, 0x75, 0x34, 0xb9, 0x6c, 0xde, 0x37, 0x92, 0xf1, 0x35, - 0xbf, 0x5f, 0x68, 0x78, 0x7d, 0x37, 0x0c, 0xa8, 0xc4, 0xc4, 0x07, 0x4d, 0xc5, - 0xd6, 0x01, 0xae, 0x90, 0x49, 0x54, 0x37, 0xc3, 0xc2, 0xd4, 0x8a, 0x3d, 0x96, - 0x66, 0x83, 0xac, 0x05, 0x16, 0x0b, 0x7a, 0x84, 0xea, 0xa7, 0xaa, 0xb7, 0x40, - 0x09, 0xe5, 0x7a, 0x85, 0xf7, 0xbf, 0x68, 0xa2, 0xe4, 0x82, 0x00, 0x0f, 0x82, - 0x9c, 0x54, 0x50, 0x73, 0xa1, 0x5d, 0x5c, 0xd0, 0xfc, 0xc5, 0x74, 0x39, 0xa4, - 0x35, 0x0e, 0xaf, 0x09, 0x8d, 0xfb, 0x82, 0xa0, 0x85, 0xea, 0x8a, 0x4a, 0xf6, - 0xfa, 0x83, 0x81, 0xf0, 0x65, 0x88, 0x19, 0xea, 0xb4, 0x83, 0xf6, 0x5b, 0x32, - 0x5d, 0x5a, 0xed, 0xa1, 0x52, 0x32, 0xcf, 0xad, 0xec, 0x75, 0xab, 0x18, 0x66, - 0xe4, 0xc0, 0x15, 0x5a, 0x9c, 0x74, 0xa7, 0xa5, 0x7c, 0xcf, 0x34, 0xc4, 0x83, - 0xac, 0x7d, 0xa1, 0x58, 0x8a, 0x1b, 0x6b, 0x99, 0x41, 0xf1, 0x10, 0x40, 0xf9, - 0x4c, 0xf7, 0x8f, 0xad, 0x89, 0xbf, 0x11, 0xfe, 0xd6, 0x9a, 0xa0, 0xd8, 0x31, - 0x05, 0xad, 0xac, 0xdd, 0x4e, 0x5f, 0x04, 0xa6, 0x24, 0x24, 0x02, 0x3c, 0x9b, - 0x9e, 0x33, 0xc4, 0xfb, 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, 0xf2, 0x65, 0xc5, - 0x37, 0xd5, 0x1c, 0x65, 0x51, 0xf4, 0x61, 0x7b, 0x91, 0x5d, 0x21, 0x99, 0x18, - 0x39, 0xc3, 0xd0, 0xd3, 0x63, 0x93, 0xd6, 0x46, 0xe0, 0xa8, 0xa4, 0x15, 0x09, - 0x21, 0x7d, 0x0e, 0x7d, 0x2c, 0xa1, 0xa0, 0xa0, 0xd6, 0x77, 0xa3, 0xea, 0xca, - 0x23, 0xed, 0xeb, 0x07, 0xb7, 0x4e, 0x65, 0x2a, 0x0b, 0xc5, 0x0c, 0x6c, 0x08, - 0x3a, 0x55, 0xd6, 0xc7, 0x30, 0x6e, 0x74, 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, - 0xa2, 0x48, 0x73, 0x68, 0x18, 0x67, 0xa7, 0x89, 0x3d, 0x77, 0xcb, 0x7f, 0x29, - 0xb8, 0xc8, 0x47, 0xc5, 0x83, 0xf2, 0xd0, 0x71, 0xa6, 0x86, 0x61, 0x6e, 0x20, - 0x67, 0x19, 0xf7, 0x61, 0xae, 0x39, 0xc1, 0x10, 0x44, 0x2e, 0x06, 0x16, 0x3d, - 0x2b, 0x84, 0x59, 0x03, 0x60, 0x69, 0x5d, 0x4e, 0x19, 0x84, 0x9e, 0x63, 0x4f, - 0x24, 0xd9, 0xad, 0x39, 0x6c, 0x19, 0xff, 0x83, 0xce, 0x74, 0xf4, 0x6e, 0x64, - 0x5f, 0x93, 0x2e, 0x14, 0x1a, 0x41, 0x19, 0x59, 0x36, 0xc8, 0x5d, 0x51, 0x44, - 0x14, 0xf1, 0x12, 0xe6, 0x0b, 0x1a, 0x25, 0x37, 0xc3, 0x8d, 0x6d, 0xc6, 0xc4, - 0x63, 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, 0x63, 0x12, 0x3e, - 0x3e, 0x6d, 0xd3, 0x6e, 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, 0xee, 0xca, 0x2a, - 0xa0, 0x9a, 0x32, 0x98, 0xa3, 0x9d, 0x83, 0x85, 0x9e, 0xfc, 0x9b, 0x2b, 0x69, - 0xcf, 0x9a, 0x7d, 0xee, 0x08, 0xa9, 0x8e, 0x4b, 0xe5, 0x58, 0xac, 0x79, 0x12, - 0xfd, 0xcb, 0x42, 0x20, 0x90, 0x75, 0x42, 0x02, 0x60, 0xf7, 0xca, 0xd0, 0xf2, - 0xc0, 0x1f, 0x2a, 0xfe, 0x33, 0x07, 0x3f, 0x26, 0x24, 0x9d, 0x94, 0x4f, 0x7a, - 0x50, 0xdd, 0x84, 0x83, 0x9b, 0xc3, 0xea, 0x7f, 0xde, 0xe4, 0xed, 0x71, 0x44, - 0x9c, 0xf0, 0x75, 0x33, 0xd2, 0x6e, 0x1e, 0x27, 0xa3, 0xef, 0xb0, 0x32, 0xc3, - 0xa3, 0xb3, 0x4b, 0xd3, 0x09, 0x26, 0x22, 0xd2, 0x06, 0x2a, 0xe5, 0x36, 0xef, - 0x51, 0x49, 0xc4, 0x9b, 0x5b, 0xc9, 0x47, 0x5e, 0xaf, 0xab, 0x6e, 0x67, 0x57, - 0x61, 0x00, 0x8b, 0x0d, 0xad, 0xde, 0xec, 0xaa, 0x60, 0x44, 0x70, 0xbb, 0xe0, - 0xfa, 0xda, 0x25, 0x5d, 0x29, 0x0e, 0x92, 0xb1, 0x90, 0xc2, 0xc2, 0xd8, 0xc2, - 0xde, 0xe5, 0x45, 0x5d, 0x1f, 0xa9, 0xa9, 0xf3, 0xdb, 0x77, 0x79, 0xb5, 0x84, - 0x64, 0x34, 0x64, 0xaa, 0x80, 0x14, 0xba, 0x66, 0x99, 0x4d, 0xe2, 0x55, 0x17, - 0xf8, 0x39, 0x80, 0xe6, 0x6e, 0xe4, 0xf6, 0x23, 0x14, 0xae, 0x6d, 0xbe, 0xf4, - 0x52, 0xd5, 0xd3, 0x8b, 0x0a, 0x16, 0xf3, 0x99, 0x1f, 0x36, 0xd8, 0xa8, 0xb3, - 0x9d, 0xdc, 0x0d, 0x55, 0x95, 0xee, 0xd9, 0x87, 0x62, 0x87, 0x8c, 0xdf, 0x3f, - 0x4a, 0x2e, 0xdc, 0x5c, 0xda, 0x77, 0xd5, 0xfe, 0x4f, 0xaf, 0x63, 0xa1, 0x5f, - 0x56, 0x8a, 0x54, 0x0d, 0xa5, 0x7d, 0xd9, 0xbe, 0xb6, 0xfb, 0x1a, 0x97, 0x7c, - 0xcb, 0x91, 0xb4, 0xd7, 0x9c, 0xb3, 0x9b, 0x28, 0x91, 0x1a, 0x29, 0xe7, 0xbf, - 0x02, 0x8a, 0xc6, 0x10, 0x37, 0x96, 0xdf, 0xb6, 0xb2, 0x09, 0x67, 0x23, 0x9a, - 0xd3, 0x73, 0xc3, 0xc5, 0x1d, 0x39, 0x27, 0xf2, 0x38, 0x00, 0x19, 0xfb, 0xdb, - 0xdd, 0xe5, 0x96, 0x97, 0x32, 0x26, 0x36, 0xa0, 0xae, 0xa1, 0xfd, 0x22, 0xc5, - 0x88, 0x57, 0x5c, 0x0f, 0x89, 0x64, 0x9e, 0x9f, 0x3e, 0xd3, 0x93, 0xcc, 0xca, - 0xbb, 0xa2, 0xe7, 0x94, 0xb7, 0xc4, 0xb2, 0xda, 0xf8, 0xdd, 0xeb, 0x7f, 0x45, + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x7a, + 0x8f, 0x73, 0x9a, 0x2d, 0x6f, 0x2c, 0x02, 0x01, 0xe1, 0x52, 0xa8, 0x04, 0x9e, + 0x29, 0x4c, 0x4d, 0x6e, 0x66, 0xb1, 0x64, 0x93, 0x9d, 0xaf, 0xfa, 0x2e, 0xf6, + 0xee, 0x69, 0x21, 0x48, 0x1c, 0xdd, 0x86, 0xb3, 0xcc, 0x43, 0x18, 0xd9, 0x61, + 0x4f, 0xc8, 0x20, 0x90, 0x5d, 0x04, 0x53, 0x51, 0x6a, 0xac, 0xa3, 0xf2, 0x49, + 0x88, 0x00, 0x01, 0x9f, 0x33, 0xbf, 0x3a, 0x10, 0x9b, 0xdd, 0x1b, 0x23, 0x2b, + 0x47, 0xb1, 0x64, 0x6d, 0x91, 0xe1, 0x29, 0x66, 0x34, 0xeb, 0xde, 0x5c, 0xca, + 0xd5, 0x72, 0x88, 0xb5, 0xb2, 0x22, 0x81, 0x86, 0xe5, 0x4b, 0x69, 0x68, 0x91, + 0x2a, 0x63, 0x81, 0xce, 0x3d, 0xc1, 0x66, 0xd5, 0x6a, 0x1d, 0x62, 0xf5, 0xa8, + 0xd7, 0x55, 0x1d, 0xb5, 0xfd, 0x93, 0x13, 0xe8, 0xc7, 0x20, 0x3d, 0x99, 0x6a, + 0xf7, 0xd4, 0x1a, 0x38, 0xe0, 0x1d, 0x94, 0x90, 0x3d, 0x3c, 0x3e, 0x0a, 0xd3, + 0x36, 0x0c, 0x1d, 0x37, 0x10, 0xac, 0xd2, 0x0b, 0x18, 0x3e, 0x31, 0xd4, 0x9f, + 0x25, 0xc9, 0xa1, 0x38, 0xf4, 0x9b, 0x1a, 0x53, 0x01, 0x46, 0x6b, 0x3d, 0xa6, + 0x12, 0x14, 0x9d, 0xf5, 0xed, 0xa0, 0xf1, 0x4f, 0x2e, 0xfc, 0x5c, 0x6a, 0xc0, + 0x38, 0x84, 0x42, 0x8a, 0x31, 0x5d, 0xc9, 0x1f, 0x8d, 0x7b, 0x49, 0x2e, 0xbc, + 0x57, 0xe4, 0x75, 0xa4, 0xa6, 0xf2, 0x65, 0x72, 0x50, 0x4b, 0x19, 0x22, 0x32, + 0xec, 0xb9, 0xf0, 0xc0, 0x24, 0x11, 0xe5, 0x25, 0x96, 0xbc, 0x5e, 0x90, 0x45, + 0x7e, 0x74, 0x59, 0x39, 0xff, 0xed, 0xbd, 0x12, 0x1e, 0x37, 0xec, 0x1e, 0x9d, + 0xdd, 0xc3, 0x1b, 0x06, 0xdc, 0x95, 0x76, 0xa1, 0x73, 0x8e, 0xf7, 0x3e, 0x6b, + 0xa7, 0x16, 0x48, 0x91, 0x3d, 0xbf, 0x75, 0xa7, 0x79, 0xfd, 0xd4, 0x88, 0xd8, + 0x3f, 0x85, 0x7d, 0xee, 0xcc, 0x40, 0xa9, 0x8d, 0x5f, 0x29, 0x35, 0x39, 0x5e, + 0xe4, 0x76, 0x2d, 0xd2, 0x1a, 0xfd, 0xbb, 0x5d, 0x47, 0xfa, 0x9a, 0x6d, 0xd9, + 0x84, 0xd5, 0x67, 0xdb, 0x28, 0x57, 0xb9, 0x27, 0xb7, 0xfa, 0xe2, 0xdb, 0x58, + 0x71, 0x05, 0x41, 0x5d, 0x46, 0x42, 0x78, 0x9d, 0x38, 0xf5, 0x0b, 0x8d, 0xbc, + 0xc1, 0x29, 0xca, 0xb3, 0xd1, 0x7d, 0x19, 0xf3, 0x35, 0x5b, 0xcf, 0x73, 0xce, + 0xcb, 0x8c, 0xb8, 0xa5, 0xda, 0x01, 0x30, 0x71, 0x52, 0xf1, 0x39, 0x36, 0xa2, + 0x70, 0x57, 0x26, 0x70, 0xdc, 0x82, 0xd3, 0x90, 0x26, 0xc6, 0xcb, 0x4c, 0xd4, + 0xb0, 0xf7, 0xf5, 0xaa, 0x2a, 0x4f, 0x5a, 0x53, 0x41, 0xec, 0x5d, 0xd7, 0x15, + 0x40, 0x6f, 0x2f, 0xdd, 0x2a, 0xfa, 0x73, 0x3f, 0x5f, 0x64, 0x1c, 0x8c, 0x21, + 0x86, 0x2a, 0x1b, 0xaf, 0xce, 0x26, 0x09, 0xd9, 0xee, 0xcf, 0xa1, 0x58, 0xcf, + 0xb5, 0xcd, 0x79, 0xf8, 0x80, 0x08, 0xe3, 0x15, 0xdc, 0x7d, 0x83, 0x88, 0xe7, + 0x6c, 0x17, 0x82, 0xfd, 0x27, 0x95, 0xd1, 0x8a, 0x76, 0x36, 0x24, 0xc2, 0x5f, + 0xa9, 0x59, 0xcc, 0x97, 0x48, 0x9c, 0xe7, 0x57, 0x45, 0x82, 0x4b, 0x77, 0x86, + 0x8c, 0x53, 0x23, 0x9c, 0xfb, 0xdf, 0x73, 0xca, 0xec, 0x65, 0x60, 0x40, 0x37, + 0x31, 0x4f, 0xaa, 0xce, 0xb5, 0x62, 0x18, 0xc6, 0xbd, 0x30, 0xf8, 0x37, 0x4a, + 0xc1, 0x33, 0x86, 0x79, 0x3f, 0x21, 0xa9, 0xfb, 0x80, 0xad, 0x03, 0xbc, 0x0c, + 0xda, 0x4a, 0x44, 0x94, 0x6c, 0x00, 0xe1, 0xb1, 0xa1, 0xdf, 0x0e, 0x5b, 0x87, + 0xb5, 0xbe, 0xce, 0x47, 0x7a, 0x70, 0x96, 0x49, 0xe9, 0x50, 0x06, 0x05, 0x91, + 0x39, 0x48, 0x12, 0x95, 0x1e, 0x1f, 0xe3, 0x89, 0x5b, 0x8c, 0xc3, 0xd1, 0x4d, + 0x2c, 0xf6, 0x55, 0x6d, 0xf6, 0xed, 0x4b, 0x4d, 0xdd, 0x3d, 0x9a, 0x69, 0xf5, + 0x33, 0x57, 0xd7, 0x76, 0x7f, 0x4f, 0x5c, 0xcb, 0xdb, 0xc5, 0x96, 0x63, 0x12, + 0x77, 0xf8, 0xfe, 0xcd, 0x08, 0xcb, 0x05, 0x6b, 0x95, 0xe3, 0x02, 0x5b, 0x97, + 0x92, 0xff, 0xf7, 0xf2, 0x44, 0xfc, 0x71, 0x62, 0x69, 0xb9, 0x26, 0xd6, 0x2e, + 0x95, 0x96, 0xfa, 0x82, 0x5c, 0x6b, 0xf2, 0x1a, 0xff, 0x9e, 0x68, 0x62, 0x5a, + 0x19, 0x24, 0x40, 0xea, 0x06, 0x82, 0x81, 0x23, 0xd9, 0x78, 0x84, 0x80, 0x6f, + 0x15, 0xfa, 0x08, 0xda, 0x52, 0x75, 0x4a, 0x10, 0x95, 0xe3, 0xff, 0x1a, 0xbd, + 0x5c, 0xe4, 0xfd, 0xdf, 0xcc, 0xfc, 0x3a, 0x61, 0x28, 0xae, 0xf7, 0x84, 0xa6, + 0x46, 0x10, 0xa8, 0x9d, 0x1a, 0x70, 0x99, 0x21, 0x6d, 0x08, 0x14, 0xd3, 0xa2, + 0xd4, 0x52, 0x43, 0x1c, 0x32, 0xd4, 0x11, 0xac, 0x1c, 0xce, 0x82, 0xad, 0x02, + 0x29, 0x40, 0x7b, 0xbc, 0x48, 0x98, 0x56, 0x75, 0xe3, 0xf8, 0x74, 0xa4, 0x53, + 0x3f, 0x1d, 0x63, 0xa8, 0x4d, 0xfa, 0x3e, 0x0f, 0x46, 0x0f, 0xe2, 0xf5, 0x7e, + 0x34, 0xfb, 0xc7, 0x54, 0x23, 0xc3, 0x73, 0x7f, 0x5b, 0x2a, 0x06, 0x15, 0xf5, + 0x72, 0x2d, 0xb0, 0x41, 0xa3, 0xef, 0x66, 0xfa, 0x48, 0x3a, 0xfd, 0x3c, 0x2e, + 0x19, 0xe5, 0x94, 0x44, 0xa6, 0x4a, 0xdd, 0x6d, 0xf1, 0xd9, 0x63, 0xf5, 0xdd, + 0x5b, 0x50, 0x10, 0xd3, 0xd0, 0x25, 0xf0, 0x28, 0x7c, 0x4c, 0xf1, 0x9c, 0x75, + 0xf3, 0x3d, 0x51, 0xdd, 0xdd, 0xba, 0x5d, 0x65, 0x7b, 0x43, 0xee, 0x8d, 0xa6, + 0x45, 0x44, 0x38, 0x14, 0xcc, 0x73, 0x29, 0xf3, 0xe9, 0xb4, 0xe5, 0x4c, 0x23, + 0x6c, 0x29, 0xaf, 0x39, 0x23, 0x10, 0x17, 0x56, 0xd9, 0xfa, 0x4b, 0xd0, 0xf7, + 0xd2, 0xdd, 0xaa, 0xcb, 0x6b, 0x0f, 0x86, 0xa2, 0x65, 0x8e, 0x0a, 0x07, 0xa0, + 0x5a, 0xc5, 0xb9, 0x50, 0x05, 0x1c, 0xd2, 0x4c, 0x47, 0xa8, 0x8d, 0x13, 0xd6, + 0x59, 0xba, 0x2a, 0x46, 0xca, 0x18, 0x30, 0x81, 0x6d, 0x09, 0xcd, 0x76, 0x46, + 0xf7, 0x6f, 0x71, 0x6a, 0xbe, 0xc5, 0xde, 0x07, 0xfe, 0x9b, 0x52, 0x34, 0x10, + 0x80, 0x6e, 0xa6, 0xf2, 0x88, 0xf8, 0x73, 0x6c, 0x23, 0x35, 0x7c, 0x85, 0xf4, + 0x57, 0x91, 0xe1, 0x70, 0x80, 0x29, 0xd9, 0x82, 0x4d, 0x90, 0x70, 0x46, 0x07, + 0xf3, 0x87, 0xa0, 0x3e, 0x49, 0xbf, 0x98, 0x36, 0x57, 0x44, 0x31, 0x34, 0x5a, + 0x78, 0x77, 0xef, 0xaa, 0x8a, 0x08, 0xe7, 0x30, 0x81, 0xef, 0x8d, 0x62, 0xcb, + 0x78, 0x0a, 0xb6, 0x88, 0x3a, 0x50, 0xa0, 0xd4, 0x70, 0x19, 0x0d, 0xfb, 0xa1, + 0x0a, 0x85, 0x7f, 0x82, 0x84, 0x2d, 0x38, 0x25, 0xb3, 0xd6, 0xda, 0x05, 0x73, + 0xd3, 0x16, 0xeb, 0x16, 0x0d, 0xc0, 0xb7, 0x16, 0xc4, 0x8f, 0xbd, 0x46, 0x7f, + 0x75, 0xb7, 0x80, 0x14, 0x9a, 0xe8, 0x80, 0x8f, 0x4e, 0x68, 0xf5, 0x0c, 0x05, + 0x36, 0xac, 0xdd, 0xf6, 0xf1, 0xae, 0xab, 0x01, 0x6b, 0x6b, 0xc1, 0xa5, 0x1e, + 0xd4, 0x4c, 0xfa, 0xb7, 0x00, 0x00, 0xc7, 0xb3, 0x53, 0x42, 0x01, 0xcf, 0xb1, + 0xcd, 0x8d, 0xbf, 0x69, 0xb8, 0x25, 0x0c, 0x18, 0xef, 0x41, 0x29, 0x4c, 0xa9, + 0x79, 0x93, 0xdb, 0x54, 0x6c, 0x1f, 0xe0, 0x1f, 0x7e, 0x9c, 0x8e, 0x36, 0x7e, + 0xdc, 0xf0, 0x4b, 0xe3, 0x4a, 0x98, 0x51, 0xa7, 0xaf, 0x9d, 0xb6, 0x99, 0x0e, + 0xd8, 0x3d, 0xd6, 0x4a, 0xf3, 0x59, 0x7c, 0x04, 0x32, 0x3e, 0xa5, 0x1b, 0x00, + 0x52, 0xad, 0x80, 0x84, 0xa8, 0xb9, 0xda, 0x94, 0x8d, 0x32, 0x0d, 0xad, 0xd6, + 0x4f, 0x54, 0x31, 0xe6, 0x1d, 0xdf, 0x65, 0x8d, 0x24, 0xae, 0x67, 0xc2, 0x2c, + 0x8d, 0x13, 0x09, 0x13, 0x1f, 0xc0, 0x0f, 0xe7, 0xf2, 0x35, 0x73, 0x42, 0x76, + 0xd3, 0x8d, 0x47, 0xf1, 0xe1, 0x91, 0xe0, 0x0c, 0x7a, 0x1d, 0x48, 0xaf, 0x04, + 0x68, 0x27, 0x59, 0x1e, 0x97, 0x33, 0xa9, 0x7f, 0xa6, 0xb6, 0x79, 0xf3, 0xdc, + 0x60, 0x1d, 0x00, 0x82, 0x85, 0xed, 0xcb, 0xda, 0xe6, 0x9c, 0xe8, 0xfc, 0x1b, + 0xe4, 0xaa, 0xc0, 0x0f, 0xf2, 0x71, 0x1e, 0xbd, 0x93, 0x1d, 0xe5, 0x18, 0x85, + 0x68, 0x78, 0xf7, 0x34, 0x76, 0xf2, 0x1a, 0x48, 0x2e, 0xc9, 0x37, 0x83, 0x65, + 0xc8, 0xf7, 0x39, 0x3c, 0x94, 0xe2, 0x88, 0x53, 0x15, 0xeb, 0x46, 0x71, 0x09, + 0x8b, 0x79, 0x53, 0x5e, 0x79, 0x0f, 0xe5, 0x3e, 0x29, 0xfe, 0xf2, 0xb3, 0x76, + 0x66, 0x97, 0xac, 0x32, 0xb4, 0xf4, 0x73, 0xf4, 0x68, 0xa0, 0x08, 0xe7, 0x23, + 0x89, 0xfc, 0x03, 0x88, 0x0d, 0x78, 0x0c, 0xb0, 0x7f, 0xcf, 0xaa, 0xbe, 0x3f, + 0x1a, 0x84, 0xb2, 0x7d, 0xb5, 0x9a, 0x4a, 0x15, 0x3d, 0x10, 0x70, 0x68, 0x9f, + 0x2c, 0xcf, 0x97, 0x5b, 0x2b, 0x17, 0x6e, 0x1c, 0x69, 0xdb, 0xe3, 0x81, 0x34, + 0x0e, 0xf1, 0xf9, 0x8f, 0xdc, 0x4b, 0x45, 0x3a, 0xbd, 0xa3, 0xa2, 0xbf, 0xac, + 0x30, 0x69, 0xba, 0x7f, 0x1c, 0xc5, 0x0a, 0x81, 0xc2, 0x52, 0x0e, 0x41, 0x2f, + 0xab, 0x4e, 0x5d, 0x39, 0x7e, 0xcf, 0x73, 0x9f, 0x28, 0x0d, 0x5b, 0x68, 0x45, + 0x33, 0xd5, 0xd2, 0x9c, 0xfe, 0x7e, 0x73, 0x02, 0xec, 0x14, 0x4b, 0x4e, 0x55, + 0x3a, 0xcf, 0xd6, 0x70, 0xf7, 0x7e, 0x75, 0x5f, 0xc8, 0x8e, 0x06, 0x77, 0xe3, + 0x1b, 0xa4, 0x59, 0xb4, 0x4e, 0x30, 0x77, 0x68, 0x95, 0x8f, 0xe3, 0x78, 0x9d, + 0x41, 0xc2, 0xb1, 0xff, 0x43, 0x4c, 0xb3, 0x0e, 0x15, 0x91, 0x4f, 0x01, 0xbc, + 0x6b, 0xc2, 0x30, 0x7b, 0x48, 0x8d, 0x25, 0x56, 0xd7, 0xb7, 0x38, 0x0e, 0xa4, + 0xff, 0xd7, 0x12, 0xf6, 0xb0, 0x2f, 0xe8, 0x06, 0xb9, 0x45, 0x69, 0xcd, 0x40, + 0x59, 0xf3, 0x96, 0xbf, 0x29, 0xb9, 0x9d, 0x0a, 0x40, 0xe5, 0xe1, 0x71, 0x1c, + 0xa9, 0x44, 0xf7, 0x2d, 0x43, 0x6a, 0x10, 0x2f, 0xca, 0x4b, 0x97, 0x69, 0x3d, + 0xa0, 0xb0, 0x86, 0xfe, 0x9d, 0x2e, 0x71, 0x62, 0x47, 0x0d, 0x02, 0xe0, 0xf0, + 0x5d, 0x4b, 0xec, 0x95, 0x12, 0xbf, 0xb3, 0xf3, 0x83, 0x27, 0x29, 0x6e, 0xfa, + 0xa7, 0x43, 0x28, 0xb1, 0x18, 0xc2, 0x74, 0x02, 0xc7, 0x0c, 0x3a, 0x90, 0xb4, + 0x9a, 0xd4, 0xbb, 0xc6, 0x8e, 0x37, 0xc0, 0xaa, 0x7d, 0x9b, 0x3f, 0xe1, 0x77, + 0x99, 0xd7, 0x3b, 0x84, 0x1e, 0x75, 0x17, 0x13, 0xa0, 0x29, 0x43, 0x90, 0x5a, + 0xae, 0x08, 0x03, 0xfd, 0x69, 0x44, 0x2e, 0xb7, 0x68, 0x1e, 0xc2, 0xa0, 0x56, + 0x00, 0x05, 0x4e, 0x92, 0xee, 0xd5, 0x55, 0x02, 0x8f, 0x21, 0xb6, 0xa1, 0x55, + 0x26, 0x8a, 0x2d, 0xd6, 0x64, 0x05, 0x25, 0x28, 0xa5, 0xf8, 0xed, 0x02, 0x8f, + 0x59, 0xaf, 0x98, 0x5a, 0xd1, 0x31, 0x5c, 0x2e, 0x25, 0xae, 0xb9, 0xd7, 0xf1, + 0x34, 0xe4, 0xbf, 0x47, 0x86, 0x42, 0xab, 0x96, 0xb1, 0x5d, 0x3b, 0x3e, 0x13, + 0xce, 0x23, 0x87, 0xac, 0x84, 0xdc, 0x08, 0x19, 0xe8, 0x12, 0x60, 0xe1, 0x1d, + 0x39, 0x2a, 0x5f, 0x06, 0xdb, 0x8b, 0x56, 0x33, 0xde, 0x28, 0x1a, 0x0e, 0x9c, + 0x95, 0x8c, 0x24, 0x06, 0x00, 0x00, + ], + txid: [ + 0xe5, 0x46, 0x49, 0x7f, 0xcc, 0x6f, 0x4e, 0xcd, 0xc5, 0x1c, 0x99, 0x08, 0x1c, + 0x31, 0x05, 0xfa, 0x4b, 0x4b, 0xc8, 0x56, 0x5e, 0x49, 0xe0, 0xcb, 0xc9, 0xbd, + 0x56, 0x1d, 0xb4, 0xd9, 0x6a, 0x39, + ], + auth_digest: [ + 0xc4, 0x7e, 0xfe, 0x33, 0xfa, 0x33, 0xf9, 0xee, 0x64, 0xc5, 0xb0, 0xdf, 0x6e, + 0xdb, 0x2b, 0xab, 0xae, 0x5c, 0x17, 0x0f, 0x80, 0x00, 0x17, 0x90, 0x03, 0xaf, + 0xd3, 0x30, 0xf1, 0x6b, 0xec, 0xd6, + ], + amounts: vec![1311766330213275], + script_pubkeys: vec![vec![0x63, 0x63]], + transparent_input: Some(0), + sighash_shielded: [ + 0x9e, 0xc7, 0x6a, 0x8e, 0x04, 0x6c, 0xcf, 0x32, 0xc6, 0x34, 0xea, 0xc7, 0x45, + 0x38, 0x75, 0x02, 0xf8, 0x7b, 0x7d, 0xdf, 0xf1, 0x8a, 0xc6, 0xfb, 0xcd, 0x87, + 0xb4, 0xdd, 0x6f, 0x79, 0x69, 0xb8, + ], + sighash_all: Some([ + 0x56, 0x63, 0x05, 0x58, 0xb2, 0x6c, 0x25, 0xb2, 0x81, 0x73, 0x70, 0x30, 0x25, + 0x0b, 0xa9, 0xc2, 0x6b, 0xc3, 0x64, 0x65, 0x1b, 0x23, 0xca, 0x7b, 0xf9, 0xc3, + 0x6f, 0x77, 0x2c, 0xd4, 0xb2, 0xf7, + ]), + sighash_none: Some([ + 0xe3, 0x1b, 0x16, 0xed, 0xf6, 0x70, 0x2b, 0x00, 0x69, 0x21, 0x0c, 0xb4, 0xb4, + 0x1f, 0x44, 0x54, 0x2c, 0xbb, 0xa8, 0x4c, 0xb7, 0x18, 0x65, 0xfa, 0x0b, 0x58, + 0xf5, 0xd7, 0xcc, 0x8f, 0xa4, 0xee, + ]), + sighash_single: None, + sighash_all_anyone: Some([ + 0x94, 0xa7, 0xc1, 0xd4, 0x2e, 0xe3, 0x6b, 0x9f, 0x57, 0x38, 0x3a, 0x84, 0xb8, + 0x8e, 0x78, 0x4e, 0x6d, 0x93, 0x10, 0xb7, 0x3c, 0x23, 0x5f, 0x8e, 0x8a, 0x0d, + 0x7d, 0x8a, 0x13, 0x1f, 0x8a, 0x6e, + ]), + sighash_none_anyone: Some([ + 0xed, 0xf2, 0xb8, 0x48, 0xc8, 0xcf, 0x3d, 0x8a, 0xe0, 0x8e, 0x34, 0x25, 0x9d, + 0x7e, 0xc7, 0x41, 0x34, 0xb8, 0x50, 0xa6, 0xb6, 0x6f, 0x27, 0xd9, 0x4e, 0x00, + 0x9c, 0x2d, 0x34, 0x98, 0x41, 0x50, + ]), + sighash_single_anyone: None, + }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xd3, + 0xf4, 0x1e, 0x72, 0x8e, 0xf2, 0xbc, 0x09, 0x02, 0xb8, 0x9f, 0xfd, 0xec, 0xa3, + 0x64, 0xdd, 0x2f, 0x0f, 0x07, 0x39, 0xf0, 0x53, 0x45, 0x56, 0x48, 0x31, 0x99, + 0xc7, 0x1f, 0x18, 0x93, 0x41, 0xac, 0x9b, 0x78, 0xa2, 0x69, 0x16, 0x42, 0x06, + 0xa0, 0xea, 0x1c, 0xe7, 0x3b, 0x05, 0x52, 0xac, 0x65, 0x53, 0x00, 0xb2, 0x47, + 0xc0, 0x46, 0xf8, 0xe7, 0x5e, 0xf8, 0xe3, 0xf8, 0xbd, 0x82, 0x1c, 0xf5, 0x77, + 0x49, 0x18, 0x64, 0xe2, 0x0e, 0x6d, 0x08, 0xfd, 0x2e, 0x32, 0xb5, 0x55, 0xc9, + 0x2c, 0x66, 0x1f, 0x19, 0x58, 0x8b, 0x72, 0xa8, 0x95, 0x99, 0x71, 0x0a, 0x00, + 0x06, 0x12, 0x53, 0xca, 0x02, 0xc4, 0x9d, 0x7d, 0x74, 0xf6, 0x5f, 0x01, 0x00, + 0x09, 0xac, 0x53, 0xac, 0x00, 0xac, 0x52, 0x00, 0x00, 0xac, 0xb7, 0x39, 0x17, + 0xd3, 0xcc, 0x94, 0x05, 0x00, 0x09, 0xac, 0x6a, 0x6a, 0x00, 0x63, 0x53, 0x52, + 0xac, 0xac, 0x00, 0x02, 0x80, 0xa9, 0x89, 0x23, 0x5d, 0x81, 0x05, 0x18, 0xdb, + 0xa3, 0xf3, 0x4c, 0x72, 0x7b, 0x77, 0xf2, 0x3d, 0x14, 0xf0, 0x22, 0xbf, 0x38, + 0x1e, 0x29, 0xed, 0xb1, 0x74, 0x9e, 0x05, 0x46, 0xeb, 0xdc, 0x53, 0x04, 0x35, + 0x31, 0x2e, 0xdc, 0xed, 0xc6, 0xa9, 0x61, 0x13, 0x33, 0x38, 0xd7, 0x86, 0xc4, + 0xa3, 0xe1, 0x03, 0xf6, 0x01, 0x10, 0xa1, 0x6b, 0x13, 0x37, 0x12, 0x97, 0x04, + 0xbf, 0x47, 0x54, 0x7f, 0xef, 0x3a, 0x8b, 0x97, 0xe7, 0x37, 0x53, 0x67, 0x5e, + 0x91, 0x07, 0x43, 0x64, 0xab, 0x31, 0x90, 0xcd, 0xd0, 0xf0, 0x33, 0x1b, 0x51, + 0x40, 0x00, 0xfc, 0x16, 0xc9, 0xf0, 0x65, 0xd4, 0xe2, 0xd8, 0xfe, 0x94, 0xe9, + 0x7d, 0x2e, 0x9e, 0x85, 0xc6, 0xbb, 0x74, 0x8c, 0x00, 0x42, 0xd3, 0x24, 0x9a, + 0xbb, 0x13, 0x42, 0xbb, 0x0e, 0xeb, 0xf6, 0x20, 0x58, 0xbf, 0x3d, 0xe0, 0x80, + 0xd9, 0x46, 0x11, 0xa3, 0x75, 0x09, 0x15, 0xb5, 0xdc, 0x6c, 0x0b, 0x38, 0x99, + 0xd4, 0x12, 0x22, 0xba, 0xce, 0x76, 0x0e, 0xe9, 0xc8, 0x81, 0x8d, 0xed, 0x59, + 0x9e, 0x34, 0xc5, 0x6d, 0x73, 0x72, 0xaf, 0x1e, 0xb8, 0x68, 0x52, 0xf2, 0xa7, + 0x32, 0x10, 0x4b, 0xdb, 0x75, 0x07, 0x39, 0xde, 0x6c, 0x2c, 0x6e, 0x0f, 0x9e, + 0xb7, 0xcb, 0x17, 0xf1, 0x94, 0x2b, 0xfc, 0x9f, 0x4f, 0xd6, 0xeb, 0xb6, 0xb4, + 0xcd, 0xd4, 0xda, 0x2b, 0xca, 0x26, 0xfa, 0xc4, 0x57, 0x8e, 0x9f, 0x54, 0x34, + 0x05, 0xac, 0xc7, 0xd8, 0x6f, 0xf5, 0x91, 0x58, 0xbd, 0x0c, 0xba, 0x3a, 0xef, + 0x6f, 0x4a, 0x84, 0x72, 0xd1, 0x44, 0xd9, 0x9f, 0x8b, 0x8d, 0x1d, 0xed, 0xaa, + 0x90, 0x77, 0xd4, 0xf0, 0x1d, 0x4b, 0xb2, 0x7b, 0xbe, 0x31, 0xd8, 0x8f, 0xbe, + 0xfa, 0xc3, 0xdc, 0xd4, 0x79, 0x75, 0x63, 0xa2, 0x6b, 0x1d, 0x61, 0xfc, 0xd9, + 0xa4, 0x64, 0xab, 0x21, 0xed, 0x55, 0x0f, 0xe6, 0xfa, 0x09, 0x69, 0x5b, 0xa0, + 0xb2, 0xf1, 0x0e, 0xea, 0x64, 0x68, 0xcc, 0x6e, 0x20, 0xa6, 0x6f, 0x82, 0x6e, + 0x3d, 0x14, 0xc5, 0x00, 0x6f, 0x05, 0x63, 0x88, 0x7f, 0x5e, 0x12, 0x89, 0xbe, + 0x1b, 0x20, 0x04, 0xca, 0xca, 0x8d, 0x3f, 0x34, 0xd6, 0xe8, 0x4b, 0xf5, 0x9c, + 0x1e, 0x04, 0x61, 0x9a, 0x7c, 0x23, 0xa9, 0x96, 0x94, 0x1d, 0x88, 0x9e, 0x46, + 0x22, 0xa9, 0xb9, 0xb1, 0xd5, 0x9d, 0x5e, 0x31, 0x90, 0x94, 0x31, 0x8c, 0xd4, + 0x05, 0xba, 0x27, 0xb7, 0xe2, 0xc0, 0x84, 0x76, 0x2d, 0x31, 0x45, 0x3e, 0xc4, + 0x54, 0x9a, 0x4d, 0x97, 0x72, 0x9d, 0x03, 0x34, 0x60, 0xfc, 0xf8, 0x9d, 0x64, + 0x94, 0xf2, 0xff, 0xd7, 0x89, 0xe9, 0x80, 0x82, 0xea, 0x5c, 0xe9, 0x53, 0x4b, + 0x3a, 0xcd, 0x60, 0xfe, 0x49, 0xe3, 0x7e, 0x4f, 0x66, 0x69, 0x31, 0x67, 0x73, + 0x19, 0xed, 0x89, 0xf8, 0x55, 0x88, 0x74, 0x1b, 0x31, 0x28, 0x90, 0x1a, 0x93, + 0xbd, 0x78, 0xe4, 0xbe, 0x02, 0x25, 0xa9, 0xe2, 0x69, 0x2c, 0x77, 0xc9, 0x69, + 0xed, 0x01, 0x76, 0xbd, 0xf9, 0x55, 0x59, 0x48, 0xcb, 0xd5, 0xa3, 0x32, 0xd0, + 0x45, 0xde, 0x6b, 0xa6, 0xbf, 0x44, 0x90, 0xad, 0xfe, 0x74, 0x44, 0xcd, 0x46, + 0x7a, 0x09, 0x07, 0x54, 0x17, 0xfc, 0xc0, 0x06, 0x2e, 0x49, 0xf0, 0x08, 0xc5, + 0x1a, 0xd4, 0x22, 0x74, 0x39, 0xc1, 0xb4, 0x47, 0x6c, 0xcd, 0x8e, 0x97, 0x86, + 0x2d, 0xab, 0x7b, 0xe1, 0xe8, 0xd3, 0x99, 0xc0, 0x5e, 0xf2, 0x7c, 0x6e, 0x22, + 0xee, 0x27, 0x3e, 0x15, 0x78, 0x6e, 0x39, 0x4c, 0x8f, 0x1b, 0xe3, 0x16, 0x82, + 0xa3, 0x01, 0x47, 0x96, 0x3a, 0xc8, 0xda, 0x8d, 0x41, 0xd8, 0x04, 0x25, 0x84, + 0x26, 0xa3, 0xf7, 0x02, 0x89, 0xb8, 0xad, 0x19, 0xd8, 0xde, 0x13, 0xbe, 0x4e, + 0xeb, 0xe3, 0xbd, 0x4c, 0x8a, 0x6f, 0x55, 0xd6, 0xe0, 0xc3, 0x73, 0xd4, 0x56, + 0x85, 0x18, 0x79, 0xf5, 0xfb, 0xc2, 0x82, 0xdb, 0x9e, 0x13, 0x48, 0x06, 0xbf, + 0xf7, 0x1e, 0x11, 0xbc, 0x33, 0xab, 0x75, 0xdd, 0x6c, 0xa0, 0x67, 0xfb, 0x73, + 0xa0, 0x43, 0xb6, 0x46, 0xa7, 0xcf, 0x39, 0xca, 0xb4, 0x92, 0x83, 0x86, 0x78, + 0x6d, 0x2f, 0x24, 0x14, 0x1e, 0xe1, 0x20, 0xfd, 0xc3, 0x4d, 0x67, 0x64, 0xea, + 0xfc, 0x66, 0x88, 0x0e, 0xe0, 0x20, 0x4f, 0x53, 0xcc, 0x11, 0x67, 0xed, 0x20, + 0xb4, 0x3a, 0x52, 0xde, 0xa3, 0xca, 0x7c, 0xff, 0x8e, 0xf3, 0x5c, 0xd8, 0xe6, + 0xd7, 0xc1, 0x11, 0xa6, 0x8e, 0xf4, 0x4b, 0xcd, 0x0c, 0x15, 0x13, 0xad, 0x47, + 0xca, 0x61, 0xc6, 0x59, 0xcc, 0x5d, 0x32, 0x5b, 0x44, 0x0f, 0x6b, 0x9f, 0x59, + 0xaf, 0xf6, 0x68, 0x79, 0xbb, 0x66, 0x88, 0xfd, 0x28, 0x59, 0x36, 0x2b, 0x18, + 0x2f, 0x20, 0x7b, 0x31, 0x75, 0x96, 0x1f, 0x64, 0x11, 0xa4, 0x93, 0xbf, 0xfd, + 0x04, 0x8e, 0x7d, 0x0d, 0x87, 0xd8, 0x2f, 0xe6, 0xf9, 0x90, 0xa2, 0xb0, 0xa2, + 0x5f, 0x5a, 0xa0, 0x11, 0x1a, 0x6e, 0x68, 0xf3, 0x7b, 0xf6, 0xf3, 0xac, 0x2d, + 0x26, 0xb8, 0x46, 0x86, 0xe5, 0x69, 0xd5, 0x8d, 0x99, 0xc1, 0x38, 0x35, 0x97, + 0xfa, 0xd8, 0x11, 0x93, 0xc4, 0xc1, 0xb1, 0x6e, 0x6a, 0x90, 0xe2, 0xd5, 0x07, + 0xcd, 0xfe, 0x6f, 0xbd, 0xaa, 0x86, 0x16, 0x3e, 0x9c, 0xf5, 0xde, 0x31, 0x00, + 0xfb, 0xca, 0x7e, 0x8d, 0xa0, 0x47, 0xb0, 0x90, 0xdb, 0x9f, 0x37, 0x95, 0x2f, + 0xbf, 0xee, 0x76, 0xaf, 0x61, 0x66, 0x81, 0x90, 0xbd, 0x52, 0xed, 0x49, 0x0e, + 0x67, 0x7b, 0x51, 0x5d, 0x01, 0x43, 0x18, 0xb4, 0x36, 0xba, 0x91, 0x21, 0xa3, + 0x05, 0x9e, 0x03, 0x65, 0x0d, 0xf3, 0xa8, 0x68, 0x5c, 0x8c, 0x3e, 0x8a, 0x77, + 0x8f, 0x49, 0x1d, 0x81, 0x6f, 0x6c, 0x2b, 0x55, 0x13, 0x25, 0xc8, 0x08, 0x0a, + 0x80, 0x78, 0x99, 0x97, 0x3e, 0xb9, 0x3c, 0x5e, 0x81, 0x9a, 0xad, 0x66, 0x94, + 0x13, 0xf8, 0x38, 0x79, 0x33, 0xad, 0x15, 0x84, 0xaa, 0x35, 0xe4, 0x3f, 0x4e, + 0xcd, 0x1e, 0x2d, 0x04, 0x07, 0xfb, 0xc4, 0x03, 0x03, 0xa9, 0x4d, 0x73, 0x1e, + 0x7c, 0xf5, 0x45, 0xa2, 0x62, 0x77, 0xca, 0xad, 0x39, 0x83, 0x7f, 0x1e, 0x6a, + 0x69, 0x1c, 0x2f, 0xf1, 0xe3, 0x23, 0x8a, 0x20, 0xc2, 0x03, 0x92, 0x54, 0x4d, + 0x63, 0x59, 0xeb, 0x23, 0xfa, 0xf3, 0x8a, 0x08, 0x22, 0xda, 0x36, 0xce, 0x42, + 0x6c, 0x4a, 0x2f, 0xbe, 0xff, 0xeb, 0x0a, 0x8a, 0x2e, 0x29, 0x7a, 0x9d, 0x19, + 0xba, 0x15, 0x02, 0x45, 0x90, 0xe3, 0x32, 0x9d, 0x9f, 0xa9, 0x26, 0x1f, 0x99, + 0x38, 0xa4, 0x03, 0x2d, 0xd3, 0x46, 0x06, 0xc9, 0xcf, 0x9f, 0x3d, 0xd3, 0x3e, + 0x57, 0x6f, 0x05, 0xcd, 0x1d, 0xd6, 0x81, 0x1c, 0x62, 0x98, 0x75, 0x7d, 0x77, + 0xd9, 0xe8, 0x10, 0xab, 0xdb, 0x22, 0x6a, 0xfc, 0xaa, 0x43, 0x46, 0xa6, 0x56, + 0x0f, 0x89, 0x32, 0xb3, 0x18, 0x1f, 0xd3, 0x55, 0xd5, 0xd3, 0x91, 0x97, 0x61, + 0x83, 0xf8, 0xd9, 0x93, 0x88, 0x83, 0x96, 0x32, 0xd6, 0x35, 0x4f, 0x66, 0x6d, + 0x09, 0xd3, 0xe5, 0x62, 0x9e, 0xa1, 0x97, 0x37, 0x38, 0x86, 0x13, 0xd3, 0x8a, + 0x34, 0xfd, 0x0f, 0x6e, 0x50, 0xee, 0x5a, 0x0c, 0xc9, 0x67, 0x71, 0x77, 0xf5, + 0x00, 0x28, 0xc1, 0x41, 0x37, 0x81, 0x87, 0xbd, 0x28, 0x19, 0x40, 0x3f, 0xc5, + 0x34, 0xf8, 0x00, 0x76, 0xe9, 0x38, 0x0c, 0xb4, 0x96, 0x4d, 0x3b, 0x6b, 0x45, + 0x81, 0x9d, 0x3b, 0x8e, 0x9c, 0xaf, 0x54, 0xf0, 0x51, 0x85, 0x2d, 0x67, 0x1b, + 0xf8, 0xc1, 0xff, 0xde, 0x2d, 0x15, 0x10, 0x75, 0x64, 0x18, 0xcb, 0x48, 0x10, + 0x93, 0x6a, 0xa5, 0x7e, 0x69, 0x65, 0xd6, 0xfb, 0x65, 0x6a, 0x76, 0x0b, 0x7f, + 0x19, 0xad, 0xf9, 0x6c, 0x17, 0x34, 0x88, 0x55, 0x21, 0x93, 0xb1, 0x47, 0xee, + 0x58, 0x85, 0x80, 0x33, 0xda, 0xc7, 0xcd, 0x0e, 0xb2, 0x04, 0xc0, 0x64, 0x90, + 0xbb, 0xde, 0xdf, 0x5f, 0x75, 0x71, 0xac, 0xb2, 0xeb, 0xe7, 0x6a, 0xce, 0xf3, + 0xf2, 0xa0, 0x1e, 0xe9, 0x87, 0x48, 0x6d, 0xfe, 0x6c, 0x3f, 0x0a, 0x5e, 0x23, + 0x4c, 0x12, 0x72, 0x58, 0xf9, 0x7a, 0x28, 0xfb, 0x5d, 0x16, 0x4a, 0x81, 0x76, + 0xbe, 0x94, 0x6b, 0x80, 0x97, 0xd0, 0xe3, 0x17, 0x28, 0x7f, 0x33, 0xbf, 0x9c, + 0x16, 0xf9, 0xa5, 0x45, 0x40, 0x9c, 0xe2, 0x9b, 0x1f, 0x42, 0x73, 0x72, 0x5f, + 0xc0, 0xdf, 0x02, 0xa0, 0x4e, 0xba, 0xe1, 0x78, 0xb3, 0x41, 0x4f, 0xb0, 0xa8, + 0x2d, 0x50, 0xde, 0xb0, 0x9f, 0xcf, 0x4e, 0x6e, 0xe9, 0xd1, 0x80, 0xff, 0x4f, + 0x56, 0xff, 0x3b, 0xc1, 0xd3, 0x60, 0x1f, 0xc2, 0xdc, 0x90, 0xd8, 0x14, 0xc3, + 0x25, 0x6f, 0x49, 0x67, 0xd3, 0xa8, 0xd6, 0x4c, 0x83, 0xfe, 0xa3, 0x39, 0xc5, + 0x1f, 0x5a, 0x8e, 0x58, 0x01, 0xfb, 0xb9, 0x78, 0x35, 0x58, 0x1b, 0x60, 0x24, + 0x65, 0xde, 0xe0, 0x4b, 0x59, 0x22, 0xc2, 0x76, 0x1b, 0x54, 0x24, 0x5b, 0xec, + 0x0c, 0x9e, 0xef, 0x2d, 0xb9, 0x7d, 0x22, 0xb2, 0xb3, 0x55, 0x6c, 0xc9, 0x69, + 0xfb, 0xb1, 0x3d, 0x06, 0x50, 0x97, 0x65, 0xa5, 0x2b, 0x3f, 0xac, 0x54, 0xb9, + 0x3f, 0x42, 0x1b, 0xf0, 0x8e, 0x18, 0xd5, 0x2d, 0xdd, 0x52, 0xcc, 0x1c, 0x8c, + 0xa8, 0xad, 0xfa, 0xcc, 0xab, 0x7e, 0x5c, 0xc2, 0xf4, 0x57, 0x3f, 0xbb, 0xf8, + 0x23, 0x9b, 0xb0, 0xb8, 0xae, 0xdb, 0xf8, 0xda, 0xd1, 0x62, 0x82, 0xda, 0x5c, + 0x91, 0x25, 0xdb, 0xa1, 0xc0, 0x59, 0xd0, 0xdf, 0x8a, 0xbf, 0x62, 0x10, 0x78, + 0xf0, 0x2d, 0x6c, 0x4b, 0xc8, 0x6d, 0x40, 0x84, 0x5a, 0xc1, 0xd5, 0x97, 0x10, + 0xc4, 0x5f, 0x07, 0xd5, 0x85, 0xeb, 0x48, 0xb3, 0x2f, 0xc0, 0x16, 0x7b, 0xa2, + 0x56, 0xe7, 0x3c, 0xa3, 0xb9, 0x31, 0x1c, 0x62, 0xd1, 0x09, 0x49, 0x79, 0x57, + 0xd8, 0xdb, 0xe1, 0x0a, 0xa3, 0xe8, 0x66, 0xb4, 0x0c, 0x0b, 0xaa, 0x2b, 0xc4, + 0x92, 0xc1, 0x9a, 0xd1, 0xe6, 0x37, 0x2d, 0x96, 0x22, 0xbf, 0x16, 0x3f, 0xbf, + 0xfe, 0xae, 0xee, 0x79, 0x6a, 0x3c, 0xd9, 0xb6, 0xfb, 0xbf, 0xa4, 0xd7, 0x92, + 0xf3, 0x4d, 0x7f, 0xd6, 0xe7, 0x63, 0xcd, 0x58, 0x59, 0xdd, 0x26, 0x83, 0x3d, + 0x21, 0xd9, 0xbc, 0x54, 0x52, 0xbd, 0x19, 0x51, 0x5d, 0xff, 0x9f, 0x49, 0x95, + 0xb3, 0x5b, 0xc0, 0xc1, 0xf8, 0x76, 0xe6, 0xad, 0x11, 0xf2, 0x45, 0x2d, 0xc9, + 0xae, 0x85, 0xae, 0xc0, 0x1f, 0xc5, 0x6f, 0x8c, 0xbf, 0xda, 0x75, 0xa7, 0x72, + 0x7b, 0x75, 0xeb, 0xbd, 0x6b, 0xbf, 0xfb, 0x43, 0xb6, 0x3a, 0x3b, 0x1b, 0x67, + 0x1e, 0x40, 0xfe, 0xb0, 0xdb, 0x00, 0x29, 0x74, 0xa3, 0xc3, 0xb1, 0xa7, 0x88, + 0x56, 0x72, 0x31, 0xbf, 0x63, 0x99, 0xff, 0x89, 0x23, 0x69, 0x81, 0x14, 0x9d, + 0x42, 0x38, 0x02, 0xd2, 0x34, 0x1a, 0x3b, 0xed, 0xb9, 0xdd, 0xcb, 0xac, 0x1f, + 0xe7, 0xb6, 0x43, 0x5e, 0x14, 0x79, 0xc7, 0x2e, 0x70, 0x89, 0xd0, 0x29, 0xe7, + 0xfb, 0xba, 0xf3, 0xcf, 0x37, 0xe9, 0xb9, 0xa6, 0xb7, 0x76, 0x79, 0x1e, 0x4c, + 0x5e, 0x6f, 0xda, 0x57, 0xe8, 0xd5, 0xf1, 0x4c, 0xd8, 0x2d, 0x6b, 0x59, 0xe8, + 0x75, 0x02, 0x00, 0x84, 0xaf, 0x07, 0x21, 0x9c, 0x7c, 0x0e, 0xe7, 0xfc, 0x7b, + 0xfc, 0x79, 0xf3, 0x25, 0x64, 0x4e, 0x4d, 0xf4, 0xc0, 0xd7, 0xdb, 0x08, 0xe9, + 0xf0, 0xbd, 0x02, 0x49, 0x43, 0xc7, 0x05, 0xab, 0xff, 0x89, 0x94, 0xbf, 0xa6, + 0x05, 0xcf, 0xbc, 0x7e, 0xd7, 0x46, 0xa7, 0xd3, 0xf7, 0xc3, 0x7d, 0x9e, 0x8b, + 0xdc, 0x43, 0x3b, 0x7d, 0x79, 0xe0, 0x8a, 0x12, 0xf7, 0x38, 0xa8, 0xf0, 0xdb, + 0xdd, 0xfe, 0xf2, 0xf2, 0x65, 0x7e, 0xf3, 0xe4, 0x7d, 0x1b, 0x0f, 0xd1, 0x1e, + 0x6a, 0x13, 0x31, 0x1f, 0xb7, 0x99, 0xc7, 0x9c, 0x64, 0x1d, 0x9d, 0xa4, 0x3b, + 0x33, 0xe7, 0xad, 0x01, 0x2e, 0x28, 0x25, 0x53, 0x98, 0x78, 0x92, 0x62, 0x27, + 0x5f, 0x11, 0x75, 0xbe, 0x84, 0x62, 0xc0, 0x14, 0x91, 0xc4, 0xd8, 0x42, 0x40, + 0x6d, 0x0e, 0xc4, 0x28, 0x2c, 0x95, 0x26, 0x17, 0x4a, 0x09, 0x87, 0x8f, 0xe8, + 0xfd, 0xde, 0x33, 0xa2, 0x96, 0x04, 0xe5, 0xe5, 0xe7, 0xb2, 0xa0, 0x25, 0xd6, + 0x65, 0x0b, 0x97, 0xdb, 0xb5, 0x2b, 0xef, 0xb5, 0x9b, 0x1d, 0x30, 0xa5, 0x74, + 0x33, 0xb0, 0xa3, 0x51, 0x47, 0x44, 0x44, 0x09, 0x9d, 0xaa, 0x37, 0x10, 0x46, + 0x61, 0x32, 0x60, 0xcf, 0x33, 0x54, 0xcf, 0xcd, 0xad, 0xa6, 0x63, 0xec, 0xe8, + 0x24, 0xff, 0xd7, 0xe4, 0x43, 0x93, 0x88, 0x6a, 0x86, 0x16, 0x5d, 0xdd, 0xdf, + 0x8c, 0x35, 0xa2, 0xd2, 0x70, 0x84, 0x6b, 0x9d, 0xbe, 0x00, 0x5c, 0xda, 0x16, + 0xaf, 0x44, 0x08, 0xf3, 0xab, 0x06, 0xa9, 0x16, 0xee, 0xeb, 0x9c, 0x95, 0x94, + 0xb7, 0x04, 0x24, 0xa4, 0xc1, 0xd1, 0x71, 0x29, 0x5b, 0x67, 0x63, 0xb2, 0x2f, + 0x47, 0xf8, 0x0b, 0x53, 0xcc, 0xbb, 0x90, 0x4b, 0xd6, 0x8f, 0xd6, 0x5f, 0xbd, + 0x3f, 0xbd, 0xea, 0x10, 0x35, 0xe9, 0x8c, 0x21, 0xa7, 0xdb, 0xc9, 0x1a, 0x9b, + 0x5b, 0xc7, 0x69, 0x0f, 0x05, 0xec, 0x31, 0x7c, 0x97, 0xf8, 0x76, 0x4e, 0xb4, + 0x8e, 0x91, 0x1d, 0x42, 0x8e, 0xc8, 0xd8, 0x61, 0xb7, 0x08, 0xe8, 0x29, 0x8a, + 0xcb, 0x62, 0x15, 0x51, 0x45, 0x15, 0x5a, 0xe9, 0x5f, 0x0a, 0x1d, 0x15, 0x01, + 0x03, 0x47, 0x53, 0x14, 0x6e, 0x22, 0xd0, 0x5f, 0x58, 0x6d, 0x7f, 0x6b, 0x4f, + 0xe1, 0x2d, 0xad, 0x9a, 0x17, 0xf5, 0xdb, 0x70, 0xb1, 0xdb, 0x96, 0xb8, 0xd9, + 0xa8, 0x3e, 0xda, 0xdc, 0x96, 0x6c, 0x8a, 0x54, 0x66, 0xb6, 0x1f, 0xc9, 0x98, + 0xc3, 0x1f, 0x10, 0x70, 0xd9, 0xa5, 0xc9, 0xa6, 0xd2, 0x68, 0xd3, 0x04, 0xfe, + 0x6b, 0x8f, 0xd3, 0xb4, 0x01, 0x03, 0x48, 0x61, 0x1a, 0xbd, 0xcb, 0xd4, 0x9f, + 0xe4, 0xf8, 0x5b, 0x62, 0x3c, 0x78, 0x28, 0xc7, 0x13, 0x82, 0xe1, 0x03, 0x4e, + 0xa6, 0x7b, 0xc8, 0xae, 0x97, 0x40, 0x4b, 0x0c, 0x50, 0xb2, 0xfa, 0xda, 0x0a, + 0xbf, 0x4f, 0xd3, 0xa8, 0xbf, 0x7f, 0x3c, 0x0b, 0x38, 0xb2, 0xb0, 0x8d, 0xd4, + 0xba, 0xe0, 0x8a, 0xc8, 0xf5, 0x09, 0xc5, 0x97, 0x22, 0x39, 0x43, 0x9c, 0x3c, + 0x08, 0x02, 0x54, 0x14, 0x94, 0x36, 0x49, 0x30, 0x55, 0x21, 0x32, 0x6b, 0xde, + 0x08, 0x56, 0x30, 0x86, 0x46, 0x29, 0x29, 0x1b, 0xae, 0x25, 0xff, 0x88, 0x22, + 0xa1, 0x4c, 0x4b, 0x66, 0x6a, 0x92, 0x59, 0xad, 0x0d, 0x00, 0x00, + ], + txid: [ + 0xfc, 0xda, 0x37, 0x09, 0xc1, 0x97, 0x22, 0x60, 0x1d, 0x47, 0xc8, 0x9d, 0x7f, + 0xf5, 0x79, 0x7c, 0x6a, 0xb9, 0xcb, 0x85, 0xf3, 0xda, 0xee, 0xe3, 0x91, 0x9b, + 0xcc, 0xc5, 0x16, 0xad, 0x33, 0x5b, + ], + auth_digest: [ + 0x92, 0x6a, 0x20, 0x24, 0xb5, 0x7b, 0x11, 0x48, 0x33, 0xf7, 0x2a, 0x38, 0x7e, + 0x67, 0x2a, 0x60, 0x65, 0x6e, 0xf3, 0x28, 0x0b, 0xf0, 0x7e, 0x3b, 0x6d, 0x15, + 0xbd, 0x31, 0x49, 0x04, 0x18, 0x10, + ], + amounts: vec![221157483985475, 1614190427764494], + script_pubkeys: vec![vec![], vec![0x53, 0x51]], + transparent_input: Some(0), + sighash_shielded: [ + 0x4f, 0x7c, 0xed, 0xe7, 0x12, 0x2e, 0x4a, 0x9e, 0x6a, 0x8a, 0x61, 0x62, 0x97, + 0x32, 0x77, 0x9a, 0x9b, 0x76, 0xe1, 0x8e, 0xa3, 0x84, 0x49, 0x9d, 0x7e, 0xcf, + 0xd2, 0xf1, 0x45, 0x33, 0x36, 0xae, + ], + sighash_all: Some([ + 0x0d, 0xab, 0x96, 0x60, 0xb0, 0xd8, 0xcd, 0xe4, 0x89, 0x05, 0x34, 0xab, 0x8c, + 0xb0, 0xa3, 0x13, 0x9b, 0xeb, 0x33, 0x74, 0xb9, 0x5d, 0x8d, 0x46, 0x0b, 0x38, + 0x3c, 0x0e, 0x6c, 0x96, 0x84, 0x66, + ]), + sighash_none: Some([ + 0x87, 0xf1, 0x49, 0x9b, 0xd1, 0xa1, 0x1d, 0xfa, 0x19, 0xb0, 0xf9, 0x25, 0xb2, + 0x91, 0x3e, 0xd0, 0xe4, 0x80, 0xb8, 0xb0, 0xf4, 0x0f, 0x74, 0xba, 0x5f, 0x02, + 0x1d, 0x5d, 0xcf, 0x53, 0xac, 0xc1, + ]), + sighash_single: Some([ + 0xc8, 0x0b, 0xcb, 0xad, 0xb5, 0x33, 0xe5, 0x17, 0x5b, 0x10, 0xc2, 0x22, 0x34, + 0xe3, 0x76, 0x58, 0x83, 0x71, 0xea, 0x68, 0xa2, 0x34, 0xeb, 0x6e, 0xe0, 0x5e, + 0x9b, 0xcd, 0xf3, 0x41, 0xdf, 0xf0, + ]), + sighash_all_anyone: Some([ + 0xbe, 0x35, 0xea, 0x86, 0x41, 0x96, 0x36, 0x50, 0x23, 0x2a, 0x58, 0xed, 0x3e, + 0x86, 0x0d, 0x74, 0xec, 0x4d, 0x92, 0xc3, 0x0e, 0x9d, 0x5d, 0x04, 0x3e, 0xb3, + 0x9f, 0xe3, 0x69, 0x08, 0x98, 0x8d, + ]), + sighash_none_anyone: Some([ + 0xae, 0xe9, 0xc2, 0x7d, 0x20, 0x29, 0x5b, 0xb6, 0xaf, 0x1a, 0x40, 0x2c, 0xf3, + 0xda, 0x9b, 0x3d, 0x6a, 0x06, 0x3f, 0x41, 0x33, 0xd2, 0x19, 0xe3, 0xaa, 0x3b, + 0xc2, 0x51, 0x85, 0xda, 0xb9, 0x86, + ]), + sighash_single_anyone: Some([ + 0xa7, 0x10, 0x7a, 0x19, 0xf3, 0xad, 0x7f, 0x4e, 0x29, 0xb7, 0x67, 0xb9, 0x3f, + 0x78, 0x67, 0x4c, 0x84, 0x2d, 0x04, 0xbd, 0xc5, 0xb2, 0x26, 0x5b, 0xcb, 0x3f, + 0x40, 0x5f, 0xff, 0x6e, 0x00, 0xa0, + ]), + }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x47, + 0x70, 0x1c, 0x85, 0x97, 0x65, 0x43, 0x11, 0x02, 0xa6, 0xfa, 0x0b, 0xf2, 0x99, + 0x99, 0x56, 0xfb, 0xfd, 0x0e, 0xe6, 0x8e, 0xc3, 0x6e, 0x46, 0x88, 0x80, 0x9a, + 0xe2, 0x31, 0xeb, 0x8b, 0xc4, 0x36, 0x9f, 0x5f, 0xe1, 0x57, 0x3f, 0x57, 0xe0, + 0x99, 0xd9, 0xc0, 0x99, 0x01, 0x05, 0x51, 0x52, 0xac, 0x00, 0xac, 0x11, 0x95, + 0x6a, 0x8a, 0xe9, 0x05, 0xea, 0xd8, 0x69, 0x54, 0x54, 0x7c, 0x44, 0x8a, 0xe4, + 0x3d, 0x31, 0x5e, 0x66, 0x9c, 0x42, 0x42, 0xda, 0x56, 0x59, 0x38, 0xf4, 0x17, + 0xbf, 0x43, 0xce, 0x7b, 0x2b, 0x30, 0xb1, 0xcd, 0x40, 0x18, 0x38, 0x8e, 0x06, + 0x51, 0x6a, 0x6a, 0xac, 0x6a, 0x00, 0x87, 0x7a, 0x59, 0x25, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x23, 0xc7, 0x84, 0xc5, 0xb8, 0x7c, 0xc8, 0xa3, 0xc6, 0x80, 0xc7, + 0xb8, 0xc6, 0x9c, 0xc7, 0xba, 0xc5, 0xa1, 0xc4, 0xb5, 0xc7, 0x82, 0xc4, 0x84, + 0xc3, 0x87, 0xc7, 0x9c, 0xc4, 0x82, 0xc3, 0xb3, 0xc5, 0x97, 0xc8, 0x96, 0x01, + 0x7d, 0x04, 0x25, 0x3c, 0x63, 0x63, 0x6e, 0x16, 0x67, 0x60, 0xed, 0xbf, 0x73, + 0x94, 0x77, 0xe6, 0xe3, 0x0f, 0xfb, 0xde, 0x57, 0xf2, 0x88, 0x08, 0x43, 0x4c, + 0xf5, 0xb6, 0x60, 0xa1, 0xad, 0x28, 0x85, 0x7a, 0xc9, 0xd6, 0xc9, 0x27, 0x6a, + 0x87, 0x90, 0x80, 0x0d, 0xca, 0x8a, 0x8c, 0x31, 0x44, 0x3c, 0x10, 0x34, 0xd1, + 0xf3, 0x1a, 0x0f, 0xd2, 0x02, 0xe6, 0xa0, 0x9c, 0xa8, 0x7c, 0xc2, 0xd5, 0xca, + 0x02, 0xa9, 0x13, 0x8d, 0xd1, 0x78, 0xe0, 0xab, 0x58, 0xe8, 0x52, 0x44, 0xa7, + 0x2e, 0xdf, 0x72, 0x7d, 0x00, 0x06, 0x14, 0xe8, 0x35, 0x62, 0xf8, 0x2d, 0xfd, + 0x40, 0x5b, 0x54, 0xa4, 0x5e, 0xb3, 0x2c, 0x16, 0x54, 0x48, 0xd4, 0xd5, 0xd6, + 0x1c, 0xa2, 0x85, 0x95, 0x85, 0x36, 0x9f, 0x53, 0xf1, 0xa1, 0x37, 0xe9, 0xe8, + 0x2b, 0x67, 0xb8, 0xfd, 0xaf, 0x01, 0xbd, 0xa5, 0x4a, 0x31, 0x73, 0x11, 0x89, + 0x6a, 0xe1, 0x02, 0x80, 0xa0, 0x32, 0x44, 0x0c, 0x42, 0x0a, 0x42, 0x1e, 0x94, + 0x4d, 0x1e, 0x95, 0x2b, 0x00, 0xd6, 0x41, 0x5b, 0xc4, 0xaa, 0xc2, 0xb7, 0xc7, + 0x90, 0xce, 0x87, 0xc6, 0x8a, 0xcd, 0xb7, 0xe1, 0x9a, 0xbe, 0xc8, 0xb4, 0xc2, + 0xaa, 0x29, 0x41, 0xc6, 0x82, 0xe1, 0x9b, 0xab, 0xc6, 0xb3, 0xc6, 0x88, 0xc8, + 0xac, 0xc6, 0x80, 0xc5, 0x94, 0xc6, 0x94, 0xe1, 0x9a, 0xaf, 0xce, 0x88, 0xc7, + 0xb8, 0xc8, 0xa9, 0x33, 0xc3, 0xbd, 0xc8, 0x93, 0xc4, 0xb5, 0xc7, 0xb9, 0x31, + 0x4e, 0xc5, 0xa8, 0xc7, 0x88, 0xc8, 0x99, 0xc6, 0x97, 0xc5, 0x91, 0xe1, 0x9a, + 0xa3, 0xc6, 0x8c, 0xc7, 0xa7, 0xc6, 0xbf, 0x4a, 0xc7, 0x89, 0xc5, 0x89, 0xc2, + 0xa9, 0xc8, 0x87, 0xc7, 0x86, 0x65, 0xc8, 0x99, 0xc3, 0x84, 0xc7, 0xa7, 0x62, + 0xc3, 0xb5, 0xe1, 0x9a, 0xad, 0xc6, 0xbb, 0xc6, 0x98, 0xe2, 0xb1, 0xa0, 0xc5, + 0xbb, 0xc6, 0xb6, 0xe2, 0xb1, 0xa6, 0xc3, 0x8e, 0xe1, 0x9a, 0xb9, 0x3a, 0xc8, + 0x86, 0xc6, 0x87, 0x52, 0xc4, 0xa4, 0xc3, 0x9f, 0xc5, 0x8b, 0x7d, 0xe1, 0x9a, + 0xb6, 0xc5, 0xb8, 0xc8, 0x9e, 0xc3, 0x8d, 0xe2, 0xb1, 0xaa, 0xc8, 0xb0, 0xc7, + 0xaf, 0x26, 0xc5, 0x94, 0xe1, 0x9a, 0xb1, 0xc8, 0xb1, 0xc5, 0xa3, 0xcd, 0xb4, + 0xc8, 0x97, 0xc3, 0xb2, 0xce, 0x8c, 0xc3, 0xba, 0xc4, 0xb0, 0xc5, 0xb6, 0xc4, + 0x8b, 0x74, 0x72, 0xc3, 0xae, 0x35, 0xc6, 0xa3, 0xc4, 0x98, 0xc7, 0x94, 0xc8, + 0x98, 0xc4, 0xaa, 0x42, 0xe1, 0x9b, 0x95, 0xc5, 0x97, 0xc7, 0xaa, 0x74, 0xc5, + 0x9e, 0x2a, 0xc4, 0x95, 0xc2, 0xb7, 0xc5, 0x8b, 0xe1, 0x9a, 0xa4, 0x5a, 0x04, + 0x37, 0xb7, 0xb2, 0x19, 0xb4, 0xa3, 0x61, 0x6d, 0xf2, 0xd8, 0xe7, 0x7a, 0x20, + 0x5c, 0x89, 0x95, 0x91, 0x07, 0x76, 0xd5, 0xfa, 0x3d, 0x32, 0xde, 0xe8, 0x0d, + 0xb6, 0x01, 0xf3, 0xed, 0xd3, 0xaf, 0xc8, 0x5f, 0xb7, 0x56, 0x0c, 0x53, 0x48, + 0xc6, 0x9c, 0x41, 0x93, 0xa8, 0xbb, 0xfd, 0x05, 0x2c, 0xbf, 0x7e, 0x1c, 0xfc, + 0xb7, 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, + 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, + 0x26, 0xe0, 0x96, 0xd8, 0xb1, 0xe4, 0x95, 0x4b, 0x54, 0x81, 0x3b, 0xb3, 0x3f, + 0x08, 0xd5, 0x62, 0xba, 0x51, 0x3f, 0xee, 0x1b, 0x09, 0xc0, 0xfc, 0xd5, 0x16, + 0x05, 0x54, 0x19, 0x47, 0x4d, 0xd7, 0xfd, 0xa0, 0x38, 0xa8, 0x1c, 0x84, 0xea, + 0x7b, 0x94, 0x68, 0x28, 0x7f, 0x0e, 0xb0, 0xc1, 0x0c, 0x4b, 0x13, 0x25, 0x20, + 0x19, 0x4d, 0x3d, 0x8d, 0x53, 0x51, 0xfc, 0x10, 0xd0, 0x9c, 0x15, 0xc8, 0xcc, + 0x10, 0x1a, 0xa1, 0x66, 0x0c, 0xd7, 0xde, 0xdd, 0xca, 0x3b, 0x40, 0xfa, 0xee, + 0x54, 0x3f, 0x2d, 0x44, 0x34, 0x58, 0xb1, 0xcf, 0xe1, 0xb9, 0xd4, 0x63, 0x91, + 0xf8, 0x47, 0x49, 0x05, 0xc5, 0xf7, 0xf2, 0x13, 0x55, 0x15, 0x79, 0x16, 0x71, + 0xe5, 0x35, 0xa1, 0x74, 0xd6, 0x7b, 0x5d, 0x13, 0xf8, 0x1f, 0x46, 0xdf, 0x7a, + 0x90, 0x2a, 0x40, 0xfc, 0xb7, 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, + 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, + 0xe8, 0xa7, 0xb3, 0x4d, 0x26, 0xe0, 0x96, 0xd8, 0xb1, 0xca, 0x0d, 0x67, 0xf6, + 0xe5, 0x54, 0x12, 0x47, 0x39, 0xf8, 0x05, 0xaf, 0x87, 0x6a, 0xee, 0xde, 0x53, + 0xaa, 0x8b, 0x0f, 0x8e, 0x56, 0x04, 0xa7, 0x3c, 0x30, 0xcb, 0xd0, 0x9d, 0xad, + 0x96, 0x3d, 0x6f, 0x8a, 0x5d, 0xcc, 0x40, 0xde, 0xf4, 0x07, 0x97, 0x34, 0x21, + 0x13, 0xba, 0x20, 0x6f, 0xae, 0x8e, 0xbe, 0x4f, 0x3b, 0xc3, 0xca, 0xf6, 0x92, + 0x59, 0xe4, 0x62, 0xef, 0xf9, 0xba, 0x8b, 0x3f, 0xcc, 0x95, 0xbe, 0xce, 0x3d, + 0xfd, 0xfc, 0xe5, 0xcf, 0x9e, 0x1b, 0x41, 0x96, 0xa6, 0x13, 0x2e, 0x53, 0x11, + 0xfa, 0xac, 0xd6, 0x21, 0xef, 0xee, 0x9f, 0x66, 0x2d, 0xb4, 0x9a, 0x3c, 0x6e, + 0x14, 0x2c, 0x18, 0x4a, 0x79, 0x6c, 0x2b, 0xb9, 0xf0, 0x3a, 0x95, 0x35, 0x72, + 0xba, 0x5d, 0x42, 0x87, 0xc0, 0xce, 0xfb, 0xfc, 0xb7, 0x3c, 0xb0, 0x33, 0x97, + 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, + 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, 0x26, 0xe0, 0x96, 0xd8, 0xb1, + 0x27, 0x43, 0x3f, 0x9e, 0x49, 0xd3, 0xaa, 0x09, 0xe3, 0x56, 0xd8, 0xd6, 0x6d, + 0x0c, 0x01, 0x21, 0xe9, 0x1a, 0x3c, 0x4a, 0xa3, 0xf2, 0x7f, 0xa1, 0xb6, 0x33, + 0x96, 0xe2, 0xb4, 0x1d, 0xb9, 0x08, 0xfd, 0xab, 0x8b, 0x18, 0xcc, 0x73, 0x04, + 0xe9, 0x4e, 0x97, 0x05, 0x68, 0xf9, 0x42, 0x1c, 0x0d, 0xbb, 0xba, 0xf8, 0x45, + 0x98, 0xd9, 0x72, 0xb0, 0x53, 0x4f, 0x48, 0xa5, 0xe5, 0x26, 0x70, 0x43, 0x3a, + 0xf1, 0xb8, 0x24, 0x4d, 0x83, 0x88, 0x8d, 0x72, 0x32, 0xfa, 0x09, 0x3f, 0x81, + 0x5e, 0xa0, 0x2f, 0x9a, 0xb0, 0x31, 0xe1, 0x64, 0x6a, 0x5d, 0x62, 0x85, 0xdd, + 0x92, 0x57, 0x27, 0x81, 0x10, 0xf0, 0x38, 0x31, 0x64, 0x7d, 0xff, 0xf7, 0x23, + 0xe5, 0xe4, 0x3d, 0xc1, 0x48, 0xcb, 0x64, 0x97, 0x0e, 0x32, 0x23, 0xfc, 0xb7, + 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, + 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, 0x26, + 0xe0, 0x96, 0xd8, 0xb1, 0x01, 0xf5, 0xcd, 0xe5, 0xf0, 0x46, 0x80, 0xbb, 0xfe, + 0xd8, 0x7f, 0x6c, 0xf4, 0x29, 0xfb, 0x27, 0xad, 0x6b, 0xab, 0xe7, 0x91, 0x76, + 0x66, 0x11, 0xcf, 0x5b, 0xc2, 0x0e, 0x48, 0xbe, 0xf1, 0x19, 0x25, 0x9b, 0x9b, + 0x8a, 0x0e, 0x39, 0xc3, 0xdf, 0x28, 0xcb, 0x95, 0x82, 0xea, 0x33, 0x86, 0x01, + 0xcd, 0xc4, 0x81, 0xb3, 0x2f, 0xb8, 0x2a, 0xde, 0xeb, 0xb3, 0xda, 0xde, 0x25, + 0xd1, 0xa3, 0xdf, 0x00, 0xc4, 0xe1, 0x9b, 0x81, 0x75, 0xc8, 0xb6, 0xc5, 0x91, + 0x48, 0x21, 0xc3, 0x9b, 0xe1, 0x9b, 0x8e, 0xc8, 0xa7, 0xc7, 0x84, 0xc6, 0x8d, + 0x39, 0xc5, 0x9d, 0xc8, 0xba, 0xc4, 0x90, 0xc7, 0xad, 0xe2, 0xb1, 0xbd, 0xe2, + 0xb1, 0xbe, 0xc2, 0xa5, 0xc4, 0x8b, 0xe1, 0x9a, 0xb6, 0xe1, 0x9a, 0xac, 0xc5, + 0x95, 0xe1, 0x9b, 0xa6, 0x7d, 0xc7, 0xb8, 0xc6, 0x9d, 0xc2, 0xa4, 0xc6, 0xb8, + 0xc7, 0xa9, 0xc5, 0x86, 0xc8, 0x8d, 0xc2, 0xa5, 0xc4, 0x8f, 0xce, 0x86, 0xc5, + 0xb0, 0xc2, 0xa8, 0x51, 0xe1, 0x9b, 0x90, 0xc4, 0x93, 0xc6, 0xb7, 0xc8, 0xb8, + 0xc4, 0x8c, 0xe2, 0xb1, 0xa5, 0xe1, 0x9b, 0x83, 0xc9, 0x89, 0x40, 0xce, 0x84, + 0xc6, 0xb8, 0xc5, 0x80, 0xe1, 0x9b, 0x9e, 0xc7, 0xbe, 0xc5, 0xbd, 0xc6, 0xb3, + 0xe1, 0x9b, 0x91, 0xc3, 0x80, 0x7e, 0xc9, 0x86, 0xe2, 0xb1, 0xaf, 0xc4, 0x91, + 0xc2, 0xbd, 0xe1, 0x9b, 0xa4, 0xc5, 0x98, 0xc6, 0x85, 0xc4, 0x8e, 0xc7, 0x8a, + 0xc8, 0xb5, 0xc4, 0xaa, 0xc3, 0x93, 0xe1, 0x9b, 0x99, 0xc4, 0x9c, 0xe2, 0xb1, + 0xac, 0x2f, 0xc4, 0x87, 0xc3, 0xb3, 0x34, 0xc6, 0x9a, 0xe1, 0x9a, 0xb1, 0xcd, + 0xb0, 0xe1, 0x9b, 0xaf, 0xc5, 0xbf, 0xc7, 0x85, 0xc7, 0x88, 0xe2, 0xb1, 0xb2, + 0xc7, 0x94, 0xc5, 0xae, 0xc3, 0x87, 0xc8, 0xba, 0x5a, 0xc4, 0x83, 0xc7, 0xb7, + 0xe1, 0x9b, 0x96, 0xc7, 0x9d, 0x5a, 0x01, 0x14, 0x02, 0xa3, 0x2d, 0x23, 0x22, + 0x5f, 0x8e, 0x47, 0xe7, 0x42, 0xe4, 0x5b, 0x77, 0xba, 0x92, 0xf7, 0x7c, 0xdd, + 0x2a, 0xae, 0x00, 0x50, 0x60, 0x8d, 0x0a, 0x06, 0xde, 0x70, 0x44, 0xe3, 0x94, + 0xac, 0xf8, 0x01, 0xb6, 0xee, 0x94, 0xa8, 0x5d, 0x32, 0x19, 0x34, 0x60, 0x4e, + 0x47, 0x99, 0x70, 0x16, 0xb3, 0x04, 0xbd, 0xa0, 0x65, 0x5f, 0x62, 0x60, 0xae, + 0x11, 0xd2, 0x50, 0xdc, 0xa8, 0x87, 0x71, 0xd9, 0x0e, 0x71, 0xbd, 0xc0, 0xff, + 0xf7, 0x78, 0xca, 0x9b, 0x89, 0x02, 0x6d, 0x38, 0x8a, 0x0e, 0x77, 0x1d, 0xd2, + 0xcf, 0x77, 0x73, 0xb6, 0xba, 0x2a, 0x5f, 0x66, 0x48, 0x47, 0xbf, 0x70, 0x7f, + 0x2f, 0xc1, 0x0c, 0x98, 0xf2, 0xf0, 0x06, 0xec, 0x22, 0xcc, 0xb5, 0xa8, 0xc8, + 0xb7, 0xc4, 0x0c, 0x7c, 0x2d, 0x49, 0xa6, 0x63, 0x9b, 0x9f, 0x2c, 0xe3, 0x3c, + 0x25, 0xc0, 0x4b, 0xc4, 0x61, 0xe7, 0x44, 0xdf, 0xa5, 0x36, 0xb0, 0x0d, 0x94, + 0xba, 0xdd, 0xf4, 0xf4, 0xd1, 0x40, 0x44, 0xc6, 0x95, 0xa3, 0x38, 0x01, 0xfd, + 0x48, 0x01, 0xe1, 0x9b, 0xad, 0x5f, 0x48, 0xc6, 0x89, 0xc3, 0x9a, 0xe1, 0x9b, + 0xaf, 0xe2, 0xb1, 0xb1, 0xc6, 0x8e, 0x48, 0xc7, 0x83, 0xc2, 0xb9, 0xc5, 0x84, + 0x23, 0xc7, 0x85, 0xc8, 0xa5, 0xc5, 0xb9, 0xe1, 0x9a, 0xa2, 0xcd, 0xb3, 0xe1, + 0x9b, 0xad, 0xc3, 0xad, 0xe2, 0xb1, 0xae, 0xc5, 0x85, 0xc5, 0x82, 0xe1, 0x9a, + 0xb0, 0x23, 0xc7, 0x9e, 0xe2, 0xb1, 0xa4, 0xcd, 0xbe, 0xe1, 0x9b, 0x88, 0xc7, + 0xa7, 0xe1, 0x9b, 0xb0, 0x7d, 0xc6, 0xb5, 0xc5, 0xbc, 0x39, 0x67, 0xc9, 0x82, + 0xc6, 0x8c, 0xe2, 0xb1, 0xba, 0xc3, 0xae, 0xc6, 0xa2, 0xc4, 0xb4, 0x44, 0x65, + 0xcd, 0xbd, 0xc4, 0x87, 0xe1, 0x9b, 0x8b, 0xcd, 0xbb, 0x59, 0x3e, 0x61, 0xc7, + 0xb3, 0x74, 0x37, 0xc8, 0xb8, 0xc3, 0xa4, 0xc7, 0x81, 0xc3, 0xb1, 0xc8, 0xaa, + 0xc7, 0xbc, 0xc2, 0xb2, 0xc2, 0xbe, 0xc3, 0xab, 0xc5, 0xb5, 0xc6, 0x8f, 0xe1, + 0x9a, 0xa0, 0xc8, 0xa0, 0xc7, 0xae, 0xc3, 0x94, 0xe1, 0x9b, 0x85, 0xe1, 0x9b, + 0xad, 0xe2, 0xb1, 0xbc, 0xc6, 0xa4, 0xe1, 0x9a, 0xa1, 0xc5, 0xae, 0xc5, 0xa4, + 0xe2, 0xb1, 0xa7, 0xe1, 0x9a, 0xb5, 0xc4, 0xa1, 0x4c, 0xc7, 0xbe, 0xc5, 0xb8, + 0xe1, 0x9a, 0xbb, 0xc5, 0x87, 0xc4, 0x80, 0xe1, 0x9a, 0xa5, 0xc8, 0xa1, 0xc8, + 0x87, 0x7d, 0xc6, 0xbb, 0xe1, 0x9b, 0xa3, 0xc5, 0x85, 0xc2, 0xb0, 0xc7, 0xb5, + 0xc2, 0xab, 0xc2, 0xb2, 0xc6, 0x87, 0xc5, 0xb4, 0x63, 0xc9, 0x86, 0xe1, 0x9a, + 0xbc, 0xe1, 0x9b, 0x9d, 0xe1, 0x9a, 0xab, 0xc4, 0x9e, 0xc2, 0xa3, 0xc8, 0x9f, + 0xc6, 0xb9, 0xc7, 0x99, 0xc7, 0xa7, 0xc5, 0xac, 0xcd, 0xb4, 0xc6, 0x98, 0xc6, + 0x85, 0xc6, 0xa7, 0xc6, 0xbc, 0xc8, 0xbd, 0xc6, 0xa9, 0xc5, 0xa4, 0xc4, 0x8a, + 0x25, 0xce, 0x8c, 0xe1, 0x9b, 0x9c, 0xc4, 0xa9, 0xc4, 0x94, 0xe2, 0xb1, 0xaa, + 0xe1, 0x9b, 0x81, 0xc7, 0x9a, 0xc6, 0xa4, 0xc8, 0xbb, 0xe1, 0x9b, 0x97, 0xc5, + 0xa8, 0xc3, 0x87, 0xe2, 0xb1, 0xa5, 0x79, 0xe1, 0x9a, 0xa0, 0xc6, 0xbe, 0x6f, + 0xc3, 0xbb, 0xe2, 0xb1, 0xb6, 0x5b, 0xc3, 0xa1, 0xc6, 0x94, 0xce, 0x8c, 0xe1, + 0x9b, 0x94, 0xc3, 0xaf, 0xce, 0x87, 0xc5, 0xa3, 0xe1, 0x9a, 0xa1, 0x44, 0xe1, + 0x9b, 0x82, 0xc6, 0x86, 0x78, 0x41, 0x4f, 0xc4, 0xa0, 0xc6, 0x92, 0xe1, 0x9a, + 0xa0, 0xc8, 0xae, 0xc7, 0x97, 0x02, 0x57, 0x64, 0x27, 0xb0, 0x8a, 0x45, 0x0b, + 0x7a, 0x98, 0x63, 0x35, 0x00, 0x1e, 0x63, 0x21, 0x7b, 0x81, 0x31, 0x04, 0x2f, + 0x3a, 0xe0, 0x12, 0x19, 0x21, 0x33, 0x60, 0xfe, 0x9e, 0x20, 0x2c, 0x9e, 0x9c, + 0x9f, 0x64, 0xbb, 0x3a, 0x11, 0xcc, 0xac, 0x23, 0x04, 0x88, 0x6a, 0xe1, 0x01, + 0x0b, 0x0d, 0xfd, 0x9c, 0xb2, 0x29, 0x42, 0x34, 0x86, 0xf4, 0x99, 0x35, 0x9f, + 0x32, 0x0a, 0x30, 0xff, 0x48, 0x8f, 0x90, 0x41, 0x7f, 0xef, 0xc7, 0xcb, 0x9f, + 0xbc, 0x77, 0x7c, 0xbc, 0xf3, 0x8d, 0x79, 0x14, 0x27, 0xa0, 0x0d, 0x54, 0x3e, + 0x45, 0xf9, 0x97, 0x49, 0xcc, 0x4d, 0x61, 0xf2, 0xe8, 0xaa, 0xbf, 0xe9, 0x8b, + 0xd9, 0x05, 0xfa, 0x39, 0x95, 0x1b, 0x33, 0xea, 0x76, 0x9c, 0x45, 0xab, 0x95, + 0x31, 0xc5, 0x72, 0x09, 0x86, 0x2a, 0xd1, 0x2f, 0xd7, 0x6b, 0xa4, 0x80, 0x7e, + 0x65, 0x41, 0x7b, 0x6c, 0xd1, 0x2f, 0xa8, 0xec, 0x91, 0x6f, 0x01, 0x3e, 0xbb, + 0x87, 0x06, 0xa9, 0x6e, 0xff, 0xed, 0xa0, 0x6c, 0x4b, 0xe2, 0x13, 0x1c, 0x18, + 0x38, 0xff, 0x75, 0x7d, 0x92, 0x6c, 0xb3, 0x5f, 0xed, 0x6a, 0xb4, 0x95, 0x95, + 0x79, 0x54, 0x80, 0x21, 0xc0, 0xb1, 0xc0, 0x83, 0x22, 0xb1, 0xad, 0xf2, 0x7c, + 0x87, 0xad, 0x45, 0x09, 0x09, 0xd8, 0x92, 0x4c, 0x9c, 0x07, 0x10, 0xd7, 0x9a, + 0x19, 0x0f, 0x28, 0x41, 0xcf, 0x3a, 0x1c, 0x6a, 0xb5, 0x29, 0x42, 0x34, 0x86, + 0xf4, 0x99, 0x35, 0x9f, 0x32, 0x0a, 0x30, 0xff, 0x48, 0x8f, 0x90, 0x41, 0x7f, + 0xef, 0xc7, 0xcb, 0x9f, 0xbc, 0x77, 0x7c, 0xbc, 0xf3, 0x8d, 0x79, 0x14, 0x27, + 0xa0, 0x0d, 0xe2, 0xd0, 0x91, 0x30, 0xf6, 0x35, 0x11, 0xda, 0x54, 0x83, 0x2d, + 0xe9, 0x13, 0x6b, 0x39, 0xf4, 0x59, 0x9f, 0x5a, 0xa5, 0xdf, 0xbb, 0x45, 0xda, + 0x60, 0xcd, 0xce, 0xab, 0x7e, 0xef, 0xde, 0x09, 0xbe, 0x63, 0xf3, 0xf7, 0xc0, + 0xd2, 0x32, 0x48, 0x47, 0xcc, 0xe1, 0x40, 0x5d, 0xef, 0x7c, 0x46, 0x9b, 0x0e, + 0x27, 0x24, 0x94, 0xe5, 0xdf, 0x54, 0xf5, 0x68, 0x65, 0x6c, 0xb9, 0xc8, 0x81, + 0x8d, 0x00, 0xcc, 0x2f, 0x77, 0xf8, 0xf4, 0x9b, 0x12, 0xea, 0x88, 0xf4, 0xed, + 0xe1, 0x8a, 0x4a, 0x0f, 0x87, 0x83, 0xe2, 0x62, 0x2f, 0x87, 0x92, 0x28, 0x58, + 0xfe, 0x1d, 0x2f, 0x05, 0xee, 0x30, 0xf3, 0x34, 0xb7, 0x2b, 0x8b, 0xc3, 0x4d, + 0xb7, 0xbb, 0x31, 0x12, 0x48, 0x7e, 0x74, 0x6e, 0xef, 0xe4, 0xe8, 0x08, 0xbb, + 0xb2, 0x87, 0xd9, 0x9b, 0xf0, 0x7d, 0x00, 0xda, 0xbe, 0xde, 0xdc, 0x5e, 0x5f, + 0x07, 0x4f, 0xfe, 0xae, 0x0c, 0xba, 0x7d, 0xa3, 0xa5, 0x16, 0xc1, 0x73, 0xbe, + 0x1c, 0x51, 0x33, 0x23, 0xe1, 0x19, 0xf6, 0x35, 0xe8, 0x20, 0x9a, 0x07, 0x4b, + 0x21, 0x6b, 0x70, 0x23, 0xfa, 0xdc, 0x2d, + ], + txid: [ + 0x08, 0x71, 0xcd, 0x94, 0x4b, 0x8e, 0x88, 0x83, 0x7c, 0xcc, 0x8b, 0xdf, 0xef, + 0xbd, 0x20, 0x55, 0x76, 0xce, 0xc7, 0x4d, 0xa3, 0xc9, 0x8d, 0xe4, 0x4f, 0xed, + 0xd9, 0xe2, 0xe4, 0x08, 0x8c, 0xce, + ], + auth_digest: [ + 0x22, 0x22, 0x94, 0xe9, 0xcf, 0xb9, 0xc4, 0xa5, 0xdb, 0x63, 0xc7, 0xfb, 0x2b, + 0xf8, 0x3d, 0x74, 0x8d, 0xdb, 0x6e, 0x7c, 0xcf, 0xd0, 0x44, 0xf1, 0xa7, 0x8e, + 0x50, 0x24, 0x21, 0x02, 0xcb, 0x82, + ], + amounts: vec![985817606177519, 110857430570820], + script_pubkeys: vec![ + vec![0xac, 0xac, 0x00, 0x53, 0x65, 0x51, 0x53], + vec![0x52, 0x63, 0xac, 0x00, 0x53], + ], + transparent_input: Some(1), + sighash_shielded: [ + 0x4f, 0x60, 0xd5, 0x73, 0x97, 0x78, 0xf2, 0x90, 0xdb, 0x40, 0x03, 0x2c, 0x70, + 0x71, 0x2c, 0x64, 0x71, 0x8f, 0x6e, 0x1d, 0x43, 0x23, 0x7a, 0x9d, 0xdd, 0x00, + 0xd7, 0x49, 0x24, 0x8b, 0x66, 0x97, + ], + sighash_all: Some([ + 0xac, 0x1c, 0xf6, 0x49, 0x10, 0x1d, 0x54, 0x48, 0xcd, 0x57, 0xb4, 0xd0, 0xd6, + 0x56, 0x5d, 0xc3, 0x45, 0x3e, 0x57, 0x09, 0x31, 0x85, 0x32, 0xf1, 0xb2, 0x40, + 0xb5, 0x8c, 0x90, 0x01, 0xfd, 0x81, + ]), + sighash_none: Some([ + 0xbd, 0xdd, 0xf7, 0x42, 0x8a, 0xf7, 0xad, 0xab, 0xe2, 0xf6, 0x80, 0x83, 0x2e, + 0xa6, 0x65, 0x04, 0x9b, 0x42, 0xec, 0xc3, 0x47, 0x5e, 0x9a, 0xd2, 0xd9, 0x85, + 0x1b, 0x03, 0x7d, 0x1a, 0x0a, 0xba, + ]), + sighash_single: None, + sighash_all_anyone: Some([ + 0xe0, 0x86, 0xa3, 0xd6, 0xf8, 0x16, 0xe5, 0x1e, 0xf3, 0xeb, 0x6a, 0xa3, 0x92, + 0x5d, 0xdb, 0xb4, 0xc9, 0x64, 0xa3, 0x8a, 0x05, 0x07, 0xa9, 0x72, 0x88, 0xe5, + 0xb5, 0x7c, 0x4a, 0xb0, 0x34, 0x02, + ]), + sighash_none_anyone: Some([ + 0x26, 0x2f, 0xa5, 0x61, 0x86, 0x1d, 0x01, 0x29, 0xe9, 0x1b, 0x87, 0x6f, 0x69, + 0x14, 0x1e, 0xd5, 0xc6, 0x79, 0xa6, 0x82, 0x1b, 0x93, 0x0d, 0xdf, 0x4e, 0xda, + 0x51, 0x0f, 0x91, 0x67, 0x79, 0xac, + ]), + sighash_single_anyone: None, + }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xc9, + 0xac, 0xcb, 0x78, 0x2e, 0x6f, 0xe2, 0x05, 0x01, 0x7f, 0x0a, 0x95, 0x6f, 0x5b, + 0x85, 0x50, 0x99, 0x60, 0x28, 0x5c, 0x22, 0x62, 0x7c, 0x59, 0x48, 0x3a, 0x5a, + 0x4c, 0x28, 0xcc, 0xe4, 0xb1, 0x56, 0xe5, 0x51, 0x40, 0x6a, 0x7e, 0xe8, 0x35, + 0x56, 0x56, 0xa2, 0x1e, 0x43, 0x01, 0xac, 0xe1, 0x29, 0xfd, 0xad, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x3f, 0xce, 0x8a, 0xc7, 0xb5, 0xc7, 0xbd, 0xc2, 0xae, 0x66, + 0xc6, 0xbd, 0xc8, 0xa0, 0xc7, 0x85, 0x4f, 0xe1, 0x9b, 0xa4, 0xc3, 0xb4, 0xe1, + 0x9b, 0x92, 0xc6, 0xa6, 0xc6, 0x95, 0xc5, 0x97, 0xc6, 0x97, 0xcd, 0xb2, 0xc6, + 0x81, 0xc8, 0xaa, 0xe1, 0x9b, 0x8a, 0xc7, 0xa0, 0xc4, 0xaa, 0xe1, 0x9b, 0xa9, + 0x79, 0xe2, 0xb1, 0xb2, 0xc8, 0xba, 0xc3, 0x96, 0xc8, 0x85, 0xe2, 0xb1, 0xb1, + 0xc5, 0x82, 0x04, 0x0d, 0xa2, 0x11, 0x23, 0xda, 0x72, 0xa0, 0x9c, 0xbe, 0x2f, + 0x4b, 0xe0, 0x37, 0xc3, 0xd9, 0x1a, 0x34, 0xe8, 0x75, 0xb7, 0xe2, 0xf1, 0x6a, + 0x39, 0x04, 0x54, 0xea, 0x93, 0x37, 0x1d, 0xde, 0x4e, 0x4f, 0x93, 0x30, 0xce, + 0x74, 0xbc, 0x73, 0xb1, 0xad, 0x1a, 0xa4, 0x36, 0xa8, 0xb7, 0x78, 0xd9, 0x7c, + 0xe4, 0x23, 0x62, 0xab, 0xef, 0x82, 0x8e, 0x28, 0x15, 0xb7, 0xe8, 0x87, 0x0b, + 0xd9, 0x7d, 0x69, 0x45, 0xfe, 0x43, 0xa6, 0x16, 0x4f, 0x61, 0x8a, 0x8f, 0x1b, + 0xce, 0xee, 0x48, 0x5b, 0xe5, 0x94, 0x89, 0x10, 0x01, 0x3d, 0x64, 0xb3, 0x2c, + 0xd1, 0x72, 0xef, 0xa5, 0x51, 0xbf, 0x7f, 0x36, 0x8f, 0x04, 0xbd, 0xae, 0xc6, + 0x09, 0x1a, 0x30, 0x04, 0xa7, 0x57, 0x59, 0x8b, 0x80, 0x1d, 0xcf, 0x67, 0x5c, + 0x38, 0x3e, 0x43, 0xa5, 0x3a, 0xe8, 0xb2, 0x54, 0xd3, 0x33, 0xbc, 0xda, 0x20, + 0xd4, 0x81, 0x7d, 0x34, 0x77, 0xab, 0xfb, 0xa2, 0x5b, 0xb8, 0x3d, 0xf5, 0x94, + 0x9c, 0x12, 0x6f, 0x14, 0x9b, 0x1d, 0x99, 0x4a, 0x19, 0x40, 0x6b, 0xca, 0x3f, + 0xba, 0x8a, 0x1a, 0x7b, 0x0f, 0xa2, 0x20, 0xfb, 0xf8, 0xc5, 0xe5, 0x3a, 0xf7, + 0xcb, 0xa4, 0x32, 0x35, 0x95, 0x78, 0xd7, 0x0d, 0x60, 0xce, 0xc3, 0xed, 0x9b, + 0xf0, 0x15, 0x85, 0x43, 0x76, 0x9e, 0x95, 0x53, 0x9f, 0x41, 0x2e, 0xca, 0x96, + 0xb2, 0x81, 0x4f, 0x6b, 0x26, 0xc3, 0x62, 0xab, 0xef, 0x82, 0x8e, 0x28, 0x15, + 0xb7, 0xe8, 0x87, 0x0b, 0xd9, 0x7d, 0x69, 0x45, 0xfe, 0x43, 0xa6, 0x16, 0x4f, + 0x61, 0x8a, 0x8f, 0x1b, 0xce, 0xee, 0x48, 0x5b, 0xe5, 0x94, 0x89, 0x10, 0xf4, + 0x4a, 0x21, 0x26, 0x6c, 0xfd, 0x84, 0x16, 0x33, 0x32, 0x7d, 0xee, 0x6c, 0xf8, + 0x10, 0xfb, 0xf7, 0x39, 0x3e, 0x31, 0x7d, 0x9e, 0x53, 0xd1, 0xbe, 0x1d, 0x5a, + 0xe7, 0x83, 0x9b, 0x66, 0x39, 0x43, 0xb9, 0xed, 0x18, 0xf2, 0xc5, 0x30, 0xe9, + 0x75, 0x42, 0x23, 0x32, 0xc3, 0x43, 0x9c, 0xce, 0x49, 0xa2, 0x9f, 0x2a, 0x33, + 0x6a, 0x48, 0x51, 0x26, 0x3c, 0x5e, 0x9b, 0xd1, 0x3d, 0x73, 0x11, 0x65, 0xcc, + 0xa7, 0x5c, 0xe3, 0xff, 0x66, 0xe0, 0xa5, 0x23, 0x46, 0x4c, 0xee, 0x45, 0x8a, + 0xf5, 0xbf, 0x43, 0xe5, 0x9d, 0x93, 0xd9, 0x53, 0xa3, 0xe6, 0x76, 0x2b, 0xd2, + 0x62, 0x0e, 0xa9, 0x4a, 0x20, 0x74, 0xa5, 0xf0, 0xfe, 0x44, 0xbf, 0x57, 0x73, + 0x6c, 0x8d, 0x55, 0x2f, 0xb3, 0x49, 0xe3, 0x5c, 0x15, 0xc5, 0x62, 0xab, 0xef, + 0x82, 0x8e, 0x28, 0x15, 0xb7, 0xe8, 0x87, 0x0b, 0xd9, 0x7d, 0x69, 0x45, 0xfe, + 0x43, 0xa6, 0x16, 0x4f, 0x61, 0x8a, 0x8f, 0x1b, 0xce, 0xee, 0x48, 0x5b, 0xe5, + 0x94, 0x89, 0x10, 0x2f, 0x29, 0x00, 0xd9, 0x9d, 0x31, 0x2d, 0x7b, 0x70, 0x50, + 0x8c, 0xf1, 0x76, 0x06, 0x6d, 0x15, 0x4d, 0xbe, 0x96, 0xef, 0x9d, 0x43, 0x67, + 0xe4, 0xc8, 0x40, 0xe4, 0xa1, 0x7b, 0x5e, 0x51, 0x22, 0xe8, 0xeb, 0xe2, 0x15, + 0x8a, 0x3c, 0x5f, 0x4c, 0xba, 0xe2, 0x1e, 0xa3, 0xfa, 0x1a, 0xe6, 0xc2, 0x5a, + 0x94, 0x62, 0xeb, 0xcb, 0xb0, 0xfd, 0x5f, 0x14, 0x55, 0x4b, 0xc9, 0x77, 0x47, + 0xc3, 0x3e, 0xba, 0xaa, 0x64, 0x7f, 0xc7, 0x71, 0xa4, 0xd0, 0xce, 0xea, 0xba, + 0xbd, 0xb4, 0x1c, 0x9f, 0x90, 0x30, 0x8d, 0x5b, 0x8d, 0xdb, 0xee, 0x76, 0xd7, + 0x5a, 0xee, 0x96, 0xbb, 0xb2, 0xae, 0x4c, 0x37, 0x03, 0xa5, 0x72, 0x5c, 0xe5, + 0x1d, 0x9c, 0xaa, 0x11, 0x4f, 0x8a, 0x2f, 0x24, 0xfd, 0x36, 0x44, 0x96, 0xb3, + 0xbe, 0x62, 0xab, 0xef, 0x82, 0x8e, 0x28, 0x15, 0xb7, 0xe8, 0x87, 0x0b, 0xd9, + 0x7d, 0x69, 0x45, 0xfe, 0x43, 0xa6, 0x16, 0x4f, 0x61, 0x8a, 0x8f, 0x1b, 0xce, + 0xee, 0x48, 0x5b, 0xe5, 0x94, 0x89, 0x10, 0xe1, 0xe9, 0xb2, 0x78, 0x29, 0xce, + 0x2a, 0xc5, 0xef, 0xd0, 0xb3, 0x99, 0xa8, 0xb4, 0x48, 0xbe, 0x65, 0x04, 0x29, + 0x4e, 0xe6, 0xb3, 0xc1, 0xc6, 0xa5, 0x34, 0x2d, 0x7c, 0x01, 0xae, 0x9d, 0x0a, + 0xd3, 0x07, 0x0c, 0x2b, 0x1a, 0x91, 0x57, 0x3a, 0xf5, 0xe0, 0xc5, 0xe4, 0xcb, + 0xbf, 0x4a, 0xcd, 0xc6, 0xb5, 0x4c, 0x92, 0x72, 0x20, 0x0d, 0x99, 0x70, 0x25, + 0x0c, 0x17, 0xc1, 0x03, 0x6f, 0x06, 0x00, 0xfd, 0x5d, 0x01, 0xe1, 0x9a, 0xb8, + 0xc6, 0xb3, 0xc4, 0xbd, 0x38, 0xc6, 0x87, 0xcd, 0xbe, 0xe1, 0x9a, 0xa7, 0xe1, + 0x9b, 0xaf, 0xc6, 0xa5, 0xe1, 0x9a, 0xbc, 0xe1, 0x9b, 0x8a, 0xc3, 0x8d, 0xc7, + 0xb0, 0xc7, 0xb9, 0xe1, 0x9b, 0x98, 0xe1, 0x9b, 0xa5, 0xcd, 0xbe, 0xc3, 0xbc, + 0xc6, 0xbf, 0xc3, 0xae, 0xe2, 0xb1, 0xa5, 0xc4, 0xa1, 0xc6, 0xb3, 0xe2, 0xb1, + 0xbe, 0xc5, 0x81, 0xc8, 0x8f, 0xc3, 0x89, 0xe1, 0x9b, 0xa2, 0xc4, 0xbd, 0xc3, + 0xaa, 0xc8, 0xa9, 0xce, 0x88, 0xe2, 0xb1, 0xad, 0xe1, 0x9a, 0xbc, 0x63, 0xc7, + 0x8e, 0xc6, 0x9b, 0xc4, 0xa0, 0x6a, 0xc5, 0x85, 0xc7, 0x8b, 0xc8, 0xaa, 0xc7, + 0xac, 0xc2, 0xb0, 0xc5, 0xb5, 0xc3, 0x97, 0x24, 0xc5, 0xad, 0xc9, 0x8e, 0xc4, + 0x8a, 0xc5, 0x97, 0xc4, 0xa6, 0xe1, 0x9b, 0x87, 0xc7, 0xac, 0xce, 0x89, 0xc5, + 0xba, 0xe2, 0xb1, 0xb6, 0x57, 0xc5, 0x9e, 0xe2, 0xb1, 0xba, 0xc8, 0x81, 0xc6, + 0xa1, 0xc8, 0xaf, 0xc5, 0x82, 0xc5, 0xb5, 0xc5, 0x9a, 0xc3, 0xa9, 0xc6, 0xae, + 0xc8, 0xab, 0xc8, 0x85, 0xe1, 0x9a, 0xb6, 0x69, 0xc9, 0x82, 0xc4, 0xbe, 0xe1, + 0x9b, 0xa6, 0xe2, 0xb1, 0xbb, 0xc4, 0xaa, 0xc6, 0x9b, 0x68, 0xc8, 0xba, 0x44, + 0xc6, 0x9e, 0xc7, 0x96, 0xe1, 0x9a, 0xbc, 0xcd, 0xbd, 0xc6, 0xab, 0xe2, 0xb1, + 0xa1, 0xc5, 0x9f, 0xc4, 0xa3, 0xe1, 0x9a, 0xbb, 0xe1, 0x9b, 0xa9, 0xc6, 0xa4, + 0xe1, 0x9b, 0x91, 0xc5, 0x8e, 0xc3, 0x84, 0xc7, 0xb1, 0x4d, 0x28, 0xe2, 0xb1, + 0xa6, 0xc4, 0x9c, 0xc7, 0x9c, 0xe1, 0x9b, 0x86, 0xc8, 0xb2, 0xc5, 0xa1, 0xc4, + 0xa3, 0xc5, 0x8c, 0xc5, 0x92, 0x3f, 0xc2, 0xae, 0xc3, 0x9b, 0xc4, 0x94, 0xc4, + 0x95, 0xc4, 0xa3, 0xce, 0x85, 0xe1, 0x9a, 0xa6, 0xc8, 0x89, 0xc4, 0x82, 0xc8, + 0x91, 0xe1, 0x9a, 0xa7, 0xc5, 0x8d, 0xe2, 0xb1, 0xa9, 0xc7, 0x88, 0xc6, 0x9f, + 0xc6, 0xbb, 0xe1, 0x9a, 0xbd, 0xc5, 0x94, 0xe1, 0x9a, 0xac, 0xc6, 0x9c, 0xcd, + 0xba, 0x2a, 0xce, 0x88, 0xe2, 0xb1, 0xb5, 0x65, 0xc4, 0x85, 0xc7, 0x82, 0xc7, + 0x95, 0xc6, 0x8a, 0xc6, 0x81, 0xc2, 0xb6, 0xc5, 0xa2, 0xc8, 0xa4, 0xe1, 0x9b, + 0x8f, 0xc3, 0xa3, 0xc8, 0x93, 0xe1, 0x9b, 0x9f, 0xc8, 0x99, 0xc4, 0x86, 0xc3, + 0x9d, 0xe1, 0x9b, 0x9c, 0xc8, 0x88, 0xc7, 0x92, 0xe1, 0x9b, 0x8f, 0xc7, 0x83, + 0xc3, 0xba, 0xc4, 0xaf, 0x43, 0xce, 0x8c, 0xc6, 0xb2, 0xc5, 0x97, 0xc7, 0x95, + 0xc3, 0x98, 0xc2, 0xb5, 0xc3, 0xa9, 0x78, 0x5a, 0x00, 0x00, 0x82, 0xe1, 0x9b, + 0x80, 0x60, 0xe1, 0x9b, 0x85, 0xe1, 0x9b, 0x97, 0xc8, 0x99, 0xc5, 0x83, 0xc3, + 0xb9, 0xc8, 0xa9, 0xc8, 0xaa, 0xc4, 0xb0, 0xc3, 0xa6, 0xc3, 0x8e, 0xcd, 0xb6, + 0xc8, 0xb8, 0x7d, 0xc5, 0xb5, 0xe2, 0xb1, 0xbd, 0xc3, 0x96, 0xc6, 0xb5, 0xc4, + 0x93, 0xc9, 0x83, 0xc7, 0x91, 0x45, 0xc7, 0xb0, 0xc7, 0xa6, 0xc5, 0xa3, 0xc8, + 0xb0, 0xc8, 0xbb, 0xe2, 0xb1, 0xa6, 0x23, 0xcd, 0xbb, 0x66, 0xc5, 0xbb, 0xc3, + 0xb9, 0xc4, 0xbe, 0xcd, 0xbe, 0xc4, 0xa3, 0xc7, 0x9f, 0xc7, 0x87, 0xc5, 0x80, + 0xc7, 0xb6, 0x5e, 0xc5, 0x85, 0xc7, 0xa7, 0xc4, 0x97, 0x39, 0xe1, 0x9a, 0xa8, + 0xc3, 0x97, 0xce, 0x8a, 0xc4, 0x8d, 0xc3, 0xa2, 0xc7, 0xad, 0xce, 0x89, 0x2a, + 0xe1, 0x9a, 0xba, 0xc6, 0xbe, 0xc2, 0xa1, 0xc4, 0x80, 0xc9, 0x82, 0xe1, 0x9b, + 0x80, 0xc6, 0x95, 0xc8, 0x93, 0xc7, 0xaa, 0xc7, 0xa7, 0x5a, 0x5a, 0x04, 0x66, + 0x45, 0xd7, 0x19, 0x91, 0x6b, 0xb8, 0xe8, 0xa4, 0xd1, 0x31, 0xcf, 0xbc, 0x01, + 0xb5, 0xe9, 0x7c, 0xab, 0x17, 0x73, 0xf8, 0xf4, 0x6e, 0x66, 0xb1, 0xee, 0xe2, + 0x8f, 0x6c, 0x17, 0x24, 0x82, 0x46, 0x1e, 0x0e, 0x4f, 0x42, 0xd8, 0xe6, 0xf7, + 0xeb, 0xf4, 0x36, 0x6a, 0xbf, 0xe1, 0xea, 0xa8, 0xca, 0x6c, 0xf4, 0x44, 0x74, + 0xa8, 0x00, 0x69, 0xb2, 0xc3, 0x63, 0x6d, 0xc7, 0x85, 0x7a, 0xef, 0xac, 0xd0, + 0xb0, 0xbf, 0x82, 0xbc, 0x75, 0xdd, 0x02, 0x0b, 0x45, 0x67, 0xbd, 0x86, 0x10, + 0x81, 0x10, 0x10, 0x98, 0xa0, 0xae, 0x2b, 0xb9, 0x34, 0xc8, 0x2c, 0x41, 0x42, + 0xda, 0x69, 0xd1, 0x2c, 0xa7, 0xde, 0x9a, 0x7d, 0xf7, 0x06, 0x40, 0x0e, 0xc7, + 0x98, 0x78, 0xd8, 0x68, 0xe1, 0x7e, 0x8f, 0x71, 0xea, 0x31, 0x49, 0x5a, 0xf8, + 0x19, 0xa0, 0x16, 0xcc, 0x41, 0x9e, 0x07, 0xc5, 0x01, 0xaa, 0x83, 0x09, 0xb2, + 0xe6, 0xc8, 0x5b, 0x79, 0xb2, 0x76, 0x37, 0x33, 0xa3, 0x7b, 0xbc, 0x04, 0x20, + 0xd4, 0x25, 0x37, 0x0c, 0x81, 0x05, 0xe0, 0xe5, 0x78, 0x53, 0x6e, 0x69, 0x7d, + 0x15, 0x99, 0x83, 0x96, 0xc5, 0xce, 0x78, 0x6f, 0x94, 0xdd, 0x84, 0x20, 0x88, + 0x2c, 0x54, 0xdc, 0x6a, 0xa5, 0xdb, 0xca, 0x99, 0x1c, 0x72, 0x06, 0x48, 0x60, + 0xf6, 0x86, 0xc5, 0x65, 0xde, 0x9a, 0xaa, 0xa3, 0x8a, 0x4b, 0x0f, 0x2f, 0x67, + 0xfc, 0x2b, 0x44, 0x74, 0xa8, 0x00, 0x69, 0xb2, 0xc3, 0x63, 0x6d, 0xc7, 0x85, + 0x7a, 0xef, 0xac, 0xd0, 0xb0, 0xbf, 0x82, 0xbc, 0x75, 0xdd, 0x02, 0x0b, 0x45, + 0x67, 0xbd, 0x86, 0x10, 0x81, 0x10, 0x10, 0x98, 0xfc, 0xe4, 0x10, 0xac, 0x2d, + 0x5d, 0xe6, 0x09, 0x58, 0x61, 0xc1, 0x11, 0xd7, 0xfe, 0xb3, 0xe6, 0xbb, 0x4f, + 0xbb, 0x5a, 0x54, 0x95, 0x54, 0x95, 0x97, 0x27, 0x98, 0x35, 0x0a, 0x25, 0x3f, + 0x05, 0xf6, 0x6c, 0x2e, 0xcf, 0xcb, 0xc0, 0xed, 0x43, 0xf5, 0xec, 0x2e, 0x6d, + 0x8d, 0xba, 0x15, 0xa5, 0x12, 0x54, 0xd9, 0x7b, 0x18, 0x21, 0x10, 0x7c, 0x07, + 0xdd, 0x9a, 0x16, 0xef, 0x84, 0x06, 0xf9, 0xc8, 0xa0, 0x0a, 0x6d, 0x08, 0xf4, + 0x1a, 0x05, 0x3d, 0x62, 0x11, 0x51, 0xfa, 0x54, 0x52, 0x73, 0x0e, 0x77, 0x40, + 0xab, 0xa4, 0x96, 0x71, 0xbd, 0x93, 0x71, 0x97, 0x56, 0x7b, 0xb1, 0x69, 0xec, + 0xd6, 0x8b, 0x13, 0x1c, 0x2a, 0x0e, 0x53, 0x4e, 0x94, 0x30, 0xa9, 0x27, 0x80, + 0xa2, 0x94, 0x10, 0x72, 0xe9, 0x51, 0x44, 0x74, 0xa8, 0x00, 0x69, 0xb2, 0xc3, + 0x63, 0x6d, 0xc7, 0x85, 0x7a, 0xef, 0xac, 0xd0, 0xb0, 0xbf, 0x82, 0xbc, 0x75, + 0xdd, 0x02, 0x0b, 0x45, 0x67, 0xbd, 0x86, 0x10, 0x81, 0x10, 0x10, 0x98, 0xd8, + 0x47, 0xcc, 0x54, 0xa2, 0x27, 0x65, 0xa4, 0xc3, 0x34, 0x75, 0xb5, 0x79, 0x1e, + 0x9a, 0xf3, 0x27, 0x1f, 0xc8, 0xd9, 0x35, 0x06, 0x67, 0x09, 0x0d, 0x81, 0x84, + 0xec, 0x50, 0x52, 0x2d, 0x00, 0x4f, 0x23, 0xc4, 0xfb, 0x44, 0xff, 0xa4, 0x81, + 0xbc, 0x92, 0xae, 0x40, 0x8d, 0x1b, 0x9f, 0x2b, 0x13, 0x19, 0x04, 0xf9, 0x70, + 0x5c, 0x59, 0xe2, 0xf4, 0xbd, 0xe7, 0xa3, 0xb2, 0xc0, 0x85, 0xd9, 0x66, 0xff, + 0xfa, 0x02, 0xc6, 0xc0, 0x1a, 0x49, 0x08, 0x88, 0x6e, 0x8f, 0x84, 0x42, 0xcb, + 0x8f, 0x0d, 0xae, 0x45, 0xc8, 0xeb, 0x45, 0xff, 0x6c, 0x8e, 0x72, 0x82, 0x66, + 0xd5, 0x6b, 0xb5, 0x6f, 0xaf, 0x69, 0xbb, 0xfd, 0xf0, 0xb7, 0xe5, 0x6c, 0x87, + 0x2d, 0x13, 0x40, 0x65, 0x7f, 0xe3, 0x29, 0x14, 0x10, 0x3b, 0x44, 0x74, 0xa8, + 0x00, 0x69, 0xb2, 0xc3, 0x63, 0x6d, 0xc7, 0x85, 0x7a, 0xef, 0xac, 0xd0, 0xb0, + 0xbf, 0x82, 0xbc, 0x75, 0xdd, 0x02, 0x0b, 0x45, 0x67, 0xbd, 0x86, 0x10, 0x81, + 0x10, 0x10, 0x98, 0x75, 0x93, 0x15, 0x9a, 0xe3, 0x50, 0x50, 0xb0, 0x4c, 0x9e, + 0x6b, 0x86, 0xbc, 0x43, 0x2d, 0xc8, 0xb0, 0x48, 0xc7, 0x3c, 0x00, 0x18, 0xca, + 0x5b, 0x69, 0x41, 0x12, 0x97, 0x73, 0x2a, 0x4e, 0x1a, 0xa9, 0x9a, 0x92, 0x8c, + 0x71, 0xe7, 0xa2, 0x4f, 0xd2, 0x77, 0x85, 0x6a, 0xa4, 0x25, 0x01, 0xe5, 0x1b, + 0x01, 0x2a, 0xea, 0x94, 0x46, 0xa2, 0x10, 0x4e, 0x93, 0xf8, 0x15, 0xa0, 0xb3, + 0xa2, 0x9b, 0x01, 0x9c, 0xb8, 0xe0, 0xfd, 0x45, 0x2d, 0x65, 0x46, 0xf1, 0xd7, + 0xd3, 0x51, 0xdc, 0x1a, 0xe2, 0x30, 0xa2, 0x75, 0xe4, 0x0f, 0xe4, 0x07, 0x70, + 0xd0, 0xef, 0xe9, 0x59, 0xde, 0xf1, 0x8d, 0x8c, 0xf8, 0x83, 0x14, 0xf3, 0xd8, + 0xbe, 0x2b, 0x98, 0x23, 0xd3, 0x42, 0xf4, 0x62, 0x13, 0xe9, 0x42, 0xa7, 0xe1, + 0x9a, 0x46, 0xe9, 0x70, 0xb5, 0xc5, 0x06, 0x70, 0x84, 0x30, 0x31, 0x7b, 0x1b, + 0xb3, 0xb3, 0x5d, 0xf6, 0x8a, 0xe3, 0x3a, 0x49, 0x26, 0xa0, 0x3e, 0x6b, 0xfe, + 0xb5, 0x51, 0x04, 0x16, 0xfc, 0xbb, 0x05, 0x24, 0xc9, 0xca, 0x50, 0x74, 0x15, + 0x6c, 0xc5, 0xa5, 0xd6, 0xfe, 0x1c, 0x99, 0x5e, + ], + txid: [ + 0xd1, 0xb3, 0xb7, 0xe0, 0x77, 0xb0, 0xcf, 0xf3, 0x50, 0x94, 0x83, 0xf1, 0xd7, + 0xae, 0xd7, 0xf9, 0x34, 0x31, 0xb3, 0xeb, 0x8c, 0x3e, 0xef, 0xe6, 0xd4, 0x7f, + 0x42, 0x2a, 0x77, 0xcf, 0x36, 0x7f, + ], + auth_digest: [ + 0xf5, 0x38, 0x48, 0x7b, 0xf6, 0x87, 0x6a, 0x5b, 0x7b, 0xb1, 0x8f, 0x4c, 0x27, + 0x28, 0xbe, 0x79, 0x96, 0xa8, 0x3c, 0xc1, 0xc8, 0xf2, 0x2c, 0xfe, 0x27, 0xd0, + 0x18, 0xd1, 0x47, 0x98, 0xe5, 0x84, + ], + amounts: vec![500219351793257], + script_pubkeys: vec![vec![0x00, 0x52, 0x63, 0x00]], + transparent_input: Some(0), + sighash_shielded: [ + 0x82, 0x5f, 0x0d, 0xec, 0xda, 0x05, 0x5c, 0xe8, 0xa5, 0x66, 0x23, 0x17, 0x5d, + 0x11, 0x42, 0x25, 0xe3, 0x9c, 0x02, 0x08, 0x41, 0x7e, 0x17, 0xe9, 0x3a, 0x7b, + 0x45, 0xdf, 0xf7, 0xf0, 0x4a, 0x50, + ], + sighash_all: Some([ + 0xc8, 0xec, 0x5d, 0x14, 0x73, 0xa7, 0x49, 0xe2, 0x8f, 0x97, 0x1d, 0x24, 0x89, + 0xef, 0xe0, 0x14, 0x26, 0x2a, 0x23, 0x2e, 0x59, 0x67, 0x44, 0x45, 0x0e, 0x5d, + 0xd6, 0x6d, 0x23, 0x77, 0x1b, 0xc9, + ]), + sighash_none: Some([ + 0x1a, 0x14, 0xd6, 0x4d, 0x15, 0xc1, 0x01, 0xe5, 0xb6, 0x08, 0x43, 0x0a, 0x35, + 0x30, 0xde, 0x70, 0xc7, 0xef, 0xa3, 0x16, 0xdc, 0x17, 0x45, 0xd2, 0xba, 0x16, + 0x5e, 0xba, 0x45, 0xbf, 0xec, 0xc3, + ]), + sighash_single: None, + sighash_all_anyone: Some([ + 0x98, 0x7a, 0xfb, 0xff, 0x54, 0x44, 0x88, 0xa7, 0xf5, 0x1e, 0x89, 0x79, 0xee, + 0x12, 0xac, 0x09, 0x41, 0xb2, 0x8c, 0x57, 0x8f, 0xe4, 0x4f, 0xe9, 0x7a, 0x6b, + 0x49, 0x38, 0xd2, 0x7e, 0x43, 0x75, + ]), + sighash_none_anyone: Some([ + 0x24, 0xf6, 0xed, 0xef, 0x55, 0x42, 0x1c, 0x31, 0x65, 0xf6, 0xc8, 0x7b, 0xcd, + 0xd4, 0x79, 0xc7, 0x27, 0x72, 0xb9, 0xed, 0x61, 0x06, 0x1a, 0x80, 0x74, 0x2a, + 0x33, 0x88, 0x1e, 0x9d, 0x36, 0xff, + ]), + sighash_single_anyone: None, + }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xf0, + 0x4a, 0x05, 0x10, 0x57, 0xec, 0x2a, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x57, 0xec, 0x2a, 0x14, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x64, 0x1a, 0xd2, 0xe9, 0x77, 0x84, + 0xcb, 0x21, 0x35, 0xd5, 0x7e, 0x43, 0xb0, 0x3a, 0x6c, 0x97, 0xe3, 0x23, 0xd7, + 0x0b, 0x43, 0xd8, 0x0f, 0xa1, 0x81, 0x0d, 0xac, 0x0e, 0xba, 0x15, 0x3f, 0xa3, + 0x8b, 0xff, 0x6a, 0x37, 0x81, 0xee, 0x09, 0x95, 0x90, 0x71, 0x77, 0xdb, 0x70, + 0x27, 0x4e, 0x00, 0x45, 0xd4, 0xc2, 0xdc, 0xf0, 0x2d, 0x76, 0x40, 0xff, 0xcc, + 0x5a, 0x6a, 0xc3, 0xa8, 0x7f, 0x1c, 0xea, 0x29, 0x54, 0x8e, 0xa1, 0x2b, 0x93, + 0x79, 0x1d, 0x02, 0xe3, 0x6a, 0x35, 0x6b, 0x92, 0x9c, 0xcd, 0xfc, 0x83, 0x00, + 0xf3, 0x78, 0xdf, 0x32, 0x49, 0x1c, 0x45, 0xf3, 0xb9, 0x5c, 0xe7, 0x23, 0x2c, + 0xbc, 0xb6, 0xb5, 0x8c, 0x1b, 0xa7, 0xed, 0x5e, 0xac, 0xfa, 0x76, 0x41, 0x4a, + 0x41, 0xad, 0x4a, 0x44, 0xf7, 0x1f, 0x1b, 0x58, 0x0d, 0x34, 0xc3, 0xa9, 0x52, + 0x92, 0x0b, 0x25, 0x4a, 0x14, 0x4f, 0x88, 0x54, 0x9e, 0x58, 0xb8, 0x8e, 0x92, + 0x80, 0x15, 0xb4, 0x49, 0xf2, 0x7c, 0x2e, 0x0e, 0x2a, 0x75, 0xe9, 0x65, 0x3c, + 0xde, 0x51, 0xe5, 0x68, 0x44, 0x37, 0xe5, 0x57, 0x92, 0x57, 0xbf, 0x19, 0xa4, + 0x60, 0x80, 0x43, 0x6d, 0xbd, 0x08, 0xd7, 0x47, 0x84, 0xaf, 0x00, 0x2d, 0x58, + 0xe0, 0x6f, 0xaf, 0x7f, 0x3c, 0xea, 0xe7, 0xd3, 0x41, 0x9b, 0x1f, 0xca, 0x26, + 0x5a, 0x55, 0x59, 0xcf, 0x9e, 0x2d, 0x3b, 0x60, 0x97, 0x8d, 0x81, 0xa6, 0x78, + 0xb9, 0xed, 0x8e, 0x44, 0x86, 0xb4, 0xd1, 0x46, 0x09, 0xd6, 0xc1, 0x27, 0xc0, + 0xc2, 0xfb, 0xff, 0xe3, 0x0a, 0x60, 0xf7, 0xbf, 0xf1, 0xd9, 0xfb, 0x83, 0x00, + 0xed, 0x00, 0x92, 0x53, 0xba, 0x9b, 0x99, 0x6f, 0xa0, 0x52, 0x41, 0xb1, 0x0f, + 0x5a, 0xc9, 0xa8, 0x40, 0x8e, 0x92, 0x5b, 0x62, 0x6b, 0xb2, 0x1a, 0x47, 0x1f, + 0xe3, 0xbe, 0xde, 0x52, 0xbb, 0xa0, 0x97, 0xb2, 0xa9, 0x9a, 0x9b, 0xa5, 0xa8, + 0x66, 0x58, 0xc3, 0xfd, 0x9e, 0xc5, 0x5b, 0xfa, 0x9b, 0x32, 0x85, 0x67, 0x25, + 0x4a, 0xb3, 0x6d, 0x2c, 0x7f, 0x44, 0xd2, 0xc7, 0xe1, 0x3e, 0xb5, 0x4b, 0xeb, + 0x70, 0xea, 0x8f, 0xa9, 0x4b, 0x6c, 0x6e, 0x01, 0x2d, 0x79, 0xe3, 0xf5, 0x36, + 0x89, 0xc2, 0xb1, 0xa1, 0x8e, 0xaf, 0x2d, 0x47, 0x1d, 0x13, 0xc1, 0xab, 0x39, + 0xd9, 0x19, 0x4a, 0xe8, 0x43, 0xab, 0x1d, 0x28, 0xff, 0xa8, 0xf6, 0x9d, 0xc7, + 0xe1, 0x5c, 0xc3, 0x8b, 0x12, 0xe8, 0xfc, 0xd7, 0x92, 0x55, 0xb7, 0x21, 0x60, + 0x56, 0xd9, 0xed, 0xb7, 0x48, 0x2f, 0xb9, 0x8a, 0xa0, 0x33, 0xb6, 0x5e, 0x51, + 0xc1, 0xa0, 0x8b, 0x8a, 0x11, 0xd8, 0x4d, 0x04, 0x09, 0xb7, 0x34, 0xf4, 0x52, + 0xaa, 0xf0, 0xd6, 0xb1, 0x8f, 0x50, 0x25, 0x86, 0x83, 0xd3, 0xf9, 0xa7, 0x6d, + 0x39, 0x9f, 0xd0, 0x47, 0xee, 0xe2, 0x88, 0xbb, 0x45, 0x85, 0x85, 0x1d, 0xc9, + 0x3e, 0xcc, 0xc6, 0x23, 0x22, 0x92, 0x4c, 0xd1, 0x3b, 0x5d, 0xd4, 0xee, 0xd6, + 0x6e, 0xd8, 0xd9, 0x97, 0x2d, 0x77, 0x26, 0x29, 0xea, 0x64, 0x74, 0x2e, 0x54, + 0x73, 0x39, 0x81, 0xb0, 0x06, 0xc0, 0x62, 0x46, 0x8e, 0x4b, 0xd8, 0xf7, 0xdd, + 0x9a, 0xf6, 0x98, 0xf5, 0x2a, 0xe8, 0x14, 0x63, 0x4e, 0x81, 0xd7, 0xf3, 0xe0, + 0xc4, 0x20, 0x31, 0x7c, 0xac, 0xa9, 0xae, 0x48, 0x11, 0xc6, 0xaf, 0x06, 0xfe, + 0x80, 0xa8, 0xc0, 0x2a, 0xb7, 0xa0, 0x0e, 0x18, 0xe4, 0xa6, 0xaa, 0x1e, 0xa1, + 0xb7, 0x69, 0x45, 0xd2, 0x61, 0x5d, 0x43, 0xac, 0x11, 0x8b, 0x56, 0xc2, 0xf2, + 0x96, 0x0f, 0xe9, 0x3a, 0x02, 0x5f, 0x13, 0xec, 0x91, 0xff, 0xc6, 0xd2, 0xc3, + 0x53, 0x69, 0x9a, 0xbb, 0x09, 0x2d, 0xed, 0xc0, 0x65, 0xdb, 0x8f, 0xa2, 0x14, + 0xdb, 0xc4, 0x64, 0x66, 0xf8, 0x97, 0xb8, 0x8c, 0x58, 0xb3, 0x01, 0x52, 0x13, + 0x3a, 0xa3, 0x83, 0x1a, 0xf3, 0x7c, 0x74, 0xd9, 0x9e, 0x9e, 0x36, 0xff, 0x70, + 0x11, 0xd3, 0x23, 0x83, 0x05, 0x69, 0x15, 0x08, 0xa2, 0xc3, 0xa4, 0x3e, 0x75, + 0x5d, 0xc0, 0x81, 0xb5, 0x11, 0xd6, 0x48, 0x2a, 0x7d, 0xb6, 0x5f, 0xa9, 0x69, + 0x9e, 0xa8, 0x7f, 0xf4, 0x70, 0x99, 0xed, 0x36, 0x37, 0xdb, 0xb0, 0xa3, 0xd0, + 0xef, 0x79, 0x79, 0x6a, 0x8e, 0xf1, 0xe4, 0xd9, 0x4d, 0x42, 0xb4, 0xbc, 0x2b, + 0x4a, 0x03, 0x8a, 0xe6, 0xe4, 0x6b, 0x24, 0xcf, 0xc8, 0x41, 0x53, 0xd3, 0x1e, + 0xaf, 0x89, 0x50, 0x63, 0xa5, 0xca, 0x95, 0x9b, 0xe6, 0x3f, 0x37, 0xf2, 0xba, + 0x0d, 0x43, 0x23, 0x66, 0x73, 0x6d, 0x86, 0x32, 0xfc, 0xe0, 0x72, 0xb6, 0xae, + 0x5b, 0x6f, 0x3f, 0xd5, 0x9d, 0x3f, 0xaf, 0xf6, 0x38, 0x27, 0x5a, 0x99, 0x2f, + 0xef, 0xc8, 0x7e, 0x60, 0xd4, 0x4c, 0x2c, 0xad, 0xc2, 0xb5, 0xc4, 0x94, 0xe3, + 0xe7, 0x2e, 0xb4, 0x59, 0x7c, 0x96, 0xb4, 0x01, 0x67, 0x79, 0x9a, 0x90, 0x01, + 0xa2, 0xed, 0x36, 0x76, 0xa8, 0xb4, 0x03, 0xae, 0x25, 0xff, 0xd7, 0x72, 0xf7, + 0x08, 0x1e, 0x9a, 0x32, 0xbc, 0xc1, 0xc5, 0xe2, 0xed, 0xd4, 0xe2, 0xa6, 0x57, + 0x6b, 0x78, 0x3c, 0xce, 0x3a, 0xae, 0x11, 0xfa, 0x43, 0x22, 0x62, 0x54, 0x88, + 0x56, 0x18, 0x3e, 0xe6, 0x82, 0xd5, 0xdc, 0x31, 0xbe, 0xb3, 0x8f, 0x06, 0x1c, + 0xbd, 0xec, 0xa7, 0x02, 0x1a, 0x44, 0x4e, 0x2d, 0xd4, 0x17, 0xdf, 0x26, 0xdc, + 0xd2, 0x20, 0xf2, 0xb7, 0x31, 0x77, 0x2b, 0x43, 0x9e, 0x96, 0xd6, 0x14, 0xe1, + 0xfa, 0xcb, 0x48, 0x6c, 0x7a, 0x7d, 0x51, 0x71, 0xb1, 0xde, 0x35, 0x9f, 0x6a, + 0xd3, 0xa9, 0x6f, 0x64, 0x9c, 0x96, 0x91, 0x02, 0xa1, 0x96, 0x4f, 0xb4, 0xb4, + 0xa1, 0xa4, 0x27, 0x9c, 0x68, 0xe6, 0xc3, 0x72, 0xe4, 0x21, 0x87, 0xd7, 0x54, + 0xe8, 0x04, 0xa6, 0x16, 0x53, 0x09, 0x20, 0x69, 0xfb, 0x9b, 0x6d, 0x25, 0x26, + 0x68, 0x90, 0x80, 0x8b, 0x01, 0x5d, 0xf2, 0x8c, 0x80, 0x10, 0x65, 0xda, 0x6f, + 0xeb, 0xdc, 0x1a, 0x56, 0xbf, 0xd0, 0x02, 0x62, 0x5a, 0xcf, 0xaa, 0x53, 0x73, + 0xfd, 0xe1, 0x49, 0xc1, 0xcf, 0xc3, 0x64, 0x9b, 0x48, 0x69, 0x69, 0x6d, 0x44, + 0xec, 0xb1, 0x24, 0x79, 0xc5, 0xeb, 0xef, 0x99, 0x5f, 0x10, 0x02, 0x9f, 0x8b, + 0x53, 0xe3, 0x4d, 0x9a, 0xe1, 0x32, 0x07, 0x5d, 0xb9, 0x6e, 0x83, 0x89, 0x05, + 0x37, 0xa3, 0x2c, 0x81, 0xcb, 0x74, 0xa4, 0xfe, 0xcd, 0xc8, 0x5b, 0xe0, 0x03, + 0x63, 0x0b, 0x7c, 0x3d, 0x6d, 0xc9, 0xa0, 0x7f, 0x9d, 0x48, 0x4c, 0x73, 0xcf, + 0x09, 0x39, 0x30, 0x39, 0xe4, 0x53, 0x26, 0xb8, 0xff, 0xff, 0xb3, 0xe7, 0xe6, + 0x15, 0x9c, 0x46, 0x69, 0x9f, 0x10, 0x07, 0x92, 0xd4, 0x67, 0x29, 0x50, 0x34, + 0xb2, 0xfa, 0x32, 0x15, 0xe0, 0x11, 0x26, 0x43, 0x68, 0x3f, 0xbf, 0x58, 0x74, + 0x8e, 0xb6, 0x99, 0x0c, 0x40, 0x4f, 0xec, 0x90, 0x8a, 0xb5, 0x72, 0xe1, 0x61, + 0x31, 0x5f, 0x4f, 0x90, 0xa4, 0x8d, 0xed, 0x5c, 0xb8, 0x35, 0x65, 0x2f, 0x23, + 0xc3, 0x10, 0x35, 0x10, 0x90, 0x13, 0x66, 0x96, 0x12, 0xec, 0x0f, 0xf7, 0xf1, + 0xaf, 0x81, 0xb2, 0x4c, 0xed, 0x0e, 0xfa, 0x62, 0x13, 0xda, 0x6c, 0x3c, 0xc7, + 0xff, 0x5a, 0xf2, 0x6a, 0xb5, 0x19, 0x08, 0x96, 0x9a, 0xb7, 0x2f, 0xbc, 0x18, + 0xba, 0xfc, 0xf5, 0xc7, 0xe6, 0xf7, 0x14, 0xde, 0x40, 0x9d, 0x7b, 0xdd, 0xa8, + 0x9b, 0xf7, 0xa3, 0x77, 0x08, 0x3b, 0xfa, 0xbe, 0x48, 0x58, 0xe4, 0x7a, 0x4c, + 0xc3, 0x2e, 0x41, 0x6e, 0xc0, 0x8b, 0x8a, 0xc7, 0x91, 0x5a, 0x43, 0x73, 0x3f, + 0x44, 0x06, 0xe9, 0xd9, 0x67, 0xc5, 0x60, 0xf3, 0x44, 0xd7, 0xe9, 0x04, 0xa2, + 0x80, 0x45, 0xd9, 0x9f, 0x3a, 0xf8, 0xc8, 0x2e, 0x97, 0xe1, 0xb9, 0xc1, 0xb2, + 0x05, 0xe5, 0x85, 0xfb, 0xeb, 0xb4, 0x8f, 0xaf, 0x58, 0xf1, 0xb6, 0x5d, 0xca, + 0x24, 0x97, 0xe0, 0x9a, 0x70, 0xaa, 0xd4, 0x86, 0x5f, 0x85, 0x71, 0x5a, 0x28, + 0x0e, 0x18, 0x6f, 0x3f, 0xc1, 0x74, 0x0d, 0x81, 0x84, 0xd3, 0x3e, 0x83, 0x22, + 0x16, 0x95, 0x21, 0xcd, 0xc1, 0x32, 0x21, 0x29, 0x39, 0xc8, 0x4a, 0x10, 0x89, + 0x64, 0xe2, 0xde, 0x74, 0xb6, 0xea, 0x55, 0xb4, 0xcb, 0x8f, 0x6f, 0x9b, 0xee, + 0x98, 0xb1, 0x0d, 0x41, 0x51, 0x09, 0x45, 0x5f, 0x48, 0xb7, 0x76, 0x08, 0x2d, + 0xc3, 0x0b, 0x4b, 0xc7, 0x34, 0x77, 0x07, 0x55, 0x11, 0x70, 0x03, 0x08, 0x15, + 0x8c, 0xe2, 0xf2, 0xf9, 0xbf, 0x0f, 0x69, 0x1b, 0x2c, 0xe5, 0x3e, 0x61, 0x14, + 0x2c, 0xb7, 0x40, 0xc1, 0x5b, 0x7b, 0x62, 0x3c, 0xf4, 0x8b, 0x3f, 0x7b, 0xfe, + 0xfa, 0x31, 0xbc, 0xdc, 0x66, 0x5c, 0x6d, 0x71, 0x23, 0xe9, 0x53, 0x50, 0x81, + 0x13, 0x75, 0x94, 0x7b, 0x05, 0x5a, 0x43, 0xdb, 0x07, 0xe0, 0x3f, 0x33, 0x62, + 0x7d, 0xf5, 0xc6, 0x38, 0xbf, 0xad, 0x95, 0x6d, 0xdc, 0x1e, 0xa7, 0xd7, 0x62, + 0x0a, 0x20, 0xf2, 0x79, 0x2f, 0x63, 0x81, 0x7a, 0x1c, 0xf3, 0x25, 0x80, 0xd0, + 0x42, 0x74, 0x23, 0x4a, 0xf2, 0xa5, 0x1b, 0x56, 0xbb, 0x68, 0xa2, 0x9e, 0x43, + 0xa9, 0x54, 0x14, 0x2b, 0xa4, 0xca, 0x68, 0x23, 0xbd, 0xe9, 0x05, 0x3d, 0x72, + 0xfd, 0xad, 0xbc, 0x61, 0xad, 0x59, 0x36, 0xc5, 0x3f, 0xdd, 0x75, 0x79, 0x44, + 0x6d, 0x11, 0xc4, 0x46, 0x07, 0xf4, 0x16, 0x30, 0xe4, 0xc0, 0x89, 0x15, 0xe6, + 0x31, 0x77, 0x15, 0x50, 0xe9, 0xce, 0x1f, 0xca, 0x2c, 0x63, 0xfe, 0x06, 0xb7, + 0x98, 0x9d, 0x58, 0x4f, 0xa7, 0xd7, 0x82, 0xa8, 0x8c, 0x1e, 0x7d, 0x64, 0xb6, + 0xfb, 0xf5, 0x5e, 0x35, 0x96, 0xaf, 0x9b, 0xcb, 0x75, 0x85, 0xf8, 0xc7, 0xd3, + 0xaa, 0x5c, 0x20, 0x82, 0xb2, 0x65, 0x24, 0x9d, 0xf0, 0x57, 0x01, 0xda, 0xb0, + 0x31, 0xc4, 0xba, 0xc1, 0xea, 0x26, 0x7a, 0x29, 0x96, 0xa2, 0x02, 0x8d, 0x1e, + 0x6a, 0x0f, 0x80, 0xa3, 0x84, 0x7c, 0x53, 0x1d, 0xba, 0x96, 0xee, 0x65, 0xa2, + 0x41, 0x89, 0xbd, 0x27, 0x12, 0xe4, 0x0e, 0x95, 0x96, 0x64, 0x98, 0x1e, 0x58, + 0xb2, 0xa4, 0xf9, 0x51, 0xef, 0x8f, 0x49, 0x7d, 0xff, 0xf2, 0xf2, 0xf2, 0x71, + 0xea, 0xb8, 0x9c, 0x62, 0x8e, 0x18, 0xb5, 0xfc, 0xb4, 0x38, 0x82, 0x53, 0x7e, + 0xaf, 0x6a, 0xd2, 0xa6, 0xb1, 0x75, 0x46, 0x33, 0xca, 0xa8, 0x6b, 0xf2, 0xc7, + 0x6f, 0x39, 0x93, 0x15, 0x4f, 0xc7, 0x3e, 0x6f, 0xbb, 0xa2, 0x21, 0x0c, 0x27, + 0x43, 0xf5, 0x30, 0xa4, 0x27, 0x84, 0x9a, 0x30, 0x1e, 0x00, 0xe0, 0x11, 0x29, + 0xf0, 0x3a, 0x46, 0x07, 0xf8, 0x7c, 0xbe, 0x07, 0x62, 0xc0, 0xb1, 0xc6, 0x58, + 0x55, 0xde, 0xba, 0x84, 0x22, 0xca, 0x4b, 0x88, 0xab, 0xee, 0xa6, 0xa4, 0x38, + 0x2c, 0xf1, 0x6c, 0xcd, 0x6d, 0xc7, 0xc3, 0x7c, 0x44, 0xe5, 0x49, 0xc4, 0x53, + 0x48, 0x19, 0xac, 0xd8, 0xbb, 0x0a, 0x02, 0xa5, 0xfa, 0x7a, 0x1c, 0x1d, 0x38, + 0x06, 0xfb, 0xc3, 0x40, 0x7f, 0xd7, 0xda, 0x93, 0xfd, 0x0d, 0xe6, 0x40, 0x0d, + 0x3a, 0xb8, 0x97, 0x74, 0x85, 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, 0x50, 0x7b, + 0x79, 0x94, 0x7a, 0xdb, 0x2f, 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, 0xdb, 0x5f, + 0x29, 0x80, 0x99, 0xf2, 0x0f, 0x26, 0x3b, 0x35, 0x9a, 0x11, 0x51, 0xa6, 0xb7, + 0x5c, 0x01, 0x36, 0x5e, 0xb1, 0x54, 0xae, 0x42, 0x14, 0x0d, 0x6e, 0x10, 0x34, + 0x2f, 0x14, 0xf3, 0x4d, 0xc3, 0x3e, 0x07, 0xff, 0x0e, 0x4d, 0x1a, 0x6b, 0xe3, + 0x75, 0xb3, 0x2f, 0x84, 0xb9, 0x2e, 0x5d, 0x81, 0xeb, 0xb6, 0x39, 0xc4, 0xf2, + 0x7e, 0x71, 0x5a, 0xa4, 0x2c, 0xc7, 0x57, 0x07, 0xd4, 0xeb, 0xd1, 0xbb, 0xfb, + 0xe8, 0xf9, 0x0f, 0xc7, 0xc9, 0x53, 0xe7, 0xa9, 0x71, 0x5e, 0x65, 0xaf, 0x82, + 0x67, 0x37, 0x3d, 0x34, 0x51, 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, 0x2c, 0xcf, + 0x3b, 0xcc, 0x7a, 0xca, 0x14, 0x67, 0xb6, 0x32, 0x7e, 0x4f, 0x95, 0x22, 0xb2, + 0xcc, 0x57, 0x9a, 0x7a, 0x8f, 0xff, 0x7c, 0xa7, 0xcf, 0x14, 0x5d, 0xfc, 0x13, + 0xea, 0xfc, 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, 0xfb, 0xe5, 0x34, 0x44, 0xd0, + 0xc7, 0x3b, 0x3b, 0xd5, 0xbc, 0x87, 0x0b, 0x01, 0xcd, 0x45, 0x79, 0x11, 0xe3, + 0x56, 0x31, 0x3f, 0xd1, 0xda, 0xfb, 0x4c, 0x81, 0x51, 0x63, 0x4a, 0x01, 0xaf, + 0xf7, 0xcf, 0x11, 0x6d, 0x43, 0x3c, 0x3d, 0x2b, 0x3a, 0xdd, 0xa9, 0xce, 0xbe, + 0x18, 0xf7, 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, 0x3c, 0x22, 0x36, 0x8c, 0x92, + 0x1a, 0x90, 0x8b, 0xa9, 0xfb, 0x69, 0x74, 0xae, 0xd1, 0xd0, 0xf2, 0xde, 0x3c, + 0x1b, 0xf9, 0xd3, 0xff, 0x79, 0x4b, 0x76, 0x1a, 0xe0, 0x1e, 0x67, 0x73, 0x9f, + 0x02, 0x27, 0x3a, 0x67, 0x52, 0xe5, 0x01, 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, + 0x81, 0x7e, 0x6e, 0xa3, 0x51, 0xd6, 0x00, 0x6b, 0xec, 0xf8, 0xd2, 0xff, 0xb0, + 0x39, 0x90, 0xf6, 0x77, 0x74, 0xa8, 0x1e, 0x4c, 0x03, 0x73, 0xa3, 0x5e, 0x2c, + 0x00, 0x9a, 0x4f, 0x0a, 0xe6, 0x32, 0xf7, 0x09, 0x2d, 0x46, 0xcc, 0x98, 0x0a, + 0x90, 0xb3, 0xc2, 0x3a, 0x06, 0x61, 0x54, 0xeb, 0xfe, 0xbc, 0x59, 0xd9, 0xbc, + 0x62, 0x7e, 0xba, 0xc0, 0x74, 0x69, 0x84, 0x8c, 0x28, 0x04, 0x49, 0x29, 0xf8, + 0xbf, 0xf9, 0x43, 0x51, 0xc1, 0x43, 0xb0, 0xcb, 0x25, 0xb9, 0x14, 0x2c, 0x61, + 0xbd, 0x79, 0x0a, 0x80, 0xd7, 0x02, 0x3e, 0xf8, 0x82, 0x3e, 0x22, 0x28, 0x52, + 0xd4, 0xbe, 0x14, 0xa5, 0x59, 0x05, 0xe0, 0xfe, 0x1e, 0x03, 0x64, 0x8e, 0x77, + 0xa6, 0x3c, 0x26, 0x44, 0xd7, 0x6d, 0x8f, 0xa1, 0xed, 0x73, 0x66, 0x94, 0xaf, + 0x18, 0x77, 0x00, 0xc0, 0x82, 0xdc, 0x47, 0x77, 0x40, 0xfb, 0x3f, 0x2c, 0xd7, + 0xbb, 0x59, 0xfb, 0x35, 0x85, 0x54, 0xe9, 0x4c, 0x7e, 0x67, 0x8c, 0xe0, 0x1a, + 0xeb, 0xf9, 0x4e, 0x51, 0x5e, 0x49, 0x72, 0x29, 0x67, 0x99, 0x5a, 0xea, 0x85, + 0x8d, 0x64, 0xe7, 0x78, 0x9f, 0xf3, 0x06, 0x36, 0x95, 0x77, 0x22, 0x81, 0x80, + 0x32, 0x6a, 0x5b, 0x0a, 0xf4, 0x75, 0xe2, 0x7a, 0x54, 0xb2, 0x07, 0xb4, 0x1f, + 0x92, 0xe3, 0x76, 0x17, 0x0e, 0x3f, 0xb0, 0x05, 0x02, 0x82, 0x61, 0xc9, 0x9c, + 0x2d, 0xbd, 0x0e, 0xed, 0xee, 0x87, 0x1c, 0x1c, 0x0f, 0x48, 0xb8, 0xe9, 0xb8, + 0xe4, 0xbe, 0x77, 0xd1, 0xb7, 0x37, 0xfe, 0x21, 0xf0, 0xfa, 0x5a, 0x18, 0xeb, + 0xb5, 0x27, 0x55, 0xb5, 0xa6, 0xcf, 0x61, 0x30, 0xfb, 0x56, 0x94, 0x4c, 0xfa, + 0xb8, 0x75, 0x27, 0xc2, 0x50, 0xd1, 0x13, 0xb2, 0x9b, 0xca, 0xc9, 0xaa, 0xa1, + 0x0c, 0x2e, 0x7d, 0xe4, 0x15, 0xed, 0xb0, 0x80, 0x6c, 0x6d, 0xa0, 0x30, 0x20, + 0xa1, 0x34, 0xca, 0x7e, 0xcd, 0xc8, 0xda, 0x1b, 0xd5, 0x7a, 0x37, 0xf5, 0x5a, + 0x46, 0x94, 0x0b, 0x45, 0xb2, 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, 0x92, 0x7d, + 0x1b, 0xd8, 0x60, 0xd4, 0x45, 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, 0xe1, + 0xd0, 0x01, 0x08, 0x02, 0x6c, 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, 0xf5, + 0xc3, 0x70, 0xbc, 0xe1, 0x8d, 0x3a, 0xcb, 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, + 0xe1, 0xd8, 0x02, 0xf7, 0x73, 0x33, 0x49, 0x4a, 0x7a, 0xe1, 0x30, 0xfe, 0x86, + 0xe8, 0xf8, 0x18, 0xf9, 0x26, 0x1a, 0x2d, 0xad, 0xb4, 0x12, 0x52, 0x29, 0xba, + 0x0f, 0xfc, 0x0e, 0x70, 0x90, 0x32, 0x44, 0x30, 0xb5, 0x21, 0xa9, 0x0d, 0x22, + 0x4a, 0xb7, 0xa1, 0x02, 0x4e, 0x1d, 0x89, 0x3e, 0x74, 0x04, 0xfe, 0xdb, 0x34, + 0x8e, 0x4d, 0x5e, 0x22, 0x35, 0xc5, 0x9a, 0x78, 0x76, 0xa0, 0xfc, 0x60, 0x14, + 0x5c, 0x6a, 0x00, 0x96, 0x87, 0x68, 0x44, 0x60, 0x27, 0x1e, 0xe1, 0x33, 0xa4, + 0x37, 0xfe, 0x52, 0xfb, 0x6c, 0xfb, 0xa9, 0x7f, 0xce, 0xc1, 0x61, 0xdf, 0x51, + 0x5d, 0xde, 0x90, 0x5a, 0x24, 0xda, 0x6d, 0x37, 0xbd, 0xc3, 0x40, 0x44, 0xa9, + 0x55, 0xe6, 0x82, 0xb4, 0x74, 0x71, 0xca, 0x1e, 0x8c, 0x78, 0xc5, 0x1e, 0xd3, + 0x77, 0xcd, 0x4a, 0xfa, 0x89, 0x4b, 0xd9, 0xbd, 0x12, 0xe7, 0x07, 0x15, 0x6d, + 0xa0, 0x72, 0x6f, 0x7c, 0xf5, 0x72, 0x9f, 0xab, 0xe3, 0x72, 0x16, 0x04, 0x63, + 0xfe, 0x04, 0x29, 0x24, 0x4d, 0x06, 0x74, 0x89, 0xba, 0x5d, 0x09, 0x47, 0x2e, + 0xcd, 0x9b, 0xcd, 0xc4, 0xd5, 0xe4, 0xdf, 0x10, 0x1e, 0x18, 0x9d, 0xb8, 0x46, + 0x3e, 0xb5, 0x38, 0x30, 0x7b, 0x58, 0x7d, 0xef, 0xf7, 0x8d, 0xe9, 0xc7, 0x3a, + 0xf2, 0x80, 0x80, 0xb2, 0xfd, 0x05, 0x00, 0x3e, 0x11, 0xd3, 0xe1, 0xb3, 0x29, + 0x9d, 0xc9, 0x52, 0x1f, 0x8b, 0x51, 0x3b, 0xad, 0xb0, 0x10, 0xe9, 0x1b, 0xfe, + 0xb9, 0x1b, 0x0b, 0x2a, 0x6c, 0xb1, 0x29, 0xc2, 0xe8, 0x25, 0xa5, 0x97, 0xb8, + 0xfb, 0x75, 0xbc, 0x56, 0x2d, 0x65, 0x4d, 0x62, 0x10, 0x46, 0x40, 0xdd, 0x74, + 0xe5, 0x6c, 0xd1, 0x4b, 0xaa, 0xba, 0x56, 0x5b, 0x84, 0xb8, 0x45, 0xe1, 0x63, + 0xd1, 0xca, 0xef, 0x25, 0x33, 0xc3, 0x98, 0x16, 0x37, 0x20, 0x4f, 0x96, 0xa5, + 0x9c, 0x8e, 0x80, 0x24, 0xd9, 0x04, 0x1b, 0x20, 0x29, 0xe9, 0x4c, 0x15, 0x24, + 0x5f, 0x1a, 0x95, 0x88, 0x40, 0xba, 0x3f, 0x38, 0x0a, 0x4d, 0x20, 0xf1, 0x18, + 0x4e, 0x77, 0x82, 0x7d, 0xe3, 0xff, 0x8f, 0x3d, 0x73, 0x45, 0x9a, 0xfe, 0x24, + 0x1f, 0x72, 0x3c, 0x08, 0x48, 0x23, 0x23, 0x0e, 0x00, 0x3d, 0x3d, 0x21, 0xe5, + 0x35, 0x01, 0xec, 0x04, 0x99, 0xb0, 0x83, 0xa7, 0xda, 0xd6, 0x85, 0xc5, 0x71, + 0x27, 0xf4, 0xde, 0x64, 0x73, 0x3a, 0x88, 0x0c, 0x2d, 0xb2, 0x8f, 0xda, 0xab, + 0xf1, 0xb5, 0x42, 0xd2, 0x05, 0xf6, 0x64, 0xa3, 0x51, 0x35, 0x71, 0x27, 0x11, + 0xdc, 0xcc, 0xd9, 0x31, 0xa5, 0x0b, 0x9c, 0x56, 0x61, 0x88, 0x23, 0x60, 0xd4, + 0xca, 0xc0, 0x04, 0x76, 0x81, 0xbc, 0x2e, 0x2b, 0x3b, 0xf6, 0xc9, 0x97, 0x60, + 0xd7, 0xcf, 0xb4, 0xfa, 0x21, 0x39, 0x43, 0x77, 0xa4, 0x55, 0x1c, 0x76, 0xd1, + 0xf7, 0x5a, 0xc0, 0x3c, 0x26, 0x20, 0x54, 0xdf, 0xfd, 0x79, 0xa9, 0xde, 0xd0, + 0x5e, 0x88, 0x89, 0x58, 0x19, 0x9e, 0xea, 0x45, 0x01, 0xe2, 0x99, 0x0a, 0x53, + 0xa5, 0xcd, 0x2a, 0x46, 0xa4, 0x01, 0x57, 0x65, 0x88, 0xfd, 0x7d, 0x05, 0x8a, + 0x26, 0xf2, 0x84, 0x38, 0xe5, 0x78, 0x2f, 0x45, 0xac, 0x1d, 0x07, 0xf6, 0xf6, + 0xf5, 0xed, 0x73, 0x74, 0x1d, 0x57, 0x85, 0x83, 0x7a, 0x6b, 0x84, 0x4b, 0x47, + 0x47, 0x75, 0x71, 0x8c, 0x29, 0xdd, 0x99, 0x08, 0x4e, 0x9f, 0x88, 0xef, 0x15, + 0x3a, 0x83, 0x29, 0xf5, 0x32, 0xa6, 0x90, 0x17, 0xdc, 0x3a, 0x97, 0xed, 0x75, + 0x43, 0x67, 0xdb, 0x28, 0x3d, 0x48, 0x1e, 0x3b, 0xa3, 0x04, 0xf2, 0x54, 0xfc, + 0xb7, 0xfc, 0x93, 0xf7, 0xc6, 0xea, 0x3a, 0xc0, 0xf5, 0x35, 0xb1, 0x5b, 0xca, + 0xad, 0x87, 0x57, 0xd3, 0xbf, 0x8f, 0x98, 0x1b, 0xbb, 0x20, 0xd7, 0x0f, 0xf6, + 0x53, 0xd1, 0x3a, 0xa8, 0x26, 0xcb, 0xe4, 0x6e, 0x3e, 0xa1, 0xed, 0xaf, 0x5b, + 0x3c, 0xf1, 0x63, 0x0e, 0xe8, 0x59, 0x7a, 0xae, 0x19, 0x63, 0x3f, 0x35, 0x16, + 0x28, 0x9c, 0x5f, 0xb8, 0xdd, 0x39, 0xd3, 0x4a, 0x6d, 0xb9, 0xc5, 0x97, 0xd2, + 0x06, 0x0c, 0x85, 0xf8, 0x82, 0x92, 0xe3, 0x2d, 0xbd, 0x0c, 0xca, 0x68, 0xa4, + 0xfe, 0xcb, 0x3e, 0xf0, 0xd5, 0x3c, 0x96, 0x41, 0x4f, 0x28, 0x0d, 0x9d, 0x47, + 0x6c, 0xfc, 0x0b, 0xd9, 0x39, 0xdf, 0x3e, 0x72, 0x39, 0x5c, 0x0a, 0x43, 0xe6, + 0xed, 0x53, 0x0c, 0xb2, 0xe8, 0xae, 0x83, 0x88, 0x60, 0xad, 0xc8, 0x8a, 0x2c, + 0x36, 0x7e, 0x2e, 0xac, 0xcb, 0x1e, 0x6e, 0x63, 0x0d, 0x9a, 0x6f, 0x44, 0x23, + 0x59, 0xb5, 0x57, 0xf4, 0xa7, 0x77, 0xab, 0x1b, 0x15, 0xea, 0xa1, 0x29, 0x47, + 0x50, 0xd4, 0x06, 0x3a, 0x0c, 0x1e, 0x45, 0x9f, 0x1b, 0xdc, 0xbf, 0x95, 0x25, + 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, 0x79, 0x87, 0x40, 0xe0, + 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, 0xa0, 0xae, 0x0f, 0x07, + 0x6c, 0x58, 0x2c, 0x0f, 0x5b, 0xa8, 0x78, 0xb9, 0x9b, 0x82, 0x49, 0xdb, 0x1d, + 0x7e, 0x95, 0x05, 0x6c, 0x98, 0xaf, 0x08, 0x3d, 0x98, 0xcb, 0x0e, 0xd9, 0xe3, + 0xf7, 0x43, 0x6e, 0x1c, 0x76, 0x43, 0x76, 0x6f, 0x96, 0x6b, 0x83, 0xe9, 0x99, + 0x20, 0x6e, 0xbd, 0x13, 0x93, 0xb9, 0xb2, 0xa7, 0xf4, 0x14, 0x48, 0x0f, 0xa0, + 0x17, 0x48, 0x00, 0x69, 0xf8, 0x5c, 0x77, 0x49, 0xc4, 0x35, 0xae, 0x2f, 0xba, + 0x2d, 0xdc, 0x10, 0x38, 0xd5, 0x47, 0xd8, 0x48, 0x54, 0x81, 0x7e, 0xf3, 0x96, + 0x35, 0xc2, 0x98, 0x27, 0xaa, 0xd8, 0x67, 0x26, 0xc9, 0xad, 0xe3, 0xb2, 0x65, + 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, 0x56, 0xfe, 0x4b, 0xd8, 0xb4, 0xd6, + 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, 0xda, 0xc4, 0x64, 0x15, 0x6d, + 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0x1d, 0x83, 0xb8, 0x6f, 0x65, 0x96, 0x37, 0xe3, + 0xb1, 0x42, 0xc1, 0x64, 0x96, 0x3b, 0x8c, 0xdc, 0xf4, 0xba, 0x4f, 0x40, 0x35, + 0xdf, 0xfc, 0x5a, 0x78, 0x94, 0x58, 0x84, 0x77, 0x81, 0x91, 0x8a, 0xc7, 0x2f, + 0xc1, 0x8b, 0xbb, 0xf5, 0x11, 0x00, 0x32, 0xe6, 0x6d, 0x75, 0xb3, 0x17, 0x1e, + 0xf4, 0xb5, 0x13, 0x29, 0x01, 0x64, 0xa7, 0x7b, 0x42, 0xb0, 0xa4, 0xcf, 0xb8, + 0x96, 0x39, 0xab, 0x23, 0x84, 0x5e, 0x1a, 0xa2, 0xa4, 0x52, 0xf3, 0x73, 0x1c, + 0x8c, 0xb6, 0x50, 0x82, 0xa6, 0x22, 0xa7, 0xc2, 0xe0, 0x01, 0x3e, 0xa4, 0x7d, + 0x0b, 0xdd, 0x42, 0xd6, 0x99, 0x04, 0x66, 0x64, 0x9a, 0x90, 0x5c, 0x68, 0x4c, + 0x32, 0x51, 0x71, 0x6d, 0x61, 0xf7, 0x60, 0xd5, 0x3d, 0xe6, 0xe3, 0xf7, 0x90, + 0xfb, 0xa7, 0xf5, 0xf1, 0xf4, 0xde, 0x26, 0x71, 0x13, 0xbd, 0xfc, 0xd7, 0x42, + 0x28, 0x22, 0x33, 0x0b, 0x32, 0xd5, 0x8e, 0x67, 0x77, 0x76, 0x5f, 0x22, 0xa4, + 0x11, 0x63, 0x44, 0xee, 0xb6, 0x5b, 0x2e, 0xc5, 0x16, 0x39, 0x3a, 0xb3, 0x75, + 0x1b, 0x53, 0x56, 0xd2, 0xb0, 0xc9, 0x50, 0x0c, 0x0f, 0x3e, 0x46, 0x91, 0x81, + 0x03, 0x5b, 0xc3, 0x66, 0x0f, 0x0b, 0x8f, 0x9f, 0xbe, 0x6e, 0x40, 0xb5, 0xe8, + 0x9c, 0xb7, 0x9b, 0x06, 0x37, 0x14, 0xca, 0x75, 0xe7, 0x2e, 0x2e, 0x10, 0x0a, + 0x10, 0xd6, 0x3b, 0xf7, 0x84, 0xdf, 0x08, 0x20, 0xef, 0x25, 0xf8, 0xef, 0x40, + 0xfe, 0x5f, 0x05, 0xfb, 0x95, 0x68, 0x3f, 0x91, 0x05, 0xff, 0x3c, 0xb2, 0xd2, + 0x19, 0xab, 0x76, 0x60, 0x5a, 0x06, 0x4f, 0x69, 0x21, 0x9f, 0x1d, 0xc0, 0xd0, + 0x0b, 0x3b, 0x48, 0x64, 0x2f, 0x97, 0x0d, 0xc0, 0x0c, 0xca, 0x4b, 0x8b, 0x43, + 0x30, 0x8b, 0xe1, 0x82, 0x86, 0xec, 0x5a, 0x42, 0x88, 0xd6, 0x00, 0xa3, 0x78, + 0x5c, 0xb6, 0x22, 0xd4, 0x68, 0xa4, 0xc6, 0x96, 0x9b, 0x37, 0x92, 0xf2, 0x48, + 0x50, 0x27, 0xd0, 0xad, 0x9a, 0xa4, 0xa9, 0xc2, 0xcc, 0x97, 0x2f, 0x9e, 0xe5, + 0x19, 0x0a, 0x95, 0xb1, 0xeb, 0x05, 0x8d, 0xdd, 0xd8, 0xc0, 0x8e, 0x7d, 0x75, + 0x3f, 0x5e, 0x01, 0x1b, 0x2b, 0xcf, 0xee, 0x1d, 0x52, 0xc1, 0xc4, 0xf2, 0xca, + 0xcd, 0xa3, 0x0b, 0xdb, 0x69, 0x30, 0x65, 0x3c, 0x0c, 0xc4, 0x48, 0x6e, 0x60, + 0xe8, 0x9f, 0xa8, 0x49, 0xb3, 0x20, 0x83, 0xba, 0x9d, 0xb4, 0x53, 0xfb, 0x8d, + 0xf6, 0x83, 0xcd, 0x68, 0x75, 0x4c, 0x87, 0xda, 0xa7, 0x31, 0xf5, 0x70, 0xa7, + 0xa4, 0x06, 0x0a, 0xf0, 0xce, 0x70, 0x0d, 0x31, 0xbc, 0xa7, 0xe7, 0x4b, 0x3e, + 0x3b, 0xa3, 0xd0, 0xe8, 0xa6, 0x39, 0x2a, 0x06, 0x2b, 0x8e, 0x86, 0xd9, 0xd7, + 0xd0, 0x0b, 0x21, 0x70, 0x1e, 0x7b, 0x06, 0x2e, 0x06, 0xb1, 0xbc, 0xd8, 0x2a, + 0x01, 0xd3, 0x75, 0x62, 0x6f, 0xbf, 0x87, 0x2d, 0x27, 0xfa, 0x45, 0x11, 0xf5, + 0xf8, 0xcf, 0x8c, 0x9a, 0xbc, 0xef, 0x2a, 0x99, 0x01, 0x76, 0xae, 0x33, 0x93, + 0x25, 0xd5, 0xa5, 0x88, 0xda, 0x57, 0x96, 0xfa, 0xae, 0x5b, 0xab, 0x7c, 0x82, + 0x97, 0x7c, 0x0f, 0xf7, 0x97, 0x09, 0x3e, 0x2c, 0x1f, 0x3a, 0xe8, 0x55, 0xf6, + 0x5a, 0xea, 0x91, 0xe1, 0x31, 0x2f, 0xc6, 0xb8, 0xa4, 0x35, 0x1a, 0x2e, 0xc0, + 0x3e, 0x02, 0xe5, 0xd0, 0x2f, 0x53, 0x35, 0x4b, 0x05, 0x2f, 0xd3, 0xda, 0x0d, + 0xff, 0x82, 0xcd, 0x1f, 0x55, 0xeb, 0xca, 0x57, 0xb6, 0x33, 0x7c, 0x85, 0x93, + 0x8a, 0x79, 0x81, 0x3d, 0x20, 0x21, 0xd6, 0x09, 0x4c, 0x68, 0xb3, 0x75, 0xe9, + 0x84, 0xf6, 0x83, 0x93, 0x30, 0x08, 0x71, 0xe3, 0x48, 0xfc, 0x52, 0x36, 0xcc, + 0xa6, 0x33, 0x05, 0x44, 0xe5, 0x46, 0x39, 0xb5, 0x41, 0x87, 0x01, 0xff, 0x4c, + 0xc4, 0x5a, 0x31, 0xf6, 0x2e, 0xdd, 0x84, 0x3d, 0xbb, 0xdc, 0x5a, 0xa7, 0x27, + 0xab, 0x79, 0xb4, 0x42, 0x68, 0x3c, 0x49, 0x56, 0xbb, 0x00, 0xac, 0x67, 0xfd, + 0x0e, 0xb6, 0x91, 0x03, 0x00, 0xc0, 0xd4, 0x8a, 0x3d, 0xbc, 0x04, 0x29, 0x7a, + 0xce, 0x23, 0x71, 0x67, 0x8c, 0xb8, 0x1a, 0x66, 0xb7, 0x40, 0x09, 0xe5, 0x7a, + 0x85, 0xf7, 0xbf, 0x68, 0xa2, 0xe4, 0x82, 0x00, 0x0f, 0x82, 0x1c, 0x74, 0x50, + 0x73, 0xa1, 0x5d, 0x5c, 0xd0, 0xfc, 0xc5, 0x74, 0x39, 0xa4, 0x35, 0x0e, 0xaf, + 0x09, 0x8d, 0xfb, 0x82, 0xa0, 0x85, 0xea, 0x8a, 0x4a, 0xf6, 0xfa, 0x83, 0x81, + 0xf0, 0x65, 0x88, 0x19, 0xea, 0xb4, 0x83, 0xf6, 0x5b, 0x32, 0x5d, 0x5a, 0xed, + 0xa1, 0x52, 0x32, 0xcf, 0xad, 0xec, 0x75, 0xab, 0x18, 0x66, 0xe4, 0xc0, 0x15, + 0x5a, 0x9c, 0x74, 0xa7, 0xa5, 0x7c, 0xcf, 0x34, 0xc4, 0x83, 0xac, 0x7d, 0xa1, + 0x58, 0x8a, 0x1b, 0x6b, 0x99, 0x41, 0xf1, 0x10, 0x40, 0xf9, 0x4c, 0xf7, 0x8f, + 0xad, 0x89, 0xbf, 0x11, 0xfe, 0xd6, 0x9a, 0xa0, 0xd8, 0x31, 0x05, 0xad, 0xac, + 0xdd, 0x4e, 0x5f, 0x04, 0xa6, 0x24, 0x24, 0x02, 0x3c, 0x9b, 0x9e, 0x33, 0xc4, + 0xfb, 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, 0xf2, 0x65, 0xc5, 0x37, 0x88, 0x7c, + 0xe7, 0xff, 0x9d, 0x9c, 0x18, 0x8b, 0xdf, 0x15, 0xe3, 0x25, 0xa0, 0x0d, 0xf2, + 0x66, 0xa4, 0x4f, 0x9b, 0x4b, 0x7e, 0x5b, 0x3f, 0x0b, 0x0b, 0x2b, 0xd1, 0x82, + 0x26, 0x38, 0xbd, 0x86, 0x3b, 0xf5, 0x7b, 0xfd, 0xaa, 0x5d, 0xa2, 0xb0, 0xcb, + 0x93, 0x1f, 0x69, 0xc7, 0x3a, 0x56, 0x07, 0xdf, 0x71, 0xcd, 0x26, 0x28, 0xc9, + 0x87, 0x42, 0x9f, 0x36, 0xdc, 0x50, 0x5c, 0xcc, 0x43, 0x33, 0x56, 0x05, 0x27, + 0x6f, 0x2b, 0xfd, 0x8f, 0x2d, 0x3e, 0x9c, 0x63, 0x70, 0xcf, 0x55, 0x99, 0xf6, + 0x66, 0xb6, 0xcb, 0x7e, 0x2c, 0xef, 0x58, 0x13, 0x7b, 0xa7, 0xda, 0xc2, 0x8b, + 0x14, 0x36, 0x8d, 0x28, 0xe7, 0x23, 0xfe, 0x7c, 0x6e, 0x59, 0x39, 0xc2, 0x4c, + 0x6c, 0x84, 0xf3, 0x84, 0x5f, 0x46, 0x41, 0x90, 0x15, 0x44, 0xed, 0xbb, 0xe3, + 0xac, 0x46, 0x4c, 0xf4, 0x39, 0x19, 0x60, 0x15, 0x34, 0x29, 0x76, 0x81, 0x07, + 0x7c, 0x2f, 0x08, 0xe3, 0xa7, 0x80, 0x57, 0x77, 0xb0, 0x8a, 0xce, 0xfd, 0xc1, + 0xaa, 0xab, 0x74, 0x5e, 0x56, 0x20, 0x27, 0xc6, 0xa1, 0x81, 0xaf, 0x40, 0x98, + 0x3b, 0xb1, 0xcf, 0xaa, 0xcb, 0xd8, 0xc0, 0x63, 0xd0, 0xf6, 0xfc, 0x1a, 0x90, + 0xb0, 0x8e, 0xfd, 0xb9, 0xbc, 0xaa, 0xd1, 0xe2, 0x07, 0x70, 0xff, 0xb8, 0xaa, + 0xbf, 0x83, 0xfc, 0x07, 0x34, 0x96, 0x4c, 0x0d, 0x05, 0xae, 0xc9, 0x29, 0x43, + 0xab, 0x49, 0x5c, 0x4d, 0x0c, 0x10, 0xf6, 0xb6, 0x68, 0xdf, 0x7f, 0x71, 0x24, + 0x74, 0xf4, 0x69, 0xe3, 0x58, 0x66, 0xb3, 0xee, 0x93, 0xf2, 0x1f, 0x8a, 0x6f, + 0x82, 0xc9, 0x24, 0xde, 0x3e, 0xe8, 0x98, 0x9a, 0x82, 0x8a, 0x05, 0xa4, 0x6b, + 0x38, 0x20, 0x26, 0xbc, 0x37, 0x92, 0xf1, 0x35, 0xbf, 0x5f, 0x68, 0x78, 0x7d, + 0x37, 0x0c, 0xa8, 0xc4, 0xc4, 0x07, 0x0d, 0x00, 0xa6, 0x26, 0x69, 0x38, 0xfe, + 0x89, 0x21, 0x79, 0x99, 0xf7, 0x60, 0xa6, 0x1d, 0xbe, 0x55, 0xf1, 0xbd, 0x0c, + 0x9f, 0x6f, 0xb7, 0x0d, 0xed, 0x8a, 0x1a, 0xcb, 0x90, 0xe6, 0xa2, 0xeb, 0xb7, + 0x92, 0xa0, 0xd6, 0x77, 0xa3, 0xea, 0xca, 0x23, 0xed, 0xeb, 0x07, 0xb7, 0x4e, + 0x65, 0x2a, 0x0b, 0xc5, 0x0c, 0x6c, 0x08, 0x3a, 0x55, 0xd6, 0xc7, 0x30, 0x6e, + 0x74, 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, 0x00, + ], + txid: [ + 0xd1, 0xb7, 0x08, 0x2a, 0xdd, 0xa4, 0x5b, 0x2a, 0x92, 0x48, 0xb1, 0xd5, 0x8e, + 0x3a, 0x99, 0xa8, 0xdc, 0xc6, 0xc9, 0xd5, 0x5b, 0x09, 0xfb, 0x6b, 0x99, 0xd6, + 0xc0, 0x71, 0x01, 0xe7, 0xda, 0x0d, + ], + auth_digest: [ + 0x81, 0xd8, 0xb1, 0x83, 0x4a, 0x34, 0x49, 0xe6, 0x4c, 0x69, 0xc1, 0x86, 0x2a, + 0x82, 0x07, 0xe2, 0x64, 0xee, 0xd4, 0xf9, 0x78, 0x20, 0x36, 0x88, 0x67, 0xe8, + 0x09, 0x46, 0xfd, 0xd8, 0xe6, 0x24, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0xd1, 0xb7, 0x08, 0x2a, 0xdd, 0xa4, 0x5b, 0x2a, 0x92, 0x48, 0xb1, 0xd5, 0x8e, + 0x3a, 0x99, 0xa8, 0xdc, 0xc6, 0xc9, 0xd5, 0x5b, 0x09, 0xfb, 0x6b, 0x99, 0xd6, + 0xc0, 0x71, 0x01, 0xe7, 0xda, 0x0d, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x48, + 0x73, 0x68, 0x18, 0x67, 0xdd, 0xee, 0x01, 0x00, 0x03, 0x22, 0x2e, 0x20, 0xce, + 0x22, 0x76, 0x03, 0x00, 0x06, 0x00, 0x51, 0x65, 0x65, 0x51, 0x65, 0x3a, 0xcd, + 0x55, 0x5f, 0xa6, 0x3f, 0x01, 0x00, 0x06, 0xac, 0x65, 0x65, 0x65, 0x63, 0x53, + 0x20, 0x56, 0x6e, 0x1f, 0x78, 0x7a, 0x02, 0x00, 0x06, 0x65, 0x53, 0x6a, 0xac, + 0x51, 0x63, 0x00, 0x00, 0x02, 0x57, 0xf6, 0x1d, 0x24, 0x1c, 0xe3, 0xca, 0x10, + 0x23, 0xcb, 0x68, 0xdb, 0x08, 0x60, 0xa6, 0xd7, 0x61, 0x03, 0xb1, 0x2a, 0x61, + 0xd6, 0xff, 0xdd, 0x6c, 0xad, 0x71, 0x7a, 0xf9, 0xd7, 0x96, 0x06, 0x6d, 0xc6, + 0xc4, 0x63, 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, 0x63, 0x12, + 0x3e, 0x3e, 0x6d, 0xd3, 0x6e, 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, 0xee, 0xca, + 0x2a, 0xa0, 0x9a, 0x32, 0x16, 0x27, 0x0d, 0xce, 0x70, 0xd1, 0xcc, 0xa6, 0x96, + 0x28, 0x45, 0x02, 0xac, 0x98, 0x3b, 0x1e, 0x17, 0x51, 0x75, 0x78, 0x9a, 0x7c, + 0x59, 0xb0, 0x22, 0xe6, 0x50, 0x06, 0xbc, 0x73, 0x47, 0x98, 0xf4, 0xca, 0xd0, + 0xf2, 0xf9, 0x8c, 0xa2, 0x32, 0xe1, 0x1b, 0x58, 0x0a, 0x30, 0xd2, 0xc0, 0xe8, + 0x79, 0x50, 0xdd, 0x84, 0x83, 0x9b, 0xc3, 0xea, 0x7f, 0xde, 0xe4, 0xed, 0x71, + 0x44, 0x9c, 0x30, 0x10, 0x61, 0x2f, 0x61, 0x06, 0x45, 0xe0, 0xaa, 0x76, 0x43, + 0x23, 0x91, 0xcf, 0xae, 0x5f, 0xcd, 0x09, 0x78, 0xc1, 0x0e, 0x0d, 0xcc, 0xde, + 0x6a, 0x67, 0x24, 0x30, 0xf3, 0x1c, 0x6d, 0x6c, 0xa7, 0xaf, 0xab, 0x6e, 0x67, + 0x57, 0x61, 0x00, 0x8b, 0x0d, 0xad, 0xde, 0xec, 0xaa, 0x60, 0x44, 0x70, 0xbb, + 0xe0, 0xfa, 0xda, 0x25, 0x5d, 0x29, 0x0e, 0x92, 0xb1, 0x90, 0xc2, 0xc2, 0xd8, + 0xc2, 0xde, 0xe5, 0x45, 0x5d, 0x1f, 0xa9, 0xa9, 0xf3, 0xdb, 0x77, 0x79, 0xb5, + 0x84, 0x64, 0x34, 0x64, 0xaa, 0x80, 0x14, 0xba, 0x66, 0x99, 0x4d, 0xe2, 0x55, + 0x17, 0xf8, 0x39, 0x80, 0xe6, 0x6e, 0xe4, 0xf6, 0x23, 0x14, 0xae, 0x6d, 0xbe, + 0xf4, 0x52, 0xd5, 0xd3, 0x8b, 0x0a, 0x16, 0xf3, 0x99, 0x1f, 0x36, 0xd8, 0xa8, + 0xb3, 0x9d, 0xdc, 0x0d, 0x55, 0x95, 0xee, 0xd9, 0x87, 0x62, 0x87, 0x8c, 0xdf, + 0x3f, 0x4a, 0x2e, 0xdc, 0x5c, 0xda, 0x77, 0xd5, 0xfe, 0x4f, 0xaf, 0x63, 0xa1, + 0x5f, 0x56, 0x8a, 0x54, 0x0d, 0xa5, 0x7d, 0xd9, 0xbe, 0xb6, 0xfb, 0x1a, 0x97, + 0x7c, 0xcb, 0x91, 0xb4, 0xd7, 0x9c, 0xb3, 0x9b, 0x28, 0x91, 0x1a, 0x29, 0xe7, + 0xbf, 0x02, 0x8a, 0xc6, 0x10, 0x37, 0x96, 0xdf, 0xb6, 0xb2, 0x09, 0x67, 0x23, + 0x9a, 0xd3, 0x73, 0xc3, 0x8c, 0x53, 0xf6, 0xdf, 0x18, 0x23, 0xd4, 0x95, 0x0a, + 0x02, 0x83, 0xe9, 0x9b, 0x9c, 0x06, 0xab, 0x29, 0x66, 0x66, 0x7c, 0x9d, 0xf6, + 0x77, 0x71, 0x6b, 0x0c, 0xad, 0xed, 0x81, 0x8d, 0xf9, 0xe4, 0x49, 0xc0, 0x72, + 0xe2, 0x2f, 0x9d, 0x98, 0xbb, 0x0f, 0x9b, 0x03, 0xbd, 0x5f, 0xd0, 0x13, 0xfc, + 0xef, 0x3e, 0xd6, 0xa4, 0x9a, 0xeb, 0x98, 0x72, 0x02, 0x54, 0x08, 0x7e, 0xf7, + 0x28, 0xe3, 0x19, 0x47, 0xff, 0xe8, 0xf7, 0x66, 0xe6, 0x3e, 0xe4, 0x6f, 0xf2, + 0x08, 0x16, 0xd5, 0xfa, 0x8f, 0xf5, 0x5a, 0x26, 0x39, 0x89, 0x61, 0x49, 0x0a, + 0xb9, 0xae, 0x36, 0x6f, 0xc5, 0xa2, 0xd1, 0x99, 0x6e, 0xd6, 0x93, 0xcc, 0xca, + 0x82, 0x35, 0x6f, 0x60, 0x0a, 0xb0, 0x99, 0xf6, 0xec, 0xa8, 0xbf, 0xe6, 0x45, 0x27, 0x0d, 0x3f, 0x95, 0xed, 0xba, 0x5b, 0x0d, 0xe7, 0xa3, 0x28, 0x19, 0x23, - 0x3b, 0x0c, 0x55, 0x35, 0x01, 0x14, 0xcc, 0xbc, 0x48, 0x15, 0x86, 0xfd, 0x05, - 0x42, 0xc3, 0xa0, 0xaf, 0xdd, 0x24, 0x52, 0x28, 0xac, 0x74, 0x74, 0xb3, 0xf5, - 0x49, 0xb1, 0x03, 0xa0, 0x06, 0x2d, 0xf1, 0xbd, 0xae, 0x35, 0xbe, 0x3f, 0x6a, - 0x92, 0xda, 0xd6, 0x17, 0x7c, 0xb8, 0x48, 0xee, 0xe2, 0x4c, 0x85, 0x20, 0xa3, + 0x3b, 0xcc, 0x75, 0x4a, 0x5c, 0xe2, 0xe5, 0xea, 0x07, 0x84, 0x2e, 0x5f, 0xf2, + 0xce, 0xbe, 0x62, 0xad, 0x76, 0xe8, 0xef, 0xf8, 0xd1, 0x5e, 0xa4, 0xc2, 0x4a, + 0x5f, 0x20, 0x78, 0x68, 0x31, 0x9a, 0x5a, 0xf6, 0xb0, 0x35, 0xbe, 0x3f, 0x44, + 0xf4, 0x34, 0x09, 0x4f, 0x6e, 0x52, 0x5b, 0xe6, 0x14, 0xda, 0xc9, 0x20, 0xa3, 0x30, 0xbd, 0xfb, 0x26, 0xd7, 0x5f, 0xe7, 0xb4, 0xb3, 0x65, 0xd0, 0x94, 0x45, - 0x12, 0x22, 0xea, 0xe1, 0x8b, 0x98, 0x49, 0xf5, 0xaa, 0x17, 0xe5, 0x2c, 0xa5, - 0xc7, 0x1e, 0x84, 0x40, 0x75, 0xcd, 0x44, 0x03, 0x8e, 0x5c, 0x89, 0x4c, 0xa2, - 0xcd, 0x19, 0x76, 0x5c, 0xf8, 0xf6, 0x1b, 0x61, 0x9a, 0xf0, 0x24, 0x56, 0xae, + 0x92, 0x50, 0xaa, 0xa5, 0x54, 0x44, 0x89, 0xfb, 0x1d, 0x99, 0x25, 0x81, 0x80, + 0x0a, 0x77, 0xb8, 0x91, 0x21, 0x57, 0xfc, 0x97, 0x13, 0xaa, 0xac, 0x25, 0xb4, + 0xc2, 0x6e, 0xb0, 0x3f, 0x71, 0x66, 0x46, 0x61, 0x9a, 0xf0, 0x24, 0x56, 0xae, 0x69, 0x59, 0x62, 0xfe, 0x5e, 0x93, 0x1a, 0x63, 0xb5, 0xc7, 0x90, 0x52, 0xec, 0xd3, 0x33, 0xe1, 0x84, 0x12, 0xdb, 0x91, 0xe1, 0x5f, 0x7c, 0xbc, 0x70, 0xb4, 0xcd, 0x7e, 0x8e, 0x3c, 0x95, 0x1f, 0x35, 0x85, 0x72, 0xe3, 0x77, 0x67, 0xe7, @@ -6912,37 +8855,37 @@ pub mod zip_0244 { 0xd9, 0x0b, 0x94, 0xb1, 0x2c, 0x57, 0xfa, 0x3f, 0xd6, 0x93, 0x00, 0x83, 0xf1, 0x84, 0x43, 0x8d, 0x8a, 0x88, 0x9d, 0x3f, 0x5e, 0xce, 0xa2, 0xc6, 0xd2, 0x3d, 0x67, 0x36, 0xf2, 0xa0, 0xf1, 0x8e, 0x26, 0xf4, 0xfa, 0x45, 0xd1, 0xbe, 0x8f, - 0x3d, 0xc4, 0xa7, 0x07, 0x13, 0x7e, 0x95, 0xd2, 0xad, 0x59, 0x4f, 0x6c, 0x03, - 0xd2, 0x49, 0x23, 0x06, 0x7a, 0xe4, 0x7f, 0xd6, 0x42, 0x5e, 0xfb, 0x9c, 0x1d, - 0x50, 0x4e, 0x6f, 0xd5, 0x57, 0x53, 0x40, 0x94, 0x56, 0x01, 0xfe, 0x80, 0x6f, - 0x57, 0x56, 0xac, 0xb5, 0x62, 0xf1, 0x3c, 0x0c, 0xa1, 0xd8, 0x03, 0xa1, 0x95, - 0xc2, 0xeb, 0xb2, 0xef, 0x02, 0xac, 0x33, 0xe6, 0xa8, 0x8d, 0xea, 0x07, 0x5b, - 0xa9, 0x96, 0xd3, 0xc3, 0x36, 0x64, 0x8e, 0x86, 0x94, 0xd3, 0xa1, 0x9d, 0x3d, - 0xca, 0x53, 0x1b, 0xeb, 0x50, 0xd4, 0x32, 0x7c, 0x5c, 0x0c, 0x23, 0xcb, 0x7c, - 0xfd, 0xb0, 0x8c, 0xa7, 0xcf, 0x2c, 0xac, 0x6b, 0xc1, 0x39, 0xd0, 0x74, 0x14, - 0x73, 0xd3, 0x76, 0x02, 0x9c, 0xb4, 0xab, 0x6b, 0xf0, 0x54, 0x55, 0x7c, 0xe2, - 0x94, 0xc7, 0x28, 0xa4, 0x68, 0x7d, 0x57, 0xec, 0x89, 0x09, 0xff, 0x51, 0xa4, - 0xd0, 0x2f, 0x9d, 0xcd, 0x11, 0x19, 0x3d, 0x7d, 0x1c, 0x9f, 0xda, 0xe6, 0xa1, - 0x73, 0x96, 0xa1, 0xbf, 0x57, 0xa9, 0x94, 0x93, 0x4f, 0x5e, 0x7a, 0x59, 0xf0, - 0x45, 0xde, 0xbe, 0xaf, 0xf6, 0x2e, 0xf3, 0x26, 0xb9, 0x47, 0xf2, 0xa8, 0xb4, - 0x95, 0x55, 0xe4, 0xd9, 0x9b, 0x3b, 0xf5, 0xc8, 0x1f, 0xf9, 0xfe, 0x31, 0x4e, - 0x04, 0x7a, 0xf1, 0x52, 0x50, 0x8f, 0x57, 0x01, 0x5c, 0xa4, 0x02, 0xc6, 0x7d, - 0x92, 0x5c, 0x99, 0xac, 0xea, 0x3e, 0xe8, 0xcc, 0x4b, 0x00, 0x8c, 0x5c, 0xb4, - 0x39, 0x66, 0xe7, 0x14, 0xef, 0x48, 0x0f, 0xd0, 0x5e, 0x07, 0xc7, 0xb2, 0xdd, - 0xa9, 0xaa, 0x39, 0x66, 0x11, 0x3e, 0xaa, 0x29, 0x3d, 0x3f, 0x62, 0x2b, 0x30, - 0x9d, 0x64, 0x80, 0x3c, 0xe1, 0xe6, 0x37, 0x8b, 0x6a, 0xac, 0x4f, 0xab, 0x52, - 0x7c, 0x43, 0xcd, 0x45, 0xed, 0x0a, 0x3c, 0x1a, 0x4b, 0x9f, 0xb1, 0x8d, 0xcc, - 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, 0x63, 0x9c, 0xda, 0x00, 0x75, 0xa2, - 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, 0x99, 0x49, 0x5b, 0xd9, 0x13, 0x3d, - 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, 0xba, 0x92, 0xc7, 0xb6, 0x06, 0xa5, - 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, 0x59, 0x6f, 0x27, 0x88, 0xf3, 0xc8, - 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, 0xf5, 0xdd, 0x23, 0xdf, 0xdb, 0xac, - 0x13, 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, 0xfe, 0xd2, 0x29, 0x2c, 0x44, 0xf7, - 0x08, 0x34, 0xcf, 0x96, 0xc0, 0x5d, 0x58, 0x82, 0x7e, 0x69, 0xbf, 0xc2, 0xe6, - 0x96, 0xfa, 0x08, 0x74, 0x02, 0x5e, 0x2c, 0x3d, 0x19, 0xb0, 0x72, 0x02, 0x00, + 0x3d, 0xc4, 0xa7, 0x07, 0x13, 0x7e, 0x95, 0xd2, 0xad, 0x59, 0x4f, 0x6c, 0xb9, + 0x3c, 0x75, 0x97, 0xf2, 0xec, 0xf8, 0x85, 0x50, 0x74, 0xbe, 0x99, 0x1f, 0x42, + 0x4c, 0xe5, 0x2b, 0x14, 0xe3, 0xbb, 0xd4, 0x6d, 0x34, 0x16, 0x6b, 0xe0, 0x16, + 0x08, 0x0d, 0x04, 0x96, 0x23, 0x9a, 0xb4, 0xab, 0x6b, 0x16, 0xf3, 0xfa, 0x49, + 0xab, 0xa2, 0x2d, 0x16, 0xac, 0x36, 0xf0, 0x12, 0xec, 0x89, 0x09, 0xff, 0x51, + 0xa4, 0xd0, 0x2f, 0x9d, 0xcd, 0x11, 0x19, 0x3d, 0x7d, 0x1c, 0x1f, 0x62, 0x99, + 0x91, 0x2a, 0x82, 0x74, 0xc2, 0xfb, 0xb1, 0xaf, 0xa2, 0x33, 0xe8, 0x2c, 0x1e, + 0x83, 0xc0, 0x81, 0x38, 0x19, 0x2e, 0xd6, 0xba, 0x75, 0x2e, 0x68, 0xf0, 0x6d, + 0x25, 0x40, 0xad, 0xac, 0xd8, 0x9b, 0x3b, 0xf5, 0xdb, 0xee, 0xcb, 0x65, 0x16, + 0x55, 0xb7, 0x70, 0xf5, 0xb9, 0x09, 0x6d, 0x57, 0x01, 0x5c, 0xa4, 0x02, 0xc6, + 0x7d, 0x92, 0x5c, 0x99, 0xac, 0xea, 0x3e, 0xe8, 0xcc, 0x0b, 0x54, 0x1d, 0x15, + 0xb1, 0xc2, 0x6b, 0x29, 0x48, 0x85, 0x9b, 0xd8, 0xb2, 0x99, 0x4e, 0xd0, 0x0f, + 0x16, 0xe9, 0x8c, 0x32, 0x01, 0x80, 0x29, 0x51, 0x66, 0x1a, 0xbb, 0x13, 0x53, + 0x50, 0xbf, 0xb6, 0x80, 0x3c, 0xe1, 0xe6, 0x37, 0x8b, 0x6a, 0xac, 0x4f, 0xab, + 0x52, 0x7c, 0x43, 0xcd, 0x45, 0xed, 0x0a, 0x3c, 0x1a, 0x4b, 0x9f, 0xb1, 0x8d, + 0xcc, 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, 0x63, 0x9c, 0xda, 0x00, 0x75, + 0xa2, 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, 0x99, 0x49, 0x5b, 0xd9, 0x13, + 0x3d, 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, 0xba, 0x92, 0xc7, 0xb6, 0x06, + 0xa5, 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, 0x59, 0x6f, 0x27, 0x88, 0xf3, + 0xc8, 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, 0xf5, 0xdd, 0x23, 0xdf, 0xdb, + 0xac, 0x13, 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, 0xfe, 0xd2, 0x29, 0x2c, 0x44, + 0xf7, 0x08, 0x34, 0xcf, 0x96, 0xc0, 0x5d, 0x58, 0x82, 0x7e, 0x69, 0xbf, 0xc2, + 0xe6, 0x96, 0xfa, 0x08, 0x74, 0x86, 0x9c, 0x02, 0xf3, 0xdc, 0xa1, 0x1c, 0x3b, + 0x90, 0xcb, 0x21, 0x4e, 0x68, 0xbc, 0x1c, 0xae, 0x03, 0x9d, 0x7a, 0x14, 0x6c, + 0xdc, 0x1d, 0x60, 0x9d, 0x7a, 0x6b, 0x3f, 0xd5, 0xd4, 0x61, 0xb0, 0x95, 0x1c, + 0x82, 0xcf, 0xb3, 0xe7, 0x63, 0xfa, 0xd2, 0xd1, 0xbc, 0x76, 0x78, 0xcd, 0xf8, + 0x27, 0x79, 0xf8, 0xfd, 0x5a, 0x1c, 0xe2, 0x2a, 0x8d, 0x3c, 0x45, 0x47, 0xab, + 0xd9, 0x59, 0x83, 0x8a, 0x46, 0xfb, 0x80, 0xaf, 0xe0, 0x1f, 0x8e, 0xcc, 0x99, 0x31, 0x51, 0x3b, 0x19, 0x62, 0xec, 0x54, 0x08, 0x56, 0xcb, 0x18, 0x93, 0x87, 0xcf, 0xbf, 0xcc, 0x0f, 0x7c, 0x68, 0x22, 0x3c, 0xba, 0x47, 0xfb, 0x0c, 0x9b, - 0x48, 0x6e, 0x4d, 0x99, 0x17, 0x19, 0x61, 0xf7, 0x67, 0x5a, 0x8b, 0x46, 0x32, + 0x48, 0x6e, 0x4d, 0x99, 0x17, 0x19, 0x41, 0xf7, 0x67, 0x5a, 0x8b, 0x46, 0x32, 0x8a, 0x3b, 0xc1, 0x09, 0xbf, 0x07, 0xc6, 0x6d, 0x5e, 0xde, 0x77, 0x1c, 0xc4, 0xc7, 0x4c, 0xe8, 0x03, 0x33, 0x82, 0x91, 0x91, 0xee, 0xdc, 0x49, 0x35, 0x08, 0xa6, 0x44, 0x53, 0x0a, 0x61, 0x44, 0xf2, 0x2d, 0xcf, 0x97, 0x52, 0x5a, 0x4c, @@ -6950,426 +8893,1842 @@ pub mod zip_0244 { 0x40, 0x1b, 0xff, 0x43, 0x18, 0x26, 0x8e, 0x6a, 0xd6, 0x37, 0x36, 0x31, 0x57, 0xa1, 0x9a, 0x53, 0xf1, 0x23, 0xa0, 0xb0, 0xe1, 0x6d, 0x0b, 0x77, 0xf0, 0x20, 0x28, 0xda, 0x46, 0x41, 0x00, 0xfd, 0xe7, 0x6d, 0x83, 0xdd, 0x0b, 0xb2, 0x24, - 0xed, 0xe2, 0x80, 0x42, 0x29, 0x0a, 0xb2, 0xbc, 0xe8, 0x54, 0x13, 0x9b, 0xca, - 0x36, 0xe5, 0xb2, 0xcb, 0xdf, 0xdd, 0x91, 0x06, 0xfc, 0x9f, 0x18, 0xb9, 0x55, - 0x53, 0xe4, 0xfe, 0x54, 0x8b, 0x3e, 0x4a, 0x87, 0xda, 0xa7, 0xef, 0x1e, 0xe3, - 0x8e, 0xe9, 0xb4, 0xe0, 0xdc, 0xd6, 0x3e, 0x80, 0xec, 0xbb, 0xa7, 0xe7, 0x4b, - 0x3e, 0x3b, 0xa3, 0xd0, 0xe8, 0xa6, 0x39, 0x2a, 0x06, 0x2b, 0x8e, 0x06, 0x5a, - 0x54, 0x41, 0x4c, 0x3c, 0x5b, 0xd9, 0xce, 0x4e, 0x85, 0xca, 0x62, 0x93, 0xe8, - 0x84, 0xd1, 0x45, 0x6a, 0x4c, 0x31, 0xe1, 0x65, 0x4f, 0xf2, 0x3e, 0xf2, 0x6e, - 0x2e, 0x14, 0xe1, 0x29, 0x8a, 0x49, 0xc0, 0x72, 0xe2, 0x2f, 0x9d, 0x98, 0xbb, - 0x0f, 0x9b, 0x03, 0xbd, 0x5f, 0xd0, 0x13, 0xfc, 0xef, 0x3e, 0xd6, 0xa4, 0x9a, - 0xeb, 0x98, 0x72, 0x02, 0x54, 0x08, 0x7e, 0xf7, 0x28, 0xe3, 0x19, 0xdb, 0x96, - 0x4c, 0xea, 0x54, 0xd0, 0xec, 0xa7, 0x6c, 0xfe, 0x56, 0x28, 0x8b, 0x6f, 0x64, - 0xf4, 0xa1, 0x9d, 0xf3, 0x7e, 0xd1, 0x7b, 0xe8, 0x12, 0xe8, 0x2d, 0x7d, 0x40, - 0x53, 0x6f, 0x37, 0x8a, 0x93, 0x1c, 0x82, 0xcf, 0x71, 0x11, 0xd6, 0xe1, 0x17, - 0x80, 0x93, 0x63, 0x80, 0x9b, 0x6b, 0xe3, 0x78, 0xf8, 0xfd, 0x5a, 0x1c, 0xe2, - 0x2a, 0x8d, 0x3c, 0x45, 0x47, 0xab, 0xd9, 0x59, 0x83, 0x0a, 0xaa, 0xf0, 0x13, - 0xde, 0x2b, 0xf2, 0x7a, 0x1f, 0xba, 0xe8, 0xb1, 0x6f, 0x38, 0xd1, 0x34, 0x9b, - 0x60, 0x31, 0xce, 0x02, 0x34, 0x8a, 0x24, 0x05, 0x79, 0xc0, 0xe5, 0x35, 0x79, - 0x04, 0x58, 0xb4, 0x96, 0x3b, 0x61, 0x69, 0x33, 0xd1, 0x00, 0x5c, 0x1d, 0x03, - 0xd4, 0xc9, 0x51, 0x80, 0xc8, 0xd1, 0x7a, 0x55, 0xef, 0x4b, 0xee, 0x46, 0x56, - 0x68, 0xb2, 0x0e, 0xa4, 0x11, 0x8c, 0xa5, 0x69, 0x2e, + 0xf7, 0xb5, 0x7a, 0x00, 0xc0, 0x2f, 0x68, 0xae, 0x64, 0x8f, 0xdc, 0x52, 0x99, + 0x57, 0xa1, 0x04, 0x90, 0xdc, 0xe1, 0xfd, 0xdb, 0xb0, 0x90, 0x4f, 0x0d, 0x51, + 0x8b, 0xb3, 0x87, 0x54, 0x40, 0x19, 0x98, 0x3b, 0x61, 0x69, 0x75, 0xa7, 0x8e, + 0x74, 0xd8, 0x54, 0xfd, 0xdc, 0x49, 0xb2, 0x55, 0x16, 0x7b, 0x55, 0xef, 0x4b, + 0xee, 0x46, 0x56, 0x68, 0xb2, 0x0e, 0xa4, 0x11, 0x8c, 0xa5, 0x69, 0xae, 0x48, + 0x0e, 0x0f, 0x6e, 0x5e, 0x04, 0x3a, 0x35, 0x7b, 0x36, 0xd3, 0xab, 0x36, 0xc8, + 0x61, 0xf2, 0x27, 0x83, 0x01, 0xdc, 0xe5, 0x76, 0x74, 0xd5, 0x07, 0x3b, 0x3a, + 0x6f, 0x51, 0x03, 0xa0, 0x79, 0x3a, 0xf1, 0xb7, 0xd4, 0x6f, 0x95, 0x7e, 0x22, + 0xd8, 0xd2, 0x58, 0x3b, 0xf1, 0x81, 0x83, 0x6c, 0x3b, 0xe9, 0x93, 0x0b, 0xac, + 0x8f, 0xa4, 0x60, 0xe9, 0x68, 0xaa, 0x71, 0x09, 0x87, 0x0b, 0xbe, 0xd1, 0x7d, + 0xf5, 0xf8, 0x88, 0xc8, 0xca, 0x14, 0x67, 0xae, 0x17, 0xdb, 0xbc, 0xde, 0x31, + 0xc1, 0x10, 0x5c, 0xb5, 0xbd, 0xa8, 0x8a, 0xc6, 0xc6, 0x27, 0x00, 0x2c, 0xe2, + 0x1c, 0x02, 0x14, 0x0f, 0xfe, 0x81, 0xec, 0x58, 0xbf, 0x1e, 0x6d, 0x1b, 0xb7, + 0xaa, 0xad, 0xa4, 0x1f, 0xba, 0x0b, 0xb5, 0x88, 0x77, 0x8a, 0x7f, 0x65, 0x20, + 0x2a, 0xd8, 0x11, 0xea, 0x73, 0xd2, 0x6c, 0x74, 0x55, 0x03, 0x95, 0xaf, 0xf7, + 0x53, 0x25, 0x10, 0x7c, 0x9b, 0x3f, 0x9a, 0xe9, 0xdc, 0xdc, 0xd8, 0x6e, 0xd0, + 0x81, 0xa2, 0xe7, 0x42, 0x47, 0x19, 0xa3, 0xd1, 0x85, 0xb7, 0xe0, 0xa4, 0x3a, + 0x47, 0x2e, 0x29, 0x8a, 0xc0, 0xaf, 0xdc, 0x52, 0x87, 0xd7, 0xad, 0x12, 0x4c, + 0xd9, 0x40, 0x5a, 0x62, 0xcd, 0x1c, 0xa0, 0x8b, 0x28, 0x2e, 0xfe, 0xf7, 0xf9, + 0x28, 0xdf, 0x76, 0xe2, 0x82, 0x1a, 0x41, 0x84, 0x13, 0xeb, 0x7c, 0xea, 0xa5, + 0xff, 0x12, 0x90, 0xb0, 0x3e, 0xc9, 0x1c, 0xe6, 0xdd, 0x28, 0x13, 0x0c, 0x3a, + 0xb0, 0xb2, 0x3b, 0x60, 0x2b, 0xd5, 0xbe, 0x5d, 0xc2, 0x60, 0x03, 0xaa, 0xe0, + 0x4b, 0x33, 0xd7, 0xbd, 0x25, 0x90, 0xe9, 0x0c, 0x8c, 0x38, 0x8e, 0xa7, 0x95, + 0x51, 0x22, 0xdb, 0xac, 0xa6, 0x7b, 0x30, 0x39, 0x5a, 0x92, 0x8b, 0x57, 0xb8, + 0x57, 0x51, 0x23, 0x20, 0x5a, 0xe1, 0x91, 0x52, 0xe4, 0x1e, 0x00, 0x29, 0x31, + 0xb4, 0x57, 0x46, 0x19, 0x8e, 0x5d, 0xd9, 0x57, 0x1a, 0x56, 0xa7, 0xe0, 0xd4, + 0x23, 0xff, 0x27, 0x98, 0x9d, 0x3e, 0xb4, 0x17, 0xec, 0xd3, 0xc3, 0x09, 0x3f, + 0xb8, 0x2c, 0x56, 0x58, 0xe2, 0x96, 0x24, 0xc5, 0x32, 0x19, 0xa6, 0x0c, 0xd0, + 0xa8, 0xc4, 0xda, 0x36, 0x7e, 0x29, 0x04, 0x45, 0x76, 0x2a, 0x33, 0xce, 0x9a, + 0x01, 0x00, 0xc5, 0xec, 0x21, 0x49, 0x05, 0x4e, 0xa2, 0x41, 0x64, 0xe8, 0x5f, + 0x67, 0x44, 0xad, 0x0c, 0xac, 0xf1, 0xa8, 0xb7, 0x01, 0x26, 0xf4, 0x82, 0xc0, + 0x92, 0xed, 0x9f, 0x61, 0x27, 0xd2, 0x05, 0x0d, 0x32, 0xe8, 0x78, 0xa7, 0x96, + 0x53, 0xa1, 0xe8, 0x4d, 0xae, 0xc3, 0xeb, 0xe6, 0x2d, 0x5f, 0x6c, 0x4a, 0xbe, + 0x5c, 0xe9, 0x0a, 0x7f, 0xe2, 0xe5, 0x2a, 0x8d, 0x78, 0x46, 0xe8, 0xed, 0xf2, + 0xf2, 0xbc, 0xe0, 0x5a, 0x03, 0x7c, 0x82, 0x6f, 0x22, 0xca, 0xad, 0x12, 0x61, + 0x46, 0x7d, 0xcf, 0xb7, 0xd6, 0xb6, 0x13, 0x7a, 0xf4, 0x40, 0xa1, 0x3e, 0xc1, + 0x34, 0x3b, 0xde, 0x69, 0x55, 0x09, 0x28, 0xf3, 0x47, 0x08, 0xdf, 0x88, 0xcc, + 0xca, 0x08, 0x8c, 0x09, 0x05, 0x73, 0x3c, 0xd0, 0xc1, 0x46, 0x35, 0x52, 0x3b, + 0xef, 0x3c, 0x0c, 0xa1, 0x96, 0x2d, 0x13, 0x7d, 0x07, 0x9a, 0x89, 0xdc, 0x0a, + 0x7a, 0xa6, 0xa1, 0xa8, 0x8d, 0xea, 0x07, 0x5b, 0xa9, 0x96, 0xd3, 0xc3, 0x36, + 0x64, 0x8e, 0x86, 0x94, 0xd3, 0x21, 0x93, 0x53, 0x64, 0xcc, 0x8a, 0x31, 0x7f, + 0xc3, 0xf1, 0xd3, 0x0e, 0xeb, 0x87, 0xb8, 0x4e, 0xde, 0xc6, 0x2e, 0x2b, 0x0c, + 0x17, 0x28, 0x7b, 0xca, 0xd8, 0xef, 0x7f, 0x15, 0x30, 0x2c, 0xb9, 0x2c, 0x9e, + 0xdb, 0x84, 0x9c, 0x3c, 0x97, 0x89, 0x1a, 0x3c, 0x7a, 0x2d, 0xdc, 0xdc, 0x11, + 0x1d, 0x86, 0xa5, 0x0c, 0x38, 0xbd, 0x03, 0x87, 0x72, 0xc4, 0x14, 0x3d, 0x8b, + 0x7a, 0xcf, 0xd7, 0x4e, 0x32, 0x00, 0xb3, 0xea, 0x42, 0xfb, 0x06, 0x84, 0x5a, + 0x53, 0x32, 0x38, 0xf3, 0xc0, 0x6a, 0x64, 0x81, 0x1c, 0x59, 0xc3, 0x6e, 0x13, + 0xd3, 0xdf, 0x55, 0x41, 0x59, 0xec, 0xbf, 0x75, 0x32, 0xf5, 0x51, 0xb4, 0x52, + 0xb4, 0x76, 0x23, 0x32, 0x93, 0x9f, 0x17, 0xe6, 0xaa, 0xf7, 0xd8, 0xb9, 0xd3, + 0x58, 0xe2, 0x21, 0x8d, 0x4e, 0x0d, 0x69, 0xa4, 0xf1, 0x19, 0xe1, 0xc6, 0x4e, + 0xec, 0x4c, 0x8b, 0x53, 0x28, 0x00, + ], + txid: [ + 0x7f, 0x07, 0xf7, 0xc4, 0x52, 0x8d, 0xe7, 0x75, 0xdd, 0xd4, 0x35, 0x5c, 0x2f, + 0xa7, 0x5e, 0x4b, 0x8c, 0xb0, 0x47, 0x0a, 0xe0, 0x2a, 0x15, 0x55, 0x19, 0x72, + 0x28, 0x42, 0x83, 0x1e, 0x58, 0xe0, + ], + auth_digest: [ + 0x98, 0x03, 0xc3, 0x06, 0xbb, 0xfd, 0x4a, 0xd4, 0xa4, 0x8b, 0xc5, 0x69, 0xae, + 0x4e, 0x1f, 0xdb, 0x0a, 0x1d, 0x24, 0xe9, 0x3d, 0x76, 0xd2, 0x34, 0xae, 0xd6, + 0xa7, 0x5e, 0x35, 0x69, 0x11, 0xd4, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0x7f, 0x07, 0xf7, 0xc4, 0x52, 0x8d, 0xe7, 0x75, 0xdd, 0xd4, 0x35, 0x5c, 0x2f, + 0xa7, 0x5e, 0x4b, 0x8c, 0xb0, 0x47, 0x0a, 0xe0, 0x2a, 0x15, 0x55, 0x19, 0x72, + 0x28, 0x42, 0x83, 0x1e, 0x58, 0xe0, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x70, + 0x71, 0x31, 0xf0, 0x1f, 0x5c, 0xc4, 0x18, 0x02, 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, + 0x3d, 0x0a, 0x2b, 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, 0x5b, 0x8c, 0x94, + 0xca, 0x80, 0xbb, 0x0a, 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, 0x83, 0x04, + 0xae, 0x25, 0x15, 0xd5, 0xf7, 0x05, 0x63, 0x52, 0x65, 0x63, 0x52, 0x0b, 0xe6, + 0x09, 0xd8, 0x73, 0x51, 0x10, 0x12, 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, + 0xfb, 0x63, 0x4c, 0xff, 0x26, 0x58, 0xba, 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, + 0x5e, 0xce, 0xfb, 0x30, 0x15, 0xee, 0x3f, 0x03, 0xca, 0x52, 0xa1, 0x77, 0x06, + 0x51, 0xac, 0xac, 0x65, 0xac, 0x00, 0x9d, 0x34, 0xc6, 0x40, 0x00, 0x00, 0x00, + 0x02, 0x45, 0xd9, 0xeb, 0xc8, 0x09, 0x24, 0x37, 0x25, 0xf3, 0x72, 0x0a, 0x24, + 0x9e, 0xf2, 0x47, 0x8f, 0x0b, 0x3a, 0x97, 0x07, 0xaa, 0xfb, 0xdf, 0x5c, 0x17, + 0x73, 0x6b, 0x7c, 0x16, 0x36, 0x07, 0x02, 0x8c, 0xc7, 0x03, 0xa8, 0x6f, 0x81, + 0x43, 0x5e, 0x7b, 0xb4, 0xe0, 0x89, 0x82, 0x91, 0x79, 0xb3, 0xe0, 0xa3, 0x48, + 0x21, 0x75, 0x80, 0x00, 0xaa, 0x59, 0xc9, 0xd4, 0x65, 0x24, 0x85, 0x29, 0x0e, + 0xc9, 0x6c, 0x30, 0xa6, 0x6e, 0x98, 0x1e, 0xad, 0x1b, 0x17, 0xcb, 0xaf, 0xc1, + 0xfd, 0x4e, 0x4b, 0x97, 0x52, 0xe0, 0xbe, 0xbe, 0x20, 0x51, 0x5c, 0xb5, 0x00, + 0x95, 0x1a, 0xb2, 0x65, 0xe5, 0x02, 0x68, 0x09, 0x27, 0x80, 0x85, 0x73, 0x93, + 0xd3, 0xf7, 0x84, 0xaa, 0xe2, 0x0d, 0x8f, 0x06, 0x02, 0xfd, 0x84, 0x42, 0xe0, + 0x18, 0x25, 0xc8, 0x8d, 0xfe, 0x55, 0xcf, 0x5d, 0xe3, 0x89, 0x36, 0x37, 0xba, + 0x8f, 0x09, 0x7d, 0xe6, 0xa9, 0xa9, 0x10, 0x2c, 0xdb, 0x0c, 0x3d, 0x9f, 0x25, + 0xc1, 0xac, 0xc7, 0x02, 0xbc, 0x6e, 0x18, 0xb8, 0x8b, 0x2e, 0x47, 0x0f, 0xbb, + 0xdc, 0x5d, 0xae, 0x3d, 0x33, 0xf3, 0xac, 0x4f, 0x07, 0x0f, 0xc3, 0x5e, 0x16, + 0x19, 0x78, 0x25, 0x9e, 0x5b, 0x8e, 0xdc, 0x74, 0x4d, 0x90, 0x91, 0x9a, 0xa7, + 0x70, 0xbb, 0x36, 0x21, 0x51, 0x28, 0xe5, 0x82, 0xb5, 0x96, 0x41, 0xe2, 0x38, + 0x52, 0xe9, 0x58, 0xeb, 0x8f, 0xc3, 0xc0, 0xaa, 0x96, 0x15, 0x2b, 0xa4, 0xf7, + 0x7f, 0x13, 0x8d, 0x6a, 0x67, 0x12, 0xa3, 0xae, 0x32, 0x26, 0x01, 0x58, 0x83, + 0xf8, 0x1d, 0xb2, 0x3e, 0x58, 0x3c, 0x86, 0x9c, 0x4c, 0x71, 0x14, 0x3a, 0x6f, + 0xff, 0xd6, 0x5e, 0x8d, 0xfd, 0xc5, 0x0c, 0x99, 0xa2, 0xf1, 0xf3, 0x14, 0xcd, + 0xcc, 0x71, 0x35, 0x9e, 0x23, 0x5f, 0x1d, 0x7d, 0xc2, 0xb5, 0xf3, 0x8e, 0xf7, + 0xb9, 0x70, 0x84, 0x31, 0x63, 0xc0, 0x3f, 0x9d, 0xd4, 0x0a, 0x80, 0x15, 0xef, + 0xdc, 0x87, 0x91, 0x95, 0x6a, 0x3f, 0x3c, 0xed, 0xd9, 0xea, 0x64, 0xf8, 0xef, + 0xa7, 0xa0, 0x81, 0x5a, 0x70, 0x38, 0x1d, 0x71, 0x46, 0x78, 0x17, 0xbd, 0x04, + 0xca, 0x52, 0x9a, 0xed, 0xe0, 0x7f, 0xf6, 0x0d, 0x17, 0x6a, 0xed, 0x0f, 0x85, + 0x5a, 0x2e, 0xae, 0xa8, 0x9e, 0xae, 0xac, 0xa8, 0x93, 0x58, 0xc0, 0x81, 0x82, + 0x6a, 0x08, 0x12, 0xa5, 0xbc, 0xa2, 0x8b, 0xe1, 0x37, 0x3f, 0x08, 0x6d, 0xbd, + 0xba, 0x7e, 0x43, 0xe2, 0x03, 0x21, 0x2c, 0x9f, 0xed, 0x21, 0x47, 0x4b, 0xa1, + 0x9a, 0x05, 0x5f, 0xfc, 0xc1, 0x79, 0x41, 0x2e, 0x89, 0x3a, 0x74, 0x48, 0x32, + 0x29, 0x8c, 0x5f, 0xe2, 0x4c, 0xc6, 0xb1, 0x86, 0x67, 0xf4, 0x9b, 0x34, 0xdf, + 0xb1, 0x23, 0x79, 0x26, 0x74, 0x19, 0xa9, 0xcb, 0x94, 0x03, 0xd8, 0x16, 0x7d, + 0x8d, 0x1e, 0x91, 0xd2, 0x81, 0x1a, 0x04, 0x3b, 0x29, 0x24, 0x3b, 0x06, 0x9b, + 0x37, 0x58, 0x78, 0x47, 0xdc, 0x6f, 0xcd, 0xdb, 0x18, 0x31, 0xbd, 0x1c, 0xc2, + 0x56, 0x7c, 0xa0, 0x33, 0xac, 0x40, 0xf7, 0x4a, 0xb6, 0x95, 0x5f, 0x68, 0x3b, + 0x12, 0xe4, 0xe8, 0x25, 0x4e, 0x4e, 0xa7, 0x60, 0xd3, 0x8b, 0x3f, 0x46, 0x79, + 0x1c, 0x5c, 0x4c, 0xb1, 0x2b, 0xc7, 0xcc, 0xb0, 0xed, 0x18, 0x65, 0xf2, 0x5d, + 0x60, 0x1c, 0x30, 0x3f, 0x81, 0xfb, 0x1f, 0xa1, 0xdb, 0x48, 0x53, 0x3d, 0x3d, + 0x6b, 0x28, 0x8e, 0x4d, 0x9a, 0x4d, 0xff, 0x8e, 0xc2, 0x1c, 0x96, 0xf5, 0x78, + 0x39, 0x97, 0x10, 0xc8, 0x25, 0xfe, 0x7e, 0x32, 0xf9, 0x3a, 0x8c, 0x07, 0x43, + 0xf9, 0xeb, 0xd5, 0x4c, 0xc1, 0x51, 0xc7, 0x61, 0x03, 0x37, 0xae, 0xbf, 0x7e, + 0x9b, 0x91, 0x57, 0x20, 0xa5, 0x43, 0x51, 0xd4, 0x9a, 0xb8, 0xc2, 0x2f, 0xa3, + 0x49, 0x98, 0xdc, 0xf5, 0x83, 0xd4, 0x38, 0x73, 0x61, 0xef, 0x3f, 0xf8, 0x6f, + 0x50, 0xec, 0x53, 0xf4, 0x92, 0x49, 0xe4, 0xad, 0x34, 0x96, 0x03, 0x06, 0x6f, + 0xc9, 0xc6, 0x61, 0xd6, 0x9f, 0x91, 0x1d, 0xfa, 0x72, 0x41, 0xc8, 0xd5, 0x79, + 0x2d, 0x43, 0xc4, 0x57, 0xd5, 0xde, 0x96, 0x52, 0x3a, 0x53, 0xd6, 0x67, 0xec, + 0x5c, 0x4e, 0xf9, 0xd5, 0x02, 0xa1, 0x6f, 0x15, 0x22, 0x47, 0x58, 0x96, 0xd7, + 0x9b, 0xc5, 0x78, 0x33, 0xe9, 0x77, 0x17, 0x1c, 0x32, 0x4d, 0xce, 0x2a, 0x1e, + 0xa1, 0xe4, 0x30, 0x4f, 0x49, 0xe4, 0x3a, 0xe0, 0x65, 0xe3, 0xfb, 0x19, 0x6f, + 0x76, 0xd9, 0xb8, 0x79, 0xc7, 0x20, 0x08, 0x62, 0xea, 0xd1, 0x8d, 0xea, 0x5f, + 0xb6, 0xa1, 0x7a, 0xce, 0xa3, 0x33, 0x86, 0xeb, 0x4c, 0xa1, 0xb5, 0x14, 0x86, + 0xa9, 0x14, 0x8f, 0xbd, 0xf9, 0xa9, 0x53, 0x32, 0xaa, 0x60, 0x5c, 0x5d, 0x54, + 0x83, 0xce, 0x4b, 0xa8, 0xec, 0xe0, 0x1a, 0x8f, 0xf2, 0xb7, 0xef, 0x82, 0xd0, + 0x5c, 0x0b, 0x6e, 0x86, 0x1b, 0x91, 0x5f, 0x13, 0xca, 0x0e, 0xb3, 0xea, 0x13, + 0xd5, 0x07, 0x08, 0x07, 0xa2, 0xcb, 0x66, 0x80, 0xa2, 0x49, 0xea, 0x9c, 0x72, + 0x24, 0x39, 0x2c, 0xbc, 0x8a, 0xb8, 0x25, 0x01, 0xb2, 0x6f, 0x11, 0x2a, 0xc7, + 0x89, 0xa1, 0x2a, 0x31, 0xad, 0x13, 0x14, 0xe2, 0xed, 0xe0, 0x8f, 0xad, 0x31, + 0x43, 0xaf, 0x30, 0xc2, 0x7f, 0x40, 0x3b, 0xc8, 0x66, 0xc7, 0x55, 0x17, 0x78, + 0x52, 0xaf, 0xd0, 0xab, 0xb9, 0x0a, 0xde, 0x1d, 0x68, 0x27, 0x26, 0xf4, 0x20, + 0x08, 0xb4, 0x6a, 0xd7, 0xf8, 0xab, 0xdb, 0x18, 0x11, 0x7f, 0x72, 0x64, 0x13, + 0x90, 0xf0, 0x86, 0xb6, 0xe1, 0x49, 0x8b, 0xe6, 0x95, 0x48, 0x52, 0x7e, 0x6a, + 0xda, 0x2b, 0x38, 0xb9, 0xfe, 0x12, 0x1e, 0xf6, 0x70, 0xaf, 0x74, 0x37, 0xd3, + 0x25, 0x36, 0xd5, 0xcf, 0x5c, 0x4a, 0xb1, 0x9d, 0xd9, 0x97, 0x71, 0x58, 0x2d, + 0x03, 0x81, 0x04, 0xb7, 0xe0, 0x39, 0xa3, 0x76, 0xf7, 0xac, 0xbb, 0xea, 0xdb, + 0x34, 0xf9, 0x45, 0xbe, 0xb9, 0xd7, 0xca, 0x0e, 0x4e, 0x3d, 0x5c, 0x5e, 0x4e, + 0xb1, 0xd8, 0x52, 0x6e, 0xbd, 0x13, 0xda, 0xcb, 0x1b, 0xa3, 0x57, 0x35, 0xc6, + 0xd0, 0x4a, 0x45, 0x55, 0xac, 0xf4, 0xbf, 0x11, 0x76, 0x26, 0x50, 0x0d, 0x77, + 0xb3, 0x81, 0x89, 0xdd, 0x48, 0x88, 0x04, 0x12, 0x76, 0x32, 0x3f, 0xdc, 0x4c, + 0x86, 0x30, 0xfb, 0x06, 0xc0, 0x1b, 0xe7, 0xe9, 0x81, 0x5e, 0x72, 0x00, 0x6d, + 0x98, 0x24, 0x69, 0xdc, 0x7f, 0xfc, 0x16, 0x90, 0x03, 0xc1, 0xf5, 0x76, 0xf0, + 0x09, 0x2f, 0x7a, 0x07, 0x10, 0xd4, 0xf2, 0x06, 0xb1, 0x18, 0xf4, 0x57, 0x9f, + 0xb2, 0x69, 0xc1, 0x22, 0xb1, 0x49, 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, 0xe3, + 0x81, 0x93, 0xbc, 0x7b, 0xdc, 0x8b, 0x23, 0xa2, 0xc9, 0xf9, 0x1e, 0x0f, 0x96, + 0x7a, 0xb9, 0x4a, 0xd7, 0xb4, 0x4c, 0x2d, 0x71, 0xd3, 0x4c, 0x7a, 0xb0, 0xc2, + 0xec, 0xb2, 0xba, 0x64, 0x2c, 0x48, 0xfa, 0xa7, 0x8b, 0x3e, 0x63, 0x9b, 0xa8, + 0xa5, 0x7c, 0x7a, 0x91, 0x6a, 0x74, 0x38, 0x8e, 0xe8, 0xf1, 0x28, 0x1f, 0x9a, + 0xde, 0x0a, 0xe2, 0xa2, 0x61, 0x3a, 0x06, 0x12, 0xc4, 0x69, 0xdf, 0x79, 0x2b, + 0x8d, 0xf4, 0xca, 0xe4, 0xfc, 0x25, 0x28, 0x09, 0xd0, 0x6a, 0xd4, 0xfb, 0xc1, + 0xaf, 0x52, 0x48, 0xa7, 0xcc, 0x35, 0xcb, 0x2e, 0x58, 0x21, 0x79, 0x11, 0x95, + 0x66, 0x64, 0x2b, 0x4c, 0x1f, 0xe9, 0xd3, 0x32, 0x1c, 0x15, 0x41, 0x36, 0xaf, + 0x1f, 0x3f, 0x07, 0xda, 0x9a, 0x39, 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, + 0x98, 0x7a, 0xdf, 0xe9, 0x56, 0x48, 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, + 0x88, 0x41, 0x58, 0x30, 0x99, 0xaf, 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, + 0x34, 0x7e, 0x40, 0xb6, 0xfd, 0x8c, 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, + 0x9a, 0x02, 0x19, 0xbc, 0x3e, 0x4e, 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, + 0x16, 0x86, 0x08, 0x68, 0x76, 0xbe, 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, + 0x8f, 0x4f, 0xab, 0x3d, 0x28, 0xc0, 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, + 0xf8, 0x89, 0x46, 0xfb, 0x40, 0xcf, 0xa5, 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, + 0x3c, 0x83, 0x47, 0xec, 0xee, 0x93, 0xd4, 0x6d, 0x14, 0x0b, 0xb5, 0xf6, 0x95, + 0x31, 0xd6, 0x66, 0x54, 0x8b, 0x10, 0x9c, 0xe7, 0x64, 0xbe, 0xad, 0x7c, 0x87, + 0xbd, 0x4c, 0x87, 0x64, 0x94, 0xde, 0x82, 0xdb, 0x6e, 0x50, 0x73, 0xa6, 0xc9, + 0x4f, 0x7c, 0x09, 0x9a, 0x40, 0xd7, 0xa3, 0x1c, 0x4a, 0x04, 0xb6, 0x9c, 0x9f, + 0xcc, 0xf3, 0xc7, 0xdd, 0x56, 0xf5, 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, 0xf7, + 0x95, 0x39, 0x81, 0xd5, 0x5a, 0x96, 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, + 0x42, 0xe5, 0xba, 0xfe, 0xc8, 0x84, 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, + 0xc4, 0x60, 0xf9, 0x8f, 0xeb, 0x82, 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, + 0x76, 0x79, 0x82, 0x36, 0xc5, 0xca, 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, + 0x4d, 0x87, 0x13, 0xe5, 0x6c, 0x77, 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, + 0x3a, 0x88, 0x54, 0xbc, 0x6e, 0x65, 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, + 0x0b, 0x73, 0xba, 0x24, 0x1b, 0xf7, 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, + 0x96, 0x87, 0xac, 0x52, 0x69, 0xfd, 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, + 0x26, 0x76, 0x85, 0x99, 0x8a, 0x3f, 0x7d, 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, + 0x46, 0x49, 0x5d, 0x24, 0xc4, 0x98, 0x63, 0x5e, 0xf9, 0x7a, 0xc6, 0x6a, 0x40, + 0x08, 0x94, 0xc0, 0x9f, 0x73, 0x48, 0x8e, 0xb7, 0xcf, 0x33, 0xf6, 0xda, 0xd1, + 0x66, 0x6a, 0x05, 0xf9, 0x1a, 0xd7, 0x75, 0x79, 0x65, 0xc2, 0x99, 0x36, 0xe7, + 0xfa, 0x48, 0xd7, 0x7e, 0x89, 0xee, 0x09, 0x62, 0xf5, 0x8c, 0x05, 0x1d, 0x11, + 0xd0, 0x55, 0xfc, 0xe2, 0x04, 0xa5, 0x62, 0xde, 0x68, 0x08, 0x8a, 0x1b, 0x26, + 0x48, 0xb8, 0x17, 0x4c, 0xbc, 0xfc, 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x11, 0x5a, + 0xfd, 0xe1, 0x84, 0x05, 0x05, 0x4e, 0x5d, 0xa9, 0xa0, 0x43, 0x10, 0x34, 0x2c, + 0x5d, 0x3b, 0x52, 0x6e, 0x0b, 0x02, 0xc5, 0xca, 0x17, 0x22, 0xba, 0xde, 0xee, + 0x23, 0xd1, 0x45, 0xe8, 0xeb, 0x22, 0x13, 0xfc, 0x4a, 0xf1, 0xe4, 0x50, 0xe4, + 0xd5, 0x21, 0x7c, 0x66, 0x17, 0x00, 0x8c, 0x78, 0xf4, 0xfb, 0x11, 0x12, 0xf4, + 0x02, 0x8a, 0x70, 0x4f, 0xc5, 0xa9, 0x38, 0x2c, 0x6b, 0x03, 0xe7, 0xd8, 0x08, + 0x5e, 0x90, 0x6c, 0xf8, 0x4c, 0xa2, 0xc1, 0x20, 0x7c, 0x87, 0xa2, 0xbc, 0xe2, + 0x08, 0x0a, 0x98, 0x91, 0x66, 0x8d, 0x69, 0xb0, 0x44, 0xbe, 0xce, 0xd6, 0xcd, + 0xa3, 0x2c, 0x22, 0x9c, 0x91, 0x17, 0x91, 0x7a, 0xa0, 0x7d, 0xdf, 0xfc, 0xd3, + 0x77, 0x39, 0x5c, 0xba, 0x61, 0x6d, 0x63, 0xc0, 0xb6, 0x9c, 0x01, 0xfc, 0xc4, + 0x53, 0x91, 0xfd, 0x5b, 0x87, 0x63, 0xfb, 0x96, 0xd7, 0xca, 0x33, 0x3a, 0x12, + 0xde, 0x3c, 0xef, 0xa9, 0x1c, 0x6c, 0x98, 0xf9, 0x47, 0x3b, 0x8e, 0x10, 0x4a, + 0x71, 0x29, 0x3e, 0x46, 0x37, 0x47, 0x05, 0xba, 0xf6, 0x5f, 0xa4, 0x13, 0x84, + 0xba, 0x5c, 0x8e, 0x0c, 0x88, 0xa3, 0xeb, 0x07, 0xe0, 0xbe, 0x34, 0xda, 0xdd, + 0xfa, 0xbb, 0x7b, 0x65, 0x54, 0x3b, 0x5f, 0x39, 0xcb, 0x20, 0x23, 0xd4, 0x67, + 0x89, 0xeb, 0x7d, 0x98, 0x9a, 0xf7, 0x79, 0xe5, 0xb8, 0xd2, 0x83, 0x85, 0xa8, + 0x5b, 0x0d, 0xa2, 0xab, 0xe0, 0x7f, 0x0c, 0x2b, 0xb4, 0x25, 0x5f, 0xce, 0xa0, + 0x31, 0x88, 0x52, 0x7a, 0x30, 0x7d, 0x40, 0x91, 0x59, 0xe9, 0x01, 0x66, 0xfa, + 0xc6, 0xa0, 0x70, 0xba, 0x05, 0xb3, 0xe4, 0xdb, 0xfd, 0x3a, 0x2b, 0xfc, 0xc9, + 0xee, 0x6e, 0xd0, 0x16, 0xc0, 0xf6, 0x65, 0xbe, 0x81, 0x33, 0xb7, 0xdc, 0x1d, + 0x86, 0x04, 0x4d, 0xb0, 0xf9, 0xdb, 0x40, 0xfb, 0x0e, 0x9f, 0x8b, 0xc2, 0xe4, + 0xdb, 0x53, 0x82, 0xa8, 0xb4, 0xf8, 0x15, 0xb4, 0xe8, 0x43, 0x4a, 0xd0, 0xdf, + 0xbc, 0x51, 0xa5, 0xe9, 0xb1, 0x45, 0xe1, 0x59, 0x6c, 0xbf, 0x46, 0x70, 0xb7, + 0xe0, 0x5d, 0xfd, 0xaf, 0xbb, 0x0c, 0xf3, 0xdd, 0xee, 0x28, 0xd7, 0x6a, 0x82, + 0x42, 0x8e, 0x8a, 0xba, 0x43, 0x64, 0xe8, 0x4b, 0xac, 0x37, 0x92, 0x98, 0xdf, + 0x29, 0x32, 0xe6, 0x9b, 0xb5, 0xd0, 0x45, 0x51, 0x6e, 0xfc, 0x33, 0xae, 0x6c, + 0xc3, 0x94, 0x07, 0xf5, 0x7e, 0x53, 0x37, 0x1e, 0xc2, 0x05, 0x00, 0xc8, 0x44, + 0x61, 0x13, 0x00, 0xe0, 0xf2, 0x98, 0x62, 0xa1, 0x58, 0x6e, 0x1b, 0xb6, 0x44, + 0x38, 0x98, 0x00, 0x52, 0x33, 0xa8, 0x13, 0x66, 0xae, 0xe7, 0x3c, 0xec, 0x85, + 0x22, 0x8e, 0xbc, 0x3d, 0x7e, 0xe3, 0xc3, 0xfb, 0x44, 0xdb, 0x76, 0xba, 0x24, + 0x3f, 0x28, 0x42, 0xb7, 0xb5, 0xfc, 0x74, 0x6a, 0xe5, 0x1b, 0x0b, 0xc4, 0xbd, + 0x4f, 0xc9, 0xfd, 0x83, 0x35, 0x65, 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, 0xf6, + 0x99, 0x03, 0x18, 0xad, 0x8c, 0x7d, 0x94, 0x37, 0xe2, 0x0e, 0x2a, 0x1f, 0x20, + 0xe8, 0x18, 0xf9, 0x05, 0x7c, 0x5a, 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, 0x49, + 0x45, 0xcd, 0x42, 0x4c, 0x28, 0xa5, 0xfa, 0x38, 0x5d, 0xad, 0xfe, 0x49, 0x07, + 0xb2, 0x74, 0xd8, 0x42, 0x70, 0x7d, 0xb3, 0x69, 0x7a, 0x5a, 0xe6, 0xc8, 0xf5, + 0x42, 0xe5, 0xec, 0xc0, 0x7f, 0xe4, 0x73, 0x50, 0xd1, 0x01, 0x46, 0x70, 0x21, + 0x2e, 0xfe, 0x81, 0xfb, 0x7c, 0x73, 0xe8, 0x45, 0x0d, 0xf8, 0x14, 0xef, 0x62, + 0x32, 0xf7, 0x49, 0x0f, 0x63, 0xcc, 0xf0, 0x74, 0x80, 0xf8, 0x84, 0xa6, 0x6e, + 0xaf, 0xe4, 0x11, 0x20, 0x53, 0x20, 0xa3, 0xd6, 0xe8, 0xc9, 0x4f, 0xe7, 0xe5, + 0x17, 0x8d, 0xbc, 0x0f, 0xb6, 0x3e, 0x70, 0x06, 0xe4, 0xcc, 0xf6, 0x8b, 0x7e, + 0xdd, 0xa0, 0x21, 0x51, 0xf5, 0xfc, 0x1d, 0x76, 0x19, 0xc5, 0x50, 0x93, 0x32, + 0x4b, 0x47, 0x9d, 0x4d, 0x5e, 0x9c, 0x2e, 0x13, 0x5a, 0x4e, 0xb4, 0xda, 0x2f, + 0x81, 0x94, 0x86, 0x17, 0x02, 0x8e, 0x32, 0x17, 0x06, 0xa3, 0xa7, 0x78, 0x01, + 0x8b, 0x51, 0x71, 0x25, 0x08, 0xb6, 0xcf, 0x26, 0x3d, 0xa8, 0xa8, 0x59, 0x41, + 0xc2, 0xea, 0x1b, 0xe4, 0x96, 0x32, 0xb5, 0x93, 0x2d, 0x50, 0xae, 0x07, 0x7a, + 0x79, 0xe4, 0xc2, 0x1a, 0xc8, 0xae, 0x47, 0x13, 0xbb, 0xc7, 0xb3, 0xf4, 0xd0, + 0xef, 0xb5, 0xec, 0x69, 0x79, 0x62, 0xc5, 0x0e, 0xa3, 0xb3, 0x9e, 0xb9, 0x62, + 0xc0, 0x39, 0x97, 0x5f, 0x93, 0x9e, 0xd5, 0xc6, 0xe4, 0xc4, 0x00, 0x18, 0x00, + 0xa2, 0xba, 0x71, 0xdb, 0x07, 0x83, 0x54, 0x86, 0x53, 0x32, 0x43, 0x58, 0x2b, + 0x20, 0x7e, 0xd1, 0x6e, 0x06, 0xe6, 0x46, 0x0f, 0x2d, 0x2a, 0x83, 0x34, 0x9b, + 0xb5, 0x54, 0x18, 0x7c, 0x5e, 0x35, 0x50, 0xf6, 0xce, 0x5c, 0xaa, 0xf2, 0x97, + 0x68, 0xeb, 0xb2, 0x7d, 0xac, 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, 0x77, + 0x2b, 0xf8, 0x7a, 0xe1, 0x0a, 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x02, + 0xfd, 0x56, 0x01, 0xc8, 0xb5, 0x43, 0xe1, 0x9a, 0xa9, 0xe1, 0x9b, 0x90, 0xe1, + 0x9b, 0x96, 0x56, 0xc3, 0xb6, 0xc6, 0xbe, 0xc6, 0xa5, 0xc7, 0x90, 0xe1, 0x9a, + 0xa6, 0xc8, 0x99, 0xe1, 0x9a, 0xae, 0xc6, 0xa8, 0x7e, 0xe1, 0x9b, 0xa7, 0xc6, + 0xaf, 0xe2, 0xb1, 0xb0, 0x35, 0xc3, 0xb6, 0xe1, 0x9a, 0xa2, 0xc6, 0xb5, 0xc6, + 0x95, 0xc7, 0xbd, 0xe1, 0x9a, 0xae, 0x7b, 0xc7, 0xba, 0xc3, 0x96, 0xc8, 0xa1, + 0xc7, 0xa3, 0x61, 0x40, 0xc7, 0xa6, 0xe1, 0x9a, 0xb5, 0xc6, 0xb9, 0x2f, 0xc5, + 0x9f, 0xc7, 0x8e, 0xc2, 0xa4, 0xc7, 0x88, 0xc4, 0x8f, 0x47, 0xe2, 0xb1, 0xbc, + 0xc8, 0xb0, 0xe2, 0xb1, 0xa6, 0xc5, 0x85, 0xc3, 0x80, 0xc4, 0xa9, 0xc8, 0x99, + 0xe1, 0x9a, 0xac, 0xc4, 0x94, 0xc6, 0x88, 0xc2, 0xa1, 0xc6, 0xb5, 0xc2, 0xac, + 0xc5, 0xa7, 0xc8, 0xae, 0xc5, 0xb0, 0xc3, 0xaa, 0xc3, 0xb8, 0xc3, 0xa4, 0xc8, + 0xb3, 0xc8, 0x82, 0xc7, 0xa6, 0xc2, 0xae, 0x40, 0xcd, 0xba, 0xc6, 0x9b, 0xc3, + 0xa6, 0xc9, 0x88, 0xc4, 0x8d, 0xe1, 0x9b, 0x81, 0xc4, 0x8c, 0xcd, 0xb3, 0xc4, + 0xaa, 0x75, 0x76, 0xc5, 0xa2, 0xc7, 0xb9, 0xe2, 0xb1, 0xbb, 0xc3, 0x80, 0xc4, + 0x9d, 0xc7, 0x92, 0xc2, 0xa9, 0xe2, 0xb1, 0xa7, 0xe2, 0xb1, 0xae, 0xc4, 0xbe, + 0xc4, 0x97, 0x5b, 0xc6, 0x88, 0xc6, 0xaf, 0xc2, 0xb3, 0x78, 0xe2, 0xb1, 0xb8, + 0xc5, 0xb8, 0xe1, 0x9a, 0xb5, 0xc3, 0xad, 0xc6, 0x9c, 0xc4, 0x83, 0xc8, 0xb0, + 0xe2, 0xb1, 0xbd, 0xc6, 0xa3, 0x43, 0xc3, 0x95, 0xc4, 0x87, 0xc2, 0xae, 0xc3, + 0x89, 0xc2, 0xb8, 0x2b, 0x75, 0x62, 0xe1, 0x9b, 0xb0, 0xc4, 0xad, 0xc5, 0x92, + 0xc6, 0x80, 0xe1, 0x9a, 0xa9, 0xc5, 0x95, 0xc4, 0xbf, 0x6b, 0xc9, 0x8a, 0xe2, + 0xb1, 0xa6, 0xe1, 0x9b, 0x9f, 0xc3, 0x8b, 0xc3, 0x9f, 0xc7, 0xaf, 0xc5, 0x86, + 0xc5, 0xa9, 0xc4, 0xac, 0x52, 0xc7, 0xb3, 0x7b, 0xc2, 0xac, 0xc7, 0xaf, 0xc7, + 0xbf, 0xe1, 0x9b, 0xa4, 0xc3, 0xa6, 0xc4, 0xb9, 0xc5, 0x9b, 0x3b, 0xc9, 0x84, + 0xe1, 0x9a, 0xa8, 0xc2, 0xb6, 0x7a, 0x7c, 0xc7, 0x9b, 0xc8, 0x97, 0xc6, 0x8c, + 0xc3, 0xb9, 0x51, 0xc4, 0xbc, 0xc6, 0x91, 0xc8, 0x87, 0xc5, 0x86, 0xc5, 0xbf, + 0xc5, 0x9d, 0xc7, 0x81, 0x26, 0xc4, 0xb8, 0xe1, 0x9a, 0xa2, 0xe2, 0xb1, 0xa1, + 0xc2, 0xbd, 0x23, 0xc4, 0x9a, 0xc6, 0x9a, 0xc2, 0xb7, 0xc3, 0xb6, 0xc4, 0x82, + 0xc8, 0xa1, 0xc8, 0x8d, 0xc3, 0xb3, 0x5a, 0x04, 0x85, 0x96, 0xe6, 0x04, 0x4d, + 0x7f, 0xa2, 0x9c, 0x3c, 0x3e, 0x12, 0x6d, 0xfa, 0x7d, 0xac, 0xad, 0x1f, 0x8b, + 0x28, 0x0e, 0xca, 0xd1, 0xeb, 0x64, 0x95, 0xc3, 0xb7, 0x44, 0xf7, 0xa8, 0x02, + 0x58, 0xe2, 0x57, 0x3f, 0x94, 0x80, 0x36, 0x23, 0x0a, 0x2b, 0xa2, 0x0d, 0x6b, + 0x5b, 0xc9, 0x42, 0x11, 0xb6, 0x54, 0x71, 0xbd, 0x48, 0xf0, 0x31, 0x81, 0xc1, + 0x17, 0xf0, 0x9c, 0xd8, 0xa7, 0x4a, 0x18, 0xb3, 0x5c, 0xdc, 0xee, 0x0c, 0x2d, + 0x63, 0x22, 0x5e, 0x3a, 0x25, 0x1c, 0x7d, 0x0d, 0xe5, 0xec, 0x54, 0x32, 0x3d, + 0xcf, 0x4e, 0x02, 0xc3, 0xc0, 0xa4, 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, 0x1d, + 0x63, 0xa6, 0x4c, 0xb2, 0xd3, 0x23, 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, + 0xb4, 0x68, 0x21, 0x42, 0xc8, 0x32, 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, + 0xe4, 0xb5, 0xe3, 0x60, 0x34, 0x51, 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, + 0x63, 0xfa, 0x6a, 0xbb, 0x78, 0xd2, 0x1c, 0x19, 0x3c, 0xbe, 0x65, 0xb6, 0xa4, + 0xd2, 0xa7, 0x62, 0x16, 0x6f, 0x7d, 0x0f, 0x63, 0xdc, 0xb4, 0x7a, 0xa7, 0x7c, + 0x69, 0x14, 0xde, 0xe7, 0xf3, 0x33, 0xd7, 0x84, 0x68, 0x5d, 0x8b, 0x34, 0x65, + 0xea, 0x0e, 0x81, 0xb4, 0xb2, 0xe8, 0x66, 0x6d, 0xa9, 0x17, 0xbf, 0xed, 0x06, + 0x29, 0x1d, 0x08, 0xde, 0x23, 0x6a, 0x16, 0x89, 0x73, 0x1f, 0x0a, 0xbd, 0x48, + 0xf0, 0x31, 0x81, 0xc1, 0x17, 0xf0, 0x9c, 0xd8, 0xa7, 0x4a, 0x18, 0xb3, 0x5c, + 0xdc, 0xee, 0x0c, 0x2d, 0x63, 0x22, 0x5e, 0x3a, 0x25, 0x1c, 0x7d, 0x0d, 0xe5, + 0xec, 0x54, 0x32, 0x3d, 0xa4, 0xea, 0x2a, 0x13, 0x1b, 0x47, 0x33, 0xcf, 0xe4, + 0x5c, 0x6b, 0x00, 0x12, 0xc3, 0xe9, 0xe2, 0x09, 0x75, 0xba, 0xae, 0xcb, 0x02, + 0x32, 0xdf, 0x88, 0x0b, 0xd7, 0xd1, 0xde, 0x13, 0xe1, 0x34, 0x94, 0x62, 0xec, + 0x8d, 0x5d, 0xf3, 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, 0x8a, 0x8d, 0xf7, 0xfc, + 0xf3, 0x98, 0xec, 0x23, 0x05, 0x13, 0xca, 0x9d, 0x61, 0x23, 0xf8, 0xb9, 0xd8, + 0x17, 0x85, 0x60, 0x62, 0xb6, 0x2e, 0x05, 0x21, 0x3e, 0x79, 0xc1, 0xd0, 0x82, + 0xe9, 0x7f, 0x97, 0x56, 0x3d, 0xbc, 0xee, 0x27, 0x9b, 0x9e, 0x3a, 0x6c, 0xaa, + 0x49, 0x26, 0x73, 0xdb, 0x00, 0xb3, 0x06, 0x35, 0x7f, 0x97, 0x0f, 0x40, 0xc8, + 0x29, 0x2a, 0x7b, 0x62, 0xee, 0x2f, 0x8a, 0xda, 0x00, 0x74, 0x63, 0x4e, 0x01, + 0xd2, 0xab, 0xbd, 0x48, 0xf0, 0x31, 0x81, 0xc1, 0x17, 0xf0, 0x9c, 0xd8, 0xa7, + 0x4a, 0x18, 0xb3, 0x5c, 0xdc, 0xee, 0x0c, 0x2d, 0x63, 0x22, 0x5e, 0x3a, 0x25, + 0x1c, 0x7d, 0x0d, 0xe5, 0xec, 0x54, 0x32, 0x3d, 0x46, 0x87, 0x3f, 0xd6, 0x13, + 0x31, 0x7b, 0x91, 0xd2, 0x92, 0x36, 0xea, 0x90, 0xe3, 0x65, 0xd1, 0x62, 0xcc, + 0x05, 0x1c, 0x84, 0x6d, 0x24, 0x21, 0x76, 0xda, 0xf6, 0xd2, 0x86, 0x18, 0xae, + 0x31, 0xfb, 0xaa, 0xe9, 0x99, 0xa9, 0x3f, 0x17, 0x5c, 0x69, 0x38, 0xe6, 0x31, + 0xa0, 0x81, 0xf2, 0xc1, 0xf3, 0xfd, 0x78, 0x25, 0x49, 0xd3, 0xf3, 0x24, 0x57, + 0x59, 0x60, 0x6d, 0x9f, 0x92, 0xd5, 0x54, 0xce, 0xe7, 0x9d, 0xa2, 0xac, 0xf5, + 0x2b, 0x46, 0xe7, 0xf4, 0x69, 0x6e, 0xe6, 0xaa, 0xde, 0xc5, 0x6c, 0xb3, 0xa3, + 0xf5, 0xf9, 0x2f, 0xb5, 0xc6, 0x77, 0xb1, 0xd5, 0xa8, 0xd8, 0x5b, 0x96, 0x12, + 0x3b, 0xac, 0x89, 0x5f, 0x2d, 0xb3, 0xfe, 0x44, 0x8a, 0xc7, 0x34, 0x87, 0xf2, + 0xda, 0x2b, 0x94, 0xb9, 0x95, 0xfe, 0xbd, 0x48, 0xf0, 0x31, 0x81, 0xc1, 0x17, + 0xf0, 0x9c, 0xd8, 0xa7, 0x4a, 0x18, 0xb3, 0x5c, 0xdc, 0xee, 0x0c, 0x2d, 0x63, + 0x22, 0x5e, 0x3a, 0x25, 0x1c, 0x7d, 0x0d, 0xe5, 0xec, 0x54, 0x32, 0x3d, 0xcb, + 0xe6, 0x22, 0xa7, 0x35, 0xef, 0x7f, 0x12, 0x07, 0xf6, 0x71, 0x62, 0x94, 0x89, + 0x20, 0x2b, 0xea, 0x0b, 0x47, 0x5e, 0x51, 0x68, 0x1a, 0xa1, 0x67, 0x78, 0xb3, + 0x9b, 0xd9, 0x23, 0xc9, 0x0d, 0xc6, 0xff, 0x83, 0x73, 0xc7, 0x9b, 0xb1, 0x70, + 0x30, 0x41, 0x7b, 0xc2, 0x00, 0xc8, 0xf0, 0xb8, 0x55, 0xac, 0xfe, 0xc1, 0x79, + 0xf7, 0x67, 0x4c, 0xec, 0x27, 0x21, 0xa1, 0x0f, 0xca, 0x69, 0x3d, 0x01, 0xfd, + 0xd0, 0x01, 0xc7, 0x9c, 0x7a, 0xe1, 0x9b, 0x8b, 0xc4, 0x9c, 0xc3, 0x8d, 0xc7, + 0xab, 0xc8, 0xb3, 0xc6, 0x9a, 0xc2, 0xb3, 0xe1, 0x9a, 0xb8, 0xc3, 0xa7, 0xc6, + 0x95, 0xc7, 0xac, 0x6d, 0xc8, 0x87, 0x68, 0xc8, 0x9d, 0xe2, 0xb1, 0xaf, 0xc6, + 0xb5, 0xc3, 0xa0, 0xc4, 0x90, 0xc4, 0xaf, 0xc5, 0xb3, 0xc4, 0xb8, 0xc4, 0x97, + 0xc3, 0xb4, 0xc5, 0xbd, 0xc8, 0x92, 0xc7, 0x88, 0xc4, 0x98, 0xc6, 0x91, 0xc5, + 0x98, 0xc3, 0x8f, 0xc7, 0xa5, 0xe2, 0xb1, 0xac, 0xe1, 0x9b, 0xa0, 0x46, 0xc3, + 0x88, 0xe1, 0x9a, 0xba, 0xe1, 0x9a, 0xad, 0xc8, 0x90, 0xc8, 0x90, 0xc7, 0xa4, + 0xc7, 0x82, 0xe2, 0xb1, 0xb3, 0x64, 0xc8, 0x87, 0xc8, 0x8d, 0xc6, 0x91, 0xc4, + 0x81, 0xc8, 0xa1, 0xc5, 0xac, 0x2e, 0xc8, 0x95, 0xc9, 0x87, 0xc3, 0x9d, 0xc8, + 0x8f, 0xc9, 0x8b, 0xc7, 0x98, 0xc7, 0x9a, 0xc6, 0xb9, 0xc7, 0xa7, 0x3d, 0xcd, + 0xb2, 0xc5, 0xb0, 0xc4, 0x8b, 0x66, 0xc3, 0x92, 0xe2, 0xb1, 0xbc, 0xe1, 0x9b, + 0x86, 0xc8, 0x95, 0xe1, 0x9b, 0xad, 0x49, 0xc8, 0x98, 0xe1, 0x9b, 0x8a, 0xe1, + 0x9a, 0xb8, 0xe1, 0x9a, 0xb0, 0xc6, 0xbd, 0xc6, 0xbe, 0xc6, 0x83, 0xc7, 0xba, + 0xc3, 0x84, 0xc7, 0xa3, 0xc6, 0xac, 0xe2, 0xb1, 0xb4, 0xc5, 0x90, 0xc7, 0x83, + 0xc8, 0x9c, 0xc5, 0xa7, 0xc4, 0xa1, 0xc3, 0xbd, 0xe2, 0xb1, 0xbf, 0xc7, 0x87, + 0xc4, 0x90, 0xc3, 0xac, 0xc7, 0x8f, 0xe1, 0x9a, 0xb2, 0xe1, 0x9b, 0xa0, 0xc3, + 0xb0, 0xc8, 0xbd, 0xc6, 0xb9, 0x39, 0xc4, 0x99, 0xc2, 0xb7, 0xc4, 0x9c, 0xc8, + 0xad, 0xc8, 0x8f, 0xc5, 0xae, 0xc4, 0x8e, 0xce, 0x86, 0xc7, 0xa6, 0xc8, 0x9a, + 0xc8, 0x8a, 0xc4, 0x97, 0xc5, 0xa8, 0xc6, 0xa6, 0xc5, 0xa5, 0xe1, 0x9b, 0xab, + 0xc7, 0x98, 0x35, 0xc8, 0xba, 0xe1, 0x9a, 0xb7, 0xc5, 0x8e, 0xc3, 0x89, 0xc5, + 0x81, 0xc8, 0x9b, 0x32, 0x66, 0xc9, 0x87, 0xe1, 0x9b, 0x97, 0x31, 0xc4, 0x81, + 0xc5, 0xb0, 0xc2, 0xb4, 0xc5, 0xbd, 0xe1, 0x9b, 0x92, 0xc6, 0xb1, 0xce, 0x86, + 0xe1, 0x9b, 0xab, 0xc8, 0x8c, 0xc4, 0x80, 0xe2, 0xb1, 0xb8, 0xc6, 0xb5, 0xc5, + 0xbb, 0xc6, 0x92, 0xe2, 0xb1, 0xba, 0xc4, 0xbc, 0xe2, 0xb1, 0xa5, 0x58, 0xc6, + 0xb7, 0xc3, 0xb2, 0xc6, 0xa5, 0xc7, 0xa5, 0x3e, 0xc6, 0x95, 0xc3, 0xbb, 0xc6, + 0xaf, 0xc8, 0x99, 0xc6, 0xb3, 0xc8, 0xb2, 0xe1, 0x9a, 0xb8, 0xc5, 0x8f, 0xc7, + 0x8a, 0xc3, 0xad, 0xc6, 0xa9, 0xe2, 0xb1, 0xb1, 0xc2, 0xa4, 0xc8, 0x97, 0xc4, + 0x89, 0x66, 0xc6, 0xad, 0xe2, 0xb1, 0xb3, 0xe2, 0xb1, 0xa9, 0xc9, 0x8c, 0xc6, + 0xb9, 0xc2, 0xbf, 0xc2, 0xa9, 0x5a, 0xc7, 0x8f, 0x2f, 0xe1, 0x9a, 0xb2, 0xe2, + 0xb1, 0xa1, 0xc6, 0xb9, 0xe1, 0x9b, 0xa7, 0xc7, 0x8f, 0xc4, 0x8f, 0xe1, 0x9a, + 0xa1, 0x73, 0xc2, 0xae, 0xc4, 0xa7, 0xe1, 0x9b, 0xa4, 0xc4, 0xa6, 0xc7, 0xa9, + 0xe1, 0x9b, 0xa1, 0x3b, 0xc4, 0x8c, 0xc6, 0xb9, 0xc5, 0x99, 0x2f, 0xc5, 0xb6, + 0xc7, 0x91, 0xc4, 0x82, 0xc8, 0x9f, 0xc3, 0x9e, 0xe2, 0xb1, 0xa1, 0xc4, 0xae, + 0xc6, 0x9c, 0xc4, 0xba, 0x4f, 0x58, 0xe1, 0x9a, 0xbf, 0xe1, 0x9a, 0xad, 0xe1, + 0x9a, 0xa1, 0xc4, 0xbb, 0xc4, 0xb8, 0x5a, 0xe1, 0x9a, 0xa2, 0xc5, 0xa8, 0xe1, + 0x9b, 0x8a, 0xc6, 0x9f, 0xc7, 0x91, 0xc8, 0xbf, 0xc4, 0x9d, 0x5a, 0x04, 0xb6, + 0xaa, 0x67, 0xfd, 0x55, 0x7a, 0x02, 0x92, 0x4d, 0x00, 0x07, 0x63, 0x39, 0xe4, + 0xd8, 0x78, 0xe4, 0xa9, 0x13, 0xf9, 0x4b, 0xf6, 0x41, 0x46, 0x80, 0x61, 0x97, + 0xc2, 0xa7, 0x5c, 0xc6, 0xb5, 0x83, 0xca, 0x33, 0x57, 0x8e, 0xe2, 0x8c, 0x12, + 0x1f, 0xcc, 0xb7, 0x47, 0x75, 0xe0, 0x02, 0x05, 0xfc, 0x9e, 0x45, 0x3b, 0x9f, + 0x5e, 0x9c, 0x4f, 0xb5, 0x5d, 0xf5, 0x32, 0xf6, 0xb1, 0xdb, 0x81, 0xc2, 0x72, + 0xbf, 0xfa, 0x7a, 0xf7, 0x57, 0x29, 0x55, 0x59, 0x41, 0x29, 0x65, 0x27, 0xe9, + 0xa3, 0x84, 0x7b, 0xbe, 0xf7, 0xb7, 0xd2, 0xe6, 0xd5, 0x5d, 0xcb, 0x90, 0xe2, + 0x3f, 0xf6, 0xb5, 0x08, 0x45, 0x9a, 0xa6, 0x99, 0xbf, 0xcb, 0xd5, 0x6f, 0x10, + 0x99, 0x77, 0x64, 0xd0, 0x87, 0x40, 0x89, 0x86, 0xe7, 0x3d, 0x6e, 0x28, 0x4f, + 0xea, 0x9a, 0x23, 0xc3, 0x93, 0x11, 0x78, 0x2f, 0x86, 0xca, 0xbf, 0xf9, 0x45, + 0x5e, 0x4c, 0xf6, 0x99, 0xe5, 0xf5, 0xd4, 0xbc, 0x0b, 0x39, 0x05, 0xa4, 0xe3, + 0xbd, 0x01, 0xc5, 0x50, 0x3c, 0x5f, 0xb2, 0x85, 0x06, 0x0a, 0xe2, 0x38, 0x96, + 0xed, 0x45, 0x08, 0xa0, 0xd0, 0xce, 0x3f, 0xba, 0x40, 0x19, 0x47, 0x1a, 0x1e, + 0x02, 0x4f, 0x67, 0x7e, 0x19, 0x81, 0x96, 0x41, 0x8c, 0xc7, 0x32, 0x69, 0x01, + 0xe4, 0x15, 0x88, 0xaa, 0x20, 0xe2, 0x92, 0x58, 0xdf, 0xb8, 0xdc, 0xf0, 0x0e, + 0x85, 0xa1, 0x3b, 0x9f, 0x5e, 0x9c, 0x4f, 0xb5, 0x5d, 0xf5, 0x32, 0xf6, 0xb1, + 0xdb, 0x81, 0xc2, 0x72, 0xbf, 0xfa, 0x7a, 0xf7, 0x57, 0x29, 0x55, 0x59, 0x41, + 0x29, 0x65, 0x27, 0xe9, 0xa3, 0x84, 0x7b, 0xbe, 0xa7, 0x6a, 0xa4, 0x77, 0xf2, + 0x24, 0xd8, 0x7a, 0x07, 0x4f, 0x43, 0xaf, 0x5d, 0x5f, 0x79, 0xb3, 0xab, 0x11, + 0x28, 0xf0, 0x81, 0x91, 0x44, 0x7f, 0xa6, 0x46, 0xbf, 0xdd, 0xe5, 0xb5, 0x1e, + 0x23, 0x3c, 0xa6, 0x15, 0x5d, 0x10, 0x15, 0x85, 0xbc, 0x2c, 0x40, 0x15, 0x8a, + 0xc2, 0x10, 0x6e, 0x66, 0xa2, 0x6e, 0x46, 0x42, 0x33, 0x70, 0x63, 0x68, 0x76, + 0xb4, 0x34, 0xa7, 0x4f, 0x8c, 0xe8, 0x06, 0xc7, 0x84, 0xd9, 0x2b, 0x77, 0x4c, + 0xa4, 0xc1, 0x8e, 0x90, 0x77, 0x08, 0x62, 0xf9, 0x7e, 0xeb, 0xfd, 0x96, 0xa9, + 0x43, 0x10, 0x75, 0xcd, 0xcf, 0x0d, 0x49, 0xb3, 0xd1, 0x30, 0x3b, 0xda, 0x5b, + 0xf4, 0xb7, 0x87, 0xfc, 0xb6, 0x3c, 0x62, 0x6d, 0x50, 0xee, 0x91, 0x47, 0x10, + 0xf6, 0xf6, 0x3a, 0x62, 0x69, 0x45, 0x3b, 0x9f, 0x5e, 0x9c, 0x4f, 0xb5, 0x5d, + 0xf5, 0x32, 0xf6, 0xb1, 0xdb, 0x81, 0xc2, 0x72, 0xbf, 0xfa, 0x7a, 0xf7, 0x57, + 0x29, 0x55, 0x59, 0x41, 0x29, 0x65, 0x27, 0xe9, 0xa3, 0x84, 0x7b, 0xbe, 0x00, + 0xf5, 0xae, 0x02, 0xd4, 0x18, 0x21, 0xc8, 0xe1, 0xee, 0x01, 0x38, 0xeb, 0xcb, + 0x72, 0x8d, 0x7c, 0x6c, 0x3c, 0x80, 0x02, 0x7e, 0x43, 0x75, 0x94, 0xc6, 0x70, + 0xfd, 0x6f, 0x39, 0x08, 0x22, 0x2e, 0xe7, 0xa1, 0xb9, 0x17, 0xf8, 0x27, 0x1a, + 0xbe, 0x66, 0x0e, 0x39, 0xe0, 0x51, 0xaa, 0xa6, 0xfc, 0xa1, 0x86, 0x22, 0x76, + 0xe2, 0xba, 0xa0, 0xfe, 0x0b, 0x16, 0x2a, 0xeb, 0xcf, 0xe3, 0xd9, 0xa9, 0x5a, + 0x8d, 0x0c, 0x7b, 0x60, 0xd1, 0x7b, 0x46, 0x19, 0xa8, 0x28, 0xe2, 0x11, 0x8f, + 0xf0, 0xca, 0xcd, 0x5e, 0xb4, 0xec, 0xfc, 0xac, 0x54, 0x7f, 0xa9, 0x68, 0x62, + 0x40, 0x3e, 0x05, 0x9e, 0xf5, 0xc3, 0x72, 0xf9, 0xb6, 0x1c, 0x57, 0x87, 0x02, + 0x79, 0x09, 0x99, 0x2b, 0x6e, 0xee, 0x95, 0xa9, 0xa0, 0x6b, 0x3b, 0x9f, 0x5e, + 0x9c, 0x4f, 0xb5, 0x5d, 0xf5, 0x32, 0xf6, 0xb1, 0xdb, 0x81, 0xc2, 0x72, 0xbf, + 0xfa, 0x7a, 0xf7, 0x57, 0x29, 0x55, 0x59, 0x41, 0x29, 0x65, 0x27, 0xe9, 0xa3, + 0x84, 0x7b, 0xbe, 0xfa, 0xfe, 0x87, 0x52, 0x62, 0xdd, 0x7b, 0xe4, 0x1c, 0xbb, + 0xc6, 0x24, 0x20, 0xd4, 0xad, 0x6d, 0xf5, 0xc9, 0xb7, 0x13, 0x60, 0x4f, 0x65, + 0x60, 0x88, 0xa4, 0x48, 0x5e, 0x93, 0xbe, 0x19, 0x07, 0xd2, 0x7a, 0xc6, 0xec, + 0x3c, 0x57, 0x25, 0x9b, 0xd6, 0x98, 0x1d, 0x42, 0xc1, 0xb7, 0x8a, 0x29, 0xad, + 0x96, 0x85, 0xe6, 0x3c, 0x49, 0x4d, 0x41, 0x29, 0x62, 0x3e, 0xa1, 0xa7, 0xff, + 0xec, 0x85, 0x00, 0xa9, 0x5b, 0x5a, 0x47, 0xce, 0xab, 0xf3, 0xd2, 0x9a, 0x18, + 0x0d, 0xd9, 0x2a, 0xd9, 0xc1, 0xe8, 0x41, 0x63, 0x94, 0x2f, 0x78, 0xd8, 0x77, + 0x2e, 0xef, 0x36, 0xfb, 0x38, 0x90, 0xe8, 0xde, 0x4c, 0x29, 0x41, 0x10, 0x73, + 0xed, 0xb2, 0x97, 0x8e, 0xf4, 0xe4, 0x69, 0xdd, 0xd5, 0xcd, 0xa9, 0x86, 0x18, + 0x99, 0x95, 0xf8, 0x8d, 0x6a, 0xb3, 0x66, 0xdb, 0x01, 0x90, 0x01, 0xf5, 0xb2, + 0x52, 0x88, 0xcf, 0x86, 0x0f, 0xd9, 0x98, 0xee, 0x57, 0x3c, 0x8c, 0xc4, 0x8a, + 0xa9, 0xef, 0xcf, 0x9b, 0x61, 0x7e, 0x04, 0x3c, 0x32, 0x9c, 0xd1, 0xaa, 0x1a, + 0x0e, 0xd3, 0xa4, 0x02, 0xfb, 0x96, 0xe3, 0x36, ], txid: [ - 0x67, 0x62, 0xf9, 0xc5, 0x72, 0x30, 0xa5, 0x8d, 0xca, 0x6d, 0x44, 0x45, 0x47, - 0xb2, 0xf6, 0xe0, 0xe2, 0x13, 0x49, 0x2d, 0xbb, 0x40, 0x56, 0x4a, 0xe1, 0x01, - 0xdf, 0x13, 0x94, 0x1c, 0x61, 0x52, + 0xc6, 0xf8, 0x2a, 0x3b, 0x06, 0x3f, 0xc6, 0x93, 0x03, 0x18, 0x01, 0xed, 0x9a, + 0x27, 0x22, 0x73, 0x7f, 0xd7, 0x51, 0x33, 0x61, 0xca, 0x15, 0x01, 0x3b, 0x4b, + 0x18, 0x88, 0x39, 0x34, 0xb9, 0xef, ], auth_digest: [ - 0x1c, 0x3e, 0xc5, 0x10, 0x4d, 0x96, 0xb6, 0x68, 0x37, 0xb6, 0xe3, 0x81, 0xf7, - 0x02, 0xc7, 0xe4, 0x8a, 0x09, 0x7a, 0xaf, 0x12, 0x5c, 0x9b, 0x82, 0x89, 0x5b, - 0x57, 0x8b, 0x92, 0xea, 0xfd, 0x14, + 0xea, 0xa0, 0x68, 0xab, 0x73, 0xcc, 0xac, 0xa6, 0xda, 0x20, 0x63, 0xac, 0x06, + 0x02, 0x91, 0x69, 0x3c, 0x01, 0x9a, 0x35, 0x69, 0x96, 0x1a, 0x43, 0x6b, 0xdb, + 0xd9, 0x3d, 0xbe, 0x1b, 0x7f, 0x11, ], - amounts: vec![787459282010655, 1685382316228727, 1715663111103469], + amounts: vec![486672440700666, 433276078536859], script_pubkeys: vec![ - vec![0x65, 0x6a], - vec![0x65, 0x00, 0x51, 0x52, 0x6a], - vec![0x52, 0x6a, 0x51, 0x53, 0x00, 0x51, 0x52, 0x51, 0x6a], + vec![0x51, 0x65, 0x63], + vec![0x65, 0x51, 0x6a, 0x00, 0x63, 0x00, 0x65, 0x6a], ], - transparent_input: Some(2), + transparent_input: Some(1), sighash_shielded: [ - 0xa7, 0xe2, 0x72, 0xca, 0x04, 0x40, 0x87, 0xc4, 0xd3, 0x56, 0x61, 0x88, 0x8b, - 0x34, 0x8c, 0x57, 0xe9, 0x8b, 0x79, 0x81, 0xa1, 0x6f, 0xe5, 0xe8, 0x81, 0x81, - 0xc8, 0xe1, 0x5a, 0xae, 0x58, 0x1c, + 0xf7, 0x35, 0x53, 0xf7, 0x59, 0xbc, 0x69, 0xf8, 0x16, 0xf6, 0xcf, 0xcf, 0xc3, + 0xa4, 0x24, 0x46, 0xfd, 0x49, 0x0c, 0xd6, 0x4a, 0xeb, 0x39, 0x25, 0x56, 0xdc, + 0x5a, 0xa7, 0xe6, 0xc1, 0xdc, 0xfa, ], sighash_all: Some([ - 0xda, 0x3e, 0xdd, 0x81, 0xf4, 0xfa, 0x79, 0xe4, 0x7f, 0xb6, 0x76, 0xca, 0x0b, - 0x56, 0xb1, 0x29, 0x9f, 0xf5, 0xb5, 0xec, 0x58, 0x23, 0xec, 0x87, 0x1e, 0x3d, - 0x7c, 0x12, 0x88, 0x4f, 0xe5, 0x77, + 0xc5, 0xdf, 0xfc, 0x9a, 0xbf, 0x01, 0x39, 0xaa, 0x5b, 0x33, 0xd3, 0xf5, 0xa2, + 0xc9, 0xb1, 0x3d, 0x72, 0x48, 0xcc, 0x01, 0x5e, 0xbe, 0x2b, 0x88, 0x8b, 0x6c, + 0x97, 0xf2, 0x71, 0x58, 0x81, 0xa6, ]), sighash_none: Some([ - 0xdd, 0xe8, 0x6c, 0x69, 0x61, 0xd0, 0x2d, 0x65, 0x51, 0x03, 0xc9, 0xd1, 0x9c, - 0x89, 0x62, 0x3f, 0xde, 0x4e, 0xc6, 0xb5, 0x28, 0x2b, 0xb8, 0xfb, 0xc7, 0xe8, - 0xba, 0x46, 0x91, 0x1e, 0x9a, 0x3e, + 0xcb, 0xbe, 0xe9, 0xa1, 0xb6, 0x2d, 0x48, 0xd9, 0xbb, 0xfd, 0xfa, 0x64, 0xf5, + 0x26, 0x64, 0x0d, 0x1d, 0xec, 0x09, 0xd5, 0x98, 0x3d, 0x15, 0x1d, 0xa6, 0xd4, + 0x4f, 0xc8, 0xe2, 0x1c, 0xe2, 0xac, ]), sighash_single: None, sighash_all_anyone: Some([ - 0x41, 0x15, 0x08, 0xbb, 0x7b, 0x21, 0x94, 0xf6, 0x17, 0xad, 0xc6, 0xc7, 0x82, - 0xbb, 0x77, 0x20, 0xc8, 0xdf, 0xc2, 0x5f, 0xef, 0x3b, 0xc4, 0x8e, 0xc7, 0x31, - 0xa2, 0x4a, 0xa2, 0xc1, 0xc1, 0x05, + 0x11, 0xee, 0x8f, 0xe7, 0x55, 0xb0, 0x9e, 0xf4, 0xaf, 0x38, 0x42, 0x41, 0x61, + 0xdb, 0x46, 0xbf, 0x7f, 0xf7, 0x64, 0xcc, 0x5e, 0x9d, 0x2c, 0xba, 0x7a, 0xec, + 0x70, 0xab, 0x74, 0x90, 0x34, 0x55, ]), sighash_none_anyone: Some([ - 0xb4, 0x25, 0x3a, 0x25, 0xbf, 0x7e, 0xe6, 0xcd, 0x20, 0x9c, 0x5f, 0x07, 0x66, - 0x6f, 0xea, 0x85, 0x3e, 0x4b, 0x80, 0x08, 0x62, 0xa2, 0x9a, 0xa5, 0xa8, 0x96, - 0x1f, 0x95, 0x32, 0x03, 0xa3, 0xb0, + 0x61, 0x04, 0x1a, 0x84, 0x65, 0x26, 0xea, 0x88, 0x8f, 0xa7, 0xf5, 0x7c, 0xb9, + 0xad, 0xa4, 0x60, 0xeb, 0x7d, 0x50, 0xcf, 0x46, 0x3d, 0x40, 0x6c, 0x91, 0x51, + 0x57, 0x0e, 0xdb, 0xe7, 0x2c, 0x0f, ]), sighash_single_anyone: None, }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x81, - 0x83, 0x6c, 0x3b, 0xe9, 0x9a, 0x08, 0x17, 0x03, 0xa4, 0x60, 0xe9, 0x68, 0xaa, - 0x71, 0x09, 0x87, 0x0b, 0xbe, 0xd1, 0x7d, 0xf5, 0xf8, 0x88, 0xc8, 0xca, 0x14, - 0x67, 0xae, 0x17, 0xdb, 0xbc, 0xde, 0x31, 0xc1, 0x10, 0x5c, 0xb5, 0xbd, 0xa8, - 0x8a, 0xc6, 0xc6, 0x27, 0x00, 0x04, 0x52, 0xac, 0x52, 0xac, 0x0f, 0xfe, 0x81, - 0xec, 0x58, 0xbf, 0x1e, 0x6d, 0x1b, 0xb7, 0xaa, 0xad, 0xa4, 0x1f, 0xba, 0x0b, - 0xb5, 0x88, 0x77, 0x8a, 0x7f, 0x65, 0x20, 0x2a, 0xd8, 0x11, 0xea, 0x73, 0xd2, - 0x6c, 0x74, 0x55, 0x03, 0x95, 0xaf, 0xf7, 0x53, 0x25, 0x10, 0x7c, 0x09, 0x6a, - 0x52, 0x51, 0xac, 0xac, 0x00, 0x65, 0x00, 0x51, 0xa2, 0xe7, 0x42, 0x47, 0x19, - 0xa3, 0xd1, 0x85, 0xb7, 0xe0, 0xa4, 0x3a, 0x47, 0x2e, 0x29, 0x8a, 0xc0, 0xaf, - 0xdc, 0x52, 0x87, 0xd7, 0xad, 0x12, 0x4c, 0xd9, 0x40, 0x5a, 0x62, 0xcd, 0x1c, - 0xa0, 0x8b, 0x28, 0x2e, 0xfe, 0xf7, 0xf9, 0x28, 0xdf, 0x08, 0x52, 0x52, 0x52, - 0x51, 0xac, 0x53, 0x53, 0xac, 0xea, 0xa5, 0xff, 0x12, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xdf, + 0xf0, 0xb1, 0x14, 0x8d, 0x6a, 0x6b, 0x07, 0x03, 0x7d, 0x95, 0x33, 0x67, 0x70, + 0xa7, 0xd1, 0x6f, 0xac, 0x1a, 0xdd, 0x86, 0x07, 0x76, 0xcb, 0x48, 0x02, 0x21, + 0xf8, 0xfb, 0x33, 0xd7, 0xe4, 0xe9, 0xb0, 0x79, 0x02, 0xd2, 0xff, 0x86, 0xfd, + 0xac, 0x72, 0x09, 0x62, 0x34, 0x08, 0xac, 0x63, 0x00, 0x52, 0x6a, 0x53, 0x63, + 0x6a, 0x3b, 0xbf, 0x06, 0x15, 0xf6, 0x7b, 0x11, 0x00, 0xcc, 0x2e, 0xa3, 0xba, + 0x3d, 0x6c, 0x1a, 0x1a, 0x90, 0x87, 0xb1, 0x19, 0xba, 0xee, 0xbf, 0xa6, 0x2b, + 0xc9, 0xf0, 0xec, 0x47, 0x9d, 0x99, 0xc1, 0xa3, 0xb1, 0x58, 0xb5, 0x14, 0xd1, + 0x62, 0x9d, 0x03, 0x51, 0x6a, 0x51, 0x67, 0x2a, 0x26, 0x70, 0x8e, 0x5a, 0xd8, + 0x16, 0xb5, 0x47, 0xab, 0x7e, 0x82, 0x7d, 0x07, 0x1b, 0xa7, 0x84, 0x2b, 0x3e, + 0x90, 0x30, 0x53, 0x83, 0x89, 0x6e, 0xc4, 0x90, 0x5f, 0x70, 0xc7, 0x8b, 0x69, + 0x4e, 0x6a, 0x5a, 0x3e, 0x43, 0x12, 0xcd, 0x04, 0x00, 0x53, 0x53, 0xac, 0x0f, + 0x05, 0xc7, 0x14, 0x02, 0x4e, 0x06, 0x1c, 0xd0, 0xfb, 0x40, 0x04, 0x00, 0x06, + 0x53, 0x6a, 0xac, 0x52, 0x6a, 0xac, 0x7f, 0xab, 0xa1, 0x0c, 0x3e, 0x09, 0x02, + 0x00, 0x02, 0x51, 0x63, 0x02, 0xd4, 0x81, 0x54, 0x72, 0xf4, 0x2b, 0x3b, 0x9e, + 0x74, 0xc9, 0x84, 0x03, 0xa4, 0x0d, 0xdd, 0x20, 0x3c, 0xd7, 0xfe, 0x6e, 0x5c, + 0x38, 0x0c, 0xe7, 0x0b, 0x29, 0xc7, 0x94, 0x13, 0xbf, 0x02, 0x61, 0xf1, 0xc5, + 0xd3, 0xb3, 0x20, 0xf3, 0x49, 0xa5, 0xb3, 0xa8, 0xb3, 0x55, 0x59, 0x22, 0x96, + 0xaa, 0xf6, 0x1c, 0x5b, 0x72, 0x52, 0xf7, 0x3e, 0xc0, 0xa9, 0x46, 0x6a, 0x1b, + 0x85, 0x76, 0x4f, 0xb0, 0x83, 0x1b, 0x4a, 0x1a, 0x36, 0x89, 0x0e, 0x22, 0x4c, + 0x01, 0xac, 0xfc, 0xe4, 0x8e, 0xe3, 0xed, 0x93, 0x87, 0x73, 0x98, 0xe0, 0x72, + 0x6d, 0x02, 0x93, 0x6d, 0x0d, 0x03, 0x2e, 0x18, 0xe3, 0x28, 0xe2, 0x08, 0x9e, + 0x61, 0x64, 0x5e, 0x4b, 0xe0, 0xa9, 0xe8, 0xcb, 0x62, 0x62, 0x42, 0x88, 0xf0, + 0x77, 0xc7, 0xc2, 0x73, 0xb0, 0xd2, 0x0f, 0xc4, 0xa6, 0xd1, 0x9f, 0x94, 0xf9, + 0xe4, 0x88, 0x5e, 0x86, 0x3f, 0x13, 0x9e, 0x9c, 0x0b, 0x13, 0x1b, 0x2a, 0x4c, + 0x28, 0x07, 0x1a, 0x38, 0xec, 0x61, 0xf6, 0x68, 0x01, 0xaa, 0x59, 0x56, 0xfc, + 0xb2, 0xa4, 0x6b, 0x95, 0x87, 0x66, 0x5b, 0x75, 0x71, 0xaa, 0x03, 0x48, 0x1f, + 0xd8, 0xd9, 0xd5, 0x69, 0x8f, 0x83, 0x6f, 0xc8, 0x63, 0x5e, 0x69, 0xe3, 0xbd, + 0xe4, 0x2f, 0x4a, 0xc0, 0x71, 0x32, 0x8b, 0x54, 0x09, 0xf6, 0xe4, 0x2d, 0x79, + 0x0a, 0xed, 0x02, 0xa2, 0x2c, 0xff, 0xb5, 0xd8, 0x12, 0x33, 0xcf, 0x40, 0xa5, + 0xb0, 0x80, 0x44, 0x47, 0x0c, 0x9e, 0x09, 0x17, 0xb5, 0x10, 0x7a, 0xc8, 0x76, + 0x89, 0x0b, 0x6c, 0xb4, 0x92, 0xfa, 0xaf, 0x2e, 0xd4, 0x15, 0x0f, 0x2c, 0xea, + 0x1f, 0x05, 0x10, 0xf8, 0x4e, 0xd3, 0xe3, 0xf7, 0x38, 0xca, 0xd4, 0xc5, 0x01, + 0xc9, 0x15, 0xaa, 0x6d, 0x3a, 0xd9, 0xf0, 0xd2, 0xae, 0x5c, 0x7c, 0x07, 0xb7, + 0xb6, 0x69, 0x6b, 0x15, 0xa2, 0x16, 0x69, 0x68, 0x37, 0x25, 0x69, 0x10, 0x9d, + 0x0d, 0xf8, 0x25, 0x7a, 0x85, 0x51, 0x90, 0x1e, 0x8f, 0xa5, 0x5f, 0xa2, 0xe7, + 0x52, 0x4c, 0xb4, 0x71, 0x24, 0xfc, 0xbb, 0xac, 0xc1, 0x28, 0x5e, 0xfc, 0xa8, + 0x25, 0x99, 0xd1, 0x81, 0xf1, 0x23, 0x51, 0xf9, 0x39, 0xa9, 0x4e, 0xa8, 0xb9, + 0x75, 0xc0, 0x65, 0xa9, 0x1f, 0xf2, 0x57, 0xca, 0xc7, 0xa9, 0x23, 0x85, 0xfc, + 0x8f, 0xa9, 0x21, 0xb1, 0x06, 0xba, 0x86, 0x60, 0xc6, 0x0a, 0xc8, 0xba, 0x5e, + 0xce, 0x45, 0x60, 0x6f, 0x04, 0xf3, 0x6a, 0x3a, 0x90, 0xbb, 0x38, 0x38, 0xc4, + 0x2a, 0xbf, 0x62, 0xdd, 0x2d, 0x84, 0xba, 0xbe, 0xf3, 0xe1, 0x88, 0xe9, 0x17, + 0x1a, 0xff, 0x9b, 0xc1, 0x16, 0x66, 0x90, 0x09, 0xd8, 0x87, 0x13, 0x0a, 0xc9, + 0xf7, 0x39, 0x6a, 0x62, 0x7a, 0x84, 0x74, 0xc1, 0x81, 0x1b, 0x69, 0x6f, 0x99, + 0x55, 0x2b, 0x14, 0xc4, 0x84, 0xdf, 0xe4, 0x2c, 0x24, 0xd5, 0x7c, 0x3a, 0x9c, + 0x3f, 0xea, 0x13, 0x76, 0xcd, 0xcb, 0x63, 0x42, 0x1c, 0x31, 0x4a, 0x62, 0x2a, + 0x9a, 0xef, 0x0b, 0xc0, 0x57, 0xcb, 0x11, 0xbc, 0x5e, 0x30, 0x66, 0xe3, 0x3a, + 0x3b, 0x9b, 0x31, 0xdf, 0x25, 0x75, 0xcd, 0x51, 0x85, 0xa4, 0xf3, 0xfc, 0x4e, + 0x4c, 0x3d, 0x40, 0x2e, 0xd4, 0x20, 0x46, 0xf8, 0x1f, 0x97, 0x48, 0x16, 0xd2, + 0x79, 0xb1, 0x51, 0x3a, 0xb8, 0x1d, 0x3f, 0x0a, 0x3c, 0x7f, 0x7f, 0xcf, 0x2f, + 0xbb, 0x4e, 0x26, 0x32, 0x19, 0x93, 0xa5, 0x13, 0xad, 0x3d, 0x7f, 0x4a, 0xfe, + 0x6c, 0x1b, 0xbd, 0xc6, 0x57, 0x58, 0x50, 0x80, 0xbb, 0x5a, 0x0f, 0x25, 0x97, + 0x3d, 0x63, 0xeb, 0x20, 0xad, 0xa0, 0x16, 0x6b, 0xbd, 0x8a, 0x39, 0xff, 0x93, + 0x24, 0x6f, 0x27, 0x89, 0x73, 0x2a, 0xd0, 0x55, 0x87, 0xf8, 0xdb, 0x7b, 0xc8, + 0x7c, 0x24, 0x2c, 0xfd, 0x36, 0xce, 0x68, 0x5a, 0x4b, 0x65, 0x69, 0x86, 0xc3, + 0x9f, 0xd7, 0xfc, 0xb2, 0x3c, 0x91, 0x91, 0x3e, 0x46, 0x11, 0x19, 0x1e, 0xdc, + 0xc8, 0x8b, 0x78, 0xf1, 0x45, 0xea, 0x29, 0xd2, 0x71, 0xb9, 0x40, 0xc6, 0x99, + 0x41, 0xe4, 0xc3, 0xfd, 0x2d, 0x71, 0xf3, 0xb1, 0x90, 0x69, 0x0e, 0xe1, 0x6f, + 0x5d, 0x14, 0xac, 0x22, 0x24, 0xe6, 0xfc, 0x89, 0x59, 0x76, 0x54, 0x52, 0x7d, + 0xab, 0xe7, 0x2e, 0x75, 0xd2, 0xd2, 0xa1, 0x3a, 0x9f, 0xba, 0xa6, 0x37, 0x8e, + 0x8a, 0x26, 0x43, 0x21, 0x08, 0x7a, 0x19, 0x00, 0xef, 0xe3, 0xca, 0xd1, 0x4a, + 0x57, 0x96, 0x86, 0xaa, 0x36, 0x36, 0xbd, 0x37, 0x5b, 0xd3, 0x13, 0x6b, 0xee, + 0x0b, 0xda, 0xab, 0xcf, 0xac, 0x88, 0x1b, 0xc7, 0x01, 0x81, 0x27, 0x21, 0xe6, + 0xfb, 0x75, 0xaa, 0x07, 0x2d, 0x2d, 0x18, 0x7e, 0x62, 0x25, 0x8d, 0x65, 0xa1, + 0x92, 0x15, 0x7c, 0xdf, 0x2e, 0xc3, 0x21, 0x40, 0x7f, 0x68, 0x2f, 0x5e, 0xec, + 0x6a, 0x32, 0x97, 0xab, 0x20, 0xb7, 0x06, 0x1c, 0x62, 0x24, 0x57, 0x16, 0xa4, + 0x4f, 0x71, 0xfb, 0xfc, 0x34, 0xc7, 0x9b, 0x44, 0xe0, 0x9e, 0x42, 0x12, 0xac, + 0x26, 0x53, 0xf6, 0xc4, 0x03, 0x64, 0x3e, 0x1c, 0x5b, 0x9a, 0xd1, 0x34, 0xd8, + 0x9c, 0x68, 0x0b, 0x70, 0x72, 0x83, 0xaf, 0x54, 0x32, 0x6f, 0xc4, 0xf8, 0x4d, + 0x6a, 0x58, 0x29, 0xa0, 0xad, 0x48, 0x30, 0x80, 0x6c, 0x05, 0x75, 0x84, 0x92, + 0xcd, 0x6a, 0xc4, 0x6b, 0xa0, 0x1a, 0x2b, 0x37, 0x22, 0xb5, 0xe4, 0xcd, 0xaf, + 0xbb, 0x3f, 0x36, 0x78, 0x5f, 0x42, 0x4a, 0xf0, 0x44, 0xda, 0xc5, 0xdb, 0x5f, + 0x7d, 0xf8, 0x39, 0xeb, 0x63, 0xc0, 0xc1, 0x7d, 0x8b, 0x0c, 0x79, 0xdb, 0x86, + 0x30, 0x94, 0x20, 0x15, 0xbe, 0x13, 0xf7, 0x9a, 0xf6, 0xf4, 0x3e, 0x5a, 0xb0, + 0x77, 0x81, 0x14, 0x79, 0x8f, 0x44, 0x22, 0x58, 0xee, 0xdc, 0x43, 0x6f, 0xcc, + 0x38, 0x6b, 0x36, 0xb5, 0x7e, 0x19, 0x17, 0xd7, 0x20, 0x17, 0x73, 0x66, 0xf4, + 0x24, 0xb0, 0xa5, 0x4b, 0x0b, 0x60, 0xf4, 0xfb, 0x13, 0x58, 0xc2, 0x0a, 0xa4, + 0x1d, 0xc5, 0x02, 0xe1, 0xdd, 0x8a, 0x16, 0x33, 0xf3, 0xd8, 0xe3, 0x27, 0x6b, + 0x59, 0xe7, 0xd2, 0xc4, 0xe6, 0x24, 0xa6, 0xf5, 0x36, 0x95, 0xbc, 0xaf, 0x24, + 0x7e, 0x36, 0x48, 0x3f, 0x13, 0xb2, 0x04, 0x42, 0x22, 0x37, 0xfc, 0x6a, 0xb3, + 0xeb, 0xa0, 0x2f, 0xc4, 0x14, 0x2b, 0x42, 0x97, 0xeb, 0xb5, 0x68, 0x3d, 0xb8, + 0xd2, 0x43, 0x19, 0x70, 0x6a, 0xd2, 0x6a, 0xaf, 0xd8, 0x1c, 0x53, 0xb7, 0x40, + 0xf3, 0x45, 0x43, 0xa6, 0xb3, 0xe9, 0xf5, 0xbb, 0x7d, 0x5c, 0x49, 0xe8, 0xc3, + 0x7f, 0x61, 0x49, 0x21, 0x25, 0x4f, 0x32, 0x12, 0x39, 0x4c, 0x79, 0x7d, 0x1c, + 0xee, 0x78, 0x99, 0xb7, 0xb4, 0xb6, 0x5b, 0x59, 0xb7, 0x34, 0x2f, 0x92, 0x53, + 0x1c, 0x1d, 0x59, 0xe1, 0x79, 0x70, 0xb7, 0x31, 0x74, 0x14, 0x43, 0x8c, 0xd8, + 0x0b, 0xd0, 0xf9, 0xa6, 0x7c, 0x9b, 0x9e, 0x55, 0x2f, 0x01, 0x3c, 0x11, 0x5a, + 0x95, 0x4f, 0x35, 0xe0, 0x61, 0xe1, 0xd2, 0x0f, 0x5f, 0xb7, 0xf6, 0x23, 0xaf, + 0x1a, 0x32, 0x6a, 0x65, 0x9f, 0x37, 0x5c, 0x7b, 0x58, 0x2e, 0x3e, 0xea, 0x4c, + 0x22, 0x3e, 0x45, 0x9a, 0x8f, 0x15, 0xa9, 0xa6, 0x5b, 0x68, 0x2a, 0x50, 0x81, + 0x90, 0x9f, 0x0a, 0x80, 0xd6, 0x89, 0xdf, 0x23, 0x90, 0x6a, 0x59, 0xbe, 0xe9, + 0x23, 0xcc, 0x9d, 0x5e, 0x20, 0x0b, 0xa5, 0xae, 0x28, 0x40, 0x0b, 0xf5, 0x67, + 0x45, 0x6a, 0x8c, 0x31, 0x9f, 0x06, 0x16, 0x0a, 0x49, 0x61, 0x0b, 0x3f, 0x04, + 0x7e, 0xfb, 0x45, 0xdc, 0x9e, 0x97, 0xb5, 0x35, 0x51, 0x2f, 0x0b, 0x71, 0x4f, + 0x60, 0x50, 0xb4, 0x59, 0xf8, 0xb7, 0x81, 0xed, 0xad, 0x94, 0x45, 0x1e, 0xb3, + 0xcf, 0x4b, 0x3d, 0xfd, 0xd9, 0xd4, 0x54, 0x5c, 0x35, 0xb2, 0xb5, 0xa7, 0xdc, + 0x17, 0xa8, 0x36, 0xb1, 0x2b, 0x43, 0xbe, 0xfc, 0x0b, 0xe0, 0xa1, 0xbd, 0x36, + 0x97, 0x72, 0x33, 0x80, 0x78, 0xb4, 0xff, 0x7d, 0x8e, 0x2d, 0x97, 0x9a, 0x34, + 0x41, 0xe1, 0xc8, 0xf5, 0xaf, 0xe4, 0x7b, 0x1e, 0x7d, 0xa5, 0x6c, 0xf0, 0x06, + 0x02, 0xd0, 0x1b, 0x11, 0x0c, 0x05, 0xcf, 0x48, 0xfd, 0xa3, 0xe6, 0xcc, 0xe3, + 0x2a, 0x04, 0x40, 0x00, 0xf4, 0x5c, 0x6d, 0x1e, 0x69, 0x6d, 0x24, 0x5c, 0xbd, + 0x31, 0x2b, 0xdc, 0x3a, 0x3a, 0x21, 0xc9, 0x92, 0xd0, 0xeb, 0xc8, 0xcc, 0x8f, + 0xa6, 0x30, 0x6d, 0x7e, 0x13, 0x0a, 0x2b, 0xa4, 0x20, 0x18, 0xfe, 0x59, 0x69, + 0x49, 0xfd, 0x82, 0x26, 0x7b, 0xcc, 0x59, 0xdd, 0x46, 0x26, 0xef, 0xc3, 0xea, + 0x74, 0x38, 0xd0, 0x5c, 0x91, 0xb0, 0xf8, 0xe0, 0x92, 0x55, 0x0d, 0x2d, 0x39, + 0xa0, 0x1e, 0xb4, 0x5e, 0xe8, 0xf7, 0xd0, 0x9b, 0x03, 0x8d, 0x83, 0x83, 0xe1, + 0x9b, 0xc3, 0x0e, 0x64, 0x03, 0x82, 0x8c, 0xdb, 0x65, 0x2a, 0x55, 0x6b, 0x12, + 0x04, 0x09, 0x31, 0x40, 0x2a, 0xa6, 0xac, 0x34, 0xfc, 0x19, 0xfd, 0xc0, 0x6e, + 0x2e, 0x77, 0x87, 0xf5, 0xb7, 0x7b, 0x04, 0x5f, 0xd0, 0x98, 0xc0, 0x31, 0xbd, + 0xbd, 0x46, 0x27, 0x76, 0x09, 0xd8, 0x42, 0xf4, 0x84, 0x24, 0xed, 0xa3, 0x1e, + 0x3c, 0xf2, 0xcd, 0xd6, 0x43, 0x85, 0xba, 0xd3, 0x11, 0x88, 0x58, 0xd1, 0x42, + 0xd9, 0x06, 0xea, 0xdb, 0x75, 0x90, 0xc9, 0x41, 0x36, 0xda, 0x6a, 0x06, 0x35, + 0x14, 0xd6, 0xa2, 0x5f, 0x7b, 0x37, 0xd7, 0x66, 0x4f, 0x9b, 0x97, 0x09, 0x43, + 0x3e, 0x6e, 0x70, 0x21, 0x18, 0xa4, 0xab, 0x9e, 0x7a, 0x7a, 0x3e, 0x62, 0x59, + 0x12, 0x99, 0x37, 0xd2, 0x9d, 0x0d, 0xb2, 0x60, 0x70, 0x52, 0x3e, 0x8b, 0x06, + 0x43, 0x13, 0x0a, 0xbe, 0xfe, 0x94, 0x3b, 0x40, 0x12, 0x98, 0xae, 0x01, 0xa3, + 0xab, 0x00, 0xab, 0xbc, 0x60, 0xd7, 0xdb, 0x93, 0x3c, 0x7f, 0x07, 0xa8, 0xbf, + 0x0f, 0x7c, 0xe1, 0x66, 0x0b, 0xcc, 0xb4, 0x5e, 0x04, 0x2b, 0x45, 0x1b, 0x93, + 0x50, 0x02, 0xce, 0xce, 0x27, 0xf3, 0x6a, 0xba, 0x56, 0x47, 0xac, 0x28, 0xd8, + 0x18, 0x6c, 0xdd, 0x1f, 0xb9, 0x5d, 0xc1, 0x35, 0xd4, 0x89, 0x92, 0xf6, 0x8d, + 0xa1, 0x2a, 0xd6, 0x1a, 0xc7, 0x56, 0x68, 0x0d, 0xd7, 0xf8, 0xd0, 0x77, 0x4a, + 0xbd, 0x6c, 0xfd, 0xa2, 0xf0, 0x32, 0xaf, 0x3b, 0xe1, 0x39, 0xa6, 0x33, 0xd6, + 0x73, 0x3c, 0x75, 0xd1, 0xab, 0xa8, 0x90, 0x18, 0xc8, 0x57, 0x2b, 0x99, 0xcd, + 0x30, 0xc5, 0x37, 0x06, 0x79, 0x41, 0xdf, 0x1c, 0x4b, 0xc1, 0xfd, 0x57, 0x0f, + 0x7b, 0x4d, 0xdc, 0x97, 0x51, 0x86, 0x23, 0xe3, 0xae, 0x4a, 0x87, 0xbd, 0xb9, + 0x66, 0xc9, 0x4d, 0x86, 0x1e, 0x80, 0xde, 0x88, 0xc2, 0x92, 0xae, 0xe9, 0x38, + 0x71, 0x94, 0xe2, 0x56, 0xc6, 0x70, 0x07, 0x52, 0x30, 0x1c, 0x73, 0xfc, 0x95, + 0x65, 0xa4, 0x04, 0x80, 0xd8, 0x12, 0x6e, 0x9d, 0x08, 0x58, 0x79, 0xe2, 0x4b, + 0x16, 0xe9, 0xc4, 0x85, 0xd8, 0xf0, 0xd6, 0x18, 0xca, 0x0d, 0xd1, 0x21, 0xb5, + 0x1a, 0x7c, 0xab, 0x23, 0x0c, 0x5b, 0x45, 0x67, 0x2b, 0xdb, 0x8e, 0xa3, 0xa0, + 0x40, 0xf7, 0xaa, 0xa0, 0x98, 0xba, 0x26, 0x02, 0x5d, 0x2e, 0xab, 0x79, 0x48, + 0x69, 0x3d, 0xd5, 0xf6, 0xd3, 0x09, 0x65, 0x01, 0xe9, 0xe0, 0x71, 0x25, 0xd7, + 0xeb, 0x29, 0x3b, 0x3a, 0xba, 0xd5, 0x7f, 0xd5, 0xf0, 0x11, 0x64, 0x70, 0x2d, + 0xae, 0x64, 0xbd, 0xba, 0x8c, 0x92, 0x4f, 0xb0, 0x79, 0x96, 0x79, 0xd7, 0x7f, + 0x98, 0xd3, 0x03, 0x91, 0x9f, 0xb4, 0xa7, 0xff, 0x26, 0xa9, 0x6f, 0x13, 0x7a, + 0x5e, 0x5c, 0xb9, 0x5b, 0xc4, 0xc6, 0xff, 0x99, 0x93, 0x52, 0x6b, 0xda, 0x15, + 0x03, 0x16, 0x8a, 0xb4, 0x8c, 0xbd, 0x45, 0x15, 0x39, 0x27, 0xd3, 0x04, 0x30, + 0x42, 0x3d, 0xbd, 0xf0, 0x66, 0x05, 0xf5, 0xb5, 0x4b, 0x80, 0x8f, 0xeb, 0x22, + 0xb2, 0x08, 0xb0, 0x64, 0x58, 0x18, 0x47, 0xb2, 0xf6, 0x4c, 0xa6, 0x48, 0x37, + 0x00, 0x72, 0x16, 0xde, 0x6e, 0xca, 0xff, 0xeb, 0x4b, 0x69, 0xe6, 0x33, 0x47, + 0xf8, 0x4a, 0xbc, 0xad, 0x8f, 0x2e, 0x75, 0x7d, 0x58, 0x61, 0xce, 0x77, 0xee, + 0x46, 0x51, 0x3d, 0xa7, 0x41, 0x68, 0x37, 0xdc, 0xb2, 0x3d, 0x33, 0xea, 0x72, + 0xaf, 0x23, 0xd0, 0xad, 0x8c, 0x93, 0x07, 0xd0, 0xb5, 0x85, 0x8d, 0xa9, 0x5b, + 0x77, 0xff, 0xf9, 0x02, 0x7b, 0x88, 0x59, 0xe1, 0x1d, 0xcb, 0xd5, 0x98, 0x35, + 0x0e, 0xee, 0x50, 0x93, 0x94, 0x81, 0x70, 0x8e, 0xa7, 0x08, 0xeb, 0x9f, 0x66, + 0x43, 0x88, 0xb9, 0xc6, 0x4d, 0x6a, 0xf0, 0x0f, 0x64, 0x9b, 0x60, 0x91, 0xac, + 0x06, 0x00, 0x6f, 0x35, 0x4b, 0xa4, 0xd2, 0x58, 0x1d, 0x0c, 0xda, 0x54, 0xb6, + 0x38, 0xba, 0x9d, 0x76, 0xf9, 0xb5, 0x2d, 0x17, 0xc8, 0xf8, 0x8e, 0xe6, 0x3f, + 0x58, 0x45, 0xb5, 0xdc, 0xef, 0xa4, 0xc3, 0x47, 0x8b, 0x26, 0x70, 0xe1, 0x36, + 0x2c, 0x32, 0xd6, 0xe4, 0x73, 0x3b, 0x9d, 0xd2, 0xd5, 0xf2, 0x6e, 0x1f, 0xe3, + 0x06, 0xf7, 0x3c, 0x00, 0x7f, 0xdd, 0xca, 0xe9, 0xd9, 0xc0, 0xaa, 0xf1, 0x87, + 0xd7, 0x42, 0x8b, 0x1e, 0x9d, 0x47, 0x9c, 0x18, 0x23, 0x7b, 0x98, 0x28, 0xbc, + 0xa8, 0xb9, 0x8c, 0x9d, 0x9b, 0xec, 0x7d, 0x82, 0x70, 0xb5, 0xd8, 0xee, 0xc3, + 0xcc, 0x4f, 0x43, 0xfa, 0x01, 0x88, 0x52, 0x1b, 0xc6, 0x1b, 0x21, 0xdd, 0x04, + 0xe3, 0x7a, 0x83, 0xec, 0xe6, 0x8c, 0xa7, 0xa2, 0xfa, 0x6c, 0x8f, 0x9e, 0x34, + 0xa6, 0x29, 0x03, 0x35, 0xaa, 0x1f, 0xbd, 0x83, 0xd5, 0x4a, 0xaf, 0x44, 0x1e, + 0x31, 0x9e, 0xa4, 0x7a, 0x86, 0x2a, 0xd0, 0x29, 0x3c, 0xed, 0xf5, 0xdd, 0x9e, + 0xda, 0xde, 0xee, 0x33, 0xcb, 0x52, 0x2c, 0xd0, 0x11, 0x8b, 0xbd, 0x81, 0x1a, + 0xce, 0x9a, 0x23, 0xbd, 0xa3, 0x9a, 0xba, 0x72, 0xf1, 0x56, 0x6f, 0xc1, 0x68, + 0x84, 0x97, 0xd2, 0xa7, 0x92, 0x8c, 0x36, 0x70, 0x15, 0x25, 0x67, 0x8b, 0xc9, + 0x72, 0x14, 0xb3, 0x1b, 0x37, 0xba, 0xb4, 0x6b, 0x88, 0xf2, 0x7f, 0x04, 0x48, + 0xde, 0xcb, 0x31, 0x62, 0x2d, 0x0f, 0x0f, 0x87, 0xa8, 0x55, 0xba, 0x54, 0x00, + 0x03, 0x32, 0x03, 0x1f, 0x73, 0xab, 0xff, 0xd4, 0x65, 0x91, 0xda, 0x0b, 0x88, + 0x72, 0x35, 0x04, 0xed, 0xb2, 0xd7, 0x3b, 0xc1, 0xa2, 0x35, 0x47, 0x23, 0xb3, + 0xb8, 0x19, 0xd0, 0x63, 0x7a, 0x6f, 0xa4, 0x66, 0x39, 0x46, 0xa3, 0x0a, 0xc5, + 0xaf, 0xdd, 0x30, 0xce, 0x83, 0x0f, 0x67, 0x91, 0xb4, 0x57, 0x52, 0x70, 0xa1, + 0x72, 0x0f, 0x91, 0x86, 0x6e, 0x2b, 0x86, 0xf4, 0x78, 0x88, 0x94, 0xc8, 0xda, + 0x62, 0xd8, 0xb9, 0x1f, 0xaf, 0x52, 0x0e, 0x3b, 0xed, 0xbc, 0x12, 0x06, 0xa5, + 0xa5, 0xe6, 0xef, 0xd3, 0xdf, 0xde, 0x08, 0x43, 0xc3, 0xb0, 0x67, 0x57, 0x64, + 0x3f, 0xc0, 0x06, 0x00, 0x88, 0x38, 0xca, 0x47, 0x30, 0x87, 0xf8, 0x97, 0x79, + 0x18, 0xcc, 0x1b, 0x81, 0xc9, 0xe6, 0x8e, 0x3b, 0x88, 0x8f, 0xe6, 0xf7, 0xc6, + 0x30, 0xf1, 0xbc, 0x7a, 0xe1, 0x88, 0xf5, 0x12, 0x84, 0x20, 0x41, 0xca, 0xda, + 0x1e, 0x05, 0xf8, 0x66, 0xd2, 0x56, 0x2d, 0xbe, 0x09, 0xc4, 0xb4, 0x30, 0x68, + 0xf7, 0x54, 0xda, 0xd3, 0x4d, 0xf0, 0xfc, 0xfc, 0x18, 0x1f, 0x31, 0x80, 0x1a, + 0x79, 0x92, 0xd2, 0xf1, 0x6b, 0xe0, 0x21, 0x1b, 0x4a, 0x22, 0xf6, 0x2a, 0xab, + 0x64, 0x70, 0x1b, 0xf4, 0xa4, 0xe6, 0xd6, 0x66, 0xfc, 0x30, 0x4a, 0x5c, 0x79, + 0xc6, 0x09, 0xac, 0xc4, 0x3b, 0x00, 0xb4, 0x86, 0x48, 0x93, 0xd3, 0x7d, 0x50, + 0x07, 0xf0, 0xc3, 0x29, 0xa4, 0x75, 0x50, 0x52, 0x57, 0x75, 0x70, 0xdd, 0x38, + 0xfa, 0xc0, 0xa4, 0x89, 0xa1, 0x1b, 0xf3, 0x47, 0xaf, 0xab, 0xd5, 0x8a, 0x9e, + 0x65, 0x18, 0xae, 0x00, 0x80, 0x5f, 0x43, 0xdc, 0xbe, 0xad, 0x80, 0x04, 0xb4, + 0x7d, 0x7e, 0x87, 0xd6, 0x15, 0xb1, 0x93, 0x45, 0x06, 0xa9, 0x76, 0x9a, 0x88, + 0x3d, 0xb6, 0x75, 0x04, 0x2e, 0x44, 0xf5, 0xba, 0xba, 0x57, 0x90, 0x13, 0x3c, + 0x33, 0x75, 0x39, 0xab, 0x6e, 0x1b, 0x89, 0xda, 0x9b, 0xa2, 0x98, 0x87, 0xf8, + 0x01, 0xe2, 0x54, 0xbe, 0x2a, 0x76, 0x14, 0x47, 0xf5, 0xf9, 0x77, 0x4a, 0x8d, + 0x18, 0xa6, 0xf8, 0x27, 0xe3, 0x85, 0x45, 0x52, 0x5e, 0xac, 0x72, 0x2e, 0x34, + 0xf4, 0xe0, 0xa0, 0x70, 0x8b, 0xe9, 0x96, 0xfc, 0xc7, 0xe3, 0x0b, 0xa8, 0xe0, + 0x16, 0xaa, 0x36, 0xa6, 0xb5, 0xdf, 0x5e, 0x5a, 0x19, 0x09, 0xf6, 0x3a, 0xba, + 0x09, 0x5d, 0x98, 0x77, 0xa8, 0xf2, 0xdc, 0x53, 0xf4, 0x6f, 0x6c, 0x9b, 0x07, + 0x6c, 0x68, 0xd4, 0x31, 0x63, 0xd3, 0x34, 0xda, 0xc3, 0x82, 0x70, 0x33, 0xe5, + 0xad, 0x84, 0x88, 0xbf, 0xd9, 0xc4, 0xbb, 0xbe, 0x8f, 0x59, 0x35, 0xc6, 0xc5, + 0xea, 0x04, 0xc3, 0xad, 0x49, 0xc7, 0x47, 0xa9, 0xe7, 0x23, 0x1b, 0xcd, 0x7d, + 0x16, 0x21, 0x5e, 0x6e, 0x80, 0x73, 0x7d, 0x6b, 0x54, 0xfe, 0xc8, 0xb8, 0x84, + 0x02, 0xf0, 0x47, 0x52, 0x45, 0xe1, 0x74, 0xa7, 0x45, 0xb8, 0x31, 0xf8, 0xfe, + 0x03, 0xa7, 0x6f, 0xb9, 0xce, 0xca, 0x4d, 0x22, 0xb7, 0x83, 0xc3, 0x28, 0xc6, + 0x91, 0x5c, 0x43, 0x40, 0x50, 0x64, 0xae, 0x56, 0xbc, 0x89, 0xe6, 0x4d, 0x15, + 0x78, 0xe4, 0xd3, 0xa3, 0x4b, 0xb9, 0x55, 0x91, 0xea, 0xf1, 0xd3, 0xda, 0x02, + 0xa4, 0x54, 0x9f, 0xa8, 0x0d, 0xb0, 0xff, 0x7c, 0xb0, 0x39, 0x93, 0xb6, 0x8a, + 0xe1, 0x5a, 0x30, 0xe8, 0x79, 0x49, 0xaa, 0x08, 0x0e, 0x94, 0xab, 0xde, 0x68, + 0x89, 0x8c, 0x33, 0x92, 0xa2, 0x17, 0xd6, 0x49, 0x61, 0x6b, 0xbe, 0x73, 0x9b, + 0x13, 0xd1, 0x4d, 0xf0, 0x3f, 0xf2, 0x76, 0x71, 0x48, 0x9b, 0xe0, 0xb4, 0xbe, + 0xba, 0xaf, 0xa7, 0xd1, 0xe6, 0x39, 0xd5, 0xb3, 0xe9, 0x94, 0xff, 0xb6, 0xb7, + 0xa2, 0x09, 0xf6, 0xad, 0xfe, 0x8d, 0x1e, 0x5c, 0xcf, 0x01, 0x0c, 0x19, 0x16, + 0x8a, 0xeb, 0x18, 0xaa, 0x9d, 0x68, 0x7e, 0x24, 0xad, 0xc0, 0xf9, 0x66, 0x90, + 0x34, 0x24, 0x00, 0x34, 0x8e, 0x92, 0x9e, 0x07, 0x46, 0x02, 0x53, 0xf3, 0x83, + 0x90, 0xf8, 0x7b, 0xd6, 0xc0, 0x53, 0x08, 0xc3, 0xbd, 0xe2, 0x52, 0x28, 0xe0, + 0xfa, 0x08, 0x80, 0xb0, 0x8e, 0xf3, 0x4a, 0x5a, 0x9c, 0xc0, 0xea, 0x0a, 0x67, + 0xca, 0x65, 0xb6, 0xff, 0xd0, 0x05, 0x57, 0x29, 0x09, 0xf1, 0xc4, 0x2d, 0xd7, + 0x45, 0xee, 0xee, 0x9d, 0xd6, 0xb4, 0x43, 0x9c, 0x9f, 0x3f, 0x98, 0xa1, 0x18, + 0xfe, 0x16, 0x69, 0x8e, 0x9c, 0xef, 0xf5, 0x58, 0xf1, 0x60, 0x66, 0x97, 0x5f, + 0xe3, 0x95, 0x83, 0xe9, 0xb5, 0x85, 0x3b, 0x13, 0x11, 0x39, 0x15, 0x80, 0x01, + 0x9f, 0xe5, 0x5d, 0x59, 0xd1, 0xc8, 0x28, 0xd3, 0xfe, 0xb6, 0xa3, 0xb9, 0xce, + 0x92, 0xd0, 0x89, 0xae, 0x4b, 0x40, 0x8e, 0x23, 0xd6, 0xa4, 0x37, 0xd4, 0x98, + 0x9b, 0x51, 0x9b, 0x7a, 0x9e, 0xb0, 0x8a, 0xe6, 0xd4, 0x48, 0xa7, 0xa1, 0x6e, + 0x8a, 0xed, 0x26, 0xa2, 0xec, 0xd0, 0xca, 0xd8, 0x08, 0x44, 0xfd, 0x06, 0x50, + 0xd8, 0xc4, 0xe4, 0xd2, 0xaf, 0x90, 0x65, 0x67, 0x48, 0xd8, 0x09, 0x9a, 0x0c, + 0x75, 0x6f, 0xc1, 0x6c, 0xca, 0x06, 0xa3, 0x34, 0x43, 0x07, 0x02, 0xae, 0x19, + 0x61, 0x66, 0x5b, 0x48, 0x45, 0xac, 0xd1, 0xa8, 0xe3, 0x41, 0x01, 0xe6, 0x8b, + 0xb6, 0x44, 0xac, 0x03, 0x4d, 0xc6, 0x3e, 0xcc, 0x8a, 0xb4, 0x41, 0x06, 0xf3, + 0x66, 0x3e, 0x17, 0xe1, 0xa0, 0x5b, 0x90, 0x0d, 0x4a, 0x16, 0x7d, 0xfb, 0x71, + 0x9f, 0xd6, 0xb7, 0xff, 0xbd, 0xc1, 0x88, 0xa9, 0x2e, 0x71, 0xc7, 0xa3, 0xea, + 0xfe, 0x41, 0x68, 0xec, 0x8b, 0xd3, 0x98, 0x28, 0x3d, 0x1f, 0xd4, 0x82, 0x3c, + 0xde, 0x07, 0x9b, 0x12, 0x86, 0xd0, 0xb4, 0x6b, 0x44, 0x47, 0xb0, 0x82, 0xfa, + 0xed, 0x3f, 0xea, 0xe7, 0x1d, 0x03, 0x00, 0x04, 0xfd, 0xb5, 0x01, 0xe1, 0x9b, + 0xa1, 0xc3, 0x9e, 0xc7, 0x99, 0xc8, 0x88, 0xe1, 0x9b, 0xaa, 0xc8, 0x91, 0xc4, + 0x81, 0xcd, 0xb6, 0xc6, 0x85, 0xc7, 0xae, 0xc8, 0x9d, 0xc2, 0xaf, 0xc8, 0xa1, + 0xc6, 0xae, 0x69, 0xc7, 0xb3, 0xc6, 0xaa, 0xc6, 0xa6, 0xc6, 0xa0, 0xce, 0x86, + 0xe1, 0x9b, 0x94, 0xc4, 0x93, 0xc4, 0xb8, 0xc4, 0x8d, 0x62, 0xc8, 0x98, 0xc3, + 0x8b, 0xc9, 0x89, 0x72, 0xc5, 0xb9, 0xc4, 0xb5, 0xc4, 0x88, 0x44, 0xc4, 0x85, + 0xc5, 0xaa, 0xc5, 0x91, 0xc7, 0xa5, 0xc8, 0xb6, 0xc4, 0xa0, 0xe2, 0xb1, 0xa4, + 0x7b, 0xc4, 0xb6, 0xe1, 0x9a, 0xba, 0xc7, 0xae, 0xc4, 0x9e, 0x7c, 0xc4, 0xa1, + 0xc3, 0xa2, 0xc5, 0xbb, 0xe1, 0x9b, 0x9a, 0xc5, 0xb1, 0x66, 0xe1, 0x9b, 0x80, + 0xc7, 0x86, 0xe1, 0x9a, 0xbe, 0xc6, 0xa9, 0xc7, 0xb9, 0x4e, 0xc4, 0xa7, 0xc4, + 0xae, 0xc2, 0xae, 0xc6, 0xa9, 0xc8, 0x8c, 0xc4, 0x8a, 0xc6, 0xb3, 0xc3, 0x97, + 0xce, 0x84, 0xe2, 0xb1, 0xbf, 0xe2, 0xb1, 0xa1, 0xc7, 0x8c, 0xc8, 0xa3, 0xc8, + 0x9c, 0x37, 0xc7, 0x92, 0x47, 0xce, 0x86, 0xc9, 0x8b, 0xe1, 0x9a, 0xae, 0xc7, + 0x98, 0x77, 0xc6, 0xb4, 0xc5, 0xba, 0xc6, 0x82, 0xc4, 0x9d, 0xc7, 0xa6, 0xe2, + 0xb1, 0xac, 0xc4, 0x9a, 0xe2, 0xb1, 0xbb, 0xe1, 0x9b, 0x8b, 0xc5, 0x99, 0xc4, + 0xbf, 0xe1, 0x9b, 0xa6, 0xc6, 0xaa, 0xc5, 0x91, 0xc5, 0xb5, 0xc2, 0xb1, 0xc7, + 0xac, 0x76, 0x36, 0xc2, 0xa6, 0xc3, 0xbd, 0xc9, 0x89, 0xc5, 0xb7, 0xe1, 0x9a, + 0xb9, 0xc3, 0x88, 0xc7, 0x9e, 0xc5, 0x85, 0xc4, 0x85, 0xc7, 0x95, 0xc6, 0xb1, + 0x5f, 0xc8, 0x95, 0xc8, 0xa6, 0xc4, 0xba, 0xc3, 0x92, 0xc5, 0x97, 0xc3, 0x80, + 0xe1, 0x9b, 0x9c, 0xe2, 0xb1, 0xa0, 0xc9, 0x8a, 0xcd, 0xbd, 0xe1, 0x9a, 0xaf, + 0xc6, 0x83, 0xc8, 0x87, 0xce, 0x88, 0xc7, 0x90, 0xc9, 0x8d, 0xc8, 0x8d, 0xc5, + 0x97, 0xc4, 0xaf, 0xc5, 0xb3, 0xc8, 0x92, 0x70, 0x2f, 0xc5, 0xa4, 0xc7, 0x9e, + 0xc6, 0x92, 0xc9, 0x81, 0xc4, 0xb2, 0xc3, 0xaf, 0xc9, 0x89, 0xc3, 0xab, 0xc4, + 0x8d, 0x6a, 0xc7, 0xbd, 0xe2, 0xb1, 0xa3, 0xc5, 0x86, 0xc6, 0x92, 0x53, 0xc6, + 0x95, 0xc7, 0xa3, 0xc7, 0xbc, 0xc4, 0xb4, 0xc4, 0x8f, 0xc4, 0xb1, 0xc7, 0xb9, + 0xc4, 0xab, 0xc8, 0x84, 0x7b, 0xce, 0x89, 0xc6, 0xbc, 0xc6, 0xb1, 0xe2, 0xb1, + 0xbf, 0xc5, 0x97, 0xc2, 0xbc, 0xe1, 0x9b, 0x8a, 0xc4, 0xab, 0xe1, 0x9a, 0xb9, + 0xc8, 0x83, 0xe1, 0x9b, 0xa4, 0x78, 0xc8, 0xb3, 0xc3, 0x9c, 0x38, 0xe1, 0x9b, + 0xa7, 0xc6, 0xaf, 0xc8, 0xab, 0xe1, 0x9a, 0xa9, 0xc8, 0x9a, 0xe2, 0xb1, 0xbb, + 0xc4, 0x8b, 0xc6, 0xba, 0xe1, 0x9b, 0xab, 0x5a, 0xc6, 0xa0, 0xc4, 0xab, 0xe1, + 0x9b, 0x82, 0xc7, 0xb9, 0xc3, 0xb6, 0xc4, 0x83, 0x70, 0xc8, 0x81, 0xe1, 0x9a, + 0xa2, 0xc5, 0x8c, 0xc4, 0xa3, 0xc4, 0xb0, 0xc9, 0x80, 0xe1, 0x9a, 0xaf, 0xc4, + 0xb4, 0xc4, 0x9d, 0xc6, 0x98, 0xc6, 0xa6, 0xe1, 0x9b, 0x8b, 0xc7, 0xb5, 0xe1, + 0x9b, 0xae, 0xe1, 0x9b, 0x96, 0xc2, 0xbf, 0xc6, 0xb7, 0xc6, 0x96, 0xc5, 0x8d, + 0xc6, 0x8f, 0xc7, 0x94, 0xc5, 0xa6, 0x00, 0x01, 0xfd, 0x73, 0x01, 0xc7, 0xaf, + 0xc8, 0xae, 0xc4, 0x93, 0xc8, 0x9f, 0xc2, 0xb0, 0xc6, 0x92, 0xc5, 0x90, 0xe1, + 0x9b, 0x89, 0xc8, 0x88, 0xc8, 0xbe, 0xc7, 0x80, 0x7b, 0xc7, 0xb5, 0xe1, 0x9b, + 0xa8, 0xc8, 0x9e, 0xc2, 0xb3, 0xc5, 0xa1, 0xc9, 0x85, 0xe1, 0x9b, 0x83, 0xe1, + 0x9b, 0xa2, 0xc8, 0xba, 0xc4, 0x85, 0xc5, 0x81, 0xc5, 0x93, 0xc5, 0xa2, 0xc8, + 0x91, 0xe1, 0x9b, 0x85, 0xc4, 0xb3, 0xc5, 0x8f, 0xe1, 0x9a, 0xaa, 0xcd, 0xb1, + 0xe1, 0x9b, 0xad, 0xc3, 0xac, 0xc8, 0x9b, 0xc4, 0x8a, 0xc8, 0x9b, 0xe1, 0x9b, + 0x82, 0xc7, 0xa8, 0xc7, 0xa9, 0x2f, 0xc2, 0xba, 0xc3, 0x87, 0xc8, 0xb4, 0xc4, + 0x86, 0x5a, 0xe1, 0x9a, 0xb0, 0x45, 0xc5, 0xa9, 0xc3, 0x90, 0xcd, 0xbb, 0xe1, + 0x9a, 0xb2, 0xc5, 0x90, 0xc5, 0xa5, 0xc6, 0xa6, 0x71, 0xc4, 0x90, 0xc4, 0xaf, + 0xc8, 0x93, 0xc3, 0xad, 0xc7, 0xb6, 0x2e, 0xc3, 0xbd, 0x43, 0x7e, 0x75, 0xe1, + 0x9b, 0xad, 0x28, 0xc6, 0xaa, 0x78, 0xc4, 0xa2, 0xc3, 0x8b, 0xc8, 0x8c, 0xe1, + 0x9a, 0xba, 0xe1, 0x9a, 0xa7, 0xc7, 0xbe, 0xc6, 0xb6, 0xc2, 0xa5, 0xc6, 0x89, + 0xc9, 0x8e, 0x31, 0xe1, 0x9a, 0xb6, 0xc4, 0x92, 0x21, 0xc7, 0xb3, 0xc7, 0xb2, + 0xc4, 0xa8, 0xc8, 0xa3, 0xc7, 0x97, 0xc4, 0xbc, 0xc7, 0x9e, 0xc2, 0xa5, 0xe1, + 0x9a, 0xab, 0xc5, 0x98, 0xe1, 0x9a, 0xb0, 0x2f, 0x4a, 0xce, 0x88, 0xc6, 0xa6, + 0xc6, 0xb5, 0xe2, 0xb1, 0xb7, 0xc4, 0xa7, 0xc9, 0x83, 0xc5, 0xb5, 0xce, 0x8c, + 0xc7, 0x86, 0xc2, 0xba, 0xe1, 0x9b, 0x92, 0xc7, 0x9a, 0xe1, 0x9a, 0xba, 0xc6, + 0xb1, 0xc2, 0xb6, 0xc6, 0xbb, 0xc6, 0xb6, 0xc8, 0x8e, 0xc4, 0x80, 0xc8, 0x8f, + 0xc4, 0xa6, 0xc4, 0x8a, 0xc6, 0xa7, 0x26, 0x52, 0xc2, 0xa6, 0xc6, 0x8b, 0xc6, + 0xb5, 0xc6, 0x8e, 0xc6, 0xa2, 0xc8, 0x92, 0xc7, 0x9c, 0x43, 0xc8, 0x9c, 0x5e, + 0xe1, 0x9b, 0xa4, 0x50, 0xc8, 0xaf, 0xc4, 0x92, 0x42, 0xc8, 0x99, 0xc6, 0x9e, + 0xc3, 0xb3, 0xc5, 0x93, 0xc5, 0xa6, 0xc7, 0xb2, 0xc7, 0xb6, 0xc6, 0x83, 0xe2, + 0xb1, 0xb9, 0xc6, 0x91, 0xc8, 0x81, 0xc7, 0x96, 0xc9, 0x87, 0xc4, 0x86, 0xc6, + 0x9b, 0xc3, 0xb2, 0x6f, 0xe2, 0xb1, 0xae, 0xcd, 0xba, 0x6b, 0xe1, 0x9b, 0x8f, + 0xc6, 0x89, 0x59, 0xe1, 0x9b, 0x95, 0xe2, 0xb1, 0xbc, 0xe2, 0xb1, 0xaf, 0xc4, + 0xb1, 0xc2, 0xb8, 0xe1, 0x9b, 0xac, 0xe1, 0x9a, 0xa8, 0xc2, 0xb9, 0xc7, 0xa4, + 0xc6, 0xbf, 0xc4, 0x95, 0xe1, 0x9a, 0xb4, 0xc6, 0xba, 0xc8, 0x8e, 0xe1, 0x9b, + 0x90, 0x28, 0xcd, 0xb6, 0xc7, 0x98, 0xc6, 0xbe, 0xc6, 0x97, 0xc6, 0xa2, 0xc8, + 0x85, 0x3a, 0xc4, 0xa5, 0x5a, 0x04, 0xdf, 0x60, 0xdf, 0x19, 0x27, 0xc0, 0x48, + 0x6b, 0x56, 0xb9, 0x94, 0x13, 0xb6, 0xa5, 0xd3, 0x2b, 0x3f, 0x2c, 0xd7, 0x44, + 0xeb, 0xa1, 0xf0, 0x28, 0x36, 0x0c, 0xfe, 0x57, 0x88, 0x00, 0x0b, 0xad, 0xc7, + 0x55, 0xbe, 0xa3, 0xad, 0x5f, 0x58, 0xfb, 0x14, 0x40, 0xa2, 0x21, 0x1f, 0x1f, + 0x79, 0xcf, 0x33, 0x10, 0x8e, 0x2f, 0xf1, 0x25, 0xa2, 0xc3, 0x3c, 0xa2, 0x7a, + 0x77, 0x76, 0x24, 0x5f, 0x6a, 0xe4, 0x88, 0x44, 0x7e, 0xf6, 0x1a, 0xa1, 0x90, + 0xe0, 0xf2, 0x2e, 0xaf, 0xa0, 0xf6, 0xfa, 0x15, 0xc1, 0x94, 0x1a, 0x93, 0xd9, + 0x53, 0x78, 0xba, 0xe6, 0x95, 0x82, 0x74, 0xb3, 0x10, 0x88, 0xfb, 0xd8, 0xb3, + 0xa3, 0xa0, 0xd1, 0x54, 0xa7, 0x89, 0x73, 0x5b, 0x03, 0x49, 0xc4, 0xd5, 0x1c, + 0x88, 0x9d, 0x08, 0x15, 0x2d, 0xdd, 0x54, 0x88, 0xbe, 0x95, 0x56, 0x05, 0x94, + 0xe6, 0x73, 0xfa, 0x05, 0x1b, 0xf9, 0xb6, 0x14, 0xa1, 0x5e, 0x10, 0x0b, 0x60, + 0xa0, 0xfe, 0x9a, 0x7e, 0x12, 0xa9, 0xb2, 0x56, 0xdf, 0x58, 0xf9, 0x6f, 0xcb, + 0x3f, 0xdd, 0x17, 0xe2, 0x76, 0x8c, 0x17, 0x5b, 0xf1, 0xc9, 0xa4, 0x85, 0x1d, + 0x9a, 0xb7, 0x2a, 0xd8, 0xdf, 0xc3, 0x9d, 0xba, 0xbe, 0x2b, 0xc9, 0xca, 0x9d, + 0x72, 0x97, 0xdf, 0xc4, 0x1f, 0xd6, 0x4b, 0x3c, 0x9e, 0x18, 0x80, 0x58, 0x32, + 0xb8, 0x83, 0xe3, 0xdc, 0xd9, 0xf6, 0xea, 0xb3, 0xda, 0x2f, 0xf1, 0x25, 0xa2, + 0xc3, 0x3c, 0xa2, 0x7a, 0x77, 0x76, 0x24, 0x5f, 0x6a, 0xe4, 0x88, 0x44, 0x7e, + 0xf6, 0x1a, 0xa1, 0x90, 0xe0, 0xf2, 0x2e, 0xaf, 0xa0, 0xf6, 0xfa, 0x15, 0xc1, + 0x94, 0x1a, 0xdf, 0x87, 0x2f, 0x79, 0x63, 0x7d, 0xda, 0x39, 0x16, 0x79, 0x6a, + 0x5c, 0x62, 0xf5, 0x7f, 0x1d, 0xe3, 0x76, 0x78, 0xb6, 0xde, 0xa0, 0x08, 0x69, + 0x93, 0x36, 0x74, 0xf8, 0x8e, 0x41, 0xa9, 0x18, 0x08, 0x07, 0x3b, 0x0f, 0x43, + 0x6e, 0xbe, 0x25, 0xa5, 0xf4, 0x4a, 0x60, 0x10, 0x33, 0xe2, 0x18, 0x4b, 0x88, + 0xdb, 0x79, 0xe9, 0x68, 0xca, 0x6d, 0x89, 0xb7, 0x49, 0x01, 0xbe, 0x6c, 0x6d, + 0xb3, 0x0b, 0xf9, 0x09, 0x21, 0x83, 0x80, 0x79, 0x0e, 0x40, 0x7a, 0xb5, 0xf5, + 0x76, 0x31, 0x4c, 0x00, 0xd2, 0x80, 0x46, 0xe3, 0xf4, 0xc1, 0x33, 0x5f, 0x4a, + 0x0b, 0x87, 0x15, 0xab, 0x98, 0x19, 0x22, 0xc2, 0x0a, 0x11, 0x67, 0x22, 0xbc, + 0x82, 0xfa, 0xcd, 0x0f, 0x1d, 0x29, 0xf6, 0xc3, 0xff, 0x8e, 0x42, 0xe3, 0x09, + 0x2f, 0xf1, 0x25, 0xa2, 0xc3, 0x3c, 0xa2, 0x7a, 0x77, 0x76, 0x24, 0x5f, 0x6a, + 0xe4, 0x88, 0x44, 0x7e, 0xf6, 0x1a, 0xa1, 0x90, 0xe0, 0xf2, 0x2e, 0xaf, 0xa0, + 0xf6, 0xfa, 0x15, 0xc1, 0x94, 0x1a, 0xfd, 0x56, 0x53, 0x65, 0xa4, 0x16, 0x37, + 0x68, 0x78, 0x51, 0x53, 0x88, 0x7f, 0xb5, 0xf9, 0x63, 0xe7, 0xac, 0xc1, 0x62, + 0xf2, 0x80, 0x5f, 0x45, 0xf4, 0x44, 0x87, 0xf8, 0x5e, 0x19, 0x9c, 0x1d, 0xf4, + 0xa0, 0xfc, 0xa4, 0xd4, 0x4b, 0xaa, 0x62, 0xda, 0x7a, 0xf5, 0xed, 0x69, 0x68, + 0x41, 0x12, 0xd3, 0x5f, 0x36, 0x73, 0x73, 0x2f, 0x5a, 0x1a, 0xc3, 0xe4, 0xf0, + 0x21, 0xba, 0x5c, 0x2c, 0x32, 0x21, 0xa4, 0xbc, 0xc9, 0x32, 0xe7, 0x3e, 0x1b, + 0xdc, 0xdd, 0x7f, 0x42, 0x20, 0x5d, 0xba, 0x4b, 0xab, 0x90, 0x03, 0xb9, 0x4a, + 0x35, 0x97, 0xea, 0xa2, 0xa4, 0xbd, 0xb1, 0xd9, 0x87, 0x60, 0x80, 0x46, 0x73, + 0x1f, 0x04, 0x04, 0xbc, 0x6f, 0x49, 0x4d, 0x30, 0x97, 0x36, 0x02, 0x4d, 0x2e, + 0x79, 0x0f, 0xc6, 0xfd, 0x2f, 0xf1, 0x25, 0xa2, 0xc3, 0x3c, 0xa2, 0x7a, 0x77, + 0x76, 0x24, 0x5f, 0x6a, 0xe4, 0x88, 0x44, 0x7e, 0xf6, 0x1a, 0xa1, 0x90, 0xe0, + 0xf2, 0x2e, 0xaf, 0xa0, 0xf6, 0xfa, 0x15, 0xc1, 0x94, 0x1a, 0x66, 0x7f, 0x17, + 0x6e, 0x0a, 0xa9, 0x9d, 0xd1, 0xd7, 0x2b, 0x57, 0x36, 0x8f, 0x01, 0xb6, 0x6c, + 0x4a, 0x96, 0xc1, 0x56, 0xf3, 0xf2, 0x85, 0x41, 0xab, 0x4c, 0xa4, 0x96, 0x69, + 0x60, 0x21, 0x02, 0x08, 0x46, 0x69, 0x61, 0x12, 0x94, 0x90, 0xa7, 0xd8, 0xb6, + 0x5c, 0x14, 0x70, 0xba, 0xd8, 0xdb, 0x08, 0x28, 0xef, 0x06, 0xc1, 0xcb, 0x55, + 0x70, 0x0e, 0x85, 0xe2, 0x4f, 0xde, 0xa9, 0x4e, 0xa2, 0x00, 0xfd, 0x6f, 0x01, + 0xcd, 0xb1, 0x33, 0xc5, 0xb0, 0xe2, 0xb1, 0xbf, 0xc3, 0x9b, 0xc4, 0x8c, 0xc6, + 0xa0, 0xc5, 0xa4, 0xc8, 0x98, 0xc8, 0xbd, 0xc5, 0x93, 0x35, 0xc2, 0xb0, 0xe1, + 0x9b, 0x98, 0xc5, 0x94, 0xc8, 0xbe, 0x76, 0xc5, 0xa6, 0x4b, 0xc5, 0xa3, 0xc4, + 0xbc, 0xc5, 0x9a, 0xcd, 0xb6, 0xe1, 0x9b, 0x92, 0x36, 0xc3, 0x89, 0xc7, 0x85, + 0xc9, 0x8c, 0xc5, 0x98, 0x76, 0xc9, 0x8d, 0xc4, 0xbb, 0xc6, 0x80, 0xc2, 0xa8, + 0x71, 0xc8, 0x81, 0xc4, 0x9e, 0x4f, 0x5d, 0xe2, 0xb1, 0xbe, 0xc3, 0x95, 0x38, + 0xc6, 0x81, 0xc8, 0x88, 0xc5, 0x8b, 0xc5, 0x80, 0xe2, 0xb1, 0xbf, 0xe2, 0xb1, + 0xb4, 0xc3, 0xbf, 0xc2, 0xaf, 0xe2, 0xb1, 0xbc, 0xc4, 0x84, 0xc3, 0x80, 0xc3, + 0x8f, 0xc9, 0x8d, 0xc7, 0xa2, 0xc6, 0xa6, 0xc4, 0x82, 0xe2, 0xb1, 0xa6, 0xc5, + 0xaf, 0xc3, 0x9a, 0xc8, 0xb3, 0xc3, 0xa7, 0x42, 0xc3, 0x82, 0xe1, 0x9b, 0x90, + 0xc8, 0xa6, 0x79, 0xc3, 0x87, 0x3e, 0xc7, 0xa2, 0x73, 0xc6, 0x90, 0xc4, 0x90, + 0x28, 0xc5, 0xa3, 0xe1, 0x9a, 0xb8, 0xc7, 0xae, 0xc4, 0xbf, 0xc8, 0xb3, 0x59, + 0xc3, 0x90, 0xc8, 0x85, 0xc4, 0x84, 0xc5, 0xa1, 0xc6, 0x80, 0x36, 0xc7, 0x81, + 0xc5, 0xb1, 0xc5, 0x8c, 0xc7, 0xa9, 0xe1, 0x9b, 0xa4, 0xe1, 0x9a, 0xb0, 0xe1, + 0x9a, 0xbd, 0xc6, 0xba, 0xc4, 0xa9, 0xc3, 0x97, 0xe1, 0x9a, 0xb2, 0x67, 0xce, + 0x85, 0xce, 0x89, 0x4f, 0xc7, 0x95, 0xc7, 0x95, 0xc6, 0xb7, 0xc4, 0x9a, 0xe1, + 0x9b, 0xac, 0xc3, 0xaa, 0xc7, 0xad, 0xc3, 0x9e, 0xc9, 0x86, 0xc3, 0xbc, 0xe1, + 0x9b, 0xa0, 0x47, 0x4f, 0xe1, 0x9b, 0x86, 0xc6, 0x96, 0xc2, 0xa3, 0xc2, 0xab, + 0xc3, 0xa8, 0xc4, 0xb0, 0xc8, 0xa1, 0xc5, 0x95, 0xe2, 0xb1, 0xbe, 0xc2, 0xa9, + 0x2c, 0x67, 0x72, 0xc2, 0xbb, 0xc3, 0x8a, 0xce, 0x86, 0xe1, 0x9a, 0xb4, 0xc5, + 0x85, 0xc7, 0x8b, 0xe1, 0x9a, 0xba, 0x5e, 0xe1, 0x9b, 0xa5, 0xc6, 0x80, 0xe1, + 0x9a, 0xaf, 0x6c, 0x5f, 0xc8, 0x86, 0xc7, 0xb2, 0xe2, 0xb1, 0xb8, 0xc3, 0x95, + 0xe1, 0x9b, 0x9d, 0xc8, 0x82, 0xe1, 0x9b, 0xae, 0xc7, 0xa3, 0xc4, 0xaf, 0xc6, + 0xb7, 0xce, 0x8c, 0xc6, 0xaf, 0xc9, 0x87, 0xe2, 0xb1, 0xa1, 0x2a, 0xc4, 0x9e, + 0xc7, 0x9d, 0xcd, 0xb7, 0xc6, 0xaa, 0xc3, 0x89, 0xc5, 0xb0, 0xc8, 0xa2, 0xc8, + 0x98, 0xc6, 0xaa, 0xce, 0x84, 0xc3, 0x92, 0xc4, 0xab, 0x58, 0xe1, 0x9b, 0x9f, + 0xc2, 0xbc, 0xc8, 0xad, 0xc4, 0xb6, 0xe1, 0x9b, 0x93, 0xc3, 0x8f, 0xc6, 0xb8, + 0xc7, 0xb7, 0x50, 0xc5, 0x9e, 0xcd, 0xb1, 0xce, 0x8a, 0x71, 0xc5, 0xbf, 0xc4, + 0x8a, 0xc8, 0xb0, 0x00, 0x01, 0x20, 0xc8, 0xb5, 0xc5, 0x9f, 0xc3, 0x98, 0xe1, + 0x9b, 0x83, 0xe1, 0x9a, 0xa9, 0xc2, 0xbc, 0xc7, 0xa3, 0x28, 0xe2, 0xb1, 0xb3, + 0x2c, 0x45, 0xe1, 0x9b, 0x80, 0xc3, 0x98, 0xc4, 0x92, 0xc6, 0x84, 0x5a, 0x00, + 0x00, 0x9d, 0x2e, 0x9e, 0x09, 0x9f, 0x91, 0x58, 0x08, 0x4e, 0x9f, 0xc5, 0x45, + 0x5b, 0x42, 0xb1, 0x8b, 0x9e, 0x4f, 0xaf, 0x95, 0xc7, 0x00, 0x74, 0x39, 0x81, + 0xa4, 0x19, 0xdd, 0x67, 0x7e, 0x5d, 0x31, 0x1e, 0xff, 0xf1, 0x2e, 0xf9, 0xd4, + 0xf5, 0xb0, 0x45, 0x85, 0x19, 0x7c, 0x3b, 0x3c, 0xc8, 0xe8, 0x57, 0xd8, 0x1f, + 0x21, 0xef, 0x88, 0x1f, 0xed, 0x53, 0x3c, 0x92, 0xcf, 0x4c, 0xb0, 0xe1, 0x8f, + 0xe7, 0xd3, 0x4e, 0x99, 0x7c, 0x64, 0x92, 0x88, 0x4f, 0xe5, 0x6a, 0x8b, 0x91, + 0x08, 0x98, 0x0d, 0x45, 0x3c, 0xb8, 0xa6, 0x6e, 0xa0, 0xa0, 0x15, 0x35, 0x50, + 0x06, 0x0a, 0xcb, 0x04, 0x3a, 0x40, ], txid: [ - 0x22, 0x1d, 0x40, 0x59, 0x7b, 0x56, 0x3f, 0x20, 0x64, 0x58, 0xf9, 0x73, 0x6b, - 0x85, 0x49, 0x23, 0x7c, 0x55, 0x54, 0x24, 0x2c, 0x41, 0x90, 0x22, 0x43, 0x5a, - 0x33, 0x50, 0xa0, 0x70, 0x8e, 0xa1, + 0x98, 0x8a, 0x62, 0xa4, 0x7d, 0xdc, 0xdb, 0xc9, 0x94, 0xa7, 0x09, 0xf2, 0xbf, + 0xf0, 0xb2, 0x60, 0x8a, 0x77, 0x55, 0xd6, 0x32, 0xee, 0xd6, 0x78, 0x85, 0xa8, + 0x0f, 0x83, 0xc0, 0x80, 0x61, 0xe8, ], auth_digest: [ - 0x6a, 0x75, 0xe4, 0x93, 0x24, 0xe8, 0x53, 0x20, 0xfe, 0x2f, 0x22, 0x46, 0x66, - 0x18, 0xb7, 0x0b, 0x4b, 0xbe, 0xfe, 0xa2, 0x48, 0xe5, 0xd3, 0x67, 0x3f, 0x18, - 0xf2, 0xe4, 0x87, 0xa2, 0xb2, 0x0a, + 0xa6, 0x85, 0x12, 0x7b, 0x98, 0x11, 0x77, 0x77, 0x7f, 0xd9, 0x69, 0x68, 0x25, + 0x43, 0x42, 0xd5, 0x6f, 0xf7, 0x83, 0x23, 0xd2, 0xad, 0x4c, 0x90, 0xcc, 0xac, + 0x0a, 0xb3, 0xed, 0xfd, 0x90, 0x55, ], - amounts: vec![1076763594431866, 316847576141144, 1780844721475339], + amounts: vec![1723266777323070, 447623377724180, 1162426483161967], script_pubkeys: vec![ - vec![0x00, 0x65, 0x51, 0xac, 0x65, 0x63, 0x00, 0x53], - vec![0x63, 0x52, 0x00, 0x53], - vec![0xac, 0xac, 0x00, 0x65, 0x6a, 0x63, 0x51], + vec![0x6a], + vec![0x6a, 0x63, 0xac, 0x65, 0x63], + vec![0x51, 0x6a, 0x63], ], - transparent_input: Some(2), + transparent_input: Some(0), sighash_shielded: [ - 0xb5, 0xa1, 0x8f, 0xf6, 0x57, 0x83, 0x9c, 0x69, 0x79, 0xc2, 0xf2, 0xaf, 0xae, - 0xea, 0xf2, 0xf5, 0xc1, 0xcf, 0x43, 0xdf, 0x92, 0xf4, 0xa6, 0x57, 0x55, 0xfa, - 0x42, 0xae, 0x2b, 0x77, 0x06, 0xab, + 0x20, 0x95, 0xb9, 0x26, 0xa8, 0xb1, 0x03, 0x1d, 0xaf, 0xa7, 0x3d, 0x48, 0x5f, + 0xb3, 0xd7, 0x76, 0x1a, 0x18, 0x01, 0xd2, 0x75, 0xdf, 0x12, 0x70, 0x94, 0xfe, + 0x41, 0x7b, 0x6a, 0xfc, 0xe6, 0x19, ], sighash_all: Some([ - 0x9d, 0x80, 0x2c, 0x8a, 0xce, 0x5b, 0xc5, 0xf5, 0xb0, 0x3c, 0x7d, 0xac, 0x8a, - 0x29, 0xef, 0x33, 0x42, 0x4d, 0xef, 0x82, 0xcb, 0xc4, 0xfc, 0x84, 0x00, 0xc0, - 0xbb, 0x9d, 0x5e, 0x08, 0x41, 0x47, + 0x52, 0xf0, 0xcc, 0x6f, 0x54, 0xa6, 0xd3, 0x2a, 0xf9, 0x27, 0x46, 0x33, 0x1a, + 0x0e, 0x3d, 0x0b, 0x90, 0xfc, 0xd0, 0xa7, 0x77, 0x73, 0x2c, 0x11, 0xb6, 0x83, + 0x65, 0x4d, 0x79, 0xea, 0x64, 0x1c, ]), sighash_none: Some([ - 0xae, 0x2d, 0xb1, 0x4c, 0x57, 0x78, 0x1f, 0xb5, 0x5c, 0x2f, 0x66, 0x58, 0xf6, - 0x14, 0x18, 0x83, 0xf7, 0xeb, 0xe0, 0xd3, 0x9f, 0x43, 0x9c, 0xf5, 0x66, 0xdc, - 0x55, 0x0f, 0xb9, 0xda, 0x71, 0x68, + 0x53, 0xa2, 0xa7, 0x9e, 0x0a, 0xb7, 0x34, 0xb8, 0xb4, 0x57, 0xa6, 0x77, 0x79, + 0x2e, 0x1a, 0x5d, 0xb5, 0x41, 0xe1, 0xe8, 0x4f, 0x06, 0x8b, 0xc9, 0xfb, 0x7c, + 0x4a, 0xfe, 0x90, 0x3f, 0x10, 0x86, + ]), + sighash_single: Some([ + 0x3a, 0x0f, 0xb6, 0x91, 0xa5, 0x43, 0xa6, 0x1c, 0xfb, 0xfe, 0x5a, 0x89, 0xd5, + 0x27, 0x96, 0x01, 0x70, 0xd8, 0xdf, 0xc0, 0xfe, 0x5d, 0x41, 0xc3, 0x85, 0x1c, + 0xf3, 0xd9, 0x55, 0xc7, 0xc0, 0x30, ]), - sighash_single: None, sighash_all_anyone: Some([ - 0xe7, 0x11, 0x83, 0x4b, 0x5a, 0x4e, 0xb8, 0x4a, 0xa2, 0x98, 0x6a, 0x53, 0xc2, - 0xb2, 0xba, 0x2f, 0xd6, 0x37, 0x4e, 0x66, 0x6f, 0x03, 0x11, 0xbf, 0xca, 0x8c, - 0xbc, 0xee, 0xfd, 0xde, 0x1e, 0x38, + 0xc5, 0x68, 0xdb, 0x39, 0x94, 0xe0, 0x45, 0xca, 0xbd, 0xa9, 0x1c, 0x03, 0xf3, + 0xd6, 0xe7, 0xa7, 0x63, 0x11, 0xd2, 0xfc, 0x56, 0x2d, 0xac, 0xa7, 0xf0, 0x15, + 0x27, 0xde, 0xd8, 0xf3, 0xab, 0x92, ]), sighash_none_anyone: Some([ - 0x5c, 0x3a, 0x08, 0x39, 0xfd, 0xc7, 0x34, 0x17, 0xae, 0x7d, 0x5f, 0x15, 0xdc, - 0xee, 0xd6, 0xc1, 0xa4, 0xcb, 0xe8, 0x0c, 0x6c, 0x25, 0xce, 0x03, 0x86, 0xfe, - 0xf7, 0xc0, 0x58, 0xa8, 0xb9, 0x43, + 0xff, 0xa7, 0xb0, 0x63, 0xf6, 0xef, 0xde, 0xd3, 0x70, 0x50, 0x84, 0xb6, 0x2f, + 0xa0, 0x04, 0x18, 0x96, 0xc3, 0x85, 0xfc, 0xfd, 0x12, 0x22, 0xfc, 0x2c, 0x5a, + 0xa1, 0xe3, 0x96, 0x90, 0x0d, 0x70, + ]), + sighash_single_anyone: Some([ + 0x9c, 0x36, 0xe6, 0xe3, 0x01, 0xb5, 0x9f, 0xc5, 0x1e, 0x55, 0x79, 0xb1, 0x47, + 0x17, 0x5f, 0x87, 0x53, 0x06, 0x5f, 0xdb, 0x27, 0x61, 0xf1, 0x07, 0x67, 0xce, + 0x67, 0x34, 0x76, 0x5b, 0xcb, 0xa6, ]), - sighash_single_anyone: None, }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TestVector { tx: vec![ - 0x05, 0x00, 0x00, 0x80, 0x0a, 0x27, 0xa7, 0x26, 0xb4, 0xd0, 0xd6, 0xc2, 0x57, - 0xb8, 0x57, 0x51, 0x23, 0x5d, 0xbc, 0x10, 0x02, 0x52, 0xe4, 0x1e, 0x00, 0x29, - 0x31, 0xb4, 0x57, 0x46, 0x19, 0x8e, 0x5d, 0xd9, 0x57, 0x1a, 0x56, 0xa7, 0xe0, - 0xd4, 0x23, 0xff, 0x27, 0x98, 0x9d, 0x3e, 0xb4, 0x17, 0xec, 0xd3, 0xc3, 0x09, - 0x3f, 0xb8, 0x2c, 0x56, 0x58, 0x00, 0x96, 0x24, 0xc5, 0x32, 0x19, 0xa6, 0x0c, - 0xd0, 0xa8, 0xc4, 0xda, 0x36, 0x7e, 0x29, 0xa7, 0x17, 0x79, 0xa7, 0x30, 0x32, - 0x98, 0x5a, 0x3d, 0x1f, 0xd0, 0x3d, 0xd4, 0xd0, 0x6e, 0x05, 0x56, 0x6f, 0x3b, - 0x84, 0x36, 0x7c, 0xf0, 0xfa, 0xee, 0x9b, 0x09, 0x63, 0x52, 0x52, 0x00, 0x52, - 0x6a, 0x53, 0xac, 0xac, 0x5d, 0x82, 0xd0, 0xa6, 0x02, 0xef, 0xab, 0xec, 0xef, - 0x1b, 0xc7, 0x01, 0x00, 0x02, 0x00, 0x63, 0x97, 0x76, 0x63, 0x55, 0x0e, 0x76, - 0x06, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x03, 0x09, 0xa8, 0x9a, 0x5f, 0x40, 0xb3, - 0x73, 0x03, 0xe1, 0x81, 0x6d, 0xf1, 0x3a, 0x9d, 0x7e, 0x20, 0xdb, 0x15, 0x9c, - 0x9f, 0x42, 0x77, 0x3a, 0x2f, 0xb0, 0x23, 0xd9, 0x5a, 0xbb, 0x1e, 0x1c, 0xbe, - 0x81, 0xc0, 0x92, 0xed, 0xb2, 0x30, 0xfa, 0x38, 0xea, 0x13, 0xc5, 0xde, 0x7c, - 0x0e, 0x50, 0x31, 0xa1, 0xe8, 0x4d, 0xae, 0xc3, 0xeb, 0xe6, 0x2d, 0x5f, 0x6c, - 0x4a, 0xbe, 0x5c, 0xe9, 0x0a, 0x3f, 0xcd, 0xc3, 0xa6, 0x50, 0x0c, 0x01, 0x1c, - 0x8a, 0x0f, 0xc0, 0x3d, 0xb6, 0xcc, 0x0c, 0x56, 0xcf, 0xd6, 0x54, 0x3a, 0xed, - 0x33, 0xac, 0x6b, 0x7c, 0x4d, 0xb7, 0x83, 0xde, 0xe6, 0xb3, 0x29, 0x27, 0x7f, - 0x96, 0xc7, 0xe9, 0x0b, 0xb9, 0xb4, 0x73, 0x02, 0x46, 0x5f, 0x37, 0x5c, 0x1d, - 0x3c, 0xa4, 0x8e, 0x54, 0xfa, 0xca, 0xe0, 0xf9, 0xc2, 0xdd, 0x4d, 0x64, 0xd9, - 0x04, 0x61, 0x52, 0xb4, 0x36, 0x34, 0x22, 0x7f, 0xbe, 0x32, 0xf6, 0x63, 0xbd, - 0x1d, 0x90, 0xbb, 0xfa, 0x22, 0xf0, 0xe9, 0xc7, 0x93, 0x47, 0x71, 0x93, 0xdd, - 0xcb, 0x40, 0x18, 0x1a, 0x67, 0x9e, 0xae, 0x78, 0x11, 0x32, 0x32, 0x31, 0xf0, - 0x1f, 0x55, 0xc7, 0xad, 0x04, 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, 0x3d, 0x0a, 0x2b, - 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, 0x5b, 0x8c, 0x94, 0xca, 0x80, 0xbb, - 0x0a, 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, 0x83, 0x04, 0xae, 0x25, 0x15, - 0xd5, 0xf7, 0x69, 0x9d, 0x4a, 0xbe, 0xe5, 0xc2, 0x0b, 0xe6, 0x09, 0xd8, 0x73, - 0x51, 0x10, 0x12, 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, 0xfb, 0x63, 0x4c, - 0xff, 0x26, 0x58, 0xba, 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, 0x5e, 0xce, 0xfb, - 0x30, 0x15, 0xee, 0x3f, 0x03, 0xca, 0x52, 0xa1, 0x77, 0xf2, 0x61, 0xec, 0xdc, - 0x26, 0xbc, 0x08, 0x9d, 0x34, 0xc6, 0x40, 0x48, 0x46, 0xe9, 0xc6, 0x47, 0xfc, - 0xfe, 0x98, 0xcc, 0x6a, 0xcd, 0xbb, 0x46, 0x4f, 0x64, 0x27, 0x8a, 0xd8, 0xce, - 0x9d, 0x1a, 0xe0, 0xd4, 0x15, 0xbc, 0x0c, 0x05, 0x24, 0x5f, 0xdd, 0xaf, 0x4e, - 0xbc, 0x8d, 0xc7, 0x03, 0xa8, 0x5c, 0xb2, 0x70, 0xf7, 0x96, 0xad, 0x2d, 0x93, - 0x7e, 0x2a, 0xc0, 0xd5, 0xe0, 0xa3, 0x48, 0x21, 0x75, 0x80, 0x00, 0xaa, 0x59, - 0xc9, 0xd4, 0x65, 0x24, 0x85, 0x29, 0x4e, 0xe0, 0xab, 0x29, 0x69, 0x6b, 0x21, - 0x43, 0x0f, 0xa5, 0x4d, 0xcf, 0xbf, 0x2b, 0x9c, 0x49, 0xd1, 0x42, 0x06, 0x42, - 0x09, 0xee, 0xee, 0xd4, 0xd4, 0x71, 0xff, 0xc0, 0x17, 0xd4, 0xe2, 0x0a, 0x79, - 0x6b, 0x09, 0x27, 0x80, 0x4c, 0x06, 0x1b, 0x9f, 0x4a, 0x70, 0x91, 0xfe, 0x01, - 0x5a, 0xda, 0x68, 0xfd, 0x84, 0x42, 0xe0, 0x18, 0x25, 0xc8, 0x8d, 0xfe, 0x55, - 0xcf, 0x5d, 0xe3, 0x89, 0x36, 0xf7, 0xce, 0x25, 0x31, 0x1b, 0x90, 0x2b, 0xa9, - 0x7a, 0x3c, 0x12, 0xa9, 0x5c, 0xfa, 0x1c, 0x3a, 0x59, 0x1b, 0x81, 0x8f, 0x60, - 0x83, 0x27, 0x09, 0xd9, 0xe4, 0x83, 0x9e, 0x41, 0x0f, 0xb3, 0x6b, 0x84, 0xf3, - 0xac, 0x4f, 0x07, 0x0f, 0xc3, 0x5e, 0x16, 0x19, 0x78, 0x25, 0x9e, 0x5b, 0x8e, - 0xdc, 0x74, 0x4d, 0x90, 0x91, 0x9a, 0xa7, 0x70, 0xbb, 0x36, 0x21, 0x51, 0x28, - 0xe5, 0x82, 0xb5, 0x96, 0x41, 0xe2, 0x38, 0x52, 0xe9, 0x58, 0xeb, 0x8f, 0xc3, - 0xc0, 0xaa, 0x96, 0x15, 0x2b, 0xa4, 0xf7, 0x7f, 0x13, 0x8d, 0x6a, 0x67, 0x12, - 0xa3, 0xae, 0x32, 0x26, 0x01, 0x58, 0x83, 0xf8, 0x1d, 0xb2, 0x3e, 0x58, 0x3c, - 0x86, 0x9c, 0x4c, 0x71, 0x14, 0x3a, 0x6f, 0xff, 0xd6, 0x5e, 0x8d, 0xfd, 0xc5, - 0x0c, 0x99, 0xa2, 0xf1, 0xf3, 0x14, 0xcd, 0xcc, 0x71, 0x35, 0x9e, 0x23, 0x5f, - 0x1d, 0x7d, 0xc2, 0xb5, 0xf3, 0x8e, 0xf7, 0xb9, 0x70, 0x84, 0x31, 0x63, 0xc0, - 0x3f, 0x9d, 0xd4, 0x0a, 0x80, 0x15, 0xef, 0xdc, 0x87, 0x91, 0x95, 0x6a, 0x3f, - 0x3c, 0xed, 0xd9, 0xea, 0x64, 0xf8, 0xef, 0xa7, 0xa0, 0x81, 0x5a, 0x70, 0x38, - 0x1d, 0x71, 0x46, 0x78, 0x17, 0xbd, 0x04, 0xca, 0x52, 0x9a, 0xed, 0xe0, 0x7f, - 0xf6, 0x0d, 0x17, 0x6a, 0xed, 0x0f, 0x85, 0x5a, 0x2e, 0xae, 0xa8, 0x9e, 0xae, - 0xac, 0xa8, 0x93, 0x58, 0xc0, 0x81, 0x82, 0x6a, 0x08, 0x12, 0xa5, 0xbc, 0xa2, - 0x8b, 0xe1, 0x37, 0x3f, 0x08, 0x6d, 0xbd, 0xba, 0x7e, 0x43, 0xe2, 0x03, 0x21, - 0x2c, 0x9f, 0xed, 0x21, 0x47, 0x4b, 0xa1, 0x9a, 0x05, 0x5f, 0xfc, 0xc1, 0x79, - 0x41, 0x2e, 0x89, 0x3a, 0x74, 0x48, 0x32, 0x29, 0x8c, 0x5f, 0xe2, 0x4c, 0xc6, - 0xb1, 0x86, 0x67, 0xf4, 0x9b, 0x34, 0xdf, 0xb1, 0x23, 0x79, 0x26, 0x74, 0x19, - 0xa9, 0xcb, 0x94, 0x03, 0xd8, 0x16, 0x7d, 0x8d, 0x1e, 0x91, 0xd2, 0x81, 0x1a, - 0x04, 0x3b, 0x29, 0x24, 0x3b, 0x06, 0x9b, 0x37, 0x58, 0x78, 0x47, 0xdc, 0x6f, - 0xcd, 0xdb, 0x18, 0x31, 0xbd, 0x1c, 0xc2, 0x56, 0x7c, 0xa0, 0x33, 0xac, 0x40, - 0xf7, 0x4a, 0xb6, 0x95, 0x5f, 0x68, 0x3b, 0x12, 0xe4, 0xe8, 0x25, 0x4e, 0x4e, - 0xa7, 0x60, 0xd3, 0x8b, 0x3f, 0x46, 0x79, 0x1c, 0x5c, 0x4c, 0xb1, 0x2b, 0xc7, - 0xcc, 0xb0, 0xed, 0x18, 0x65, 0xf2, 0x5d, 0x60, 0x1c, 0x30, 0x3f, 0x81, 0xfb, - 0x1f, 0xa1, 0xdb, 0x48, 0x53, 0x3d, 0x3d, 0x6b, 0x28, 0x8e, 0x4d, 0x9a, 0x4d, - 0xff, 0x8e, 0xc2, 0x1c, 0x96, 0xf5, 0x78, 0x39, 0x97, 0x10, 0xc8, 0x25, 0xfe, - 0x7e, 0x32, 0xf9, 0x3a, 0x8c, 0x07, 0x43, 0xf9, 0xeb, 0xd5, 0x4c, 0xc1, 0x51, - 0xc7, 0x61, 0x03, 0x37, 0xae, 0xbf, 0x7e, 0x9b, 0x91, 0x57, 0x20, 0xa5, 0x43, - 0x51, 0xd4, 0x9a, 0xb8, 0xc2, 0x2f, 0xa3, 0x49, 0x98, 0xdc, 0xf5, 0x83, 0xd4, - 0x38, 0x73, 0x61, 0xef, 0x3f, 0xf8, 0x6f, 0x50, 0xec, 0x53, 0xf4, 0x92, 0x49, - 0xe4, 0xad, 0x34, 0x96, 0x03, 0x06, 0x6f, 0xc9, 0xc6, 0x61, 0xd6, 0x9f, 0x91, - 0x1d, 0xfa, 0x72, 0x41, 0xc8, 0xd5, 0x79, 0x2d, 0x78, 0x33, 0x2e, 0x93, 0xdb, - 0x65, 0x93, 0xe5, 0x93, 0xfd, 0x5d, 0x45, 0x6a, 0xbd, 0xac, 0x79, 0xa7, 0x16, - 0xfa, 0x6e, 0x3f, 0x39, 0x28, 0xa8, 0x4d, 0x19, 0x70, 0x86, 0xec, 0xc2, 0x7e, - 0xac, 0x18, 0x8f, 0xf2, 0xb7, 0x15, 0x21, 0x76, 0x2a, 0xd4, 0x7b, 0xec, 0x08, - 0x99, 0x2d, 0x86, 0x85, 0x0e, 0xb3, 0xea, 0x13, 0xd5, 0x07, 0x08, 0x07, 0xa2, - 0xcb, 0x66, 0x80, 0xa2, 0x49, 0xea, 0x1c, 0x04, 0x20, 0x37, 0x48, 0xda, 0xab, - 0x9b, 0x0d, 0x3b, 0x3c, 0x2e, 0x9d, 0xcf, 0xe7, 0x76, 0x0c, 0x79, 0xdd, 0xa3, - 0xc0, 0x25, 0x9e, 0x7d, 0xa9, 0xcc, 0xfa, 0x5f, 0xb6, 0x47, 0xa5, 0xe2, 0x0f, - 0x3f, 0x3b, 0xc8, 0x66, 0xda, 0x24, 0xea, 0xde, 0x36, 0xb6, 0x83, 0xa2, 0xbd, - 0x71, 0x97, 0xfb, 0x67, 0x27, 0x26, 0xf4, 0x20, 0x08, 0xb4, 0x6a, 0xd7, 0xf8, - 0xab, 0xdb, 0x18, 0x11, 0x7f, 0x32, 0x2c, 0x57, 0xdc, 0x01, 0x7b, 0x0a, 0x37, - 0x1f, 0x48, 0x63, 0x13, 0x5b, 0x4d, 0xb5, 0xa1, 0xb6, 0xe0, 0x11, 0x1e, 0x63, - 0x0e, 0x23, 0x45, 0x9a, 0x74, 0x88, 0x33, 0x99, 0x1c, 0xff, 0x71, 0xa0, 0x5c, - 0x4a, 0xb1, 0x9d, 0xd9, 0x97, 0x71, 0x58, 0x2d, 0x03, 0x81, 0x04, 0xb7, 0xe0, - 0x39, 0xa3, 0x76, 0xf7, 0xac, 0xbb, 0xea, 0xdb, 0x34, 0xf9, 0x45, 0xbe, 0xb9, - 0xd7, 0xca, 0x0e, 0x4e, 0x3d, 0x5c, 0x5e, 0x4e, 0xb1, 0xd8, 0x52, 0x6e, 0xbd, - 0x13, 0xda, 0xcb, 0x1b, 0xa3, 0x57, 0x35, 0xc6, 0xd0, 0x4a, 0x45, 0x55, 0xac, - 0xf4, 0xbf, 0x11, 0x76, 0x26, 0x50, 0x0d, 0x77, 0xb3, 0x81, 0x89, 0xdd, 0x48, - 0x88, 0x04, 0x12, 0x25, 0xac, 0xbe, 0x38, 0x74, 0xa4, 0xc0, 0xf6, 0x07, 0xfe, - 0x67, 0x45, 0xf9, 0x35, 0x5b, 0x3f, 0xa1, 0x88, 0xf1, 0xd6, 0x5c, 0x09, 0xf3, - 0x89, 0xaf, 0x1b, 0x9d, 0x62, 0x32, 0xaa, 0x79, 0x44, 0x79, 0x19, 0xc5, 0x50, - 0xf6, 0xf3, 0x1f, 0xec, 0x35, 0x48, 0x1c, 0xb9, 0x22, 0xde, 0x2d, 0xb5, 0xb4, - 0xda, 0x2f, 0x81, 0x94, 0x86, 0x17, 0x02, 0x8e, 0x32, 0x17, 0x06, 0xa3, 0xa7, - 0x78, 0xc1, 0x93, 0x8c, 0x44, 0x3b, 0xb0, 0x0e, 0x5b, 0x0f, 0xf0, 0x6a, 0xd8, - 0xab, 0x9b, 0x1a, 0xb0, 0xc1, 0x14, 0x77, 0x67, 0x3f, 0x85, 0xdf, 0x95, 0x61, - 0xdb, 0xea, 0x45, 0xd5, 0xf9, 0x78, 0x1e, 0xbe, 0x31, 0x7a, 0x07, 0x10, 0xae, - 0x54, 0x61, 0xe3, 0x4f, 0xe6, 0xf1, 0xb1, 0xaa, 0x9b, 0x4e, 0x67, 0xb1, 0x49, - 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, 0xe3, 0x81, 0x93, 0xbc, 0x7b, 0xdc, 0x8b, - 0xa3, 0xe4, 0xe3, 0xd1, 0xd9, 0x33, 0xbf, 0xb5, 0x80, 0xf5, 0xb3, 0xe8, 0x7a, - 0x2a, 0x06, 0x51, 0x70, 0x51, 0x41, 0x0f, 0xe1, 0xb4, 0xff, 0x1e, 0xa0, 0xad, - 0xe8, 0x24, 0xf3, 0x38, 0x51, 0x54, 0x56, 0xa5, 0x7c, 0x7a, 0x91, 0x6a, 0x74, - 0x38, 0x8e, 0xe8, 0xf1, 0x28, 0x1f, 0x9a, 0xde, 0x0a, 0xe2, 0xa2, 0x61, 0x3a, - 0x06, 0x12, 0xc4, 0x69, 0xdf, 0x79, 0x2b, 0x8d, 0xf4, 0xca, 0xe4, 0xfc, 0x25, - 0xc1, 0xca, 0xdb, 0xa9, 0x5a, 0x80, 0x7c, 0xe6, 0x1e, 0x5a, 0x53, 0x03, 0xfa, - 0xaf, 0x9e, 0x14, 0x65, 0x39, 0x96, 0xb5, 0xa8, 0xad, 0xc3, 0x4f, 0xd4, 0x75, - 0xef, 0x14, 0x99, 0x09, 0x4b, 0xab, 0xaf, 0x1f, 0x3f, 0x07, 0xda, 0x9a, 0x39, - 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, 0x98, 0x7a, 0xdf, 0xe9, 0x56, 0x48, - 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, 0x88, 0x41, 0x58, 0x30, 0x99, 0xaf, - 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, 0x34, 0x7e, 0x40, 0xb6, 0xfd, 0x8c, - 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, 0x9a, 0x02, 0x19, 0xbc, 0x3e, 0x4e, - 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, 0x16, 0x86, 0x08, 0x68, 0x76, 0xbe, - 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, 0x8f, 0x4f, 0xab, 0x3d, 0x28, 0xc0, - 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, 0xf8, 0x89, 0x46, 0xfb, 0x40, 0xcf, - 0xa5, 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, 0x3c, 0x83, 0x47, 0xec, 0xee, 0x93, - 0xd4, 0x6d, 0x14, 0x0b, 0xb5, 0xf6, 0x95, 0x31, 0xd6, 0x66, 0x54, 0x8b, 0x10, - 0x9c, 0xe7, 0x64, 0xbe, 0xad, 0x7c, 0x87, 0xbd, 0x4c, 0x87, 0x64, 0x94, 0xde, - 0x82, 0xdb, 0x6e, 0x50, 0x73, 0xa6, 0xc9, 0x4f, 0x7c, 0x09, 0x9a, 0x40, 0xd7, - 0xa3, 0x1c, 0x4a, 0x04, 0xb6, 0x9c, 0x9f, 0xcc, 0xf3, 0xc7, 0xdd, 0x56, 0xf5, - 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, 0xf7, 0x95, 0x39, 0x81, 0xd5, 0x5a, 0x96, - 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, 0x42, 0xe5, 0xba, 0xfe, 0xc8, 0x84, - 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, 0xc4, 0x60, 0xf9, 0x8f, 0xeb, 0x82, - 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, 0x76, 0x79, 0x82, 0x36, 0xc5, 0xca, - 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, 0x4d, 0x87, 0x13, 0xe5, 0x6c, 0x77, - 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, 0x3a, 0x88, 0x54, 0xbc, 0x6e, 0x65, - 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, 0x0b, 0x73, 0xba, 0x24, 0x1b, 0xf7, - 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, 0x96, 0x87, 0xac, 0x52, 0x69, 0xfd, - 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, 0x26, 0x76, 0x85, 0x99, 0x8a, 0x3f, - 0x7d, 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, 0x46, 0x49, 0x5d, 0x24, 0xc4, 0x98, - 0x63, 0x5e, 0xf9, 0x7a, 0xc6, 0x6a, 0x40, 0x08, 0x94, 0xc0, 0x9f, 0x73, 0x48, - 0x8e, 0xb7, 0xcf, 0x33, 0xf6, 0xda, 0xd1, 0x66, 0x6a, 0x05, 0xf9, 0x1a, 0xd7, - 0x75, 0x79, 0x65, 0xc2, 0x99, 0x36, 0xe7, 0xfa, 0x48, 0xd7, 0x7e, 0x89, 0xee, - 0x09, 0x62, 0xf5, 0x8c, 0x05, 0x1d, 0x11, 0xd0, 0x55, 0xfc, 0xe2, 0x04, 0xa5, - 0x62, 0xde, 0x68, 0x08, 0x8a, 0x1b, 0x26, 0x48, 0xb8, 0x17, 0x4c, 0xbc, 0xfc, - 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x11, 0x5a, 0xfd, 0xe1, 0x78, 0x3f, 0x5c, 0xdb, - 0x26, 0xf7, 0xbf, 0xdf, 0x87, 0xb2, 0x1b, 0x1c, 0x70, 0xdc, 0x56, 0xbf, 0x1c, - 0x82, 0x85, 0x7a, 0x40, 0xca, 0x2a, 0xa2, 0x36, 0xec, 0x56, 0x69, 0x12, 0xd8, - 0x64, 0x93, 0x7a, 0xa0, 0x7d, 0xdf, 0xfc, 0xd3, 0x77, 0x39, 0x5c, 0xba, 0x61, - 0x6d, 0x63, 0xc0, 0xb6, 0x9c, 0x01, 0xfc, 0xc4, 0x53, 0x91, 0xfd, 0x5b, 0x87, - 0x63, 0xfb, 0x96, 0xd7, 0xca, 0x33, 0x3a, 0x12, 0x79, 0x11, 0xb4, 0xed, 0x95, - 0xb0, 0x0c, 0x24, 0xcb, 0x57, 0x8f, 0xfa, 0xb9, 0xf1, 0x11, 0x60, 0x30, 0x04, - 0x86, 0x08, 0xcc, 0x99, 0x0e, 0x74, 0xeb, 0xad, 0x5c, 0x34, 0x8a, 0xd9, 0xa8, - 0x85, 0xe9, 0x07, 0xe0, 0xbe, 0x5a, 0x78, 0x83, 0xc8, 0x84, 0x89, 0xcb, 0x41, - 0x43, 0x2d, 0xac, 0x86, 0x20, 0x23, 0xd4, 0x67, 0x89, 0xeb, 0x7d, 0x98, 0x9a, - 0xf7, 0x79, 0xe5, 0xb8, 0xd2, 0x83, 0x05, 0xd7, 0xe2, 0x12, 0x4d, 0x3b, 0x55, - 0x77, 0x0f, 0x8c, 0x05, 0x0a, 0xb2, 0x5e, 0x1a, 0x46, 0x02, 0xeb, 0x58, 0xcf, - 0x12, 0x34, 0xea, 0xe1, 0x5f, 0x33, 0xbb, 0xde, 0xce, 0x27, 0xa6, 0xb1, 0x2d, - 0xb3, 0xe4, 0xdb, 0xfd, 0x3a, 0x2b, 0xfc, 0xc9, 0xee, 0x6e, 0xd0, 0x16, 0xc0, - 0xf6, 0x65, 0xbe, 0x81, 0x33, 0xb7, 0xdc, 0x1d, 0x86, 0x04, 0x4d, 0xb0, 0xf9, - 0xdb, 0x40, 0xfb, 0x0e, 0x9f, 0x8b, 0xc2, 0xe4, 0xdb, 0x53, 0x82, 0xa8, 0xb4, - 0xf8, 0x15, 0xb4, 0xe8, 0x43, 0x4a, 0xd0, 0xdf, 0xbc, 0x51, 0xa5, 0xe9, 0xb1, - 0x45, 0xe1, 0x59, 0x6c, 0xbf, 0x46, 0x70, 0xb7, 0xe0, 0x5d, 0xfd, 0xaf, 0xbb, - 0x0c, 0xf3, 0xdd, 0xee, 0x28, 0xd7, 0x6a, 0x82, 0x42, 0x8e, 0x8a, 0xba, 0x43, - 0x64, 0xe8, 0x4b, 0xac, 0x37, 0x92, 0x98, 0xdf, 0x29, 0x32, 0xe6, 0x9b, 0xb5, - 0xd0, 0x45, 0x51, 0x6e, 0xfc, 0x33, 0xae, 0x6c, 0xc3, 0x94, 0x7c, 0xeb, 0x09, - 0xed, 0x37, 0x16, 0x67, 0x21, 0x2a, 0x83, 0x1b, 0x54, 0x85, 0xea, 0xfc, 0xe8, - 0x48, 0x81, 0x88, 0xea, 0x4e, 0x27, 0xd0, 0xcd, 0xf7, 0xdd, 0xd3, 0x48, 0xab, - 0xff, 0x77, 0x7f, 0x4a, 0x13, 0xbb, 0xc7, 0x16, 0xb6, 0xa5, 0x94, 0x4e, 0xe7, - 0x27, 0x96, 0x56, 0x90, 0xe2, 0x09, 0xb4, 0x9e, 0xb9, 0x62, 0xc0, 0x39, 0x97, - 0x5f, 0x93, 0x9e, 0xd5, 0xc6, 0xe4, 0xc4, 0x00, 0xd8, 0x87, 0x75, 0x94, 0x33, - 0xd3, 0xad, 0x71, 0x6d, 0xa0, 0xcb, 0x44, 0x61, 0x13, 0xc7, 0x72, 0x7a, 0x64, - 0xb5, 0x8c, 0x3f, 0x8a, 0x0f, 0x81, 0x18, 0x9f, 0x98, 0x00, 0x52, 0x33, 0xa8, - 0x13, 0x66, 0xae, 0xe7, 0x3c, 0xec, 0x85, 0x22, 0x8e, 0xbc, 0xfd, 0x5e, 0xe3, - 0xc3, 0xfb, 0x44, 0xdb, 0x76, 0xba, 0x24, 0x3f, 0x28, 0x42, 0xb7, 0xb5, 0xfc, - 0x74, 0x6a, 0xe5, 0x1b, 0x0b, 0xc4, 0xbd, 0x4f, 0xc9, 0xfd, 0x83, 0x35, 0x65, - 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, 0xf6, 0x99, 0x03, 0x18, 0xad, 0x8c, 0x7d, - 0x94, 0x37, 0xe2, 0x0e, 0x2a, 0x1f, 0x20, 0xe8, 0x18, 0xf9, 0x05, 0x7c, 0x5a, - 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, 0x49, 0x45, 0xcd, 0x42, 0x4c, 0x28, 0xa5, - 0xfa, 0x38, 0x5d, 0xad, 0xfe, 0x49, 0x07, 0xb2, 0x74, 0xd8, 0x42, 0x70, 0x7d, - 0xb3, 0x69, 0x7a, 0x5a, 0xe6, 0xc8, 0xf5, 0x42, 0xe5, 0xec, 0xc0, 0x7f, 0xe4, - 0x73, 0x50, 0xd1, 0x01, 0x46, 0x70, 0x21, 0x2e, 0xfe, 0x81, 0xfb, 0x7c, 0x73, - 0xe8, 0x45, 0x0d, 0xf8, 0x14, 0xef, 0x62, 0x32, 0xf7, 0x49, 0x0f, 0x63, 0xcc, - 0xf0, 0x74, 0x80, 0xf8, 0x84, 0xa6, 0x6e, 0xaf, 0xfc, 0x28, 0xfe, 0xa4, 0x48, - 0xd7, 0xb4, 0x01, 0xcd, 0xae, 0x10, 0xe7, 0xc0, 0xc7, 0xf9, 0xa7, 0xb1, 0x53, - 0x31, 0x96, 0x9f, 0xc8, 0xcb, 0x36, 0x39, 0x67, 0x73, 0xde, 0x19, 0x19, 0x31, - 0xc7, 0x50, 0xf6, 0xce, 0x5c, 0xaa, 0xf2, 0x97, 0x68, 0xeb, 0xb2, 0x7d, 0xac, - 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, 0x77, 0x2b, 0xf8, 0x7a, 0xe1, 0x0a, - 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x3c, 0xfc, 0x31, 0x59, 0x49, 0x43, - 0x68, 0xc5, 0xab, 0x8c, 0xad, 0xb7, 0xf6, 0x71, 0xe9, 0x62, 0x6b, 0xd2, 0x63, - 0xe3, 0x11, 0x81, 0xa6, 0x04, 0xb5, 0x06, 0xa0, 0x3b, 0x43, 0x9a, 0x7f, 0xfe, - 0x43, 0x55, 0x89, 0x24, 0x77, 0xe2, 0xbd, 0xf3, 0x38, 0xc6, 0x2c, 0x39, 0x22, - 0xf7, 0xd3, 0xc9, 0xa5, 0x6c, 0x71, 0x03, 0xd9, 0x11, 0x94, 0x8a, 0x84, 0xb5, - 0xae, 0x2d, 0xbb, 0x16, 0xa3, 0x76, 0x1a, 0xdd, 0x05, 0x3a, 0x0f, 0x96, 0x7e, - 0x6b, 0x5b, 0xc9, 0x42, 0x11, 0xb6, 0x54, 0x71, 0x53, 0x26, 0x7c, 0x6e, 0xe1, - 0xca, 0xd0, 0xd9, 0x74, 0xa7, 0x10, 0x88, 0x58, 0x37, 0x35, 0xe4, 0xf6, 0x3d, - 0x33, 0x15, 0x6d, 0xad, 0xd5, 0x4c, 0x2f, 0xaf, 0x89, 0x11, 0x4a, 0x12, 0x7b, - 0x97, 0xb9, 0x4c, 0xc2, 0xa2, 0x2e, 0xf3, 0x03, 0xf4, 0x59, 0xd0, 0x4f, 0xc0, - 0xb5, 0x3a, 0xce, 0x59, 0x18, 0xd4, 0x7f, 0xf3, 0x3a, 0x55, 0x8b, 0xd7, 0x1a, - 0x75, 0xf3, 0x55, 0xfb, 0xd0, 0x6b, 0xbc, 0xcf, 0x4e, 0x02, 0xc3, 0xc0, 0xa4, - 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, 0x1d, 0x63, 0xa6, 0x4c, 0xb2, 0xd3, 0x23, - 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, 0xb4, 0x68, 0x21, 0x42, 0xc8, 0xb2, - 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, 0xe4, 0xb5, 0xe3, 0x60, 0x34, 0x51, - 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, 0x63, 0xfa, 0x6a, 0xbb, 0x78, 0xd2, - 0x1c, 0x19, 0x3c, 0xbe, 0x65, 0xb6, 0x95, 0xfe, 0x67, 0x42, 0x3c, 0x1e, 0x2d, - 0x31, 0x2e, 0x27, 0x76, 0xfa, 0x24, 0xec, 0xe8, 0x46, 0x83, 0xe7, 0x48, 0x76, - 0xc5, 0x5e, 0xa0, 0x36, 0x9e, 0x4e, 0xa0, 0xe8, 0x64, 0x94, 0xe0, 0x0d, 0xde, - 0x23, 0x6a, 0x16, 0x89, 0x73, 0x1f, 0x0a, 0x5d, 0x82, 0x03, 0xaf, 0xde, 0x5c, - 0x42, 0x36, 0x40, 0xb8, 0x1e, 0x4f, 0x63, 0x1c, 0x98, 0x1c, 0x03, 0x83, 0x9f, - 0x4b, 0x44, 0xc9, 0xe8, 0x03, 0x00, 0x23, 0xf8, 0xb9, 0xd8, 0x17, 0x85, 0x60, - 0xda, 0xf9, 0x75, 0x11, 0x19, 0x55, 0xa2, 0xbc, 0xa3, 0x42, 0x3e, 0xee, 0xfc, - 0x52, 0x7b, 0xe3, 0xa8, 0x54, 0x3e, 0xb9, 0x0a, 0x5e, 0xc0, 0x2f, 0x35, 0xc7, - 0xc6, 0x4b, 0x7d, 0xd5, 0x9a, 0x72, 0xda, 0x00, 0x74, 0x63, 0x4e, 0x01, 0xd2, - 0xab, 0xf3, 0x63, 0x7a, 0xdd, 0x77, 0xc7, 0x35, 0x0f, 0x12, 0xb0, 0x11, 0xb2, - 0x94, 0x16, 0x8e, 0xc7, 0x55, 0x76, 0xe4, 0x7d, 0x16, 0x9e, 0x39, 0x38, 0xbf, - 0x6a, 0xe2, 0xaa, 0x8f, 0xf7, 0xcf, 0xba, 0x7c, 0xac, 0xb1, 0xf9, 0x2b, 0x6e, - 0x4c, 0x24, 0x97, 0xbf, 0xfa, 0x9f, 0x17, 0xca, 0xd2, 0x42, 0xfa, 0x9c, 0x31, - 0x79, 0xc1, 0xa3, 0xaa, 0x81, 0xf7, 0x36, 0x16, 0x49, 0x57, 0x2c, 0x71, 0x5c, - 0x25, 0xa1, 0xf6, 0xcd, 0x5a, 0xce, 0x82, 0xc0, 0x0a, 0xb2, 0x34, 0x2b, 0x9c, - 0x3c, 0xb4, 0xff, 0xfd, 0xda, 0x16, 0x0c, 0xa5, 0xab, 0x9e, 0x9b, 0xaf, 0x21, - 0x39, 0xef, 0x9a, 0xfb, 0xe1, 0xb1, 0xf3, 0x09, 0x46, 0x2a, 0xfc, 0xe4, 0x62, - 0xa7, 0x9b, 0xb9, 0x69, 0x8e, 0x22, 0xc9, 0x57, 0xc5, 0x90, 0xa7, 0x53, 0xa7, - 0x6b, 0x87, 0xe0, 0x09, 0x12, 0x1e, 0x06, 0xf6, 0xa1, 0xbf, 0x62, 0xa0, 0x8b, - 0xf4, 0x35, 0xd9, 0x2e, 0x2f, 0xff, 0xe8, 0x6e, 0x2a, 0x9c, 0xbb, 0xa9, 0x13, - 0x3a, 0x68, 0xe4, 0xae, 0xbf, 0x33, 0xc3, 0x84, 0x36, 0xf2, 0x54, 0x5f, 0xc2, - 0xd5, 0x28, 0x32, 0xd1, 0x65, 0xaf, 0x41, 0x5b, 0x24, 0x4a, 0xdc, 0x5f, 0x57, - 0x37, 0x7d, 0xee, 0xdf, 0x46, 0x0a, 0xa3, 0xbe, 0xb4, 0x34, 0x19, 0xc6, 0xb0, - 0x82, 0xe8, 0x35, 0xce, 0xe2, 0xf1, 0x6f, 0x2f, 0x87, 0x67, 0xf0, 0x3d, 0x9f, - 0x42, 0xa8, 0x4a, 0x76, 0xcb, 0x68, 0x67, 0xb2, 0xbc, 0x75, 0xba, 0xee, 0xcc, - 0xaf, 0xe6, 0x15, 0x19, 0xcf, 0xce, 0xac, 0x55, 0x27, 0x96, 0x1b, 0x32, 0x4d, - 0xce, 0x09, 0x33, 0x5a, 0x58, 0x53, 0xa6, 0xb4, 0xda, 0x3e, 0x47, 0x1f, 0xc1, - 0xfb, 0x19, 0x6f, 0x76, 0xd9, 0xb8, 0x79, 0xc7, 0x20, 0x08, 0x62, 0xea, 0xd1, - 0x8d, 0xea, 0x1f, 0x3e, 0xc9, 0x03, 0x7f, 0x37, 0xb6, 0xea, 0x28, 0x91, 0x66, - 0x51, 0x0b, 0x47, 0x5b, 0x20, 0x04, 0x4d, 0x45, 0x2e, 0x0f, 0x6e, 0xc3, 0xab, - 0x47, 0x16, 0x15, 0x07, 0xd5, 0x3a, 0x2d, 0xc6, 0x09, 0x49, 0xf1, 0xe4, 0x50, - 0xc3, 0xea, 0xda, 0xef, 0x88, 0x6e, 0x6b, 0x82, 0x7c, 0x5b, 0xb5, 0xef, 0x11, - 0xf4, 0x02, 0x8a, 0x70, 0x4f, 0xc5, 0xa9, 0x38, 0x2c, 0x6b, 0x03, 0xe7, 0xd8, - 0x08, 0x1e, 0x07, 0x98, 0x92, 0x86, 0xa0, 0xd9, 0xce, 0x56, 0x1f, 0xaa, 0x1b, - 0x6e, 0x96, 0x23, 0xd7, 0xab, 0x71, 0x00, 0x7f, 0xd2, 0x77, 0xb9, 0x86, 0xa0, - 0x48, 0x83, 0x46, 0x02, 0xea, 0xf8, 0x78, 0x0f, 0x06, 0x75, 0xba, 0xae, 0x68, - 0x41, 0x5d, 0x3a, 0xf0, 0x10, 0x19, 0xb5, 0xea, 0x48, 0x0d, 0xce, 0x93, 0x62, - 0xec, 0x8d, 0x5d, 0xf3, 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, 0x8a, 0x8d, 0xf7, - 0x3c, 0x54, 0x08, 0x70, 0xa8, 0x39, 0xbb, 0x03, 0x91, 0x0a, 0x49, 0x17, 0x70, - 0xe1, 0xc8, 0x4b, 0x22, 0x3e, 0xe9, 0x16, 0x52, 0x70, 0xc4, 0xcc, 0xf6, 0xfc, - 0x70, 0x75, 0xc3, 0x7e, 0x6f, 0xbb, 0x14, 0x38, 0x15, 0x07, 0xfa, 0x18, 0xf1, - 0x39, 0x53, 0x33, 0x6a, 0xb2, 0xbe, 0xdc, 0x60, 0x0c, 0x61, 0x5b, 0xd4, 0x99, - 0x27, 0xe9, 0xd7, 0xf4, 0x88, 0x4e, 0x6e, 0xd3, 0xfd, 0x5e, 0x4b, 0x7c, 0x38, + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x08, + 0xff, 0xea, 0x77, 0x5a, 0xcd, 0xaf, 0x1b, 0x00, 0x00, 0x00, 0x02, 0x0b, 0xf8, + 0xbd, 0xbf, 0x01, 0x67, 0x34, 0x0d, 0x62, 0xdb, 0xe6, 0x47, 0x6c, 0xf7, 0x35, + 0x82, 0x1c, 0x9a, 0xbc, 0x73, 0xa2, 0x3c, 0x14, 0x4b, 0x38, 0x51, 0x7a, 0x38, + 0xf8, 0xdf, 0x3d, 0xaf, 0xd3, 0x91, 0xaf, 0x04, 0x9c, 0x39, 0xe2, 0x6d, 0x14, + 0xfb, 0xc4, 0x06, 0x8f, 0xc0, 0x58, 0x23, 0x68, 0xa5, 0x71, 0xee, 0x38, 0xe5, + 0x48, 0x79, 0x58, 0x9f, 0xe5, 0xf2, 0x44, 0x98, 0x2b, 0x11, 0xbc, 0x79, 0x78, + 0x06, 0x6e, 0x5d, 0xeb, 0x90, 0xe2, 0xc9, 0x60, 0x04, 0xa1, 0xdd, 0xbc, 0x5d, + 0x7d, 0x1a, 0x32, 0x76, 0x7e, 0x59, 0xc4, 0x62, 0x9c, 0x22, 0x49, 0x1c, 0x15, + 0x57, 0x7b, 0x88, 0xee, 0xa2, 0x1c, 0x8b, 0x09, 0x57, 0x02, 0x7c, 0x5d, 0x00, + 0xe5, 0x0a, 0x43, 0x88, 0xc7, 0xaf, 0x2b, 0xd6, 0x43, 0xcb, 0x5e, 0xae, 0x49, + 0x27, 0x4d, 0x12, 0x30, 0xa4, 0xcd, 0x49, 0x23, 0x7a, 0xe3, 0x7b, 0x38, 0x10, + 0xc2, 0xc3, 0x95, 0x8a, 0x7d, 0xee, 0x02, 0x34, 0x30, 0x1b, 0x89, 0xa2, 0xdf, + 0x2a, 0x78, 0xef, 0x0b, 0xfb, 0x4b, 0xf6, 0xb3, 0x87, 0xdf, 0x2c, 0x6c, 0x86, + 0xe6, 0x1c, 0xd1, 0x0c, 0xa1, 0x1f, 0x81, 0x13, 0x01, 0x26, 0x07, 0xf1, 0x5b, + 0x28, 0x56, 0x24, 0x0f, 0xdc, 0x52, 0x06, 0x5a, 0x10, 0x28, 0xc8, 0xa2, 0xdd, + 0xfd, 0xd1, 0x5c, 0xf5, 0x26, 0x5f, 0x87, 0x38, 0x8a, 0xb9, 0xbf, 0x21, 0xc9, + 0xa7, 0x8c, 0x59, 0x03, 0x8a, 0x98, 0xab, 0x64, 0xfd, 0x67, 0x10, 0x77, 0xd4, + 0x72, 0xc2, 0x09, 0xdd, 0x72, 0x9b, 0xd7, 0xf8, 0x48, 0x09, 0x45, 0xfb, 0xa7, + 0x52, 0x09, 0x8a, 0x94, 0xcc, 0xb2, 0x4c, 0xf3, 0xbc, 0x09, 0x2d, 0x42, 0x36, + 0x46, 0x11, 0xa2, 0x93, 0xaf, 0xf3, 0xc5, 0x79, 0x37, 0x2c, 0x12, 0xe1, 0x50, + 0x90, 0xaa, 0x27, 0x23, 0x20, 0x57, 0xf2, 0xed, 0xde, 0x4e, 0x1d, 0xb2, 0x92, + 0xf7, 0xb1, 0x86, 0x47, 0x22, 0x67, 0x35, 0x17, 0x6d, 0x90, 0xf1, 0x26, 0x5b, + 0x37, 0x98, 0xcc, 0xab, 0xac, 0x0b, 0x8d, 0x79, 0xb1, 0x77, 0x20, 0xb2, 0xba, + 0x71, 0xd7, 0x85, 0x0c, 0xc2, 0xa0, 0x87, 0x2b, 0xf0, 0xf4, 0xb8, 0x14, 0x36, + 0x78, 0x59, 0xf8, 0x99, 0x48, 0xf0, 0xa1, 0xa3, 0x83, 0x60, 0x4b, 0x9e, 0xf0, + 0x7e, 0xa9, 0x3d, 0xbb, 0x98, 0x71, 0xc0, 0x09, 0xaa, 0x6a, 0x31, 0xd8, 0xea, + 0xf1, 0x43, 0x0b, 0x7b, 0xc0, 0xac, 0x26, 0x4e, 0x2f, 0x97, 0x6a, 0xd3, 0x97, + 0xf2, 0x7f, 0x48, 0x37, 0x8f, 0x8a, 0x4e, 0xd9, 0x02, 0xc6, 0x6e, 0x49, 0x18, + 0xfa, 0xee, 0x8d, 0xc0, 0x06, 0x72, 0x46, 0x96, 0x0d, 0xb1, 0xf8, 0xcd, 0x07, + 0xbf, 0x90, 0xd7, 0x53, 0x7c, 0xc2, 0x7b, 0xbb, 0x8c, 0x9d, 0x5b, 0x29, 0x62, + 0xc4, 0x7e, 0xd1, 0x82, 0xa2, 0xfc, 0xe0, 0x5f, 0x8e, 0x03, 0xc4, 0xe2, 0x5e, + 0x49, 0x6d, 0xd5, 0x7d, 0x6a, 0xb3, 0x45, 0x8f, 0xac, 0xbd, 0x91, 0xea, 0x22, + 0x72, 0xff, 0xda, 0x47, 0xb0, 0x73, 0x59, 0x5e, 0x78, 0xdd, 0x84, 0xb7, 0x1f, + 0xf8, 0x8b, 0x74, 0x21, 0x02, 0x88, 0xf0, 0xea, 0xf8, 0xe7, 0x1a, 0xeb, 0xa4, + 0x4c, 0x5e, 0xc3, 0x82, 0xe3, 0x59, 0x33, 0xe1, 0x7b, 0xa7, 0xef, 0xd6, 0x64, + 0x90, 0xf6, 0x72, 0x03, 0x2d, 0x4e, 0xbc, 0xf7, 0xcd, 0x55, 0x7a, 0xe0, 0xdb, + 0xb7, 0x25, 0x00, 0x4e, 0xcb, 0x05, 0x7a, 0x5a, 0x2b, 0x15, 0x7a, 0x1a, 0xbf, + 0xb9, 0x83, 0x87, 0x08, 0xba, 0x28, 0xe7, 0xea, 0xa2, 0x12, 0xa9, 0x04, 0x22, + 0xc1, 0x27, 0x17, 0x53, 0xb9, 0xf3, 0x0f, 0x8f, 0xf8, 0xe5, 0x33, 0xa9, 0x93, + 0xf0, 0x69, 0xbd, 0x82, 0x2b, 0xf7, 0x24, 0xd1, 0xb7, 0x38, 0xc7, 0x3d, 0x4b, + 0x46, 0xe9, 0x90, 0x28, 0xde, 0x1e, 0xaa, 0xdf, 0x9a, 0xb0, 0x89, 0xdd, 0x46, + 0x6c, 0xa1, 0x85, 0xa8, 0x0a, 0xfc, 0xfd, 0x44, 0x68, 0x5c, 0xf8, 0xec, 0xe5, + 0x58, 0xd7, 0xbf, 0xd0, 0x17, 0x39, 0x20, 0xd7, 0x17, 0x51, 0x30, 0xf0, 0xe4, + 0xd0, 0x93, 0x74, 0x41, 0xbc, 0xe9, 0x8c, 0xfa, 0x5b, 0x33, 0x3b, 0x66, 0x19, + 0x0f, 0x2b, 0x44, 0x71, 0x38, 0xe8, 0xc2, 0x6d, 0x84, 0x12, 0xca, 0xc8, 0x20, + 0x86, 0xd6, 0x1b, 0x5d, 0x2c, 0x8c, 0xf0, 0xbb, 0xeb, 0xac, 0x5b, 0x89, 0xbf, + 0xe8, 0x2b, 0x58, 0x91, 0x76, 0x64, 0xba, 0xb9, 0x1c, 0xe2, 0xec, 0xe2, 0x90, + 0xb2, 0x7b, 0x60, 0x52, 0xd4, 0xbf, 0x99, 0x1a, 0x33, 0xf4, 0x58, 0x1a, 0x63, + 0x36, 0x25, 0x78, 0x79, 0x58, 0x89, 0x7f, 0xca, 0x4b, 0x98, 0xb7, 0xe7, 0x27, + 0x7c, 0x5e, 0x6a, 0x1d, 0x88, 0x59, 0x48, 0xc9, 0xd4, 0x84, 0xdd, 0x0c, 0xef, + 0xef, 0x85, 0x4e, 0x81, 0x76, 0xc3, 0x97, 0xdc, 0xfa, 0x77, 0x2e, 0x71, 0x14, + 0x72, 0xe7, 0x90, 0xba, 0x8d, 0x39, 0x35, 0xd5, 0x7c, 0xa3, 0x13, 0x49, 0x37, + 0x9e, 0x62, 0x83, 0xa6, 0xaa, 0x8f, 0xc9, 0x91, 0xef, 0xc7, 0xd3, 0xb7, 0xef, + 0x66, 0xb9, 0x2f, 0xe0, 0x9d, 0x35, 0x16, 0x27, 0x0a, 0xe1, 0x9a, 0x99, 0x92, + 0x16, 0xee, 0xae, 0x16, 0x21, 0x44, 0xac, 0xea, 0x56, 0x0d, 0x17, 0x72, 0x05, + 0xf2, 0x6c, 0x97, 0x03, 0xb5, 0x4e, 0x80, 0xaf, 0x1a, 0x87, 0x94, 0xd6, 0xd3, + 0xf1, 0xc5, 0xee, 0xad, 0x22, 0x0b, 0x11, 0x9f, 0x06, 0xb2, 0x00, 0x98, 0x6c, + 0x91, 0x21, 0x32, 0xcb, 0x08, 0xa9, 0x8e, 0x0f, 0xee, 0x35, 0xe7, 0xf7, 0x7f, + 0xc8, 0x52, 0x1d, 0x38, 0x77, 0x3e, 0x61, 0x4e, 0xee, 0xb8, 0xa3, 0xea, 0xd8, + 0xe9, 0x23, 0x9b, 0xec, 0x57, 0x0b, 0x9d, 0xdc, 0x0c, 0x21, 0x49, 0x69, 0xec, + 0x76, 0x71, 0x1d, 0x3f, 0x62, 0x96, 0x98, 0xda, 0xbb, 0xac, 0x9c, 0xe3, 0x2e, + 0x73, 0x73, 0x65, 0x95, 0x09, 0x24, 0x7b, 0x22, 0x6b, 0x04, 0xa7, 0xea, 0xe8, + 0x5f, 0x1c, 0x15, 0xcc, 0x19, 0x9e, 0xcd, 0xcb, 0xae, 0xae, 0xeb, 0x01, 0xac, + 0xfe, 0xff, 0x87, 0x84, 0x66, 0xf5, 0xee, 0x71, 0x19, 0x1c, 0x2a, 0x71, 0xec, + 0xb2, 0xbd, 0xa0, 0xb7, 0xa6, 0x43, 0xb3, 0x15, 0xe8, 0x14, 0xd0, 0x2d, 0x37, + 0x38, 0xe7, 0x3d, 0xd7, 0xbe, 0xf6, 0x5d, 0x40, 0x21, 0xc3, 0xf6, 0x95, 0xb0, + 0x6c, 0x5b, 0xaf, 0x49, 0x39, 0xfb, 0xa3, 0x6f, 0xe4, 0xcf, 0xd9, 0x7b, 0x4b, + 0xdd, 0x0c, 0x4d, 0x2c, 0x93, 0xc5, 0x72, 0x8b, 0x12, 0x87, 0xfd, 0x25, 0x41, + 0x72, 0x2c, 0x69, 0x9b, 0xc1, 0xa0, 0x05, 0x83, 0xdb, 0xc9, 0x48, 0xd5, 0x32, + 0x4a, 0xc5, 0xbd, 0x7a, 0x68, 0x09, 0x64, 0x67, 0x3e, 0xdf, 0x2c, 0x6d, 0xeb, + 0xb1, 0xc8, 0xe1, 0xd0, 0x24, 0x16, 0xe6, 0xbd, 0xb2, 0xa7, 0x68, 0x1b, 0xf4, + 0x29, 0x92, 0x25, 0xc2, 0x1b, 0x5d, 0xb6, 0xa8, 0x45, 0xad, 0x10, 0x4d, 0x34, + 0x29, 0xcd, 0xc5, 0x9e, 0x3b, 0xca, 0xcf, 0x6d, 0xbc, 0x88, 0xaf, 0x0f, 0x67, + 0xdc, 0xbd, 0xf3, 0xa0, 0x72, 0x3e, 0x4d, 0x4b, 0xce, 0x32, 0x85, 0x1b, 0xb5, + 0x19, 0x7a, 0x8f, 0x43, 0x30, 0xb2, 0x72, 0x27, 0xf0, 0xb7, 0x71, 0xd0, 0xaf, + 0x17, 0x5e, 0x9c, 0x3f, 0x6e, 0x1f, 0x68, 0x46, 0x2e, 0xe7, 0xfe, 0x17, 0x97, + 0xd9, 0x28, 0x40, 0x6f, 0x92, 0x38, 0xa3, 0xf3, 0xfd, 0x83, 0x6a, 0x27, 0x56, + 0xdd, 0x0a, 0x11, 0xe1, 0xab, 0x94, 0x9d, 0x5e, 0x30, 0x89, 0x4f, 0x56, 0x29, + 0x95, 0x25, 0xe6, 0x5d, 0x95, 0x0f, 0x2e, 0xb5, 0x0b, 0x3a, 0x8e, 0xa7, 0xac, + 0xad, 0xbc, 0x3c, 0x77, 0xeb, 0x53, 0xe7, 0xde, 0x9b, 0xa8, 0x2f, 0x7d, 0xd5, + 0xf6, 0x13, 0xcd, 0xa6, 0x29, 0xfc, 0xd2, 0xf6, 0x36, 0x6b, 0x2e, 0x1e, 0xc2, + 0x40, 0xd4, 0x82, 0xc3, 0xa6, 0xf9, 0xd9, 0x8d, 0xab, 0x1c, 0x86, 0x4c, 0x00, + 0xb8, 0xfd, 0x36, 0x46, 0xf0, 0xd5, 0x96, 0xfe, 0x18, 0x0f, 0x70, 0xb1, 0x94, + 0x84, 0x25, 0x63, 0xe9, 0xf3, 0xf4, 0xdc, 0xf5, 0x2b, 0x89, 0x3a, 0x70, 0x9e, + 0x1d, 0xd4, 0xa7, 0xca, 0x1c, 0x49, 0xec, 0x81, 0x4e, 0x8f, 0xe6, 0xe0, 0xe0, + 0xde, 0x54, 0x6a, 0x4f, 0xbe, 0x7d, 0x25, 0x67, 0x0b, 0x2f, 0xc6, 0x8a, 0x8f, + 0xb2, 0xc4, 0xa6, 0x3d, 0xef, 0xec, 0x6f, 0xe0, 0x1d, 0x8c, 0xe0, 0xf5, 0x1d, + 0x3c, 0x65, 0xa4, 0x28, 0x90, 0x97, 0x5f, 0xa1, 0xed, 0xed, 0x70, 0x56, 0x20, + 0xdf, 0xcd, 0x1d, 0x0c, 0xde, 0xad, 0x2a, 0xbf, 0xa6, 0xdf, 0xe2, 0x6d, 0x79, + 0xc9, 0x0c, 0x63, 0xff, 0x96, 0xe5, 0x40, 0xb7, 0x61, 0x5d, 0x43, 0xa6, 0x26, + 0x1d, 0x57, 0x73, 0x03, 0x06, 0xb6, 0x63, 0x2c, 0x8e, 0xe6, 0x1b, 0xaa, 0x4a, + 0xb4, 0xd3, 0x08, 0x4d, 0x65, 0x9c, 0xab, 0xcf, 0xc4, 0x06, 0x4c, 0x09, 0xd2, + 0x42, 0x69, 0xb3, 0x03, 0x17, 0x10, 0xb6, 0x7d, 0x3b, 0x0b, 0x73, 0x6f, 0xac, + 0xbc, 0x18, 0x1e, 0xb1, 0xdc, 0x8c, 0x49, 0x3f, 0x10, 0xdb, 0xe6, 0xfe, 0x45, + 0xfd, 0xd4, 0xab, 0x60, 0x22, 0xfa, 0xbd, 0xd3, 0x4c, 0x09, 0xf7, 0x51, 0x04, + 0xc3, 0x85, 0xc9, 0x26, 0x83, 0x41, 0xc1, 0x6e, 0xbe, 0x80, 0xf8, 0xc8, 0x0e, + 0x8e, 0x06, 0x23, 0x06, 0x03, 0x99, 0x5a, 0xde, 0x55, 0x61, 0xfe, 0xd4, 0x5c, + 0xf8, 0xd1, 0x14, 0xd4, 0xcf, 0x02, 0x42, 0x0c, 0x4b, 0x96, 0x2d, 0xc2, 0x02, + 0xf8, 0xa5, 0x07, 0xf3, 0xd8, 0xe8, 0xa3, 0x44, 0xfb, 0xa1, 0x0a, 0x32, 0x7f, + 0xf2, 0x22, 0x54, 0xf6, 0xc3, 0xac, 0x8f, 0x3c, 0xf9, 0x70, 0x0b, 0x1f, 0xd2, + 0xec, 0xbe, 0x9f, 0x4e, 0x91, 0xe4, 0x3a, 0x65, 0x4f, 0xff, 0x02, 0x7c, 0xd9, + 0x17, 0x4b, 0x63, 0x8e, 0x6e, 0xfe, 0xc4, 0xab, 0xfb, 0xa1, 0x87, 0xf8, 0xf3, + 0xdb, 0xa0, 0x45, 0x9d, 0xa6, 0xc3, 0xf8, 0x00, 0xcb, 0x6b, 0x61, 0x33, 0xa8, + 0xb4, 0xac, 0x1e, 0xf6, 0x58, 0xd1, 0x11, 0xc0, 0x3f, 0x07, 0x22, 0x08, 0xdc, + 0xc2, 0x07, 0xa2, 0x22, 0x3a, 0x70, 0x22, 0x92, 0x43, 0x2e, 0x83, 0x06, 0xfc, + 0x03, 0x04, 0x63, 0xe7, 0x54, 0xff, 0x0f, 0x15, 0x3d, 0x97, 0xbc, 0x9c, 0xe9, + 0x6d, 0xff, 0x4b, 0xed, 0x2f, 0x1e, 0xa5, 0xb8, 0xea, 0x87, 0x6d, 0x2e, 0xe4, + 0xe4, 0xf6, 0xe4, 0x9a, 0x4a, 0x85, 0xa9, 0xcf, 0x4a, 0x33, 0xdc, 0xd9, 0x36, + 0x60, 0xa4, 0x25, 0x43, 0xe5, 0x34, 0x22, 0x39, 0x0d, 0x66, 0x5b, 0xdd, 0x30, + 0x24, 0x78, 0xb3, 0x3c, 0x8d, 0x57, 0x47, 0x92, 0x41, 0x4c, 0x5f, 0xe5, 0xb7, + 0x4f, 0xe1, 0xd1, 0x69, 0x52, 0x5c, 0x99, 0x30, 0x1a, 0x3a, 0x68, 0xa0, 0xc8, + 0x5f, 0x99, 0x08, 0xed, 0x24, 0x25, 0x51, 0x5d, 0x45, 0xca, 0xe5, 0xca, 0xe7, + 0xce, 0x0e, 0x98, 0xb5, 0x82, 0x9e, 0xd6, 0x96, 0xbe, 0x2c, 0x3d, 0xb4, 0x59, + 0xe0, 0xad, 0x5b, 0x5d, 0xf7, 0x4a, 0xa1, 0x7b, 0x43, 0x44, 0x65, 0x42, 0xaf, + 0x17, 0x84, 0x40, 0x1e, 0xfe, 0xc9, 0xf1, 0x25, 0x6d, 0xaf, 0x71, 0x91, 0x59, + 0xd8, 0xa1, 0x83, 0x3f, 0xc0, 0x5c, 0xdb, 0x01, 0xf6, 0x88, 0xef, 0x49, 0x81, + 0xc7, 0x4a, 0x7f, 0xf4, 0x3d, 0xe3, 0x55, 0xc3, 0xc4, 0x66, 0x1c, 0x36, 0xfa, + 0x24, 0xec, 0x3c, 0x04, 0x7b, 0xf7, 0xd8, 0x03, 0x00, 0x00, 0x6a, 0x02, 0x48, + 0x32, 0xe6, 0x4a, 0x4c, 0x75, 0x72, 0x0c, 0xdc, 0xdd, 0xf9, 0xd0, 0x77, 0x09, + 0xa1, 0x68, 0xd0, 0x10, 0x12, 0xc2, 0xe4, 0xf3, 0x34, 0x30, 0xf2, 0x99, 0x70, + 0xc6, 0x0b, 0xe8, 0xc5, 0xe2, 0xc8, 0xcc, 0x8a, 0x86, 0xed, 0xcd, 0x51, 0x2d, + 0xa7, 0x0d, 0xd7, 0xbb, 0x40, 0xe2, 0x7b, 0x32, 0xdf, 0x3d, 0x77, 0x6a, 0x4a, + 0x7b, 0x00, 0xe3, 0xbd, 0x8f, 0x69, 0x7f, 0x1f, 0x4e, 0x5c, 0x9f, 0xbe, 0xbe, + 0xb4, 0x46, 0xb0, 0x25, 0xfd, 0x80, 0x65, 0xb1, 0x86, 0xae, 0xdc, 0x75, 0xf5, + 0x68, 0x87, 0x2c, 0x16, 0xfa, 0xf5, 0xe5, 0xa3, 0x47, 0x4d, 0x8a, 0x9d, 0x45, + 0x54, 0x8f, 0xac, 0xb7, 0x46, 0x9a, 0xcb, 0x2d, 0xa1, 0x0b, 0x70, 0x78, 0x25, + 0x9c, 0x50, 0x7c, 0x4d, 0xeb, 0xe4, 0x50, 0x8e, 0x0c, 0xee, 0x4f, 0xbc, 0xb0, + 0xd1, 0x3b, 0xf6, 0x24, 0x37, 0xdc, 0xf0, 0x5a, 0x63, 0x13, 0x45, 0xef, 0xbe, + 0x0d, 0x7b, 0xb9, 0x01, 0x61, 0x66, 0x55, 0x4f, 0xf3, 0x8a, 0x1d, 0x77, 0xf2, + 0xfd, 0xa4, 0xe7, 0xeb, 0xa7, 0xa7, 0x8a, 0xb3, 0x1f, 0x38, 0x29, 0x42, 0x52, + 0xa2, 0xb1, 0x0f, 0xd2, 0x86, 0x5b, 0x57, 0x05, 0x05, 0x5d, 0xfe, 0x9b, 0x3e, + 0x9e, 0x8f, 0x7a, 0xd5, 0xf4, 0x00, 0x7d, 0xbe, 0x42, 0x2b, 0x3a, 0xa0, 0xbe, + 0xb9, 0xd1, 0xc8, 0x9d, 0x37, 0x46, 0x08, 0x10, 0x99, 0xa8, 0xad, 0xf4, 0xe3, + 0x11, 0x48, 0x78, 0x20, 0xb5, 0xa7, 0x76, 0xea, 0x06, 0x42, 0xef, 0x8e, 0xf1, + 0xe2, 0x87, 0x82, 0x76, 0x7d, 0x9d, 0xe5, 0x7d, 0xea, 0xde, 0xad, 0xcb, 0x4a, + 0xf5, 0x19, 0x3e, 0x09, 0xc9, 0xbb, 0x74, 0x73, 0x77, 0x3a, 0x8c, 0xa5, 0x6d, + 0x76, 0x51, 0x1d, 0x65, 0x99, 0x20, 0xdb, 0x99, 0x64, 0xd3, 0x2b, 0xad, 0xb6, + 0x1f, 0x4c, 0xf6, 0xb0, 0x22, 0xd7, 0xc1, 0x53, 0x93, 0x18, 0x49, 0x64, 0x3e, + 0x8b, 0x99, 0xea, 0xe0, 0x28, 0x4f, 0x8b, 0x01, 0x15, 0xb4, 0x23, 0x7a, 0x7c, + 0x5d, 0x81, 0x97, 0x0f, 0xe8, 0x7c, 0x6f, 0x84, 0xb6, 0x68, 0x6c, 0x46, 0x25, + 0xdb, 0xdd, 0x9d, 0x79, 0xd2, 0xc5, 0x55, 0xdd, 0x4f, 0xce, 0xed, 0x2c, 0x5e, + 0x5e, 0x89, 0x6f, 0x63, 0x1a, 0xe4, 0x59, 0x7e, 0x9c, 0xc0, 0xbe, 0xe7, 0xb3, + 0x02, 0x5f, 0x95, 0x56, 0x10, 0x6a, 0x84, 0x3a, 0x18, 0x22, 0x7f, 0x5a, 0xb9, + 0x61, 0x7d, 0x7b, 0xcb, 0x1a, 0xf5, 0x28, 0xfa, 0xa7, 0xa0, 0x52, 0xea, 0x4f, + 0x52, 0xca, 0x59, 0x45, 0x57, 0xfd, 0xad, 0x33, 0x05, 0x2b, 0xc8, 0x2b, 0x39, + 0xc6, 0xa6, 0x09, 0xa0, 0x70, 0x75, 0x3d, 0x78, 0x8b, 0x2c, 0x4a, 0x2c, 0xae, + 0xbb, 0xe7, 0x9f, 0xf0, 0x12, 0x07, 0x1c, 0x07, 0x08, 0x10, 0x94, 0xad, 0x60, + 0x59, 0xc2, 0x8f, 0x48, 0x0c, 0x95, 0xf2, 0x59, 0xec, 0x67, 0xd7, 0x90, 0x4a, + 0x46, 0xda, 0x41, 0xe7, 0x24, 0x7f, 0x55, 0x59, 0xf7, 0xac, 0xb2, 0xc4, 0xc1, + 0x1e, 0xb9, 0xd2, 0x33, 0xc7, 0x6c, 0xfe, 0x0d, 0xd7, 0xaf, 0xfd, 0x0d, 0xbc, + 0x4e, 0x85, 0xa9, 0xe7, 0x6f, 0x2a, 0x48, 0x7c, 0x41, 0x20, 0xc7, 0xba, 0xfe, + 0x15, 0x06, 0x32, 0xa7, 0xd8, 0x85, 0x48, 0xa2, 0x48, 0x0d, 0x70, 0x2d, 0x34, + 0xe6, 0xc1, 0x05, 0x00, 0x00, ], txid: [ - 0x5b, 0xb4, 0x4e, 0xbf, 0x80, 0x30, 0xac, 0x2f, 0xb7, 0x4d, 0x82, 0xb4, 0x32, - 0xd4, 0x80, 0x21, 0x8a, 0x3d, 0x16, 0x48, 0xe3, 0x27, 0x0b, 0x89, 0xff, 0xb3, - 0xcf, 0x73, 0x5c, 0x2c, 0xe7, 0xa0, + 0xe4, 0xa3, 0x5e, 0xbe, 0x2e, 0x13, 0x4e, 0xcd, 0x74, 0x09, 0x21, 0x35, 0x8d, + 0x54, 0x53, 0x1e, 0xc1, 0x7f, 0x6c, 0x87, 0x80, 0x53, 0xf4, 0x42, 0x9b, 0x77, + 0x0d, 0x37, 0x22, 0xfb, 0xed, 0x23, ], auth_digest: [ - 0xb3, 0xd8, 0xef, 0x97, 0x5a, 0x6a, 0xfa, 0x72, 0x00, 0x92, 0x3c, 0x11, 0x60, - 0xb7, 0xeb, 0xcf, 0xce, 0x43, 0xb5, 0xb9, 0x1e, 0xe3, 0xb3, 0xdd, 0x91, 0x78, - 0x49, 0x38, 0xbf, 0xa6, 0x8e, 0xa6, + 0x8f, 0xe5, 0xaf, 0xed, 0xa9, 0xcb, 0xb4, 0x01, 0xf2, 0x70, 0xd4, 0xcb, 0x6a, + 0xe6, 0xb2, 0x9c, 0x79, 0xf1, 0xcb, 0x61, 0xd4, 0xbb, 0xa9, 0x7c, 0x9f, 0x54, + 0xea, 0x47, 0x71, 0xa9, 0x1a, 0x69, ], - amounts: vec![1399781968202734, 1999413718097392], - script_pubkeys: vec![ - vec![0x00, 0x53, 0x00], - vec![0x53, 0x51, 0x52, 0x52, 0x65, 0x52, 0x00, 0x53, 0x63], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0xe4, 0xa3, 0x5e, 0xbe, 0x2e, 0x13, 0x4e, 0xcd, 0x74, 0x09, 0x21, 0x35, 0x8d, + 0x54, 0x53, 0x1e, 0xc1, 0x7f, 0x6c, 0x87, 0x80, 0x53, 0xf4, 0x42, 0x9b, 0x77, + 0x0d, 0x37, 0x22, 0xfb, 0xed, 0x23, ], - transparent_input: Some(1), + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x4b, + 0x5d, 0x35, 0x4a, 0x71, 0x63, 0x16, 0x19, 0x01, 0x04, 0x08, 0xac, 0x70, 0x80, + 0xa2, 0xae, 0xee, 0x36, 0x6c, 0x58, 0x14, 0x6f, 0x32, 0xe3, 0x49, 0xa9, 0xbc, + 0x65, 0x7e, 0xc9, 0xe5, 0x7a, 0x89, 0xa0, 0x4c, 0xce, 0xee, 0x21, 0xbd, 0xf3, + 0x79, 0x3e, 0x49, 0xa5, 0xcf, 0x03, 0x52, 0x52, 0x00, 0x29, 0xdd, 0xdb, 0x3d, + 0x01, 0x95, 0xea, 0x6b, 0x56, 0xe7, 0x66, 0x03, 0x00, 0x02, 0xac, 0xac, 0x00, + 0x00, 0x03, 0x20, 0x36, 0xbd, 0x09, 0xe6, 0x9b, 0xe1, 0x41, 0x3e, 0x3b, 0x60, + 0x49, 0xf3, 0xe8, 0x7a, 0xba, 0xec, 0xa8, 0xc9, 0xb6, 0x65, 0xae, 0x82, 0x5c, + 0x52, 0xa7, 0x00, 0x6a, 0xd6, 0x5d, 0xcd, 0x83, 0x84, 0xa0, 0xbc, 0x9a, 0xf9, + 0x1d, 0xea, 0x82, 0x01, 0x95, 0xdb, 0x74, 0x59, 0x34, 0x73, 0x28, 0x25, 0xdf, + 0x4b, 0x5e, 0xd1, 0xc4, 0x1f, 0x12, 0x1b, 0x9e, 0x16, 0xfc, 0xa6, 0xe0, 0x15, + 0x29, 0x0b, 0xba, 0x21, 0xc2, 0x8c, 0x8d, 0xf6, 0x3b, 0xdd, 0x01, 0xf4, 0x2d, + 0xd4, 0x38, 0xa9, 0x2e, 0xe3, 0xce, 0x2f, 0x41, 0x3d, 0x64, 0x81, 0xea, 0x29, + 0xe2, 0xa9, 0xf9, 0xff, 0xd4, 0xab, 0x82, 0x8b, 0x6f, 0xd9, 0x5d, 0xab, 0xcf, + 0xb2, 0x5f, 0x23, 0x8b, 0x26, 0x62, 0x06, 0xb0, 0xa2, 0xf9, 0xa2, 0xee, 0xa1, + 0xc0, 0x83, 0xfa, 0xc8, 0x08, 0xaa, 0xfa, 0x03, 0x65, 0x66, 0xcc, 0xd2, 0x02, + 0x1f, 0xe0, 0x28, 0x7a, 0x04, 0x26, 0xcf, 0xf3, 0x25, 0xc7, 0x19, 0xbe, 0xbe, + 0xff, 0x69, 0x38, 0x05, 0xe4, 0xab, 0x64, 0xdc, 0x41, 0x1f, 0x7d, 0x91, 0x2d, + 0x3b, 0x63, 0x9a, 0xfc, 0x46, 0x1c, 0xab, 0xa5, 0x93, 0xdc, 0x9f, 0x5e, 0x5a, + 0xca, 0x1a, 0x64, 0x8e, 0xe4, 0x88, 0xf3, 0x6d, 0xeb, 0x4a, 0x3f, 0xdb, 0x0f, + 0xf6, 0xf5, 0xa3, 0x04, 0x4a, 0x63, 0xe1, 0x7f, 0x70, 0xa4, 0x30, 0x38, 0x24, + 0x60, 0x3a, 0xb5, 0x0e, 0x9b, 0xf7, 0x5b, 0xae, 0xb5, 0x7b, 0xfd, 0xc8, 0x9b, + 0xfd, 0xbc, 0x27, 0x27, 0x9d, 0x10, 0x73, 0xbf, 0x7f, 0x95, 0x05, 0xfb, 0x31, + 0x68, 0xd2, 0x06, 0xe2, 0xbf, 0x41, 0x02, 0xbf, 0x15, 0x9c, 0xff, 0x61, 0xe6, + 0xd6, 0x6c, 0x80, 0x37, 0x50, 0xda, 0x25, 0x4c, 0xd6, 0xb8, 0x1a, 0xed, 0x42, + 0x09, 0x97, 0x94, 0xb8, 0x4e, 0xce, 0x90, 0x42, 0x18, 0xe6, 0xf6, 0x6e, 0xc6, + 0x34, 0xe9, 0x2e, 0xef, 0xf4, 0x5f, 0x52, 0xe0, 0x4b, 0x4b, 0x79, 0x5a, 0x15, + 0x25, 0xaa, 0xf9, 0xc5, 0x1d, 0x62, 0x60, 0xfb, 0xd6, 0x4e, 0x8d, 0x8a, 0xc2, + 0x66, 0xdc, 0x6e, 0x7d, 0xf6, 0x15, 0x3a, 0xd9, 0x73, 0x55, 0x83, 0x79, 0x28, + 0x40, 0x4c, 0xd5, 0x81, 0xbc, 0x9c, 0xf9, 0xdc, 0xd6, 0x67, 0x47, 0xdc, 0x97, + 0x0a, 0x9f, 0x00, 0xde, 0xb4, 0x4b, 0xd6, 0x34, 0xab, 0x04, 0x2e, 0x01, 0x04, + 0xc1, 0xce, 0x74, 0x7f, 0x53, 0x75, 0x1b, 0xc3, 0x3e, 0x38, 0x4c, 0x6b, 0x55, + 0x76, 0x39, 0x9e, 0x16, 0xf8, 0xf0, 0xcb, 0x08, 0xde, 0x35, 0x08, 0x37, 0x33, + 0x95, 0x45, 0x87, 0xc1, 0xc2, 0x4d, 0xf2, 0xae, 0x66, 0x30, 0xff, 0xfe, 0x99, + 0x62, 0x15, 0xef, 0xe4, 0xd2, 0x62, 0x6d, 0xeb, 0x20, 0x56, 0x6a, 0x8f, 0x5e, + 0xad, 0x2f, 0x04, 0xdb, 0x5d, 0x08, 0x77, 0x9c, 0x9c, 0x65, 0x9e, 0xa3, 0x43, + 0xcd, 0x78, 0x46, 0x34, 0xc9, 0x9d, 0x8c, 0x8b, 0xad, 0xa9, 0x3b, 0xe8, 0xe6, + 0xda, 0x84, 0x15, 0x94, 0xba, 0xcf, 0x7c, 0xb3, 0xe6, 0x92, 0xc7, 0x4b, 0x5f, + 0xfe, 0x95, 0x78, 0x73, 0x11, 0x3a, 0x1a, 0xb0, 0x64, 0x02, 0x6f, 0x6d, 0xee, + 0x8b, 0x48, 0xa3, 0x84, 0xa1, 0x33, 0x83, 0x18, 0x36, 0x07, 0x86, 0x50, 0x27, + 0x84, 0xd1, 0x7d, 0x40, 0x0c, 0xe3, 0xd7, 0x21, 0x78, 0x7e, 0xdc, 0x4c, 0x6b, + 0x39, 0x35, 0x66, 0x25, 0x10, 0x77, 0x10, 0x00, 0x68, 0x0d, 0x78, 0xbb, 0x49, + 0xc5, 0x66, 0xef, 0x27, 0xdf, 0x61, 0xc9, 0xfe, 0xb9, 0x2c, 0x08, 0x97, 0x59, + 0x44, 0x87, 0x27, 0xa9, 0x34, 0xe3, 0x57, 0x95, 0x3d, 0xe1, 0xe9, 0xe9, 0x0f, + 0xd8, 0xdf, 0xfe, 0x40, 0xb8, 0x73, 0xbc, 0xd5, 0xb9, 0x82, 0x08, 0xdf, 0x4b, + 0x2c, 0xa2, 0x89, 0x7a, 0xf9, 0x0d, 0x8c, 0x8a, 0x23, 0x62, 0x30, 0x02, 0xa9, + 0xd8, 0xbc, 0x02, 0xe8, 0x06, 0x25, 0x4f, 0x41, 0x0e, 0x3b, 0x02, 0x40, 0x9c, + 0xbe, 0xbf, 0xce, 0x8a, 0xcf, 0x65, 0xcf, 0x39, 0x42, 0x6b, 0x64, 0xa6, 0xba, + 0x93, 0x74, 0xa1, 0x3d, 0x72, 0x59, 0x62, 0x3f, 0x65, 0xe9, 0x3e, 0x10, 0xbf, + 0x1f, 0x16, 0xba, 0x7a, 0xe0, 0x7d, 0xa9, 0x20, 0x58, 0x1c, 0x70, 0x40, 0x9e, + 0xdc, 0x7b, 0x9e, 0x21, 0x4e, 0x95, 0x91, 0x92, 0x82, 0x4c, 0x1d, 0xa6, 0x5d, + 0x33, 0x7b, 0x73, 0x75, 0xf5, 0x03, 0x2f, 0xea, 0xd3, 0xb4, 0xf3, 0x28, 0x48, + 0x11, 0x95, 0x0c, 0x7a, 0x90, 0xae, 0xc9, 0x75, 0xd4, 0xe3, 0x62, 0x9f, 0x52, + 0xd1, 0x9a, 0x16, 0x4e, 0x51, 0x16, 0xef, 0x3a, 0xd0, 0x22, 0x44, 0x2d, 0x1e, + 0xec, 0x76, 0xb8, 0x88, 0x73, 0x8b, 0x53, 0xe5, 0x05, 0x58, 0xa7, 0x0f, 0x20, + 0xc8, 0xac, 0xb5, 0x8d, 0xee, 0x63, 0x27, 0x15, 0xe4, 0x78, 0xe2, 0xbc, 0x21, + 0xbc, 0xfb, 0xe3, 0x15, 0x59, 0x96, 0xca, 0xe7, 0xbd, 0x97, 0xf0, 0x2b, 0x51, + 0x6d, 0x32, 0x00, 0xfb, 0x3c, 0x17, 0x39, 0x7c, 0xc1, 0x2b, 0xb7, 0xa1, 0x9f, + 0xd4, 0x36, 0xe6, 0x7a, 0xbc, 0xe6, 0x6d, 0x30, 0xfe, 0xc0, 0x47, 0xfb, 0x27, + 0x70, 0x82, 0x0e, 0x47, 0x6f, 0x3e, 0x32, 0xbc, 0x48, 0x3b, 0xf5, 0x31, 0x64, + 0xae, 0x49, 0x70, 0xf1, 0x1b, 0x9c, 0xae, 0xe4, 0xed, 0x6c, 0xb8, 0xd2, 0xd7, + 0x0f, 0x69, 0x13, 0xd8, 0xe0, 0x2a, 0xf8, 0xfb, 0xb1, 0xe4, 0x09, 0xb4, 0xef, + 0x08, 0x04, 0x48, 0xe5, 0x3b, 0xe6, 0xe5, 0xe6, 0x05, 0x75, 0xdf, 0xde, 0x94, + 0x28, 0xb0, 0x06, 0x96, 0x61, 0x1a, 0x2f, 0x72, 0x33, 0x2a, 0xe2, 0x90, 0x23, + 0xdd, 0x88, 0xae, 0x77, 0xf1, 0x5b, 0x8a, 0xe2, 0xc2, 0x4b, 0x86, 0xcf, 0x3d, + 0x57, 0x43, 0x9c, 0xaf, 0x17, 0xf2, 0x8e, 0xda, 0x94, 0x93, 0x2e, 0xef, 0x28, + 0x53, 0x4e, 0x16, 0x49, 0xce, 0xf8, 0x85, 0x40, 0xfc, 0xb1, 0xa6, 0x3e, 0x11, + 0x5c, 0x58, 0x22, 0xaf, 0xa4, 0x40, 0xc8, 0xd7, 0x9d, 0x66, 0xf9, 0xbb, 0x1f, + 0x48, 0xe1, 0x14, 0x0b, 0x06, 0xec, 0x87, 0x18, 0x3c, 0xbc, 0x6e, 0x95, 0xf6, + 0xcd, 0x5f, 0x7e, 0xbc, 0xad, 0xb8, 0x97, 0xc7, 0x7b, 0x4a, 0xfb, 0x36, 0x7b, + 0x95, 0x2d, 0xbb, 0x71, 0x7f, 0x75, 0x18, 0x90, 0xc8, 0xac, 0x30, 0x36, 0xda, + 0xcd, 0xbd, 0x78, 0x4a, 0x0d, 0x83, 0xab, 0xb8, 0x44, 0x1b, 0x60, 0xdb, 0x8d, + 0x0b, 0xf9, 0x2b, 0x56, 0x4a, 0x93, 0x67, 0x65, 0xea, 0xaa, 0xff, 0x49, 0x38, + 0x35, 0x47, 0xdc, 0x74, 0x07, 0x22, 0x31, 0xff, 0x8a, 0xf3, 0xe1, 0xf1, 0x41, + 0xba, 0x1f, 0xed, 0x0a, 0xf8, 0x0a, 0x3d, 0xfc, 0x5b, 0x0c, 0x6a, 0x37, 0x89, + 0xda, 0x6f, 0x3a, 0xf4, 0xdd, 0xc0, 0xb8, 0x93, 0xd6, 0xff, 0x8f, 0x90, 0x01, + 0x44, 0x15, 0x1b, 0xee, 0x34, 0xc7, 0x94, 0x0b, 0x45, 0x6f, 0x26, 0x4e, 0x2d, + 0x71, 0xe0, 0x1a, 0xea, 0x34, 0xe8, 0x4d, 0x50, 0xc4, 0x18, 0x8d, 0xbd, 0x25, + 0x3f, 0x28, 0xab, 0xd3, 0x26, 0x9f, 0x0f, 0x77, 0xe1, 0x53, 0xb7, 0xa5, 0x95, + 0x3b, 0x39, 0x15, 0x3a, 0x81, 0x69, 0xa4, 0xab, 0x46, 0x4e, 0x39, 0x0b, 0x7f, + 0x0a, 0x96, 0xd1, 0x4a, 0x73, 0xf7, 0x69, 0x7f, 0x7e, 0xce, 0x3c, 0xd7, 0x81, + 0xd3, 0x5d, 0xd2, 0x2a, 0xdd, 0xdd, 0x2f, 0xd7, 0x5b, 0x5f, 0x00, 0xdf, 0x88, + 0xe9, 0x5f, 0xd6, 0x01, 0xa0, 0xdb, 0x47, 0x75, 0xee, 0x05, 0xc8, 0x96, 0x7f, + 0xb5, 0x50, 0xe5, 0x14, 0xdf, 0x8c, 0xc2, 0x42, 0x09, 0x43, 0xb2, 0x55, 0x0b, + 0x63, 0xe9, 0xe6, 0x7f, 0x83, 0xdc, 0x9f, 0x48, 0x93, 0x33, 0xd5, 0x2a, 0x7f, + 0xd7, 0x68, 0x8a, 0x58, 0xd6, 0x62, 0x0b, 0x67, 0xe9, 0xc7, 0xb0, 0x91, 0x6f, + 0xef, 0x90, 0xf1, 0x5d, 0x8e, 0x4e, 0xb8, 0x0c, 0xf5, 0x99, 0x68, 0x2f, 0x95, + 0x4f, 0xf4, 0xe0, 0xb3, 0x71, 0x83, 0x13, 0x0c, 0xa2, 0xee, 0xd0, 0x91, 0x3f, + 0x46, 0xa4, 0xdb, 0x99, 0x2a, 0x1c, 0x3b, 0xf3, 0x19, 0xdc, 0x86, 0x75, 0x94, + 0x01, 0x01, 0x53, 0x7c, 0xff, 0xc4, 0xa8, 0x2d, 0x59, 0x9b, 0xbe, 0xa0, 0xd4, + 0x7e, 0x7a, 0xbf, 0xa9, 0x92, 0xb4, 0x99, 0x8c, 0xb2, 0x50, 0x09, 0x55, 0xe6, + 0x1c, 0x0d, 0x46, 0xb3, 0x21, 0x17, 0xfb, 0xb9, 0x7f, 0x7a, 0x76, 0x32, 0xd8, + 0x72, 0x4b, 0x5d, 0xff, 0x67, 0xf7, 0x5e, 0x2d, 0x31, 0x74, 0x06, 0xa0, 0xce, + 0xc2, 0x89, 0xed, 0x08, 0x3b, 0x7c, 0x58, 0x19, 0x81, 0x8c, 0x50, 0x47, 0x93, + 0xde, 0x53, 0xb6, 0xbf, 0xdb, 0x51, 0x0e, 0x7c, 0xa7, 0x29, 0xba, 0x74, 0x3d, + 0x10, 0xb3, 0xe9, 0x95, 0x7e, 0xfa, 0x84, 0x20, 0x13, 0x39, 0x47, 0x7c, 0xf3, + 0x5f, 0xbb, 0x6a, 0x27, 0x9b, 0xad, 0x9e, 0x8f, 0x42, 0xb9, 0xb3, 0xfd, 0x6f, + 0x3b, 0xc7, 0x70, 0x67, 0x1d, 0x9c, 0x19, 0x12, 0x2f, 0xa3, 0x25, 0x6d, 0x09, + 0x07, 0x36, 0xb6, 0xd6, 0x4e, 0xb9, 0xcc, 0x03, 0x20, 0xf1, 0xea, 0xaa, 0x27, + 0x1b, 0xa2, 0x86, 0x1e, 0xc4, 0xb3, 0xf3, 0xf6, 0xc8, 0x40, 0xb6, 0x19, 0xff, + 0x38, 0x8d, 0x81, 0xfc, 0x40, 0x44, 0xa0, 0xd5, 0x31, 0xa4, 0xbb, 0x44, 0xc9, + 0x3d, 0x09, 0x9d, 0xb0, 0x8a, 0x9b, 0xc3, 0x46, 0xa0, 0xb6, 0x2f, 0x16, 0x8f, + 0xfb, 0xdb, 0x73, 0x93, 0x66, 0xbb, 0x53, 0x5d, 0xde, 0x66, 0xc2, 0xc1, 0x28, + 0x7b, 0x3b, 0x27, 0x85, 0xae, 0xd6, 0x4c, 0xc4, 0x0c, 0xbc, 0x7d, 0x33, 0xcb, + 0xa4, 0xa9, 0xf3, 0xfc, 0xf5, 0xf8, 0x31, 0x36, 0xa4, 0x39, 0x2d, 0x21, 0xa7, + 0xf9, 0xeb, 0x1c, 0xe4, 0xb6, 0xe1, 0x7e, 0x6f, 0x4a, 0x85, 0xa5, 0x79, 0x66, + 0x9e, 0xfd, 0x0f, 0xb0, 0x98, 0x78, 0xe0, 0x88, 0xe3, 0x22, 0xe9, 0x06, 0xe8, + 0x0d, 0x27, 0xf8, 0xd0, 0xca, 0x7e, 0x79, 0x15, 0xab, 0x40, 0x96, 0x59, 0xa6, + 0xd8, 0x0f, 0xde, 0xd1, 0x0a, 0xff, 0x9f, 0xb7, 0x73, 0x74, 0x9d, 0x79, 0x28, + 0x57, 0xf6, 0x8c, 0x7e, 0x8c, 0xf5, 0x18, 0x26, 0x0a, 0x61, 0x08, 0x6d, 0xe3, + 0x2f, 0xff, 0x82, 0x39, 0xf4, 0x53, 0x61, 0x7a, 0x19, 0xf6, 0xfe, 0xc2, 0x20, + 0x67, 0x60, 0x65, 0xeb, 0xe2, 0x75, 0x7e, 0xfc, 0xac, 0xcb, 0x77, 0xfc, 0x61, + 0xe5, 0x9b, 0x97, 0x63, 0x7e, 0x92, 0x0d, 0xee, 0x5e, 0x7e, 0x7a, 0x12, 0xe9, + 0xd6, 0xd2, 0x28, 0xb2, 0x6b, 0x2f, 0xa8, 0x36, 0xf4, 0x72, 0x83, 0x69, 0xad, + 0xcd, 0xfc, 0xd0, 0x04, 0xdc, 0xf1, 0x9e, 0x27, 0xc0, 0xc0, 0x84, 0x44, 0xd2, + 0x9a, 0x12, 0x2b, 0x23, 0x09, 0xf7, 0x16, 0x3c, 0x99, 0x0e, 0xb9, 0x26, 0x1f, + 0xd4, 0x15, 0xc0, 0x45, 0x4a, 0x56, 0xaa, 0x3e, 0xaf, 0x9c, 0x1f, 0x9b, 0xff, + 0xf6, 0x04, 0x77, 0x6a, 0x4d, 0x25, 0xe7, 0xd3, 0xcd, 0xc5, 0xc5, 0xf1, 0x9c, + 0xd2, 0xa8, 0x79, 0x4a, 0x4f, 0x57, 0x16, 0x7f, 0xbc, 0x7e, 0xaa, 0x06, 0x16, + 0x4d, 0x51, 0xc4, 0x53, 0x06, 0x14, 0xbc, 0xf5, 0x20, 0xb2, 0x63, 0x82, 0x0a, + 0xa1, 0x7b, 0x20, 0xb4, 0x8c, 0xbf, 0x59, 0xd8, 0xe3, 0x09, 0x32, 0x2e, 0xbe, + 0x56, 0x6f, 0xbe, 0x46, 0xe0, 0xaa, 0x29, 0x76, 0x6a, 0xdf, 0xdf, 0x01, 0x7a, + 0x71, 0x05, 0x10, 0x3c, 0x7f, 0xca, 0xb7, 0xb0, 0x76, 0x48, 0xc7, 0xc1, 0x16, + 0x04, 0x84, 0xf7, 0x7a, 0x6c, 0x70, 0xa5, 0x38, 0x1b, 0x82, 0x56, 0x40, 0xa1, + 0xbe, 0x48, 0xe4, 0x15, 0xa1, 0xe6, 0xa2, 0x7d, 0x78, 0x02, 0x2a, 0x8a, 0x2f, + 0xf0, 0x70, 0xab, 0xf1, 0x23, 0x94, 0xe3, 0xae, 0x5a, 0x8c, 0x23, 0xe3, 0x73, + 0x3e, 0xa4, 0x7a, 0x44, 0xcb, 0x2c, 0x96, 0x8b, 0xca, 0x24, 0x98, 0x37, 0xde, + 0x1d, 0x39, 0xa5, 0xa1, 0xdc, 0xae, 0x71, 0x0c, 0xe0, 0x43, 0x01, 0x69, 0xbd, + 0x6e, 0x9f, 0x64, 0xab, 0xf1, 0xe6, 0x4e, 0xc4, 0x9e, 0xd0, 0x80, 0x4e, 0xb6, + 0x47, 0x74, 0x3a, 0xce, 0xa9, 0x29, 0xed, 0x0f, 0x7c, 0x90, 0x15, 0xb0, 0xe8, + 0x1e, 0x21, 0x29, 0xdb, 0x05, 0x0d, 0x5e, 0x78, 0xe6, 0x82, 0xc8, 0x19, 0x93, + 0xea, 0x87, 0x53, 0xc9, 0x91, 0xb0, 0x2e, 0x61, 0x81, 0x0e, 0x74, 0x61, 0xed, + 0x87, 0xb3, 0x80, 0xdb, 0x96, 0xab, 0xe3, 0xbe, 0xad, 0x0f, 0x4b, 0x22, 0x12, + 0xdb, 0x65, 0x8c, 0x11, 0xb8, 0x3f, 0x53, 0x11, 0x47, 0x85, 0x27, 0x65, 0x98, + 0xb0, 0x19, 0x7a, 0x7f, 0x1c, 0x25, 0x62, 0x7d, 0x79, 0x62, 0x4d, 0xac, 0xee, + 0x97, 0x7d, 0x9f, 0x4e, 0x1a, 0x35, 0xed, 0x2e, 0xaa, 0xd3, 0xcb, 0x68, 0x25, + 0x0a, 0xa9, 0xb3, 0xab, 0x1a, 0x83, 0x45, 0x72, 0x8e, 0x7d, 0x1a, 0x78, 0xbe, + 0x1f, 0xe4, 0x62, 0x27, 0xee, 0xf2, 0x16, 0xe5, 0xdd, 0x87, 0x79, 0x8b, 0x98, + 0x8b, 0x45, 0xc0, 0xcd, 0xde, 0x37, 0x03, 0x96, 0x42, 0x47, 0x77, 0x25, 0x1a, + 0x8e, 0x5d, 0x80, 0x8f, 0x1c, 0xbc, 0x92, 0xdb, 0xa5, 0x7c, 0xa1, 0xd0, 0x70, + 0xea, 0x7f, 0xc2, 0x89, 0xe9, 0xe5, 0x65, 0x29, 0xf2, 0x9f, 0x80, 0x74, 0xc9, + 0x4a, 0xe0, 0x48, 0x27, 0x21, 0xe1, 0xf2, 0x2c, 0xef, 0xe0, 0xdf, 0x7c, 0x57, + 0x7a, 0x23, 0xa2, 0xff, 0x33, 0x83, 0x03, 0xc0, 0x87, 0x45, 0xd4, 0x63, 0x56, + 0x57, 0x59, 0xcf, 0x92, 0xdd, 0x16, 0x41, 0x3b, 0xa4, 0x16, 0xb7, 0x17, 0x87, + 0x52, 0x13, 0x6d, 0x3f, 0x57, 0x3a, 0xae, 0x8c, 0x25, 0x42, 0x04, 0x41, 0x96, + 0xa4, 0xfd, 0x82, 0xd7, 0xc8, 0xc0, 0x03, 0x1b, 0xf4, 0xf0, 0x67, 0x51, 0xc8, + 0x0b, 0x19, 0xec, 0xb7, 0x86, 0xab, 0x3b, 0xb9, 0x37, 0xf0, 0xd9, 0x8e, 0x08, + 0x39, 0x18, 0xf5, 0x95, 0x34, 0x29, 0x60, 0x05, 0x67, 0xb1, 0xb4, 0x6f, 0xf3, + 0x54, 0xa5, 0x67, 0x35, 0x70, 0x34, 0x89, 0x0e, 0x1c, 0x55, 0xc2, 0x60, 0x07, + 0x5c, 0x88, 0x0e, 0x9c, 0x65, 0xd7, 0xbc, 0xa1, 0xf1, 0x70, 0xd2, 0x9a, 0xf0, + 0x3a, 0x3b, 0x45, 0x58, 0x9f, 0xae, 0x81, 0xeb, 0x0b, 0x5d, 0x8e, 0x0d, 0x38, + 0x02, 0x1d, 0x3b, 0x5f, 0x07, 0xe8, 0x8c, 0x99, 0x04, 0x37, 0x6d, 0x27, 0xf1, + 0x3e, 0x44, 0x41, 0xd5, 0x38, 0x74, 0x42, 0xc5, 0xea, 0x0a, 0xf5, 0xa2, 0x0a, + 0x38, 0x32, 0xbc, 0x3b, 0x9c, 0x59, 0xb8, 0x4b, 0xca, 0x39, 0xb5, 0x2c, 0xd6, + 0xb1, 0xfa, 0x29, 0x32, 0xba, 0x9d, 0x66, 0xc4, 0x12, 0xf5, 0xcd, 0x39, 0x35, + 0x1e, 0x13, 0x33, 0xef, 0x85, 0xd0, 0xee, 0xe5, 0x45, 0xa7, 0xe4, 0x06, 0xf6, + 0xeb, 0x3b, 0xf8, 0x93, 0xf3, 0xed, 0xac, 0x94, 0x64, 0x33, 0x92, 0xa2, 0x8b, + 0x0e, 0x49, 0x0c, 0x51, 0xe4, 0xb7, 0x16, 0x3c, 0x1c, 0xf7, 0x57, 0xd2, 0x24, + 0x18, 0xdd, 0x63, 0x38, 0x1b, 0xa2, 0xf2, 0x98, 0x28, 0x83, 0x6f, 0xe9, 0x78, + 0xda, 0xb5, 0x20, 0x1b, 0x2d, 0xb0, 0x8c, 0x3b, 0x38, 0x9b, 0xa4, 0xb6, 0xac, + 0xf7, 0x78, 0xc2, 0xbf, 0x91, 0x02, 0xbe, 0x0c, 0x3e, 0x12, 0xd7, 0x7a, 0xea, + 0x6d, 0xf7, 0x53, 0x8e, 0x8c, 0xf3, 0x62, 0xba, 0xaa, 0xad, 0x1d, 0xc5, 0x60, + 0x42, 0xc6, 0xf2, 0x4c, 0xaf, 0x46, 0xbe, 0xd6, 0x6a, 0xbf, 0x4c, 0x40, 0x2a, + 0x74, 0x92, 0x4e, 0xcf, 0xd0, 0xa0, 0x8d, 0xed, 0xee, 0xa0, 0xef, 0xce, 0xcd, + 0x35, 0x2c, 0x27, 0x5f, 0x13, 0xed, 0x20, 0x76, 0x03, 0x82, 0x2b, 0x1e, 0xf9, + 0x97, 0xb7, 0xed, 0x42, 0xf4, 0xa5, 0x76, 0xb9, 0xe4, 0xc0, 0x07, 0x38, 0x56, + 0x3f, 0x82, 0xa7, 0x62, 0x85, 0x46, 0x7d, 0xa2, 0x95, 0xc2, 0x3b, 0xa1, 0xc5, + 0x87, 0xeb, 0xef, 0xaf, 0x13, 0xcd, 0x4d, 0x50, 0xf2, 0x3c, 0xa5, 0x74, 0x3c, + 0x22, 0x5c, 0x38, 0x6d, 0x46, 0xd4, 0xac, 0x70, 0x83, 0x79, 0xef, 0x99, 0x96, + 0x74, 0x4b, 0x39, 0x12, 0x04, 0x4b, 0x35, 0x5f, 0x92, 0x7a, 0x67, 0xaf, 0x1e, + 0xf2, 0x6a, 0x71, 0x7f, 0xb5, 0xa8, 0x46, 0xac, 0x9d, 0xa1, 0x5e, 0xa3, 0xf1, + 0x8f, 0x8c, 0x36, 0x18, 0x3f, 0x87, 0x9b, 0xb9, 0xa3, 0xb2, 0x98, 0xff, 0xf9, + 0xa4, 0x89, 0x64, 0x6e, 0x77, 0x8e, 0x6d, 0x67, 0x01, 0xf9, 0xad, 0xac, 0x7a, + 0xe8, 0x82, 0x09, 0xa8, 0x43, 0xba, 0x8a, 0x55, 0xd1, 0x19, 0x2b, 0xbe, 0xef, + 0x31, 0xd0, 0x71, 0x45, 0x37, 0xf7, 0xa0, 0x35, 0xb0, 0x79, 0xc6, 0xad, 0xd4, + 0xab, 0x50, 0x61, 0x2d, 0x35, 0x89, 0x7a, 0x93, 0x3d, 0x49, 0xe8, 0xef, 0x08, + 0x6c, 0xdf, 0x96, 0xc8, 0x0d, 0x28, 0x56, 0xcc, 0xc7, 0xe4, 0x5f, 0xc4, 0xef, + 0xd4, 0xbf, 0x1b, 0x98, 0xab, 0x28, 0x89, 0x1b, 0x4a, 0xea, 0x7e, 0xf8, 0x4c, + 0xf7, 0x36, 0x93, 0x5c, 0x46, 0x6b, 0x24, 0x97, 0x4d, 0xf8, 0xf5, 0x35, 0x5b, + 0x8b, 0xa3, 0x20, 0xac, 0x5f, 0xbc, 0x47, 0x5a, 0xa2, 0xcf, 0x5a, 0xd3, 0x77, + 0x80, 0xbd, 0x9f, 0x9d, 0x46, 0x42, 0xcf, 0x6c, 0x2d, 0xc6, 0xb8, 0x2f, 0x91, + 0x7d, 0x09, 0xc4, 0xf7, 0x28, 0x88, 0xf9, 0x15, 0x53, 0x44, 0x7f, 0xc5, 0x70, + 0x26, 0x6d, 0xaa, 0xfd, 0x4b, 0x96, 0xcf, 0xe2, 0xa0, 0xb0, 0x67, 0x92, 0x46, + 0x9a, 0x72, 0x7d, 0xbe, 0xd0, 0x55, 0x91, 0xea, 0x60, 0x57, 0x32, 0x20, 0x5e, + 0x26, 0x05, 0x97, 0x8a, 0x3a, 0x90, 0x2c, 0x3c, 0xd6, 0x5f, 0x94, 0x83, 0x00, + 0xf7, 0x37, 0x51, 0x88, 0x15, 0xf4, 0x63, 0xd3, 0xc6, 0x1a, 0x18, 0x9b, 0xc3, + 0xbc, 0x84, 0xb0, 0x22, 0xf6, 0x3d, 0x65, 0x4f, 0x52, 0x0e, 0x3a, 0x7a, 0xd8, + 0x8e, 0x5d, 0x8d, 0xa1, 0x50, 0x14, 0xbe, 0x4b, 0xb9, 0x67, 0x99, 0x27, 0xdc, + 0x7e, 0x0f, 0xba, 0xf0, 0x58, 0xd9, 0x3f, 0x37, 0xc7, 0x2b, 0x28, 0x6b, 0x02, + 0xb7, 0x5f, 0x3c, 0xdb, 0xfb, 0x85, 0x0e, 0xed, 0x90, 0xcb, 0x23, 0x39, 0x24, + 0x32, 0xeb, 0xc3, 0x6b, 0xd2, 0x47, 0x54, 0x46, 0x9c, 0x03, 0x73, 0x1a, 0x7e, + 0xbb, 0xed, 0x28, 0x57, 0x78, 0x49, 0x81, 0xa0, 0x71, 0x67, 0x05, 0xd9, 0xcb, + 0x47, 0xd9, 0x87, 0xf8, 0x3d, 0x34, 0x21, 0xb1, 0x07, 0xd1, 0x55, 0xdb, 0xb6, + 0x61, 0xed, 0x08, 0xf2, 0xfc, 0x2e, 0x6b, 0x4a, 0x5b, 0x09, 0x77, 0x64, 0x51, + 0xd8, 0x73, 0xb2, 0xfc, 0x63, 0x68, 0x1c, 0xe3, 0x08, 0xc8, 0x08, 0xf5, 0x38, + 0x8c, 0xb1, 0xaa, 0x55, 0x89, 0xa1, 0x87, 0x73, 0xdb, 0x39, 0x07, 0xa0, 0x6b, + 0xef, 0x62, 0xd1, 0x29, 0x60, 0xaa, 0xe7, 0x2a, 0x2b, 0x89, 0x7e, 0x26, 0xb5, + 0x75, 0xfd, 0x04, 0x8a, 0x57, 0x22, 0x2c, 0x7c, 0x68, 0x0d, 0x54, 0xdc, 0x73, + 0x28, 0xd0, 0xf0, 0xf2, 0xd7, 0x0b, 0x43, 0x10, 0x8c, 0xb2, 0x0c, 0x5c, 0x31, + 0x16, 0x46, 0x31, 0xb0, 0xe5, 0xb3, 0xbd, 0x31, 0xb7, 0xdf, 0x8f, 0x4c, 0x1f, + 0xe1, 0x43, 0x4f, 0xa7, 0x47, 0x56, 0x70, 0x6f, 0x83, 0x10, 0x60, 0xa5, 0xb7, + 0x03, 0xdf, 0x9c, 0xd4, 0x2e, 0x24, 0x96, 0x0e, 0x50, 0x8a, 0x04, 0x36, 0x11, + 0x8d, 0x4a, 0x92, 0x07, 0xb6, 0xd8, 0x50, 0x59, 0x6d, 0xde, 0x07, 0xf5, 0x94, + 0x5c, 0x48, 0x3f, 0x66, 0x03, 0x00, 0x3b, 0xb9, 0x00, 0x0b, 0xc4, 0x1d, 0xcf, + 0x9a, 0x21, 0x44, 0x17, 0x6c, 0x4e, 0x92, 0xb5, 0xea, 0x07, 0xe1, 0x9f, 0x5a, + 0xb8, 0x29, 0x59, 0xb5, 0xcb, 0x96, 0x49, 0x97, 0x9e, 0x3c, 0xcf, 0x35, 0xc8, + 0xda, 0xd0, 0x54, 0x60, 0x26, 0x1f, 0xcd, 0xcb, 0x00, 0x7a, 0xeb, 0xc1, 0x5e, + 0x11, 0x67, 0x5c, 0x2d, 0xb4, 0xa6, 0xcb, 0x79, 0x38, 0xe1, 0xfe, 0xb5, 0xcd, + 0xdc, 0x27, 0xd6, 0xd0, 0x75, 0x44, 0x1e, 0x16, 0xc7, 0x07, 0xf0, 0x97, 0x14, + 0x47, 0x4c, 0x96, 0x16, 0x0a, 0xa6, 0x8e, 0xaa, 0x12, 0x31, 0x79, 0x06, 0x9c, + 0xd2, 0x20, 0x44, 0x06, 0x26, 0xcd, 0xfe, 0xed, 0x65, 0xf9, 0xfa, 0xbd, 0xaa, + 0x6d, 0xb1, 0x76, 0x0d, 0xa5, 0xd8, 0x4c, 0xfd, 0x60, 0x03, 0xcf, 0xfe, 0x52, + 0xfd, 0xd0, 0xd2, 0xa9, 0x80, 0x34, 0x8f, 0x26, 0x9f, 0x5a, 0x07, 0x64, 0x2e, + 0x89, 0xce, 0x26, 0x27, 0xba, 0x0e, 0x87, 0x13, 0x9e, 0xc2, 0xdb, 0x57, 0x2d, + 0x1c, 0xec, 0x82, 0x76, 0xd1, 0xa6, 0x2a, 0x47, 0x2f, 0x61, 0x2a, 0xc9, 0xda, + 0x09, 0x3a, 0x9c, 0x5f, 0xcc, 0x78, 0x11, 0x9c, 0x82, 0xbe, 0xfd, 0x7b, 0x30, + 0xff, 0x2c, 0x00, 0x59, 0x41, 0x0b, 0xfd, 0x5b, 0x32, 0x2c, 0xa5, 0xdb, 0x69, + 0x39, 0x39, 0xfa, 0x89, 0x76, 0x6f, 0xf0, 0x98, 0xad, 0x4b, 0xc6, 0x40, 0x37, + 0xa3, 0x4a, 0x73, 0x12, 0x86, 0x05, 0x72, 0x3a, 0x24, 0x1f, 0x0e, 0xb1, 0x54, + 0x0f, 0x5f, 0x5b, 0x55, 0x5b, 0x75, 0x79, 0x98, 0x0f, 0x97, 0x50, 0x46, 0x9b, + 0x58, 0xcb, 0x10, 0x70, 0x0b, 0xdf, 0xcf, 0xc6, 0x28, 0xac, 0x85, 0xc0, 0x7f, + 0xb3, 0xc0, 0x42, 0x00, 0x32, 0x5b, 0x75, 0xf2, 0xdf, 0x38, 0x6c, 0xdc, 0xa6, + 0x72, 0x3f, 0x15, 0x4d, 0xca, 0x23, 0x10, 0x4f, 0x6a, 0x01, 0x4e, 0x64, 0x6f, + 0x1b, 0x71, 0xec, 0x03, 0xca, 0xc8, 0xe4, 0x57, 0x65, 0x96, 0x15, 0xc2, 0x11, + 0x7e, 0x21, 0x91, 0x62, 0x0c, 0xe9, 0x70, 0x7b, 0xe3, 0xd8, 0x29, 0x7a, 0x73, + 0x06, 0xa5, 0x60, 0xff, 0x23, 0x15, 0x42, 0xbb, 0x21, 0xc3, 0xde, 0xd2, 0xf2, + 0x3b, 0x2a, 0x50, 0x20, 0x50, 0xd6, 0x00, 0x09, 0xa4, 0xea, 0x70, 0xad, 0xa5, + 0x21, 0xcc, 0x7c, 0xf8, 0xf4, 0x3c, 0xef, 0x20, 0x5e, 0x19, 0x68, 0x40, 0xee, + 0x5b, 0xc9, 0xdb, 0xaa, 0xf3, 0x46, 0xb8, 0x7c, 0x29, 0x2a, 0xb9, 0x38, 0x9d, + 0x3f, 0x24, 0xff, 0xe7, 0x3c, 0x34, 0xee, 0x14, 0x8b, 0x51, 0x90, 0x1f, 0x0a, + 0x85, 0xbb, 0x75, 0x1d, 0x62, 0x66, 0xc9, 0x03, 0x5b, 0x77, 0x9d, 0x76, 0x9d, + 0x49, 0x5c, 0x11, 0x44, 0x96, 0x2b, 0x9a, 0x38, 0xc1, 0x1d, 0xf9, 0x3e, 0x83, + 0x40, 0x09, 0xdb, 0x0a, 0xfb, 0x35, 0x4a, 0x8d, 0x29, 0x44, 0xd0, 0xe9, 0x74, + 0xa0, 0x0b, 0x7a, 0x4e, 0x64, 0xeb, 0x49, 0x4c, 0x30, 0x71, 0x3b, 0x03, 0x06, + 0x07, 0x8e, 0x16, 0x98, 0x65, 0x5e, 0x37, 0xc9, 0xfc, 0x22, 0xe4, 0xb5, 0x1d, + 0x41, 0xe5, 0xee, 0x03, 0xf9, 0xbd, 0x90, 0x65, 0x2b, 0x53, 0x72, 0x30, 0x3a, + 0x3a, 0x39, 0x02, 0xb8, 0x38, 0x79, 0x93, 0x67, 0x07, 0x79, 0x2b, 0x68, 0x3f, + 0xf1, 0x79, 0x1e, 0xf5, 0x01, 0x8e, 0x08, 0x3f, 0x20, 0x3b, 0xce, 0x72, 0xd3, + 0x83, 0xbe, 0x4e, 0x10, 0xd5, 0xae, 0xb2, 0x7a, 0x13, 0x05, 0xb6, 0xec, 0x57, + 0x89, 0xc1, 0x3f, 0xc2, 0xcd, 0x32, 0x7a, 0x91, 0x00, 0xa5, 0x46, 0x11, 0x64, + 0x64, 0x1c, 0xa8, 0x18, 0x0d, 0xdf, 0x4e, 0xb7, 0x4b, 0x37, 0x46, 0xf1, 0xeb, + 0x97, 0x0a, 0xe9, 0x75, 0xcc, 0x8d, 0x79, 0x12, 0xa8, 0xaf, 0x82, 0x8e, 0xad, + 0xdc, 0x54, 0x41, 0xa4, 0x02, 0xb4, 0xdb, 0x27, 0xc0, 0x58, 0xb0, 0x90, 0x28, + 0x16, 0x54, 0x23, 0x32, 0x69, 0x83, 0xf5, 0xf2, 0x7f, 0x80, 0x46, 0xc3, 0x4b, + 0x94, 0x7e, 0x1a, 0x45, 0x92, 0xc2, 0x0e, 0x86, 0x38, 0x6c, 0x37, 0x73, 0xc8, + 0xa1, 0x96, 0x64, 0xe2, 0xd8, 0x50, 0xc3, 0xe0, 0x28, 0xf2, 0x90, 0x8e, 0x52, + 0xe4, 0x6c, 0x8e, 0xf7, 0x5d, 0x26, 0xdc, 0x72, 0x0f, 0xe5, 0xec, 0x1f, 0x59, + 0x66, 0x2d, 0x95, 0x10, 0x00, + ], + txid: [ + 0x14, 0x12, 0xb0, 0x3c, 0xe8, 0xc2, 0x93, 0x90, 0xc5, 0x75, 0xfa, 0x01, 0x28, + 0x85, 0xb6, 0xb5, 0xab, 0xbb, 0xef, 0x8d, 0xe9, 0x20, 0x97, 0x20, 0x7c, 0x7f, + 0x3a, 0xf3, 0xcf, 0xb4, 0xd4, 0x6b, + ], + auth_digest: [ + 0xb9, 0x87, 0x60, 0x7e, 0x8a, 0x69, 0x2f, 0x82, 0x98, 0xc9, 0x9c, 0x50, 0xf9, + 0x1f, 0xe0, 0x18, 0xe2, 0xd2, 0x57, 0xc4, 0xce, 0xe0, 0xa2, 0x23, 0xd2, 0xfc, + 0x54, 0x39, 0x50, 0x89, 0x70, 0x6c, + ], + amounts: vec![241823465123147], + script_pubkeys: vec![vec![0x6a, 0x53, 0x63, 0x52, 0xac, 0x00, 0xac]], + transparent_input: Some(0), sighash_shielded: [ - 0xa8, 0x19, 0x23, 0x45, 0x81, 0x21, 0xcd, 0xb5, 0x64, 0x75, 0xf9, 0x6e, 0xd2, - 0xd9, 0x20, 0x80, 0xf5, 0x6e, 0xd3, 0x06, 0xe4, 0x1f, 0x45, 0x01, 0x2a, 0xf5, - 0x7c, 0xfb, 0x34, 0x8a, 0xcd, 0xa1, + 0x74, 0x80, 0x8f, 0xf3, 0xcc, 0x14, 0x95, 0xaa, 0xa2, 0xca, 0xea, 0x5e, 0xc3, + 0xcb, 0xdb, 0x87, 0xfd, 0xe2, 0xc0, 0x6a, 0xde, 0x48, 0xc7, 0x45, 0x52, 0x85, + 0xe0, 0xff, 0xa3, 0x65, 0xc8, 0xc4, ], sighash_all: Some([ - 0x0b, 0x75, 0x2d, 0xe9, 0x48, 0x55, 0x2d, 0x11, 0x70, 0xc1, 0xc9, 0x38, 0x2d, - 0xb1, 0x4e, 0xb4, 0x6a, 0xda, 0x2d, 0xb1, 0x64, 0xda, 0x90, 0x14, 0x1a, 0x62, - 0x6a, 0x03, 0x5d, 0xf3, 0xb4, 0xd5, + 0x4a, 0x64, 0x2f, 0x6b, 0xba, 0x11, 0xa0, 0xbf, 0x54, 0xb4, 0xe7, 0xb4, 0xa6, + 0xeb, 0x87, 0x8f, 0x63, 0x10, 0x70, 0x33, 0xa2, 0x43, 0x57, 0x9c, 0xb2, 0xbb, + 0x2c, 0x83, 0xe6, 0x27, 0xc7, 0xbb, ]), sighash_none: Some([ - 0xef, 0x8a, 0xf0, 0x6f, 0x6a, 0xec, 0x49, 0x39, 0x4f, 0x46, 0x6d, 0xdd, 0x5a, - 0x6c, 0x11, 0x2f, 0x80, 0xde, 0xd7, 0x68, 0x7c, 0xa2, 0x1c, 0x10, 0x78, 0x2f, - 0xda, 0x26, 0x1b, 0xe5, 0xf6, 0x87, + 0xc4, 0x23, 0xc3, 0x1c, 0xd2, 0xc7, 0x4d, 0xbb, 0x6b, 0xa1, 0x75, 0x48, 0x2e, + 0x10, 0x15, 0x95, 0x4c, 0x1d, 0x39, 0xfe, 0x54, 0x66, 0x72, 0xdf, 0x18, 0x37, + 0xe0, 0x77, 0xd0, 0xcb, 0x2f, 0xbd, ]), sighash_single: Some([ - 0x9b, 0xa5, 0x4f, 0xf9, 0xf5, 0xda, 0x79, 0xfb, 0xa5, 0x1c, 0xdf, 0x48, 0x91, - 0xc0, 0x21, 0xd8, 0xdb, 0xe8, 0x88, 0xbf, 0x21, 0x5f, 0x7c, 0x2f, 0xd7, 0x9e, - 0x43, 0xba, 0x5d, 0xd1, 0xcc, 0x76, + 0xe1, 0xbd, 0x21, 0x45, 0x71, 0x3b, 0x4c, 0x55, 0x2a, 0x16, 0x70, 0x5e, 0x21, + 0x8b, 0x24, 0xcd, 0x25, 0xdc, 0x84, 0x44, 0x87, 0x41, 0xf5, 0x23, 0xe2, 0xc8, + 0xe8, 0x48, 0xaf, 0xd4, 0x3d, 0x15, ]), sighash_all_anyone: Some([ - 0x22, 0x54, 0x83, 0x9a, 0x4e, 0xd2, 0x5a, 0x96, 0x54, 0x8d, 0xd8, 0x04, 0xdc, - 0x33, 0x38, 0x29, 0xba, 0xa4, 0xda, 0x26, 0x77, 0xe9, 0xc8, 0x3d, 0xf8, 0xab, - 0x2d, 0x5a, 0x57, 0xcd, 0x66, 0x6a, + 0xce, 0x2c, 0x46, 0x8a, 0xbc, 0xee, 0x28, 0xf0, 0x91, 0x76, 0x16, 0xc9, 0x8c, + 0xe5, 0x97, 0x44, 0x60, 0xff, 0x3a, 0xfc, 0x8c, 0x68, 0xd7, 0xa8, 0x97, 0x24, + 0xd9, 0x37, 0xf8, 0xa1, 0x58, 0x02, ]), sighash_none_anyone: Some([ - 0x14, 0x97, 0xbf, 0x31, 0xdf, 0x9b, 0x0f, 0x6e, 0x77, 0xe1, 0x17, 0x3a, 0x9e, - 0xb4, 0x08, 0xef, 0x5e, 0x19, 0xd8, 0x44, 0xaa, 0x9a, 0x85, 0xb6, 0xe7, 0x54, - 0x6f, 0x30, 0xde, 0x1f, 0x0b, 0xe2, + 0xb2, 0x6f, 0x6d, 0xa2, 0xce, 0x38, 0xca, 0x83, 0x78, 0xcd, 0xaf, 0x4e, 0xce, + 0xf9, 0x6b, 0x2f, 0x07, 0xfa, 0x3d, 0x79, 0x19, 0x42, 0x8e, 0x7a, 0xdf, 0xff, + 0xe9, 0x26, 0x33, 0x1e, 0x52, 0x90, ]), sighash_single_anyone: Some([ - 0x39, 0xac, 0xb5, 0xfd, 0x91, 0xa1, 0x2d, 0xd4, 0x07, 0x36, 0xfc, 0x6a, 0xba, - 0x53, 0xfd, 0xf5, 0x2f, 0x05, 0x83, 0x80, 0x94, 0xc3, 0xaa, 0x6e, 0xf3, 0x45, - 0xd9, 0x4a, 0x1a, 0x07, 0x24, 0xbf, + 0x9c, 0x62, 0x69, 0xd6, 0xab, 0x5e, 0x2d, 0x01, 0xdb, 0xe5, 0x1d, 0x25, 0xbb, + 0x7b, 0x3b, 0xd9, 0x4c, 0xd3, 0x47, 0x3b, 0x34, 0x38, 0xb5, 0x52, 0x44, 0xbc, + 0x03, 0x5d, 0xb9, 0x38, 0x8b, 0x1b, ]), }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x66, + 0x05, 0xf3, 0xf8, 0xaf, 0xbc, 0xcb, 0x12, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0xaf, 0xbc, 0xcb, 0x12, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfd, 0xb9, 0x01, 0xc3, 0x86, + 0xc5, 0xac, 0xc8, 0xa8, 0x6a, 0xc8, 0x94, 0xc6, 0x97, 0xe1, 0x9b, 0x9d, 0xce, + 0x86, 0xc8, 0xa0, 0x52, 0xc4, 0xa1, 0xc5, 0x8a, 0xc3, 0x9d, 0xc8, 0xb1, 0xcd, + 0xbb, 0xc6, 0x80, 0xc9, 0x83, 0xc7, 0xa0, 0xc4, 0x93, 0xe1, 0x9a, 0xb1, 0x4a, + 0xc5, 0xa2, 0xcd, 0xb4, 0xc3, 0xbe, 0xe1, 0x9b, 0x8a, 0xc5, 0xb2, 0xc3, 0xa5, + 0xc8, 0xad, 0xe1, 0x9a, 0xac, 0x59, 0xe1, 0x9b, 0xb0, 0xc9, 0x80, 0xc4, 0x86, + 0xe1, 0x9b, 0x95, 0xcd, 0xbb, 0x7b, 0x30, 0xc3, 0x94, 0xc2, 0xbf, 0x5b, 0x57, + 0xc6, 0xb3, 0xc6, 0x9e, 0x5e, 0xc7, 0x87, 0xc7, 0x9b, 0xc6, 0xa5, 0xc6, 0xb3, + 0xe1, 0x9b, 0xa9, 0xc4, 0xb6, 0xe1, 0x9a, 0xb2, 0x34, 0xc8, 0xb3, 0xc2, 0xac, + 0xc7, 0xbe, 0xe2, 0xb1, 0xb2, 0xe1, 0x9a, 0xa8, 0xc3, 0x90, 0xc3, 0x81, 0xc7, + 0x85, 0xe1, 0x9b, 0x90, 0xc7, 0x93, 0xc7, 0x8e, 0xc5, 0x8f, 0xe1, 0x9b, 0x90, + 0xc7, 0xb2, 0xc8, 0x85, 0x59, 0xe1, 0x9b, 0x8f, 0x60, 0xc5, 0x91, 0xc6, 0x89, + 0x69, 0x30, 0xe1, 0x9b, 0xa9, 0x6c, 0xc5, 0xbf, 0xc6, 0xab, 0xc5, 0xb4, 0xc9, + 0x82, 0xc4, 0xb4, 0x75, 0xcd, 0xb4, 0x70, 0xce, 0x85, 0xc2, 0xaa, 0xcd, 0xb7, + 0xc6, 0x83, 0xc7, 0x8f, 0xe1, 0x9b, 0x89, 0x5a, 0xc7, 0x96, 0xc3, 0x83, 0xc9, + 0x87, 0x4d, 0xe1, 0x9a, 0xaf, 0xc4, 0x99, 0xc5, 0xa1, 0xce, 0x86, 0xc7, 0xbe, + 0xc4, 0x83, 0xe2, 0xb1, 0xa8, 0xc7, 0xbb, 0xe1, 0x9b, 0x92, 0xe1, 0x9a, 0xb6, + 0xc8, 0xbc, 0xc2, 0xb8, 0xc3, 0x8b, 0xc8, 0xab, 0xc7, 0xa6, 0xe1, 0x9b, 0xa9, + 0xe1, 0x9b, 0x80, 0xc3, 0x89, 0xc8, 0xbb, 0xc8, 0x9b, 0xc7, 0x92, 0x47, 0xc5, + 0x8a, 0xe1, 0x9b, 0x98, 0xc5, 0xbf, 0xc3, 0xb1, 0xc2, 0xaf, 0xc4, 0xad, 0x7b, + 0xc4, 0x96, 0xc4, 0x98, 0xc6, 0xbb, 0x31, 0xc2, 0xa9, 0xe2, 0xb1, 0xab, 0x4a, + 0xc2, 0xb5, 0xc6, 0x94, 0xc6, 0x9d, 0xc8, 0xab, 0x79, 0xc3, 0x8f, 0xc8, 0x9f, + 0xc7, 0xbe, 0xc7, 0x95, 0x48, 0xe2, 0xb1, 0xaf, 0xc8, 0xa1, 0xc3, 0x85, 0xe2, + 0xb1, 0xa8, 0xc6, 0x93, 0xc4, 0x9f, 0xc6, 0xa2, 0xc3, 0xbd, 0xc5, 0xb5, 0xce, + 0x87, 0xe1, 0x9b, 0xa1, 0xc8, 0xb9, 0xc8, 0xa4, 0xc8, 0x87, 0xc8, 0xa8, 0x68, + 0xc8, 0xac, 0xc7, 0x8b, 0xc8, 0x95, 0xc5, 0xaa, 0xcd, 0xb3, 0xc6, 0x8e, 0xc6, + 0x8d, 0xc3, 0x9f, 0xc8, 0xa5, 0xe1, 0x9b, 0xab, 0xc3, 0xa1, 0xe1, 0x9a, 0xa0, + 0xc4, 0x92, 0xe1, 0x9b, 0xaf, 0xc8, 0xb8, 0xc7, 0x81, 0xc2, 0xae, 0x64, 0xc8, + 0xa1, 0x49, 0xc4, 0x88, 0xc8, 0xa0, 0xc7, 0xad, 0xc3, 0x98, 0xc5, 0xa2, 0xc7, + 0x83, 0xc5, 0xb2, 0xc8, 0x84, 0xcd, 0xbd, 0x2d, 0xc6, 0x90, 0xc5, 0x96, 0xe1, + 0x9b, 0x89, 0xc4, 0xb4, 0xc6, 0x86, 0xe1, 0x9a, 0xa6, 0xc5, 0x8d, 0xcd, 0xb5, + 0xc9, 0x89, 0xe1, 0x9b, 0xab, 0xc3, 0xab, 0xc6, 0x89, 0xe1, 0x9b, 0x82, 0xc5, + 0xb1, 0xc6, 0xbb, 0xc9, 0x8e, 0xc7, 0x90, 0xc3, 0x9e, 0xc3, 0x90, 0xc4, 0xae, + 0xe1, 0x9b, 0x9c, 0x60, 0xc4, 0xa6, 0xc4, 0x92, 0xc7, 0xba, 0xc8, 0x8c, 0xc6, + 0xbd, 0xe1, 0x9a, 0xba, 0xc3, 0x99, 0xc5, 0xb7, 0xc2, 0xb7, 0x00, 0x00, 0xc1, + 0xc4, 0x9b, 0x2e, 0xe2, 0xb1, 0xab, 0x48, 0xc3, 0xa7, 0xc4, 0xba, 0x34, 0x5b, + 0xc3, 0x9c, 0xc6, 0xbe, 0xc4, 0xbb, 0xc2, 0xbd, 0xc6, 0xa0, 0xc8, 0xa3, 0xc6, + 0xb2, 0xc5, 0xa5, 0xc7, 0x97, 0xc5, 0x93, 0xc6, 0xa6, 0xc4, 0xb0, 0xc4, 0x99, + 0xc6, 0xb1, 0xc6, 0x86, 0xc4, 0xaa, 0xc5, 0xbe, 0xe2, 0xb1, 0xa1, 0xc7, 0xb4, + 0xc4, 0xb2, 0xe1, 0x9b, 0x85, 0xc8, 0x98, 0xc7, 0xb3, 0xc8, 0xbb, 0x73, 0xc8, + 0x9e, 0xe1, 0x9a, 0xb8, 0xc6, 0xb6, 0xc8, 0x87, 0xe1, 0x9a, 0xbd, 0xc6, 0x88, + 0xc8, 0x93, 0xc7, 0xa4, 0x66, 0xc8, 0xbc, 0x36, 0xc4, 0x8e, 0xc3, 0x95, 0xe2, + 0xb1, 0xb8, 0xc3, 0xb6, 0xe1, 0x9b, 0xaa, 0x34, 0xc5, 0xab, 0xe2, 0xb1, 0xb4, + 0xc9, 0x80, 0xc3, 0xa1, 0xc2, 0xab, 0xc2, 0xbd, 0xc7, 0x9a, 0x53, 0x6e, 0xc8, + 0xa5, 0xe1, 0x9a, 0xae, 0xc5, 0xb4, 0xc7, 0xa1, 0xc9, 0x88, 0xc4, 0xb3, 0xc3, + 0xbd, 0xe1, 0x9a, 0xa2, 0xc9, 0x86, 0xc6, 0xb0, 0x73, 0xc4, 0xb6, 0xc6, 0x83, + 0xc6, 0x84, 0xc3, 0xae, 0xcd, 0xb6, 0xc6, 0x8b, 0xc7, 0x92, 0xc8, 0xad, 0xc6, + 0x9e, 0xc8, 0x8a, 0x6e, 0xc5, 0x9c, 0xc8, 0xab, 0xc3, 0x97, 0xc2, 0xbc, 0xc8, + 0xbe, 0xc7, 0x95, 0xc7, 0x87, 0x32, 0xc5, 0x90, 0xc2, 0xa3, 0xc5, 0xac, 0x64, + 0x4d, 0xc8, 0x93, 0x5f, 0xc5, 0x8b, 0xc3, 0xa8, 0xc9, 0x85, 0x5a, 0x01, 0x92, + 0xb6, 0xc7, 0x07, 0x88, 0x30, 0x73, 0xfd, 0xb5, 0xff, 0xdb, 0x9b, 0xb1, 0x93, + 0x9e, 0xbb, 0xb7, 0x62, 0xbc, 0xa4, 0x86, 0x63, 0xef, 0xa9, 0xd3, 0x42, 0x84, + 0xde, 0xbf, 0x45, 0xe6, 0x87, 0x9f, 0x9d, 0xd9, 0xdb, 0x63, 0xf7, 0xcb, 0x88, + 0xb1, 0x4a, 0x9c, 0xa8, 0x6a, 0xa1, 0xae, 0xa5, 0x03, 0xdd, 0xca, 0xd3, 0x0d, + 0x0d, 0x99, 0xca, 0x6c, 0x01, 0xe1, 0x31, 0x9b, 0xf2, 0x4a, 0xaf, 0x08, 0x67, + 0xc9, 0x0c, 0xb5, 0x40, 0xfe, 0xdf, 0xd4, 0x03, 0xa8, 0x99, 0x8f, 0xd4, 0x8d, + 0xcc, 0xf4, 0xb3, 0xa7, 0x58, 0xa3, 0xba, 0x92, 0x30, 0x5c, 0xc0, 0x76, 0x98, + 0xf1, 0x2e, 0xe1, 0xe4, 0x17, 0x13, 0x70, 0xac, 0x39, 0xdf, 0x0e, 0x46, 0x6d, + 0xc8, 0xec, 0xc3, 0x9d, 0xa5, 0xee, 0x47, 0xb6, 0x82, 0x1d, 0xbb, 0xa9, 0x97, + 0x0f, 0x03, 0x58, 0xed, 0x68, 0x26, 0x49, 0x60, 0x5c, 0x7b, 0xfe, 0xe6, 0x93, + 0x1a, 0x29, 0x5b, 0x14, 0xa3, 0x40, 0x76, 0x00, 0x07, 0x4e, 0xdc, 0x79, 0xfa, + 0x61, 0xe6, 0x80, 0x01, 0x29, 0xa5, 0x33, 0xb3, 0x96, 0x3a, 0x4e, 0x7d, 0x1b, + 0xb5, 0x6c, 0xfd, 0x70, 0x52, 0x3c, 0xd4, 0x0d, 0x80, 0x6a, 0x20, 0xb1, 0xa0, + 0x5e, 0xc2, 0x0b, 0x76, 0xdb, 0x29, 0xe0, 0xdc, 0xf6, 0x59, 0x11, 0x08, 0xd3, + 0x34, 0xb4, 0xa5, 0x90, 0xf7, 0xa0, 0x26, 0xb0, 0xeb, 0x02, 0x80, 0x4d, 0x39, + 0x17, 0x46, 0x6e, 0x99, 0x91, 0x20, 0x64, 0x1c, 0xe0, 0x7e, 0xbc, 0xdc, 0x99, + 0x42, 0x60, 0x82, 0xe0, 0x77, 0x1f, 0x15, 0x9c, 0x82, 0x6a, 0x9b, 0xe6, 0xce, + 0xd7, 0x2d, 0x0e, 0x9c, 0xfa, 0x5b, 0x4b, 0x8a, 0x86, 0x40, 0xca, 0x34, 0x88, + 0xa1, 0xeb, 0x2b, 0x6e, 0x37, 0x4e, 0x8c, 0x2e, 0x00, + ], + txid: [ + 0x84, 0xe4, 0xe6, 0xf6, 0xb9, 0x5c, 0x8d, 0x88, 0x4a, 0xc1, 0x17, 0x73, 0xc1, + 0xf4, 0x1c, 0x64, 0xb0, 0x09, 0x09, 0xd6, 0x27, 0x4d, 0xe7, 0xaa, 0xe9, 0x77, + 0x07, 0x22, 0x49, 0x84, 0x69, 0x34, + ], + auth_digest: [ + 0x9e, 0x32, 0x9b, 0xb3, 0xe7, 0xd2, 0x54, 0x33, 0xdc, 0xd4, 0x48, 0x29, 0x73, + 0x91, 0x2a, 0x02, 0x7c, 0x88, 0x2a, 0x94, 0xf0, 0x3a, 0x9b, 0x8d, 0x04, 0x56, + 0x57, 0x34, 0x4c, 0x78, 0x24, 0xab, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0x84, 0xe4, 0xe6, 0xf6, 0xb9, 0x5c, 0x8d, 0x88, 0x4a, 0xc1, 0x17, 0x73, 0xc1, + 0xf4, 0x1c, 0x64, 0xb0, 0x09, 0x09, 0xd6, 0x27, 0x4d, 0xe7, 0xaa, 0xe9, 0x77, + 0x07, 0x22, 0x49, 0x84, 0x69, 0x34, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + TestVector { + tx: vec![ + 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xdf, + 0xa2, 0x32, 0x10, 0x37, 0xea, 0xe4, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x37, 0xea, 0xe4, 0x16, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0x4f, 0xd7, 0x64, 0x2d, 0x1f, 0x91, 0x82, + 0xd1, 0x2e, 0x6a, 0x09, 0xbd, 0xb6, 0xef, 0xba, 0x60, 0x1a, 0x73, 0x70, 0xbc, + 0xda, 0xf6, 0xfb, 0x9b, 0x9c, 0xfb, 0x49, 0x7a, 0x2f, 0x49, 0xab, 0x60, 0x3f, + 0xc2, 0x09, 0x29, 0x8d, 0xc0, 0x51, 0xfc, 0x7a, 0xa7, 0xff, 0x40, 0x8d, 0x88, + 0x77, 0x1b, 0x23, 0x4f, 0xfd, 0x1d, 0x8c, 0xe3, 0x7f, 0xad, 0xc3, 0xa0, 0x84, + 0xe4, 0x01, 0x0f, 0x89, 0x2d, 0xda, 0x35, 0x7a, 0xe3, 0xba, 0x88, 0x66, 0x93, + 0xef, 0xbb, 0x06, 0xd8, 0x2e, 0x1f, 0xe8, 0x5c, 0x93, 0x55, 0x34, 0x45, 0xf0, + 0x44, 0xa3, 0x9b, 0x74, 0xdd, 0xe7, 0xa3, 0xd9, 0xf3, 0x57, 0x98, 0x69, 0x57, + 0x8c, 0x47, 0xdb, 0x5b, 0x3d, 0xda, 0x86, 0xaa, 0xb1, 0xec, 0x9f, 0x58, 0xd9, + 0x62, 0x26, 0xc6, 0xb9, 0x1d, 0xc0, 0xf0, 0x3f, 0xe8, 0xd7, 0xdf, 0x23, 0x0f, + 0x07, 0xb2, 0xfb, 0x94, 0x87, 0x76, 0x60, 0x1e, 0x9c, 0x83, 0xf6, 0xc1, 0xcf, + 0x87, 0x6f, 0xc8, 0xed, 0x44, 0xad, 0xa0, 0xe1, 0x60, 0x8f, 0x48, 0x5c, 0x6d, + 0x75, 0x67, 0x8b, 0x3c, 0x00, 0xe9, 0x67, 0xd3, 0x4a, 0x9c, 0xf1, 0x02, 0x8c, + 0x17, 0x05, 0xfa, 0x37, 0x67, 0xf4, 0x6d, 0x4b, 0xab, 0x70, 0x28, 0xb0, 0x9b, + 0x20, 0x38, 0xfc, 0x1b, 0x72, 0x7f, 0x61, 0x9e, 0x61, 0xc4, 0xfc, 0x16, 0xbf, + 0xfe, 0x65, 0x7e, 0x99, 0x12, 0x6a, 0xc5, 0x18, 0x4f, 0xc8, 0x7f, 0x5e, 0x53, + 0x01, 0x88, 0x64, 0x23, 0xb3, 0x56, 0x87, 0x59, 0x09, 0xec, 0x92, 0xb3, 0x2d, + 0x33, 0x08, 0x42, 0x53, 0xa1, 0xb9, 0x7c, 0x5d, 0x2e, 0xd6, 0x6c, 0x7e, 0x22, + 0xd1, 0x85, 0x58, 0xfe, 0x82, 0xb5, 0xec, 0x88, 0xc6, 0x07, 0x05, 0x82, 0xfa, + 0xcf, 0x75, 0x6d, 0x70, 0x32, 0x38, 0xd9, 0xaf, 0x94, 0x19, 0x96, 0x6b, 0xe4, + 0x62, 0xdf, 0xbd, 0x31, 0x5c, 0x5b, 0xfa, 0xf0, 0x44, 0xaa, 0x69, 0x5a, 0x05, + 0xe6, 0x9d, 0x3d, 0x41, 0xe7, 0x73, 0x78, 0x75, 0x1d, 0x4e, 0x02, 0xc2, 0x66, + 0xdf, 0xb5, 0xcb, 0x6a, 0x7c, 0x40, 0x08, 0xf9, 0x44, 0x88, 0x83, 0x11, 0xe6, + 0xde, 0x37, 0xdc, 0x7b, 0xdf, 0x65, 0xd7, 0x0c, 0xab, 0x3e, 0x07, 0x8a, 0xb4, + 0x4e, 0x23, 0x2b, 0x41, 0x1c, 0xaf, 0xb2, 0x88, 0x4e, 0x26, 0x45, 0x95, 0xbe, + 0xed, 0xf9, 0xd4, 0x9a, 0x79, 0x36, 0xbb, 0x28, 0x7f, 0xe2, 0x8e, 0x1c, 0x29, + 0x63, 0x5e, 0xae, 0xca, 0x74, 0x7d, 0x06, 0x87, 0xcf, 0x46, 0x59, 0x02, 0xd2, + 0x5f, 0x5e, 0x51, 0x58, 0x48, 0x1d, 0xaa, 0xcd, 0xd3, 0x00, 0xb4, 0x77, 0x40, + 0xbc, 0x0c, 0x62, 0x77, 0xb4, 0x47, 0xcc, 0x26, 0x64, 0x04, 0x42, 0x43, 0xdd, + 0x48, 0x11, 0x40, 0x4e, 0xcb, 0xd7, 0xc7, 0xa6, 0x3c, 0x9f, 0xb7, 0xd9, 0x37, + 0xbc, 0xd8, 0x12, 0xc2, 0x34, 0x59, 0x23, 0xb5, 0x90, 0x26, 0x83, 0xbd, 0x2e, + 0xd5, 0x4c, 0x01, 0xae, 0x04, 0x19, 0xa7, 0xf5, 0x4e, 0x8a, 0x3a, 0x59, 0xc6, + 0xa6, 0xda, 0xcf, 0x89, 0xc7, 0x37, 0x0e, 0x79, 0xb5, 0x60, 0x13, 0x6a, 0x2b, + 0x00, 0xdd, 0xb6, 0x07, 0x4d, 0x74, 0xff, 0xc5, 0xc5, 0xdf, 0xd0, 0x6b, 0x6c, + 0x51, 0x9a, 0xbe, 0xc3, 0x59, 0x6a, 0x47, 0x61, 0x13, 0xbe, 0x41, 0x38, 0xee, + 0xad, 0x5f, 0xfd, 0xe8, 0x6b, 0x1e, 0x32, 0x40, 0x1f, 0xa3, 0x84, 0x62, 0x32, + 0xd0, 0xb3, 0xc9, 0xbd, 0x56, 0x88, 0xb6, 0x4a, 0x33, 0x09, 0x38, 0x16, 0x2a, + 0x8b, 0x89, 0x29, 0xd7, 0x0c, 0x1b, 0x67, 0x53, 0x62, 0xf4, 0xc2, 0xa9, 0xbb, + 0x6b, 0x7f, 0x91, 0xeb, 0xd4, 0x7d, 0x26, 0x3c, 0xf0, 0xa4, 0x05, 0xa2, 0x8b, + 0xa7, 0x41, 0x56, 0x44, 0xf9, 0x3b, 0x6c, 0xdf, 0xa3, 0xec, 0xeb, 0xb7, 0xb8, + 0xd4, 0xee, 0x8b, 0x94, 0xb2, 0x7b, 0x61, 0xe4, 0x03, 0x5e, 0xd6, 0xa4, 0x77, + 0x46, 0x7f, 0x4a, 0x32, 0x0b, 0x8a, 0x4e, 0xba, 0x0a, 0xb5, 0x6c, 0x26, 0x3e, + 0x4b, 0xfb, 0xe2, 0x6a, 0x41, 0x8e, 0xd1, 0xcd, 0xe6, 0x18, 0x4b, 0x89, 0x50, + 0xfe, 0x7a, 0xac, 0x7f, 0x20, 0xa4, 0x7b, 0xa1, 0xbf, 0xf9, 0x80, 0x4f, 0x53, + 0xf6, 0x93, 0x23, 0xdb, 0x84, 0x75, 0x20, 0xa6, 0x58, 0x47, 0xb3, 0x03, 0x4c, + 0x4e, 0x08, 0x1b, 0xb4, 0xb8, 0x69, 0x26, 0x3b, 0x5f, 0x9b, 0x3a, 0x7a, 0x83, + 0x3b, 0x6e, 0x4c, 0xa7, 0x90, 0xcc, 0xf9, 0xfd, 0xae, 0x80, 0x79, 0xe5, 0x56, + 0x09, 0x27, 0x2c, 0x63, 0xb5, 0x49, 0xb0, 0xc8, 0x5f, 0x11, 0x0c, 0xc9, 0xc9, + 0x58, 0x68, 0x01, 0x14, 0xb3, 0x11, 0x74, 0x80, 0xaf, 0x57, 0xcb, 0x15, 0x9e, + 0xdf, 0xbe, 0x5c, 0xb9, 0xc6, 0x2b, 0xce, 0x2c, 0xf2, 0xab, 0x29, 0xb6, 0x67, + 0x11, 0xac, 0x7a, 0xa5, 0x3a, 0x74, 0x9f, 0xfa, 0x83, 0x90, 0x7e, 0xcb, 0x69, + 0x12, 0xaa, 0x56, 0x96, 0x38, 0xde, 0xa1, 0x9e, 0x54, 0x41, 0x61, 0x1e, 0xfc, + 0xa3, 0x20, 0x99, 0x65, 0x3e, 0x8a, 0x5c, 0xa1, 0xfb, 0xbd, 0xba, 0xb1, 0xd6, + 0x44, 0x71, 0xec, 0x32, 0x0e, 0xc3, 0x8e, 0xa4, 0x88, 0x40, 0x0c, 0x9b, 0x1f, + 0x4e, 0x8c, 0xb5, 0x48, 0x0c, 0x0e, 0x92, 0x42, 0xb0, 0x86, 0xa8, 0x0e, 0xee, + 0xd4, 0x90, 0xae, 0x32, 0x00, 0x0c, 0x80, 0x09, 0xec, 0xb7, 0x1f, 0xfa, 0x39, + 0xf4, 0xf3, 0xb5, 0x74, 0x9c, 0xfd, 0x1b, 0xef, 0xe0, 0xd9, 0x66, 0x7a, 0xb3, + 0x02, 0x20, 0xc2, 0xdc, 0x04, 0x39, 0x36, 0x98, 0xb2, 0xcf, 0xa2, 0x04, 0x92, + 0xf2, 0x50, 0xce, 0x14, 0x32, 0x35, 0x81, 0x58, 0xe8, 0xca, 0x44, 0x7d, 0xc9, + 0x5b, 0x03, 0x00, 0x70, 0x3d, 0xf7, 0xb1, 0x39, 0xd7, 0x45, 0xce, 0x1f, 0xc3, + 0x40, 0x78, 0x77, 0x01, 0xfb, 0x51, 0xdd, 0x5e, 0x48, 0xb8, 0x95, 0x09, 0x41, + 0x7d, 0x88, 0x89, 0x00, 0x80, 0x63, 0xf9, 0xba, 0x01, 0x5a, 0x07, 0xd8, 0xd3, + 0x9b, 0xbd, 0x00, 0x76, 0x2f, 0x59, 0x5a, 0xfa, 0xd8, 0xd8, 0x59, 0xea, 0xab, + 0xf0, 0xd8, 0x2d, 0x46, 0x33, 0xcf, 0x82, 0x98, 0xb0, 0x9b, 0xea, 0x3f, 0x22, + 0x28, 0x55, 0xa9, 0x2a, 0x08, 0x43, 0xf5, 0x2f, 0xa5, 0x8d, 0xb3, 0xa1, 0x75, + 0xc3, 0x0d, 0x2a, 0xbe, 0x64, 0x82, 0x64, 0x90, 0xcb, 0xe6, 0xca, 0x14, 0x88, + 0xfe, 0x3a, 0x01, 0x5a, 0x94, 0x6d, 0xc9, 0xc4, 0x5a, 0xc3, 0x09, 0x25, 0x72, + 0x7a, 0x13, 0xe0, 0x89, 0x78, 0xf7, 0x24, 0x03, 0x47, 0x20, 0x8a, 0x4d, 0x25, + 0x38, 0xc2, 0xd5, 0x61, 0x24, 0x37, 0x8c, 0x22, 0xc0, 0x4e, 0x23, 0xdc, 0x28, + 0xb1, 0x50, 0x19, 0xbe, 0x77, 0x6d, 0x70, 0xbf, 0xc1, 0xd2, 0x64, 0x5b, 0x5e, + 0x80, 0xd1, 0xfd, 0x84, 0x19, 0xdf, 0x72, 0x90, 0x43, 0x80, 0xe2, 0xe1, 0xfc, + 0x4d, 0xd1, 0xdf, 0x1b, 0xa3, 0xdf, 0xe4, 0x80, 0xcc, 0x84, 0x6d, 0x51, 0x51, + 0x4a, 0x06, 0x5e, 0xd7, 0x62, 0x78, 0x7a, 0xfd, 0x6e, 0xb9, 0x0b, 0xdf, 0x8f, + 0xbb, 0xad, 0x5e, 0xb3, 0xd2, 0x3f, 0xdc, 0x8c, 0x54, 0xcc, 0xa1, 0x0f, 0xa1, + 0xdc, 0xd6, 0xcc, 0xb7, 0x0b, 0x36, 0xec, 0x8d, 0x11, 0x77, 0x09, 0xbd, 0xef, + 0xfb, 0xb8, 0xb3, 0x59, 0xcd, 0xe5, 0xf2, 0xa7, 0x59, 0xd9, 0x74, 0x39, 0x9d, + 0x4f, 0x79, 0x64, 0x6b, 0x21, 0x57, 0x22, 0x92, 0xbc, 0xcf, 0x8e, 0x01, 0x59, + 0x45, 0x70, 0xe1, 0xb8, 0xaa, 0x0f, 0x9c, 0xe2, 0x9c, 0x63, 0xc9, 0xa1, 0xb4, + 0x0a, 0x0a, 0xdb, 0xf5, 0x5e, 0xcc, 0x7f, 0x61, 0xa7, 0x3a, 0xaf, 0x04, 0x01, + 0x87, 0x74, 0xc9, 0xa8, 0x46, 0xfd, 0xc3, 0x00, 0x39, 0x49, 0xb0, 0x95, 0x5d, + 0x77, 0x35, 0x6d, 0x88, 0x0a, 0xa1, 0x99, 0x8a, 0xcd, 0xb2, 0x08, 0xde, 0xf3, + 0x5a, 0xf6, 0xda, 0x93, 0x00, 0x2c, 0x52, 0xf1, 0xd0, 0xc8, 0x78, 0x78, 0x1d, + 0x0b, 0x3b, 0xe3, 0x84, 0x81, 0x3d, 0x49, 0xaf, 0x63, 0xd9, 0xbe, 0xa8, 0x4e, + 0xb5, 0xf0, 0xaf, 0x8b, 0x45, 0x77, 0x94, 0x98, 0xc9, 0xae, 0x1f, 0x35, 0x15, + 0x30, 0xfa, 0x04, 0xe7, 0xb6, 0xe1, 0x26, 0xc9, 0x6a, 0x83, 0xe8, 0x3d, 0x06, + 0x8a, 0x00, 0xfd, 0xd0, 0x2c, 0x9a, 0xf6, 0x47, 0xc5, 0xbc, 0xb8, 0xee, 0x7e, + 0x5a, 0x3a, 0xf3, 0x46, 0x15, 0x83, 0x17, 0x7d, 0x65, 0x5b, 0x6f, 0x34, 0xc4, + 0x99, 0x32, 0x2b, 0x65, 0xda, 0x6e, 0xb6, 0xb9, 0xe1, 0xf4, 0xd5, 0x90, 0x21, + 0x25, 0xb6, 0x4c, 0x93, 0xda, 0x74, 0xcc, 0x1a, 0x35, 0x60, 0x18, 0xd4, 0x67, + 0xa1, 0xbc, 0x73, 0x52, 0xa6, 0xcd, 0x2b, 0xc0, 0xa2, 0x1b, 0xdc, 0x7c, 0xc5, + 0x32, 0x1e, 0x3b, 0x7a, 0x17, 0x53, 0xc1, 0x13, 0xce, 0x76, 0xc9, 0x97, 0x1f, + 0x8d, 0xef, 0xa0, 0x39, 0x91, 0xf4, 0x1f, 0x22, 0xee, 0xe7, 0xf3, 0x6d, 0x79, + 0xcc, 0xa9, 0xc0, 0xe0, 0x1b, 0x26, 0xc4, 0x65, 0x11, 0x18, 0xea, 0x77, 0x15, + 0x14, 0xc7, 0x7e, 0xd6, 0x0c, 0xd5, 0x24, 0x51, 0x94, 0x2d, 0xc8, 0x5b, 0x3f, + 0xba, 0x44, 0x8b, 0x2d, 0x63, 0x10, 0xf2, 0x77, 0x79, 0x42, 0x83, 0x2e, 0x21, + 0xcf, 0x3d, 0x44, 0x87, 0x4f, 0x8d, 0x04, 0xa8, 0x05, 0x26, 0xc6, 0x9f, 0xd3, + 0xb5, 0x10, 0x49, 0xe6, 0x92, 0xba, 0x45, 0xa7, 0x02, 0xee, 0x12, 0x51, 0x4a, + 0xc2, 0xe1, 0x89, 0x4f, 0x9b, 0x83, 0xd7, 0x56, 0xd0, 0x93, 0x96, 0x97, 0xca, + 0x98, 0x2b, 0x68, 0x7c, 0x9e, 0xd7, 0xe0, 0xb2, 0x32, 0x77, 0x07, 0x3c, 0x19, + 0x30, 0xa4, 0x73, 0xd1, 0x66, 0x8e, 0xf2, 0xe9, 0xae, 0x96, 0x63, 0xcf, 0xf0, + 0x58, 0x16, 0x62, 0x6c, 0xd3, 0xc5, 0xbf, 0x77, 0x16, 0x53, 0xd7, 0x78, 0x51, + 0x81, 0x35, 0x5c, 0x05, 0xae, 0xd2, 0x4a, 0x99, 0xc4, 0xb6, 0x74, 0xd2, 0x4a, + 0x0f, 0x08, 0xf4, 0xb0, 0xcf, 0xbe, 0x90, 0xf2, 0xfd, 0xba, 0xb4, 0x24, 0x82, + 0xe9, 0x8f, 0x13, 0xff, 0xfc, 0xd1, 0xad, 0x33, 0xf4, 0xf4, 0xc0, 0x4d, 0xeb, + 0xc8, 0x9f, 0x40, 0xb5, 0xdb, 0xf6, 0x45, 0x46, 0xc5, 0x20, 0xdc, 0xa5, 0xd0, + 0xec, 0xf3, 0xf6, 0x5d, 0x3a, 0x77, 0xd0, 0x12, 0x9f, 0x60, 0x03, 0x71, 0x10, + 0x8a, 0xac, 0x30, 0xa9, 0xec, 0xa8, 0xbe, 0xe5, 0x52, 0x4f, 0xab, 0x67, 0x1f, + 0xc0, 0x86, 0x58, 0x76, 0x2c, 0x87, 0x38, 0xab, 0xc9, 0xfa, 0x76, 0x93, 0xe3, + 0x9d, 0x39, 0xd7, 0x03, 0xd5, 0xcd, 0x94, 0x2b, 0x5a, 0x55, 0xfe, 0xda, 0xfe, + 0xcc, 0xae, 0xf7, 0x02, 0x17, 0x69, 0xe9, 0x2c, 0xc9, 0xd3, 0xac, 0x7b, 0x4c, + 0x23, 0xb3, 0x3f, 0xc2, 0x23, 0x21, 0x85, 0x4b, 0xa3, 0x3f, 0x49, 0xee, 0xba, + 0xdd, 0xca, 0x29, 0xb3, 0x56, 0x40, 0xe4, 0xf0, 0xc2, 0xfd, 0x8c, 0x12, 0xb9, + 0x84, 0x52, 0x97, 0x60, 0xe0, 0x65, 0xfe, 0xcb, 0xa1, 0x21, 0x86, 0xd2, 0x0a, + 0xee, 0xc3, 0xda, 0x58, 0xfc, 0x35, 0x9b, 0xa8, 0x25, 0xe5, 0xb8, 0xe2, 0xe1, + 0x8f, 0x12, 0xcf, 0x29, 0x49, 0xc3, 0x12, 0xf6, 0x3c, 0x4d, 0xd7, 0xa7, 0x9b, + 0x0e, 0x66, 0xb9, 0xc8, 0xb6, 0x6f, 0xe8, 0x9a, 0xd7, 0xed, 0xc6, 0x2a, 0xc4, + 0xd2, 0x07, 0xe2, 0x77, 0xb9, 0x33, 0xb0, 0xc2, 0x06, 0xdd, 0x7c, 0x22, 0xd2, + 0xdb, 0x26, 0x33, 0xfc, 0x01, 0xa8, 0x3c, 0x24, 0xfc, 0xad, 0x40, 0x9c, 0xee, + 0xd5, 0x36, 0xa6, 0xd3, 0xe8, 0xe0, 0x8d, 0x42, 0xb5, 0x13, 0x48, 0x97, 0xb4, + 0x36, 0xbf, 0xf3, 0xa1, 0xbc, 0xef, 0xc5, 0x3a, 0xec, 0x30, 0xed, 0x89, 0x11, + 0x0f, 0x90, 0x10, 0x97, 0x8d, 0xf7, 0x0c, 0xe4, 0xac, 0x6f, 0x1d, 0x60, 0x25, + 0x50, 0xcf, 0x20, 0xe4, 0x44, 0x36, 0x06, 0x3e, 0x3a, 0x15, 0xb5, 0x1e, 0xcb, + 0xaa, 0x4a, 0x59, 0xdf, 0x2f, 0xe0, 0x15, 0xcb, 0x36, 0x37, 0xf3, 0x72, 0x83, + 0x04, 0xec, 0x3a, 0x72, 0x4f, 0x31, 0x49, 0x27, 0x5e, 0x7b, 0x63, 0x4b, 0xd8, + 0x82, 0x78, 0xd9, 0x3f, 0xab, 0x6b, 0x94, 0x16, 0x68, 0xd9, 0x13, 0xdb, 0xcd, + 0x89, 0x21, 0x3f, 0x3b, 0xac, 0xfc, 0xfd, 0x20, 0x02, 0xea, 0x86, 0x6f, 0x3f, + 0x17, 0x07, 0x35, 0x12, 0x64, 0xb6, 0x67, 0x88, 0xf4, 0xeb, 0x7f, 0x68, 0xc5, + 0xa5, 0x36, 0xfa, 0x9c, 0x13, 0x0d, 0x8f, 0x6d, 0xa1, 0xbb, 0x03, 0x1d, 0xf9, + 0xe2, 0x20, 0xd8, 0xca, 0x8b, 0xab, 0x46, 0xdd, 0xcf, 0x9c, 0x35, 0xfa, 0x63, + 0x48, 0x09, 0xa7, 0x3d, 0xcd, 0x91, 0xb7, 0x9f, 0x5b, 0xcb, 0x98, 0x7b, 0x20, + 0x54, 0x4b, 0xb5, 0x2a, 0xaf, 0x0d, 0x9e, 0x3a, 0xea, 0x91, 0x18, 0x3b, 0x8c, + 0x48, 0x12, 0x78, 0x6c, 0x8d, 0xc9, 0xb9, 0x30, 0x73, 0xa3, 0x05, 0x26, 0x71, + 0xb3, 0x71, 0x50, 0x52, 0x5d, 0x59, 0x24, 0xaa, 0x6e, 0xe5, 0xe0, 0x36, 0xc1, + 0xbe, 0xb9, 0xda, 0xf6, 0xf9, 0x4d, 0x05, 0x10, 0x0b, 0x2d, 0xdd, 0x36, 0xb1, + 0x3c, 0x4d, 0xf9, 0xd4, 0x56, 0xf6, 0x48, 0x0b, 0xb1, 0xaf, 0xa6, 0x20, 0x26, + 0xea, 0x80, 0x97, 0x94, 0xd3, 0xb7, 0x4d, 0x78, 0x01, 0x7e, 0xe0, 0xfb, 0xca, + 0x83, 0xcc, 0x7e, 0x5c, 0xbd, 0x52, 0x7a, 0xcd, 0xe7, 0x46, 0x53, 0x73, 0x51, + 0x2c, 0x07, 0x64, 0x6a, 0x62, 0xc6, 0x0f, 0x5c, 0x16, 0xc2, 0xef, 0x9f, 0x41, + 0x8d, 0x8c, 0x7d, 0x18, 0x8f, 0x7b, 0x13, 0xdd, 0x45, 0x38, 0xa5, 0x5d, 0x18, + 0x6a, 0xd6, 0x36, 0x2a, 0x58, 0x9a, 0x9f, 0x52, 0xb2, 0x5e, 0x61, 0x6f, 0xb2, + 0xa3, 0x57, 0xac, 0xca, 0xde, 0x63, 0x57, 0xfa, 0x5a, 0x42, 0xa7, 0x98, 0xe4, + 0x17, 0x13, 0x11, 0xad, 0xe9, 0xcc, 0xfd, 0x15, 0xf2, 0x7c, 0x8c, 0x19, 0x72, + 0x17, 0x9d, 0x26, 0x1f, 0xb9, 0xb0, 0x9b, 0xc7, 0xa0, 0x36, 0xc1, 0x05, 0x55, + 0x9b, 0x04, 0x38, 0x9d, 0xfd, 0x8a, 0x7b, 0xe2, 0xa3, 0xae, 0x2b, 0xba, 0x2a, + 0xfb, 0xd1, 0xe9, 0xbf, 0x90, 0x05, 0xc8, 0x02, 0xeb, 0x99, 0x24, 0x27, 0x4c, + 0x16, 0x00, 0x00, 0x98, 0x04, 0x54, 0x1c, 0x2c, 0x58, 0x97, 0x24, 0xef, 0xc6, + 0x9b, 0xc4, 0x65, 0xd0, 0x90, 0x8e, 0x09, 0xb8, 0x4d, 0x1f, 0x50, 0x41, 0x2b, + 0xb0, 0x7f, 0x47, 0xfb, 0x9f, 0x0d, 0x47, 0x29, 0x28, 0x36, 0x14, 0xca, 0xca, + 0xb6, 0x14, 0xef, 0x65, 0xce, 0xba, 0x13, 0x96, 0xb5, 0x24, 0x9d, 0x2c, 0x61, + 0x70, 0x4f, 0xb6, 0xf3, 0x48, 0x44, 0x71, 0x83, 0xf9, 0x88, 0x2a, 0x98, 0xae, + 0x9c, 0x71, 0xa7, 0x66, 0x33, 0xe0, 0x5b, 0x33, 0x3a, 0x1b, 0xce, 0xee, 0xc9, + 0xbd, 0x44, 0xb8, 0x87, 0x6f, 0xab, 0x6c, 0xd7, 0x2a, 0x5e, 0x33, 0x5c, 0x0b, + 0xd9, 0x23, 0x07, 0x97, 0xcc, 0x50, 0x5c, 0xad, 0x8f, 0x3f, 0xbb, 0x74, 0x5f, + 0xcf, 0x0f, 0x3d, 0x78, 0xc5, 0x19, 0x5f, 0x67, 0xff, 0x84, 0xe3, 0x91, 0x2b, + 0xbe, 0x76, 0xbc, 0x29, 0x37, 0x9f, 0xd1, 0x19, 0xfc, 0xe4, 0xa5, 0xfc, 0x5c, + 0x78, 0x2f, 0xc2, 0x3e, 0xb4, 0xc6, 0xc7, 0x7c, 0x9e, 0x8d, 0x58, 0xff, 0x42, + 0x74, 0xeb, 0xa8, 0xc6, 0x3f, 0x0f, 0xa1, 0x70, 0xa6, 0x3c, 0x3f, 0x02, 0x4f, + 0x28, 0x35, 0xfc, 0x9e, 0xc2, 0x45, 0xf8, 0xb5, 0x7c, 0x34, 0x06, 0x27, 0xeb, + 0xa4, 0x5c, 0x73, 0x0f, 0xc1, 0x14, 0x8b, 0x76, 0x4f, 0x0d, 0x23, 0xf5, 0x1b, + 0x89, 0x85, 0x3c, 0x28, 0x87, 0x32, 0x2f, 0x26, 0x2b, 0xbf, 0xbe, 0x95, 0xcc, + 0x43, 0x1b, 0x07, 0xb4, 0x4b, 0x0b, 0xb7, 0xa1, 0xd1, 0x7d, 0xa7, 0xf1, 0xcc, + 0x99, 0x90, 0xfa, 0x4c, 0xf6, 0x5a, 0x23, 0x2b, 0xb2, 0xca, 0xc3, 0xa5, 0xdd, + 0x2a, 0x96, 0x4f, 0x93, 0x95, 0x9d, 0x54, 0x34, 0xdf, 0x02, 0x3b, 0x94, 0xa5, + 0x8a, 0xee, 0x08, 0xea, 0xb3, 0x27, 0x4e, 0xe0, 0x0f, 0x20, 0x13, 0x09, 0xbf, + 0xfb, 0x6a, 0x44, 0xa3, 0xa2, 0x43, 0x7c, 0x81, 0xd8, 0xd4, 0x6b, 0x9e, 0x41, + 0x3b, 0xa0, 0x66, 0xd8, 0x78, 0x07, 0x38, 0x5f, 0xfe, 0x4e, 0x48, 0x60, 0x0e, + 0x6c, 0x83, 0x0f, 0x0b, 0x09, 0x16, 0xca, 0xcd, 0x16, 0xee, 0x6a, 0xaa, 0x5a, + 0x93, 0x14, 0x0d, 0x1d, 0xda, 0xca, 0xe4, 0xa7, 0x59, 0x0f, 0x5a, 0xb0, 0x38, + 0x03, 0xfd, 0xd5, 0x01, 0xc8, 0xab, 0xc5, 0x99, 0xe2, 0xb1, 0xb3, 0xc6, 0xac, + 0xc3, 0x98, 0xc7, 0x8c, 0x2e, 0xc7, 0x85, 0xc8, 0xb4, 0xc5, 0x9e, 0xc8, 0x9d, + 0xe1, 0x9b, 0x9d, 0xc4, 0xaf, 0xe1, 0x9a, 0xb1, 0x23, 0xcd, 0xb4, 0xc3, 0x9a, + 0xc8, 0x88, 0xc6, 0xbe, 0xc3, 0xac, 0xc6, 0xa1, 0xc4, 0x9d, 0x5f, 0xe1, 0x9b, + 0x84, 0xc4, 0x92, 0x6f, 0xe2, 0xb1, 0xa3, 0xc6, 0x9f, 0xc7, 0xa4, 0x7c, 0x36, + 0x61, 0xc9, 0x8f, 0xc4, 0xaa, 0xc2, 0xa2, 0xc7, 0xb7, 0xc8, 0x8c, 0xc2, 0xb9, + 0xc7, 0xb7, 0xc3, 0x90, 0xe2, 0xb1, 0xbe, 0xc6, 0x86, 0xcd, 0xb1, 0xe1, 0x9a, + 0xb1, 0xc3, 0xad, 0x57, 0xe1, 0x9a, 0xae, 0xc3, 0xb5, 0xc9, 0x8d, 0x78, 0xc7, + 0xa0, 0xe1, 0x9b, 0xa4, 0xc7, 0xb2, 0xe1, 0x9b, 0x98, 0xc8, 0xa6, 0xc8, 0xae, + 0xe1, 0x9b, 0xa5, 0xc7, 0x8f, 0xe1, 0x9a, 0xa0, 0x42, 0x77, 0xc4, 0x8a, 0xc5, + 0x91, 0xc6, 0xb2, 0xc6, 0xb9, 0xc7, 0x90, 0xc6, 0x83, 0xc2, 0xba, 0xc5, 0x88, + 0xc4, 0xb6, 0xc6, 0x9d, 0xc6, 0xba, 0xc7, 0x82, 0xe2, 0xb1, 0xa1, 0xe1, 0x9b, + 0x80, 0xc9, 0x86, 0xc3, 0xbd, 0x3f, 0xc7, 0x8c, 0xc7, 0xbe, 0x44, 0xe2, 0xb1, + 0xa9, 0x3d, 0xc4, 0xa9, 0xc7, 0xbb, 0x4f, 0xc7, 0x93, 0xc4, 0x97, 0xe1, 0x9b, + 0xa3, 0xc2, 0xaf, 0xe1, 0x9a, 0xa9, 0xc4, 0xa7, 0xc3, 0xbc, 0x72, 0xc5, 0x9e, + 0x48, 0xc8, 0x81, 0xc5, 0xa1, 0xc9, 0x84, 0xc6, 0xa6, 0xe1, 0x9b, 0x9e, 0xce, + 0x88, 0x58, 0xe2, 0xb1, 0xa4, 0xc8, 0x9c, 0xc6, 0xbf, 0xc4, 0x9b, 0xc6, 0xa1, + 0xc5, 0xa6, 0xc8, 0x98, 0xc8, 0xad, 0xc8, 0xb2, 0xc4, 0xbb, 0xc3, 0xb1, 0xc8, + 0xa1, 0xe1, 0x9a, 0xa8, 0xc6, 0xba, 0xc4, 0x80, 0xc4, 0x87, 0xc4, 0xa7, 0xe1, + 0x9b, 0xa3, 0x29, 0xc5, 0x98, 0xc6, 0xa3, 0xc3, 0xbd, 0xc4, 0xbd, 0x2b, 0xc9, + 0x87, 0x4b, 0xc5, 0x83, 0xe1, 0x9b, 0xaf, 0xc2, 0xbc, 0xc6, 0xb7, 0xe1, 0x9a, + 0xa5, 0xc9, 0x89, 0xc3, 0xa4, 0x3b, 0xc6, 0x90, 0xc5, 0xa4, 0xce, 0x8a, 0xc2, + 0xbe, 0xc4, 0xb1, 0xe2, 0xb1, 0xb1, 0xc9, 0x88, 0xc8, 0xae, 0xc8, 0xbb, 0xcd, + 0xb7, 0xc6, 0xb0, 0xc5, 0x92, 0xc8, 0x8d, 0xc3, 0xac, 0xc8, 0x91, 0xc5, 0xb0, + 0xe1, 0x9b, 0xad, 0x52, 0xc5, 0xa2, 0xc6, 0x97, 0xe2, 0xb1, 0xa5, 0xce, 0x8c, + 0xc8, 0x8d, 0xc4, 0xa1, 0xc5, 0xa9, 0xe2, 0xb1, 0xab, 0xc5, 0x8b, 0x40, 0x25, + 0x3e, 0xc3, 0x8c, 0xe1, 0x9a, 0xb1, 0xc5, 0x96, 0xc7, 0xb4, 0xc3, 0x93, 0xc4, + 0xbd, 0xc4, 0x93, 0xc8, 0x83, 0xc8, 0xa9, 0x5f, 0xe1, 0x9a, 0xb3, 0xe1, 0x9a, + 0xbd, 0xcd, 0xb4, 0xc5, 0x8e, 0x4b, 0xc7, 0xb1, 0xc7, 0xbf, 0xe1, 0x9b, 0x90, + 0xc2, 0xa4, 0xc7, 0xa4, 0xc4, 0x91, 0xe1, 0x9b, 0x88, 0xe1, 0x9a, 0xb0, 0xc6, + 0xa9, 0xc6, 0xbf, 0xce, 0x89, 0xc7, 0x90, 0xe1, 0x9a, 0xb6, 0xc3, 0xaa, 0x34, + 0xc3, 0xa5, 0x42, 0x49, 0x6d, 0xc7, 0xaf, 0xe2, 0xb1, 0xb9, 0xc4, 0x92, 0xc7, + 0x8a, 0xc2, 0xa9, 0xc6, 0xaf, 0xc4, 0x87, 0xc6, 0x85, 0xc5, 0x9b, 0xe1, 0x9a, + 0xa0, 0xc8, 0xbd, 0xcd, 0xb2, 0xe1, 0x9b, 0xa7, 0xc3, 0x85, 0xc4, 0x9f, 0xe2, + 0xb1, 0xb9, 0xe1, 0x9b, 0x9b, 0xc7, 0x99, 0xe1, 0x9b, 0x88, 0xc5, 0x81, 0x6c, + 0xc7, 0xa6, 0xc6, 0xb2, 0xc6, 0x91, 0x77, 0xc6, 0x9a, 0xc3, 0x97, 0xc2, 0xa1, + 0xc6, 0x85, 0xc6, 0x84, 0x5a, 0x04, 0xef, 0xc0, 0xaa, 0x2c, 0x96, 0xfc, 0xc7, + 0x50, 0xc2, 0x82, 0xbf, 0x98, 0x4a, 0x7c, 0x81, 0xbf, 0xac, 0x6b, 0x2a, 0xf1, + 0x69, 0xa1, 0x92, 0x09, 0x25, 0x34, 0xc5, 0xee, 0xcc, 0x22, 0x35, 0xd5, 0x86, + 0x34, 0xc3, 0x09, 0x34, 0xc4, 0x1a, 0x40, 0x2c, 0x8b, 0x8a, 0xa5, 0x86, 0x0f, + 0x43, 0xb5, 0x30, 0xf0, 0x3d, 0x1e, 0x04, 0x3b, 0x6b, 0x23, 0x20, 0xf0, 0xec, + 0x0a, 0xd6, 0x0c, 0xb9, 0xe4, 0x3f, 0x6a, 0xbc, 0xe3, 0xb8, 0xbf, 0x7f, 0xc8, + 0x9c, 0xdb, 0x14, 0x1e, 0xa4, 0x50, 0xc4, 0xab, 0xca, 0x42, 0x1e, 0x3c, 0xea, + 0x93, 0xf3, 0xab, 0xd3, 0x0b, 0xe6, 0xdb, 0x09, 0x35, 0x52, 0x9d, 0xed, 0x0b, + 0x50, 0xec, 0xef, 0x9f, 0x59, 0x6d, 0xb0, 0x1a, 0x87, 0xa8, 0xda, 0xdb, 0x82, + 0x7a, 0x1b, 0xe8, 0x35, 0x79, 0x9b, 0x33, 0xc9, 0x9a, 0x82, 0x2b, 0x73, 0xf7, + 0xe6, 0x62, 0xed, 0x6f, 0x86, 0x03, 0x45, 0xa2, 0x62, 0x83, 0xc1, 0xb4, 0x08, + 0x0e, 0xcd, 0xf5, 0x79, 0xd7, 0x0e, 0x7b, 0x0c, 0x0a, 0xb7, 0xb4, 0x56, 0x01, + 0xb0, 0x0b, 0x54, 0x7d, 0xe2, 0x09, 0xb4, 0x05, 0xa7, 0x1d, 0xd5, 0xe5, 0x7e, + 0xf2, 0x48, 0x9b, 0x2e, 0x80, 0xfd, 0xb6, 0x62, 0x5e, 0xc1, 0x48, 0x90, 0xc1, + 0x70, 0xb4, 0x66, 0x6a, 0xa5, 0x89, 0x8b, 0x9a, 0x0e, 0xed, 0xd1, 0xc2, 0x53, + 0x2e, 0xa0, 0x94, 0xe0, 0xe5, 0xf8, 0xce, 0xbb, 0x41, 0x1e, 0x04, 0x3b, 0x6b, + 0x23, 0x20, 0xf0, 0xec, 0x0a, 0xd6, 0x0c, 0xb9, 0xe4, 0x3f, 0x6a, 0xbc, 0xe3, + 0xb8, 0xbf, 0x7f, 0xc8, 0x9c, 0xdb, 0x14, 0x1e, 0xa4, 0x50, 0xc4, 0xab, 0xca, + 0x42, 0x1e, 0x71, 0x1a, 0x24, 0x44, 0x7f, 0xe0, 0x6c, 0xf8, 0x45, 0x5a, 0x44, + 0x06, 0x5e, 0x24, 0x52, 0x76, 0x3b, 0x0d, 0x93, 0xf8, 0x6a, 0x31, 0x47, 0xbd, + 0x08, 0x75, 0x7a, 0x4f, 0x7a, 0xa7, 0x79, 0x3c, 0x97, 0x82, 0x1c, 0x2b, 0x57, + 0x22, 0xc9, 0xdb, 0xad, 0x20, 0xf6, 0xa1, 0xe7, 0xad, 0xf6, 0x8b, 0xf2, 0x22, + 0x7b, 0xe5, 0x12, 0x04, 0xe9, 0xde, 0xca, 0x8d, 0x9e, 0xb6, 0x26, 0x6f, 0x65, + 0x9b, 0x05, 0xc9, 0x03, 0x23, 0xa3, 0x1f, 0xa0, 0x27, 0xa6, 0x86, 0x8d, 0x91, + 0xd7, 0x03, 0xce, 0x57, 0x2c, 0x3a, 0xbf, 0x01, 0xb8, 0x40, 0x10, 0x55, 0x4c, + 0xe7, 0x6e, 0x52, 0x71, 0xb2, 0x8d, 0x2b, 0xce, 0x3d, 0xa5, 0xd3, 0x19, 0xa0, + 0x36, 0xbf, 0xdf, 0x60, 0x1f, 0x43, 0x9a, 0x29, 0xbb, 0x0b, 0xcf, 0xd3, 0xa9, + 0x1e, 0x04, 0x3b, 0x6b, 0x23, 0x20, 0xf0, 0xec, 0x0a, 0xd6, 0x0c, 0xb9, 0xe4, + 0x3f, 0x6a, 0xbc, 0xe3, 0xb8, 0xbf, 0x7f, 0xc8, 0x9c, 0xdb, 0x14, 0x1e, 0xa4, + 0x50, 0xc4, 0xab, 0xca, 0x42, 0x1e, 0x99, 0xb3, 0x1f, 0xe7, 0xa9, 0x51, 0x00, + 0x2e, 0xe5, 0xdc, 0x01, 0x27, 0x03, 0x24, 0xb1, 0x10, 0x10, 0x37, 0x89, 0x29, + 0x42, 0x90, 0x7c, 0x6e, 0x19, 0x50, 0x9a, 0x6c, 0x5f, 0x66, 0x59, 0x3a, 0xf7, + 0xf4, 0x36, 0x3c, 0x49, 0x15, 0xe6, 0x1b, 0xda, 0x34, 0x06, 0x9b, 0xd9, 0x86, + 0xb6, 0x37, 0x7f, 0xf6, 0x04, 0xed, 0xe5, 0xa7, 0x42, 0x5d, 0xb2, 0x88, 0x86, + 0xb1, 0xa2, 0x61, 0x36, 0x6d, 0x28, 0x3a, 0xae, 0x64, 0xa9, 0xee, 0x8d, 0x2d, + 0x61, 0x8b, 0x08, 0xd8, 0xc8, 0x16, 0xad, 0x49, 0x3f, 0x21, 0xb3, 0xd3, 0x11, + 0xee, 0xcf, 0xdd, 0x54, 0x44, 0xc4, 0x5a, 0xcc, 0x4a, 0x94, 0xce, 0x52, 0x8f, + 0x08, 0xdf, 0xf2, 0x7e, 0x43, 0xdf, 0xc6, 0x7b, 0x93, 0xda, 0xc0, 0xad, 0x2d, + 0x55, 0xee, 0x7f, 0xc6, 0x1e, 0x04, 0x3b, 0x6b, 0x23, 0x20, 0xf0, 0xec, 0x0a, + 0xd6, 0x0c, 0xb9, 0xe4, 0x3f, 0x6a, 0xbc, 0xe3, 0xb8, 0xbf, 0x7f, 0xc8, 0x9c, + 0xdb, 0x14, 0x1e, 0xa4, 0x50, 0xc4, 0xab, 0xca, 0x42, 0x1e, 0x0b, 0xce, 0x22, + 0x88, 0x50, 0xba, 0x7b, 0x94, 0x3a, 0x8d, 0x50, 0xff, 0xcb, 0x2a, 0x67, 0x06, + 0x51, 0xd3, 0x15, 0xd8, 0x71, 0x9c, 0x7b, 0x57, 0xf6, 0x37, 0xa3, 0x7e, 0xdd, + 0x32, 0x6a, 0x3c, 0x76, 0xf0, 0xa7, 0x69, 0x0c, 0x23, 0x68, 0x80, 0x16, 0x01, + 0x07, 0xc2, 0xb4, 0xc8, 0x5e, 0xcf, 0x2a, 0xd9, 0xf5, 0xdd, 0x26, 0x45, 0x62, + 0x6e, 0x40, 0x90, 0xf1, 0x00, 0x47, 0xcc, 0x13, 0x15, 0x00, 0xcb, 0xc4, 0x96, + 0xc2, 0xa3, 0xc8, 0xb2, 0xe1, 0x9b, 0x82, 0xe1, 0x9b, 0x8e, 0xc6, 0x83, 0xce, + 0x85, 0xc6, 0xb1, 0xc8, 0x94, 0xe1, 0x9b, 0x84, 0xc6, 0x80, 0xc5, 0x95, 0xc8, + 0xba, 0xc5, 0x9d, 0xc7, 0x80, 0x6f, 0xe1, 0x9a, 0xa5, 0xc3, 0x99, 0x4d, 0xce, + 0x86, 0xc7, 0x8c, 0xc7, 0x83, 0xc8, 0x9c, 0xc2, 0xb2, 0xc3, 0x8c, 0xe1, 0x9a, + 0xa4, 0xe2, 0xb1, 0xb1, 0xc3, 0xbe, 0x5a, 0x71, 0x3c, 0xc3, 0x82, 0xc9, 0x8a, + 0xc5, 0xad, 0xc4, 0x9f, 0xc3, 0x84, 0xc2, 0xaf, 0xc7, 0xb8, 0x6f, 0x2b, 0x25, + 0x78, 0xc4, 0xbf, 0xc3, 0xaa, 0x3f, 0xe1, 0x9a, 0xa7, 0xc8, 0x83, 0xc9, 0x8a, + 0x65, 0xc8, 0xaf, 0xc6, 0x8f, 0xc6, 0x9f, 0xe1, 0x9a, 0xbf, 0xc5, 0x9f, 0xc3, + 0xba, 0xe1, 0x9b, 0x9f, 0xc7, 0x83, 0xc6, 0x85, 0xc8, 0x87, 0xc6, 0x8d, 0xe2, + 0xb1, 0xb6, 0xe1, 0x9a, 0xbe, 0xc7, 0xb7, 0xc9, 0x85, 0xe2, 0xb1, 0xb9, 0x5c, + 0xc9, 0x82, 0xc6, 0xa4, 0xe1, 0x9a, 0xaf, 0xc9, 0x84, 0xc7, 0xbd, 0xe1, 0x9a, + 0xa5, 0xc3, 0xbe, 0xc5, 0x90, 0xc4, 0x8d, 0xc5, 0xba, 0x5c, 0xe1, 0x9b, 0x8c, + 0xc7, 0xa2, 0xc8, 0xaf, 0xc3, 0xab, 0xc2, 0xbc, 0xe1, 0x9a, 0xb0, 0xc3, 0xa4, + 0xe1, 0x9a, 0xb4, 0xe1, 0x9a, 0xb2, 0xc3, 0x89, 0xc4, 0xac, 0xe1, 0x9a, 0xb1, + 0xc5, 0xba, 0xc4, 0x97, 0xc3, 0xbc, 0xce, 0x84, 0xc6, 0xab, 0xc5, 0xad, 0xc5, + 0x9c, 0xc7, 0x8b, 0xc3, 0x80, 0x5a, 0x01, 0x08, 0x8d, 0xc4, 0x8c, 0xe0, 0x6b, + 0x16, 0x07, 0x50, 0x2e, 0x1f, 0x1b, 0xcd, 0x24, 0xb0, 0x58, 0x90, 0x74, 0xb8, + 0x49, 0x18, 0x28, 0x38, 0x04, 0x4a, 0xa4, 0x67, 0x9c, 0x77, 0xda, 0x0c, 0x1c, + 0xf2, 0xc8, 0x06, 0xb1, 0x1c, 0x58, 0x81, 0xdc, 0x44, 0xc7, 0x07, 0x14, 0x1e, + 0xa0, 0x21, 0xcd, 0xd9, 0x5e, 0xfa, 0x77, 0x3f, 0xb4, 0x19, 0x3f, 0x34, 0x98, + 0xe4, 0x23, 0xf1, 0xe6, 0x32, 0x90, 0x7e, 0xf2, 0xd4, 0xc2, 0x66, 0xf7, 0x81, + 0x46, 0x99, 0x0f, 0x87, 0x89, 0x4c, 0xd3, 0x00, 0x60, 0xca, 0x4a, 0x17, 0x32, + 0x63, 0xa5, 0x05, 0xb8, 0x52, 0x29, 0xd1, 0x54, 0xec, 0xaa, 0x23, 0x5e, 0x8f, + 0xa1, 0x07, 0x95, 0xc9, 0xda, 0x27, 0x41, 0xcd, 0x98, 0x71, 0x90, 0x16, 0xa9, + 0x01, 0x17, 0xa7, 0x6f, 0x04, 0xf0, 0x0b, 0x5c, 0x3d, 0x4b, 0xce, 0xd7, 0x9a, + 0x73, 0xbf, 0xb3, 0xa1, 0xc7, 0x8a, 0xd1, 0xad, 0xea, 0x50, 0x78, 0xf2, 0xf1, + 0xb0, 0x0f, 0x81, 0x5b, 0xc7, 0xa3, 0x0e, 0xf8, 0x58, 0x40, 0x07, 0x01, 0x33, + 0xe2, 0xb1, 0xbe, 0xc5, 0xae, 0xe1, 0x9b, 0xa7, 0x41, 0xcd, 0xb1, 0xc4, 0x9d, + 0xc5, 0x8d, 0x54, 0xc7, 0x9c, 0xc7, 0x87, 0xc3, 0x8f, 0x76, 0xc8, 0x9e, 0x2a, + 0xe2, 0xb1, 0xac, 0xc4, 0xbe, 0x3d, 0x6d, 0xc3, 0xa9, 0xe1, 0x9b, 0x9b, 0xe2, + 0xb1, 0xb5, 0xc7, 0xa1, 0xc6, 0xaa, 0xe2, 0xb1, 0xba, 0x68, 0xc7, 0xa1, 0x04, + 0x3f, 0x4d, 0x4f, 0xad, 0x1d, 0x8a, 0xea, 0x31, 0x48, 0xa4, 0x2a, 0x9e, 0x3b, + 0x9a, 0x42, 0x04, 0x85, 0x85, 0x09, 0x8e, 0xab, 0xcc, 0x9b, 0xda, 0xb4, 0x15, + 0x11, 0xfc, 0xa6, 0xfb, 0xfe, 0x69, 0x9e, 0xaf, 0x17, 0x3e, 0x36, 0xbe, 0x97, + 0x3d, 0x95, 0x6b, 0x93, 0xf3, 0x32, 0xd5, 0xc6, 0xd3, 0x2b, 0xa2, 0xef, 0x42, + 0x2f, 0x69, 0xab, 0xb3, 0x38, 0x12, 0x59, 0xc2, 0x9f, 0x37, 0x0f, 0xd4, 0x12, + 0x8c, 0x24, 0x78, 0xc5, 0x4f, 0x13, 0xc0, 0x82, 0xe8, 0xa9, 0x20, 0x28, 0xa7, + 0x70, 0xbc, 0x66, 0xf1, 0x3a, 0x18, 0x66, 0xb3, 0x55, 0xcc, 0xbc, 0x07, 0x8c, + 0xd4, 0xdc, 0x03, 0x6f, 0xda, 0xa8, 0x1c, 0xb2, 0xde, 0x99, 0xcc, 0x88, 0xf6, + 0x0a, 0x49, 0x46, 0x42, 0x87, 0xf5, 0x9f, 0xc7, 0x14, 0x8b, 0x1a, 0xfb, 0x4a, + 0x2f, 0x9b, 0xb8, 0x97, 0x14, 0xe1, 0xeb, 0x8c, 0x03, 0x61, 0xe5, 0x99, 0x2a, + 0x5b, 0x79, 0xcd, 0xbb, 0x91, 0xd9, 0xbf, 0x29, 0xeb, 0x59, 0x8c, 0xbb, 0x4b, + 0xda, 0x92, 0x3d, 0x26, 0xbe, 0xa9, 0xbe, 0x55, 0x43, 0xaf, 0xa9, 0x7f, 0xa6, + 0x30, 0xc1, 0xef, 0xc8, 0x58, 0x7a, 0x41, 0xad, 0x5f, 0x30, 0xd0, 0xef, 0x57, + 0x89, 0xf4, 0xd8, 0xa0, 0x57, 0xe3, 0x1a, 0x08, 0xd0, 0x93, 0x19, 0x92, 0xb1, + 0xb6, 0xce, 0x32, 0x21, 0x87, 0xd0, 0x90, 0x88, 0xf8, 0xc9, 0x3e, 0x1b, 0xf2, + 0x9c, 0x3c, 0xfc, 0x42, 0x2f, 0x69, 0xab, 0xb3, 0x38, 0x12, 0x59, 0xc2, 0x9f, + 0x37, 0x0f, 0xd4, 0x12, 0x8c, 0x24, 0x78, 0xc5, 0x4f, 0x13, 0xc0, 0x82, 0xe8, + 0xa9, 0x20, 0x28, 0xa7, 0x70, 0xbc, 0x66, 0xf1, 0x3a, 0x2c, 0x52, 0xd0, 0x4e, + 0xbd, 0x3c, 0xe1, 0x7c, 0x60, 0xd9, 0x22, 0x57, 0xea, 0x58, 0x69, 0x09, 0x45, + 0x01, 0xbb, 0x67, 0x12, 0x68, 0xb2, 0x24, 0x47, 0x7a, 0x8e, 0x01, 0x41, 0xd6, + 0xff, 0x37, 0xe2, 0x4f, 0xf1, 0xc7, 0x65, 0xe8, 0x4d, 0x26, 0x4d, 0xb8, 0x8f, + 0x00, 0x92, 0x8e, 0x64, 0xc4, 0x12, 0xbd, 0x59, 0x15, 0x1a, 0x65, 0x71, 0xc6, + 0x67, 0x09, 0x16, 0xb0, 0x70, 0x6b, 0x04, 0x4f, 0xe1, 0x4a, 0xbb, 0xd2, 0x69, + 0xc8, 0x7b, 0x0c, 0xf4, 0xb2, 0x45, 0x4d, 0x8e, 0x16, 0x35, 0xa8, 0xe7, 0xab, + 0x42, 0xdc, 0x16, 0x5a, 0x9d, 0xb4, 0xe6, 0x91, 0x9e, 0xa4, 0x9f, 0x3a, 0xfc, + 0xf3, 0x58, 0xd8, 0x69, 0xa1, 0x39, 0xab, 0xa4, 0x83, 0x67, 0xac, 0xad, 0x83, + 0x6e, 0xf6, 0xa1, 0xde, 0x48, 0x09, 0x5d, 0x42, 0x2f, 0x69, 0xab, 0xb3, 0x38, + 0x12, 0x59, 0xc2, 0x9f, 0x37, 0x0f, 0xd4, 0x12, 0x8c, 0x24, 0x78, 0xc5, 0x4f, + 0x13, 0xc0, 0x82, 0xe8, 0xa9, 0x20, 0x28, 0xa7, 0x70, 0xbc, 0x66, 0xf1, 0x3a, + 0xcb, 0x46, 0x12, 0x78, 0xb1, 0x6c, 0x45, 0x68, 0x90, 0xb2, 0x3d, 0x40, 0xbd, + 0x36, 0x04, 0x10, 0xf0, 0x01, 0x0a, 0x55, 0xf5, 0x05, 0xfe, 0x5e, 0x2d, 0xb2, + 0x01, 0xc7, 0x52, 0xe9, 0xb5, 0x31, 0x5b, 0xf8, 0xaa, 0x9e, 0x82, 0xd6, 0x49, + 0xab, 0x11, 0x73, 0xba, 0x2a, 0x51, 0x32, 0xe0, 0xcc, 0x50, 0x51, 0xcc, 0xf7, + 0x4c, 0x7a, 0x6a, 0x37, 0x07, 0xab, 0x59, 0x83, 0xf7, 0xcc, 0x27, 0x5c, 0xad, + 0x28, 0x34, 0x3d, 0x44, 0xe1, 0x4b, 0x1c, 0x2c, 0x59, 0x61, 0xbd, 0x25, 0x69, + 0xe0, 0xad, 0x28, 0x50, 0x8d, 0x0f, 0xaf, 0x08, 0xe6, 0xb5, 0xda, 0x23, 0x65, + 0x7d, 0x07, 0x57, 0x83, 0xb8, 0x7f, 0x32, 0x07, 0x05, 0x2d, 0xc7, 0x84, 0xd7, + 0x02, 0x96, 0x39, 0x29, 0x31, 0x2f, 0xa9, 0x45, 0x39, 0xd9, 0xcb, 0x42, 0x2f, + 0x69, 0xab, 0xb3, 0x38, 0x12, 0x59, 0xc2, 0x9f, 0x37, 0x0f, 0xd4, 0x12, 0x8c, + 0x24, 0x78, 0xc5, 0x4f, 0x13, 0xc0, 0x82, 0xe8, 0xa9, 0x20, 0x28, 0xa7, 0x70, + 0xbc, 0x66, 0xf1, 0x3a, 0xcd, 0xf6, 0x88, 0x43, 0xa8, 0xb9, 0x36, 0xa0, 0xcf, + 0x5e, 0x6a, 0xa8, 0xae, 0x1b, 0x80, 0xf6, 0x01, 0x61, 0xbf, 0x41, 0x4f, 0x28, + 0x02, 0x11, 0x11, 0x09, 0x21, 0xa9, 0xc8, 0x5f, 0x51, 0x04, 0xa0, 0x16, 0x8e, + 0x8e, 0x72, 0xde, 0x4f, 0x8a, 0xa0, 0x41, 0x32, 0xeb, 0x25, 0x88, 0x76, 0xf1, + 0x9d, 0x7b, 0xe5, 0xf2, 0xdd, 0x2b, 0x0b, 0x30, 0x4b, 0x92, 0x3b, 0x29, 0x52, + 0xd9, 0x1f, 0xde, 0x01, 0x1b, 0xe3, 0xa4, 0xd0, 0xaa, 0x0f, 0xce, 0x4b, 0x4d, + 0x1c, 0x85, 0x1a, 0x35, 0x8e, 0xb1, 0x3a, 0xa4, 0xd4, 0x31, 0x16, 0xed, 0x21, + 0xf6, 0x01, 0x5a, 0xeb, 0xb9, 0xb0, 0xfb, 0x3a, 0x94, 0xbc, 0xe5, 0x52, 0x05, + 0xdb, 0xb1, 0x94, 0xeb, 0xba, 0x32, 0x2f, 0xdc, 0x67, 0xb2, 0x52, 0x2c, 0x92, + 0x61, 0x21, 0xc7, 0xfa, 0x1a, 0xf1, 0x7e, 0xd0, 0x6c, 0x47, 0x27, 0x8f, 0x96, + 0x08, 0x92, 0x96, 0x08, 0x7a, 0x70, 0x4b, 0x7d, 0x0f, 0x84, 0x7d, 0x51, 0xd6, + 0xcc, 0x68, 0xac, 0xc5, 0x22, 0x07, 0x74, 0x73, 0x41, 0xf6, 0xb9, 0x8c, 0xb1, + 0xcd, 0x4f, 0xaf, 0xcd, 0x2b, 0xb0, 0xd0, 0x5b, 0xc7, + ], + txid: [ + 0x79, 0xca, 0x68, 0x7e, 0x8c, 0x5b, 0xb9, 0xa1, 0x18, 0xd7, 0x16, 0x81, 0x41, + 0x13, 0x55, 0x83, 0xf9, 0x68, 0xf3, 0xd9, 0x66, 0xd2, 0xf3, 0x8d, 0x3a, 0xc5, + 0x3e, 0x1a, 0x91, 0x99, 0x8b, 0xa9, + ], + auth_digest: [ + 0x12, 0x85, 0x20, 0xbe, 0xcd, 0x4c, 0x85, 0xae, 0xed, 0x39, 0x45, 0xeb, 0xd3, + 0xc1, 0x76, 0x6b, 0x47, 0xdd, 0xb3, 0xc1, 0x96, 0x95, 0xba, 0x3b, 0xad, 0x6c, + 0x6c, 0x02, 0x95, 0x58, 0xf4, 0xd6, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0x79, 0xca, 0x68, 0x7e, 0x8c, 0x5b, 0xb9, 0xa1, 0x18, 0xd7, 0x16, 0x81, 0x41, + 0x13, 0x55, 0x83, 0xf9, 0x68, 0xf3, 0xd9, 0x66, 0xd2, 0xf3, 0x8d, 0x3a, 0xc5, + 0x3e, 0x1a, 0x91, 0x99, 0x8b, 0xa9, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, ] } } From f160f25d1269d131a00fbcb004459ad3039e1621 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:50:01 +0200 Subject: [PATCH 51/85] Remove duplicate import --- zcash_primitives/src/transaction/builder.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index a0da4be2bc..0a59cdfed1 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -33,7 +33,6 @@ use crate::{ #[cfg(feature = "transparent-inputs")] use crate::transaction::components::transparent::builder::TransparentInputInfo; -use orchard::note::AssetBase; #[cfg(not(feature = "transparent-inputs"))] use std::convert::Infallible; From 4dbee84a8b58785be68dd4ad32758f3330f5ad34 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Thu, 25 Jul 2024 19:28:05 +0200 Subject: [PATCH 52/85] Reformat feature flag --- components/zcash_protocol/src/consensus.rs | 51 +++---- .../zcash_protocol/src/local_consensus.rs | 25 ++-- zcash_client_sqlite/src/testing.rs | 2 +- zcash_client_sqlite/src/wallet.rs | 4 +- zcash_client_sqlite/src/wallet/init.rs | 4 +- zcash_primitives/src/transaction/builder.rs | 52 +++---- zcash_primitives/src/transaction/mod.rs | 132 ++++++++++-------- zcash_primitives/src/transaction/sighash.rs | 7 +- .../src/transaction/sighash_v5.rs | 3 +- zcash_primitives/src/transaction/tests.rs | 19 +-- .../src/transaction/tests/data.rs | 24 ++-- zcash_primitives/src/transaction/txid.rs | 29 ++-- 12 files changed, 188 insertions(+), 164 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index 8326d385ac..86899e8e17 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -356,9 +356,8 @@ impl Parameters for MainNetwork { NetworkUpgrade::Nu5 => Some(BlockHeight(1_687_104)), #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => Some(BlockHeight(1_687_106)), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => { - Some(BlockHeight(1_687_107)) - } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + NetworkUpgrade::Nu7 => Some(BlockHeight(1_687_107)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -389,9 +388,8 @@ impl Parameters for TestNetwork { NetworkUpgrade::Nu5 => Some(BlockHeight(1_842_420)), #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => { - Some(BlockHeight(1_842_421)) - } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + NetworkUpgrade::Nu7 => Some(BlockHeight(1_842_421)), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => None, } @@ -463,7 +461,7 @@ pub enum NetworkUpgrade { /// The [Nu7] network upgrade. /// /// [Nu7]: https://z.cash/upgrade/nu7/ - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] Nu7, /// The ZFUTURE network upgrade. /// @@ -487,7 +485,8 @@ impl fmt::Display for NetworkUpgrade { NetworkUpgrade::Nu5 => write!(f, "Nu5"), #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => write!(f, "Nu6"), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => write!(f, "Nu7"), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + NetworkUpgrade::Nu7 => write!(f, "Nu7"), #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => write!(f, "ZFUTURE"), } @@ -505,7 +504,8 @@ impl NetworkUpgrade { NetworkUpgrade::Nu5 => BranchId::Nu5, #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => BranchId::Nu6, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => BranchId::Nu7, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + NetworkUpgrade::Nu7 => BranchId::Nu7, #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => BranchId::ZFuture, } @@ -525,7 +525,8 @@ const UPGRADES_IN_ORDER: &[NetworkUpgrade] = &[ NetworkUpgrade::Nu5, #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + NetworkUpgrade::Nu7, ]; /// The "grace period" defined in [ZIP 212]. @@ -566,7 +567,7 @@ pub enum BranchId { #[cfg(zcash_unstable = "nu6")] Nu6, /// The consensus rules deployed by [`NetworkUpgrade::Nu7`]. - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] Nu7, /// Candidates for future consensus rules; this branch will never /// activate on mainnet. @@ -590,7 +591,8 @@ impl TryFrom for BranchId { 0xc2d6_d0b4 => Ok(BranchId::Nu5), #[cfg(zcash_unstable = "nu6")] 0xc8e7_1055 => Ok(BranchId::Nu6), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ 0x7777_7777 => Ok(BranchId::Nu7), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + 0x7777_7777 => Ok(BranchId::Nu7), #[cfg(zcash_unstable = "zfuture")] 0xffff_ffff => Ok(BranchId::ZFuture), _ => Err("Unknown consensus branch ID"), @@ -610,7 +612,8 @@ impl From for u32 { BranchId::Nu5 => 0xc2d6_d0b4, #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => 0xc8e7_1055, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7 => 0x7777_7777, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + BranchId::Nu7 => 0x7777_7777, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => 0xffff_ffff, } @@ -691,15 +694,14 @@ impl BranchId { let upper = None; (lower, upper) }), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7 => { - params.activation_height(NetworkUpgrade::Nu7).map(|lower| { - #[cfg(zcash_unstable = "zfuture")] - let upper = params.activation_height(NetworkUpgrade::ZFuture); - #[cfg(not(zcash_unstable = "zfuture"))] - let upper = None; - (lower, upper) - }) - } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + BranchId::Nu7 => params.activation_height(NetworkUpgrade::Nu7).map(|lower| { + #[cfg(zcash_unstable = "zfuture")] + let upper = params.activation_height(NetworkUpgrade::ZFuture); + #[cfg(not(zcash_unstable = "zfuture"))] + let upper = None; + (lower, upper) + }), #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => params .activation_height(NetworkUpgrade::ZFuture) @@ -730,7 +732,8 @@ pub mod testing { BranchId::Nu5, #[cfg(zcash_unstable = "nu6")] BranchId::Nu6, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + BranchId::Nu7, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture, ]) @@ -824,7 +827,7 @@ mod tests { BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_687_104)), BranchId::Nu5, ); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] assert_eq!( BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_842_421)), BranchId::Nu7, diff --git a/components/zcash_protocol/src/local_consensus.rs b/components/zcash_protocol/src/local_consensus.rs index 41616add79..8cdd7e5286 100644 --- a/components/zcash_protocol/src/local_consensus.rs +++ b/components/zcash_protocol/src/local_consensus.rs @@ -39,7 +39,8 @@ pub struct LocalNetwork { pub nu5: Option, #[cfg(zcash_unstable = "nu6")] pub nu6: Option, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub nu7: Option, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + pub nu7: Option, #[cfg(zcash_unstable = "zfuture")] pub z_future: Option, } @@ -60,7 +61,8 @@ impl Parameters for LocalNetwork { NetworkUpgrade::Nu5 => self.nu5, #[cfg(zcash_unstable = "nu6")] NetworkUpgrade::Nu6 => self.nu6, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ NetworkUpgrade::Nu7 => self.nu7, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + NetworkUpgrade::Nu7 => self.nu7, #[cfg(zcash_unstable = "zfuture")] NetworkUpgrade::ZFuture => self.z_future, } @@ -85,7 +87,8 @@ mod tests { let expected_nu5 = BlockHeight::from_u32(6); #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let expected_nu7 = BlockHeight::from_u32(8); + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -98,7 +101,7 @@ mod tests { nu5: Some(expected_nu5), #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), @@ -112,7 +115,7 @@ mod tests { assert!(regtest.is_nu_active(NetworkUpgrade::Nu5, expected_nu5)); #[cfg(zcash_unstable = "nu6")] assert!(regtest.is_nu_active(NetworkUpgrade::Nu6, expected_nu6)); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] assert!(regtest.is_nu_active(NetworkUpgrade::Nu7, expected_nu7)); #[cfg(zcash_unstable = "zfuture")] assert!(!regtest.is_nu_active(NetworkUpgrade::ZFuture, expected_nu5)); @@ -128,7 +131,8 @@ mod tests { let expected_nu5 = BlockHeight::from_u32(6); #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let expected_nu7 = BlockHeight::from_u32(8); + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -141,7 +145,7 @@ mod tests { nu5: Some(expected_nu5), #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), @@ -176,7 +180,7 @@ mod tests { regtest.activation_height(NetworkUpgrade::Nu6), Some(expected_nu6) ); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] assert_eq!( regtest.activation_height(NetworkUpgrade::Nu7), Some(expected_nu7) @@ -198,7 +202,8 @@ mod tests { let expected_nu5 = BlockHeight::from_u32(6); #[cfg(zcash_unstable = "nu6")] let expected_nu6 = BlockHeight::from_u32(7); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let expected_nu7 = BlockHeight::from_u32(8); + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + let expected_nu7 = BlockHeight::from_u32(8); #[cfg(zcash_unstable = "zfuture")] let expected_z_future = BlockHeight::from_u32(7); @@ -211,7 +216,7 @@ mod tests { nu5: Some(expected_nu5), #[cfg(zcash_unstable = "nu6")] nu6: Some(expected_nu6), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] nu7: Some(expected_nu7), #[cfg(zcash_unstable = "zfuture")] z_future: Some(expected_z_future), diff --git a/zcash_client_sqlite/src/testing.rs b/zcash_client_sqlite/src/testing.rs index 1230a0b05e..42cd9da77c 100644 --- a/zcash_client_sqlite/src/testing.rs +++ b/zcash_client_sqlite/src/testing.rs @@ -129,7 +129,7 @@ impl TestBuilder<()> { nu5: Some(BlockHeight::from_u32(100_000)), #[cfg(zcash_unstable = "nu6")] nu6: None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] nu7: Some(BlockHeight::from_u32(100_000)), #[cfg(zcash_unstable = "zfuture")] z_future: None, diff --git a/zcash_client_sqlite/src/wallet.rs b/zcash_client_sqlite/src/wallet.rs index 5ec3a0f8b7..6bb626f8b9 100644 --- a/zcash_client_sqlite/src/wallet.rs +++ b/zcash_client_sqlite/src/wallet.rs @@ -1490,9 +1490,9 @@ pub(crate) fn get_transaction( tx_data.sprout_bundle().cloned(), tx_data.sapling_bundle().cloned(), tx_data.orchard_bundle().cloned(), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] tx_data.orchard_zsa_bundle().cloned(), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] tx_data.issue_bundle().cloned(), ) .freeze() diff --git a/zcash_client_sqlite/src/wallet/init.rs b/zcash_client_sqlite/src/wallet/init.rs index eae5080e73..9956912b06 100644 --- a/zcash_client_sqlite/src/wallet/init.rs +++ b/zcash_client_sqlite/src/wallet/init.rs @@ -1275,9 +1275,9 @@ mod tests { None, None, None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] None, ) .freeze() diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 0a59cdfed1..7feecb43a2 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -50,17 +50,18 @@ use crate::{ }, }; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; use orchard::note::AssetBase; use orchard::orchard_flavor::OrchardVanilla; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use orchard::{ issuance::{IssueBundle, IssueInfo}, keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}, orchard_flavor::OrchardZSA, }; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use rand_core::OsRng; +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +use rand_core::OsRng; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -301,9 +302,9 @@ pub struct Builder<'a, P, U: sapling::builder::ProverProgress> { transparent_builder: TransparentBuilder, sapling_builder: Option, orchard_builder: Option, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_builder: Option>, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_key: Option, // TODO: In the future, instead of taking the spending keys as arguments when calling // `add_sapling_spend` or `add_orchard_spend`, we will build an unauthorized, unproven @@ -396,9 +397,9 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { transparent_builder: TransparentBuilder::empty(), sapling_builder, orchard_builder, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_builder: None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), @@ -428,9 +429,9 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { transparent_builder: self.transparent_builder, sapling_builder: self.sapling_builder, orchard_builder: self.orchard_builder, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_builder: self.issuance_builder, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_key: self.issuance_key, sapling_asks: self.sapling_asks, orchard_saks: self.orchard_saks, @@ -440,7 +441,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds an Issuance action to the transaction. - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn init_issue_bundle( &mut self, ik: IssuanceAuthorizingKey, @@ -468,7 +469,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds an Issuance action to the transaction. - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn add_issuance( &mut self, asset_desc: String, @@ -488,7 +489,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds a Burn action to the transaction. - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { self.orchard_builder .as_mut() @@ -503,7 +504,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// /// Returns an error if the given Merkle path does not have the required anchor for /// the given note. - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn add_orchard_zsa_spend( &mut self, sk: &orchard::keys::SpendingKey, @@ -514,7 +515,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } /// Adds an Orchard ZSA output to the transaction. - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn add_orchard_zsa_output( &mut self, ovk: Option, @@ -866,7 +867,8 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< }; let mut unproven_orchard_bundle = None; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let mut unproven_orchard_zsa_bundle: Option< + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + let mut unproven_orchard_zsa_bundle: Option< orchard::Bundle< orchard::builder::InProgress< orchard::builder::Unproven, @@ -880,7 +882,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< if let Some(builder) = self.orchard_builder { if version.has_zsa() { - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] { let (bundle, meta) = builder .build(&mut rng) @@ -912,9 +914,9 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: None, sapling_bundle, orchard_bundle: unproven_orchard_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: unproven_orchard_zsa_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle: self.issuance_builder, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -978,7 +980,8 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .transpose() .map_err(Error::OrchardBuild)?; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let orchard_zsa_bundle = unauthed_tx + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + let orchard_zsa_bundle = unauthed_tx .orchard_zsa_bundle .map(|b| { b.create_proof( @@ -996,7 +999,8 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< .transpose() .map_err(Error::OrchardBuild)?; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ let issue_bundle = unauthed_tx + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + let issue_bundle = unauthed_tx .issue_bundle .map(|b| b.prepare(*shielded_sig_commitment.as_ref())) .map(|b| b.sign(self.issuance_key.as_ref().unwrap())) @@ -1011,9 +1015,9 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< sprout_bundle: unauthed_tx.sprout_bundle, sapling_bundle, orchard_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -1176,9 +1180,9 @@ mod tests { tze_builder: std::marker::PhantomData, progress_notifier: (), orchard_builder: None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_builder: None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 13a4f2a7ea..09e2dd6f2f 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -28,8 +28,9 @@ use crate::{ sapling::{self, builder as sapling_builder}, }; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ use crate::transaction::components::issuance; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +use crate::transaction::components::issuance; +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use orchard::{issuance::IssueBundle, orchard_flavor::OrchardZSA}; use self::{ @@ -55,9 +56,9 @@ const SAPLING_TX_VERSION: u32 = 4; const V5_TX_VERSION: u32 = 5; const V5_VERSION_GROUP_ID: u32 = 0x26A7270A; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] const V7_TX_VERSION: u32 = 7; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] const V7_VERSION_GROUP_ID: u32 = 0x124A69F8; // TODO ??? /// These versions are used exclusively for in-development transaction @@ -142,7 +143,8 @@ pub enum TxVersion { Overwinter, Sapling, Zip225, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ Zsa, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + Zsa, #[cfg(zcash_unstable = "zfuture")] ZFuture, } @@ -158,9 +160,8 @@ impl TxVersion { (OVERWINTER_TX_VERSION, OVERWINTER_VERSION_GROUP_ID) => Ok(TxVersion::Overwinter), (SAPLING_TX_VERSION, SAPLING_VERSION_GROUP_ID) => Ok(TxVersion::Sapling), (V5_TX_VERSION, V5_VERSION_GROUP_ID) => Ok(TxVersion::Zip225), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ (V7_TX_VERSION, V7_VERSION_GROUP_ID) => { - Ok(TxVersion::Zsa) - } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + (V7_TX_VERSION, V7_VERSION_GROUP_ID) => Ok(TxVersion::Zsa), #[cfg(zcash_unstable = "zfuture")] (ZFUTURE_TX_VERSION, ZFUTURE_VERSION_GROUP_ID) => Ok(TxVersion::ZFuture), _ => Err(io::Error::new( @@ -191,7 +192,8 @@ impl TxVersion { TxVersion::Overwinter => OVERWINTER_TX_VERSION, TxVersion::Sapling => SAPLING_TX_VERSION, TxVersion::Zip225 => V5_TX_VERSION, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => V7_TX_VERSION, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => V7_TX_VERSION, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_TX_VERSION, } @@ -203,7 +205,8 @@ impl TxVersion { TxVersion::Overwinter => OVERWINTER_VERSION_GROUP_ID, TxVersion::Sapling => SAPLING_VERSION_GROUP_ID, TxVersion::Zip225 => V5_VERSION_GROUP_ID, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => V7_VERSION_GROUP_ID, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => V7_VERSION_GROUP_ID, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_VERSION_GROUP_ID, } @@ -223,7 +226,8 @@ impl TxVersion { TxVersion::Sprout(v) => *v >= 2u32, TxVersion::Overwinter | TxVersion::Sapling => true, TxVersion::Zip225 => false, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => false, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => false, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -239,7 +243,8 @@ impl TxVersion { TxVersion::Sprout(_) | TxVersion::Overwinter => false, TxVersion::Sapling => true, TxVersion::Zip225 => true, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => true, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => true, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -250,7 +255,8 @@ impl TxVersion { match self { TxVersion::Sprout(_) | TxVersion::Overwinter | TxVersion::Sapling => false, TxVersion::Zip225 => true, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => false, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => false, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => true, } @@ -262,7 +268,8 @@ impl TxVersion { | TxVersion::Overwinter | TxVersion::Sapling | TxVersion::Zip225 => false, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => true, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => true, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => false, } @@ -284,7 +291,8 @@ impl TxVersion { BranchId::Nu5 => TxVersion::Zip225, #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => TxVersion::Zip225, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7 => TxVersion::Zsa, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + BranchId::Nu7 => TxVersion::Zsa, #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => TxVersion::ZFuture, } @@ -297,10 +305,10 @@ pub trait Authorization { type SaplingAuth: sapling::bundle::Authorization; type OrchardAuth: orchard::bundle::Authorization; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type OrchardZsaAuth: orchard::bundle::Authorization; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type IssueAuth: orchard::issuance::IssueAuth; #[cfg(zcash_unstable = "zfuture")] @@ -316,10 +324,10 @@ impl Authorization for Authorized { type SaplingAuth = sapling::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type OrchardZsaAuth = orchard::bundle::Authorized; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type IssueAuth = orchard::issuance::Signed; #[cfg(zcash_unstable = "zfuture")] @@ -339,11 +347,11 @@ impl Authorization for Unauthorized { type OrchardAuth = orchard::builder::InProgress, orchard::builder::Unauthorized>; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type OrchardZsaAuth = orchard::builder::InProgress, orchard::builder::Unauthorized>; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type IssueAuth = orchard::issuance::Unauthorized; #[cfg(zcash_unstable = "zfuture")] @@ -382,9 +390,10 @@ pub struct TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: Option>, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: Option>, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issue_bundle: Option>, #[cfg(zcash_unstable = "zfuture")] tze_bundle: Option>, } @@ -401,10 +410,10 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ orchard_zsa_bundle: Option< + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: Option< orchard::Bundle, >, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_bundle: Option< + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle: Option< IssueBundle, >, ) -> Self { @@ -417,9 +426,9 @@ impl TransactionData { sprout_bundle, sapling_bundle, orchard_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, @@ -490,14 +499,14 @@ impl TransactionData { self.orchard_bundle.as_ref() } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn orchard_zsa_bundle( &self, ) -> Option<&orchard::Bundle> { self.orchard_zsa_bundle.as_ref() } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn issue_bundle(&self) -> Option<&IssueBundle> { self.issue_bundle.as_ref() } @@ -548,7 +557,7 @@ impl TransactionData { digester.digest_transparent(self.transparent_bundle.as_ref()), digester.digest_sapling(self.sapling_bundle.as_ref()), self.digest_orchard(&digester), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] digester.digest_issue(self.issue_bundle.as_ref()), #[cfg(zcash_unstable = "zfuture")] digester.digest_tze(self.tze_bundle.as_ref()), @@ -560,7 +569,7 @@ impl TransactionData { digester.digest_orchard(self.orchard_bundle.as_ref()) } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { if self.version.has_zsa() { digester.digest_orchard_zsa(self.orchard_zsa_bundle.as_ref()) @@ -586,12 +595,12 @@ impl TransactionData { ) -> Option< orchard::bundle::Bundle, >, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ f_zsa_orchard: impl FnOnce( + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] f_zsa_orchard: impl FnOnce( Option>, ) -> Option< orchard::bundle::Bundle, >, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ f_issue: impl FnOnce( + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] f_issue: impl FnOnce( Option>, ) -> Option< orchard::issuance::IssueBundle, @@ -610,9 +619,9 @@ impl TransactionData { sprout_bundle: self.sprout_bundle, sapling_bundle: f_sapling(self.sapling_bundle), orchard_bundle: f_orchard(self.orchard_bundle), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: f_zsa_orchard(self.orchard_zsa_bundle), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle: f_issue(self.issue_bundle), #[cfg(zcash_unstable = "zfuture")] tze_bundle: f_tze(self.tze_bundle), @@ -630,7 +639,7 @@ impl TransactionData { A::OrchardZsaAuth, B::OrchardZsaAuth, >, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ f_issue: impl issuance::MapIssueAuth< + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] f_issue: impl issuance::MapIssueAuth< A::IssueAuth, B::IssueAuth, >, @@ -661,7 +670,7 @@ impl TransactionData { |f, a| f.map_authorization(a), ) }), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: self.orchard_zsa_bundle.map(|b| { b.map_authorization( &mut f_orchard_zsa, @@ -669,7 +678,7 @@ impl TransactionData { |f, a| f.map_authorization(a), ) }), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle: self .issue_bundle .map(|b| b.map_authorization(|a| f_issue.map_issue_authorization(a))), @@ -700,9 +709,8 @@ impl Transaction { Self::from_data_v4(data) } TxVersion::Zip225 => Ok(Self::from_data_v5(data)), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => { - Ok(Self::from_data_v7(data)) - } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => Ok(Self::from_data_v7(data)), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Ok(Self::from_data_v5(data)), } @@ -729,7 +737,7 @@ impl Transaction { Transaction { txid, data } } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn from_data_v7(data: TransactionData) -> Self { Self::from_data_v5(data) } @@ -751,9 +759,8 @@ impl Transaction { Self::read_v4(reader, version, consensus_branch_id) } TxVersion::Zip225 => Self::read_v5(reader.into_base_reader(), version), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => { - Self::read_v7(reader.into_base_reader(), version) - } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => Self::read_v7(reader.into_base_reader(), version), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Self::read_v5(reader.into_base_reader(), version), } @@ -830,9 +837,9 @@ impl Transaction { ) }), orchard_bundle: None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle: None, @@ -892,9 +899,9 @@ impl Transaction { sprout_bundle: None, sapling_bundle, orchard_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: None, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle: None, #[cfg(zcash_unstable = "zfuture")] tze_bundle, @@ -924,7 +931,7 @@ impl Transaction { sapling_serialization::read_v5_bundle(reader) } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn read_v7(mut reader: R, version: TxVersion) -> io::Result { let (consensus_branch_id, lock_time, expiry_height) = Self::read_v5_header_fragment(&mut reader)?; @@ -979,7 +986,8 @@ impl Transaction { self.write_v4(writer) } TxVersion::Zip225 => self.write_v5(writer), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => self.write_v7(writer), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => self.write_v7(writer), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => self.write_v5(writer), } @@ -1074,7 +1082,7 @@ impl Transaction { sapling_serialization::write_v5_bundle(writer, self.sapling_bundle.as_ref()) } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn write_v7(&self, mut writer: W) -> io::Result<()> { if self.sprout_bundle.is_some() { return Err(io::Error::new( @@ -1131,7 +1139,8 @@ pub struct TxDigests { pub transparent_digests: Option>, pub sapling_digest: Option, pub orchard_digest: Option, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ pub issue_digest: Option, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + pub issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] pub tze_digests: Option>, } @@ -1142,7 +1151,7 @@ pub trait TransactionDigest { type SaplingDigest; type OrchardDigest; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type IssueDigest; #[cfg(zcash_unstable = "zfuture")] @@ -1173,13 +1182,13 @@ pub trait TransactionDigest { orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_orchard_zsa( &self, orchard_bundle: Option<&orchard::Bundle>, ) -> Self::OrchardDigest; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest; #[cfg(zcash_unstable = "zfuture")] @@ -1191,7 +1200,7 @@ pub trait TransactionDigest { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest; } @@ -1233,9 +1242,8 @@ pub mod testing { BranchId::Nu5 => Just(TxVersion::Zip225).boxed(), #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => Just(TxVersion::Zip225).boxed(), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7 => { - Just(TxVersion::Zsa).boxed() - } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + BranchId::Nu7 => Just(TxVersion::Zsa).boxed(), #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => Just(TxVersion::ZFuture).boxed(), } @@ -1264,9 +1272,9 @@ pub mod testing { sprout_bundle: None, sapling_bundle, orchard_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: _orchard_zsa_bundle, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle: _issue_bundle, } } diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index b2b02f562c..71c780030f 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -11,7 +11,7 @@ use crate::{ sapling::{self, bundle::GrothProofBytes}, }; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use crate::transaction::sighash_v7::v7_signature_hash; #[cfg(zcash_unstable = "zfuture")] use {super::components::Amount, crate::extensions::transparent::Precondition}; @@ -93,9 +93,8 @@ pub fn signature_hash< TxVersion::Zip225 => v5_signature_hash(tx, signable_input, txid_parts), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ TxVersion::Zsa => { - v7_signature_hash(tx, signable_input, txid_parts) - } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + TxVersion::Zsa => v7_signature_hash(tx, signable_input, txid_parts), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => v5_signature_hash(tx, signable_input, txid_parts), diff --git a/zcash_primitives/src/transaction/sighash_v5.rs b/zcash_primitives/src/transaction/sighash_v5.rs index 62a6827bca..3d8be23afb 100644 --- a/zcash_primitives/src/transaction/sighash_v5.rs +++ b/zcash_primitives/src/transaction/sighash_v5.rs @@ -197,7 +197,8 @@ pub fn v5_signature_hash< ), txid_parts.sapling_digest, txid_parts.orchard_digest, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ txid_parts.issue_digest, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + txid_parts.issue_digest, #[cfg(zcash_unstable = "zfuture")] tx.tze_bundle .as_ref() diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index ef50afba88..b46ac52647 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -56,12 +56,12 @@ fn check_roundtrip(tx: Transaction) -> Result<(), TestCaseError> { tx.orchard_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_bundle.as_ref().map(|v| *v.value_balance()) ); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] prop_assert_eq!( tx.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()), txo.orchard_zsa_bundle.as_ref().map(|v| *v.value_balance()) ); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] if tx.issue_bundle.is_some() { prop_assert_eq!(tx.issue_bundle.as_ref(), txo.issue_bundle.as_ref()); } @@ -130,7 +130,7 @@ proptest! { } } -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] proptest! { #![proptest_config(ProptestConfig::with_cases(10))] #[test] @@ -221,10 +221,10 @@ impl Authorization for TestUnauthorized { type SaplingAuth = sapling::bundle::Authorized; type OrchardAuth = orchard::bundle::Authorized; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type OrchardZsaAuth = orchard::bundle::Authorized; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type IssueAuth = orchard::issuance::Signed; #[cfg(zcash_unstable = "zfuture")] @@ -239,7 +239,8 @@ fn zip_0244() { let tx = Transaction::read( &tv.tx[..], #[cfg(not(zcash_unstable = "nu6"))] /* TODO nu7 */ BranchId::Nu5, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ BranchId::Nu7, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + BranchId::Nu7, ) .unwrap(); @@ -292,8 +293,10 @@ fn zip_0244() { txdata.sprout_bundle().cloned(), txdata.sapling_bundle().cloned(), txdata.orchard_bundle().cloned(), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ txdata.orchard_zsa_bundle().cloned(), - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ txdata.issue_bundle().cloned(), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + txdata.orchard_zsa_bundle().cloned(), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + txdata.issue_bundle().cloned(), ); #[cfg(zcash_unstable = "zfuture")] let tdata = TransactionData::from_parts_zfuture( diff --git a/zcash_primitives/src/transaction/tests/data.rs b/zcash_primitives/src/transaction/tests/data.rs index 1e66595c74..00c0cde6ea 100644 --- a/zcash_primitives/src/transaction/tests/data.rs +++ b/zcash_primitives/src/transaction/tests/data.rs @@ -7666,7 +7666,7 @@ pub mod zip_0244 { sighash_none_anyone: None, sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x7a, @@ -7825,7 +7825,7 @@ pub mod zip_0244 { ]), sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xd3, @@ -8041,7 +8041,7 @@ pub mod zip_0244 { 0x40, 0x5f, 0xff, 0x6e, 0x00, 0xa0, ]), }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x47, @@ -8257,7 +8257,7 @@ pub mod zip_0244 { ]), sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xc9, @@ -8448,7 +8448,7 @@ pub mod zip_0244 { ]), sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xf0, @@ -8782,7 +8782,7 @@ pub mod zip_0244 { sighash_none_anyone: None, sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x48, @@ -8970,7 +8970,7 @@ pub mod zip_0244 { sighash_none_anyone: None, sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x70, @@ -9347,7 +9347,7 @@ pub mod zip_0244 { ]), sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xdf, @@ -9774,7 +9774,7 @@ pub mod zip_0244 { 0x67, 0x34, 0x76, 0x5b, 0xcb, 0xa6, ]), }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x08, @@ -9957,7 +9957,7 @@ pub mod zip_0244 { sighash_none_anyone: None, sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x4b, @@ -10258,7 +10258,7 @@ pub mod zip_0244 { 0x03, 0x5d, 0xb9, 0x38, 0x8b, 0x1b, ]), }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x66, @@ -10361,7 +10361,7 @@ pub mod zip_0244 { sighash_none_anyone: None, sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TestVector { tx: vec![ 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xdf, diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 670e36d970..ad8d274d8b 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -7,7 +7,7 @@ use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; use orchard::bundle; use orchard::orchard_flavor::OrchardVanilla; -#[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use orchard::{ issuance::{IssueBundle, Signed}, orchard_flavor::OrchardZSA, @@ -309,7 +309,7 @@ impl TransactionDigest for TxIdDigester { type TransparentDigest = Option>; type SaplingDigest = Option; type OrchardDigest = Option; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type IssueDigest = Option; #[cfg(zcash_unstable = "zfuture")] @@ -348,7 +348,7 @@ impl TransactionDigest for TxIdDigester { orchard_bundle.map(|b| b.commitment().0) } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_orchard_zsa( &self, orchard_bundle: Option<&bundle::Bundle>, @@ -356,7 +356,7 @@ impl TransactionDigest for TxIdDigester { orchard_bundle.map(|b| b.commitment().0) } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { issue_bundle.map(|b| b.commitment().0) } @@ -372,7 +372,7 @@ impl TransactionDigest for TxIdDigester { transparent_digests: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digests: Self::TzeDigest, ) -> Self::Digest { TxDigests { @@ -380,7 +380,7 @@ impl TransactionDigest for TxIdDigester { transparent_digests, sapling_digest, orchard_digest, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_digest, #[cfg(zcash_unstable = "zfuture")] tze_digests, @@ -396,7 +396,7 @@ pub(crate) fn to_hash( transparent_digest: Blake2bHash, sapling_digest: Option, orchard_digest: Option, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest: Option, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] tze_digests: Option<&TzeDigests>, ) -> Blake2bHash { let mut personal = [0; 16]; @@ -421,7 +421,7 @@ pub(crate) fn to_hash( ) .unwrap(); - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] if _txversion.has_zsa() { h.write_all( issue_digest @@ -452,7 +452,8 @@ pub fn to_txid( hash_transparent_txid_data(digests.transparent_digests.as_ref()), digests.sapling_digest, digests.orchard_digest, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ digests.issue_digest, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + digests.issue_digest, #[cfg(zcash_unstable = "zfuture")] digests.tze_digests.as_ref(), ); @@ -474,7 +475,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { type SaplingDigest = Blake2bHash; type OrchardDigest = Blake2bHash; - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] type IssueDigest = Blake2bHash; #[cfg(zcash_unstable = "zfuture")] @@ -539,7 +540,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { }) } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_orchard_zsa( &self, orchard_bundle: Option<&bundle::Bundle>, @@ -549,7 +550,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { }) } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_issue(&self, issue_bundle: Option<&IssueBundle>) -> Self::IssueDigest { issue_bundle.map_or_else(bundle::commitments::hash_issue_bundle_auth_empty, |b| { b.authorizing_commitment().0 @@ -573,7 +574,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ issue_digest: Self::IssueDigest, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest { let digests = [transparent_digest, sapling_digest, orchard_digest]; @@ -589,7 +590,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { h.write_all(digest.as_bytes()).unwrap(); } - #[cfg(zcash_unstable = "nu6")] /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] if TxVersion::suggested_for_branch(consensus_branch_id).has_zsa() { h.write_all(issue_digest.as_bytes()).unwrap(); } From 8b9672dd92a1f92a973020842398e18d366d7391 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:57:37 +0200 Subject: [PATCH 53/85] Address PR comments --- components/zcash_protocol/src/consensus.rs | 5 + zcash_client_backend/src/scanning.rs | 2 +- zcash_client_sqlite/src/testing.rs | 2 +- zcash_primitives/src/transaction/builder.rs | 122 ++++++++++-------- .../src/transaction/components/issuance.rs | 94 ++++++++------ .../src/transaction/components/orchard.rs | 10 +- zcash_primitives/src/transaction/mod.rs | 38 ++---- zcash_primitives/src/transaction/sighash.rs | 10 +- .../src/transaction/sighash_v5.rs | 4 +- .../src/transaction/sighash_v7.rs | 4 +- zcash_primitives/src/transaction/tests.rs | 16 +-- zcash_primitives/src/transaction/txid.rs | 15 ++- 12 files changed, 177 insertions(+), 145 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index 86899e8e17..a031389690 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -827,6 +827,11 @@ mod tests { BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_687_104)), BranchId::Nu5, ); + #[cfg(zcash_unstable = "nu6")] + assert_eq!( + BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_687_106)), + BranchId::Nu6, + ); #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] assert_eq!( BranchId::for_height(&MAIN_NETWORK, BlockHeight(1_842_421)), diff --git a/zcash_client_backend/src/scanning.rs b/zcash_client_backend/src/scanning.rs index a6a5c582cc..d95f321fd1 100644 --- a/zcash_client_backend/src/scanning.rs +++ b/zcash_client_backend/src/scanning.rs @@ -1038,7 +1038,7 @@ fn find_received< Nf, IvkTag: Copy + std::hash::Hash + Eq + Send + 'static, SK: ScanningKeyOps, - Output: ShieldedOutput, + Output: ShieldedOutput, NoteCommitment, >( block_height: BlockHeight, diff --git a/zcash_client_sqlite/src/testing.rs b/zcash_client_sqlite/src/testing.rs index 42cd9da77c..d07a0b214e 100644 --- a/zcash_client_sqlite/src/testing.rs +++ b/zcash_client_sqlite/src/testing.rs @@ -128,7 +128,7 @@ impl TestBuilder<()> { canopy: Some(BlockHeight::from_u32(100_000)), nu5: Some(BlockHeight::from_u32(100_000)), #[cfg(zcash_unstable = "nu6")] - nu6: None, + nu6: Some(BlockHeight::from_u32(100_000)), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] nu7: Some(BlockHeight::from_u32(100_000)), #[cfg(zcash_unstable = "zfuture")] diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 7feecb43a2..db0e6694bb 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1,6 +1,6 @@ //! Structs for building transactions. -use orchard::{issuance, Address}; +use orchard::Address; use std::cmp::Ordering; use std::error; use std::fmt; @@ -38,6 +38,17 @@ use std::convert::Infallible; use crate::transaction::components::amount::NonNegativeAmount; use crate::transaction::components::sapling::zip212_enforcement; + +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +use orchard::{ + issuance, + issuance::{IssueBundle, IssueInfo}, + keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}, + orchard_flavor::OrchardZSA, +}; +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +use rand_core::OsRng; + #[cfg(zcash_unstable = "zfuture")] use crate::{ extensions::transparent::{ExtensionTxBuilder, ToPayload}, @@ -50,18 +61,8 @@ use crate::{ }, }; -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -use crate::transaction::builder::Error::{IssuanceBuilder, IssuanceBundle}; use orchard::note::AssetBase; use orchard::orchard_flavor::OrchardVanilla; -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -use orchard::{ - issuance::{IssueBundle, IssueInfo}, - keys::{IssuanceAuthorizingKey, IssuanceValidatingKey}, - orchard_flavor::OrchardZSA, -}; -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -use rand_core::OsRng; /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// @@ -102,10 +103,6 @@ pub enum Error { SaplingBuild(sapling::builder::Error), /// An error occurred in constructing the Orchard parts of a transaction. OrchardBuild(orchard::builder::BuildError), - /// An error occurred in constructing the Issuance bundle. - IssuanceBundle(issuance::Error), - /// An error occurred in constructing the Issuance builder. - IssuanceBuilder(&'static str), /// An error occurred in adding an Orchard Spend to a transaction. OrchardSpend(orchard::builder::SpendError), /// An error occurred in adding an Orchard Output to a transaction. @@ -116,6 +113,15 @@ pub enum Error { /// The builder was constructed with a target height before NU5 activation, but an Orchard /// spend or output was added. OrchardBuilderNotAvailable, + /// The issuance bundle not initialized. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + IssuanceBuilderNotAvailable, + /// An error occurred in constructing the Issuance bundle. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + IssuanceBundle(issuance::Error), + /// An error occurred in constructing the Issuance builder. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + IssuanceBuilder(&'static str), /// An error occurred in constructing the TZE parts of a transaction. #[cfg(zcash_unstable = "zfuture")] TzeBuild(tze::builder::Error), @@ -139,8 +145,6 @@ impl fmt::Display for Error { Error::TransparentBuild(err) => err.fmt(f), Error::SaplingBuild(err) => err.fmt(f), Error::OrchardBuild(err) => write!(f, "{:?}", err), - Error::IssuanceBundle(err) => write!(f, "{:?}", err), - Error::IssuanceBuilder(err) => write!(f, "{:?}", err), Error::OrchardSpend(err) => write!(f, "Could not add Orchard spend: {}", err), Error::OrchardRecipient(err) => write!(f, "Could not add Orchard recipient: {}", err), Error::SaplingBuilderNotAvailable => write!( @@ -151,6 +155,15 @@ impl fmt::Display for Error { f, "Cannot create Orchard transactions without an Orchard anchor, or before NU5 activation" ), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + Error::IssuanceBuilderNotAvailable => write!( + f, + "Issuance bundle not initialized" + ), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + Error::IssuanceBundle(err) => write!(f, "{:?}", err), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + Error::IssuanceBuilder(err) => write!(f, "{:?}", err), #[cfg(zcash_unstable = "zfuture")] Error::TzeBuild(err) => err.fmt(f), } @@ -183,6 +196,13 @@ impl From for Error { } } +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +impl From for Error { + fn from(e: issuance::Error) -> Self { + Error::IssuanceBundle(e) + } +} + /// Reports on the progress made by the builder towards building a transaction. pub struct Progress { /// The number of steps completed. @@ -304,14 +324,14 @@ pub struct Builder<'a, P, U: sapling::builder::ProverProgress> { orchard_builder: Option, #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_builder: Option>, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - issuance_key: Option, // TODO: In the future, instead of taking the spending keys as arguments when calling // `add_sapling_spend` or `add_orchard_spend`, we will build an unauthorized, unproven // transaction, and then the caller will be responsible for using the spending keys or their // derivatives for proving and signing to complete transaction creation. sapling_asks: Vec, orchard_saks: Vec, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issuance_isk: Option, #[cfg(zcash_unstable = "zfuture")] tze_builder: TzeBuilder<'a, TransactionData>, #[cfg(not(zcash_unstable = "zfuture"))] @@ -369,9 +389,8 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// The expiry height will be set to the given height plus the default transaction /// expiry delta (20 blocks). pub fn new(params: P, target_height: BlockHeight, build_config: BuildConfig) -> Self { - let is_orchard_enabled = params.is_nu_active(NetworkUpgrade::Nu5, target_height); - let orchard_builder = if is_orchard_enabled { + let orchard_builder = if params.is_nu_active(NetworkUpgrade::Nu5, target_height) { build_config .orchard_builder_config() .map(|(bundle_type, anchor)| orchard::builder::Builder::new(bundle_type, anchor)) @@ -399,10 +418,10 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { orchard_builder, #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_builder: None, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issuance_isk: None, #[cfg(zcash_unstable = "zfuture")] tze_builder: TzeBuilder::empty(), #[cfg(not(zcash_unstable = "zfuture"))] @@ -431,10 +450,10 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { orchard_builder: self.orchard_builder, #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_builder: self.issuance_builder, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - issuance_key: self.issuance_key, sapling_asks: self.sapling_asks, orchard_saks: self.orchard_saks, + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issuance_isk: self.issuance_isk, tze_builder: self.tze_builder, progress_notifier, } @@ -442,15 +461,15 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// Adds an Issuance action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn init_issue_bundle( + pub fn init_issuance_bundle( &mut self, ik: IssuanceAuthorizingKey, asset_desc: String, recipient: Address, value: orchard::value::NoteValue, - ) -> Result<(), Error> { + ) -> Result<(), Error> { if self.issuance_builder.is_some() { - return Err(IssuanceBuilder("Issuance bundle already initialized")); + return Err(Error::IssuanceBuilder("Issuance bundle already initialized")); } self.issuance_builder = Some( @@ -460,42 +479,27 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { Some(IssueInfo { recipient, value }), OsRng, ) - .map_err(IssuanceBundle)? + .map_err(Error::IssuanceBundle)? .0, ); - self.issuance_key = Some(ik); + self.issuance_isk = Some(ik); Ok(()) } /// Adds an Issuance action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn add_issuance( + pub fn add_issuance( &mut self, asset_desc: String, recipient: Address, value: orchard::value::NoteValue, - ) -> Result<(), Error> { - if self.issuance_builder.is_none() { - return Err(IssuanceBuilder("Issuance bundle not initialized")); - } + ) -> Result<(), Error> { self.issuance_builder .as_mut() - .unwrap() + .ok_or(Error::IssuanceBuilderNotAvailable)? .add_recipient(asset_desc, recipient, value, OsRng) - .map_err(IssuanceBundle)?; - - Ok(()) - } - - /// Adds a Burn action to the transaction. - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { - self.orchard_builder - .as_mut() - .ok_or(Error::OrchardBuilderNotAvailable)? - .add_burn(asset, orchard::value::NoteValue::from_raw(value)) - .map_err(Error::OrchardBuild)?; + .map_err(Error::IssuanceBundle)?; Ok(()) } @@ -536,6 +540,18 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { ) .map_err(Error::OrchardRecipient) } + + /// Adds a Burn action to the transaction. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { + self.orchard_builder + .as_mut() + .ok_or(Error::OrchardBuilderNotAvailable)? + .add_burn(asset, orchard::value::NoteValue::from_raw(value)) + .map_err(Error::OrchardBuild)?; + + Ok(()) + } } impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder<'a, P, U> { @@ -881,7 +897,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< let mut orchard_meta = orchard::builder::BundleMetadata::empty(); if let Some(builder) = self.orchard_builder { - if version.has_zsa() { + if version.has_orchard_zsa() { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] { let (bundle, meta) = builder @@ -1003,7 +1019,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< let issue_bundle = unauthed_tx .issue_bundle .map(|b| b.prepare(*shielded_sig_commitment.as_ref())) - .map(|b| b.sign(self.issuance_key.as_ref().unwrap())) + .map(|b| b.sign(self.issuance_isk.as_ref().unwrap())) .map(|b| b.unwrap()); let authorized_tx = TransactionData { @@ -1182,10 +1198,10 @@ mod tests { orchard_builder: None, #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issuance_builder: None, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - issuance_key: None, sapling_asks: vec![], orchard_saks: Vec::new(), + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issuance_isk: None, }; let tsk = AccountPrivKey::from_seed(&TEST_NETWORK, &[0u8; 32], AccountId::ZERO).unwrap(); diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index 3955344214..fb6719b396 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -7,39 +7,23 @@ use orchard::value::NoteValue; use orchard::{Address, Note}; /// Functions for parsing & serialization of the issuance bundle components. use std::io; -use std::io::{Read, Write}; +use std::io::{Error, ErrorKind, Read, Write}; use zcash_encoding::{CompactSize, Vector}; -pub trait MapIssueAuth { - fn map_issue_authorization(&self, a: A) -> B; -} - -/// The identity map. -/// -/// This can be used with [`TransactionData::map_authorization`] when you want to map the -/// authorization of a subset of the transaction's bundles. -/// -/// [`TransactionData::map_authorization`]: crate::transaction::TransactionData::map_authorization -impl MapIssueAuth for () { - fn map_issue_authorization(&self, a: Signed) -> Signed { - a - } -} - -/// Reads an [`orchard::Bundle`] from a v5 transaction format. +/// Reads an [`orchard::Bundle`] from a v6 transaction format. pub fn read_v7_bundle(mut reader: R) -> io::Result>> { let actions = Vector::read(&mut reader, |r| read_action(r))?; if actions.is_empty() { Ok(None) } else { - let ik = read_ik(&mut reader); - let authorization = read_authorization(&mut reader); + let ik = read_ik(&mut reader)?; + let authorization = read_authorization(&mut reader)?; Ok(Some(IssueBundle::from_parts( - ik?, + ik, NonEmpty::from_vec(actions).unwrap(), - authorization?, + authorization, ))) } } @@ -47,12 +31,20 @@ pub fn read_v7_bundle(mut reader: R) -> io::Result(mut reader: R) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; - Ok(IssuanceValidatingKey::from_bytes(&bytes).unwrap()) + IssuanceValidatingKey::from_bytes(&bytes).ok_or(Error::new( + ErrorKind::InvalidData, + "Invalid Pallas point for IssuanceValidatingKey", + )) } fn read_authorization(mut reader: R) -> io::Result { let mut bytes = [0u8; 64]; - reader.read_exact(&mut bytes)?; + reader.read_exact(&mut bytes).map_err(|_| { + Error::new( + ErrorKind::InvalidData, + "Invalid signature for IssuanceAuthorization", + ) + })?; Ok(Signed::from_data(bytes)) } @@ -76,40 +68,51 @@ pub fn read_note(mut reader: R) -> io::Result { asset, rho, rseed, - )) - .unwrap()) + )).ok_or(Error::new( + ErrorKind::InvalidData, + "Invalid note", + ))?) } fn read_rho(mut reader: R) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; let rho_ctopt = Rho::from_bytes(&bytes); - if rho_ctopt.is_none().into() { - Err(io::Error::new( - io::ErrorKind::InvalidInput, - "invalid Pallas point for rho".to_owned(), - )) - } else { + if rho_ctopt.is_some().into() { Ok(rho_ctopt.unwrap()) + } else { + Err(Error::new( + ErrorKind::InvalidData, + "invalid Pallas point for rho", + )) } } fn read_recipient(mut reader: R) -> io::Result
{ let mut bytes = [0u8; 43]; reader.read_exact(&mut bytes)?; - Ok(Option::from(Address::from_raw_address_bytes(&bytes)).unwrap()) + Option::from(Address::from_raw_address_bytes(&bytes)).ok_or(Error::new( + ErrorKind::InvalidData, + "Invalid recipient address", + )) } pub fn read_asset(reader: &mut R) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; - Ok(Option::from(AssetBase::from_bytes(&bytes)).unwrap()) + Option::from(AssetBase::from_bytes(&bytes)).ok_or(Error::new( + ErrorKind::InvalidData, + "Invalid asset", + )) } fn read_rseed(mut reader: R, nullifier: &Rho) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; - Ok(Option::from(RandomSeed::from_bytes(bytes, nullifier)).unwrap()) + Option::from(RandomSeed::from_bytes(bytes, nullifier)).ok_or(Error::new( + ErrorKind::InvalidData, + "Invalid rseed", + )) } /// Writes an [`IssueBundle`] in the v5 transaction format. @@ -130,12 +133,11 @@ pub fn write_v7_bundle( } fn write_action(action: &IssueAction, mut writer: W) -> io::Result<()> { - let is_finalized_u8: u8 = if action.is_finalized() { 1 } else { 0 }; Vector::write(&mut writer, action.asset_desc().as_bytes(), |w, b| { w.write_u8(*b) })?; Vector::write(&mut writer, action.notes(), |w, note| write_note(note, w))?; - writer.write_u8(is_finalized_u8)?; + writer.write_u8(action.is_finalized() as u8)?; Ok(()) } @@ -148,6 +150,22 @@ pub fn write_note(note: &Note, writer: &mut W) -> io::Result<()> { Ok(()) } +pub trait MapIssueAuth { + fn map_issue_authorization(&self, a: A) -> B; +} + +/// The identity map. +/// +/// This can be used with [`TransactionData::map_authorization`] when you want to map the +/// authorization of a subset of the transaction's bundles. +/// +/// [`TransactionData::map_authorization`]: crate::transaction::TransactionData::map_authorization +impl MapIssueAuth for () { + fn map_issue_authorization(&self, a: Signed) -> Signed { + a + } +} + #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { use proptest::prelude::*; @@ -170,7 +188,7 @@ pub mod testing { pub fn arb_bundle_for_version( v: TxVersion, ) -> impl Strategy>> { - if v.has_zsa() { + if v.has_orchard_zsa() { Strategy::boxed((1usize..100).prop_flat_map(|n| prop::option::of(arb_issue_bundle(n)))) } else { Strategy::boxed(Just(None)) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 303e45f809..c5d738d4f9 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -126,7 +126,7 @@ pub fn read_v7_bundle( } fn read_burn(reader: &mut R) -> io::Result<(AssetBase, NoteValue)> { - Ok((read_asset(reader)?, Transaction::read_note_value(reader)?)) + Ok((read_asset(reader)?, read_note_value(reader)?)) } pub fn read_value_commitment(mut reader: R) -> io::Result { @@ -279,6 +279,12 @@ pub fn read_signature(mut reader: R) -> io::Result(mut reader: R) -> io::Result { + let mut tmp = [0; 8]; + reader.read_exact(&mut tmp)?; + Ok(NoteValue::from_bytes(tmp)) +} + /// Writes an [`orchard::Bundle`] in the v5 transaction format. pub fn write_v5_bundle( bundle: Option<&orchard::Bundle>, @@ -440,7 +446,7 @@ pub mod testing { pub fn arb_zsa_bundle_for_version( v: TxVersion, ) -> impl Strategy>> { - if v.has_zsa() { + if v.has_orchard_zsa() { Strategy::boxed((1usize..100).prop_flat_map(|n| prop::option::of(arb_zsa_bundle(n)))) } else { Strategy::boxed(Just(None)) diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 09e2dd6f2f..a4305acecc 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -5,7 +5,6 @@ pub mod fees; pub mod sighash; pub mod sighash_v4; pub mod sighash_v5; -pub mod sighash_v7; pub mod txid; pub mod util; @@ -15,7 +14,7 @@ mod tests; use blake2b_simd::Hash as Blake2bHash; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use memuse::DynamicUsage; -use orchard::{builder::Unproven, orchard_flavor::OrchardVanilla, value::NoteValue}; +use orchard::{builder::Unproven, orchard_flavor::OrchardVanilla}; use std::convert::TryFrom; use std::fmt; use std::fmt::Debug; @@ -28,11 +27,6 @@ use crate::{ sapling::{self, builder as sapling_builder}, }; -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -use crate::transaction::components::issuance; -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -use orchard::{issuance::IssueBundle, orchard_flavor::OrchardZSA}; - use self::{ components::{ amount::{Amount, BalanceError}, @@ -45,6 +39,11 @@ use self::{ util::sha256d::{HashReader, HashWriter}, }; +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +use crate::transaction::components::issuance; +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +use orchard::{issuance::IssueBundle, orchard_flavor::OrchardZSA}; + #[cfg(zcash_unstable = "zfuture")] use self::components::tze::{self, TzeIn, TzeOut}; @@ -262,16 +261,11 @@ impl TxVersion { } } - pub fn has_zsa(&self) -> bool { + pub fn has_orchard_zsa(&self) -> bool { match self { - TxVersion::Sprout(_) - | TxVersion::Overwinter - | TxVersion::Sapling - | TxVersion::Zip225 => false, #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] TxVersion::Zsa => true, - #[cfg(zcash_unstable = "zfuture")] - TxVersion::ZFuture => false, + _ => false, } } @@ -571,7 +565,7 @@ impl TransactionData { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { - if self.version.has_zsa() { + if self.version.has_orchard_zsa() { digester.digest_orchard_zsa(self.orchard_zsa_bundle.as_ref()) } else { digester.digest_orchard(self.orchard_bundle.as_ref()) @@ -870,12 +864,6 @@ impl Transaction { .map_err(|_| io::Error::new(io::ErrorKind::InvalidData, "valueBalance out of range")) } - fn read_note_value(mut reader: R) -> io::Result { - let mut tmp = [0; 8]; - reader.read_exact(&mut tmp)?; - Ok(NoteValue::from_bytes(tmp)) - } - fn read_v5(mut reader: R, version: TxVersion) -> io::Result { let (consensus_branch_id, lock_time, expiry_height) = Self::read_v5_header_fragment(&mut reader)?; @@ -1217,8 +1205,8 @@ pub mod testing { use super::{ components::{ orchard::testing::{self as orchard_testing}, - sapling::testing::{self as sapling}, - transparent::testing::{self as transparent}, + sapling::testing::{self as sapling_testing}, + transparent::testing::{self as transparent_testing}, }, Authorized, Transaction, TransactionData, TxId, TxVersion, }; @@ -1256,8 +1244,8 @@ pub mod testing { )( lock_time in any::(), expiry_height in any::(), - transparent_bundle in transparent::arb_bundle(), - sapling_bundle in sapling::arb_bundle_for_version(version), + transparent_bundle in transparent_testing::arb_bundle(), + sapling_bundle in sapling_testing::arb_bundle_for_version(version), orchard_bundle in orchard_testing::arb_bundle_for_version(version), _orchard_zsa_bundle in orchard_testing::arb_zsa_bundle_for_version(version), _issue_bundle in issuance::testing::arb_bundle_for_version(version), diff --git a/zcash_primitives/src/transaction/sighash.rs b/zcash_primitives/src/transaction/sighash.rs index 71c780030f..658c49daf6 100644 --- a/zcash_primitives/src/transaction/sighash.rs +++ b/zcash_primitives/src/transaction/sighash.rs @@ -3,7 +3,7 @@ use blake2b_simd::Hash as Blake2bHash; use super::{ components::{amount::NonNegativeAmount, transparent}, sighash_v4::v4_signature_hash, - sighash_v5::v5_signature_hash, + sighash_v5::v5_v6_signature_hash, Authorization, TransactionData, TxDigests, TxVersion, }; use crate::{ @@ -11,8 +11,6 @@ use crate::{ sapling::{self, bundle::GrothProofBytes}, }; -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -use crate::transaction::sighash_v7::v7_signature_hash; #[cfg(zcash_unstable = "zfuture")] use {super::components::Amount, crate::extensions::transparent::Precondition}; @@ -91,12 +89,12 @@ pub fn signature_hash< v4_signature_hash(tx, signable_input) } - TxVersion::Zip225 => v5_signature_hash(tx, signable_input, txid_parts), + TxVersion::Zip225 => v5_v6_signature_hash(tx, signable_input, txid_parts), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TxVersion::Zsa => v7_signature_hash(tx, signable_input, txid_parts), + TxVersion::Zsa => v5_v6_signature_hash(tx, signable_input, txid_parts), #[cfg(zcash_unstable = "zfuture")] - TxVersion::ZFuture => v5_signature_hash(tx, signable_input, txid_parts), + TxVersion::ZFuture => v5_v6_signature_hash(tx, signable_input, txid_parts), }) } diff --git a/zcash_primitives/src/transaction/sighash_v5.rs b/zcash_primitives/src/transaction/sighash_v5.rs index 3d8be23afb..9667db8c23 100644 --- a/zcash_primitives/src/transaction/sighash_v5.rs +++ b/zcash_primitives/src/transaction/sighash_v5.rs @@ -141,7 +141,7 @@ pub fn transparent_sig_digest( } #[cfg(zcash_unstable = "zfuture")] -pub fn tze_input_sigdigests( +fn tze_input_sigdigests( bundle: &tze::Bundle, input: &SignableInput<'_>, txid_digests: &TzeDigests, @@ -170,7 +170,7 @@ pub fn tze_input_sigdigests( } /// Implements the [Signature Digest section of ZIP 244](https://zips.z.cash/zip-0244#signature-digest) -pub fn v5_signature_hash< +pub fn v5_v6_signature_hash< TA: TransparentAuthorizingContext, A: Authorization, >( diff --git a/zcash_primitives/src/transaction/sighash_v7.rs b/zcash_primitives/src/transaction/sighash_v7.rs index d4e59f5fe7..9227997dd1 100644 --- a/zcash_primitives/src/transaction/sighash_v7.rs +++ b/zcash_primitives/src/transaction/sighash_v7.rs @@ -1,6 +1,6 @@ use blake2b_simd::Hash as Blake2bHash; -use crate::transaction::sighash_v5::v5_signature_hash; +use crate::transaction::sighash_v5::v5_v6_signature_hash; use crate::transaction::{ sighash::{SignableInput, TransparentAuthorizingContext}, Authorization, TransactionData, TxDigests, @@ -15,5 +15,5 @@ pub fn v7_signature_hash< txid_parts: &TxDigests, ) -> Blake2bHash { // Currently to_hash is designed in a way that it supports both v5 and v7 signature hash - v5_signature_hash(tx, signable_input, txid_parts) + v5_v6_signature_hash(tx, signable_input, txid_parts) } diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index b46ac52647..cdbc18a842 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -14,7 +14,7 @@ use super::{ SIGHASH_NONE, SIGHASH_SINGLE, }, sighash_v4::v4_signature_hash, - sighash_v5::v5_signature_hash, + sighash_v5::v5_v6_signature_hash, testing::arb_tx, transparent::{self}, txid::TxIdDigester, @@ -331,18 +331,18 @@ fn zip_0244() { }; assert_eq!( - v5_signature_hash(&txdata, &signable_input(SIGHASH_ALL), &txid_parts).as_ref(), + v5_v6_signature_hash(&txdata, &signable_input(SIGHASH_ALL), &txid_parts).as_ref(), &tv.sighash_all.unwrap() ); assert_eq!( - v5_signature_hash(&txdata, &signable_input(SIGHASH_NONE), &txid_parts).as_ref(), + v5_v6_signature_hash(&txdata, &signable_input(SIGHASH_NONE), &txid_parts).as_ref(), &tv.sighash_none.unwrap() ); if index < bundle.vout.len() { assert_eq!( - v5_signature_hash(&txdata, &signable_input(SIGHASH_SINGLE), &txid_parts) + v5_v6_signature_hash(&txdata, &signable_input(SIGHASH_SINGLE), &txid_parts) .as_ref(), &tv.sighash_single.unwrap() ); @@ -351,7 +351,7 @@ fn zip_0244() { } assert_eq!( - v5_signature_hash( + v5_v6_signature_hash( &txdata, &signable_input(SIGHASH_ALL | SIGHASH_ANYONECANPAY), &txid_parts, @@ -361,7 +361,7 @@ fn zip_0244() { ); assert_eq!( - v5_signature_hash( + v5_v6_signature_hash( &txdata, &signable_input(SIGHASH_NONE | SIGHASH_ANYONECANPAY), &txid_parts, @@ -372,7 +372,7 @@ fn zip_0244() { if index < bundle.vout.len() { assert_eq!( - v5_signature_hash( + v5_v6_signature_hash( &txdata, &signable_input(SIGHASH_SINGLE | SIGHASH_ANYONECANPAY), &txid_parts, @@ -386,7 +386,7 @@ fn zip_0244() { }; assert_eq!( - v5_signature_hash(&txdata, &SignableInput::Shielded, &txid_parts).as_ref(), + v5_v6_signature_hash(&txdata, &SignableInput::Shielded, &txid_parts).as_ref(), tv.sighash_shielded ); } diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index ad8d274d8b..ebf7a9524d 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -7,11 +7,6 @@ use byteorder::{LittleEndian, WriteBytesExt}; use ff::PrimeField; use orchard::bundle; use orchard::orchard_flavor::OrchardVanilla; -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -use orchard::{ - issuance::{IssueBundle, Signed}, - orchard_flavor::OrchardZSA, -}; use crate::{ consensus::{BlockHeight, BranchId}, @@ -29,6 +24,12 @@ use super::{ Authorization, Authorized, TransactionDigest, TransparentDigests, TxDigests, TxId, TxVersion, }; +#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] +use orchard::{ + issuance::{IssueBundle, Signed}, + orchard_flavor::OrchardZSA, +}; + #[cfg(zcash_unstable = "zfuture")] use super::{ components::tze::{self, TzeIn, TzeOut}, @@ -422,7 +423,7 @@ pub(crate) fn to_hash( .unwrap(); #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - if _txversion.has_zsa() { + if _txversion.has_orchard_zsa() { h.write_all( issue_digest .unwrap_or_else(bundle::commitments::hash_issue_bundle_txid_empty) @@ -591,7 +592,7 @@ impl TransactionDigest for BlockTxCommitmentDigester { } #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - if TxVersion::suggested_for_branch(consensus_branch_id).has_zsa() { + if TxVersion::suggested_for_branch(consensus_branch_id).has_orchard_zsa() { h.write_all(issue_digest.as_bytes()).unwrap(); } From 1860f1d252f4ce43d5c9d0eb358075facc0ac345 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:57:41 +0200 Subject: [PATCH 54/85] Address PR comments --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 0ca17a9e82..3610b0d407 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,7 +34,7 @@ zcash_address = { version = "0.3", path = "components/zcash_address" } #zcash_client_backend = { version = "0.12", path = "zcash_client_backend" } zcash_encoding = { version = "0.2", path = "components/zcash_encoding" } zcash_keys = { version = "0.2", path = "zcash_keys" } -zcash_protocol = { version = "0.1", path = "components/zcash_protocol", features = ["test-dependencies"] } +zcash_protocol = { version = "0.1", path = "components/zcash_protocol" } zip321 = { version = "0.0", path = "components/zip321" } zcash_note_encryption = "0.4" From f4cf872fa0f6019dd4921c43568a943c1361e9a3 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Fri, 26 Jul 2024 11:46:36 +0200 Subject: [PATCH 55/85] Fmt --- zcash_primitives/src/transaction/builder.rs | 7 ++++--- .../src/transaction/components/issuance.rs | 18 ++++++------------ zcash_primitives/src/transaction/mod.rs | 5 +++-- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index db0e6694bb..450e121caa 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -199,7 +199,7 @@ impl From for Error { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] impl From for Error { fn from(e: issuance::Error) -> Self { - Error::IssuanceBundle(e) + Error::IssuanceBundle(e) } } @@ -389,7 +389,6 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// The expiry height will be set to the given height plus the default transaction /// expiry delta (20 blocks). pub fn new(params: P, target_height: BlockHeight, build_config: BuildConfig) -> Self { - let orchard_builder = if params.is_nu_active(NetworkUpgrade::Nu5, target_height) { build_config .orchard_builder_config() @@ -469,7 +468,9 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { value: orchard::value::NoteValue, ) -> Result<(), Error> { if self.issuance_builder.is_some() { - return Err(Error::IssuanceBuilder("Issuance bundle already initialized")); + return Err(Error::IssuanceBuilder( + "Issuance bundle already initialized", + )); } self.issuance_builder = Some( diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index fb6719b396..49c0d395c4 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -68,10 +68,8 @@ pub fn read_note(mut reader: R) -> io::Result { asset, rho, rseed, - )).ok_or(Error::new( - ErrorKind::InvalidData, - "Invalid note", - ))?) + )) + .ok_or(Error::new(ErrorKind::InvalidData, "Invalid note"))?) } fn read_rho(mut reader: R) -> io::Result { @@ -100,19 +98,15 @@ fn read_recipient(mut reader: R) -> io::Result
{ pub fn read_asset(reader: &mut R) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; - Option::from(AssetBase::from_bytes(&bytes)).ok_or(Error::new( - ErrorKind::InvalidData, - "Invalid asset", - )) + Option::from(AssetBase::from_bytes(&bytes)) + .ok_or(Error::new(ErrorKind::InvalidData, "Invalid asset")) } fn read_rseed(mut reader: R, nullifier: &Rho) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; - Option::from(RandomSeed::from_bytes(bytes, nullifier)).ok_or(Error::new( - ErrorKind::InvalidData, - "Invalid rseed", - )) + Option::from(RandomSeed::from_bytes(bytes, nullifier)) + .ok_or(Error::new(ErrorKind::InvalidData, "Invalid rseed")) } /// Writes an [`IssueBundle`] in the v5 transaction format. diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index a4305acecc..b01e2c2bdc 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -1214,6 +1214,7 @@ pub mod testing { #[cfg(zcash_unstable = "zfuture")] use super::components::tze::testing::{self as tze}; + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use crate::transaction::components::issuance; pub fn arb_txid() -> impl Strategy { @@ -1275,8 +1276,8 @@ pub mod testing { )( lock_time in any::(), expiry_height in any::(), - transparent_bundle in transparent::arb_bundle(), - sapling_bundle in sapling::arb_bundle_for_version(version), + transparent_bundle in transparent_testing::arb_bundle(), + sapling_bundle in sapling_testing::arb_bundle_for_version(version), orchard_bundle in orchard_testing::arb_bundle_for_version(version), tze_bundle in tze::arb_bundle(consensus_branch_id), version in Just(version) From aec1879dbfff0416cf36b9d13909797488ef2a8f Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Fri, 26 Jul 2024 11:51:15 +0200 Subject: [PATCH 56/85] Clippy --- zcash_primitives/src/transaction/components/issuance.rs | 4 ++-- zcash_primitives/src/transaction/mod.rs | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index 49c0d395c4..abe39d1d56 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -62,14 +62,14 @@ pub fn read_note(mut reader: R) -> io::Result { let asset = read_asset(&mut reader)?; let rho = read_rho(&mut reader)?; let rseed = read_rseed(&mut reader, &rho)?; - Ok(Option::from(Note::from_parts( + Option::from(Note::from_parts( recipient, NoteValue::from_raw(value), asset, rho, rseed, )) - .ok_or(Error::new(ErrorKind::InvalidData, "Invalid note"))?) + .ok_or(Error::new(ErrorKind::InvalidData, "Invalid note")) } fn read_rho(mut reader: R) -> io::Result { diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index b01e2c2bdc..eecf2264f6 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -1214,7 +1214,6 @@ pub mod testing { #[cfg(zcash_unstable = "zfuture")] use super::components::tze::testing::{self as tze}; - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use crate::transaction::components::issuance; pub fn arb_txid() -> impl Strategy { From 830260ffaba80f47305f4b5f8d4784541f06b4ff Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Fri, 26 Jul 2024 16:35:14 +0200 Subject: [PATCH 57/85] Use ZSA BundleType --- zcash_primitives/src/transaction/builder.rs | 77 +++++++-------------- 1 file changed, 24 insertions(+), 53 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 450e121caa..e7d7a12987 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1,6 +1,5 @@ //! Structs for building transactions. -use orchard::Address; use std::cmp::Ordering; use std::error; use std::fmt; @@ -30,6 +29,9 @@ use crate::{ }, }; +use orchard::Address; +use orchard::builder::BundleType; + #[cfg(feature = "transparent-inputs")] use crate::transaction::components::transparent::builder::TransparentInputInfo; @@ -240,6 +242,10 @@ impl Progress { /// Rules for how the builder should be configured for each shielded pool. #[derive(Clone, Copy)] pub enum BuildConfig { + Zsa { + sapling_anchor: Option, + orchard_anchor: Option, + }, Standard { sapling_anchor: Option, orchard_anchor: Option, @@ -253,7 +259,7 @@ impl BuildConfig { &self, ) -> Option<(sapling::builder::BundleType, sapling::Anchor)> { match self { - BuildConfig::Standard { sapling_anchor, .. } => sapling_anchor + BuildConfig::Standard { sapling_anchor, .. } | BuildConfig::Zsa { sapling_anchor, .. } => sapling_anchor .as_ref() .map(|a| (sapling::builder::BundleType::DEFAULT, *a)), BuildConfig::Coinbase => Some(( @@ -266,13 +272,16 @@ impl BuildConfig { /// Returns the Orchard bundle type and anchor for this configuration. pub fn orchard_builder_config( &self, - ) -> Option<(orchard::builder::BundleType, orchard::Anchor)> { + ) -> Option<(BundleType, orchard::Anchor)> { match self { BuildConfig::Standard { orchard_anchor, .. } => orchard_anchor .as_ref() - .map(|a| (orchard::builder::BundleType::DEFAULT_VANILLA, *a)), + .map(|a| (BundleType::DEFAULT_VANILLA, *a)), + BuildConfig::Zsa { orchard_anchor, .. } => orchard_anchor + .as_ref() + .map(|a| (BundleType::DEFAULT_ZSA, *a)), BuildConfig::Coinbase => Some(( - orchard::builder::BundleType::Coinbase, + BundleType::Coinbase, orchard::Anchor::empty_tree(), )), } @@ -505,43 +514,6 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { Ok(()) } - /// Adds an Orchard ZSA note to be spent in this bundle. - /// - /// Returns an error if the given Merkle path does not have the required anchor for - /// the given note. - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn add_orchard_zsa_spend( - &mut self, - sk: &orchard::keys::SpendingKey, - note: orchard::Note, - merkle_path: orchard::tree::MerklePath, - ) -> Result<(), Error> { - self.add_orchard_spend_impl(sk, note, merkle_path) - } - - /// Adds an Orchard ZSA output to the transaction. - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn add_orchard_zsa_output( - &mut self, - ovk: Option, - recipient: Address, - value: u64, - asset: AssetBase, - memo: MemoBytes, - ) -> Result<(), Error> { - self.orchard_builder - .as_mut() - .ok_or(Error::OrchardBuilderNotAvailable)? - .add_output( - ovk, - recipient, - orchard::value::NoteValue::from_raw(value), - asset, - Some(*memo.as_array()), - ) - .map_err(Error::OrchardRecipient) - } - /// Adds a Burn action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { @@ -566,16 +538,10 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< note: orchard::Note, merkle_path: orchard::tree::MerklePath, ) -> Result<(), Error> { - assert_eq!(note.asset().is_native().unwrap_u8(), 1); - self.add_orchard_spend_impl(sk, note, merkle_path) - } - - fn add_orchard_spend_impl( - &mut self, - sk: &orchard::keys::SpendingKey, - note: orchard::Note, - merkle_path: orchard::tree::MerklePath, - ) -> Result<(), Error> { + let (bundle_type, _) = self.build_config.orchard_builder_config().ok_or(Error::OrchardBuilderNotAvailable)?; + if bundle_type == BundleType::DEFAULT_VANILLA { + assert_eq!(note.asset().is_native().unwrap_u8(), 1); + } self.orchard_builder .as_mut() .ok_or(Error::OrchardBuilderNotAvailable)? @@ -594,8 +560,13 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< ovk: Option, recipient: Address, value: u64, + asset: AssetBase, memo: MemoBytes, ) -> Result<(), Error> { + let (bundle_type, _) = self.build_config.orchard_builder_config().ok_or(Error::OrchardBuilderNotAvailable)?; + if bundle_type == BundleType::DEFAULT_VANILLA { + assert_eq!(asset.is_native().unwrap_u8(), 1); + } self.orchard_builder .as_mut() .ok_or(Error::OrchardBuilderNotAvailable)? @@ -603,7 +574,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< ovk, recipient, orchard::value::NoteValue::from_raw(value), - AssetBase::native(), + asset, Some(*memo.as_array()), ) .map_err(Error::OrchardRecipient) From acb8f97624818adabc78319df79e0e5fd8c23fee Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Fri, 26 Jul 2024 16:38:36 +0200 Subject: [PATCH 58/85] Use bundle check instead of has_orchard_zsa --- zcash_primitives/src/transaction/builder.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index e7d7a12987..44af8b2f9d 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -869,7 +869,8 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< let mut orchard_meta = orchard::builder::BundleMetadata::empty(); if let Some(builder) = self.orchard_builder { - if version.has_orchard_zsa() { + let (bundle_type, _) = self.build_config.orchard_builder_config().ok_or(Error::OrchardBuilderNotAvailable)?; + if bundle_type == BundleType::DEFAULT_ZSA { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] { let (bundle, meta) = builder From 4f6ec46f4d43eb9e28e575a13c21ab5748d573e4 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Fri, 26 Jul 2024 17:37:47 +0200 Subject: [PATCH 59/85] Fix upper bound calculation --- components/zcash_protocol/src/consensus.rs | 44 ++++++++++++++-------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index a031389690..0da7293a9c 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -680,27 +680,15 @@ impl BranchId { .activation_height(NetworkUpgrade::Canopy) .map(|lower| (lower, params.activation_height(NetworkUpgrade::Nu5))), BranchId::Nu5 => params.activation_height(NetworkUpgrade::Nu5).map(|lower| { - #[cfg(zcash_unstable = "zfuture")] - let upper = params.activation_height(NetworkUpgrade::ZFuture); - #[cfg(not(zcash_unstable = "zfuture"))] - let upper = None; - (lower, upper) + (lower, upper_bound(lower, params)) }), #[cfg(zcash_unstable = "nu6")] BranchId::Nu6 => params.activation_height(NetworkUpgrade::Nu6).map(|lower| { - #[cfg(zcash_unstable = "zfuture")] - let upper = params.activation_height(NetworkUpgrade::ZFuture); - #[cfg(not(zcash_unstable = "zfuture"))] - let upper = None; - (lower, upper) + (lower, upper_bound(lower, params)) }), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] BranchId::Nu7 => params.activation_height(NetworkUpgrade::Nu7).map(|lower| { - #[cfg(zcash_unstable = "zfuture")] - let upper = params.activation_height(NetworkUpgrade::ZFuture); - #[cfg(not(zcash_unstable = "zfuture"))] - let upper = None; - (lower, upper) + (lower, upper_bound(lower, params)) }), #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => params @@ -713,6 +701,32 @@ impl BranchId { !matches!(self, BranchId::Sprout | BranchId::Overwinter) } } +#[allow(unused_variables)] +fn upper_bound(target_height: BlockHeight, params: &P) -> Option { + + #[allow(dead_code)] + fn check_bound(target_height: BlockHeight, current_upper: Option, nu: NetworkUpgrade, params: &P) -> Option { + let nu_height = params.activation_height(nu); + if nu_height.is_some() && nu_height.unwrap() > target_height { + nu_height + } else { + current_upper + } + } + + #[allow(unused_mut)] + let mut upper = None; + #[cfg(zcash_unstable = "nu6")] { + upper = check_bound(target_height, upper, NetworkUpgrade::Nu6, params); + } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] { + upper = check_bound(target_height, upper, NetworkUpgrade::Nu7, params); + } + #[cfg(zcash_unstable = "zfuture")] { + upper = check_bound(target_height, upper, NetworkUpgrade::ZFuture, params); + } + upper +} #[cfg(any(test, feature = "test-dependencies"))] pub mod testing { From 3d208794379d9999f9eb053066e9741577e57f6b Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Fri, 26 Jul 2024 20:20:29 +0200 Subject: [PATCH 60/85] Fmt --- components/zcash_protocol/src/consensus.rs | 35 ++++++++++++--------- zcash_primitives/src/transaction/builder.rs | 29 ++++++++++------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index 0da7293a9c..6f1a23a739 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -679,17 +679,17 @@ impl BranchId { BranchId::Canopy => params .activation_height(NetworkUpgrade::Canopy) .map(|lower| (lower, params.activation_height(NetworkUpgrade::Nu5))), - BranchId::Nu5 => params.activation_height(NetworkUpgrade::Nu5).map(|lower| { - (lower, upper_bound(lower, params)) - }), + BranchId::Nu5 => params + .activation_height(NetworkUpgrade::Nu5) + .map(|lower| (lower, upper_bound(lower, params))), #[cfg(zcash_unstable = "nu6")] - BranchId::Nu6 => params.activation_height(NetworkUpgrade::Nu6).map(|lower| { - (lower, upper_bound(lower, params)) - }), + BranchId::Nu6 => params + .activation_height(NetworkUpgrade::Nu6) + .map(|lower| (lower, upper_bound(lower, params))), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - BranchId::Nu7 => params.activation_height(NetworkUpgrade::Nu7).map(|lower| { - (lower, upper_bound(lower, params)) - }), + BranchId::Nu7 => params + .activation_height(NetworkUpgrade::Nu7) + .map(|lower| (lower, upper_bound(lower, params))), #[cfg(zcash_unstable = "zfuture")] BranchId::ZFuture => params .activation_height(NetworkUpgrade::ZFuture) @@ -703,9 +703,13 @@ impl BranchId { } #[allow(unused_variables)] fn upper_bound(target_height: BlockHeight, params: &P) -> Option { - #[allow(dead_code)] - fn check_bound(target_height: BlockHeight, current_upper: Option, nu: NetworkUpgrade, params: &P) -> Option { + fn check_bound( + target_height: BlockHeight, + current_upper: Option, + nu: NetworkUpgrade, + params: &P, + ) -> Option { let nu_height = params.activation_height(nu); if nu_height.is_some() && nu_height.unwrap() > target_height { nu_height @@ -716,13 +720,16 @@ fn upper_bound(target_height: BlockHeight, params: &P) -> Option< #[allow(unused_mut)] let mut upper = None; - #[cfg(zcash_unstable = "nu6")] { + #[cfg(zcash_unstable = "nu6")] + { upper = check_bound(target_height, upper, NetworkUpgrade::Nu6, params); } - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] { + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + { upper = check_bound(target_height, upper, NetworkUpgrade::Nu7, params); } - #[cfg(zcash_unstable = "zfuture")] { + #[cfg(zcash_unstable = "zfuture")] + { upper = check_bound(target_height, upper, NetworkUpgrade::ZFuture, params); } upper diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 44af8b2f9d..9ac6c33467 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -29,8 +29,8 @@ use crate::{ }, }; -use orchard::Address; use orchard::builder::BundleType; +use orchard::Address; #[cfg(feature = "transparent-inputs")] use crate::transaction::components::transparent::builder::TransparentInputInfo; @@ -259,7 +259,8 @@ impl BuildConfig { &self, ) -> Option<(sapling::builder::BundleType, sapling::Anchor)> { match self { - BuildConfig::Standard { sapling_anchor, .. } | BuildConfig::Zsa { sapling_anchor, .. } => sapling_anchor + BuildConfig::Standard { sapling_anchor, .. } + | BuildConfig::Zsa { sapling_anchor, .. } => sapling_anchor .as_ref() .map(|a| (sapling::builder::BundleType::DEFAULT, *a)), BuildConfig::Coinbase => Some(( @@ -270,9 +271,7 @@ impl BuildConfig { } /// Returns the Orchard bundle type and anchor for this configuration. - pub fn orchard_builder_config( - &self, - ) -> Option<(BundleType, orchard::Anchor)> { + pub fn orchard_builder_config(&self) -> Option<(BundleType, orchard::Anchor)> { match self { BuildConfig::Standard { orchard_anchor, .. } => orchard_anchor .as_ref() @@ -280,10 +279,7 @@ impl BuildConfig { BuildConfig::Zsa { orchard_anchor, .. } => orchard_anchor .as_ref() .map(|a| (BundleType::DEFAULT_ZSA, *a)), - BuildConfig::Coinbase => Some(( - BundleType::Coinbase, - orchard::Anchor::empty_tree(), - )), + BuildConfig::Coinbase => Some((BundleType::Coinbase, orchard::Anchor::empty_tree())), } } } @@ -538,7 +534,10 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< note: orchard::Note, merkle_path: orchard::tree::MerklePath, ) -> Result<(), Error> { - let (bundle_type, _) = self.build_config.orchard_builder_config().ok_or(Error::OrchardBuilderNotAvailable)?; + let (bundle_type, _) = self + .build_config + .orchard_builder_config() + .ok_or(Error::OrchardBuilderNotAvailable)?; if bundle_type == BundleType::DEFAULT_VANILLA { assert_eq!(note.asset().is_native().unwrap_u8(), 1); } @@ -563,7 +562,10 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< asset: AssetBase, memo: MemoBytes, ) -> Result<(), Error> { - let (bundle_type, _) = self.build_config.orchard_builder_config().ok_or(Error::OrchardBuilderNotAvailable)?; + let (bundle_type, _) = self + .build_config + .orchard_builder_config() + .ok_or(Error::OrchardBuilderNotAvailable)?; if bundle_type == BundleType::DEFAULT_VANILLA { assert_eq!(asset.is_native().unwrap_u8(), 1); } @@ -869,7 +871,10 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< let mut orchard_meta = orchard::builder::BundleMetadata::empty(); if let Some(builder) = self.orchard_builder { - let (bundle_type, _) = self.build_config.orchard_builder_config().ok_or(Error::OrchardBuilderNotAvailable)?; + let (bundle_type, _) = self + .build_config + .orchard_builder_config() + .ok_or(Error::OrchardBuilderNotAvailable)?; if bundle_type == BundleType::DEFAULT_ZSA { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] { From 7f045e700124f76241114791c9bdae6d5fff64ba Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:27:46 +0200 Subject: [PATCH 61/85] Add finalization --- zcash_primitives/src/transaction/builder.rs | 40 ++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 9ac6c33467..baf5294c4c 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -463,7 +463,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { } } - /// Adds an Issuance action to the transaction. + /// Creates IssuanceBundle and adds an Issuance action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn init_issuance_bundle( &mut self, @@ -471,6 +471,26 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { asset_desc: String, recipient: Address, value: orchard::value::NoteValue, + ) -> Result<(), Error> { + self.init_issuance_bundle_impl(ik, asset_desc, Some(IssueInfo { recipient, value })) + } + + /// Creates IssuanceBundle and adds a finalization action to the transaction. + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + pub fn init_finalizing_issuance_bundle( + &mut self, + ik: IssuanceAuthorizingKey, + asset_desc: String, + ) -> Result<(), Error> { + self.init_issuance_bundle_impl(ik, asset_desc, None) + } + + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + fn init_issuance_bundle_impl( + &mut self, + ik: IssuanceAuthorizingKey, + asset_desc: String, + issue_info: Option, ) -> Result<(), Error> { if self.issuance_builder.is_some() { return Err(Error::IssuanceBuilder( @@ -482,11 +502,11 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { IssueBundle::new( IssuanceValidatingKey::from(&ik), asset_desc, - Some(IssueInfo { recipient, value }), + issue_info, OsRng, ) - .map_err(Error::IssuanceBundle)? - .0, + .map_err(Error::IssuanceBundle)? + .0, ); self.issuance_isk = Some(ik); @@ -510,6 +530,18 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { Ok(()) } + /// Finalizes a given asset + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + pub fn finalize_asset(&mut self, asset_desc: String) -> Result<(), Error> { + self.issuance_builder + .as_mut() + .ok_or(Error::IssuanceBuilderNotAvailable)? + .finalize_action(asset_desc) + .map_err(Error::IssuanceBundle)?; + + Ok(()) + } + /// Adds a Burn action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { From f4119485052d09a58ba8c7e31346e1032d674fd9 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 30 Jul 2024 14:50:42 +0200 Subject: [PATCH 62/85] Add issuance builder tests --- zcash_primitives/src/transaction/builder.rs | 112 ++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index baf5294c4c..13f6281334 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1165,6 +1165,18 @@ mod tests { use super::{Builder, Error}; + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + use { + crate::zip32::AccountId, + crate::transaction::fees::zip317::FeeError, + orchard::Address, + orchard::keys::{FullViewingKey, IssuanceAuthorizingKey, SpendingKey}, + orchard::value::NoteValue, + zip32::Scope::External, + zcash_protocol::consensus::TestNetwork, + zcash_protocol::constants::testnet::COIN_TYPE, + }; + #[cfg(zcash_unstable = "zfuture")] #[cfg(feature = "transparent-inputs")] use super::TzeBuilder; @@ -1176,6 +1188,7 @@ mod tests { zip32::AccountId, }; + // This test only works with the transparent_inputs feature because we have to // be able to create a tx with a valid balance, without using Sapling inputs. #[test] @@ -1448,4 +1461,103 @@ mod tests { ); } } + + #[test] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + fn init_issuance_bundle_with_finalization() { + let (mut builder, iak, _) = prepare_zsa_test(); + + let asset = "asset_desc".to_string(); + + builder.init_finalizing_issuance_bundle::(iak, asset.clone()).unwrap(); + + let issuance_builder = builder.issuance_builder.clone().unwrap(); + assert_eq!(issuance_builder.actions().len(), 1, "There should be only one action"); + let action = issuance_builder.get_action(asset).unwrap(); + assert!(action.is_finalized(), "Action should be finalized"); + assert_eq!(action.notes().len(), 0, "Action should have zero notes"); + } + + #[test] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + fn init_issuance_bundle_without_finalization() { + let (mut builder, iak, address) = prepare_zsa_test(); + + let asset = "asset_desc".to_string(); + + builder.init_issuance_bundle::(iak, asset.clone(), address, NoteValue::from_raw(42)).unwrap(); + + let issuance_builder = builder.issuance_builder.unwrap(); + assert_eq!(issuance_builder.actions().len(), 1, "There should be only one action"); + let action = issuance_builder.get_action(asset).unwrap(); + assert_eq!(action.is_finalized(), false, "Action should not be finalized"); + assert_eq!(action.notes().len(), 1, "Action should have 1 note"); + assert_eq!(action.notes().first().unwrap().value().inner(), 42, "Incorrect note value"); + } + + #[test] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + fn add_issuance_same_asset() { + let (mut builder, iak, address) = prepare_zsa_test(); + + let asset = "asset_desc".to_string(); + + builder.init_issuance_bundle::(iak, asset.clone(), address, NoteValue::from_raw(42)).unwrap(); + builder.add_issuance::(asset.clone(), address, NoteValue::from_raw(21)).unwrap(); + + let issuance_builder = builder.issuance_builder.unwrap(); + assert_eq!(issuance_builder.actions().len(), 1, "There should be only one action"); + let action = issuance_builder.get_action(asset).unwrap(); + assert_eq!(action.is_finalized(), false, "Action should not be finalized"); + assert_eq!(action.notes().len(), 2, "Action should have 2 notes"); + assert_eq!(action.notes().iter().map(| note | note.value().inner()).sum::(), 42 + 21, "Incorrect notes sum"); + } + + #[test] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + fn add_issuance_different_asset() { + let (mut builder, iak, address) = prepare_zsa_test(); + + let asset1 = "asset_desc".to_string(); + let asset2 = "asset_desc_2".to_string(); + + builder.init_issuance_bundle::(iak, asset1.clone(), address, NoteValue::from_raw(42)).unwrap(); + builder.add_issuance::(asset2.clone(), address, NoteValue::from_raw(21)).unwrap(); + + let issuance_builder = builder.issuance_builder.unwrap(); + assert_eq!(issuance_builder.actions().len(), 2, "There should be 2 actions"); + + let action = issuance_builder.get_action(asset1).unwrap(); + assert_eq!(action.is_finalized(), false, "Action should not be finalized"); + assert_eq!(action.notes().len(), 1, "Action should have 1 note"); + assert_eq!(action.notes().iter().map(| note | note.value().inner()).sum::(), 42, "Incorrect notes sum"); + + let action2 = issuance_builder.get_action(asset2).unwrap(); + assert_eq!(action2.is_finalized(), false, "Action should not be finalized"); + assert_eq!(action2.notes().len(), 1, "Action should have 1 note"); + assert_eq!(action2.notes().iter().map(| note | note.value().inner()).sum::(), 21, "Incorrect notes sum"); + } + + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + fn prepare_zsa_test() -> (Builder<'static, TestNetwork, ()>, IssuanceAuthorizingKey, Address) { + let seed = "0123456789abcdef0123456789abcdef".as_bytes(); + + let iak = IssuanceAuthorizingKey::from_zip32_seed(seed, COIN_TYPE, 0).unwrap(); + let tx_height = TEST_NETWORK + .activation_height(NetworkUpgrade::Nu7) + .unwrap(); + + let build_config = BuildConfig::Standard { + sapling_anchor: None, + orchard_anchor: Some(orchard::Anchor::empty_tree()), + }; + + let builder = Builder::new(TEST_NETWORK, tx_height, build_config); + + let sk = SpendingKey::from_zip32_seed(seed, COIN_TYPE, AccountId::try_from(0).unwrap()).unwrap(); + let fvk = FullViewingKey::from(&sk); + let address = fvk.address_at(0u32, External); + + (builder, iak, address) + } } From 3ac26182ceb21751a8d53ca519a9db84a02711be Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 30 Jul 2024 15:20:30 +0200 Subject: [PATCH 63/85] Fmt --- zcash_primitives/src/transaction/builder.rs | 134 +++++++++++++++----- 1 file changed, 104 insertions(+), 30 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 13f6281334..c231f609ef 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -472,7 +472,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { recipient: Address, value: orchard::value::NoteValue, ) -> Result<(), Error> { - self.init_issuance_bundle_impl(ik, asset_desc, Some(IssueInfo { recipient, value })) + self.init_issuance_bundle_impl(ik, asset_desc, Some(IssueInfo { recipient, value })) } /// Creates IssuanceBundle and adds a finalization action to the transaction. @@ -505,8 +505,8 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { issue_info, OsRng, ) - .map_err(Error::IssuanceBundle)? - .0, + .map_err(Error::IssuanceBundle)? + .0, ); self.issuance_isk = Some(ik); @@ -1167,14 +1167,14 @@ mod tests { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use { - crate::zip32::AccountId, crate::transaction::fees::zip317::FeeError, - orchard::Address, + crate::zip32::AccountId, orchard::keys::{FullViewingKey, IssuanceAuthorizingKey, SpendingKey}, orchard::value::NoteValue, - zip32::Scope::External, + orchard::Address, zcash_protocol::consensus::TestNetwork, zcash_protocol::constants::testnet::COIN_TYPE, + zip32::Scope::External, }; #[cfg(zcash_unstable = "zfuture")] @@ -1188,7 +1188,6 @@ mod tests { zip32::AccountId, }; - // This test only works with the transparent_inputs feature because we have to // be able to create a tx with a valid balance, without using Sapling inputs. #[test] @@ -1469,10 +1468,16 @@ mod tests { let asset = "asset_desc".to_string(); - builder.init_finalizing_issuance_bundle::(iak, asset.clone()).unwrap(); + builder + .init_finalizing_issuance_bundle::(iak, asset.clone()) + .unwrap(); let issuance_builder = builder.issuance_builder.clone().unwrap(); - assert_eq!(issuance_builder.actions().len(), 1, "There should be only one action"); + assert_eq!( + issuance_builder.actions().len(), + 1, + "There should be only one action" + ); let action = issuance_builder.get_action(asset).unwrap(); assert!(action.is_finalized(), "Action should be finalized"); assert_eq!(action.notes().len(), 0, "Action should have zero notes"); @@ -1485,14 +1490,28 @@ mod tests { let asset = "asset_desc".to_string(); - builder.init_issuance_bundle::(iak, asset.clone(), address, NoteValue::from_raw(42)).unwrap(); + builder + .init_issuance_bundle::(iak, asset.clone(), address, NoteValue::from_raw(42)) + .unwrap(); let issuance_builder = builder.issuance_builder.unwrap(); - assert_eq!(issuance_builder.actions().len(), 1, "There should be only one action"); + assert_eq!( + issuance_builder.actions().len(), + 1, + "There should be only one action" + ); let action = issuance_builder.get_action(asset).unwrap(); - assert_eq!(action.is_finalized(), false, "Action should not be finalized"); + assert_eq!( + action.is_finalized(), + false, + "Action should not be finalized" + ); assert_eq!(action.notes().len(), 1, "Action should have 1 note"); - assert_eq!(action.notes().first().unwrap().value().inner(), 42, "Incorrect note value"); + assert_eq!( + action.notes().first().unwrap().value().inner(), + 42, + "Incorrect note value" + ); } #[test] @@ -1502,15 +1521,35 @@ mod tests { let asset = "asset_desc".to_string(); - builder.init_issuance_bundle::(iak, asset.clone(), address, NoteValue::from_raw(42)).unwrap(); - builder.add_issuance::(asset.clone(), address, NoteValue::from_raw(21)).unwrap(); + builder + .init_issuance_bundle::(iak, asset.clone(), address, NoteValue::from_raw(42)) + .unwrap(); + builder + .add_issuance::(asset.clone(), address, NoteValue::from_raw(21)) + .unwrap(); let issuance_builder = builder.issuance_builder.unwrap(); - assert_eq!(issuance_builder.actions().len(), 1, "There should be only one action"); + assert_eq!( + issuance_builder.actions().len(), + 1, + "There should be only one action" + ); let action = issuance_builder.get_action(asset).unwrap(); - assert_eq!(action.is_finalized(), false, "Action should not be finalized"); + assert_eq!( + action.is_finalized(), + false, + "Action should not be finalized" + ); assert_eq!(action.notes().len(), 2, "Action should have 2 notes"); - assert_eq!(action.notes().iter().map(| note | note.value().inner()).sum::(), 42 + 21, "Incorrect notes sum"); + assert_eq!( + action + .notes() + .iter() + .map(|note| note.value().inner()) + .sum::(), + 42 + 21, + "Incorrect notes sum" + ); } #[test] @@ -1521,31 +1560,65 @@ mod tests { let asset1 = "asset_desc".to_string(); let asset2 = "asset_desc_2".to_string(); - builder.init_issuance_bundle::(iak, asset1.clone(), address, NoteValue::from_raw(42)).unwrap(); - builder.add_issuance::(asset2.clone(), address, NoteValue::from_raw(21)).unwrap(); + builder + .init_issuance_bundle::(iak, asset1.clone(), address, NoteValue::from_raw(42)) + .unwrap(); + builder + .add_issuance::(asset2.clone(), address, NoteValue::from_raw(21)) + .unwrap(); let issuance_builder = builder.issuance_builder.unwrap(); - assert_eq!(issuance_builder.actions().len(), 2, "There should be 2 actions"); + assert_eq!( + issuance_builder.actions().len(), + 2, + "There should be 2 actions" + ); let action = issuance_builder.get_action(asset1).unwrap(); - assert_eq!(action.is_finalized(), false, "Action should not be finalized"); + assert_eq!( + action.is_finalized(), + false, + "Action should not be finalized" + ); assert_eq!(action.notes().len(), 1, "Action should have 1 note"); - assert_eq!(action.notes().iter().map(| note | note.value().inner()).sum::(), 42, "Incorrect notes sum"); + assert_eq!( + action + .notes() + .iter() + .map(|note| note.value().inner()) + .sum::(), + 42, + "Incorrect notes sum" + ); let action2 = issuance_builder.get_action(asset2).unwrap(); - assert_eq!(action2.is_finalized(), false, "Action should not be finalized"); + assert_eq!( + action2.is_finalized(), + false, + "Action should not be finalized" + ); assert_eq!(action2.notes().len(), 1, "Action should have 1 note"); - assert_eq!(action2.notes().iter().map(| note | note.value().inner()).sum::(), 21, "Incorrect notes sum"); + assert_eq!( + action2 + .notes() + .iter() + .map(|note| note.value().inner()) + .sum::(), + 21, + "Incorrect notes sum" + ); } #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - fn prepare_zsa_test() -> (Builder<'static, TestNetwork, ()>, IssuanceAuthorizingKey, Address) { + fn prepare_zsa_test() -> ( + Builder<'static, TestNetwork, ()>, + IssuanceAuthorizingKey, + Address, + ) { let seed = "0123456789abcdef0123456789abcdef".as_bytes(); let iak = IssuanceAuthorizingKey::from_zip32_seed(seed, COIN_TYPE, 0).unwrap(); - let tx_height = TEST_NETWORK - .activation_height(NetworkUpgrade::Nu7) - .unwrap(); + let tx_height = TEST_NETWORK.activation_height(NetworkUpgrade::Nu7).unwrap(); let build_config = BuildConfig::Standard { sapling_anchor: None, @@ -1554,7 +1627,8 @@ mod tests { let builder = Builder::new(TEST_NETWORK, tx_height, build_config); - let sk = SpendingKey::from_zip32_seed(seed, COIN_TYPE, AccountId::try_from(0).unwrap()).unwrap(); + let sk = + SpendingKey::from_zip32_seed(seed, COIN_TYPE, AccountId::try_from(0).unwrap()).unwrap(); let fvk = FullViewingKey::from(&sk); let address = fvk.address_at(0u32, External); From ea1770e939fc4c292cbc4a1e5c4e3250d2b27d94 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 30 Jul 2024 15:32:57 +0200 Subject: [PATCH 64/85] Fix double import --- zcash_primitives/src/transaction/builder.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index c231f609ef..4be0fecdc5 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1168,7 +1168,6 @@ mod tests { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use { crate::transaction::fees::zip317::FeeError, - crate::zip32::AccountId, orchard::keys::{FullViewingKey, IssuanceAuthorizingKey, SpendingKey}, orchard::value::NoteValue, orchard::Address, @@ -1177,6 +1176,10 @@ mod tests { zip32::Scope::External, }; + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + #[cfg(not(feature = "transparent-inputs"))] + use crate::zip32::AccountId; + #[cfg(zcash_unstable = "zfuture")] #[cfg(feature = "transparent-inputs")] use super::TzeBuilder; From fe88163f6c739369618ce2c7eea3013efa654ead Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 31 Jul 2024 15:50:09 +0200 Subject: [PATCH 65/85] Use updated zsa1 --- Cargo.lock | 24 +++++-------------- Cargo.toml | 4 ++-- .../src/transaction/components/orchard.rs | 9 +++---- .../src/transaction/components/sapling.rs | 3 +-- 4 files changed, 14 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a0d968d9d0..ed7d9de86b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1229,7 +1229,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=zsa1#39b479ea81045e5c5ac719821fe2feb2bfce5f36" +source = "git+https://github.com/QED-it/orchard?branch=zsa1#6e6112c80eb751a93c0fd1d881e9ca69887e1154" dependencies = [ "aes", "bitvec", @@ -1253,7 +1253,7 @@ dependencies = [ "serde", "subtle", "tracing", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1)", + "zcash_note_encryption", "zcash_spec", "zip32", ] @@ -1752,7 +1752,7 @@ dependencies = [ [[package]] name = "sapling-crypto" version = "0.1.3" -source = "git+https://github.com/QED-it/sapling-crypto?branch=orchard-backward-compatibility#d1aa6205f1e12af7364b768f80b085618dee781a" +source = "git+https://github.com/QED-it/sapling-crypto?branch=zsa1#e19f4d916360842becf2842bfd9b27228e66fa81" dependencies = [ "aes", "bellman", @@ -1776,7 +1776,7 @@ dependencies = [ "redjubjub", "subtle", "tracing", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=note-bytes)", + "zcash_note_encryption", "zcash_spec", "zip32", ] @@ -2487,19 +2487,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=note-bytes#e6023a923194cf27668702c88e6dc5ceeb361304" -dependencies = [ - "chacha20", - "chacha20poly1305", - "cipher", - "rand_core", - "subtle", -] - -[[package]] -name = "zcash_note_encryption" -version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#b8bd2a186fc04ec4f55b2db44df7374f03ab5725" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#58384553aab76b2ee6d6eb328cf2187fa824ec9a" dependencies = [ "chacha20", "chacha20poly1305", @@ -2545,7 +2533,7 @@ dependencies = [ "tracing", "zcash_address", "zcash_encoding", - "zcash_note_encryption 0.4.0 (git+https://github.com/QED-it/zcash_note_encryption?branch=note-bytes)", + "zcash_note_encryption", "zcash_protocol", "zcash_spec", "zip32", diff --git a/Cargo.toml b/Cargo.toml index 3610b0d407..ea4dc87ac0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -124,5 +124,5 @@ panic = 'abort' codegen-units = 1 [patch.crates-io] -zcash_note_encryption = { version = "0.4", git = "https://github.com/QED-it/zcash_note_encryption", branch = "note-bytes" } -sapling = { package = "sapling-crypto", version = "0.1.3", git = "https://github.com/QED-it/sapling-crypto", branch = "orchard-backward-compatibility" } +zcash_note_encryption = { version = "0.4", git = "https://github.com/QED-it/zcash_note_encryption", branch = "zsa1" } +sapling = { package = "sapling-crypto", version = "0.1.3", git = "https://github.com/QED-it/sapling-crypto", branch = "zsa1" } diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index c5d738d4f9..fb7bfde2cc 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -15,6 +15,7 @@ use orchard::{ value::{NoteValue, ValueCommitment}, Action, Anchor, }; +use zcash_note_encryption::note_bytes::NoteBytes; use zcash_encoding::{Array, CompactSize, Vector}; use super::Amount; @@ -186,9 +187,9 @@ pub fn read_note_ciphertext( ) -> io::Result> { let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from( + enc_ciphertext: ::NoteCiphertextBytes::from_slice( [0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref(), - ), + ).expect("OrchardVanilla note ciphertext is of the correct size"), out_ciphertext: [0u8; 80], }; @@ -204,9 +205,9 @@ pub fn read_zsa_note_ciphertext( ) -> io::Result> { let mut tnc = TransmittedNoteCiphertext:: { epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from( + enc_ciphertext: ::NoteCiphertextBytes::from_slice( [0u8; OrchardZSA::ENC_CIPHERTEXT_SIZE].as_ref(), - ), + ).expect("OrchardZSA note ciphertext is of the correct size"), out_ciphertext: [0u8; 80], }; diff --git a/zcash_primitives/src/transaction/components/sapling.rs b/zcash_primitives/src/transaction/components/sapling.rs index 9ed2e3e845..4a954de47a 100644 --- a/zcash_primitives/src/transaction/components/sapling.rs +++ b/zcash_primitives/src/transaction/components/sapling.rs @@ -6,7 +6,7 @@ use zcash_protocol::consensus::{BlockHeight, NetworkUpgrade, Parameters, ZIP212_ use std::io::{self, Read, Write}; use zcash_encoding::{Array, CompactSize, Vector}; -use zcash_note_encryption::{EphemeralKeyBytes, OUT_CIPHERTEXT_SIZE}; +use zcash_note_encryption::{ENC_CIPHERTEXT_SIZE, EphemeralKeyBytes, OUT_CIPHERTEXT_SIZE}; use crate::{ sapling::{ @@ -15,7 +15,6 @@ use crate::{ OutputDescriptionV5, SpendDescription, SpendDescriptionV5, }, note::ExtractedNoteCommitment, - note_encryption::ENC_CIPHERTEXT_SIZE, value::ValueCommitment, Nullifier, }, From fc387301ef16d3e86a31739939e6c31307c6f6f4 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 31 Jul 2024 15:53:06 +0200 Subject: [PATCH 66/85] Fmt --- zcash_primitives/src/transaction/components/orchard.rs | 8 +++++--- zcash_primitives/src/transaction/components/sapling.rs | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index fb7bfde2cc..80c42a6fdf 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -15,8 +15,8 @@ use orchard::{ value::{NoteValue, ValueCommitment}, Action, Anchor, }; -use zcash_note_encryption::note_bytes::NoteBytes; use zcash_encoding::{Array, CompactSize, Vector}; +use zcash_note_encryption::note_bytes::NoteBytes; use super::Amount; use crate::transaction::Transaction; @@ -189,7 +189,8 @@ pub fn read_note_ciphertext( epk_bytes: [0u8; 32], enc_ciphertext: ::NoteCiphertextBytes::from_slice( [0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref(), - ).expect("OrchardVanilla note ciphertext is of the correct size"), + ) + .expect("OrchardVanilla note ciphertext is of the correct size"), out_ciphertext: [0u8; 80], }; @@ -207,7 +208,8 @@ pub fn read_zsa_note_ciphertext( epk_bytes: [0u8; 32], enc_ciphertext: ::NoteCiphertextBytes::from_slice( [0u8; OrchardZSA::ENC_CIPHERTEXT_SIZE].as_ref(), - ).expect("OrchardZSA note ciphertext is of the correct size"), + ) + .expect("OrchardZSA note ciphertext is of the correct size"), out_ciphertext: [0u8; 80], }; diff --git a/zcash_primitives/src/transaction/components/sapling.rs b/zcash_primitives/src/transaction/components/sapling.rs index 4a954de47a..62e493865d 100644 --- a/zcash_primitives/src/transaction/components/sapling.rs +++ b/zcash_primitives/src/transaction/components/sapling.rs @@ -6,7 +6,7 @@ use zcash_protocol::consensus::{BlockHeight, NetworkUpgrade, Parameters, ZIP212_ use std::io::{self, Read, Write}; use zcash_encoding::{Array, CompactSize, Vector}; -use zcash_note_encryption::{ENC_CIPHERTEXT_SIZE, EphemeralKeyBytes, OUT_CIPHERTEXT_SIZE}; +use zcash_note_encryption::{EphemeralKeyBytes, ENC_CIPHERTEXT_SIZE, OUT_CIPHERTEXT_SIZE}; use crate::{ sapling::{ From 665222212bff6a2f04abfc6127493e9a545228fd Mon Sep 17 00:00:00 2001 From: Dmitry Demin Date: Tue, 20 Aug 2024 10:26:04 +0200 Subject: [PATCH 67/85] Update zcash_primitives to sync with latest sapling-crypto changes (#70) This PR updates the `zcash_primitives` crate to align with the recent changes in the `sapling-crypto` crate, which was updated to sync with the latest changes in `zcash_note_encryption`. ### Changes: - Updated the usage of `enc_ciphertext` to call `.as_ref()` to match the new return type. - Adjusted the import of the `ENC_CIPHERTEXT_SIZE` constant to use the definition from `sapling-crypto` instead of `zcash_note_encryption`, as the constant has been moved to `sapling-crypto`. Co-authored-by: Dmitry Demin --- Cargo.lock | 6 +++--- zcash_primitives/src/transaction/components/sapling.rs | 8 ++++---- zcash_primitives/src/transaction/txid.rs | 9 ++++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed7d9de86b..5e07c65a56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1229,7 +1229,7 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "orchard" version = "0.8.0" -source = "git+https://github.com/QED-it/orchard?branch=zsa1#6e6112c80eb751a93c0fd1d881e9ca69887e1154" +source = "git+https://github.com/QED-it/orchard?branch=zsa1#07b3697b271f04c736a5f7e130d186e68a85fd8c" dependencies = [ "aes", "bitvec", @@ -1752,7 +1752,7 @@ dependencies = [ [[package]] name = "sapling-crypto" version = "0.1.3" -source = "git+https://github.com/QED-it/sapling-crypto?branch=zsa1#e19f4d916360842becf2842bfd9b27228e66fa81" +source = "git+https://github.com/QED-it/sapling-crypto?branch=zsa1#99ad0a5f0bdef332bdc91d577086abd3aca59553" dependencies = [ "aes", "bellman", @@ -2487,7 +2487,7 @@ dependencies = [ [[package]] name = "zcash_note_encryption" version = "0.4.0" -source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#58384553aab76b2ee6d6eb328cf2187fa824ec9a" +source = "git+https://github.com/QED-it/zcash_note_encryption?branch=zsa1#76745f00551d4442dee11ad64a8400b75132d18f" dependencies = [ "chacha20", "chacha20poly1305", diff --git a/zcash_primitives/src/transaction/components/sapling.rs b/zcash_primitives/src/transaction/components/sapling.rs index 62e493865d..1cc593d6f3 100644 --- a/zcash_primitives/src/transaction/components/sapling.rs +++ b/zcash_primitives/src/transaction/components/sapling.rs @@ -1,12 +1,12 @@ use ff::PrimeField; use redjubjub::SpendAuth; -use sapling::note_encryption::Zip212Enforcement; +use sapling::note_encryption::{Zip212Enforcement, ENC_CIPHERTEXT_SIZE}; use zcash_protocol::consensus::{BlockHeight, NetworkUpgrade, Parameters, ZIP212_GRACE_PERIOD}; use std::io::{self, Read, Write}; use zcash_encoding::{Array, CompactSize, Vector}; -use zcash_note_encryption::{EphemeralKeyBytes, ENC_CIPHERTEXT_SIZE, OUT_CIPHERTEXT_SIZE}; +use zcash_note_encryption::{EphemeralKeyBytes, OUT_CIPHERTEXT_SIZE}; use crate::{ sapling::{ @@ -270,7 +270,7 @@ pub(crate) fn write_output_v4( writer.write_all(&output.cv().to_bytes())?; writer.write_all(output.cmu().to_bytes().as_ref())?; writer.write_all(output.ephemeral_key().as_ref())?; - writer.write_all(output.enc_ciphertext())?; + writer.write_all(output.enc_ciphertext().as_ref())?; writer.write_all(output.out_ciphertext())?; writer.write_all(output.zkproof()) } @@ -282,7 +282,7 @@ fn write_output_v5_without_proof( writer.write_all(&output.cv().to_bytes())?; writer.write_all(output.cmu().to_bytes().as_ref())?; writer.write_all(output.ephemeral_key().as_ref())?; - writer.write_all(output.enc_ciphertext())?; + writer.write_all(output.enc_ciphertext().as_ref())?; writer.write_all(output.out_ciphertext()) } diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index ebf7a9524d..08bbc6c205 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -189,12 +189,15 @@ pub(crate) fn hash_sapling_outputs(shielded_outputs: &[OutputDescription]) for s_out in shielded_outputs { ch.write_all(s_out.cmu().to_bytes().as_ref()).unwrap(); ch.write_all(s_out.ephemeral_key().as_ref()).unwrap(); - ch.write_all(&s_out.enc_ciphertext()[..52]).unwrap(); + ch.write_all(&s_out.enc_ciphertext().as_ref()[..52]) + .unwrap(); - mh.write_all(&s_out.enc_ciphertext()[52..564]).unwrap(); + mh.write_all(&s_out.enc_ciphertext().as_ref()[52..564]) + .unwrap(); nh.write_all(&s_out.cv().to_bytes()).unwrap(); - nh.write_all(&s_out.enc_ciphertext()[564..]).unwrap(); + nh.write_all(&s_out.enc_ciphertext().as_ref()[564..]) + .unwrap(); nh.write_all(&s_out.out_ciphertext()[..]).unwrap(); } From dc0a815748d09890808a02e8c37e2fc332ea6c9b Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:12:57 +0200 Subject: [PATCH 68/85] Minor changes --- zcash_primitives/src/transaction/builder.rs | 25 ++----------------- .../src/transaction/components/issuance.rs | 2 +- zcash_primitives/src/transaction/mod.rs | 12 ++++----- 3 files changed, 9 insertions(+), 30 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 4be0fecdc5..2bf0002eb4 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -312,7 +312,7 @@ impl BuildResult { &self.orchard_meta } - /// Consumes BuildResult and returns the transaction that was constructed by the builder. + /// Creates the transaction that was constructed by the builder. pub fn into_transaction(self) -> Transaction { self.transaction } @@ -465,28 +465,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// Creates IssuanceBundle and adds an Issuance action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn init_issuance_bundle( - &mut self, - ik: IssuanceAuthorizingKey, - asset_desc: String, - recipient: Address, - value: orchard::value::NoteValue, - ) -> Result<(), Error> { - self.init_issuance_bundle_impl(ik, asset_desc, Some(IssueInfo { recipient, value })) - } - - /// Creates IssuanceBundle and adds a finalization action to the transaction. - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn init_finalizing_issuance_bundle( - &mut self, - ik: IssuanceAuthorizingKey, - asset_desc: String, - ) -> Result<(), Error> { - self.init_issuance_bundle_impl(ik, asset_desc, None) - } - - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - fn init_issuance_bundle_impl( + fn init_issuance_bundle( &mut self, ik: IssuanceAuthorizingKey, asset_desc: String, diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index abe39d1d56..cec312faec 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -50,7 +50,7 @@ fn read_authorization(mut reader: R) -> io::Result { fn read_action(mut reader: R) -> io::Result { let asset_descr_bytes = Vector::read(&mut reader, |r| r.read_u8())?; - let asset_descr: String = String::from_utf8(asset_descr_bytes).unwrap(); + let asset_descr: String = asset_descr_bytes.iter().map(|&b| b as char).collect(); let notes = Vector::read(&mut reader, |r| read_note(r))?; let finalize = reader.read_u8()? != 0; Ok(IssueAction::from_parts(asset_descr, notes, finalize)) diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index eecf2264f6..830dc2c5da 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -1041,16 +1041,16 @@ impl Transaction { "Sprout components cannot be present when serializing to the V5 transaction format.", )); } - self.write_v5_header(&mut writer)?; + self.write_header(&mut writer)?; self.write_transparent(&mut writer)?; - self.write_v5_sapling(&mut writer)?; + self.write_sapling(&mut writer)?; orchard_serialization::write_v5_bundle(self.orchard_bundle.as_ref(), &mut writer)?; #[cfg(zcash_unstable = "zfuture")] self.write_tze(&mut writer)?; Ok(()) } - pub fn write_v5_header(&self, mut writer: W) -> io::Result<()> { + pub fn write_header(&self, mut writer: W) -> io::Result<()> { self.version.write(&mut writer)?; writer.write_u32::(u32::from(self.consensus_branch_id))?; writer.write_u32::(self.lock_time)?; @@ -1066,7 +1066,7 @@ impl Transaction { sapling_serialization::write_v5_bundle(writer, sapling_bundle) } - pub fn write_v5_sapling(&self, writer: W) -> io::Result<()> { + pub fn write_sapling(&self, writer: W) -> io::Result<()> { sapling_serialization::write_v5_bundle(writer, self.sapling_bundle.as_ref()) } @@ -1078,9 +1078,9 @@ impl Transaction { "Sprout components cannot be present when serializing to the V7 transaction format.", )); } - self.write_v5_header(&mut writer)?; + self.write_header(&mut writer)?; self.write_transparent(&mut writer)?; - self.write_v5_sapling(&mut writer)?; + self.write_sapling(&mut writer)?; orchard_serialization::write_v7_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; issuance::write_v7_bundle(self.issue_bundle.as_ref(), &mut writer)?; #[cfg(zcash_unstable = "zfuture")] From a434849c3b27da98869bc58d1312bd2d0739915c Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:41:02 +0200 Subject: [PATCH 69/85] Change V7 to v6 --- zcash_primitives/src/transaction/builder.rs | 15 ++++---- .../src/transaction/components/issuance.rs | 4 +-- .../src/transaction/components/orchard.rs | 8 ++--- zcash_primitives/src/transaction/mod.rs | 34 +++++++++---------- .../{sighash_v7.rs => sighash_v6.rs} | 4 +-- zcash_primitives/src/transaction/tests.rs | 2 +- 6 files changed, 34 insertions(+), 33 deletions(-) rename zcash_primitives/src/transaction/{sighash_v7.rs => sighash_v6.rs} (91%) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 2bf0002eb4..81ff5272a0 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -494,7 +494,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// Adds an Issuance action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn add_issuance( + pub fn add_recipient( &mut self, asset_desc: String, recipient: Address, @@ -1129,6 +1129,7 @@ mod tests { use assert_matches::assert_matches; use ff::Field; use incrementalmerkletree::{frontier::CommitmentTree, witness::IncrementalWitness}; + use orchard::issuance::IssueInfo; use rand_core::OsRng; use crate::{ @@ -1451,7 +1452,7 @@ mod tests { let asset = "asset_desc".to_string(); builder - .init_finalizing_issuance_bundle::(iak, asset.clone()) + .init_issuance_bundle::(iak, asset.clone(), None) .unwrap(); let issuance_builder = builder.issuance_builder.clone().unwrap(); @@ -1473,7 +1474,7 @@ mod tests { let asset = "asset_desc".to_string(); builder - .init_issuance_bundle::(iak, asset.clone(), address, NoteValue::from_raw(42)) + .init_issuance_bundle::(iak, asset.clone(), Some(IssueInfo { recipient: address, value: NoteValue::from_raw(42) })) .unwrap(); let issuance_builder = builder.issuance_builder.unwrap(); @@ -1504,10 +1505,10 @@ mod tests { let asset = "asset_desc".to_string(); builder - .init_issuance_bundle::(iak, asset.clone(), address, NoteValue::from_raw(42)) + .init_issuance_bundle::(iak, asset.clone(), Some(IssueInfo{ recipient: address, value: NoteValue::from_raw(42)})) .unwrap(); builder - .add_issuance::(asset.clone(), address, NoteValue::from_raw(21)) + .add_recipient::(asset.clone(), address, NoteValue::from_raw(21)) .unwrap(); let issuance_builder = builder.issuance_builder.unwrap(); @@ -1543,10 +1544,10 @@ mod tests { let asset2 = "asset_desc_2".to_string(); builder - .init_issuance_bundle::(iak, asset1.clone(), address, NoteValue::from_raw(42)) + .init_issuance_bundle::(iak, asset1.clone(), Some(IssueInfo{ recipient: address, value: NoteValue::from_raw(42) })) .unwrap(); builder - .add_issuance::(asset2.clone(), address, NoteValue::from_raw(21)) + .add_recipient::(asset2.clone(), address, NoteValue::from_raw(21)) .unwrap(); let issuance_builder = builder.issuance_builder.unwrap(); diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index cec312faec..a7ac78674f 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -11,7 +11,7 @@ use std::io::{Error, ErrorKind, Read, Write}; use zcash_encoding::{CompactSize, Vector}; /// Reads an [`orchard::Bundle`] from a v6 transaction format. -pub fn read_v7_bundle(mut reader: R) -> io::Result>> { +pub fn read_v6_bundle(mut reader: R) -> io::Result>> { let actions = Vector::read(&mut reader, |r| read_action(r))?; if actions.is_empty() { @@ -110,7 +110,7 @@ fn read_rseed(mut reader: R, nullifier: &Rho) -> io::Result } /// Writes an [`IssueBundle`] in the v5 transaction format. -pub fn write_v7_bundle( +pub fn write_v6_bundle( bundle: Option<&IssueBundle>, mut writer: W, ) -> io::Result<()> { diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 80c42a6fdf..7948de8d0e 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -87,8 +87,8 @@ pub fn read_v5_bundle( } } -/// Reads an [`orchard::Bundle`] from a v7 transaction format. -pub fn read_v7_bundle( +/// Reads an [`orchard::Bundle`] from a v6 transaction format. +pub fn read_v6_bundle( mut reader: R, ) -> io::Result>> { #[allow(clippy::redundant_closure)] @@ -321,8 +321,8 @@ pub fn write_v5_bundle( Ok(()) } -/// Writes an [`orchard::Bundle`] in the v7 transaction format. -pub fn write_v7_bundle( +/// Writes an [`orchard::Bundle`] in the v6 transaction format. +pub fn write_v6_bundle( bundle: Option<&orchard::Bundle>, mut writer: W, ) -> io::Result<()> { diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 830dc2c5da..227a834483 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -56,9 +56,9 @@ const V5_TX_VERSION: u32 = 5; const V5_VERSION_GROUP_ID: u32 = 0x26A7270A; #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -const V7_TX_VERSION: u32 = 7; +const V6_TX_VERSION: u32 = 6; #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -const V7_VERSION_GROUP_ID: u32 = 0x124A69F8; // TODO ??? +const V6_VERSION_GROUP_ID: u32 = 0x124A69F8; // TODO ??? /// These versions are used exclusively for in-development transaction /// serialization, and will never be active under the consensus rules. @@ -160,7 +160,7 @@ impl TxVersion { (SAPLING_TX_VERSION, SAPLING_VERSION_GROUP_ID) => Ok(TxVersion::Sapling), (V5_TX_VERSION, V5_VERSION_GROUP_ID) => Ok(TxVersion::Zip225), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - (V7_TX_VERSION, V7_VERSION_GROUP_ID) => Ok(TxVersion::Zsa), + (V6_TX_VERSION, V6_VERSION_GROUP_ID) => Ok(TxVersion::Zsa), #[cfg(zcash_unstable = "zfuture")] (ZFUTURE_TX_VERSION, ZFUTURE_VERSION_GROUP_ID) => Ok(TxVersion::ZFuture), _ => Err(io::Error::new( @@ -192,7 +192,7 @@ impl TxVersion { TxVersion::Sapling => SAPLING_TX_VERSION, TxVersion::Zip225 => V5_TX_VERSION, #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TxVersion::Zsa => V7_TX_VERSION, + TxVersion::Zsa => V6_TX_VERSION, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_TX_VERSION, } @@ -205,7 +205,7 @@ impl TxVersion { TxVersion::Sapling => SAPLING_VERSION_GROUP_ID, TxVersion::Zip225 => V5_VERSION_GROUP_ID, #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TxVersion::Zsa => V7_VERSION_GROUP_ID, + TxVersion::Zsa => V6_VERSION_GROUP_ID, #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => ZFUTURE_VERSION_GROUP_ID, } @@ -704,7 +704,7 @@ impl Transaction { } TxVersion::Zip225 => Ok(Self::from_data_v5(data)), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TxVersion::Zsa => Ok(Self::from_data_v7(data)), + TxVersion::Zsa => Ok(Self::from_data_v6(data)), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Ok(Self::from_data_v5(data)), } @@ -732,7 +732,7 @@ impl Transaction { } #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - fn from_data_v7(data: TransactionData) -> Self { + fn from_data_v6(data: TransactionData) -> Self { Self::from_data_v5(data) } @@ -754,7 +754,7 @@ impl Transaction { } TxVersion::Zip225 => Self::read_v5(reader.into_base_reader(), version), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TxVersion::Zsa => Self::read_v7(reader.into_base_reader(), version), + TxVersion::Zsa => Self::read_v6(reader.into_base_reader(), version), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => Self::read_v5(reader.into_base_reader(), version), } @@ -920,13 +920,13 @@ impl Transaction { } #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - fn read_v7(mut reader: R, version: TxVersion) -> io::Result { + fn read_v6(mut reader: R, version: TxVersion) -> io::Result { let (consensus_branch_id, lock_time, expiry_height) = Self::read_v5_header_fragment(&mut reader)?; let transparent_bundle = Self::read_transparent(&mut reader)?; let sapling_bundle = sapling_serialization::read_v5_bundle(&mut reader)?; - let orchard_zsa_bundle = orchard_serialization::read_v7_bundle(&mut reader)?; - let issue_bundle = issuance::read_v7_bundle(&mut reader)?; + let orchard_zsa_bundle = orchard_serialization::read_v6_bundle(&mut reader)?; + let issue_bundle = issuance::read_v6_bundle(&mut reader)?; #[cfg(zcash_unstable = "zfuture")] let tze_bundle = if version.has_tze() { @@ -950,7 +950,7 @@ impl Transaction { tze_bundle, }; - Ok(Self::from_data_v7(data)) + Ok(Self::from_data_v6(data)) } #[cfg(zcash_unstable = "zfuture")] @@ -975,7 +975,7 @@ impl Transaction { } TxVersion::Zip225 => self.write_v5(writer), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TxVersion::Zsa => self.write_v7(writer), + TxVersion::Zsa => self.write_v6(writer), #[cfg(zcash_unstable = "zfuture")] TxVersion::ZFuture => self.write_v5(writer), } @@ -1071,18 +1071,18 @@ impl Transaction { } #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - pub fn write_v7(&self, mut writer: W) -> io::Result<()> { + pub fn write_v6(&self, mut writer: W) -> io::Result<()> { if self.sprout_bundle.is_some() { return Err(io::Error::new( io::ErrorKind::InvalidInput, - "Sprout components cannot be present when serializing to the V7 transaction format.", + "Sprout components cannot be present when serializing to the V6 transaction format.", )); } self.write_header(&mut writer)?; self.write_transparent(&mut writer)?; self.write_sapling(&mut writer)?; - orchard_serialization::write_v7_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; - issuance::write_v7_bundle(self.issue_bundle.as_ref(), &mut writer)?; + orchard_serialization::write_v6_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; + issuance::write_v6_bundle(self.issue_bundle.as_ref(), &mut writer)?; #[cfg(zcash_unstable = "zfuture")] self.write_tze(&mut writer)?; Ok(()) diff --git a/zcash_primitives/src/transaction/sighash_v7.rs b/zcash_primitives/src/transaction/sighash_v6.rs similarity index 91% rename from zcash_primitives/src/transaction/sighash_v7.rs rename to zcash_primitives/src/transaction/sighash_v6.rs index 9227997dd1..a72920db67 100644 --- a/zcash_primitives/src/transaction/sighash_v7.rs +++ b/zcash_primitives/src/transaction/sighash_v6.rs @@ -6,7 +6,7 @@ use crate::transaction::{ Authorization, TransactionData, TxDigests, }; -pub fn v7_signature_hash< +pub fn v6_signature_hash< TA: TransparentAuthorizingContext, A: Authorization, >( @@ -14,6 +14,6 @@ pub fn v7_signature_hash< signable_input: &SignableInput<'_>, txid_parts: &TxDigests, ) -> Blake2bHash { - // Currently to_hash is designed in a way that it supports both v5 and v7 signature hash + // Currently to_hash is designed in a way that it supports both v5 and v6 signature hash v5_v6_signature_hash(tx, signable_input, txid_parts) } diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index cdbc18a842..807dc0d6e8 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -134,7 +134,7 @@ proptest! { proptest! { #![proptest_config(ProptestConfig::with_cases(10))] #[test] - fn tx_serialization_roundtrip_v7(tx in arb_tx(BranchId::Nu7)) { + fn tx_serialization_roundtrip_v6(tx in arb_tx(BranchId::Nu7)) { check_roundtrip(tx)?; } } From 9f52b1bea1c28e1a36d1bd5487653a3b6b1fb244 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:51:11 +0200 Subject: [PATCH 70/85] Make ciphertext reading generic --- zcash_primitives/src/transaction/builder.rs | 29 ++++++-- .../src/transaction/components/orchard.rs | 71 +++++-------------- 2 files changed, 43 insertions(+), 57 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 81ff5272a0..f8a4116310 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1129,7 +1129,6 @@ mod tests { use assert_matches::assert_matches; use ff::Field; use incrementalmerkletree::{frontier::CommitmentTree, witness::IncrementalWitness}; - use orchard::issuance::IssueInfo; use rand_core::OsRng; use crate::{ @@ -1148,6 +1147,7 @@ mod tests { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use { crate::transaction::fees::zip317::FeeError, + orchard::issuance::IssueInfo, orchard::keys::{FullViewingKey, IssuanceAuthorizingKey, SpendingKey}, orchard::value::NoteValue, orchard::Address, @@ -1474,7 +1474,14 @@ mod tests { let asset = "asset_desc".to_string(); builder - .init_issuance_bundle::(iak, asset.clone(), Some(IssueInfo { recipient: address, value: NoteValue::from_raw(42) })) + .init_issuance_bundle::( + iak, + asset.clone(), + Some(IssueInfo { + recipient: address, + value: NoteValue::from_raw(42), + }), + ) .unwrap(); let issuance_builder = builder.issuance_builder.unwrap(); @@ -1505,7 +1512,14 @@ mod tests { let asset = "asset_desc".to_string(); builder - .init_issuance_bundle::(iak, asset.clone(), Some(IssueInfo{ recipient: address, value: NoteValue::from_raw(42)})) + .init_issuance_bundle::( + iak, + asset.clone(), + Some(IssueInfo { + recipient: address, + value: NoteValue::from_raw(42), + }), + ) .unwrap(); builder .add_recipient::(asset.clone(), address, NoteValue::from_raw(21)) @@ -1544,7 +1558,14 @@ mod tests { let asset2 = "asset_desc_2".to_string(); builder - .init_issuance_bundle::(iak, asset1.clone(), Some(IssueInfo{ recipient: address, value: NoteValue::from_raw(42) })) + .init_issuance_bundle::( + iak, + asset1.clone(), + Some(IssueInfo { + recipient: address, + value: NoteValue::from_raw(42), + }), + ) .unwrap(); builder .add_recipient::(asset2.clone(), address, NoteValue::from_raw(21)) diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 7948de8d0e..fc9a3a4e13 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -92,7 +92,7 @@ pub fn read_v6_bundle( mut reader: R, ) -> io::Result>> { #[allow(clippy::redundant_closure)] - let actions_without_auth = Vector::read(&mut reader, |r| read_zsa_action_without_auth(r))?; + let actions_without_auth = Vector::read(&mut reader, |r| read_action_without_auth(r))?; if actions_without_auth.is_empty() { Ok(None) } else { @@ -182,45 +182,27 @@ pub fn read_cmx(mut reader: R) -> io::Result { }) } -pub fn read_note_ciphertext( +pub fn read_note_ciphertext( mut reader: R, -) -> io::Result> { - let mut tnc = TransmittedNoteCiphertext:: { - epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from_slice( - [0u8; OrchardVanilla::ENC_CIPHERTEXT_SIZE].as_ref(), - ) - .expect("OrchardVanilla note ciphertext is of the correct size"), - out_ciphertext: [0u8; 80], - }; - - reader.read_exact(&mut tnc.epk_bytes)?; - reader.read_exact(&mut tnc.enc_ciphertext.0)?; - reader.read_exact(&mut tnc.out_ciphertext)?; - - Ok(tnc) +) -> io::Result> { + let mut epk = [0; 32]; + let mut enc = vec![0u8; D::ENC_CIPHERTEXT_SIZE]; + let mut out = [0; 80]; + + reader.read_exact(&mut epk)?; + reader.read_exact(&mut enc)?; + reader.read_exact(&mut out)?; + + Ok(TransmittedNoteCiphertext:: { + epk_bytes: epk, + enc_ciphertext: ::NoteCiphertextBytes::from_slice(&enc).unwrap(), + out_ciphertext: out, + }) } -pub fn read_zsa_note_ciphertext( +pub fn read_action_without_auth( mut reader: R, -) -> io::Result> { - let mut tnc = TransmittedNoteCiphertext:: { - epk_bytes: [0u8; 32], - enc_ciphertext: ::NoteCiphertextBytes::from_slice( - [0u8; OrchardZSA::ENC_CIPHERTEXT_SIZE].as_ref(), - ) - .expect("OrchardZSA note ciphertext is of the correct size"), - out_ciphertext: [0u8; 80], - }; - - reader.read_exact(&mut tnc.epk_bytes)?; - reader.read_exact(&mut tnc.enc_ciphertext.0)?; - reader.read_exact(&mut tnc.out_ciphertext)?; - - Ok(tnc) -} - -pub fn read_action_without_auth(mut reader: R) -> io::Result> { +) -> io::Result> { let cv_net = read_value_commitment(&mut reader)?; let nf_old = read_nullifier(&mut reader)?; let rk = read_verification_key(&mut reader)?; @@ -237,23 +219,6 @@ pub fn read_action_without_auth(mut reader: R) -> io::Result(mut reader: R) -> io::Result> { - let cv_net = read_value_commitment(&mut reader)?; - let nf_old = read_nullifier(&mut reader)?; - let rk = read_verification_key(&mut reader)?; - let cmx = read_cmx(&mut reader)?; - let encrypted_note = read_zsa_note_ciphertext(&mut reader)?; - - Ok(Action::from_parts( - nf_old, - rk, - cmx, - encrypted_note, - cv_net, - (), - )) -} - pub fn read_flags(mut reader: R) -> io::Result { let mut byte = [0u8; 1]; reader.read_exact(&mut byte)?; From 10ff1e0a444b46a97969c05c34ec2cd6d2451b4f Mon Sep 17 00:00:00 2001 From: Vivek Arte <46618816+vivek-arte@users.noreply.github.com> Date: Wed, 4 Sep 2024 00:58:07 +0530 Subject: [PATCH 71/85] Updated test vectors (#71) This updates the test vectors to be of version 6 (as opposed to version 7). It also provides a new file for the V6 test vectors, an improvement to having them in the same file but behind feature flags. It provides a error for when the asset description string is not a UTF8 encoding. --- .../src/transaction/components/issuance.rs | 4 +- zcash_primitives/src/transaction/tests.rs | 8 +- .../src/transaction/tests/data.rs | 3064 -------------- .../src/transaction/tests/data_v6.rs | 3703 +++++++++++++++++ 4 files changed, 3713 insertions(+), 3066 deletions(-) create mode 100644 zcash_primitives/src/transaction/tests/data_v6.rs diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index a7ac78674f..1c8d500baf 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -50,7 +50,9 @@ fn read_authorization(mut reader: R) -> io::Result { fn read_action(mut reader: R) -> io::Result { let asset_descr_bytes = Vector::read(&mut reader, |r| r.read_u8())?; - let asset_descr: String = asset_descr_bytes.iter().map(|&b| b as char).collect(); + //TODO: Properly handle non-valid UTF-8 encodings. + let asset_descr: String = String::from_utf8(asset_descr_bytes) + .map_err(|_| Error::new(ErrorKind::InvalidData, "Asset Description not valid UTF-8"))?; let notes = Vector::read(&mut reader, |r| read_note(r))?; let finalize = reader.read_u8()? != 0; Ok(IssueAction::from_parts(asset_descr, notes, finalize)) diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 807dc0d6e8..92b22569b7 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -231,6 +231,7 @@ impl Authorization for TestUnauthorized { type TzeAuth = tze::Authorized; } +mod data_v6; #[test] fn zip_0244() { fn to_test_txdata( @@ -313,7 +314,12 @@ fn zip_0244() { (tdata, txdata.digest(TxIdDigester)) } - for tv in self::data::zip_0244::make_test_vectors() { + #[allow(unused_mut)] // mutability required for the V6 case which is flagged off by default + let mut test_vectors = self::data::zip_0244::make_test_vectors(); + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + test_vectors.extend(data_v6::orchard_zsa_digests::make_test_vectors()); + + for tv in test_vectors { let (txdata, txid_parts) = to_test_txdata(&tv); if let Some(index) = tv.transparent_input { diff --git a/zcash_primitives/src/transaction/tests/data.rs b/zcash_primitives/src/transaction/tests/data.rs index 00c0cde6ea..de52a6b567 100644 --- a/zcash_primitives/src/transaction/tests/data.rs +++ b/zcash_primitives/src/transaction/tests/data.rs @@ -5703,7 +5703,6 @@ pub mod zip_0244 { } // From https://github.com/zcash-hackworks/zcash-test-vectors/blob/master/zip_0244.py - // and https://github.com/zcash-hackworks/zcash-test-vectors/blob/master/zip_0244_zsa.py pub fn make_test_vectors() -> Vec { vec![ TestVector { @@ -7666,3069 +7665,6 @@ pub mod zip_0244 { sighash_none_anyone: None, sighash_single_anyone: None, }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x7a, - 0x8f, 0x73, 0x9a, 0x2d, 0x6f, 0x2c, 0x02, 0x01, 0xe1, 0x52, 0xa8, 0x04, 0x9e, - 0x29, 0x4c, 0x4d, 0x6e, 0x66, 0xb1, 0x64, 0x93, 0x9d, 0xaf, 0xfa, 0x2e, 0xf6, - 0xee, 0x69, 0x21, 0x48, 0x1c, 0xdd, 0x86, 0xb3, 0xcc, 0x43, 0x18, 0xd9, 0x61, - 0x4f, 0xc8, 0x20, 0x90, 0x5d, 0x04, 0x53, 0x51, 0x6a, 0xac, 0xa3, 0xf2, 0x49, - 0x88, 0x00, 0x01, 0x9f, 0x33, 0xbf, 0x3a, 0x10, 0x9b, 0xdd, 0x1b, 0x23, 0x2b, - 0x47, 0xb1, 0x64, 0x6d, 0x91, 0xe1, 0x29, 0x66, 0x34, 0xeb, 0xde, 0x5c, 0xca, - 0xd5, 0x72, 0x88, 0xb5, 0xb2, 0x22, 0x81, 0x86, 0xe5, 0x4b, 0x69, 0x68, 0x91, - 0x2a, 0x63, 0x81, 0xce, 0x3d, 0xc1, 0x66, 0xd5, 0x6a, 0x1d, 0x62, 0xf5, 0xa8, - 0xd7, 0x55, 0x1d, 0xb5, 0xfd, 0x93, 0x13, 0xe8, 0xc7, 0x20, 0x3d, 0x99, 0x6a, - 0xf7, 0xd4, 0x1a, 0x38, 0xe0, 0x1d, 0x94, 0x90, 0x3d, 0x3c, 0x3e, 0x0a, 0xd3, - 0x36, 0x0c, 0x1d, 0x37, 0x10, 0xac, 0xd2, 0x0b, 0x18, 0x3e, 0x31, 0xd4, 0x9f, - 0x25, 0xc9, 0xa1, 0x38, 0xf4, 0x9b, 0x1a, 0x53, 0x01, 0x46, 0x6b, 0x3d, 0xa6, - 0x12, 0x14, 0x9d, 0xf5, 0xed, 0xa0, 0xf1, 0x4f, 0x2e, 0xfc, 0x5c, 0x6a, 0xc0, - 0x38, 0x84, 0x42, 0x8a, 0x31, 0x5d, 0xc9, 0x1f, 0x8d, 0x7b, 0x49, 0x2e, 0xbc, - 0x57, 0xe4, 0x75, 0xa4, 0xa6, 0xf2, 0x65, 0x72, 0x50, 0x4b, 0x19, 0x22, 0x32, - 0xec, 0xb9, 0xf0, 0xc0, 0x24, 0x11, 0xe5, 0x25, 0x96, 0xbc, 0x5e, 0x90, 0x45, - 0x7e, 0x74, 0x59, 0x39, 0xff, 0xed, 0xbd, 0x12, 0x1e, 0x37, 0xec, 0x1e, 0x9d, - 0xdd, 0xc3, 0x1b, 0x06, 0xdc, 0x95, 0x76, 0xa1, 0x73, 0x8e, 0xf7, 0x3e, 0x6b, - 0xa7, 0x16, 0x48, 0x91, 0x3d, 0xbf, 0x75, 0xa7, 0x79, 0xfd, 0xd4, 0x88, 0xd8, - 0x3f, 0x85, 0x7d, 0xee, 0xcc, 0x40, 0xa9, 0x8d, 0x5f, 0x29, 0x35, 0x39, 0x5e, - 0xe4, 0x76, 0x2d, 0xd2, 0x1a, 0xfd, 0xbb, 0x5d, 0x47, 0xfa, 0x9a, 0x6d, 0xd9, - 0x84, 0xd5, 0x67, 0xdb, 0x28, 0x57, 0xb9, 0x27, 0xb7, 0xfa, 0xe2, 0xdb, 0x58, - 0x71, 0x05, 0x41, 0x5d, 0x46, 0x42, 0x78, 0x9d, 0x38, 0xf5, 0x0b, 0x8d, 0xbc, - 0xc1, 0x29, 0xca, 0xb3, 0xd1, 0x7d, 0x19, 0xf3, 0x35, 0x5b, 0xcf, 0x73, 0xce, - 0xcb, 0x8c, 0xb8, 0xa5, 0xda, 0x01, 0x30, 0x71, 0x52, 0xf1, 0x39, 0x36, 0xa2, - 0x70, 0x57, 0x26, 0x70, 0xdc, 0x82, 0xd3, 0x90, 0x26, 0xc6, 0xcb, 0x4c, 0xd4, - 0xb0, 0xf7, 0xf5, 0xaa, 0x2a, 0x4f, 0x5a, 0x53, 0x41, 0xec, 0x5d, 0xd7, 0x15, - 0x40, 0x6f, 0x2f, 0xdd, 0x2a, 0xfa, 0x73, 0x3f, 0x5f, 0x64, 0x1c, 0x8c, 0x21, - 0x86, 0x2a, 0x1b, 0xaf, 0xce, 0x26, 0x09, 0xd9, 0xee, 0xcf, 0xa1, 0x58, 0xcf, - 0xb5, 0xcd, 0x79, 0xf8, 0x80, 0x08, 0xe3, 0x15, 0xdc, 0x7d, 0x83, 0x88, 0xe7, - 0x6c, 0x17, 0x82, 0xfd, 0x27, 0x95, 0xd1, 0x8a, 0x76, 0x36, 0x24, 0xc2, 0x5f, - 0xa9, 0x59, 0xcc, 0x97, 0x48, 0x9c, 0xe7, 0x57, 0x45, 0x82, 0x4b, 0x77, 0x86, - 0x8c, 0x53, 0x23, 0x9c, 0xfb, 0xdf, 0x73, 0xca, 0xec, 0x65, 0x60, 0x40, 0x37, - 0x31, 0x4f, 0xaa, 0xce, 0xb5, 0x62, 0x18, 0xc6, 0xbd, 0x30, 0xf8, 0x37, 0x4a, - 0xc1, 0x33, 0x86, 0x79, 0x3f, 0x21, 0xa9, 0xfb, 0x80, 0xad, 0x03, 0xbc, 0x0c, - 0xda, 0x4a, 0x44, 0x94, 0x6c, 0x00, 0xe1, 0xb1, 0xa1, 0xdf, 0x0e, 0x5b, 0x87, - 0xb5, 0xbe, 0xce, 0x47, 0x7a, 0x70, 0x96, 0x49, 0xe9, 0x50, 0x06, 0x05, 0x91, - 0x39, 0x48, 0x12, 0x95, 0x1e, 0x1f, 0xe3, 0x89, 0x5b, 0x8c, 0xc3, 0xd1, 0x4d, - 0x2c, 0xf6, 0x55, 0x6d, 0xf6, 0xed, 0x4b, 0x4d, 0xdd, 0x3d, 0x9a, 0x69, 0xf5, - 0x33, 0x57, 0xd7, 0x76, 0x7f, 0x4f, 0x5c, 0xcb, 0xdb, 0xc5, 0x96, 0x63, 0x12, - 0x77, 0xf8, 0xfe, 0xcd, 0x08, 0xcb, 0x05, 0x6b, 0x95, 0xe3, 0x02, 0x5b, 0x97, - 0x92, 0xff, 0xf7, 0xf2, 0x44, 0xfc, 0x71, 0x62, 0x69, 0xb9, 0x26, 0xd6, 0x2e, - 0x95, 0x96, 0xfa, 0x82, 0x5c, 0x6b, 0xf2, 0x1a, 0xff, 0x9e, 0x68, 0x62, 0x5a, - 0x19, 0x24, 0x40, 0xea, 0x06, 0x82, 0x81, 0x23, 0xd9, 0x78, 0x84, 0x80, 0x6f, - 0x15, 0xfa, 0x08, 0xda, 0x52, 0x75, 0x4a, 0x10, 0x95, 0xe3, 0xff, 0x1a, 0xbd, - 0x5c, 0xe4, 0xfd, 0xdf, 0xcc, 0xfc, 0x3a, 0x61, 0x28, 0xae, 0xf7, 0x84, 0xa6, - 0x46, 0x10, 0xa8, 0x9d, 0x1a, 0x70, 0x99, 0x21, 0x6d, 0x08, 0x14, 0xd3, 0xa2, - 0xd4, 0x52, 0x43, 0x1c, 0x32, 0xd4, 0x11, 0xac, 0x1c, 0xce, 0x82, 0xad, 0x02, - 0x29, 0x40, 0x7b, 0xbc, 0x48, 0x98, 0x56, 0x75, 0xe3, 0xf8, 0x74, 0xa4, 0x53, - 0x3f, 0x1d, 0x63, 0xa8, 0x4d, 0xfa, 0x3e, 0x0f, 0x46, 0x0f, 0xe2, 0xf5, 0x7e, - 0x34, 0xfb, 0xc7, 0x54, 0x23, 0xc3, 0x73, 0x7f, 0x5b, 0x2a, 0x06, 0x15, 0xf5, - 0x72, 0x2d, 0xb0, 0x41, 0xa3, 0xef, 0x66, 0xfa, 0x48, 0x3a, 0xfd, 0x3c, 0x2e, - 0x19, 0xe5, 0x94, 0x44, 0xa6, 0x4a, 0xdd, 0x6d, 0xf1, 0xd9, 0x63, 0xf5, 0xdd, - 0x5b, 0x50, 0x10, 0xd3, 0xd0, 0x25, 0xf0, 0x28, 0x7c, 0x4c, 0xf1, 0x9c, 0x75, - 0xf3, 0x3d, 0x51, 0xdd, 0xdd, 0xba, 0x5d, 0x65, 0x7b, 0x43, 0xee, 0x8d, 0xa6, - 0x45, 0x44, 0x38, 0x14, 0xcc, 0x73, 0x29, 0xf3, 0xe9, 0xb4, 0xe5, 0x4c, 0x23, - 0x6c, 0x29, 0xaf, 0x39, 0x23, 0x10, 0x17, 0x56, 0xd9, 0xfa, 0x4b, 0xd0, 0xf7, - 0xd2, 0xdd, 0xaa, 0xcb, 0x6b, 0x0f, 0x86, 0xa2, 0x65, 0x8e, 0x0a, 0x07, 0xa0, - 0x5a, 0xc5, 0xb9, 0x50, 0x05, 0x1c, 0xd2, 0x4c, 0x47, 0xa8, 0x8d, 0x13, 0xd6, - 0x59, 0xba, 0x2a, 0x46, 0xca, 0x18, 0x30, 0x81, 0x6d, 0x09, 0xcd, 0x76, 0x46, - 0xf7, 0x6f, 0x71, 0x6a, 0xbe, 0xc5, 0xde, 0x07, 0xfe, 0x9b, 0x52, 0x34, 0x10, - 0x80, 0x6e, 0xa6, 0xf2, 0x88, 0xf8, 0x73, 0x6c, 0x23, 0x35, 0x7c, 0x85, 0xf4, - 0x57, 0x91, 0xe1, 0x70, 0x80, 0x29, 0xd9, 0x82, 0x4d, 0x90, 0x70, 0x46, 0x07, - 0xf3, 0x87, 0xa0, 0x3e, 0x49, 0xbf, 0x98, 0x36, 0x57, 0x44, 0x31, 0x34, 0x5a, - 0x78, 0x77, 0xef, 0xaa, 0x8a, 0x08, 0xe7, 0x30, 0x81, 0xef, 0x8d, 0x62, 0xcb, - 0x78, 0x0a, 0xb6, 0x88, 0x3a, 0x50, 0xa0, 0xd4, 0x70, 0x19, 0x0d, 0xfb, 0xa1, - 0x0a, 0x85, 0x7f, 0x82, 0x84, 0x2d, 0x38, 0x25, 0xb3, 0xd6, 0xda, 0x05, 0x73, - 0xd3, 0x16, 0xeb, 0x16, 0x0d, 0xc0, 0xb7, 0x16, 0xc4, 0x8f, 0xbd, 0x46, 0x7f, - 0x75, 0xb7, 0x80, 0x14, 0x9a, 0xe8, 0x80, 0x8f, 0x4e, 0x68, 0xf5, 0x0c, 0x05, - 0x36, 0xac, 0xdd, 0xf6, 0xf1, 0xae, 0xab, 0x01, 0x6b, 0x6b, 0xc1, 0xa5, 0x1e, - 0xd4, 0x4c, 0xfa, 0xb7, 0x00, 0x00, 0xc7, 0xb3, 0x53, 0x42, 0x01, 0xcf, 0xb1, - 0xcd, 0x8d, 0xbf, 0x69, 0xb8, 0x25, 0x0c, 0x18, 0xef, 0x41, 0x29, 0x4c, 0xa9, - 0x79, 0x93, 0xdb, 0x54, 0x6c, 0x1f, 0xe0, 0x1f, 0x7e, 0x9c, 0x8e, 0x36, 0x7e, - 0xdc, 0xf0, 0x4b, 0xe3, 0x4a, 0x98, 0x51, 0xa7, 0xaf, 0x9d, 0xb6, 0x99, 0x0e, - 0xd8, 0x3d, 0xd6, 0x4a, 0xf3, 0x59, 0x7c, 0x04, 0x32, 0x3e, 0xa5, 0x1b, 0x00, - 0x52, 0xad, 0x80, 0x84, 0xa8, 0xb9, 0xda, 0x94, 0x8d, 0x32, 0x0d, 0xad, 0xd6, - 0x4f, 0x54, 0x31, 0xe6, 0x1d, 0xdf, 0x65, 0x8d, 0x24, 0xae, 0x67, 0xc2, 0x2c, - 0x8d, 0x13, 0x09, 0x13, 0x1f, 0xc0, 0x0f, 0xe7, 0xf2, 0x35, 0x73, 0x42, 0x76, - 0xd3, 0x8d, 0x47, 0xf1, 0xe1, 0x91, 0xe0, 0x0c, 0x7a, 0x1d, 0x48, 0xaf, 0x04, - 0x68, 0x27, 0x59, 0x1e, 0x97, 0x33, 0xa9, 0x7f, 0xa6, 0xb6, 0x79, 0xf3, 0xdc, - 0x60, 0x1d, 0x00, 0x82, 0x85, 0xed, 0xcb, 0xda, 0xe6, 0x9c, 0xe8, 0xfc, 0x1b, - 0xe4, 0xaa, 0xc0, 0x0f, 0xf2, 0x71, 0x1e, 0xbd, 0x93, 0x1d, 0xe5, 0x18, 0x85, - 0x68, 0x78, 0xf7, 0x34, 0x76, 0xf2, 0x1a, 0x48, 0x2e, 0xc9, 0x37, 0x83, 0x65, - 0xc8, 0xf7, 0x39, 0x3c, 0x94, 0xe2, 0x88, 0x53, 0x15, 0xeb, 0x46, 0x71, 0x09, - 0x8b, 0x79, 0x53, 0x5e, 0x79, 0x0f, 0xe5, 0x3e, 0x29, 0xfe, 0xf2, 0xb3, 0x76, - 0x66, 0x97, 0xac, 0x32, 0xb4, 0xf4, 0x73, 0xf4, 0x68, 0xa0, 0x08, 0xe7, 0x23, - 0x89, 0xfc, 0x03, 0x88, 0x0d, 0x78, 0x0c, 0xb0, 0x7f, 0xcf, 0xaa, 0xbe, 0x3f, - 0x1a, 0x84, 0xb2, 0x7d, 0xb5, 0x9a, 0x4a, 0x15, 0x3d, 0x10, 0x70, 0x68, 0x9f, - 0x2c, 0xcf, 0x97, 0x5b, 0x2b, 0x17, 0x6e, 0x1c, 0x69, 0xdb, 0xe3, 0x81, 0x34, - 0x0e, 0xf1, 0xf9, 0x8f, 0xdc, 0x4b, 0x45, 0x3a, 0xbd, 0xa3, 0xa2, 0xbf, 0xac, - 0x30, 0x69, 0xba, 0x7f, 0x1c, 0xc5, 0x0a, 0x81, 0xc2, 0x52, 0x0e, 0x41, 0x2f, - 0xab, 0x4e, 0x5d, 0x39, 0x7e, 0xcf, 0x73, 0x9f, 0x28, 0x0d, 0x5b, 0x68, 0x45, - 0x33, 0xd5, 0xd2, 0x9c, 0xfe, 0x7e, 0x73, 0x02, 0xec, 0x14, 0x4b, 0x4e, 0x55, - 0x3a, 0xcf, 0xd6, 0x70, 0xf7, 0x7e, 0x75, 0x5f, 0xc8, 0x8e, 0x06, 0x77, 0xe3, - 0x1b, 0xa4, 0x59, 0xb4, 0x4e, 0x30, 0x77, 0x68, 0x95, 0x8f, 0xe3, 0x78, 0x9d, - 0x41, 0xc2, 0xb1, 0xff, 0x43, 0x4c, 0xb3, 0x0e, 0x15, 0x91, 0x4f, 0x01, 0xbc, - 0x6b, 0xc2, 0x30, 0x7b, 0x48, 0x8d, 0x25, 0x56, 0xd7, 0xb7, 0x38, 0x0e, 0xa4, - 0xff, 0xd7, 0x12, 0xf6, 0xb0, 0x2f, 0xe8, 0x06, 0xb9, 0x45, 0x69, 0xcd, 0x40, - 0x59, 0xf3, 0x96, 0xbf, 0x29, 0xb9, 0x9d, 0x0a, 0x40, 0xe5, 0xe1, 0x71, 0x1c, - 0xa9, 0x44, 0xf7, 0x2d, 0x43, 0x6a, 0x10, 0x2f, 0xca, 0x4b, 0x97, 0x69, 0x3d, - 0xa0, 0xb0, 0x86, 0xfe, 0x9d, 0x2e, 0x71, 0x62, 0x47, 0x0d, 0x02, 0xe0, 0xf0, - 0x5d, 0x4b, 0xec, 0x95, 0x12, 0xbf, 0xb3, 0xf3, 0x83, 0x27, 0x29, 0x6e, 0xfa, - 0xa7, 0x43, 0x28, 0xb1, 0x18, 0xc2, 0x74, 0x02, 0xc7, 0x0c, 0x3a, 0x90, 0xb4, - 0x9a, 0xd4, 0xbb, 0xc6, 0x8e, 0x37, 0xc0, 0xaa, 0x7d, 0x9b, 0x3f, 0xe1, 0x77, - 0x99, 0xd7, 0x3b, 0x84, 0x1e, 0x75, 0x17, 0x13, 0xa0, 0x29, 0x43, 0x90, 0x5a, - 0xae, 0x08, 0x03, 0xfd, 0x69, 0x44, 0x2e, 0xb7, 0x68, 0x1e, 0xc2, 0xa0, 0x56, - 0x00, 0x05, 0x4e, 0x92, 0xee, 0xd5, 0x55, 0x02, 0x8f, 0x21, 0xb6, 0xa1, 0x55, - 0x26, 0x8a, 0x2d, 0xd6, 0x64, 0x05, 0x25, 0x28, 0xa5, 0xf8, 0xed, 0x02, 0x8f, - 0x59, 0xaf, 0x98, 0x5a, 0xd1, 0x31, 0x5c, 0x2e, 0x25, 0xae, 0xb9, 0xd7, 0xf1, - 0x34, 0xe4, 0xbf, 0x47, 0x86, 0x42, 0xab, 0x96, 0xb1, 0x5d, 0x3b, 0x3e, 0x13, - 0xce, 0x23, 0x87, 0xac, 0x84, 0xdc, 0x08, 0x19, 0xe8, 0x12, 0x60, 0xe1, 0x1d, - 0x39, 0x2a, 0x5f, 0x06, 0xdb, 0x8b, 0x56, 0x33, 0xde, 0x28, 0x1a, 0x0e, 0x9c, - 0x95, 0x8c, 0x24, 0x06, 0x00, 0x00, - ], - txid: [ - 0xe5, 0x46, 0x49, 0x7f, 0xcc, 0x6f, 0x4e, 0xcd, 0xc5, 0x1c, 0x99, 0x08, 0x1c, - 0x31, 0x05, 0xfa, 0x4b, 0x4b, 0xc8, 0x56, 0x5e, 0x49, 0xe0, 0xcb, 0xc9, 0xbd, - 0x56, 0x1d, 0xb4, 0xd9, 0x6a, 0x39, - ], - auth_digest: [ - 0xc4, 0x7e, 0xfe, 0x33, 0xfa, 0x33, 0xf9, 0xee, 0x64, 0xc5, 0xb0, 0xdf, 0x6e, - 0xdb, 0x2b, 0xab, 0xae, 0x5c, 0x17, 0x0f, 0x80, 0x00, 0x17, 0x90, 0x03, 0xaf, - 0xd3, 0x30, 0xf1, 0x6b, 0xec, 0xd6, - ], - amounts: vec![1311766330213275], - script_pubkeys: vec![vec![0x63, 0x63]], - transparent_input: Some(0), - sighash_shielded: [ - 0x9e, 0xc7, 0x6a, 0x8e, 0x04, 0x6c, 0xcf, 0x32, 0xc6, 0x34, 0xea, 0xc7, 0x45, - 0x38, 0x75, 0x02, 0xf8, 0x7b, 0x7d, 0xdf, 0xf1, 0x8a, 0xc6, 0xfb, 0xcd, 0x87, - 0xb4, 0xdd, 0x6f, 0x79, 0x69, 0xb8, - ], - sighash_all: Some([ - 0x56, 0x63, 0x05, 0x58, 0xb2, 0x6c, 0x25, 0xb2, 0x81, 0x73, 0x70, 0x30, 0x25, - 0x0b, 0xa9, 0xc2, 0x6b, 0xc3, 0x64, 0x65, 0x1b, 0x23, 0xca, 0x7b, 0xf9, 0xc3, - 0x6f, 0x77, 0x2c, 0xd4, 0xb2, 0xf7, - ]), - sighash_none: Some([ - 0xe3, 0x1b, 0x16, 0xed, 0xf6, 0x70, 0x2b, 0x00, 0x69, 0x21, 0x0c, 0xb4, 0xb4, - 0x1f, 0x44, 0x54, 0x2c, 0xbb, 0xa8, 0x4c, 0xb7, 0x18, 0x65, 0xfa, 0x0b, 0x58, - 0xf5, 0xd7, 0xcc, 0x8f, 0xa4, 0xee, - ]), - sighash_single: None, - sighash_all_anyone: Some([ - 0x94, 0xa7, 0xc1, 0xd4, 0x2e, 0xe3, 0x6b, 0x9f, 0x57, 0x38, 0x3a, 0x84, 0xb8, - 0x8e, 0x78, 0x4e, 0x6d, 0x93, 0x10, 0xb7, 0x3c, 0x23, 0x5f, 0x8e, 0x8a, 0x0d, - 0x7d, 0x8a, 0x13, 0x1f, 0x8a, 0x6e, - ]), - sighash_none_anyone: Some([ - 0xed, 0xf2, 0xb8, 0x48, 0xc8, 0xcf, 0x3d, 0x8a, 0xe0, 0x8e, 0x34, 0x25, 0x9d, - 0x7e, 0xc7, 0x41, 0x34, 0xb8, 0x50, 0xa6, 0xb6, 0x6f, 0x27, 0xd9, 0x4e, 0x00, - 0x9c, 0x2d, 0x34, 0x98, 0x41, 0x50, - ]), - sighash_single_anyone: None, - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xd3, - 0xf4, 0x1e, 0x72, 0x8e, 0xf2, 0xbc, 0x09, 0x02, 0xb8, 0x9f, 0xfd, 0xec, 0xa3, - 0x64, 0xdd, 0x2f, 0x0f, 0x07, 0x39, 0xf0, 0x53, 0x45, 0x56, 0x48, 0x31, 0x99, - 0xc7, 0x1f, 0x18, 0x93, 0x41, 0xac, 0x9b, 0x78, 0xa2, 0x69, 0x16, 0x42, 0x06, - 0xa0, 0xea, 0x1c, 0xe7, 0x3b, 0x05, 0x52, 0xac, 0x65, 0x53, 0x00, 0xb2, 0x47, - 0xc0, 0x46, 0xf8, 0xe7, 0x5e, 0xf8, 0xe3, 0xf8, 0xbd, 0x82, 0x1c, 0xf5, 0x77, - 0x49, 0x18, 0x64, 0xe2, 0x0e, 0x6d, 0x08, 0xfd, 0x2e, 0x32, 0xb5, 0x55, 0xc9, - 0x2c, 0x66, 0x1f, 0x19, 0x58, 0x8b, 0x72, 0xa8, 0x95, 0x99, 0x71, 0x0a, 0x00, - 0x06, 0x12, 0x53, 0xca, 0x02, 0xc4, 0x9d, 0x7d, 0x74, 0xf6, 0x5f, 0x01, 0x00, - 0x09, 0xac, 0x53, 0xac, 0x00, 0xac, 0x52, 0x00, 0x00, 0xac, 0xb7, 0x39, 0x17, - 0xd3, 0xcc, 0x94, 0x05, 0x00, 0x09, 0xac, 0x6a, 0x6a, 0x00, 0x63, 0x53, 0x52, - 0xac, 0xac, 0x00, 0x02, 0x80, 0xa9, 0x89, 0x23, 0x5d, 0x81, 0x05, 0x18, 0xdb, - 0xa3, 0xf3, 0x4c, 0x72, 0x7b, 0x77, 0xf2, 0x3d, 0x14, 0xf0, 0x22, 0xbf, 0x38, - 0x1e, 0x29, 0xed, 0xb1, 0x74, 0x9e, 0x05, 0x46, 0xeb, 0xdc, 0x53, 0x04, 0x35, - 0x31, 0x2e, 0xdc, 0xed, 0xc6, 0xa9, 0x61, 0x13, 0x33, 0x38, 0xd7, 0x86, 0xc4, - 0xa3, 0xe1, 0x03, 0xf6, 0x01, 0x10, 0xa1, 0x6b, 0x13, 0x37, 0x12, 0x97, 0x04, - 0xbf, 0x47, 0x54, 0x7f, 0xef, 0x3a, 0x8b, 0x97, 0xe7, 0x37, 0x53, 0x67, 0x5e, - 0x91, 0x07, 0x43, 0x64, 0xab, 0x31, 0x90, 0xcd, 0xd0, 0xf0, 0x33, 0x1b, 0x51, - 0x40, 0x00, 0xfc, 0x16, 0xc9, 0xf0, 0x65, 0xd4, 0xe2, 0xd8, 0xfe, 0x94, 0xe9, - 0x7d, 0x2e, 0x9e, 0x85, 0xc6, 0xbb, 0x74, 0x8c, 0x00, 0x42, 0xd3, 0x24, 0x9a, - 0xbb, 0x13, 0x42, 0xbb, 0x0e, 0xeb, 0xf6, 0x20, 0x58, 0xbf, 0x3d, 0xe0, 0x80, - 0xd9, 0x46, 0x11, 0xa3, 0x75, 0x09, 0x15, 0xb5, 0xdc, 0x6c, 0x0b, 0x38, 0x99, - 0xd4, 0x12, 0x22, 0xba, 0xce, 0x76, 0x0e, 0xe9, 0xc8, 0x81, 0x8d, 0xed, 0x59, - 0x9e, 0x34, 0xc5, 0x6d, 0x73, 0x72, 0xaf, 0x1e, 0xb8, 0x68, 0x52, 0xf2, 0xa7, - 0x32, 0x10, 0x4b, 0xdb, 0x75, 0x07, 0x39, 0xde, 0x6c, 0x2c, 0x6e, 0x0f, 0x9e, - 0xb7, 0xcb, 0x17, 0xf1, 0x94, 0x2b, 0xfc, 0x9f, 0x4f, 0xd6, 0xeb, 0xb6, 0xb4, - 0xcd, 0xd4, 0xda, 0x2b, 0xca, 0x26, 0xfa, 0xc4, 0x57, 0x8e, 0x9f, 0x54, 0x34, - 0x05, 0xac, 0xc7, 0xd8, 0x6f, 0xf5, 0x91, 0x58, 0xbd, 0x0c, 0xba, 0x3a, 0xef, - 0x6f, 0x4a, 0x84, 0x72, 0xd1, 0x44, 0xd9, 0x9f, 0x8b, 0x8d, 0x1d, 0xed, 0xaa, - 0x90, 0x77, 0xd4, 0xf0, 0x1d, 0x4b, 0xb2, 0x7b, 0xbe, 0x31, 0xd8, 0x8f, 0xbe, - 0xfa, 0xc3, 0xdc, 0xd4, 0x79, 0x75, 0x63, 0xa2, 0x6b, 0x1d, 0x61, 0xfc, 0xd9, - 0xa4, 0x64, 0xab, 0x21, 0xed, 0x55, 0x0f, 0xe6, 0xfa, 0x09, 0x69, 0x5b, 0xa0, - 0xb2, 0xf1, 0x0e, 0xea, 0x64, 0x68, 0xcc, 0x6e, 0x20, 0xa6, 0x6f, 0x82, 0x6e, - 0x3d, 0x14, 0xc5, 0x00, 0x6f, 0x05, 0x63, 0x88, 0x7f, 0x5e, 0x12, 0x89, 0xbe, - 0x1b, 0x20, 0x04, 0xca, 0xca, 0x8d, 0x3f, 0x34, 0xd6, 0xe8, 0x4b, 0xf5, 0x9c, - 0x1e, 0x04, 0x61, 0x9a, 0x7c, 0x23, 0xa9, 0x96, 0x94, 0x1d, 0x88, 0x9e, 0x46, - 0x22, 0xa9, 0xb9, 0xb1, 0xd5, 0x9d, 0x5e, 0x31, 0x90, 0x94, 0x31, 0x8c, 0xd4, - 0x05, 0xba, 0x27, 0xb7, 0xe2, 0xc0, 0x84, 0x76, 0x2d, 0x31, 0x45, 0x3e, 0xc4, - 0x54, 0x9a, 0x4d, 0x97, 0x72, 0x9d, 0x03, 0x34, 0x60, 0xfc, 0xf8, 0x9d, 0x64, - 0x94, 0xf2, 0xff, 0xd7, 0x89, 0xe9, 0x80, 0x82, 0xea, 0x5c, 0xe9, 0x53, 0x4b, - 0x3a, 0xcd, 0x60, 0xfe, 0x49, 0xe3, 0x7e, 0x4f, 0x66, 0x69, 0x31, 0x67, 0x73, - 0x19, 0xed, 0x89, 0xf8, 0x55, 0x88, 0x74, 0x1b, 0x31, 0x28, 0x90, 0x1a, 0x93, - 0xbd, 0x78, 0xe4, 0xbe, 0x02, 0x25, 0xa9, 0xe2, 0x69, 0x2c, 0x77, 0xc9, 0x69, - 0xed, 0x01, 0x76, 0xbd, 0xf9, 0x55, 0x59, 0x48, 0xcb, 0xd5, 0xa3, 0x32, 0xd0, - 0x45, 0xde, 0x6b, 0xa6, 0xbf, 0x44, 0x90, 0xad, 0xfe, 0x74, 0x44, 0xcd, 0x46, - 0x7a, 0x09, 0x07, 0x54, 0x17, 0xfc, 0xc0, 0x06, 0x2e, 0x49, 0xf0, 0x08, 0xc5, - 0x1a, 0xd4, 0x22, 0x74, 0x39, 0xc1, 0xb4, 0x47, 0x6c, 0xcd, 0x8e, 0x97, 0x86, - 0x2d, 0xab, 0x7b, 0xe1, 0xe8, 0xd3, 0x99, 0xc0, 0x5e, 0xf2, 0x7c, 0x6e, 0x22, - 0xee, 0x27, 0x3e, 0x15, 0x78, 0x6e, 0x39, 0x4c, 0x8f, 0x1b, 0xe3, 0x16, 0x82, - 0xa3, 0x01, 0x47, 0x96, 0x3a, 0xc8, 0xda, 0x8d, 0x41, 0xd8, 0x04, 0x25, 0x84, - 0x26, 0xa3, 0xf7, 0x02, 0x89, 0xb8, 0xad, 0x19, 0xd8, 0xde, 0x13, 0xbe, 0x4e, - 0xeb, 0xe3, 0xbd, 0x4c, 0x8a, 0x6f, 0x55, 0xd6, 0xe0, 0xc3, 0x73, 0xd4, 0x56, - 0x85, 0x18, 0x79, 0xf5, 0xfb, 0xc2, 0x82, 0xdb, 0x9e, 0x13, 0x48, 0x06, 0xbf, - 0xf7, 0x1e, 0x11, 0xbc, 0x33, 0xab, 0x75, 0xdd, 0x6c, 0xa0, 0x67, 0xfb, 0x73, - 0xa0, 0x43, 0xb6, 0x46, 0xa7, 0xcf, 0x39, 0xca, 0xb4, 0x92, 0x83, 0x86, 0x78, - 0x6d, 0x2f, 0x24, 0x14, 0x1e, 0xe1, 0x20, 0xfd, 0xc3, 0x4d, 0x67, 0x64, 0xea, - 0xfc, 0x66, 0x88, 0x0e, 0xe0, 0x20, 0x4f, 0x53, 0xcc, 0x11, 0x67, 0xed, 0x20, - 0xb4, 0x3a, 0x52, 0xde, 0xa3, 0xca, 0x7c, 0xff, 0x8e, 0xf3, 0x5c, 0xd8, 0xe6, - 0xd7, 0xc1, 0x11, 0xa6, 0x8e, 0xf4, 0x4b, 0xcd, 0x0c, 0x15, 0x13, 0xad, 0x47, - 0xca, 0x61, 0xc6, 0x59, 0xcc, 0x5d, 0x32, 0x5b, 0x44, 0x0f, 0x6b, 0x9f, 0x59, - 0xaf, 0xf6, 0x68, 0x79, 0xbb, 0x66, 0x88, 0xfd, 0x28, 0x59, 0x36, 0x2b, 0x18, - 0x2f, 0x20, 0x7b, 0x31, 0x75, 0x96, 0x1f, 0x64, 0x11, 0xa4, 0x93, 0xbf, 0xfd, - 0x04, 0x8e, 0x7d, 0x0d, 0x87, 0xd8, 0x2f, 0xe6, 0xf9, 0x90, 0xa2, 0xb0, 0xa2, - 0x5f, 0x5a, 0xa0, 0x11, 0x1a, 0x6e, 0x68, 0xf3, 0x7b, 0xf6, 0xf3, 0xac, 0x2d, - 0x26, 0xb8, 0x46, 0x86, 0xe5, 0x69, 0xd5, 0x8d, 0x99, 0xc1, 0x38, 0x35, 0x97, - 0xfa, 0xd8, 0x11, 0x93, 0xc4, 0xc1, 0xb1, 0x6e, 0x6a, 0x90, 0xe2, 0xd5, 0x07, - 0xcd, 0xfe, 0x6f, 0xbd, 0xaa, 0x86, 0x16, 0x3e, 0x9c, 0xf5, 0xde, 0x31, 0x00, - 0xfb, 0xca, 0x7e, 0x8d, 0xa0, 0x47, 0xb0, 0x90, 0xdb, 0x9f, 0x37, 0x95, 0x2f, - 0xbf, 0xee, 0x76, 0xaf, 0x61, 0x66, 0x81, 0x90, 0xbd, 0x52, 0xed, 0x49, 0x0e, - 0x67, 0x7b, 0x51, 0x5d, 0x01, 0x43, 0x18, 0xb4, 0x36, 0xba, 0x91, 0x21, 0xa3, - 0x05, 0x9e, 0x03, 0x65, 0x0d, 0xf3, 0xa8, 0x68, 0x5c, 0x8c, 0x3e, 0x8a, 0x77, - 0x8f, 0x49, 0x1d, 0x81, 0x6f, 0x6c, 0x2b, 0x55, 0x13, 0x25, 0xc8, 0x08, 0x0a, - 0x80, 0x78, 0x99, 0x97, 0x3e, 0xb9, 0x3c, 0x5e, 0x81, 0x9a, 0xad, 0x66, 0x94, - 0x13, 0xf8, 0x38, 0x79, 0x33, 0xad, 0x15, 0x84, 0xaa, 0x35, 0xe4, 0x3f, 0x4e, - 0xcd, 0x1e, 0x2d, 0x04, 0x07, 0xfb, 0xc4, 0x03, 0x03, 0xa9, 0x4d, 0x73, 0x1e, - 0x7c, 0xf5, 0x45, 0xa2, 0x62, 0x77, 0xca, 0xad, 0x39, 0x83, 0x7f, 0x1e, 0x6a, - 0x69, 0x1c, 0x2f, 0xf1, 0xe3, 0x23, 0x8a, 0x20, 0xc2, 0x03, 0x92, 0x54, 0x4d, - 0x63, 0x59, 0xeb, 0x23, 0xfa, 0xf3, 0x8a, 0x08, 0x22, 0xda, 0x36, 0xce, 0x42, - 0x6c, 0x4a, 0x2f, 0xbe, 0xff, 0xeb, 0x0a, 0x8a, 0x2e, 0x29, 0x7a, 0x9d, 0x19, - 0xba, 0x15, 0x02, 0x45, 0x90, 0xe3, 0x32, 0x9d, 0x9f, 0xa9, 0x26, 0x1f, 0x99, - 0x38, 0xa4, 0x03, 0x2d, 0xd3, 0x46, 0x06, 0xc9, 0xcf, 0x9f, 0x3d, 0xd3, 0x3e, - 0x57, 0x6f, 0x05, 0xcd, 0x1d, 0xd6, 0x81, 0x1c, 0x62, 0x98, 0x75, 0x7d, 0x77, - 0xd9, 0xe8, 0x10, 0xab, 0xdb, 0x22, 0x6a, 0xfc, 0xaa, 0x43, 0x46, 0xa6, 0x56, - 0x0f, 0x89, 0x32, 0xb3, 0x18, 0x1f, 0xd3, 0x55, 0xd5, 0xd3, 0x91, 0x97, 0x61, - 0x83, 0xf8, 0xd9, 0x93, 0x88, 0x83, 0x96, 0x32, 0xd6, 0x35, 0x4f, 0x66, 0x6d, - 0x09, 0xd3, 0xe5, 0x62, 0x9e, 0xa1, 0x97, 0x37, 0x38, 0x86, 0x13, 0xd3, 0x8a, - 0x34, 0xfd, 0x0f, 0x6e, 0x50, 0xee, 0x5a, 0x0c, 0xc9, 0x67, 0x71, 0x77, 0xf5, - 0x00, 0x28, 0xc1, 0x41, 0x37, 0x81, 0x87, 0xbd, 0x28, 0x19, 0x40, 0x3f, 0xc5, - 0x34, 0xf8, 0x00, 0x76, 0xe9, 0x38, 0x0c, 0xb4, 0x96, 0x4d, 0x3b, 0x6b, 0x45, - 0x81, 0x9d, 0x3b, 0x8e, 0x9c, 0xaf, 0x54, 0xf0, 0x51, 0x85, 0x2d, 0x67, 0x1b, - 0xf8, 0xc1, 0xff, 0xde, 0x2d, 0x15, 0x10, 0x75, 0x64, 0x18, 0xcb, 0x48, 0x10, - 0x93, 0x6a, 0xa5, 0x7e, 0x69, 0x65, 0xd6, 0xfb, 0x65, 0x6a, 0x76, 0x0b, 0x7f, - 0x19, 0xad, 0xf9, 0x6c, 0x17, 0x34, 0x88, 0x55, 0x21, 0x93, 0xb1, 0x47, 0xee, - 0x58, 0x85, 0x80, 0x33, 0xda, 0xc7, 0xcd, 0x0e, 0xb2, 0x04, 0xc0, 0x64, 0x90, - 0xbb, 0xde, 0xdf, 0x5f, 0x75, 0x71, 0xac, 0xb2, 0xeb, 0xe7, 0x6a, 0xce, 0xf3, - 0xf2, 0xa0, 0x1e, 0xe9, 0x87, 0x48, 0x6d, 0xfe, 0x6c, 0x3f, 0x0a, 0x5e, 0x23, - 0x4c, 0x12, 0x72, 0x58, 0xf9, 0x7a, 0x28, 0xfb, 0x5d, 0x16, 0x4a, 0x81, 0x76, - 0xbe, 0x94, 0x6b, 0x80, 0x97, 0xd0, 0xe3, 0x17, 0x28, 0x7f, 0x33, 0xbf, 0x9c, - 0x16, 0xf9, 0xa5, 0x45, 0x40, 0x9c, 0xe2, 0x9b, 0x1f, 0x42, 0x73, 0x72, 0x5f, - 0xc0, 0xdf, 0x02, 0xa0, 0x4e, 0xba, 0xe1, 0x78, 0xb3, 0x41, 0x4f, 0xb0, 0xa8, - 0x2d, 0x50, 0xde, 0xb0, 0x9f, 0xcf, 0x4e, 0x6e, 0xe9, 0xd1, 0x80, 0xff, 0x4f, - 0x56, 0xff, 0x3b, 0xc1, 0xd3, 0x60, 0x1f, 0xc2, 0xdc, 0x90, 0xd8, 0x14, 0xc3, - 0x25, 0x6f, 0x49, 0x67, 0xd3, 0xa8, 0xd6, 0x4c, 0x83, 0xfe, 0xa3, 0x39, 0xc5, - 0x1f, 0x5a, 0x8e, 0x58, 0x01, 0xfb, 0xb9, 0x78, 0x35, 0x58, 0x1b, 0x60, 0x24, - 0x65, 0xde, 0xe0, 0x4b, 0x59, 0x22, 0xc2, 0x76, 0x1b, 0x54, 0x24, 0x5b, 0xec, - 0x0c, 0x9e, 0xef, 0x2d, 0xb9, 0x7d, 0x22, 0xb2, 0xb3, 0x55, 0x6c, 0xc9, 0x69, - 0xfb, 0xb1, 0x3d, 0x06, 0x50, 0x97, 0x65, 0xa5, 0x2b, 0x3f, 0xac, 0x54, 0xb9, - 0x3f, 0x42, 0x1b, 0xf0, 0x8e, 0x18, 0xd5, 0x2d, 0xdd, 0x52, 0xcc, 0x1c, 0x8c, - 0xa8, 0xad, 0xfa, 0xcc, 0xab, 0x7e, 0x5c, 0xc2, 0xf4, 0x57, 0x3f, 0xbb, 0xf8, - 0x23, 0x9b, 0xb0, 0xb8, 0xae, 0xdb, 0xf8, 0xda, 0xd1, 0x62, 0x82, 0xda, 0x5c, - 0x91, 0x25, 0xdb, 0xa1, 0xc0, 0x59, 0xd0, 0xdf, 0x8a, 0xbf, 0x62, 0x10, 0x78, - 0xf0, 0x2d, 0x6c, 0x4b, 0xc8, 0x6d, 0x40, 0x84, 0x5a, 0xc1, 0xd5, 0x97, 0x10, - 0xc4, 0x5f, 0x07, 0xd5, 0x85, 0xeb, 0x48, 0xb3, 0x2f, 0xc0, 0x16, 0x7b, 0xa2, - 0x56, 0xe7, 0x3c, 0xa3, 0xb9, 0x31, 0x1c, 0x62, 0xd1, 0x09, 0x49, 0x79, 0x57, - 0xd8, 0xdb, 0xe1, 0x0a, 0xa3, 0xe8, 0x66, 0xb4, 0x0c, 0x0b, 0xaa, 0x2b, 0xc4, - 0x92, 0xc1, 0x9a, 0xd1, 0xe6, 0x37, 0x2d, 0x96, 0x22, 0xbf, 0x16, 0x3f, 0xbf, - 0xfe, 0xae, 0xee, 0x79, 0x6a, 0x3c, 0xd9, 0xb6, 0xfb, 0xbf, 0xa4, 0xd7, 0x92, - 0xf3, 0x4d, 0x7f, 0xd6, 0xe7, 0x63, 0xcd, 0x58, 0x59, 0xdd, 0x26, 0x83, 0x3d, - 0x21, 0xd9, 0xbc, 0x54, 0x52, 0xbd, 0x19, 0x51, 0x5d, 0xff, 0x9f, 0x49, 0x95, - 0xb3, 0x5b, 0xc0, 0xc1, 0xf8, 0x76, 0xe6, 0xad, 0x11, 0xf2, 0x45, 0x2d, 0xc9, - 0xae, 0x85, 0xae, 0xc0, 0x1f, 0xc5, 0x6f, 0x8c, 0xbf, 0xda, 0x75, 0xa7, 0x72, - 0x7b, 0x75, 0xeb, 0xbd, 0x6b, 0xbf, 0xfb, 0x43, 0xb6, 0x3a, 0x3b, 0x1b, 0x67, - 0x1e, 0x40, 0xfe, 0xb0, 0xdb, 0x00, 0x29, 0x74, 0xa3, 0xc3, 0xb1, 0xa7, 0x88, - 0x56, 0x72, 0x31, 0xbf, 0x63, 0x99, 0xff, 0x89, 0x23, 0x69, 0x81, 0x14, 0x9d, - 0x42, 0x38, 0x02, 0xd2, 0x34, 0x1a, 0x3b, 0xed, 0xb9, 0xdd, 0xcb, 0xac, 0x1f, - 0xe7, 0xb6, 0x43, 0x5e, 0x14, 0x79, 0xc7, 0x2e, 0x70, 0x89, 0xd0, 0x29, 0xe7, - 0xfb, 0xba, 0xf3, 0xcf, 0x37, 0xe9, 0xb9, 0xa6, 0xb7, 0x76, 0x79, 0x1e, 0x4c, - 0x5e, 0x6f, 0xda, 0x57, 0xe8, 0xd5, 0xf1, 0x4c, 0xd8, 0x2d, 0x6b, 0x59, 0xe8, - 0x75, 0x02, 0x00, 0x84, 0xaf, 0x07, 0x21, 0x9c, 0x7c, 0x0e, 0xe7, 0xfc, 0x7b, - 0xfc, 0x79, 0xf3, 0x25, 0x64, 0x4e, 0x4d, 0xf4, 0xc0, 0xd7, 0xdb, 0x08, 0xe9, - 0xf0, 0xbd, 0x02, 0x49, 0x43, 0xc7, 0x05, 0xab, 0xff, 0x89, 0x94, 0xbf, 0xa6, - 0x05, 0xcf, 0xbc, 0x7e, 0xd7, 0x46, 0xa7, 0xd3, 0xf7, 0xc3, 0x7d, 0x9e, 0x8b, - 0xdc, 0x43, 0x3b, 0x7d, 0x79, 0xe0, 0x8a, 0x12, 0xf7, 0x38, 0xa8, 0xf0, 0xdb, - 0xdd, 0xfe, 0xf2, 0xf2, 0x65, 0x7e, 0xf3, 0xe4, 0x7d, 0x1b, 0x0f, 0xd1, 0x1e, - 0x6a, 0x13, 0x31, 0x1f, 0xb7, 0x99, 0xc7, 0x9c, 0x64, 0x1d, 0x9d, 0xa4, 0x3b, - 0x33, 0xe7, 0xad, 0x01, 0x2e, 0x28, 0x25, 0x53, 0x98, 0x78, 0x92, 0x62, 0x27, - 0x5f, 0x11, 0x75, 0xbe, 0x84, 0x62, 0xc0, 0x14, 0x91, 0xc4, 0xd8, 0x42, 0x40, - 0x6d, 0x0e, 0xc4, 0x28, 0x2c, 0x95, 0x26, 0x17, 0x4a, 0x09, 0x87, 0x8f, 0xe8, - 0xfd, 0xde, 0x33, 0xa2, 0x96, 0x04, 0xe5, 0xe5, 0xe7, 0xb2, 0xa0, 0x25, 0xd6, - 0x65, 0x0b, 0x97, 0xdb, 0xb5, 0x2b, 0xef, 0xb5, 0x9b, 0x1d, 0x30, 0xa5, 0x74, - 0x33, 0xb0, 0xa3, 0x51, 0x47, 0x44, 0x44, 0x09, 0x9d, 0xaa, 0x37, 0x10, 0x46, - 0x61, 0x32, 0x60, 0xcf, 0x33, 0x54, 0xcf, 0xcd, 0xad, 0xa6, 0x63, 0xec, 0xe8, - 0x24, 0xff, 0xd7, 0xe4, 0x43, 0x93, 0x88, 0x6a, 0x86, 0x16, 0x5d, 0xdd, 0xdf, - 0x8c, 0x35, 0xa2, 0xd2, 0x70, 0x84, 0x6b, 0x9d, 0xbe, 0x00, 0x5c, 0xda, 0x16, - 0xaf, 0x44, 0x08, 0xf3, 0xab, 0x06, 0xa9, 0x16, 0xee, 0xeb, 0x9c, 0x95, 0x94, - 0xb7, 0x04, 0x24, 0xa4, 0xc1, 0xd1, 0x71, 0x29, 0x5b, 0x67, 0x63, 0xb2, 0x2f, - 0x47, 0xf8, 0x0b, 0x53, 0xcc, 0xbb, 0x90, 0x4b, 0xd6, 0x8f, 0xd6, 0x5f, 0xbd, - 0x3f, 0xbd, 0xea, 0x10, 0x35, 0xe9, 0x8c, 0x21, 0xa7, 0xdb, 0xc9, 0x1a, 0x9b, - 0x5b, 0xc7, 0x69, 0x0f, 0x05, 0xec, 0x31, 0x7c, 0x97, 0xf8, 0x76, 0x4e, 0xb4, - 0x8e, 0x91, 0x1d, 0x42, 0x8e, 0xc8, 0xd8, 0x61, 0xb7, 0x08, 0xe8, 0x29, 0x8a, - 0xcb, 0x62, 0x15, 0x51, 0x45, 0x15, 0x5a, 0xe9, 0x5f, 0x0a, 0x1d, 0x15, 0x01, - 0x03, 0x47, 0x53, 0x14, 0x6e, 0x22, 0xd0, 0x5f, 0x58, 0x6d, 0x7f, 0x6b, 0x4f, - 0xe1, 0x2d, 0xad, 0x9a, 0x17, 0xf5, 0xdb, 0x70, 0xb1, 0xdb, 0x96, 0xb8, 0xd9, - 0xa8, 0x3e, 0xda, 0xdc, 0x96, 0x6c, 0x8a, 0x54, 0x66, 0xb6, 0x1f, 0xc9, 0x98, - 0xc3, 0x1f, 0x10, 0x70, 0xd9, 0xa5, 0xc9, 0xa6, 0xd2, 0x68, 0xd3, 0x04, 0xfe, - 0x6b, 0x8f, 0xd3, 0xb4, 0x01, 0x03, 0x48, 0x61, 0x1a, 0xbd, 0xcb, 0xd4, 0x9f, - 0xe4, 0xf8, 0x5b, 0x62, 0x3c, 0x78, 0x28, 0xc7, 0x13, 0x82, 0xe1, 0x03, 0x4e, - 0xa6, 0x7b, 0xc8, 0xae, 0x97, 0x40, 0x4b, 0x0c, 0x50, 0xb2, 0xfa, 0xda, 0x0a, - 0xbf, 0x4f, 0xd3, 0xa8, 0xbf, 0x7f, 0x3c, 0x0b, 0x38, 0xb2, 0xb0, 0x8d, 0xd4, - 0xba, 0xe0, 0x8a, 0xc8, 0xf5, 0x09, 0xc5, 0x97, 0x22, 0x39, 0x43, 0x9c, 0x3c, - 0x08, 0x02, 0x54, 0x14, 0x94, 0x36, 0x49, 0x30, 0x55, 0x21, 0x32, 0x6b, 0xde, - 0x08, 0x56, 0x30, 0x86, 0x46, 0x29, 0x29, 0x1b, 0xae, 0x25, 0xff, 0x88, 0x22, - 0xa1, 0x4c, 0x4b, 0x66, 0x6a, 0x92, 0x59, 0xad, 0x0d, 0x00, 0x00, - ], - txid: [ - 0xfc, 0xda, 0x37, 0x09, 0xc1, 0x97, 0x22, 0x60, 0x1d, 0x47, 0xc8, 0x9d, 0x7f, - 0xf5, 0x79, 0x7c, 0x6a, 0xb9, 0xcb, 0x85, 0xf3, 0xda, 0xee, 0xe3, 0x91, 0x9b, - 0xcc, 0xc5, 0x16, 0xad, 0x33, 0x5b, - ], - auth_digest: [ - 0x92, 0x6a, 0x20, 0x24, 0xb5, 0x7b, 0x11, 0x48, 0x33, 0xf7, 0x2a, 0x38, 0x7e, - 0x67, 0x2a, 0x60, 0x65, 0x6e, 0xf3, 0x28, 0x0b, 0xf0, 0x7e, 0x3b, 0x6d, 0x15, - 0xbd, 0x31, 0x49, 0x04, 0x18, 0x10, - ], - amounts: vec![221157483985475, 1614190427764494], - script_pubkeys: vec![vec![], vec![0x53, 0x51]], - transparent_input: Some(0), - sighash_shielded: [ - 0x4f, 0x7c, 0xed, 0xe7, 0x12, 0x2e, 0x4a, 0x9e, 0x6a, 0x8a, 0x61, 0x62, 0x97, - 0x32, 0x77, 0x9a, 0x9b, 0x76, 0xe1, 0x8e, 0xa3, 0x84, 0x49, 0x9d, 0x7e, 0xcf, - 0xd2, 0xf1, 0x45, 0x33, 0x36, 0xae, - ], - sighash_all: Some([ - 0x0d, 0xab, 0x96, 0x60, 0xb0, 0xd8, 0xcd, 0xe4, 0x89, 0x05, 0x34, 0xab, 0x8c, - 0xb0, 0xa3, 0x13, 0x9b, 0xeb, 0x33, 0x74, 0xb9, 0x5d, 0x8d, 0x46, 0x0b, 0x38, - 0x3c, 0x0e, 0x6c, 0x96, 0x84, 0x66, - ]), - sighash_none: Some([ - 0x87, 0xf1, 0x49, 0x9b, 0xd1, 0xa1, 0x1d, 0xfa, 0x19, 0xb0, 0xf9, 0x25, 0xb2, - 0x91, 0x3e, 0xd0, 0xe4, 0x80, 0xb8, 0xb0, 0xf4, 0x0f, 0x74, 0xba, 0x5f, 0x02, - 0x1d, 0x5d, 0xcf, 0x53, 0xac, 0xc1, - ]), - sighash_single: Some([ - 0xc8, 0x0b, 0xcb, 0xad, 0xb5, 0x33, 0xe5, 0x17, 0x5b, 0x10, 0xc2, 0x22, 0x34, - 0xe3, 0x76, 0x58, 0x83, 0x71, 0xea, 0x68, 0xa2, 0x34, 0xeb, 0x6e, 0xe0, 0x5e, - 0x9b, 0xcd, 0xf3, 0x41, 0xdf, 0xf0, - ]), - sighash_all_anyone: Some([ - 0xbe, 0x35, 0xea, 0x86, 0x41, 0x96, 0x36, 0x50, 0x23, 0x2a, 0x58, 0xed, 0x3e, - 0x86, 0x0d, 0x74, 0xec, 0x4d, 0x92, 0xc3, 0x0e, 0x9d, 0x5d, 0x04, 0x3e, 0xb3, - 0x9f, 0xe3, 0x69, 0x08, 0x98, 0x8d, - ]), - sighash_none_anyone: Some([ - 0xae, 0xe9, 0xc2, 0x7d, 0x20, 0x29, 0x5b, 0xb6, 0xaf, 0x1a, 0x40, 0x2c, 0xf3, - 0xda, 0x9b, 0x3d, 0x6a, 0x06, 0x3f, 0x41, 0x33, 0xd2, 0x19, 0xe3, 0xaa, 0x3b, - 0xc2, 0x51, 0x85, 0xda, 0xb9, 0x86, - ]), - sighash_single_anyone: Some([ - 0xa7, 0x10, 0x7a, 0x19, 0xf3, 0xad, 0x7f, 0x4e, 0x29, 0xb7, 0x67, 0xb9, 0x3f, - 0x78, 0x67, 0x4c, 0x84, 0x2d, 0x04, 0xbd, 0xc5, 0xb2, 0x26, 0x5b, 0xcb, 0x3f, - 0x40, 0x5f, 0xff, 0x6e, 0x00, 0xa0, - ]), - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x47, - 0x70, 0x1c, 0x85, 0x97, 0x65, 0x43, 0x11, 0x02, 0xa6, 0xfa, 0x0b, 0xf2, 0x99, - 0x99, 0x56, 0xfb, 0xfd, 0x0e, 0xe6, 0x8e, 0xc3, 0x6e, 0x46, 0x88, 0x80, 0x9a, - 0xe2, 0x31, 0xeb, 0x8b, 0xc4, 0x36, 0x9f, 0x5f, 0xe1, 0x57, 0x3f, 0x57, 0xe0, - 0x99, 0xd9, 0xc0, 0x99, 0x01, 0x05, 0x51, 0x52, 0xac, 0x00, 0xac, 0x11, 0x95, - 0x6a, 0x8a, 0xe9, 0x05, 0xea, 0xd8, 0x69, 0x54, 0x54, 0x7c, 0x44, 0x8a, 0xe4, - 0x3d, 0x31, 0x5e, 0x66, 0x9c, 0x42, 0x42, 0xda, 0x56, 0x59, 0x38, 0xf4, 0x17, - 0xbf, 0x43, 0xce, 0x7b, 0x2b, 0x30, 0xb1, 0xcd, 0x40, 0x18, 0x38, 0x8e, 0x06, - 0x51, 0x6a, 0x6a, 0xac, 0x6a, 0x00, 0x87, 0x7a, 0x59, 0x25, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x23, 0xc7, 0x84, 0xc5, 0xb8, 0x7c, 0xc8, 0xa3, 0xc6, 0x80, 0xc7, - 0xb8, 0xc6, 0x9c, 0xc7, 0xba, 0xc5, 0xa1, 0xc4, 0xb5, 0xc7, 0x82, 0xc4, 0x84, - 0xc3, 0x87, 0xc7, 0x9c, 0xc4, 0x82, 0xc3, 0xb3, 0xc5, 0x97, 0xc8, 0x96, 0x01, - 0x7d, 0x04, 0x25, 0x3c, 0x63, 0x63, 0x6e, 0x16, 0x67, 0x60, 0xed, 0xbf, 0x73, - 0x94, 0x77, 0xe6, 0xe3, 0x0f, 0xfb, 0xde, 0x57, 0xf2, 0x88, 0x08, 0x43, 0x4c, - 0xf5, 0xb6, 0x60, 0xa1, 0xad, 0x28, 0x85, 0x7a, 0xc9, 0xd6, 0xc9, 0x27, 0x6a, - 0x87, 0x90, 0x80, 0x0d, 0xca, 0x8a, 0x8c, 0x31, 0x44, 0x3c, 0x10, 0x34, 0xd1, - 0xf3, 0x1a, 0x0f, 0xd2, 0x02, 0xe6, 0xa0, 0x9c, 0xa8, 0x7c, 0xc2, 0xd5, 0xca, - 0x02, 0xa9, 0x13, 0x8d, 0xd1, 0x78, 0xe0, 0xab, 0x58, 0xe8, 0x52, 0x44, 0xa7, - 0x2e, 0xdf, 0x72, 0x7d, 0x00, 0x06, 0x14, 0xe8, 0x35, 0x62, 0xf8, 0x2d, 0xfd, - 0x40, 0x5b, 0x54, 0xa4, 0x5e, 0xb3, 0x2c, 0x16, 0x54, 0x48, 0xd4, 0xd5, 0xd6, - 0x1c, 0xa2, 0x85, 0x95, 0x85, 0x36, 0x9f, 0x53, 0xf1, 0xa1, 0x37, 0xe9, 0xe8, - 0x2b, 0x67, 0xb8, 0xfd, 0xaf, 0x01, 0xbd, 0xa5, 0x4a, 0x31, 0x73, 0x11, 0x89, - 0x6a, 0xe1, 0x02, 0x80, 0xa0, 0x32, 0x44, 0x0c, 0x42, 0x0a, 0x42, 0x1e, 0x94, - 0x4d, 0x1e, 0x95, 0x2b, 0x00, 0xd6, 0x41, 0x5b, 0xc4, 0xaa, 0xc2, 0xb7, 0xc7, - 0x90, 0xce, 0x87, 0xc6, 0x8a, 0xcd, 0xb7, 0xe1, 0x9a, 0xbe, 0xc8, 0xb4, 0xc2, - 0xaa, 0x29, 0x41, 0xc6, 0x82, 0xe1, 0x9b, 0xab, 0xc6, 0xb3, 0xc6, 0x88, 0xc8, - 0xac, 0xc6, 0x80, 0xc5, 0x94, 0xc6, 0x94, 0xe1, 0x9a, 0xaf, 0xce, 0x88, 0xc7, - 0xb8, 0xc8, 0xa9, 0x33, 0xc3, 0xbd, 0xc8, 0x93, 0xc4, 0xb5, 0xc7, 0xb9, 0x31, - 0x4e, 0xc5, 0xa8, 0xc7, 0x88, 0xc8, 0x99, 0xc6, 0x97, 0xc5, 0x91, 0xe1, 0x9a, - 0xa3, 0xc6, 0x8c, 0xc7, 0xa7, 0xc6, 0xbf, 0x4a, 0xc7, 0x89, 0xc5, 0x89, 0xc2, - 0xa9, 0xc8, 0x87, 0xc7, 0x86, 0x65, 0xc8, 0x99, 0xc3, 0x84, 0xc7, 0xa7, 0x62, - 0xc3, 0xb5, 0xe1, 0x9a, 0xad, 0xc6, 0xbb, 0xc6, 0x98, 0xe2, 0xb1, 0xa0, 0xc5, - 0xbb, 0xc6, 0xb6, 0xe2, 0xb1, 0xa6, 0xc3, 0x8e, 0xe1, 0x9a, 0xb9, 0x3a, 0xc8, - 0x86, 0xc6, 0x87, 0x52, 0xc4, 0xa4, 0xc3, 0x9f, 0xc5, 0x8b, 0x7d, 0xe1, 0x9a, - 0xb6, 0xc5, 0xb8, 0xc8, 0x9e, 0xc3, 0x8d, 0xe2, 0xb1, 0xaa, 0xc8, 0xb0, 0xc7, - 0xaf, 0x26, 0xc5, 0x94, 0xe1, 0x9a, 0xb1, 0xc8, 0xb1, 0xc5, 0xa3, 0xcd, 0xb4, - 0xc8, 0x97, 0xc3, 0xb2, 0xce, 0x8c, 0xc3, 0xba, 0xc4, 0xb0, 0xc5, 0xb6, 0xc4, - 0x8b, 0x74, 0x72, 0xc3, 0xae, 0x35, 0xc6, 0xa3, 0xc4, 0x98, 0xc7, 0x94, 0xc8, - 0x98, 0xc4, 0xaa, 0x42, 0xe1, 0x9b, 0x95, 0xc5, 0x97, 0xc7, 0xaa, 0x74, 0xc5, - 0x9e, 0x2a, 0xc4, 0x95, 0xc2, 0xb7, 0xc5, 0x8b, 0xe1, 0x9a, 0xa4, 0x5a, 0x04, - 0x37, 0xb7, 0xb2, 0x19, 0xb4, 0xa3, 0x61, 0x6d, 0xf2, 0xd8, 0xe7, 0x7a, 0x20, - 0x5c, 0x89, 0x95, 0x91, 0x07, 0x76, 0xd5, 0xfa, 0x3d, 0x32, 0xde, 0xe8, 0x0d, - 0xb6, 0x01, 0xf3, 0xed, 0xd3, 0xaf, 0xc8, 0x5f, 0xb7, 0x56, 0x0c, 0x53, 0x48, - 0xc6, 0x9c, 0x41, 0x93, 0xa8, 0xbb, 0xfd, 0x05, 0x2c, 0xbf, 0x7e, 0x1c, 0xfc, - 0xb7, 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, - 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, - 0x26, 0xe0, 0x96, 0xd8, 0xb1, 0xe4, 0x95, 0x4b, 0x54, 0x81, 0x3b, 0xb3, 0x3f, - 0x08, 0xd5, 0x62, 0xba, 0x51, 0x3f, 0xee, 0x1b, 0x09, 0xc0, 0xfc, 0xd5, 0x16, - 0x05, 0x54, 0x19, 0x47, 0x4d, 0xd7, 0xfd, 0xa0, 0x38, 0xa8, 0x1c, 0x84, 0xea, - 0x7b, 0x94, 0x68, 0x28, 0x7f, 0x0e, 0xb0, 0xc1, 0x0c, 0x4b, 0x13, 0x25, 0x20, - 0x19, 0x4d, 0x3d, 0x8d, 0x53, 0x51, 0xfc, 0x10, 0xd0, 0x9c, 0x15, 0xc8, 0xcc, - 0x10, 0x1a, 0xa1, 0x66, 0x0c, 0xd7, 0xde, 0xdd, 0xca, 0x3b, 0x40, 0xfa, 0xee, - 0x54, 0x3f, 0x2d, 0x44, 0x34, 0x58, 0xb1, 0xcf, 0xe1, 0xb9, 0xd4, 0x63, 0x91, - 0xf8, 0x47, 0x49, 0x05, 0xc5, 0xf7, 0xf2, 0x13, 0x55, 0x15, 0x79, 0x16, 0x71, - 0xe5, 0x35, 0xa1, 0x74, 0xd6, 0x7b, 0x5d, 0x13, 0xf8, 0x1f, 0x46, 0xdf, 0x7a, - 0x90, 0x2a, 0x40, 0xfc, 0xb7, 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, - 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, - 0xe8, 0xa7, 0xb3, 0x4d, 0x26, 0xe0, 0x96, 0xd8, 0xb1, 0xca, 0x0d, 0x67, 0xf6, - 0xe5, 0x54, 0x12, 0x47, 0x39, 0xf8, 0x05, 0xaf, 0x87, 0x6a, 0xee, 0xde, 0x53, - 0xaa, 0x8b, 0x0f, 0x8e, 0x56, 0x04, 0xa7, 0x3c, 0x30, 0xcb, 0xd0, 0x9d, 0xad, - 0x96, 0x3d, 0x6f, 0x8a, 0x5d, 0xcc, 0x40, 0xde, 0xf4, 0x07, 0x97, 0x34, 0x21, - 0x13, 0xba, 0x20, 0x6f, 0xae, 0x8e, 0xbe, 0x4f, 0x3b, 0xc3, 0xca, 0xf6, 0x92, - 0x59, 0xe4, 0x62, 0xef, 0xf9, 0xba, 0x8b, 0x3f, 0xcc, 0x95, 0xbe, 0xce, 0x3d, - 0xfd, 0xfc, 0xe5, 0xcf, 0x9e, 0x1b, 0x41, 0x96, 0xa6, 0x13, 0x2e, 0x53, 0x11, - 0xfa, 0xac, 0xd6, 0x21, 0xef, 0xee, 0x9f, 0x66, 0x2d, 0xb4, 0x9a, 0x3c, 0x6e, - 0x14, 0x2c, 0x18, 0x4a, 0x79, 0x6c, 0x2b, 0xb9, 0xf0, 0x3a, 0x95, 0x35, 0x72, - 0xba, 0x5d, 0x42, 0x87, 0xc0, 0xce, 0xfb, 0xfc, 0xb7, 0x3c, 0xb0, 0x33, 0x97, - 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, - 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, 0x26, 0xe0, 0x96, 0xd8, 0xb1, - 0x27, 0x43, 0x3f, 0x9e, 0x49, 0xd3, 0xaa, 0x09, 0xe3, 0x56, 0xd8, 0xd6, 0x6d, - 0x0c, 0x01, 0x21, 0xe9, 0x1a, 0x3c, 0x4a, 0xa3, 0xf2, 0x7f, 0xa1, 0xb6, 0x33, - 0x96, 0xe2, 0xb4, 0x1d, 0xb9, 0x08, 0xfd, 0xab, 0x8b, 0x18, 0xcc, 0x73, 0x04, - 0xe9, 0x4e, 0x97, 0x05, 0x68, 0xf9, 0x42, 0x1c, 0x0d, 0xbb, 0xba, 0xf8, 0x45, - 0x98, 0xd9, 0x72, 0xb0, 0x53, 0x4f, 0x48, 0xa5, 0xe5, 0x26, 0x70, 0x43, 0x3a, - 0xf1, 0xb8, 0x24, 0x4d, 0x83, 0x88, 0x8d, 0x72, 0x32, 0xfa, 0x09, 0x3f, 0x81, - 0x5e, 0xa0, 0x2f, 0x9a, 0xb0, 0x31, 0xe1, 0x64, 0x6a, 0x5d, 0x62, 0x85, 0xdd, - 0x92, 0x57, 0x27, 0x81, 0x10, 0xf0, 0x38, 0x31, 0x64, 0x7d, 0xff, 0xf7, 0x23, - 0xe5, 0xe4, 0x3d, 0xc1, 0x48, 0xcb, 0x64, 0x97, 0x0e, 0x32, 0x23, 0xfc, 0xb7, - 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, - 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, 0x26, - 0xe0, 0x96, 0xd8, 0xb1, 0x01, 0xf5, 0xcd, 0xe5, 0xf0, 0x46, 0x80, 0xbb, 0xfe, - 0xd8, 0x7f, 0x6c, 0xf4, 0x29, 0xfb, 0x27, 0xad, 0x6b, 0xab, 0xe7, 0x91, 0x76, - 0x66, 0x11, 0xcf, 0x5b, 0xc2, 0x0e, 0x48, 0xbe, 0xf1, 0x19, 0x25, 0x9b, 0x9b, - 0x8a, 0x0e, 0x39, 0xc3, 0xdf, 0x28, 0xcb, 0x95, 0x82, 0xea, 0x33, 0x86, 0x01, - 0xcd, 0xc4, 0x81, 0xb3, 0x2f, 0xb8, 0x2a, 0xde, 0xeb, 0xb3, 0xda, 0xde, 0x25, - 0xd1, 0xa3, 0xdf, 0x00, 0xc4, 0xe1, 0x9b, 0x81, 0x75, 0xc8, 0xb6, 0xc5, 0x91, - 0x48, 0x21, 0xc3, 0x9b, 0xe1, 0x9b, 0x8e, 0xc8, 0xa7, 0xc7, 0x84, 0xc6, 0x8d, - 0x39, 0xc5, 0x9d, 0xc8, 0xba, 0xc4, 0x90, 0xc7, 0xad, 0xe2, 0xb1, 0xbd, 0xe2, - 0xb1, 0xbe, 0xc2, 0xa5, 0xc4, 0x8b, 0xe1, 0x9a, 0xb6, 0xe1, 0x9a, 0xac, 0xc5, - 0x95, 0xe1, 0x9b, 0xa6, 0x7d, 0xc7, 0xb8, 0xc6, 0x9d, 0xc2, 0xa4, 0xc6, 0xb8, - 0xc7, 0xa9, 0xc5, 0x86, 0xc8, 0x8d, 0xc2, 0xa5, 0xc4, 0x8f, 0xce, 0x86, 0xc5, - 0xb0, 0xc2, 0xa8, 0x51, 0xe1, 0x9b, 0x90, 0xc4, 0x93, 0xc6, 0xb7, 0xc8, 0xb8, - 0xc4, 0x8c, 0xe2, 0xb1, 0xa5, 0xe1, 0x9b, 0x83, 0xc9, 0x89, 0x40, 0xce, 0x84, - 0xc6, 0xb8, 0xc5, 0x80, 0xe1, 0x9b, 0x9e, 0xc7, 0xbe, 0xc5, 0xbd, 0xc6, 0xb3, - 0xe1, 0x9b, 0x91, 0xc3, 0x80, 0x7e, 0xc9, 0x86, 0xe2, 0xb1, 0xaf, 0xc4, 0x91, - 0xc2, 0xbd, 0xe1, 0x9b, 0xa4, 0xc5, 0x98, 0xc6, 0x85, 0xc4, 0x8e, 0xc7, 0x8a, - 0xc8, 0xb5, 0xc4, 0xaa, 0xc3, 0x93, 0xe1, 0x9b, 0x99, 0xc4, 0x9c, 0xe2, 0xb1, - 0xac, 0x2f, 0xc4, 0x87, 0xc3, 0xb3, 0x34, 0xc6, 0x9a, 0xe1, 0x9a, 0xb1, 0xcd, - 0xb0, 0xe1, 0x9b, 0xaf, 0xc5, 0xbf, 0xc7, 0x85, 0xc7, 0x88, 0xe2, 0xb1, 0xb2, - 0xc7, 0x94, 0xc5, 0xae, 0xc3, 0x87, 0xc8, 0xba, 0x5a, 0xc4, 0x83, 0xc7, 0xb7, - 0xe1, 0x9b, 0x96, 0xc7, 0x9d, 0x5a, 0x01, 0x14, 0x02, 0xa3, 0x2d, 0x23, 0x22, - 0x5f, 0x8e, 0x47, 0xe7, 0x42, 0xe4, 0x5b, 0x77, 0xba, 0x92, 0xf7, 0x7c, 0xdd, - 0x2a, 0xae, 0x00, 0x50, 0x60, 0x8d, 0x0a, 0x06, 0xde, 0x70, 0x44, 0xe3, 0x94, - 0xac, 0xf8, 0x01, 0xb6, 0xee, 0x94, 0xa8, 0x5d, 0x32, 0x19, 0x34, 0x60, 0x4e, - 0x47, 0x99, 0x70, 0x16, 0xb3, 0x04, 0xbd, 0xa0, 0x65, 0x5f, 0x62, 0x60, 0xae, - 0x11, 0xd2, 0x50, 0xdc, 0xa8, 0x87, 0x71, 0xd9, 0x0e, 0x71, 0xbd, 0xc0, 0xff, - 0xf7, 0x78, 0xca, 0x9b, 0x89, 0x02, 0x6d, 0x38, 0x8a, 0x0e, 0x77, 0x1d, 0xd2, - 0xcf, 0x77, 0x73, 0xb6, 0xba, 0x2a, 0x5f, 0x66, 0x48, 0x47, 0xbf, 0x70, 0x7f, - 0x2f, 0xc1, 0x0c, 0x98, 0xf2, 0xf0, 0x06, 0xec, 0x22, 0xcc, 0xb5, 0xa8, 0xc8, - 0xb7, 0xc4, 0x0c, 0x7c, 0x2d, 0x49, 0xa6, 0x63, 0x9b, 0x9f, 0x2c, 0xe3, 0x3c, - 0x25, 0xc0, 0x4b, 0xc4, 0x61, 0xe7, 0x44, 0xdf, 0xa5, 0x36, 0xb0, 0x0d, 0x94, - 0xba, 0xdd, 0xf4, 0xf4, 0xd1, 0x40, 0x44, 0xc6, 0x95, 0xa3, 0x38, 0x01, 0xfd, - 0x48, 0x01, 0xe1, 0x9b, 0xad, 0x5f, 0x48, 0xc6, 0x89, 0xc3, 0x9a, 0xe1, 0x9b, - 0xaf, 0xe2, 0xb1, 0xb1, 0xc6, 0x8e, 0x48, 0xc7, 0x83, 0xc2, 0xb9, 0xc5, 0x84, - 0x23, 0xc7, 0x85, 0xc8, 0xa5, 0xc5, 0xb9, 0xe1, 0x9a, 0xa2, 0xcd, 0xb3, 0xe1, - 0x9b, 0xad, 0xc3, 0xad, 0xe2, 0xb1, 0xae, 0xc5, 0x85, 0xc5, 0x82, 0xe1, 0x9a, - 0xb0, 0x23, 0xc7, 0x9e, 0xe2, 0xb1, 0xa4, 0xcd, 0xbe, 0xe1, 0x9b, 0x88, 0xc7, - 0xa7, 0xe1, 0x9b, 0xb0, 0x7d, 0xc6, 0xb5, 0xc5, 0xbc, 0x39, 0x67, 0xc9, 0x82, - 0xc6, 0x8c, 0xe2, 0xb1, 0xba, 0xc3, 0xae, 0xc6, 0xa2, 0xc4, 0xb4, 0x44, 0x65, - 0xcd, 0xbd, 0xc4, 0x87, 0xe1, 0x9b, 0x8b, 0xcd, 0xbb, 0x59, 0x3e, 0x61, 0xc7, - 0xb3, 0x74, 0x37, 0xc8, 0xb8, 0xc3, 0xa4, 0xc7, 0x81, 0xc3, 0xb1, 0xc8, 0xaa, - 0xc7, 0xbc, 0xc2, 0xb2, 0xc2, 0xbe, 0xc3, 0xab, 0xc5, 0xb5, 0xc6, 0x8f, 0xe1, - 0x9a, 0xa0, 0xc8, 0xa0, 0xc7, 0xae, 0xc3, 0x94, 0xe1, 0x9b, 0x85, 0xe1, 0x9b, - 0xad, 0xe2, 0xb1, 0xbc, 0xc6, 0xa4, 0xe1, 0x9a, 0xa1, 0xc5, 0xae, 0xc5, 0xa4, - 0xe2, 0xb1, 0xa7, 0xe1, 0x9a, 0xb5, 0xc4, 0xa1, 0x4c, 0xc7, 0xbe, 0xc5, 0xb8, - 0xe1, 0x9a, 0xbb, 0xc5, 0x87, 0xc4, 0x80, 0xe1, 0x9a, 0xa5, 0xc8, 0xa1, 0xc8, - 0x87, 0x7d, 0xc6, 0xbb, 0xe1, 0x9b, 0xa3, 0xc5, 0x85, 0xc2, 0xb0, 0xc7, 0xb5, - 0xc2, 0xab, 0xc2, 0xb2, 0xc6, 0x87, 0xc5, 0xb4, 0x63, 0xc9, 0x86, 0xe1, 0x9a, - 0xbc, 0xe1, 0x9b, 0x9d, 0xe1, 0x9a, 0xab, 0xc4, 0x9e, 0xc2, 0xa3, 0xc8, 0x9f, - 0xc6, 0xb9, 0xc7, 0x99, 0xc7, 0xa7, 0xc5, 0xac, 0xcd, 0xb4, 0xc6, 0x98, 0xc6, - 0x85, 0xc6, 0xa7, 0xc6, 0xbc, 0xc8, 0xbd, 0xc6, 0xa9, 0xc5, 0xa4, 0xc4, 0x8a, - 0x25, 0xce, 0x8c, 0xe1, 0x9b, 0x9c, 0xc4, 0xa9, 0xc4, 0x94, 0xe2, 0xb1, 0xaa, - 0xe1, 0x9b, 0x81, 0xc7, 0x9a, 0xc6, 0xa4, 0xc8, 0xbb, 0xe1, 0x9b, 0x97, 0xc5, - 0xa8, 0xc3, 0x87, 0xe2, 0xb1, 0xa5, 0x79, 0xe1, 0x9a, 0xa0, 0xc6, 0xbe, 0x6f, - 0xc3, 0xbb, 0xe2, 0xb1, 0xb6, 0x5b, 0xc3, 0xa1, 0xc6, 0x94, 0xce, 0x8c, 0xe1, - 0x9b, 0x94, 0xc3, 0xaf, 0xce, 0x87, 0xc5, 0xa3, 0xe1, 0x9a, 0xa1, 0x44, 0xe1, - 0x9b, 0x82, 0xc6, 0x86, 0x78, 0x41, 0x4f, 0xc4, 0xa0, 0xc6, 0x92, 0xe1, 0x9a, - 0xa0, 0xc8, 0xae, 0xc7, 0x97, 0x02, 0x57, 0x64, 0x27, 0xb0, 0x8a, 0x45, 0x0b, - 0x7a, 0x98, 0x63, 0x35, 0x00, 0x1e, 0x63, 0x21, 0x7b, 0x81, 0x31, 0x04, 0x2f, - 0x3a, 0xe0, 0x12, 0x19, 0x21, 0x33, 0x60, 0xfe, 0x9e, 0x20, 0x2c, 0x9e, 0x9c, - 0x9f, 0x64, 0xbb, 0x3a, 0x11, 0xcc, 0xac, 0x23, 0x04, 0x88, 0x6a, 0xe1, 0x01, - 0x0b, 0x0d, 0xfd, 0x9c, 0xb2, 0x29, 0x42, 0x34, 0x86, 0xf4, 0x99, 0x35, 0x9f, - 0x32, 0x0a, 0x30, 0xff, 0x48, 0x8f, 0x90, 0x41, 0x7f, 0xef, 0xc7, 0xcb, 0x9f, - 0xbc, 0x77, 0x7c, 0xbc, 0xf3, 0x8d, 0x79, 0x14, 0x27, 0xa0, 0x0d, 0x54, 0x3e, - 0x45, 0xf9, 0x97, 0x49, 0xcc, 0x4d, 0x61, 0xf2, 0xe8, 0xaa, 0xbf, 0xe9, 0x8b, - 0xd9, 0x05, 0xfa, 0x39, 0x95, 0x1b, 0x33, 0xea, 0x76, 0x9c, 0x45, 0xab, 0x95, - 0x31, 0xc5, 0x72, 0x09, 0x86, 0x2a, 0xd1, 0x2f, 0xd7, 0x6b, 0xa4, 0x80, 0x7e, - 0x65, 0x41, 0x7b, 0x6c, 0xd1, 0x2f, 0xa8, 0xec, 0x91, 0x6f, 0x01, 0x3e, 0xbb, - 0x87, 0x06, 0xa9, 0x6e, 0xff, 0xed, 0xa0, 0x6c, 0x4b, 0xe2, 0x13, 0x1c, 0x18, - 0x38, 0xff, 0x75, 0x7d, 0x92, 0x6c, 0xb3, 0x5f, 0xed, 0x6a, 0xb4, 0x95, 0x95, - 0x79, 0x54, 0x80, 0x21, 0xc0, 0xb1, 0xc0, 0x83, 0x22, 0xb1, 0xad, 0xf2, 0x7c, - 0x87, 0xad, 0x45, 0x09, 0x09, 0xd8, 0x92, 0x4c, 0x9c, 0x07, 0x10, 0xd7, 0x9a, - 0x19, 0x0f, 0x28, 0x41, 0xcf, 0x3a, 0x1c, 0x6a, 0xb5, 0x29, 0x42, 0x34, 0x86, - 0xf4, 0x99, 0x35, 0x9f, 0x32, 0x0a, 0x30, 0xff, 0x48, 0x8f, 0x90, 0x41, 0x7f, - 0xef, 0xc7, 0xcb, 0x9f, 0xbc, 0x77, 0x7c, 0xbc, 0xf3, 0x8d, 0x79, 0x14, 0x27, - 0xa0, 0x0d, 0xe2, 0xd0, 0x91, 0x30, 0xf6, 0x35, 0x11, 0xda, 0x54, 0x83, 0x2d, - 0xe9, 0x13, 0x6b, 0x39, 0xf4, 0x59, 0x9f, 0x5a, 0xa5, 0xdf, 0xbb, 0x45, 0xda, - 0x60, 0xcd, 0xce, 0xab, 0x7e, 0xef, 0xde, 0x09, 0xbe, 0x63, 0xf3, 0xf7, 0xc0, - 0xd2, 0x32, 0x48, 0x47, 0xcc, 0xe1, 0x40, 0x5d, 0xef, 0x7c, 0x46, 0x9b, 0x0e, - 0x27, 0x24, 0x94, 0xe5, 0xdf, 0x54, 0xf5, 0x68, 0x65, 0x6c, 0xb9, 0xc8, 0x81, - 0x8d, 0x00, 0xcc, 0x2f, 0x77, 0xf8, 0xf4, 0x9b, 0x12, 0xea, 0x88, 0xf4, 0xed, - 0xe1, 0x8a, 0x4a, 0x0f, 0x87, 0x83, 0xe2, 0x62, 0x2f, 0x87, 0x92, 0x28, 0x58, - 0xfe, 0x1d, 0x2f, 0x05, 0xee, 0x30, 0xf3, 0x34, 0xb7, 0x2b, 0x8b, 0xc3, 0x4d, - 0xb7, 0xbb, 0x31, 0x12, 0x48, 0x7e, 0x74, 0x6e, 0xef, 0xe4, 0xe8, 0x08, 0xbb, - 0xb2, 0x87, 0xd9, 0x9b, 0xf0, 0x7d, 0x00, 0xda, 0xbe, 0xde, 0xdc, 0x5e, 0x5f, - 0x07, 0x4f, 0xfe, 0xae, 0x0c, 0xba, 0x7d, 0xa3, 0xa5, 0x16, 0xc1, 0x73, 0xbe, - 0x1c, 0x51, 0x33, 0x23, 0xe1, 0x19, 0xf6, 0x35, 0xe8, 0x20, 0x9a, 0x07, 0x4b, - 0x21, 0x6b, 0x70, 0x23, 0xfa, 0xdc, 0x2d, - ], - txid: [ - 0x08, 0x71, 0xcd, 0x94, 0x4b, 0x8e, 0x88, 0x83, 0x7c, 0xcc, 0x8b, 0xdf, 0xef, - 0xbd, 0x20, 0x55, 0x76, 0xce, 0xc7, 0x4d, 0xa3, 0xc9, 0x8d, 0xe4, 0x4f, 0xed, - 0xd9, 0xe2, 0xe4, 0x08, 0x8c, 0xce, - ], - auth_digest: [ - 0x22, 0x22, 0x94, 0xe9, 0xcf, 0xb9, 0xc4, 0xa5, 0xdb, 0x63, 0xc7, 0xfb, 0x2b, - 0xf8, 0x3d, 0x74, 0x8d, 0xdb, 0x6e, 0x7c, 0xcf, 0xd0, 0x44, 0xf1, 0xa7, 0x8e, - 0x50, 0x24, 0x21, 0x02, 0xcb, 0x82, - ], - amounts: vec![985817606177519, 110857430570820], - script_pubkeys: vec![ - vec![0xac, 0xac, 0x00, 0x53, 0x65, 0x51, 0x53], - vec![0x52, 0x63, 0xac, 0x00, 0x53], - ], - transparent_input: Some(1), - sighash_shielded: [ - 0x4f, 0x60, 0xd5, 0x73, 0x97, 0x78, 0xf2, 0x90, 0xdb, 0x40, 0x03, 0x2c, 0x70, - 0x71, 0x2c, 0x64, 0x71, 0x8f, 0x6e, 0x1d, 0x43, 0x23, 0x7a, 0x9d, 0xdd, 0x00, - 0xd7, 0x49, 0x24, 0x8b, 0x66, 0x97, - ], - sighash_all: Some([ - 0xac, 0x1c, 0xf6, 0x49, 0x10, 0x1d, 0x54, 0x48, 0xcd, 0x57, 0xb4, 0xd0, 0xd6, - 0x56, 0x5d, 0xc3, 0x45, 0x3e, 0x57, 0x09, 0x31, 0x85, 0x32, 0xf1, 0xb2, 0x40, - 0xb5, 0x8c, 0x90, 0x01, 0xfd, 0x81, - ]), - sighash_none: Some([ - 0xbd, 0xdd, 0xf7, 0x42, 0x8a, 0xf7, 0xad, 0xab, 0xe2, 0xf6, 0x80, 0x83, 0x2e, - 0xa6, 0x65, 0x04, 0x9b, 0x42, 0xec, 0xc3, 0x47, 0x5e, 0x9a, 0xd2, 0xd9, 0x85, - 0x1b, 0x03, 0x7d, 0x1a, 0x0a, 0xba, - ]), - sighash_single: None, - sighash_all_anyone: Some([ - 0xe0, 0x86, 0xa3, 0xd6, 0xf8, 0x16, 0xe5, 0x1e, 0xf3, 0xeb, 0x6a, 0xa3, 0x92, - 0x5d, 0xdb, 0xb4, 0xc9, 0x64, 0xa3, 0x8a, 0x05, 0x07, 0xa9, 0x72, 0x88, 0xe5, - 0xb5, 0x7c, 0x4a, 0xb0, 0x34, 0x02, - ]), - sighash_none_anyone: Some([ - 0x26, 0x2f, 0xa5, 0x61, 0x86, 0x1d, 0x01, 0x29, 0xe9, 0x1b, 0x87, 0x6f, 0x69, - 0x14, 0x1e, 0xd5, 0xc6, 0x79, 0xa6, 0x82, 0x1b, 0x93, 0x0d, 0xdf, 0x4e, 0xda, - 0x51, 0x0f, 0x91, 0x67, 0x79, 0xac, - ]), - sighash_single_anyone: None, - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xc9, - 0xac, 0xcb, 0x78, 0x2e, 0x6f, 0xe2, 0x05, 0x01, 0x7f, 0x0a, 0x95, 0x6f, 0x5b, - 0x85, 0x50, 0x99, 0x60, 0x28, 0x5c, 0x22, 0x62, 0x7c, 0x59, 0x48, 0x3a, 0x5a, - 0x4c, 0x28, 0xcc, 0xe4, 0xb1, 0x56, 0xe5, 0x51, 0x40, 0x6a, 0x7e, 0xe8, 0x35, - 0x56, 0x56, 0xa2, 0x1e, 0x43, 0x01, 0xac, 0xe1, 0x29, 0xfd, 0xad, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x3f, 0xce, 0x8a, 0xc7, 0xb5, 0xc7, 0xbd, 0xc2, 0xae, 0x66, - 0xc6, 0xbd, 0xc8, 0xa0, 0xc7, 0x85, 0x4f, 0xe1, 0x9b, 0xa4, 0xc3, 0xb4, 0xe1, - 0x9b, 0x92, 0xc6, 0xa6, 0xc6, 0x95, 0xc5, 0x97, 0xc6, 0x97, 0xcd, 0xb2, 0xc6, - 0x81, 0xc8, 0xaa, 0xe1, 0x9b, 0x8a, 0xc7, 0xa0, 0xc4, 0xaa, 0xe1, 0x9b, 0xa9, - 0x79, 0xe2, 0xb1, 0xb2, 0xc8, 0xba, 0xc3, 0x96, 0xc8, 0x85, 0xe2, 0xb1, 0xb1, - 0xc5, 0x82, 0x04, 0x0d, 0xa2, 0x11, 0x23, 0xda, 0x72, 0xa0, 0x9c, 0xbe, 0x2f, - 0x4b, 0xe0, 0x37, 0xc3, 0xd9, 0x1a, 0x34, 0xe8, 0x75, 0xb7, 0xe2, 0xf1, 0x6a, - 0x39, 0x04, 0x54, 0xea, 0x93, 0x37, 0x1d, 0xde, 0x4e, 0x4f, 0x93, 0x30, 0xce, - 0x74, 0xbc, 0x73, 0xb1, 0xad, 0x1a, 0xa4, 0x36, 0xa8, 0xb7, 0x78, 0xd9, 0x7c, - 0xe4, 0x23, 0x62, 0xab, 0xef, 0x82, 0x8e, 0x28, 0x15, 0xb7, 0xe8, 0x87, 0x0b, - 0xd9, 0x7d, 0x69, 0x45, 0xfe, 0x43, 0xa6, 0x16, 0x4f, 0x61, 0x8a, 0x8f, 0x1b, - 0xce, 0xee, 0x48, 0x5b, 0xe5, 0x94, 0x89, 0x10, 0x01, 0x3d, 0x64, 0xb3, 0x2c, - 0xd1, 0x72, 0xef, 0xa5, 0x51, 0xbf, 0x7f, 0x36, 0x8f, 0x04, 0xbd, 0xae, 0xc6, - 0x09, 0x1a, 0x30, 0x04, 0xa7, 0x57, 0x59, 0x8b, 0x80, 0x1d, 0xcf, 0x67, 0x5c, - 0x38, 0x3e, 0x43, 0xa5, 0x3a, 0xe8, 0xb2, 0x54, 0xd3, 0x33, 0xbc, 0xda, 0x20, - 0xd4, 0x81, 0x7d, 0x34, 0x77, 0xab, 0xfb, 0xa2, 0x5b, 0xb8, 0x3d, 0xf5, 0x94, - 0x9c, 0x12, 0x6f, 0x14, 0x9b, 0x1d, 0x99, 0x4a, 0x19, 0x40, 0x6b, 0xca, 0x3f, - 0xba, 0x8a, 0x1a, 0x7b, 0x0f, 0xa2, 0x20, 0xfb, 0xf8, 0xc5, 0xe5, 0x3a, 0xf7, - 0xcb, 0xa4, 0x32, 0x35, 0x95, 0x78, 0xd7, 0x0d, 0x60, 0xce, 0xc3, 0xed, 0x9b, - 0xf0, 0x15, 0x85, 0x43, 0x76, 0x9e, 0x95, 0x53, 0x9f, 0x41, 0x2e, 0xca, 0x96, - 0xb2, 0x81, 0x4f, 0x6b, 0x26, 0xc3, 0x62, 0xab, 0xef, 0x82, 0x8e, 0x28, 0x15, - 0xb7, 0xe8, 0x87, 0x0b, 0xd9, 0x7d, 0x69, 0x45, 0xfe, 0x43, 0xa6, 0x16, 0x4f, - 0x61, 0x8a, 0x8f, 0x1b, 0xce, 0xee, 0x48, 0x5b, 0xe5, 0x94, 0x89, 0x10, 0xf4, - 0x4a, 0x21, 0x26, 0x6c, 0xfd, 0x84, 0x16, 0x33, 0x32, 0x7d, 0xee, 0x6c, 0xf8, - 0x10, 0xfb, 0xf7, 0x39, 0x3e, 0x31, 0x7d, 0x9e, 0x53, 0xd1, 0xbe, 0x1d, 0x5a, - 0xe7, 0x83, 0x9b, 0x66, 0x39, 0x43, 0xb9, 0xed, 0x18, 0xf2, 0xc5, 0x30, 0xe9, - 0x75, 0x42, 0x23, 0x32, 0xc3, 0x43, 0x9c, 0xce, 0x49, 0xa2, 0x9f, 0x2a, 0x33, - 0x6a, 0x48, 0x51, 0x26, 0x3c, 0x5e, 0x9b, 0xd1, 0x3d, 0x73, 0x11, 0x65, 0xcc, - 0xa7, 0x5c, 0xe3, 0xff, 0x66, 0xe0, 0xa5, 0x23, 0x46, 0x4c, 0xee, 0x45, 0x8a, - 0xf5, 0xbf, 0x43, 0xe5, 0x9d, 0x93, 0xd9, 0x53, 0xa3, 0xe6, 0x76, 0x2b, 0xd2, - 0x62, 0x0e, 0xa9, 0x4a, 0x20, 0x74, 0xa5, 0xf0, 0xfe, 0x44, 0xbf, 0x57, 0x73, - 0x6c, 0x8d, 0x55, 0x2f, 0xb3, 0x49, 0xe3, 0x5c, 0x15, 0xc5, 0x62, 0xab, 0xef, - 0x82, 0x8e, 0x28, 0x15, 0xb7, 0xe8, 0x87, 0x0b, 0xd9, 0x7d, 0x69, 0x45, 0xfe, - 0x43, 0xa6, 0x16, 0x4f, 0x61, 0x8a, 0x8f, 0x1b, 0xce, 0xee, 0x48, 0x5b, 0xe5, - 0x94, 0x89, 0x10, 0x2f, 0x29, 0x00, 0xd9, 0x9d, 0x31, 0x2d, 0x7b, 0x70, 0x50, - 0x8c, 0xf1, 0x76, 0x06, 0x6d, 0x15, 0x4d, 0xbe, 0x96, 0xef, 0x9d, 0x43, 0x67, - 0xe4, 0xc8, 0x40, 0xe4, 0xa1, 0x7b, 0x5e, 0x51, 0x22, 0xe8, 0xeb, 0xe2, 0x15, - 0x8a, 0x3c, 0x5f, 0x4c, 0xba, 0xe2, 0x1e, 0xa3, 0xfa, 0x1a, 0xe6, 0xc2, 0x5a, - 0x94, 0x62, 0xeb, 0xcb, 0xb0, 0xfd, 0x5f, 0x14, 0x55, 0x4b, 0xc9, 0x77, 0x47, - 0xc3, 0x3e, 0xba, 0xaa, 0x64, 0x7f, 0xc7, 0x71, 0xa4, 0xd0, 0xce, 0xea, 0xba, - 0xbd, 0xb4, 0x1c, 0x9f, 0x90, 0x30, 0x8d, 0x5b, 0x8d, 0xdb, 0xee, 0x76, 0xd7, - 0x5a, 0xee, 0x96, 0xbb, 0xb2, 0xae, 0x4c, 0x37, 0x03, 0xa5, 0x72, 0x5c, 0xe5, - 0x1d, 0x9c, 0xaa, 0x11, 0x4f, 0x8a, 0x2f, 0x24, 0xfd, 0x36, 0x44, 0x96, 0xb3, - 0xbe, 0x62, 0xab, 0xef, 0x82, 0x8e, 0x28, 0x15, 0xb7, 0xe8, 0x87, 0x0b, 0xd9, - 0x7d, 0x69, 0x45, 0xfe, 0x43, 0xa6, 0x16, 0x4f, 0x61, 0x8a, 0x8f, 0x1b, 0xce, - 0xee, 0x48, 0x5b, 0xe5, 0x94, 0x89, 0x10, 0xe1, 0xe9, 0xb2, 0x78, 0x29, 0xce, - 0x2a, 0xc5, 0xef, 0xd0, 0xb3, 0x99, 0xa8, 0xb4, 0x48, 0xbe, 0x65, 0x04, 0x29, - 0x4e, 0xe6, 0xb3, 0xc1, 0xc6, 0xa5, 0x34, 0x2d, 0x7c, 0x01, 0xae, 0x9d, 0x0a, - 0xd3, 0x07, 0x0c, 0x2b, 0x1a, 0x91, 0x57, 0x3a, 0xf5, 0xe0, 0xc5, 0xe4, 0xcb, - 0xbf, 0x4a, 0xcd, 0xc6, 0xb5, 0x4c, 0x92, 0x72, 0x20, 0x0d, 0x99, 0x70, 0x25, - 0x0c, 0x17, 0xc1, 0x03, 0x6f, 0x06, 0x00, 0xfd, 0x5d, 0x01, 0xe1, 0x9a, 0xb8, - 0xc6, 0xb3, 0xc4, 0xbd, 0x38, 0xc6, 0x87, 0xcd, 0xbe, 0xe1, 0x9a, 0xa7, 0xe1, - 0x9b, 0xaf, 0xc6, 0xa5, 0xe1, 0x9a, 0xbc, 0xe1, 0x9b, 0x8a, 0xc3, 0x8d, 0xc7, - 0xb0, 0xc7, 0xb9, 0xe1, 0x9b, 0x98, 0xe1, 0x9b, 0xa5, 0xcd, 0xbe, 0xc3, 0xbc, - 0xc6, 0xbf, 0xc3, 0xae, 0xe2, 0xb1, 0xa5, 0xc4, 0xa1, 0xc6, 0xb3, 0xe2, 0xb1, - 0xbe, 0xc5, 0x81, 0xc8, 0x8f, 0xc3, 0x89, 0xe1, 0x9b, 0xa2, 0xc4, 0xbd, 0xc3, - 0xaa, 0xc8, 0xa9, 0xce, 0x88, 0xe2, 0xb1, 0xad, 0xe1, 0x9a, 0xbc, 0x63, 0xc7, - 0x8e, 0xc6, 0x9b, 0xc4, 0xa0, 0x6a, 0xc5, 0x85, 0xc7, 0x8b, 0xc8, 0xaa, 0xc7, - 0xac, 0xc2, 0xb0, 0xc5, 0xb5, 0xc3, 0x97, 0x24, 0xc5, 0xad, 0xc9, 0x8e, 0xc4, - 0x8a, 0xc5, 0x97, 0xc4, 0xa6, 0xe1, 0x9b, 0x87, 0xc7, 0xac, 0xce, 0x89, 0xc5, - 0xba, 0xe2, 0xb1, 0xb6, 0x57, 0xc5, 0x9e, 0xe2, 0xb1, 0xba, 0xc8, 0x81, 0xc6, - 0xa1, 0xc8, 0xaf, 0xc5, 0x82, 0xc5, 0xb5, 0xc5, 0x9a, 0xc3, 0xa9, 0xc6, 0xae, - 0xc8, 0xab, 0xc8, 0x85, 0xe1, 0x9a, 0xb6, 0x69, 0xc9, 0x82, 0xc4, 0xbe, 0xe1, - 0x9b, 0xa6, 0xe2, 0xb1, 0xbb, 0xc4, 0xaa, 0xc6, 0x9b, 0x68, 0xc8, 0xba, 0x44, - 0xc6, 0x9e, 0xc7, 0x96, 0xe1, 0x9a, 0xbc, 0xcd, 0xbd, 0xc6, 0xab, 0xe2, 0xb1, - 0xa1, 0xc5, 0x9f, 0xc4, 0xa3, 0xe1, 0x9a, 0xbb, 0xe1, 0x9b, 0xa9, 0xc6, 0xa4, - 0xe1, 0x9b, 0x91, 0xc5, 0x8e, 0xc3, 0x84, 0xc7, 0xb1, 0x4d, 0x28, 0xe2, 0xb1, - 0xa6, 0xc4, 0x9c, 0xc7, 0x9c, 0xe1, 0x9b, 0x86, 0xc8, 0xb2, 0xc5, 0xa1, 0xc4, - 0xa3, 0xc5, 0x8c, 0xc5, 0x92, 0x3f, 0xc2, 0xae, 0xc3, 0x9b, 0xc4, 0x94, 0xc4, - 0x95, 0xc4, 0xa3, 0xce, 0x85, 0xe1, 0x9a, 0xa6, 0xc8, 0x89, 0xc4, 0x82, 0xc8, - 0x91, 0xe1, 0x9a, 0xa7, 0xc5, 0x8d, 0xe2, 0xb1, 0xa9, 0xc7, 0x88, 0xc6, 0x9f, - 0xc6, 0xbb, 0xe1, 0x9a, 0xbd, 0xc5, 0x94, 0xe1, 0x9a, 0xac, 0xc6, 0x9c, 0xcd, - 0xba, 0x2a, 0xce, 0x88, 0xe2, 0xb1, 0xb5, 0x65, 0xc4, 0x85, 0xc7, 0x82, 0xc7, - 0x95, 0xc6, 0x8a, 0xc6, 0x81, 0xc2, 0xb6, 0xc5, 0xa2, 0xc8, 0xa4, 0xe1, 0x9b, - 0x8f, 0xc3, 0xa3, 0xc8, 0x93, 0xe1, 0x9b, 0x9f, 0xc8, 0x99, 0xc4, 0x86, 0xc3, - 0x9d, 0xe1, 0x9b, 0x9c, 0xc8, 0x88, 0xc7, 0x92, 0xe1, 0x9b, 0x8f, 0xc7, 0x83, - 0xc3, 0xba, 0xc4, 0xaf, 0x43, 0xce, 0x8c, 0xc6, 0xb2, 0xc5, 0x97, 0xc7, 0x95, - 0xc3, 0x98, 0xc2, 0xb5, 0xc3, 0xa9, 0x78, 0x5a, 0x00, 0x00, 0x82, 0xe1, 0x9b, - 0x80, 0x60, 0xe1, 0x9b, 0x85, 0xe1, 0x9b, 0x97, 0xc8, 0x99, 0xc5, 0x83, 0xc3, - 0xb9, 0xc8, 0xa9, 0xc8, 0xaa, 0xc4, 0xb0, 0xc3, 0xa6, 0xc3, 0x8e, 0xcd, 0xb6, - 0xc8, 0xb8, 0x7d, 0xc5, 0xb5, 0xe2, 0xb1, 0xbd, 0xc3, 0x96, 0xc6, 0xb5, 0xc4, - 0x93, 0xc9, 0x83, 0xc7, 0x91, 0x45, 0xc7, 0xb0, 0xc7, 0xa6, 0xc5, 0xa3, 0xc8, - 0xb0, 0xc8, 0xbb, 0xe2, 0xb1, 0xa6, 0x23, 0xcd, 0xbb, 0x66, 0xc5, 0xbb, 0xc3, - 0xb9, 0xc4, 0xbe, 0xcd, 0xbe, 0xc4, 0xa3, 0xc7, 0x9f, 0xc7, 0x87, 0xc5, 0x80, - 0xc7, 0xb6, 0x5e, 0xc5, 0x85, 0xc7, 0xa7, 0xc4, 0x97, 0x39, 0xe1, 0x9a, 0xa8, - 0xc3, 0x97, 0xce, 0x8a, 0xc4, 0x8d, 0xc3, 0xa2, 0xc7, 0xad, 0xce, 0x89, 0x2a, - 0xe1, 0x9a, 0xba, 0xc6, 0xbe, 0xc2, 0xa1, 0xc4, 0x80, 0xc9, 0x82, 0xe1, 0x9b, - 0x80, 0xc6, 0x95, 0xc8, 0x93, 0xc7, 0xaa, 0xc7, 0xa7, 0x5a, 0x5a, 0x04, 0x66, - 0x45, 0xd7, 0x19, 0x91, 0x6b, 0xb8, 0xe8, 0xa4, 0xd1, 0x31, 0xcf, 0xbc, 0x01, - 0xb5, 0xe9, 0x7c, 0xab, 0x17, 0x73, 0xf8, 0xf4, 0x6e, 0x66, 0xb1, 0xee, 0xe2, - 0x8f, 0x6c, 0x17, 0x24, 0x82, 0x46, 0x1e, 0x0e, 0x4f, 0x42, 0xd8, 0xe6, 0xf7, - 0xeb, 0xf4, 0x36, 0x6a, 0xbf, 0xe1, 0xea, 0xa8, 0xca, 0x6c, 0xf4, 0x44, 0x74, - 0xa8, 0x00, 0x69, 0xb2, 0xc3, 0x63, 0x6d, 0xc7, 0x85, 0x7a, 0xef, 0xac, 0xd0, - 0xb0, 0xbf, 0x82, 0xbc, 0x75, 0xdd, 0x02, 0x0b, 0x45, 0x67, 0xbd, 0x86, 0x10, - 0x81, 0x10, 0x10, 0x98, 0xa0, 0xae, 0x2b, 0xb9, 0x34, 0xc8, 0x2c, 0x41, 0x42, - 0xda, 0x69, 0xd1, 0x2c, 0xa7, 0xde, 0x9a, 0x7d, 0xf7, 0x06, 0x40, 0x0e, 0xc7, - 0x98, 0x78, 0xd8, 0x68, 0xe1, 0x7e, 0x8f, 0x71, 0xea, 0x31, 0x49, 0x5a, 0xf8, - 0x19, 0xa0, 0x16, 0xcc, 0x41, 0x9e, 0x07, 0xc5, 0x01, 0xaa, 0x83, 0x09, 0xb2, - 0xe6, 0xc8, 0x5b, 0x79, 0xb2, 0x76, 0x37, 0x33, 0xa3, 0x7b, 0xbc, 0x04, 0x20, - 0xd4, 0x25, 0x37, 0x0c, 0x81, 0x05, 0xe0, 0xe5, 0x78, 0x53, 0x6e, 0x69, 0x7d, - 0x15, 0x99, 0x83, 0x96, 0xc5, 0xce, 0x78, 0x6f, 0x94, 0xdd, 0x84, 0x20, 0x88, - 0x2c, 0x54, 0xdc, 0x6a, 0xa5, 0xdb, 0xca, 0x99, 0x1c, 0x72, 0x06, 0x48, 0x60, - 0xf6, 0x86, 0xc5, 0x65, 0xde, 0x9a, 0xaa, 0xa3, 0x8a, 0x4b, 0x0f, 0x2f, 0x67, - 0xfc, 0x2b, 0x44, 0x74, 0xa8, 0x00, 0x69, 0xb2, 0xc3, 0x63, 0x6d, 0xc7, 0x85, - 0x7a, 0xef, 0xac, 0xd0, 0xb0, 0xbf, 0x82, 0xbc, 0x75, 0xdd, 0x02, 0x0b, 0x45, - 0x67, 0xbd, 0x86, 0x10, 0x81, 0x10, 0x10, 0x98, 0xfc, 0xe4, 0x10, 0xac, 0x2d, - 0x5d, 0xe6, 0x09, 0x58, 0x61, 0xc1, 0x11, 0xd7, 0xfe, 0xb3, 0xe6, 0xbb, 0x4f, - 0xbb, 0x5a, 0x54, 0x95, 0x54, 0x95, 0x97, 0x27, 0x98, 0x35, 0x0a, 0x25, 0x3f, - 0x05, 0xf6, 0x6c, 0x2e, 0xcf, 0xcb, 0xc0, 0xed, 0x43, 0xf5, 0xec, 0x2e, 0x6d, - 0x8d, 0xba, 0x15, 0xa5, 0x12, 0x54, 0xd9, 0x7b, 0x18, 0x21, 0x10, 0x7c, 0x07, - 0xdd, 0x9a, 0x16, 0xef, 0x84, 0x06, 0xf9, 0xc8, 0xa0, 0x0a, 0x6d, 0x08, 0xf4, - 0x1a, 0x05, 0x3d, 0x62, 0x11, 0x51, 0xfa, 0x54, 0x52, 0x73, 0x0e, 0x77, 0x40, - 0xab, 0xa4, 0x96, 0x71, 0xbd, 0x93, 0x71, 0x97, 0x56, 0x7b, 0xb1, 0x69, 0xec, - 0xd6, 0x8b, 0x13, 0x1c, 0x2a, 0x0e, 0x53, 0x4e, 0x94, 0x30, 0xa9, 0x27, 0x80, - 0xa2, 0x94, 0x10, 0x72, 0xe9, 0x51, 0x44, 0x74, 0xa8, 0x00, 0x69, 0xb2, 0xc3, - 0x63, 0x6d, 0xc7, 0x85, 0x7a, 0xef, 0xac, 0xd0, 0xb0, 0xbf, 0x82, 0xbc, 0x75, - 0xdd, 0x02, 0x0b, 0x45, 0x67, 0xbd, 0x86, 0x10, 0x81, 0x10, 0x10, 0x98, 0xd8, - 0x47, 0xcc, 0x54, 0xa2, 0x27, 0x65, 0xa4, 0xc3, 0x34, 0x75, 0xb5, 0x79, 0x1e, - 0x9a, 0xf3, 0x27, 0x1f, 0xc8, 0xd9, 0x35, 0x06, 0x67, 0x09, 0x0d, 0x81, 0x84, - 0xec, 0x50, 0x52, 0x2d, 0x00, 0x4f, 0x23, 0xc4, 0xfb, 0x44, 0xff, 0xa4, 0x81, - 0xbc, 0x92, 0xae, 0x40, 0x8d, 0x1b, 0x9f, 0x2b, 0x13, 0x19, 0x04, 0xf9, 0x70, - 0x5c, 0x59, 0xe2, 0xf4, 0xbd, 0xe7, 0xa3, 0xb2, 0xc0, 0x85, 0xd9, 0x66, 0xff, - 0xfa, 0x02, 0xc6, 0xc0, 0x1a, 0x49, 0x08, 0x88, 0x6e, 0x8f, 0x84, 0x42, 0xcb, - 0x8f, 0x0d, 0xae, 0x45, 0xc8, 0xeb, 0x45, 0xff, 0x6c, 0x8e, 0x72, 0x82, 0x66, - 0xd5, 0x6b, 0xb5, 0x6f, 0xaf, 0x69, 0xbb, 0xfd, 0xf0, 0xb7, 0xe5, 0x6c, 0x87, - 0x2d, 0x13, 0x40, 0x65, 0x7f, 0xe3, 0x29, 0x14, 0x10, 0x3b, 0x44, 0x74, 0xa8, - 0x00, 0x69, 0xb2, 0xc3, 0x63, 0x6d, 0xc7, 0x85, 0x7a, 0xef, 0xac, 0xd0, 0xb0, - 0xbf, 0x82, 0xbc, 0x75, 0xdd, 0x02, 0x0b, 0x45, 0x67, 0xbd, 0x86, 0x10, 0x81, - 0x10, 0x10, 0x98, 0x75, 0x93, 0x15, 0x9a, 0xe3, 0x50, 0x50, 0xb0, 0x4c, 0x9e, - 0x6b, 0x86, 0xbc, 0x43, 0x2d, 0xc8, 0xb0, 0x48, 0xc7, 0x3c, 0x00, 0x18, 0xca, - 0x5b, 0x69, 0x41, 0x12, 0x97, 0x73, 0x2a, 0x4e, 0x1a, 0xa9, 0x9a, 0x92, 0x8c, - 0x71, 0xe7, 0xa2, 0x4f, 0xd2, 0x77, 0x85, 0x6a, 0xa4, 0x25, 0x01, 0xe5, 0x1b, - 0x01, 0x2a, 0xea, 0x94, 0x46, 0xa2, 0x10, 0x4e, 0x93, 0xf8, 0x15, 0xa0, 0xb3, - 0xa2, 0x9b, 0x01, 0x9c, 0xb8, 0xe0, 0xfd, 0x45, 0x2d, 0x65, 0x46, 0xf1, 0xd7, - 0xd3, 0x51, 0xdc, 0x1a, 0xe2, 0x30, 0xa2, 0x75, 0xe4, 0x0f, 0xe4, 0x07, 0x70, - 0xd0, 0xef, 0xe9, 0x59, 0xde, 0xf1, 0x8d, 0x8c, 0xf8, 0x83, 0x14, 0xf3, 0xd8, - 0xbe, 0x2b, 0x98, 0x23, 0xd3, 0x42, 0xf4, 0x62, 0x13, 0xe9, 0x42, 0xa7, 0xe1, - 0x9a, 0x46, 0xe9, 0x70, 0xb5, 0xc5, 0x06, 0x70, 0x84, 0x30, 0x31, 0x7b, 0x1b, - 0xb3, 0xb3, 0x5d, 0xf6, 0x8a, 0xe3, 0x3a, 0x49, 0x26, 0xa0, 0x3e, 0x6b, 0xfe, - 0xb5, 0x51, 0x04, 0x16, 0xfc, 0xbb, 0x05, 0x24, 0xc9, 0xca, 0x50, 0x74, 0x15, - 0x6c, 0xc5, 0xa5, 0xd6, 0xfe, 0x1c, 0x99, 0x5e, - ], - txid: [ - 0xd1, 0xb3, 0xb7, 0xe0, 0x77, 0xb0, 0xcf, 0xf3, 0x50, 0x94, 0x83, 0xf1, 0xd7, - 0xae, 0xd7, 0xf9, 0x34, 0x31, 0xb3, 0xeb, 0x8c, 0x3e, 0xef, 0xe6, 0xd4, 0x7f, - 0x42, 0x2a, 0x77, 0xcf, 0x36, 0x7f, - ], - auth_digest: [ - 0xf5, 0x38, 0x48, 0x7b, 0xf6, 0x87, 0x6a, 0x5b, 0x7b, 0xb1, 0x8f, 0x4c, 0x27, - 0x28, 0xbe, 0x79, 0x96, 0xa8, 0x3c, 0xc1, 0xc8, 0xf2, 0x2c, 0xfe, 0x27, 0xd0, - 0x18, 0xd1, 0x47, 0x98, 0xe5, 0x84, - ], - amounts: vec![500219351793257], - script_pubkeys: vec![vec![0x00, 0x52, 0x63, 0x00]], - transparent_input: Some(0), - sighash_shielded: [ - 0x82, 0x5f, 0x0d, 0xec, 0xda, 0x05, 0x5c, 0xe8, 0xa5, 0x66, 0x23, 0x17, 0x5d, - 0x11, 0x42, 0x25, 0xe3, 0x9c, 0x02, 0x08, 0x41, 0x7e, 0x17, 0xe9, 0x3a, 0x7b, - 0x45, 0xdf, 0xf7, 0xf0, 0x4a, 0x50, - ], - sighash_all: Some([ - 0xc8, 0xec, 0x5d, 0x14, 0x73, 0xa7, 0x49, 0xe2, 0x8f, 0x97, 0x1d, 0x24, 0x89, - 0xef, 0xe0, 0x14, 0x26, 0x2a, 0x23, 0x2e, 0x59, 0x67, 0x44, 0x45, 0x0e, 0x5d, - 0xd6, 0x6d, 0x23, 0x77, 0x1b, 0xc9, - ]), - sighash_none: Some([ - 0x1a, 0x14, 0xd6, 0x4d, 0x15, 0xc1, 0x01, 0xe5, 0xb6, 0x08, 0x43, 0x0a, 0x35, - 0x30, 0xde, 0x70, 0xc7, 0xef, 0xa3, 0x16, 0xdc, 0x17, 0x45, 0xd2, 0xba, 0x16, - 0x5e, 0xba, 0x45, 0xbf, 0xec, 0xc3, - ]), - sighash_single: None, - sighash_all_anyone: Some([ - 0x98, 0x7a, 0xfb, 0xff, 0x54, 0x44, 0x88, 0xa7, 0xf5, 0x1e, 0x89, 0x79, 0xee, - 0x12, 0xac, 0x09, 0x41, 0xb2, 0x8c, 0x57, 0x8f, 0xe4, 0x4f, 0xe9, 0x7a, 0x6b, - 0x49, 0x38, 0xd2, 0x7e, 0x43, 0x75, - ]), - sighash_none_anyone: Some([ - 0x24, 0xf6, 0xed, 0xef, 0x55, 0x42, 0x1c, 0x31, 0x65, 0xf6, 0xc8, 0x7b, 0xcd, - 0xd4, 0x79, 0xc7, 0x27, 0x72, 0xb9, 0xed, 0x61, 0x06, 0x1a, 0x80, 0x74, 0x2a, - 0x33, 0x88, 0x1e, 0x9d, 0x36, 0xff, - ]), - sighash_single_anyone: None, - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xf0, - 0x4a, 0x05, 0x10, 0x57, 0xec, 0x2a, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x57, 0xec, 0x2a, 0x14, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x64, 0x1a, 0xd2, 0xe9, 0x77, 0x84, - 0xcb, 0x21, 0x35, 0xd5, 0x7e, 0x43, 0xb0, 0x3a, 0x6c, 0x97, 0xe3, 0x23, 0xd7, - 0x0b, 0x43, 0xd8, 0x0f, 0xa1, 0x81, 0x0d, 0xac, 0x0e, 0xba, 0x15, 0x3f, 0xa3, - 0x8b, 0xff, 0x6a, 0x37, 0x81, 0xee, 0x09, 0x95, 0x90, 0x71, 0x77, 0xdb, 0x70, - 0x27, 0x4e, 0x00, 0x45, 0xd4, 0xc2, 0xdc, 0xf0, 0x2d, 0x76, 0x40, 0xff, 0xcc, - 0x5a, 0x6a, 0xc3, 0xa8, 0x7f, 0x1c, 0xea, 0x29, 0x54, 0x8e, 0xa1, 0x2b, 0x93, - 0x79, 0x1d, 0x02, 0xe3, 0x6a, 0x35, 0x6b, 0x92, 0x9c, 0xcd, 0xfc, 0x83, 0x00, - 0xf3, 0x78, 0xdf, 0x32, 0x49, 0x1c, 0x45, 0xf3, 0xb9, 0x5c, 0xe7, 0x23, 0x2c, - 0xbc, 0xb6, 0xb5, 0x8c, 0x1b, 0xa7, 0xed, 0x5e, 0xac, 0xfa, 0x76, 0x41, 0x4a, - 0x41, 0xad, 0x4a, 0x44, 0xf7, 0x1f, 0x1b, 0x58, 0x0d, 0x34, 0xc3, 0xa9, 0x52, - 0x92, 0x0b, 0x25, 0x4a, 0x14, 0x4f, 0x88, 0x54, 0x9e, 0x58, 0xb8, 0x8e, 0x92, - 0x80, 0x15, 0xb4, 0x49, 0xf2, 0x7c, 0x2e, 0x0e, 0x2a, 0x75, 0xe9, 0x65, 0x3c, - 0xde, 0x51, 0xe5, 0x68, 0x44, 0x37, 0xe5, 0x57, 0x92, 0x57, 0xbf, 0x19, 0xa4, - 0x60, 0x80, 0x43, 0x6d, 0xbd, 0x08, 0xd7, 0x47, 0x84, 0xaf, 0x00, 0x2d, 0x58, - 0xe0, 0x6f, 0xaf, 0x7f, 0x3c, 0xea, 0xe7, 0xd3, 0x41, 0x9b, 0x1f, 0xca, 0x26, - 0x5a, 0x55, 0x59, 0xcf, 0x9e, 0x2d, 0x3b, 0x60, 0x97, 0x8d, 0x81, 0xa6, 0x78, - 0xb9, 0xed, 0x8e, 0x44, 0x86, 0xb4, 0xd1, 0x46, 0x09, 0xd6, 0xc1, 0x27, 0xc0, - 0xc2, 0xfb, 0xff, 0xe3, 0x0a, 0x60, 0xf7, 0xbf, 0xf1, 0xd9, 0xfb, 0x83, 0x00, - 0xed, 0x00, 0x92, 0x53, 0xba, 0x9b, 0x99, 0x6f, 0xa0, 0x52, 0x41, 0xb1, 0x0f, - 0x5a, 0xc9, 0xa8, 0x40, 0x8e, 0x92, 0x5b, 0x62, 0x6b, 0xb2, 0x1a, 0x47, 0x1f, - 0xe3, 0xbe, 0xde, 0x52, 0xbb, 0xa0, 0x97, 0xb2, 0xa9, 0x9a, 0x9b, 0xa5, 0xa8, - 0x66, 0x58, 0xc3, 0xfd, 0x9e, 0xc5, 0x5b, 0xfa, 0x9b, 0x32, 0x85, 0x67, 0x25, - 0x4a, 0xb3, 0x6d, 0x2c, 0x7f, 0x44, 0xd2, 0xc7, 0xe1, 0x3e, 0xb5, 0x4b, 0xeb, - 0x70, 0xea, 0x8f, 0xa9, 0x4b, 0x6c, 0x6e, 0x01, 0x2d, 0x79, 0xe3, 0xf5, 0x36, - 0x89, 0xc2, 0xb1, 0xa1, 0x8e, 0xaf, 0x2d, 0x47, 0x1d, 0x13, 0xc1, 0xab, 0x39, - 0xd9, 0x19, 0x4a, 0xe8, 0x43, 0xab, 0x1d, 0x28, 0xff, 0xa8, 0xf6, 0x9d, 0xc7, - 0xe1, 0x5c, 0xc3, 0x8b, 0x12, 0xe8, 0xfc, 0xd7, 0x92, 0x55, 0xb7, 0x21, 0x60, - 0x56, 0xd9, 0xed, 0xb7, 0x48, 0x2f, 0xb9, 0x8a, 0xa0, 0x33, 0xb6, 0x5e, 0x51, - 0xc1, 0xa0, 0x8b, 0x8a, 0x11, 0xd8, 0x4d, 0x04, 0x09, 0xb7, 0x34, 0xf4, 0x52, - 0xaa, 0xf0, 0xd6, 0xb1, 0x8f, 0x50, 0x25, 0x86, 0x83, 0xd3, 0xf9, 0xa7, 0x6d, - 0x39, 0x9f, 0xd0, 0x47, 0xee, 0xe2, 0x88, 0xbb, 0x45, 0x85, 0x85, 0x1d, 0xc9, - 0x3e, 0xcc, 0xc6, 0x23, 0x22, 0x92, 0x4c, 0xd1, 0x3b, 0x5d, 0xd4, 0xee, 0xd6, - 0x6e, 0xd8, 0xd9, 0x97, 0x2d, 0x77, 0x26, 0x29, 0xea, 0x64, 0x74, 0x2e, 0x54, - 0x73, 0x39, 0x81, 0xb0, 0x06, 0xc0, 0x62, 0x46, 0x8e, 0x4b, 0xd8, 0xf7, 0xdd, - 0x9a, 0xf6, 0x98, 0xf5, 0x2a, 0xe8, 0x14, 0x63, 0x4e, 0x81, 0xd7, 0xf3, 0xe0, - 0xc4, 0x20, 0x31, 0x7c, 0xac, 0xa9, 0xae, 0x48, 0x11, 0xc6, 0xaf, 0x06, 0xfe, - 0x80, 0xa8, 0xc0, 0x2a, 0xb7, 0xa0, 0x0e, 0x18, 0xe4, 0xa6, 0xaa, 0x1e, 0xa1, - 0xb7, 0x69, 0x45, 0xd2, 0x61, 0x5d, 0x43, 0xac, 0x11, 0x8b, 0x56, 0xc2, 0xf2, - 0x96, 0x0f, 0xe9, 0x3a, 0x02, 0x5f, 0x13, 0xec, 0x91, 0xff, 0xc6, 0xd2, 0xc3, - 0x53, 0x69, 0x9a, 0xbb, 0x09, 0x2d, 0xed, 0xc0, 0x65, 0xdb, 0x8f, 0xa2, 0x14, - 0xdb, 0xc4, 0x64, 0x66, 0xf8, 0x97, 0xb8, 0x8c, 0x58, 0xb3, 0x01, 0x52, 0x13, - 0x3a, 0xa3, 0x83, 0x1a, 0xf3, 0x7c, 0x74, 0xd9, 0x9e, 0x9e, 0x36, 0xff, 0x70, - 0x11, 0xd3, 0x23, 0x83, 0x05, 0x69, 0x15, 0x08, 0xa2, 0xc3, 0xa4, 0x3e, 0x75, - 0x5d, 0xc0, 0x81, 0xb5, 0x11, 0xd6, 0x48, 0x2a, 0x7d, 0xb6, 0x5f, 0xa9, 0x69, - 0x9e, 0xa8, 0x7f, 0xf4, 0x70, 0x99, 0xed, 0x36, 0x37, 0xdb, 0xb0, 0xa3, 0xd0, - 0xef, 0x79, 0x79, 0x6a, 0x8e, 0xf1, 0xe4, 0xd9, 0x4d, 0x42, 0xb4, 0xbc, 0x2b, - 0x4a, 0x03, 0x8a, 0xe6, 0xe4, 0x6b, 0x24, 0xcf, 0xc8, 0x41, 0x53, 0xd3, 0x1e, - 0xaf, 0x89, 0x50, 0x63, 0xa5, 0xca, 0x95, 0x9b, 0xe6, 0x3f, 0x37, 0xf2, 0xba, - 0x0d, 0x43, 0x23, 0x66, 0x73, 0x6d, 0x86, 0x32, 0xfc, 0xe0, 0x72, 0xb6, 0xae, - 0x5b, 0x6f, 0x3f, 0xd5, 0x9d, 0x3f, 0xaf, 0xf6, 0x38, 0x27, 0x5a, 0x99, 0x2f, - 0xef, 0xc8, 0x7e, 0x60, 0xd4, 0x4c, 0x2c, 0xad, 0xc2, 0xb5, 0xc4, 0x94, 0xe3, - 0xe7, 0x2e, 0xb4, 0x59, 0x7c, 0x96, 0xb4, 0x01, 0x67, 0x79, 0x9a, 0x90, 0x01, - 0xa2, 0xed, 0x36, 0x76, 0xa8, 0xb4, 0x03, 0xae, 0x25, 0xff, 0xd7, 0x72, 0xf7, - 0x08, 0x1e, 0x9a, 0x32, 0xbc, 0xc1, 0xc5, 0xe2, 0xed, 0xd4, 0xe2, 0xa6, 0x57, - 0x6b, 0x78, 0x3c, 0xce, 0x3a, 0xae, 0x11, 0xfa, 0x43, 0x22, 0x62, 0x54, 0x88, - 0x56, 0x18, 0x3e, 0xe6, 0x82, 0xd5, 0xdc, 0x31, 0xbe, 0xb3, 0x8f, 0x06, 0x1c, - 0xbd, 0xec, 0xa7, 0x02, 0x1a, 0x44, 0x4e, 0x2d, 0xd4, 0x17, 0xdf, 0x26, 0xdc, - 0xd2, 0x20, 0xf2, 0xb7, 0x31, 0x77, 0x2b, 0x43, 0x9e, 0x96, 0xd6, 0x14, 0xe1, - 0xfa, 0xcb, 0x48, 0x6c, 0x7a, 0x7d, 0x51, 0x71, 0xb1, 0xde, 0x35, 0x9f, 0x6a, - 0xd3, 0xa9, 0x6f, 0x64, 0x9c, 0x96, 0x91, 0x02, 0xa1, 0x96, 0x4f, 0xb4, 0xb4, - 0xa1, 0xa4, 0x27, 0x9c, 0x68, 0xe6, 0xc3, 0x72, 0xe4, 0x21, 0x87, 0xd7, 0x54, - 0xe8, 0x04, 0xa6, 0x16, 0x53, 0x09, 0x20, 0x69, 0xfb, 0x9b, 0x6d, 0x25, 0x26, - 0x68, 0x90, 0x80, 0x8b, 0x01, 0x5d, 0xf2, 0x8c, 0x80, 0x10, 0x65, 0xda, 0x6f, - 0xeb, 0xdc, 0x1a, 0x56, 0xbf, 0xd0, 0x02, 0x62, 0x5a, 0xcf, 0xaa, 0x53, 0x73, - 0xfd, 0xe1, 0x49, 0xc1, 0xcf, 0xc3, 0x64, 0x9b, 0x48, 0x69, 0x69, 0x6d, 0x44, - 0xec, 0xb1, 0x24, 0x79, 0xc5, 0xeb, 0xef, 0x99, 0x5f, 0x10, 0x02, 0x9f, 0x8b, - 0x53, 0xe3, 0x4d, 0x9a, 0xe1, 0x32, 0x07, 0x5d, 0xb9, 0x6e, 0x83, 0x89, 0x05, - 0x37, 0xa3, 0x2c, 0x81, 0xcb, 0x74, 0xa4, 0xfe, 0xcd, 0xc8, 0x5b, 0xe0, 0x03, - 0x63, 0x0b, 0x7c, 0x3d, 0x6d, 0xc9, 0xa0, 0x7f, 0x9d, 0x48, 0x4c, 0x73, 0xcf, - 0x09, 0x39, 0x30, 0x39, 0xe4, 0x53, 0x26, 0xb8, 0xff, 0xff, 0xb3, 0xe7, 0xe6, - 0x15, 0x9c, 0x46, 0x69, 0x9f, 0x10, 0x07, 0x92, 0xd4, 0x67, 0x29, 0x50, 0x34, - 0xb2, 0xfa, 0x32, 0x15, 0xe0, 0x11, 0x26, 0x43, 0x68, 0x3f, 0xbf, 0x58, 0x74, - 0x8e, 0xb6, 0x99, 0x0c, 0x40, 0x4f, 0xec, 0x90, 0x8a, 0xb5, 0x72, 0xe1, 0x61, - 0x31, 0x5f, 0x4f, 0x90, 0xa4, 0x8d, 0xed, 0x5c, 0xb8, 0x35, 0x65, 0x2f, 0x23, - 0xc3, 0x10, 0x35, 0x10, 0x90, 0x13, 0x66, 0x96, 0x12, 0xec, 0x0f, 0xf7, 0xf1, - 0xaf, 0x81, 0xb2, 0x4c, 0xed, 0x0e, 0xfa, 0x62, 0x13, 0xda, 0x6c, 0x3c, 0xc7, - 0xff, 0x5a, 0xf2, 0x6a, 0xb5, 0x19, 0x08, 0x96, 0x9a, 0xb7, 0x2f, 0xbc, 0x18, - 0xba, 0xfc, 0xf5, 0xc7, 0xe6, 0xf7, 0x14, 0xde, 0x40, 0x9d, 0x7b, 0xdd, 0xa8, - 0x9b, 0xf7, 0xa3, 0x77, 0x08, 0x3b, 0xfa, 0xbe, 0x48, 0x58, 0xe4, 0x7a, 0x4c, - 0xc3, 0x2e, 0x41, 0x6e, 0xc0, 0x8b, 0x8a, 0xc7, 0x91, 0x5a, 0x43, 0x73, 0x3f, - 0x44, 0x06, 0xe9, 0xd9, 0x67, 0xc5, 0x60, 0xf3, 0x44, 0xd7, 0xe9, 0x04, 0xa2, - 0x80, 0x45, 0xd9, 0x9f, 0x3a, 0xf8, 0xc8, 0x2e, 0x97, 0xe1, 0xb9, 0xc1, 0xb2, - 0x05, 0xe5, 0x85, 0xfb, 0xeb, 0xb4, 0x8f, 0xaf, 0x58, 0xf1, 0xb6, 0x5d, 0xca, - 0x24, 0x97, 0xe0, 0x9a, 0x70, 0xaa, 0xd4, 0x86, 0x5f, 0x85, 0x71, 0x5a, 0x28, - 0x0e, 0x18, 0x6f, 0x3f, 0xc1, 0x74, 0x0d, 0x81, 0x84, 0xd3, 0x3e, 0x83, 0x22, - 0x16, 0x95, 0x21, 0xcd, 0xc1, 0x32, 0x21, 0x29, 0x39, 0xc8, 0x4a, 0x10, 0x89, - 0x64, 0xe2, 0xde, 0x74, 0xb6, 0xea, 0x55, 0xb4, 0xcb, 0x8f, 0x6f, 0x9b, 0xee, - 0x98, 0xb1, 0x0d, 0x41, 0x51, 0x09, 0x45, 0x5f, 0x48, 0xb7, 0x76, 0x08, 0x2d, - 0xc3, 0x0b, 0x4b, 0xc7, 0x34, 0x77, 0x07, 0x55, 0x11, 0x70, 0x03, 0x08, 0x15, - 0x8c, 0xe2, 0xf2, 0xf9, 0xbf, 0x0f, 0x69, 0x1b, 0x2c, 0xe5, 0x3e, 0x61, 0x14, - 0x2c, 0xb7, 0x40, 0xc1, 0x5b, 0x7b, 0x62, 0x3c, 0xf4, 0x8b, 0x3f, 0x7b, 0xfe, - 0xfa, 0x31, 0xbc, 0xdc, 0x66, 0x5c, 0x6d, 0x71, 0x23, 0xe9, 0x53, 0x50, 0x81, - 0x13, 0x75, 0x94, 0x7b, 0x05, 0x5a, 0x43, 0xdb, 0x07, 0xe0, 0x3f, 0x33, 0x62, - 0x7d, 0xf5, 0xc6, 0x38, 0xbf, 0xad, 0x95, 0x6d, 0xdc, 0x1e, 0xa7, 0xd7, 0x62, - 0x0a, 0x20, 0xf2, 0x79, 0x2f, 0x63, 0x81, 0x7a, 0x1c, 0xf3, 0x25, 0x80, 0xd0, - 0x42, 0x74, 0x23, 0x4a, 0xf2, 0xa5, 0x1b, 0x56, 0xbb, 0x68, 0xa2, 0x9e, 0x43, - 0xa9, 0x54, 0x14, 0x2b, 0xa4, 0xca, 0x68, 0x23, 0xbd, 0xe9, 0x05, 0x3d, 0x72, - 0xfd, 0xad, 0xbc, 0x61, 0xad, 0x59, 0x36, 0xc5, 0x3f, 0xdd, 0x75, 0x79, 0x44, - 0x6d, 0x11, 0xc4, 0x46, 0x07, 0xf4, 0x16, 0x30, 0xe4, 0xc0, 0x89, 0x15, 0xe6, - 0x31, 0x77, 0x15, 0x50, 0xe9, 0xce, 0x1f, 0xca, 0x2c, 0x63, 0xfe, 0x06, 0xb7, - 0x98, 0x9d, 0x58, 0x4f, 0xa7, 0xd7, 0x82, 0xa8, 0x8c, 0x1e, 0x7d, 0x64, 0xb6, - 0xfb, 0xf5, 0x5e, 0x35, 0x96, 0xaf, 0x9b, 0xcb, 0x75, 0x85, 0xf8, 0xc7, 0xd3, - 0xaa, 0x5c, 0x20, 0x82, 0xb2, 0x65, 0x24, 0x9d, 0xf0, 0x57, 0x01, 0xda, 0xb0, - 0x31, 0xc4, 0xba, 0xc1, 0xea, 0x26, 0x7a, 0x29, 0x96, 0xa2, 0x02, 0x8d, 0x1e, - 0x6a, 0x0f, 0x80, 0xa3, 0x84, 0x7c, 0x53, 0x1d, 0xba, 0x96, 0xee, 0x65, 0xa2, - 0x41, 0x89, 0xbd, 0x27, 0x12, 0xe4, 0x0e, 0x95, 0x96, 0x64, 0x98, 0x1e, 0x58, - 0xb2, 0xa4, 0xf9, 0x51, 0xef, 0x8f, 0x49, 0x7d, 0xff, 0xf2, 0xf2, 0xf2, 0x71, - 0xea, 0xb8, 0x9c, 0x62, 0x8e, 0x18, 0xb5, 0xfc, 0xb4, 0x38, 0x82, 0x53, 0x7e, - 0xaf, 0x6a, 0xd2, 0xa6, 0xb1, 0x75, 0x46, 0x33, 0xca, 0xa8, 0x6b, 0xf2, 0xc7, - 0x6f, 0x39, 0x93, 0x15, 0x4f, 0xc7, 0x3e, 0x6f, 0xbb, 0xa2, 0x21, 0x0c, 0x27, - 0x43, 0xf5, 0x30, 0xa4, 0x27, 0x84, 0x9a, 0x30, 0x1e, 0x00, 0xe0, 0x11, 0x29, - 0xf0, 0x3a, 0x46, 0x07, 0xf8, 0x7c, 0xbe, 0x07, 0x62, 0xc0, 0xb1, 0xc6, 0x58, - 0x55, 0xde, 0xba, 0x84, 0x22, 0xca, 0x4b, 0x88, 0xab, 0xee, 0xa6, 0xa4, 0x38, - 0x2c, 0xf1, 0x6c, 0xcd, 0x6d, 0xc7, 0xc3, 0x7c, 0x44, 0xe5, 0x49, 0xc4, 0x53, - 0x48, 0x19, 0xac, 0xd8, 0xbb, 0x0a, 0x02, 0xa5, 0xfa, 0x7a, 0x1c, 0x1d, 0x38, - 0x06, 0xfb, 0xc3, 0x40, 0x7f, 0xd7, 0xda, 0x93, 0xfd, 0x0d, 0xe6, 0x40, 0x0d, - 0x3a, 0xb8, 0x97, 0x74, 0x85, 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, 0x50, 0x7b, - 0x79, 0x94, 0x7a, 0xdb, 0x2f, 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, 0xdb, 0x5f, - 0x29, 0x80, 0x99, 0xf2, 0x0f, 0x26, 0x3b, 0x35, 0x9a, 0x11, 0x51, 0xa6, 0xb7, - 0x5c, 0x01, 0x36, 0x5e, 0xb1, 0x54, 0xae, 0x42, 0x14, 0x0d, 0x6e, 0x10, 0x34, - 0x2f, 0x14, 0xf3, 0x4d, 0xc3, 0x3e, 0x07, 0xff, 0x0e, 0x4d, 0x1a, 0x6b, 0xe3, - 0x75, 0xb3, 0x2f, 0x84, 0xb9, 0x2e, 0x5d, 0x81, 0xeb, 0xb6, 0x39, 0xc4, 0xf2, - 0x7e, 0x71, 0x5a, 0xa4, 0x2c, 0xc7, 0x57, 0x07, 0xd4, 0xeb, 0xd1, 0xbb, 0xfb, - 0xe8, 0xf9, 0x0f, 0xc7, 0xc9, 0x53, 0xe7, 0xa9, 0x71, 0x5e, 0x65, 0xaf, 0x82, - 0x67, 0x37, 0x3d, 0x34, 0x51, 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, 0x2c, 0xcf, - 0x3b, 0xcc, 0x7a, 0xca, 0x14, 0x67, 0xb6, 0x32, 0x7e, 0x4f, 0x95, 0x22, 0xb2, - 0xcc, 0x57, 0x9a, 0x7a, 0x8f, 0xff, 0x7c, 0xa7, 0xcf, 0x14, 0x5d, 0xfc, 0x13, - 0xea, 0xfc, 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, 0xfb, 0xe5, 0x34, 0x44, 0xd0, - 0xc7, 0x3b, 0x3b, 0xd5, 0xbc, 0x87, 0x0b, 0x01, 0xcd, 0x45, 0x79, 0x11, 0xe3, - 0x56, 0x31, 0x3f, 0xd1, 0xda, 0xfb, 0x4c, 0x81, 0x51, 0x63, 0x4a, 0x01, 0xaf, - 0xf7, 0xcf, 0x11, 0x6d, 0x43, 0x3c, 0x3d, 0x2b, 0x3a, 0xdd, 0xa9, 0xce, 0xbe, - 0x18, 0xf7, 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, 0x3c, 0x22, 0x36, 0x8c, 0x92, - 0x1a, 0x90, 0x8b, 0xa9, 0xfb, 0x69, 0x74, 0xae, 0xd1, 0xd0, 0xf2, 0xde, 0x3c, - 0x1b, 0xf9, 0xd3, 0xff, 0x79, 0x4b, 0x76, 0x1a, 0xe0, 0x1e, 0x67, 0x73, 0x9f, - 0x02, 0x27, 0x3a, 0x67, 0x52, 0xe5, 0x01, 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, 0xdc, - 0x81, 0x7e, 0x6e, 0xa3, 0x51, 0xd6, 0x00, 0x6b, 0xec, 0xf8, 0xd2, 0xff, 0xb0, - 0x39, 0x90, 0xf6, 0x77, 0x74, 0xa8, 0x1e, 0x4c, 0x03, 0x73, 0xa3, 0x5e, 0x2c, - 0x00, 0x9a, 0x4f, 0x0a, 0xe6, 0x32, 0xf7, 0x09, 0x2d, 0x46, 0xcc, 0x98, 0x0a, - 0x90, 0xb3, 0xc2, 0x3a, 0x06, 0x61, 0x54, 0xeb, 0xfe, 0xbc, 0x59, 0xd9, 0xbc, - 0x62, 0x7e, 0xba, 0xc0, 0x74, 0x69, 0x84, 0x8c, 0x28, 0x04, 0x49, 0x29, 0xf8, - 0xbf, 0xf9, 0x43, 0x51, 0xc1, 0x43, 0xb0, 0xcb, 0x25, 0xb9, 0x14, 0x2c, 0x61, - 0xbd, 0x79, 0x0a, 0x80, 0xd7, 0x02, 0x3e, 0xf8, 0x82, 0x3e, 0x22, 0x28, 0x52, - 0xd4, 0xbe, 0x14, 0xa5, 0x59, 0x05, 0xe0, 0xfe, 0x1e, 0x03, 0x64, 0x8e, 0x77, - 0xa6, 0x3c, 0x26, 0x44, 0xd7, 0x6d, 0x8f, 0xa1, 0xed, 0x73, 0x66, 0x94, 0xaf, - 0x18, 0x77, 0x00, 0xc0, 0x82, 0xdc, 0x47, 0x77, 0x40, 0xfb, 0x3f, 0x2c, 0xd7, - 0xbb, 0x59, 0xfb, 0x35, 0x85, 0x54, 0xe9, 0x4c, 0x7e, 0x67, 0x8c, 0xe0, 0x1a, - 0xeb, 0xf9, 0x4e, 0x51, 0x5e, 0x49, 0x72, 0x29, 0x67, 0x99, 0x5a, 0xea, 0x85, - 0x8d, 0x64, 0xe7, 0x78, 0x9f, 0xf3, 0x06, 0x36, 0x95, 0x77, 0x22, 0x81, 0x80, - 0x32, 0x6a, 0x5b, 0x0a, 0xf4, 0x75, 0xe2, 0x7a, 0x54, 0xb2, 0x07, 0xb4, 0x1f, - 0x92, 0xe3, 0x76, 0x17, 0x0e, 0x3f, 0xb0, 0x05, 0x02, 0x82, 0x61, 0xc9, 0x9c, - 0x2d, 0xbd, 0x0e, 0xed, 0xee, 0x87, 0x1c, 0x1c, 0x0f, 0x48, 0xb8, 0xe9, 0xb8, - 0xe4, 0xbe, 0x77, 0xd1, 0xb7, 0x37, 0xfe, 0x21, 0xf0, 0xfa, 0x5a, 0x18, 0xeb, - 0xb5, 0x27, 0x55, 0xb5, 0xa6, 0xcf, 0x61, 0x30, 0xfb, 0x56, 0x94, 0x4c, 0xfa, - 0xb8, 0x75, 0x27, 0xc2, 0x50, 0xd1, 0x13, 0xb2, 0x9b, 0xca, 0xc9, 0xaa, 0xa1, - 0x0c, 0x2e, 0x7d, 0xe4, 0x15, 0xed, 0xb0, 0x80, 0x6c, 0x6d, 0xa0, 0x30, 0x20, - 0xa1, 0x34, 0xca, 0x7e, 0xcd, 0xc8, 0xda, 0x1b, 0xd5, 0x7a, 0x37, 0xf5, 0x5a, - 0x46, 0x94, 0x0b, 0x45, 0xb2, 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, 0x92, 0x7d, - 0x1b, 0xd8, 0x60, 0xd4, 0x45, 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, 0xe1, - 0xd0, 0x01, 0x08, 0x02, 0x6c, 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, 0xf5, - 0xc3, 0x70, 0xbc, 0xe1, 0x8d, 0x3a, 0xcb, 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, - 0xe1, 0xd8, 0x02, 0xf7, 0x73, 0x33, 0x49, 0x4a, 0x7a, 0xe1, 0x30, 0xfe, 0x86, - 0xe8, 0xf8, 0x18, 0xf9, 0x26, 0x1a, 0x2d, 0xad, 0xb4, 0x12, 0x52, 0x29, 0xba, - 0x0f, 0xfc, 0x0e, 0x70, 0x90, 0x32, 0x44, 0x30, 0xb5, 0x21, 0xa9, 0x0d, 0x22, - 0x4a, 0xb7, 0xa1, 0x02, 0x4e, 0x1d, 0x89, 0x3e, 0x74, 0x04, 0xfe, 0xdb, 0x34, - 0x8e, 0x4d, 0x5e, 0x22, 0x35, 0xc5, 0x9a, 0x78, 0x76, 0xa0, 0xfc, 0x60, 0x14, - 0x5c, 0x6a, 0x00, 0x96, 0x87, 0x68, 0x44, 0x60, 0x27, 0x1e, 0xe1, 0x33, 0xa4, - 0x37, 0xfe, 0x52, 0xfb, 0x6c, 0xfb, 0xa9, 0x7f, 0xce, 0xc1, 0x61, 0xdf, 0x51, - 0x5d, 0xde, 0x90, 0x5a, 0x24, 0xda, 0x6d, 0x37, 0xbd, 0xc3, 0x40, 0x44, 0xa9, - 0x55, 0xe6, 0x82, 0xb4, 0x74, 0x71, 0xca, 0x1e, 0x8c, 0x78, 0xc5, 0x1e, 0xd3, - 0x77, 0xcd, 0x4a, 0xfa, 0x89, 0x4b, 0xd9, 0xbd, 0x12, 0xe7, 0x07, 0x15, 0x6d, - 0xa0, 0x72, 0x6f, 0x7c, 0xf5, 0x72, 0x9f, 0xab, 0xe3, 0x72, 0x16, 0x04, 0x63, - 0xfe, 0x04, 0x29, 0x24, 0x4d, 0x06, 0x74, 0x89, 0xba, 0x5d, 0x09, 0x47, 0x2e, - 0xcd, 0x9b, 0xcd, 0xc4, 0xd5, 0xe4, 0xdf, 0x10, 0x1e, 0x18, 0x9d, 0xb8, 0x46, - 0x3e, 0xb5, 0x38, 0x30, 0x7b, 0x58, 0x7d, 0xef, 0xf7, 0x8d, 0xe9, 0xc7, 0x3a, - 0xf2, 0x80, 0x80, 0xb2, 0xfd, 0x05, 0x00, 0x3e, 0x11, 0xd3, 0xe1, 0xb3, 0x29, - 0x9d, 0xc9, 0x52, 0x1f, 0x8b, 0x51, 0x3b, 0xad, 0xb0, 0x10, 0xe9, 0x1b, 0xfe, - 0xb9, 0x1b, 0x0b, 0x2a, 0x6c, 0xb1, 0x29, 0xc2, 0xe8, 0x25, 0xa5, 0x97, 0xb8, - 0xfb, 0x75, 0xbc, 0x56, 0x2d, 0x65, 0x4d, 0x62, 0x10, 0x46, 0x40, 0xdd, 0x74, - 0xe5, 0x6c, 0xd1, 0x4b, 0xaa, 0xba, 0x56, 0x5b, 0x84, 0xb8, 0x45, 0xe1, 0x63, - 0xd1, 0xca, 0xef, 0x25, 0x33, 0xc3, 0x98, 0x16, 0x37, 0x20, 0x4f, 0x96, 0xa5, - 0x9c, 0x8e, 0x80, 0x24, 0xd9, 0x04, 0x1b, 0x20, 0x29, 0xe9, 0x4c, 0x15, 0x24, - 0x5f, 0x1a, 0x95, 0x88, 0x40, 0xba, 0x3f, 0x38, 0x0a, 0x4d, 0x20, 0xf1, 0x18, - 0x4e, 0x77, 0x82, 0x7d, 0xe3, 0xff, 0x8f, 0x3d, 0x73, 0x45, 0x9a, 0xfe, 0x24, - 0x1f, 0x72, 0x3c, 0x08, 0x48, 0x23, 0x23, 0x0e, 0x00, 0x3d, 0x3d, 0x21, 0xe5, - 0x35, 0x01, 0xec, 0x04, 0x99, 0xb0, 0x83, 0xa7, 0xda, 0xd6, 0x85, 0xc5, 0x71, - 0x27, 0xf4, 0xde, 0x64, 0x73, 0x3a, 0x88, 0x0c, 0x2d, 0xb2, 0x8f, 0xda, 0xab, - 0xf1, 0xb5, 0x42, 0xd2, 0x05, 0xf6, 0x64, 0xa3, 0x51, 0x35, 0x71, 0x27, 0x11, - 0xdc, 0xcc, 0xd9, 0x31, 0xa5, 0x0b, 0x9c, 0x56, 0x61, 0x88, 0x23, 0x60, 0xd4, - 0xca, 0xc0, 0x04, 0x76, 0x81, 0xbc, 0x2e, 0x2b, 0x3b, 0xf6, 0xc9, 0x97, 0x60, - 0xd7, 0xcf, 0xb4, 0xfa, 0x21, 0x39, 0x43, 0x77, 0xa4, 0x55, 0x1c, 0x76, 0xd1, - 0xf7, 0x5a, 0xc0, 0x3c, 0x26, 0x20, 0x54, 0xdf, 0xfd, 0x79, 0xa9, 0xde, 0xd0, - 0x5e, 0x88, 0x89, 0x58, 0x19, 0x9e, 0xea, 0x45, 0x01, 0xe2, 0x99, 0x0a, 0x53, - 0xa5, 0xcd, 0x2a, 0x46, 0xa4, 0x01, 0x57, 0x65, 0x88, 0xfd, 0x7d, 0x05, 0x8a, - 0x26, 0xf2, 0x84, 0x38, 0xe5, 0x78, 0x2f, 0x45, 0xac, 0x1d, 0x07, 0xf6, 0xf6, - 0xf5, 0xed, 0x73, 0x74, 0x1d, 0x57, 0x85, 0x83, 0x7a, 0x6b, 0x84, 0x4b, 0x47, - 0x47, 0x75, 0x71, 0x8c, 0x29, 0xdd, 0x99, 0x08, 0x4e, 0x9f, 0x88, 0xef, 0x15, - 0x3a, 0x83, 0x29, 0xf5, 0x32, 0xa6, 0x90, 0x17, 0xdc, 0x3a, 0x97, 0xed, 0x75, - 0x43, 0x67, 0xdb, 0x28, 0x3d, 0x48, 0x1e, 0x3b, 0xa3, 0x04, 0xf2, 0x54, 0xfc, - 0xb7, 0xfc, 0x93, 0xf7, 0xc6, 0xea, 0x3a, 0xc0, 0xf5, 0x35, 0xb1, 0x5b, 0xca, - 0xad, 0x87, 0x57, 0xd3, 0xbf, 0x8f, 0x98, 0x1b, 0xbb, 0x20, 0xd7, 0x0f, 0xf6, - 0x53, 0xd1, 0x3a, 0xa8, 0x26, 0xcb, 0xe4, 0x6e, 0x3e, 0xa1, 0xed, 0xaf, 0x5b, - 0x3c, 0xf1, 0x63, 0x0e, 0xe8, 0x59, 0x7a, 0xae, 0x19, 0x63, 0x3f, 0x35, 0x16, - 0x28, 0x9c, 0x5f, 0xb8, 0xdd, 0x39, 0xd3, 0x4a, 0x6d, 0xb9, 0xc5, 0x97, 0xd2, - 0x06, 0x0c, 0x85, 0xf8, 0x82, 0x92, 0xe3, 0x2d, 0xbd, 0x0c, 0xca, 0x68, 0xa4, - 0xfe, 0xcb, 0x3e, 0xf0, 0xd5, 0x3c, 0x96, 0x41, 0x4f, 0x28, 0x0d, 0x9d, 0x47, - 0x6c, 0xfc, 0x0b, 0xd9, 0x39, 0xdf, 0x3e, 0x72, 0x39, 0x5c, 0x0a, 0x43, 0xe6, - 0xed, 0x53, 0x0c, 0xb2, 0xe8, 0xae, 0x83, 0x88, 0x60, 0xad, 0xc8, 0x8a, 0x2c, - 0x36, 0x7e, 0x2e, 0xac, 0xcb, 0x1e, 0x6e, 0x63, 0x0d, 0x9a, 0x6f, 0x44, 0x23, - 0x59, 0xb5, 0x57, 0xf4, 0xa7, 0x77, 0xab, 0x1b, 0x15, 0xea, 0xa1, 0x29, 0x47, - 0x50, 0xd4, 0x06, 0x3a, 0x0c, 0x1e, 0x45, 0x9f, 0x1b, 0xdc, 0xbf, 0x95, 0x25, - 0x74, 0x7e, 0x8c, 0x95, 0x08, 0xa5, 0x55, 0xfa, 0xcb, 0x79, 0x87, 0x40, 0xe0, - 0xbd, 0xf9, 0x94, 0xd9, 0x73, 0x9b, 0xbe, 0x55, 0x38, 0xa0, 0xae, 0x0f, 0x07, - 0x6c, 0x58, 0x2c, 0x0f, 0x5b, 0xa8, 0x78, 0xb9, 0x9b, 0x82, 0x49, 0xdb, 0x1d, - 0x7e, 0x95, 0x05, 0x6c, 0x98, 0xaf, 0x08, 0x3d, 0x98, 0xcb, 0x0e, 0xd9, 0xe3, - 0xf7, 0x43, 0x6e, 0x1c, 0x76, 0x43, 0x76, 0x6f, 0x96, 0x6b, 0x83, 0xe9, 0x99, - 0x20, 0x6e, 0xbd, 0x13, 0x93, 0xb9, 0xb2, 0xa7, 0xf4, 0x14, 0x48, 0x0f, 0xa0, - 0x17, 0x48, 0x00, 0x69, 0xf8, 0x5c, 0x77, 0x49, 0xc4, 0x35, 0xae, 0x2f, 0xba, - 0x2d, 0xdc, 0x10, 0x38, 0xd5, 0x47, 0xd8, 0x48, 0x54, 0x81, 0x7e, 0xf3, 0x96, - 0x35, 0xc2, 0x98, 0x27, 0xaa, 0xd8, 0x67, 0x26, 0xc9, 0xad, 0xe3, 0xb2, 0x65, - 0xb9, 0x08, 0x6c, 0x8b, 0x5b, 0x75, 0xef, 0x56, 0xfe, 0x4b, 0xd8, 0xb4, 0xd6, - 0x28, 0x93, 0x89, 0x5b, 0x3f, 0xd2, 0x73, 0x4f, 0xda, 0xc4, 0x64, 0x15, 0x6d, - 0x7e, 0x5e, 0xbc, 0x7e, 0xcf, 0x1d, 0x83, 0xb8, 0x6f, 0x65, 0x96, 0x37, 0xe3, - 0xb1, 0x42, 0xc1, 0x64, 0x96, 0x3b, 0x8c, 0xdc, 0xf4, 0xba, 0x4f, 0x40, 0x35, - 0xdf, 0xfc, 0x5a, 0x78, 0x94, 0x58, 0x84, 0x77, 0x81, 0x91, 0x8a, 0xc7, 0x2f, - 0xc1, 0x8b, 0xbb, 0xf5, 0x11, 0x00, 0x32, 0xe6, 0x6d, 0x75, 0xb3, 0x17, 0x1e, - 0xf4, 0xb5, 0x13, 0x29, 0x01, 0x64, 0xa7, 0x7b, 0x42, 0xb0, 0xa4, 0xcf, 0xb8, - 0x96, 0x39, 0xab, 0x23, 0x84, 0x5e, 0x1a, 0xa2, 0xa4, 0x52, 0xf3, 0x73, 0x1c, - 0x8c, 0xb6, 0x50, 0x82, 0xa6, 0x22, 0xa7, 0xc2, 0xe0, 0x01, 0x3e, 0xa4, 0x7d, - 0x0b, 0xdd, 0x42, 0xd6, 0x99, 0x04, 0x66, 0x64, 0x9a, 0x90, 0x5c, 0x68, 0x4c, - 0x32, 0x51, 0x71, 0x6d, 0x61, 0xf7, 0x60, 0xd5, 0x3d, 0xe6, 0xe3, 0xf7, 0x90, - 0xfb, 0xa7, 0xf5, 0xf1, 0xf4, 0xde, 0x26, 0x71, 0x13, 0xbd, 0xfc, 0xd7, 0x42, - 0x28, 0x22, 0x33, 0x0b, 0x32, 0xd5, 0x8e, 0x67, 0x77, 0x76, 0x5f, 0x22, 0xa4, - 0x11, 0x63, 0x44, 0xee, 0xb6, 0x5b, 0x2e, 0xc5, 0x16, 0x39, 0x3a, 0xb3, 0x75, - 0x1b, 0x53, 0x56, 0xd2, 0xb0, 0xc9, 0x50, 0x0c, 0x0f, 0x3e, 0x46, 0x91, 0x81, - 0x03, 0x5b, 0xc3, 0x66, 0x0f, 0x0b, 0x8f, 0x9f, 0xbe, 0x6e, 0x40, 0xb5, 0xe8, - 0x9c, 0xb7, 0x9b, 0x06, 0x37, 0x14, 0xca, 0x75, 0xe7, 0x2e, 0x2e, 0x10, 0x0a, - 0x10, 0xd6, 0x3b, 0xf7, 0x84, 0xdf, 0x08, 0x20, 0xef, 0x25, 0xf8, 0xef, 0x40, - 0xfe, 0x5f, 0x05, 0xfb, 0x95, 0x68, 0x3f, 0x91, 0x05, 0xff, 0x3c, 0xb2, 0xd2, - 0x19, 0xab, 0x76, 0x60, 0x5a, 0x06, 0x4f, 0x69, 0x21, 0x9f, 0x1d, 0xc0, 0xd0, - 0x0b, 0x3b, 0x48, 0x64, 0x2f, 0x97, 0x0d, 0xc0, 0x0c, 0xca, 0x4b, 0x8b, 0x43, - 0x30, 0x8b, 0xe1, 0x82, 0x86, 0xec, 0x5a, 0x42, 0x88, 0xd6, 0x00, 0xa3, 0x78, - 0x5c, 0xb6, 0x22, 0xd4, 0x68, 0xa4, 0xc6, 0x96, 0x9b, 0x37, 0x92, 0xf2, 0x48, - 0x50, 0x27, 0xd0, 0xad, 0x9a, 0xa4, 0xa9, 0xc2, 0xcc, 0x97, 0x2f, 0x9e, 0xe5, - 0x19, 0x0a, 0x95, 0xb1, 0xeb, 0x05, 0x8d, 0xdd, 0xd8, 0xc0, 0x8e, 0x7d, 0x75, - 0x3f, 0x5e, 0x01, 0x1b, 0x2b, 0xcf, 0xee, 0x1d, 0x52, 0xc1, 0xc4, 0xf2, 0xca, - 0xcd, 0xa3, 0x0b, 0xdb, 0x69, 0x30, 0x65, 0x3c, 0x0c, 0xc4, 0x48, 0x6e, 0x60, - 0xe8, 0x9f, 0xa8, 0x49, 0xb3, 0x20, 0x83, 0xba, 0x9d, 0xb4, 0x53, 0xfb, 0x8d, - 0xf6, 0x83, 0xcd, 0x68, 0x75, 0x4c, 0x87, 0xda, 0xa7, 0x31, 0xf5, 0x70, 0xa7, - 0xa4, 0x06, 0x0a, 0xf0, 0xce, 0x70, 0x0d, 0x31, 0xbc, 0xa7, 0xe7, 0x4b, 0x3e, - 0x3b, 0xa3, 0xd0, 0xe8, 0xa6, 0x39, 0x2a, 0x06, 0x2b, 0x8e, 0x86, 0xd9, 0xd7, - 0xd0, 0x0b, 0x21, 0x70, 0x1e, 0x7b, 0x06, 0x2e, 0x06, 0xb1, 0xbc, 0xd8, 0x2a, - 0x01, 0xd3, 0x75, 0x62, 0x6f, 0xbf, 0x87, 0x2d, 0x27, 0xfa, 0x45, 0x11, 0xf5, - 0xf8, 0xcf, 0x8c, 0x9a, 0xbc, 0xef, 0x2a, 0x99, 0x01, 0x76, 0xae, 0x33, 0x93, - 0x25, 0xd5, 0xa5, 0x88, 0xda, 0x57, 0x96, 0xfa, 0xae, 0x5b, 0xab, 0x7c, 0x82, - 0x97, 0x7c, 0x0f, 0xf7, 0x97, 0x09, 0x3e, 0x2c, 0x1f, 0x3a, 0xe8, 0x55, 0xf6, - 0x5a, 0xea, 0x91, 0xe1, 0x31, 0x2f, 0xc6, 0xb8, 0xa4, 0x35, 0x1a, 0x2e, 0xc0, - 0x3e, 0x02, 0xe5, 0xd0, 0x2f, 0x53, 0x35, 0x4b, 0x05, 0x2f, 0xd3, 0xda, 0x0d, - 0xff, 0x82, 0xcd, 0x1f, 0x55, 0xeb, 0xca, 0x57, 0xb6, 0x33, 0x7c, 0x85, 0x93, - 0x8a, 0x79, 0x81, 0x3d, 0x20, 0x21, 0xd6, 0x09, 0x4c, 0x68, 0xb3, 0x75, 0xe9, - 0x84, 0xf6, 0x83, 0x93, 0x30, 0x08, 0x71, 0xe3, 0x48, 0xfc, 0x52, 0x36, 0xcc, - 0xa6, 0x33, 0x05, 0x44, 0xe5, 0x46, 0x39, 0xb5, 0x41, 0x87, 0x01, 0xff, 0x4c, - 0xc4, 0x5a, 0x31, 0xf6, 0x2e, 0xdd, 0x84, 0x3d, 0xbb, 0xdc, 0x5a, 0xa7, 0x27, - 0xab, 0x79, 0xb4, 0x42, 0x68, 0x3c, 0x49, 0x56, 0xbb, 0x00, 0xac, 0x67, 0xfd, - 0x0e, 0xb6, 0x91, 0x03, 0x00, 0xc0, 0xd4, 0x8a, 0x3d, 0xbc, 0x04, 0x29, 0x7a, - 0xce, 0x23, 0x71, 0x67, 0x8c, 0xb8, 0x1a, 0x66, 0xb7, 0x40, 0x09, 0xe5, 0x7a, - 0x85, 0xf7, 0xbf, 0x68, 0xa2, 0xe4, 0x82, 0x00, 0x0f, 0x82, 0x1c, 0x74, 0x50, - 0x73, 0xa1, 0x5d, 0x5c, 0xd0, 0xfc, 0xc5, 0x74, 0x39, 0xa4, 0x35, 0x0e, 0xaf, - 0x09, 0x8d, 0xfb, 0x82, 0xa0, 0x85, 0xea, 0x8a, 0x4a, 0xf6, 0xfa, 0x83, 0x81, - 0xf0, 0x65, 0x88, 0x19, 0xea, 0xb4, 0x83, 0xf6, 0x5b, 0x32, 0x5d, 0x5a, 0xed, - 0xa1, 0x52, 0x32, 0xcf, 0xad, 0xec, 0x75, 0xab, 0x18, 0x66, 0xe4, 0xc0, 0x15, - 0x5a, 0x9c, 0x74, 0xa7, 0xa5, 0x7c, 0xcf, 0x34, 0xc4, 0x83, 0xac, 0x7d, 0xa1, - 0x58, 0x8a, 0x1b, 0x6b, 0x99, 0x41, 0xf1, 0x10, 0x40, 0xf9, 0x4c, 0xf7, 0x8f, - 0xad, 0x89, 0xbf, 0x11, 0xfe, 0xd6, 0x9a, 0xa0, 0xd8, 0x31, 0x05, 0xad, 0xac, - 0xdd, 0x4e, 0x5f, 0x04, 0xa6, 0x24, 0x24, 0x02, 0x3c, 0x9b, 0x9e, 0x33, 0xc4, - 0xfb, 0x7f, 0x12, 0xbd, 0xf2, 0x1f, 0x07, 0xf2, 0x65, 0xc5, 0x37, 0x88, 0x7c, - 0xe7, 0xff, 0x9d, 0x9c, 0x18, 0x8b, 0xdf, 0x15, 0xe3, 0x25, 0xa0, 0x0d, 0xf2, - 0x66, 0xa4, 0x4f, 0x9b, 0x4b, 0x7e, 0x5b, 0x3f, 0x0b, 0x0b, 0x2b, 0xd1, 0x82, - 0x26, 0x38, 0xbd, 0x86, 0x3b, 0xf5, 0x7b, 0xfd, 0xaa, 0x5d, 0xa2, 0xb0, 0xcb, - 0x93, 0x1f, 0x69, 0xc7, 0x3a, 0x56, 0x07, 0xdf, 0x71, 0xcd, 0x26, 0x28, 0xc9, - 0x87, 0x42, 0x9f, 0x36, 0xdc, 0x50, 0x5c, 0xcc, 0x43, 0x33, 0x56, 0x05, 0x27, - 0x6f, 0x2b, 0xfd, 0x8f, 0x2d, 0x3e, 0x9c, 0x63, 0x70, 0xcf, 0x55, 0x99, 0xf6, - 0x66, 0xb6, 0xcb, 0x7e, 0x2c, 0xef, 0x58, 0x13, 0x7b, 0xa7, 0xda, 0xc2, 0x8b, - 0x14, 0x36, 0x8d, 0x28, 0xe7, 0x23, 0xfe, 0x7c, 0x6e, 0x59, 0x39, 0xc2, 0x4c, - 0x6c, 0x84, 0xf3, 0x84, 0x5f, 0x46, 0x41, 0x90, 0x15, 0x44, 0xed, 0xbb, 0xe3, - 0xac, 0x46, 0x4c, 0xf4, 0x39, 0x19, 0x60, 0x15, 0x34, 0x29, 0x76, 0x81, 0x07, - 0x7c, 0x2f, 0x08, 0xe3, 0xa7, 0x80, 0x57, 0x77, 0xb0, 0x8a, 0xce, 0xfd, 0xc1, - 0xaa, 0xab, 0x74, 0x5e, 0x56, 0x20, 0x27, 0xc6, 0xa1, 0x81, 0xaf, 0x40, 0x98, - 0x3b, 0xb1, 0xcf, 0xaa, 0xcb, 0xd8, 0xc0, 0x63, 0xd0, 0xf6, 0xfc, 0x1a, 0x90, - 0xb0, 0x8e, 0xfd, 0xb9, 0xbc, 0xaa, 0xd1, 0xe2, 0x07, 0x70, 0xff, 0xb8, 0xaa, - 0xbf, 0x83, 0xfc, 0x07, 0x34, 0x96, 0x4c, 0x0d, 0x05, 0xae, 0xc9, 0x29, 0x43, - 0xab, 0x49, 0x5c, 0x4d, 0x0c, 0x10, 0xf6, 0xb6, 0x68, 0xdf, 0x7f, 0x71, 0x24, - 0x74, 0xf4, 0x69, 0xe3, 0x58, 0x66, 0xb3, 0xee, 0x93, 0xf2, 0x1f, 0x8a, 0x6f, - 0x82, 0xc9, 0x24, 0xde, 0x3e, 0xe8, 0x98, 0x9a, 0x82, 0x8a, 0x05, 0xa4, 0x6b, - 0x38, 0x20, 0x26, 0xbc, 0x37, 0x92, 0xf1, 0x35, 0xbf, 0x5f, 0x68, 0x78, 0x7d, - 0x37, 0x0c, 0xa8, 0xc4, 0xc4, 0x07, 0x0d, 0x00, 0xa6, 0x26, 0x69, 0x38, 0xfe, - 0x89, 0x21, 0x79, 0x99, 0xf7, 0x60, 0xa6, 0x1d, 0xbe, 0x55, 0xf1, 0xbd, 0x0c, - 0x9f, 0x6f, 0xb7, 0x0d, 0xed, 0x8a, 0x1a, 0xcb, 0x90, 0xe6, 0xa2, 0xeb, 0xb7, - 0x92, 0xa0, 0xd6, 0x77, 0xa3, 0xea, 0xca, 0x23, 0xed, 0xeb, 0x07, 0xb7, 0x4e, - 0x65, 0x2a, 0x0b, 0xc5, 0x0c, 0x6c, 0x08, 0x3a, 0x55, 0xd6, 0xc7, 0x30, 0x6e, - 0x74, 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, 0x00, - ], - txid: [ - 0xd1, 0xb7, 0x08, 0x2a, 0xdd, 0xa4, 0x5b, 0x2a, 0x92, 0x48, 0xb1, 0xd5, 0x8e, - 0x3a, 0x99, 0xa8, 0xdc, 0xc6, 0xc9, 0xd5, 0x5b, 0x09, 0xfb, 0x6b, 0x99, 0xd6, - 0xc0, 0x71, 0x01, 0xe7, 0xda, 0x0d, - ], - auth_digest: [ - 0x81, 0xd8, 0xb1, 0x83, 0x4a, 0x34, 0x49, 0xe6, 0x4c, 0x69, 0xc1, 0x86, 0x2a, - 0x82, 0x07, 0xe2, 0x64, 0xee, 0xd4, 0xf9, 0x78, 0x20, 0x36, 0x88, 0x67, 0xe8, - 0x09, 0x46, 0xfd, 0xd8, 0xe6, 0x24, - ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, - sighash_shielded: [ - 0xd1, 0xb7, 0x08, 0x2a, 0xdd, 0xa4, 0x5b, 0x2a, 0x92, 0x48, 0xb1, 0xd5, 0x8e, - 0x3a, 0x99, 0xa8, 0xdc, 0xc6, 0xc9, 0xd5, 0x5b, 0x09, 0xfb, 0x6b, 0x99, 0xd6, - 0xc0, 0x71, 0x01, 0xe7, 0xda, 0x0d, - ], - sighash_all: None, - sighash_none: None, - sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, - sighash_single_anyone: None, - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x48, - 0x73, 0x68, 0x18, 0x67, 0xdd, 0xee, 0x01, 0x00, 0x03, 0x22, 0x2e, 0x20, 0xce, - 0x22, 0x76, 0x03, 0x00, 0x06, 0x00, 0x51, 0x65, 0x65, 0x51, 0x65, 0x3a, 0xcd, - 0x55, 0x5f, 0xa6, 0x3f, 0x01, 0x00, 0x06, 0xac, 0x65, 0x65, 0x65, 0x63, 0x53, - 0x20, 0x56, 0x6e, 0x1f, 0x78, 0x7a, 0x02, 0x00, 0x06, 0x65, 0x53, 0x6a, 0xac, - 0x51, 0x63, 0x00, 0x00, 0x02, 0x57, 0xf6, 0x1d, 0x24, 0x1c, 0xe3, 0xca, 0x10, - 0x23, 0xcb, 0x68, 0xdb, 0x08, 0x60, 0xa6, 0xd7, 0x61, 0x03, 0xb1, 0x2a, 0x61, - 0xd6, 0xff, 0xdd, 0x6c, 0xad, 0x71, 0x7a, 0xf9, 0xd7, 0x96, 0x06, 0x6d, 0xc6, - 0xc4, 0x63, 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, 0xe3, 0x66, 0xbc, 0x63, 0x12, - 0x3e, 0x3e, 0x6d, 0xd3, 0x6e, 0xed, 0xd3, 0x13, 0x6f, 0xce, 0x8d, 0xee, 0xca, - 0x2a, 0xa0, 0x9a, 0x32, 0x16, 0x27, 0x0d, 0xce, 0x70, 0xd1, 0xcc, 0xa6, 0x96, - 0x28, 0x45, 0x02, 0xac, 0x98, 0x3b, 0x1e, 0x17, 0x51, 0x75, 0x78, 0x9a, 0x7c, - 0x59, 0xb0, 0x22, 0xe6, 0x50, 0x06, 0xbc, 0x73, 0x47, 0x98, 0xf4, 0xca, 0xd0, - 0xf2, 0xf9, 0x8c, 0xa2, 0x32, 0xe1, 0x1b, 0x58, 0x0a, 0x30, 0xd2, 0xc0, 0xe8, - 0x79, 0x50, 0xdd, 0x84, 0x83, 0x9b, 0xc3, 0xea, 0x7f, 0xde, 0xe4, 0xed, 0x71, - 0x44, 0x9c, 0x30, 0x10, 0x61, 0x2f, 0x61, 0x06, 0x45, 0xe0, 0xaa, 0x76, 0x43, - 0x23, 0x91, 0xcf, 0xae, 0x5f, 0xcd, 0x09, 0x78, 0xc1, 0x0e, 0x0d, 0xcc, 0xde, - 0x6a, 0x67, 0x24, 0x30, 0xf3, 0x1c, 0x6d, 0x6c, 0xa7, 0xaf, 0xab, 0x6e, 0x67, - 0x57, 0x61, 0x00, 0x8b, 0x0d, 0xad, 0xde, 0xec, 0xaa, 0x60, 0x44, 0x70, 0xbb, - 0xe0, 0xfa, 0xda, 0x25, 0x5d, 0x29, 0x0e, 0x92, 0xb1, 0x90, 0xc2, 0xc2, 0xd8, - 0xc2, 0xde, 0xe5, 0x45, 0x5d, 0x1f, 0xa9, 0xa9, 0xf3, 0xdb, 0x77, 0x79, 0xb5, - 0x84, 0x64, 0x34, 0x64, 0xaa, 0x80, 0x14, 0xba, 0x66, 0x99, 0x4d, 0xe2, 0x55, - 0x17, 0xf8, 0x39, 0x80, 0xe6, 0x6e, 0xe4, 0xf6, 0x23, 0x14, 0xae, 0x6d, 0xbe, - 0xf4, 0x52, 0xd5, 0xd3, 0x8b, 0x0a, 0x16, 0xf3, 0x99, 0x1f, 0x36, 0xd8, 0xa8, - 0xb3, 0x9d, 0xdc, 0x0d, 0x55, 0x95, 0xee, 0xd9, 0x87, 0x62, 0x87, 0x8c, 0xdf, - 0x3f, 0x4a, 0x2e, 0xdc, 0x5c, 0xda, 0x77, 0xd5, 0xfe, 0x4f, 0xaf, 0x63, 0xa1, - 0x5f, 0x56, 0x8a, 0x54, 0x0d, 0xa5, 0x7d, 0xd9, 0xbe, 0xb6, 0xfb, 0x1a, 0x97, - 0x7c, 0xcb, 0x91, 0xb4, 0xd7, 0x9c, 0xb3, 0x9b, 0x28, 0x91, 0x1a, 0x29, 0xe7, - 0xbf, 0x02, 0x8a, 0xc6, 0x10, 0x37, 0x96, 0xdf, 0xb6, 0xb2, 0x09, 0x67, 0x23, - 0x9a, 0xd3, 0x73, 0xc3, 0x8c, 0x53, 0xf6, 0xdf, 0x18, 0x23, 0xd4, 0x95, 0x0a, - 0x02, 0x83, 0xe9, 0x9b, 0x9c, 0x06, 0xab, 0x29, 0x66, 0x66, 0x7c, 0x9d, 0xf6, - 0x77, 0x71, 0x6b, 0x0c, 0xad, 0xed, 0x81, 0x8d, 0xf9, 0xe4, 0x49, 0xc0, 0x72, - 0xe2, 0x2f, 0x9d, 0x98, 0xbb, 0x0f, 0x9b, 0x03, 0xbd, 0x5f, 0xd0, 0x13, 0xfc, - 0xef, 0x3e, 0xd6, 0xa4, 0x9a, 0xeb, 0x98, 0x72, 0x02, 0x54, 0x08, 0x7e, 0xf7, - 0x28, 0xe3, 0x19, 0x47, 0xff, 0xe8, 0xf7, 0x66, 0xe6, 0x3e, 0xe4, 0x6f, 0xf2, - 0x08, 0x16, 0xd5, 0xfa, 0x8f, 0xf5, 0x5a, 0x26, 0x39, 0x89, 0x61, 0x49, 0x0a, - 0xb9, 0xae, 0x36, 0x6f, 0xc5, 0xa2, 0xd1, 0x99, 0x6e, 0xd6, 0x93, 0xcc, 0xca, - 0x82, 0x35, 0x6f, 0x60, 0x0a, 0xb0, 0x99, 0xf6, 0xec, 0xa8, 0xbf, 0xe6, 0x45, - 0x27, 0x0d, 0x3f, 0x95, 0xed, 0xba, 0x5b, 0x0d, 0xe7, 0xa3, 0x28, 0x19, 0x23, - 0x3b, 0xcc, 0x75, 0x4a, 0x5c, 0xe2, 0xe5, 0xea, 0x07, 0x84, 0x2e, 0x5f, 0xf2, - 0xce, 0xbe, 0x62, 0xad, 0x76, 0xe8, 0xef, 0xf8, 0xd1, 0x5e, 0xa4, 0xc2, 0x4a, - 0x5f, 0x20, 0x78, 0x68, 0x31, 0x9a, 0x5a, 0xf6, 0xb0, 0x35, 0xbe, 0x3f, 0x44, - 0xf4, 0x34, 0x09, 0x4f, 0x6e, 0x52, 0x5b, 0xe6, 0x14, 0xda, 0xc9, 0x20, 0xa3, - 0x30, 0xbd, 0xfb, 0x26, 0xd7, 0x5f, 0xe7, 0xb4, 0xb3, 0x65, 0xd0, 0x94, 0x45, - 0x92, 0x50, 0xaa, 0xa5, 0x54, 0x44, 0x89, 0xfb, 0x1d, 0x99, 0x25, 0x81, 0x80, - 0x0a, 0x77, 0xb8, 0x91, 0x21, 0x57, 0xfc, 0x97, 0x13, 0xaa, 0xac, 0x25, 0xb4, - 0xc2, 0x6e, 0xb0, 0x3f, 0x71, 0x66, 0x46, 0x61, 0x9a, 0xf0, 0x24, 0x56, 0xae, - 0x69, 0x59, 0x62, 0xfe, 0x5e, 0x93, 0x1a, 0x63, 0xb5, 0xc7, 0x90, 0x52, 0xec, - 0xd3, 0x33, 0xe1, 0x84, 0x12, 0xdb, 0x91, 0xe1, 0x5f, 0x7c, 0xbc, 0x70, 0xb4, - 0xcd, 0x7e, 0x8e, 0x3c, 0x95, 0x1f, 0x35, 0x85, 0x72, 0xe3, 0x77, 0x67, 0xe7, - 0xd5, 0x27, 0x04, 0xa6, 0x72, 0x1b, 0x30, 0xef, 0xc4, 0x10, 0x17, 0xae, 0x4d, - 0x23, 0x15, 0x58, 0xc5, 0xc8, 0x2c, 0xc7, 0xdd, 0x7e, 0x33, 0x56, 0xc0, 0x9d, - 0xc2, 0x49, 0x06, 0xf0, 0x43, 0x8d, 0xfc, 0xc3, 0x00, 0x85, 0x6a, 0xc2, 0xce, - 0xd8, 0xf7, 0x7f, 0xa8, 0x01, 0x57, 0x36, 0xc6, 0x61, 0xe8, 0x02, 0x48, 0xae, - 0xeb, 0x77, 0x48, 0x74, 0xaa, 0x79, 0xd2, 0x90, 0xb8, 0xf5, 0x02, 0x7a, 0x0a, - 0x50, 0x95, 0x37, 0xfc, 0x7c, 0x68, 0x9b, 0x7a, 0xd8, 0x61, 0x16, 0xcf, 0xec, - 0x26, 0x47, 0xcc, 0xaa, 0xe1, 0xc7, 0x4b, 0x41, 0x6f, 0x3e, 0x6a, 0xe8, 0xf7, - 0xcc, 0x60, 0xea, 0xaf, 0x7b, 0x6a, 0x59, 0x0d, 0x51, 0x54, 0x41, 0x38, 0xe1, - 0x73, 0x29, 0x45, 0x60, 0x3a, 0x53, 0x46, 0x2c, 0x60, 0xe1, 0xf6, 0xcb, 0x0c, - 0x9c, 0xa0, 0x39, 0x0c, 0x48, 0x82, 0x24, 0xc3, 0x13, 0x26, 0x9f, 0xcd, 0x59, - 0xfc, 0xb6, 0x11, 0xfb, 0x2d, 0x9b, 0x4c, 0x8f, 0xa6, 0x01, 0xbb, 0x1c, 0xb8, - 0xd0, 0x7d, 0x79, 0x7b, 0xf5, 0xde, 0x52, 0xbc, 0xee, 0xb0, 0x23, 0x01, 0xc8, - 0x96, 0x2a, 0xc1, 0xfc, 0x04, 0x91, 0xdc, 0x81, 0xaf, 0xfd, 0x6c, 0x1e, 0xbf, - 0x89, 0xa1, 0x3d, 0x6f, 0x29, 0x0e, 0xda, 0x5d, 0x5c, 0xef, 0x38, 0x22, 0x15, - 0xc5, 0xe9, 0x51, 0xd7, 0x13, 0x05, 0xef, 0x33, 0xd9, 0x73, 0x71, 0x26, 0xd0, - 0xe6, 0x62, 0x90, 0x5f, 0x12, 0x50, 0x92, 0x6f, 0x6a, 0x22, 0x99, 0x90, 0xe3, - 0x8f, 0x69, 0xad, 0x9a, 0x91, 0x92, 0xb3, 0x02, 0xf2, 0x6b, 0xdd, 0xa4, 0x65, - 0xd9, 0x0b, 0x94, 0xb1, 0x2c, 0x57, 0xfa, 0x3f, 0xd6, 0x93, 0x00, 0x83, 0xf1, - 0x84, 0x43, 0x8d, 0x8a, 0x88, 0x9d, 0x3f, 0x5e, 0xce, 0xa2, 0xc6, 0xd2, 0x3d, - 0x67, 0x36, 0xf2, 0xa0, 0xf1, 0x8e, 0x26, 0xf4, 0xfa, 0x45, 0xd1, 0xbe, 0x8f, - 0x3d, 0xc4, 0xa7, 0x07, 0x13, 0x7e, 0x95, 0xd2, 0xad, 0x59, 0x4f, 0x6c, 0xb9, - 0x3c, 0x75, 0x97, 0xf2, 0xec, 0xf8, 0x85, 0x50, 0x74, 0xbe, 0x99, 0x1f, 0x42, - 0x4c, 0xe5, 0x2b, 0x14, 0xe3, 0xbb, 0xd4, 0x6d, 0x34, 0x16, 0x6b, 0xe0, 0x16, - 0x08, 0x0d, 0x04, 0x96, 0x23, 0x9a, 0xb4, 0xab, 0x6b, 0x16, 0xf3, 0xfa, 0x49, - 0xab, 0xa2, 0x2d, 0x16, 0xac, 0x36, 0xf0, 0x12, 0xec, 0x89, 0x09, 0xff, 0x51, - 0xa4, 0xd0, 0x2f, 0x9d, 0xcd, 0x11, 0x19, 0x3d, 0x7d, 0x1c, 0x1f, 0x62, 0x99, - 0x91, 0x2a, 0x82, 0x74, 0xc2, 0xfb, 0xb1, 0xaf, 0xa2, 0x33, 0xe8, 0x2c, 0x1e, - 0x83, 0xc0, 0x81, 0x38, 0x19, 0x2e, 0xd6, 0xba, 0x75, 0x2e, 0x68, 0xf0, 0x6d, - 0x25, 0x40, 0xad, 0xac, 0xd8, 0x9b, 0x3b, 0xf5, 0xdb, 0xee, 0xcb, 0x65, 0x16, - 0x55, 0xb7, 0x70, 0xf5, 0xb9, 0x09, 0x6d, 0x57, 0x01, 0x5c, 0xa4, 0x02, 0xc6, - 0x7d, 0x92, 0x5c, 0x99, 0xac, 0xea, 0x3e, 0xe8, 0xcc, 0x0b, 0x54, 0x1d, 0x15, - 0xb1, 0xc2, 0x6b, 0x29, 0x48, 0x85, 0x9b, 0xd8, 0xb2, 0x99, 0x4e, 0xd0, 0x0f, - 0x16, 0xe9, 0x8c, 0x32, 0x01, 0x80, 0x29, 0x51, 0x66, 0x1a, 0xbb, 0x13, 0x53, - 0x50, 0xbf, 0xb6, 0x80, 0x3c, 0xe1, 0xe6, 0x37, 0x8b, 0x6a, 0xac, 0x4f, 0xab, - 0x52, 0x7c, 0x43, 0xcd, 0x45, 0xed, 0x0a, 0x3c, 0x1a, 0x4b, 0x9f, 0xb1, 0x8d, - 0xcc, 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, 0x63, 0x9c, 0xda, 0x00, 0x75, - 0xa2, 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, 0x99, 0x49, 0x5b, 0xd9, 0x13, - 0x3d, 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, 0xba, 0x92, 0xc7, 0xb6, 0x06, - 0xa5, 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, 0x59, 0x6f, 0x27, 0x88, 0xf3, - 0xc8, 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, 0xf5, 0xdd, 0x23, 0xdf, 0xdb, - 0xac, 0x13, 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, 0xfe, 0xd2, 0x29, 0x2c, 0x44, - 0xf7, 0x08, 0x34, 0xcf, 0x96, 0xc0, 0x5d, 0x58, 0x82, 0x7e, 0x69, 0xbf, 0xc2, - 0xe6, 0x96, 0xfa, 0x08, 0x74, 0x86, 0x9c, 0x02, 0xf3, 0xdc, 0xa1, 0x1c, 0x3b, - 0x90, 0xcb, 0x21, 0x4e, 0x68, 0xbc, 0x1c, 0xae, 0x03, 0x9d, 0x7a, 0x14, 0x6c, - 0xdc, 0x1d, 0x60, 0x9d, 0x7a, 0x6b, 0x3f, 0xd5, 0xd4, 0x61, 0xb0, 0x95, 0x1c, - 0x82, 0xcf, 0xb3, 0xe7, 0x63, 0xfa, 0xd2, 0xd1, 0xbc, 0x76, 0x78, 0xcd, 0xf8, - 0x27, 0x79, 0xf8, 0xfd, 0x5a, 0x1c, 0xe2, 0x2a, 0x8d, 0x3c, 0x45, 0x47, 0xab, - 0xd9, 0x59, 0x83, 0x8a, 0x46, 0xfb, 0x80, 0xaf, 0xe0, 0x1f, 0x8e, 0xcc, 0x99, - 0x31, 0x51, 0x3b, 0x19, 0x62, 0xec, 0x54, 0x08, 0x56, 0xcb, 0x18, 0x93, 0x87, - 0xcf, 0xbf, 0xcc, 0x0f, 0x7c, 0x68, 0x22, 0x3c, 0xba, 0x47, 0xfb, 0x0c, 0x9b, - 0x48, 0x6e, 0x4d, 0x99, 0x17, 0x19, 0x41, 0xf7, 0x67, 0x5a, 0x8b, 0x46, 0x32, - 0x8a, 0x3b, 0xc1, 0x09, 0xbf, 0x07, 0xc6, 0x6d, 0x5e, 0xde, 0x77, 0x1c, 0xc4, - 0xc7, 0x4c, 0xe8, 0x03, 0x33, 0x82, 0x91, 0x91, 0xee, 0xdc, 0x49, 0x35, 0x08, - 0xa6, 0x44, 0x53, 0x0a, 0x61, 0x44, 0xf2, 0x2d, 0xcf, 0x97, 0x52, 0x5a, 0x4c, - 0xdc, 0xa1, 0xad, 0x71, 0x07, 0x3b, 0x08, 0x0b, 0x73, 0xea, 0x45, 0x49, 0xf5, - 0x40, 0x1b, 0xff, 0x43, 0x18, 0x26, 0x8e, 0x6a, 0xd6, 0x37, 0x36, 0x31, 0x57, - 0xa1, 0x9a, 0x53, 0xf1, 0x23, 0xa0, 0xb0, 0xe1, 0x6d, 0x0b, 0x77, 0xf0, 0x20, - 0x28, 0xda, 0x46, 0x41, 0x00, 0xfd, 0xe7, 0x6d, 0x83, 0xdd, 0x0b, 0xb2, 0x24, - 0xf7, 0xb5, 0x7a, 0x00, 0xc0, 0x2f, 0x68, 0xae, 0x64, 0x8f, 0xdc, 0x52, 0x99, - 0x57, 0xa1, 0x04, 0x90, 0xdc, 0xe1, 0xfd, 0xdb, 0xb0, 0x90, 0x4f, 0x0d, 0x51, - 0x8b, 0xb3, 0x87, 0x54, 0x40, 0x19, 0x98, 0x3b, 0x61, 0x69, 0x75, 0xa7, 0x8e, - 0x74, 0xd8, 0x54, 0xfd, 0xdc, 0x49, 0xb2, 0x55, 0x16, 0x7b, 0x55, 0xef, 0x4b, - 0xee, 0x46, 0x56, 0x68, 0xb2, 0x0e, 0xa4, 0x11, 0x8c, 0xa5, 0x69, 0xae, 0x48, - 0x0e, 0x0f, 0x6e, 0x5e, 0x04, 0x3a, 0x35, 0x7b, 0x36, 0xd3, 0xab, 0x36, 0xc8, - 0x61, 0xf2, 0x27, 0x83, 0x01, 0xdc, 0xe5, 0x76, 0x74, 0xd5, 0x07, 0x3b, 0x3a, - 0x6f, 0x51, 0x03, 0xa0, 0x79, 0x3a, 0xf1, 0xb7, 0xd4, 0x6f, 0x95, 0x7e, 0x22, - 0xd8, 0xd2, 0x58, 0x3b, 0xf1, 0x81, 0x83, 0x6c, 0x3b, 0xe9, 0x93, 0x0b, 0xac, - 0x8f, 0xa4, 0x60, 0xe9, 0x68, 0xaa, 0x71, 0x09, 0x87, 0x0b, 0xbe, 0xd1, 0x7d, - 0xf5, 0xf8, 0x88, 0xc8, 0xca, 0x14, 0x67, 0xae, 0x17, 0xdb, 0xbc, 0xde, 0x31, - 0xc1, 0x10, 0x5c, 0xb5, 0xbd, 0xa8, 0x8a, 0xc6, 0xc6, 0x27, 0x00, 0x2c, 0xe2, - 0x1c, 0x02, 0x14, 0x0f, 0xfe, 0x81, 0xec, 0x58, 0xbf, 0x1e, 0x6d, 0x1b, 0xb7, - 0xaa, 0xad, 0xa4, 0x1f, 0xba, 0x0b, 0xb5, 0x88, 0x77, 0x8a, 0x7f, 0x65, 0x20, - 0x2a, 0xd8, 0x11, 0xea, 0x73, 0xd2, 0x6c, 0x74, 0x55, 0x03, 0x95, 0xaf, 0xf7, - 0x53, 0x25, 0x10, 0x7c, 0x9b, 0x3f, 0x9a, 0xe9, 0xdc, 0xdc, 0xd8, 0x6e, 0xd0, - 0x81, 0xa2, 0xe7, 0x42, 0x47, 0x19, 0xa3, 0xd1, 0x85, 0xb7, 0xe0, 0xa4, 0x3a, - 0x47, 0x2e, 0x29, 0x8a, 0xc0, 0xaf, 0xdc, 0x52, 0x87, 0xd7, 0xad, 0x12, 0x4c, - 0xd9, 0x40, 0x5a, 0x62, 0xcd, 0x1c, 0xa0, 0x8b, 0x28, 0x2e, 0xfe, 0xf7, 0xf9, - 0x28, 0xdf, 0x76, 0xe2, 0x82, 0x1a, 0x41, 0x84, 0x13, 0xeb, 0x7c, 0xea, 0xa5, - 0xff, 0x12, 0x90, 0xb0, 0x3e, 0xc9, 0x1c, 0xe6, 0xdd, 0x28, 0x13, 0x0c, 0x3a, - 0xb0, 0xb2, 0x3b, 0x60, 0x2b, 0xd5, 0xbe, 0x5d, 0xc2, 0x60, 0x03, 0xaa, 0xe0, - 0x4b, 0x33, 0xd7, 0xbd, 0x25, 0x90, 0xe9, 0x0c, 0x8c, 0x38, 0x8e, 0xa7, 0x95, - 0x51, 0x22, 0xdb, 0xac, 0xa6, 0x7b, 0x30, 0x39, 0x5a, 0x92, 0x8b, 0x57, 0xb8, - 0x57, 0x51, 0x23, 0x20, 0x5a, 0xe1, 0x91, 0x52, 0xe4, 0x1e, 0x00, 0x29, 0x31, - 0xb4, 0x57, 0x46, 0x19, 0x8e, 0x5d, 0xd9, 0x57, 0x1a, 0x56, 0xa7, 0xe0, 0xd4, - 0x23, 0xff, 0x27, 0x98, 0x9d, 0x3e, 0xb4, 0x17, 0xec, 0xd3, 0xc3, 0x09, 0x3f, - 0xb8, 0x2c, 0x56, 0x58, 0xe2, 0x96, 0x24, 0xc5, 0x32, 0x19, 0xa6, 0x0c, 0xd0, - 0xa8, 0xc4, 0xda, 0x36, 0x7e, 0x29, 0x04, 0x45, 0x76, 0x2a, 0x33, 0xce, 0x9a, - 0x01, 0x00, 0xc5, 0xec, 0x21, 0x49, 0x05, 0x4e, 0xa2, 0x41, 0x64, 0xe8, 0x5f, - 0x67, 0x44, 0xad, 0x0c, 0xac, 0xf1, 0xa8, 0xb7, 0x01, 0x26, 0xf4, 0x82, 0xc0, - 0x92, 0xed, 0x9f, 0x61, 0x27, 0xd2, 0x05, 0x0d, 0x32, 0xe8, 0x78, 0xa7, 0x96, - 0x53, 0xa1, 0xe8, 0x4d, 0xae, 0xc3, 0xeb, 0xe6, 0x2d, 0x5f, 0x6c, 0x4a, 0xbe, - 0x5c, 0xe9, 0x0a, 0x7f, 0xe2, 0xe5, 0x2a, 0x8d, 0x78, 0x46, 0xe8, 0xed, 0xf2, - 0xf2, 0xbc, 0xe0, 0x5a, 0x03, 0x7c, 0x82, 0x6f, 0x22, 0xca, 0xad, 0x12, 0x61, - 0x46, 0x7d, 0xcf, 0xb7, 0xd6, 0xb6, 0x13, 0x7a, 0xf4, 0x40, 0xa1, 0x3e, 0xc1, - 0x34, 0x3b, 0xde, 0x69, 0x55, 0x09, 0x28, 0xf3, 0x47, 0x08, 0xdf, 0x88, 0xcc, - 0xca, 0x08, 0x8c, 0x09, 0x05, 0x73, 0x3c, 0xd0, 0xc1, 0x46, 0x35, 0x52, 0x3b, - 0xef, 0x3c, 0x0c, 0xa1, 0x96, 0x2d, 0x13, 0x7d, 0x07, 0x9a, 0x89, 0xdc, 0x0a, - 0x7a, 0xa6, 0xa1, 0xa8, 0x8d, 0xea, 0x07, 0x5b, 0xa9, 0x96, 0xd3, 0xc3, 0x36, - 0x64, 0x8e, 0x86, 0x94, 0xd3, 0x21, 0x93, 0x53, 0x64, 0xcc, 0x8a, 0x31, 0x7f, - 0xc3, 0xf1, 0xd3, 0x0e, 0xeb, 0x87, 0xb8, 0x4e, 0xde, 0xc6, 0x2e, 0x2b, 0x0c, - 0x17, 0x28, 0x7b, 0xca, 0xd8, 0xef, 0x7f, 0x15, 0x30, 0x2c, 0xb9, 0x2c, 0x9e, - 0xdb, 0x84, 0x9c, 0x3c, 0x97, 0x89, 0x1a, 0x3c, 0x7a, 0x2d, 0xdc, 0xdc, 0x11, - 0x1d, 0x86, 0xa5, 0x0c, 0x38, 0xbd, 0x03, 0x87, 0x72, 0xc4, 0x14, 0x3d, 0x8b, - 0x7a, 0xcf, 0xd7, 0x4e, 0x32, 0x00, 0xb3, 0xea, 0x42, 0xfb, 0x06, 0x84, 0x5a, - 0x53, 0x32, 0x38, 0xf3, 0xc0, 0x6a, 0x64, 0x81, 0x1c, 0x59, 0xc3, 0x6e, 0x13, - 0xd3, 0xdf, 0x55, 0x41, 0x59, 0xec, 0xbf, 0x75, 0x32, 0xf5, 0x51, 0xb4, 0x52, - 0xb4, 0x76, 0x23, 0x32, 0x93, 0x9f, 0x17, 0xe6, 0xaa, 0xf7, 0xd8, 0xb9, 0xd3, - 0x58, 0xe2, 0x21, 0x8d, 0x4e, 0x0d, 0x69, 0xa4, 0xf1, 0x19, 0xe1, 0xc6, 0x4e, - 0xec, 0x4c, 0x8b, 0x53, 0x28, 0x00, - ], - txid: [ - 0x7f, 0x07, 0xf7, 0xc4, 0x52, 0x8d, 0xe7, 0x75, 0xdd, 0xd4, 0x35, 0x5c, 0x2f, - 0xa7, 0x5e, 0x4b, 0x8c, 0xb0, 0x47, 0x0a, 0xe0, 0x2a, 0x15, 0x55, 0x19, 0x72, - 0x28, 0x42, 0x83, 0x1e, 0x58, 0xe0, - ], - auth_digest: [ - 0x98, 0x03, 0xc3, 0x06, 0xbb, 0xfd, 0x4a, 0xd4, 0xa4, 0x8b, 0xc5, 0x69, 0xae, - 0x4e, 0x1f, 0xdb, 0x0a, 0x1d, 0x24, 0xe9, 0x3d, 0x76, 0xd2, 0x34, 0xae, 0xd6, - 0xa7, 0x5e, 0x35, 0x69, 0x11, 0xd4, - ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, - sighash_shielded: [ - 0x7f, 0x07, 0xf7, 0xc4, 0x52, 0x8d, 0xe7, 0x75, 0xdd, 0xd4, 0x35, 0x5c, 0x2f, - 0xa7, 0x5e, 0x4b, 0x8c, 0xb0, 0x47, 0x0a, 0xe0, 0x2a, 0x15, 0x55, 0x19, 0x72, - 0x28, 0x42, 0x83, 0x1e, 0x58, 0xe0, - ], - sighash_all: None, - sighash_none: None, - sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, - sighash_single_anyone: None, - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x70, - 0x71, 0x31, 0xf0, 0x1f, 0x5c, 0xc4, 0x18, 0x02, 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, - 0x3d, 0x0a, 0x2b, 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, 0x5b, 0x8c, 0x94, - 0xca, 0x80, 0xbb, 0x0a, 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, 0x83, 0x04, - 0xae, 0x25, 0x15, 0xd5, 0xf7, 0x05, 0x63, 0x52, 0x65, 0x63, 0x52, 0x0b, 0xe6, - 0x09, 0xd8, 0x73, 0x51, 0x10, 0x12, 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, - 0xfb, 0x63, 0x4c, 0xff, 0x26, 0x58, 0xba, 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, - 0x5e, 0xce, 0xfb, 0x30, 0x15, 0xee, 0x3f, 0x03, 0xca, 0x52, 0xa1, 0x77, 0x06, - 0x51, 0xac, 0xac, 0x65, 0xac, 0x00, 0x9d, 0x34, 0xc6, 0x40, 0x00, 0x00, 0x00, - 0x02, 0x45, 0xd9, 0xeb, 0xc8, 0x09, 0x24, 0x37, 0x25, 0xf3, 0x72, 0x0a, 0x24, - 0x9e, 0xf2, 0x47, 0x8f, 0x0b, 0x3a, 0x97, 0x07, 0xaa, 0xfb, 0xdf, 0x5c, 0x17, - 0x73, 0x6b, 0x7c, 0x16, 0x36, 0x07, 0x02, 0x8c, 0xc7, 0x03, 0xa8, 0x6f, 0x81, - 0x43, 0x5e, 0x7b, 0xb4, 0xe0, 0x89, 0x82, 0x91, 0x79, 0xb3, 0xe0, 0xa3, 0x48, - 0x21, 0x75, 0x80, 0x00, 0xaa, 0x59, 0xc9, 0xd4, 0x65, 0x24, 0x85, 0x29, 0x0e, - 0xc9, 0x6c, 0x30, 0xa6, 0x6e, 0x98, 0x1e, 0xad, 0x1b, 0x17, 0xcb, 0xaf, 0xc1, - 0xfd, 0x4e, 0x4b, 0x97, 0x52, 0xe0, 0xbe, 0xbe, 0x20, 0x51, 0x5c, 0xb5, 0x00, - 0x95, 0x1a, 0xb2, 0x65, 0xe5, 0x02, 0x68, 0x09, 0x27, 0x80, 0x85, 0x73, 0x93, - 0xd3, 0xf7, 0x84, 0xaa, 0xe2, 0x0d, 0x8f, 0x06, 0x02, 0xfd, 0x84, 0x42, 0xe0, - 0x18, 0x25, 0xc8, 0x8d, 0xfe, 0x55, 0xcf, 0x5d, 0xe3, 0x89, 0x36, 0x37, 0xba, - 0x8f, 0x09, 0x7d, 0xe6, 0xa9, 0xa9, 0x10, 0x2c, 0xdb, 0x0c, 0x3d, 0x9f, 0x25, - 0xc1, 0xac, 0xc7, 0x02, 0xbc, 0x6e, 0x18, 0xb8, 0x8b, 0x2e, 0x47, 0x0f, 0xbb, - 0xdc, 0x5d, 0xae, 0x3d, 0x33, 0xf3, 0xac, 0x4f, 0x07, 0x0f, 0xc3, 0x5e, 0x16, - 0x19, 0x78, 0x25, 0x9e, 0x5b, 0x8e, 0xdc, 0x74, 0x4d, 0x90, 0x91, 0x9a, 0xa7, - 0x70, 0xbb, 0x36, 0x21, 0x51, 0x28, 0xe5, 0x82, 0xb5, 0x96, 0x41, 0xe2, 0x38, - 0x52, 0xe9, 0x58, 0xeb, 0x8f, 0xc3, 0xc0, 0xaa, 0x96, 0x15, 0x2b, 0xa4, 0xf7, - 0x7f, 0x13, 0x8d, 0x6a, 0x67, 0x12, 0xa3, 0xae, 0x32, 0x26, 0x01, 0x58, 0x83, - 0xf8, 0x1d, 0xb2, 0x3e, 0x58, 0x3c, 0x86, 0x9c, 0x4c, 0x71, 0x14, 0x3a, 0x6f, - 0xff, 0xd6, 0x5e, 0x8d, 0xfd, 0xc5, 0x0c, 0x99, 0xa2, 0xf1, 0xf3, 0x14, 0xcd, - 0xcc, 0x71, 0x35, 0x9e, 0x23, 0x5f, 0x1d, 0x7d, 0xc2, 0xb5, 0xf3, 0x8e, 0xf7, - 0xb9, 0x70, 0x84, 0x31, 0x63, 0xc0, 0x3f, 0x9d, 0xd4, 0x0a, 0x80, 0x15, 0xef, - 0xdc, 0x87, 0x91, 0x95, 0x6a, 0x3f, 0x3c, 0xed, 0xd9, 0xea, 0x64, 0xf8, 0xef, - 0xa7, 0xa0, 0x81, 0x5a, 0x70, 0x38, 0x1d, 0x71, 0x46, 0x78, 0x17, 0xbd, 0x04, - 0xca, 0x52, 0x9a, 0xed, 0xe0, 0x7f, 0xf6, 0x0d, 0x17, 0x6a, 0xed, 0x0f, 0x85, - 0x5a, 0x2e, 0xae, 0xa8, 0x9e, 0xae, 0xac, 0xa8, 0x93, 0x58, 0xc0, 0x81, 0x82, - 0x6a, 0x08, 0x12, 0xa5, 0xbc, 0xa2, 0x8b, 0xe1, 0x37, 0x3f, 0x08, 0x6d, 0xbd, - 0xba, 0x7e, 0x43, 0xe2, 0x03, 0x21, 0x2c, 0x9f, 0xed, 0x21, 0x47, 0x4b, 0xa1, - 0x9a, 0x05, 0x5f, 0xfc, 0xc1, 0x79, 0x41, 0x2e, 0x89, 0x3a, 0x74, 0x48, 0x32, - 0x29, 0x8c, 0x5f, 0xe2, 0x4c, 0xc6, 0xb1, 0x86, 0x67, 0xf4, 0x9b, 0x34, 0xdf, - 0xb1, 0x23, 0x79, 0x26, 0x74, 0x19, 0xa9, 0xcb, 0x94, 0x03, 0xd8, 0x16, 0x7d, - 0x8d, 0x1e, 0x91, 0xd2, 0x81, 0x1a, 0x04, 0x3b, 0x29, 0x24, 0x3b, 0x06, 0x9b, - 0x37, 0x58, 0x78, 0x47, 0xdc, 0x6f, 0xcd, 0xdb, 0x18, 0x31, 0xbd, 0x1c, 0xc2, - 0x56, 0x7c, 0xa0, 0x33, 0xac, 0x40, 0xf7, 0x4a, 0xb6, 0x95, 0x5f, 0x68, 0x3b, - 0x12, 0xe4, 0xe8, 0x25, 0x4e, 0x4e, 0xa7, 0x60, 0xd3, 0x8b, 0x3f, 0x46, 0x79, - 0x1c, 0x5c, 0x4c, 0xb1, 0x2b, 0xc7, 0xcc, 0xb0, 0xed, 0x18, 0x65, 0xf2, 0x5d, - 0x60, 0x1c, 0x30, 0x3f, 0x81, 0xfb, 0x1f, 0xa1, 0xdb, 0x48, 0x53, 0x3d, 0x3d, - 0x6b, 0x28, 0x8e, 0x4d, 0x9a, 0x4d, 0xff, 0x8e, 0xc2, 0x1c, 0x96, 0xf5, 0x78, - 0x39, 0x97, 0x10, 0xc8, 0x25, 0xfe, 0x7e, 0x32, 0xf9, 0x3a, 0x8c, 0x07, 0x43, - 0xf9, 0xeb, 0xd5, 0x4c, 0xc1, 0x51, 0xc7, 0x61, 0x03, 0x37, 0xae, 0xbf, 0x7e, - 0x9b, 0x91, 0x57, 0x20, 0xa5, 0x43, 0x51, 0xd4, 0x9a, 0xb8, 0xc2, 0x2f, 0xa3, - 0x49, 0x98, 0xdc, 0xf5, 0x83, 0xd4, 0x38, 0x73, 0x61, 0xef, 0x3f, 0xf8, 0x6f, - 0x50, 0xec, 0x53, 0xf4, 0x92, 0x49, 0xe4, 0xad, 0x34, 0x96, 0x03, 0x06, 0x6f, - 0xc9, 0xc6, 0x61, 0xd6, 0x9f, 0x91, 0x1d, 0xfa, 0x72, 0x41, 0xc8, 0xd5, 0x79, - 0x2d, 0x43, 0xc4, 0x57, 0xd5, 0xde, 0x96, 0x52, 0x3a, 0x53, 0xd6, 0x67, 0xec, - 0x5c, 0x4e, 0xf9, 0xd5, 0x02, 0xa1, 0x6f, 0x15, 0x22, 0x47, 0x58, 0x96, 0xd7, - 0x9b, 0xc5, 0x78, 0x33, 0xe9, 0x77, 0x17, 0x1c, 0x32, 0x4d, 0xce, 0x2a, 0x1e, - 0xa1, 0xe4, 0x30, 0x4f, 0x49, 0xe4, 0x3a, 0xe0, 0x65, 0xe3, 0xfb, 0x19, 0x6f, - 0x76, 0xd9, 0xb8, 0x79, 0xc7, 0x20, 0x08, 0x62, 0xea, 0xd1, 0x8d, 0xea, 0x5f, - 0xb6, 0xa1, 0x7a, 0xce, 0xa3, 0x33, 0x86, 0xeb, 0x4c, 0xa1, 0xb5, 0x14, 0x86, - 0xa9, 0x14, 0x8f, 0xbd, 0xf9, 0xa9, 0x53, 0x32, 0xaa, 0x60, 0x5c, 0x5d, 0x54, - 0x83, 0xce, 0x4b, 0xa8, 0xec, 0xe0, 0x1a, 0x8f, 0xf2, 0xb7, 0xef, 0x82, 0xd0, - 0x5c, 0x0b, 0x6e, 0x86, 0x1b, 0x91, 0x5f, 0x13, 0xca, 0x0e, 0xb3, 0xea, 0x13, - 0xd5, 0x07, 0x08, 0x07, 0xa2, 0xcb, 0x66, 0x80, 0xa2, 0x49, 0xea, 0x9c, 0x72, - 0x24, 0x39, 0x2c, 0xbc, 0x8a, 0xb8, 0x25, 0x01, 0xb2, 0x6f, 0x11, 0x2a, 0xc7, - 0x89, 0xa1, 0x2a, 0x31, 0xad, 0x13, 0x14, 0xe2, 0xed, 0xe0, 0x8f, 0xad, 0x31, - 0x43, 0xaf, 0x30, 0xc2, 0x7f, 0x40, 0x3b, 0xc8, 0x66, 0xc7, 0x55, 0x17, 0x78, - 0x52, 0xaf, 0xd0, 0xab, 0xb9, 0x0a, 0xde, 0x1d, 0x68, 0x27, 0x26, 0xf4, 0x20, - 0x08, 0xb4, 0x6a, 0xd7, 0xf8, 0xab, 0xdb, 0x18, 0x11, 0x7f, 0x72, 0x64, 0x13, - 0x90, 0xf0, 0x86, 0xb6, 0xe1, 0x49, 0x8b, 0xe6, 0x95, 0x48, 0x52, 0x7e, 0x6a, - 0xda, 0x2b, 0x38, 0xb9, 0xfe, 0x12, 0x1e, 0xf6, 0x70, 0xaf, 0x74, 0x37, 0xd3, - 0x25, 0x36, 0xd5, 0xcf, 0x5c, 0x4a, 0xb1, 0x9d, 0xd9, 0x97, 0x71, 0x58, 0x2d, - 0x03, 0x81, 0x04, 0xb7, 0xe0, 0x39, 0xa3, 0x76, 0xf7, 0xac, 0xbb, 0xea, 0xdb, - 0x34, 0xf9, 0x45, 0xbe, 0xb9, 0xd7, 0xca, 0x0e, 0x4e, 0x3d, 0x5c, 0x5e, 0x4e, - 0xb1, 0xd8, 0x52, 0x6e, 0xbd, 0x13, 0xda, 0xcb, 0x1b, 0xa3, 0x57, 0x35, 0xc6, - 0xd0, 0x4a, 0x45, 0x55, 0xac, 0xf4, 0xbf, 0x11, 0x76, 0x26, 0x50, 0x0d, 0x77, - 0xb3, 0x81, 0x89, 0xdd, 0x48, 0x88, 0x04, 0x12, 0x76, 0x32, 0x3f, 0xdc, 0x4c, - 0x86, 0x30, 0xfb, 0x06, 0xc0, 0x1b, 0xe7, 0xe9, 0x81, 0x5e, 0x72, 0x00, 0x6d, - 0x98, 0x24, 0x69, 0xdc, 0x7f, 0xfc, 0x16, 0x90, 0x03, 0xc1, 0xf5, 0x76, 0xf0, - 0x09, 0x2f, 0x7a, 0x07, 0x10, 0xd4, 0xf2, 0x06, 0xb1, 0x18, 0xf4, 0x57, 0x9f, - 0xb2, 0x69, 0xc1, 0x22, 0xb1, 0x49, 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, 0xe3, - 0x81, 0x93, 0xbc, 0x7b, 0xdc, 0x8b, 0x23, 0xa2, 0xc9, 0xf9, 0x1e, 0x0f, 0x96, - 0x7a, 0xb9, 0x4a, 0xd7, 0xb4, 0x4c, 0x2d, 0x71, 0xd3, 0x4c, 0x7a, 0xb0, 0xc2, - 0xec, 0xb2, 0xba, 0x64, 0x2c, 0x48, 0xfa, 0xa7, 0x8b, 0x3e, 0x63, 0x9b, 0xa8, - 0xa5, 0x7c, 0x7a, 0x91, 0x6a, 0x74, 0x38, 0x8e, 0xe8, 0xf1, 0x28, 0x1f, 0x9a, - 0xde, 0x0a, 0xe2, 0xa2, 0x61, 0x3a, 0x06, 0x12, 0xc4, 0x69, 0xdf, 0x79, 0x2b, - 0x8d, 0xf4, 0xca, 0xe4, 0xfc, 0x25, 0x28, 0x09, 0xd0, 0x6a, 0xd4, 0xfb, 0xc1, - 0xaf, 0x52, 0x48, 0xa7, 0xcc, 0x35, 0xcb, 0x2e, 0x58, 0x21, 0x79, 0x11, 0x95, - 0x66, 0x64, 0x2b, 0x4c, 0x1f, 0xe9, 0xd3, 0x32, 0x1c, 0x15, 0x41, 0x36, 0xaf, - 0x1f, 0x3f, 0x07, 0xda, 0x9a, 0x39, 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, - 0x98, 0x7a, 0xdf, 0xe9, 0x56, 0x48, 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, - 0x88, 0x41, 0x58, 0x30, 0x99, 0xaf, 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, - 0x34, 0x7e, 0x40, 0xb6, 0xfd, 0x8c, 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, - 0x9a, 0x02, 0x19, 0xbc, 0x3e, 0x4e, 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, - 0x16, 0x86, 0x08, 0x68, 0x76, 0xbe, 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, - 0x8f, 0x4f, 0xab, 0x3d, 0x28, 0xc0, 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, - 0xf8, 0x89, 0x46, 0xfb, 0x40, 0xcf, 0xa5, 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, - 0x3c, 0x83, 0x47, 0xec, 0xee, 0x93, 0xd4, 0x6d, 0x14, 0x0b, 0xb5, 0xf6, 0x95, - 0x31, 0xd6, 0x66, 0x54, 0x8b, 0x10, 0x9c, 0xe7, 0x64, 0xbe, 0xad, 0x7c, 0x87, - 0xbd, 0x4c, 0x87, 0x64, 0x94, 0xde, 0x82, 0xdb, 0x6e, 0x50, 0x73, 0xa6, 0xc9, - 0x4f, 0x7c, 0x09, 0x9a, 0x40, 0xd7, 0xa3, 0x1c, 0x4a, 0x04, 0xb6, 0x9c, 0x9f, - 0xcc, 0xf3, 0xc7, 0xdd, 0x56, 0xf5, 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, 0xf7, - 0x95, 0x39, 0x81, 0xd5, 0x5a, 0x96, 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, - 0x42, 0xe5, 0xba, 0xfe, 0xc8, 0x84, 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, - 0xc4, 0x60, 0xf9, 0x8f, 0xeb, 0x82, 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, - 0x76, 0x79, 0x82, 0x36, 0xc5, 0xca, 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, - 0x4d, 0x87, 0x13, 0xe5, 0x6c, 0x77, 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, - 0x3a, 0x88, 0x54, 0xbc, 0x6e, 0x65, 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, - 0x0b, 0x73, 0xba, 0x24, 0x1b, 0xf7, 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, - 0x96, 0x87, 0xac, 0x52, 0x69, 0xfd, 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, - 0x26, 0x76, 0x85, 0x99, 0x8a, 0x3f, 0x7d, 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, - 0x46, 0x49, 0x5d, 0x24, 0xc4, 0x98, 0x63, 0x5e, 0xf9, 0x7a, 0xc6, 0x6a, 0x40, - 0x08, 0x94, 0xc0, 0x9f, 0x73, 0x48, 0x8e, 0xb7, 0xcf, 0x33, 0xf6, 0xda, 0xd1, - 0x66, 0x6a, 0x05, 0xf9, 0x1a, 0xd7, 0x75, 0x79, 0x65, 0xc2, 0x99, 0x36, 0xe7, - 0xfa, 0x48, 0xd7, 0x7e, 0x89, 0xee, 0x09, 0x62, 0xf5, 0x8c, 0x05, 0x1d, 0x11, - 0xd0, 0x55, 0xfc, 0xe2, 0x04, 0xa5, 0x62, 0xde, 0x68, 0x08, 0x8a, 0x1b, 0x26, - 0x48, 0xb8, 0x17, 0x4c, 0xbc, 0xfc, 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x11, 0x5a, - 0xfd, 0xe1, 0x84, 0x05, 0x05, 0x4e, 0x5d, 0xa9, 0xa0, 0x43, 0x10, 0x34, 0x2c, - 0x5d, 0x3b, 0x52, 0x6e, 0x0b, 0x02, 0xc5, 0xca, 0x17, 0x22, 0xba, 0xde, 0xee, - 0x23, 0xd1, 0x45, 0xe8, 0xeb, 0x22, 0x13, 0xfc, 0x4a, 0xf1, 0xe4, 0x50, 0xe4, - 0xd5, 0x21, 0x7c, 0x66, 0x17, 0x00, 0x8c, 0x78, 0xf4, 0xfb, 0x11, 0x12, 0xf4, - 0x02, 0x8a, 0x70, 0x4f, 0xc5, 0xa9, 0x38, 0x2c, 0x6b, 0x03, 0xe7, 0xd8, 0x08, - 0x5e, 0x90, 0x6c, 0xf8, 0x4c, 0xa2, 0xc1, 0x20, 0x7c, 0x87, 0xa2, 0xbc, 0xe2, - 0x08, 0x0a, 0x98, 0x91, 0x66, 0x8d, 0x69, 0xb0, 0x44, 0xbe, 0xce, 0xd6, 0xcd, - 0xa3, 0x2c, 0x22, 0x9c, 0x91, 0x17, 0x91, 0x7a, 0xa0, 0x7d, 0xdf, 0xfc, 0xd3, - 0x77, 0x39, 0x5c, 0xba, 0x61, 0x6d, 0x63, 0xc0, 0xb6, 0x9c, 0x01, 0xfc, 0xc4, - 0x53, 0x91, 0xfd, 0x5b, 0x87, 0x63, 0xfb, 0x96, 0xd7, 0xca, 0x33, 0x3a, 0x12, - 0xde, 0x3c, 0xef, 0xa9, 0x1c, 0x6c, 0x98, 0xf9, 0x47, 0x3b, 0x8e, 0x10, 0x4a, - 0x71, 0x29, 0x3e, 0x46, 0x37, 0x47, 0x05, 0xba, 0xf6, 0x5f, 0xa4, 0x13, 0x84, - 0xba, 0x5c, 0x8e, 0x0c, 0x88, 0xa3, 0xeb, 0x07, 0xe0, 0xbe, 0x34, 0xda, 0xdd, - 0xfa, 0xbb, 0x7b, 0x65, 0x54, 0x3b, 0x5f, 0x39, 0xcb, 0x20, 0x23, 0xd4, 0x67, - 0x89, 0xeb, 0x7d, 0x98, 0x9a, 0xf7, 0x79, 0xe5, 0xb8, 0xd2, 0x83, 0x85, 0xa8, - 0x5b, 0x0d, 0xa2, 0xab, 0xe0, 0x7f, 0x0c, 0x2b, 0xb4, 0x25, 0x5f, 0xce, 0xa0, - 0x31, 0x88, 0x52, 0x7a, 0x30, 0x7d, 0x40, 0x91, 0x59, 0xe9, 0x01, 0x66, 0xfa, - 0xc6, 0xa0, 0x70, 0xba, 0x05, 0xb3, 0xe4, 0xdb, 0xfd, 0x3a, 0x2b, 0xfc, 0xc9, - 0xee, 0x6e, 0xd0, 0x16, 0xc0, 0xf6, 0x65, 0xbe, 0x81, 0x33, 0xb7, 0xdc, 0x1d, - 0x86, 0x04, 0x4d, 0xb0, 0xf9, 0xdb, 0x40, 0xfb, 0x0e, 0x9f, 0x8b, 0xc2, 0xe4, - 0xdb, 0x53, 0x82, 0xa8, 0xb4, 0xf8, 0x15, 0xb4, 0xe8, 0x43, 0x4a, 0xd0, 0xdf, - 0xbc, 0x51, 0xa5, 0xe9, 0xb1, 0x45, 0xe1, 0x59, 0x6c, 0xbf, 0x46, 0x70, 0xb7, - 0xe0, 0x5d, 0xfd, 0xaf, 0xbb, 0x0c, 0xf3, 0xdd, 0xee, 0x28, 0xd7, 0x6a, 0x82, - 0x42, 0x8e, 0x8a, 0xba, 0x43, 0x64, 0xe8, 0x4b, 0xac, 0x37, 0x92, 0x98, 0xdf, - 0x29, 0x32, 0xe6, 0x9b, 0xb5, 0xd0, 0x45, 0x51, 0x6e, 0xfc, 0x33, 0xae, 0x6c, - 0xc3, 0x94, 0x07, 0xf5, 0x7e, 0x53, 0x37, 0x1e, 0xc2, 0x05, 0x00, 0xc8, 0x44, - 0x61, 0x13, 0x00, 0xe0, 0xf2, 0x98, 0x62, 0xa1, 0x58, 0x6e, 0x1b, 0xb6, 0x44, - 0x38, 0x98, 0x00, 0x52, 0x33, 0xa8, 0x13, 0x66, 0xae, 0xe7, 0x3c, 0xec, 0x85, - 0x22, 0x8e, 0xbc, 0x3d, 0x7e, 0xe3, 0xc3, 0xfb, 0x44, 0xdb, 0x76, 0xba, 0x24, - 0x3f, 0x28, 0x42, 0xb7, 0xb5, 0xfc, 0x74, 0x6a, 0xe5, 0x1b, 0x0b, 0xc4, 0xbd, - 0x4f, 0xc9, 0xfd, 0x83, 0x35, 0x65, 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, 0xf6, - 0x99, 0x03, 0x18, 0xad, 0x8c, 0x7d, 0x94, 0x37, 0xe2, 0x0e, 0x2a, 0x1f, 0x20, - 0xe8, 0x18, 0xf9, 0x05, 0x7c, 0x5a, 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, 0x49, - 0x45, 0xcd, 0x42, 0x4c, 0x28, 0xa5, 0xfa, 0x38, 0x5d, 0xad, 0xfe, 0x49, 0x07, - 0xb2, 0x74, 0xd8, 0x42, 0x70, 0x7d, 0xb3, 0x69, 0x7a, 0x5a, 0xe6, 0xc8, 0xf5, - 0x42, 0xe5, 0xec, 0xc0, 0x7f, 0xe4, 0x73, 0x50, 0xd1, 0x01, 0x46, 0x70, 0x21, - 0x2e, 0xfe, 0x81, 0xfb, 0x7c, 0x73, 0xe8, 0x45, 0x0d, 0xf8, 0x14, 0xef, 0x62, - 0x32, 0xf7, 0x49, 0x0f, 0x63, 0xcc, 0xf0, 0x74, 0x80, 0xf8, 0x84, 0xa6, 0x6e, - 0xaf, 0xe4, 0x11, 0x20, 0x53, 0x20, 0xa3, 0xd6, 0xe8, 0xc9, 0x4f, 0xe7, 0xe5, - 0x17, 0x8d, 0xbc, 0x0f, 0xb6, 0x3e, 0x70, 0x06, 0xe4, 0xcc, 0xf6, 0x8b, 0x7e, - 0xdd, 0xa0, 0x21, 0x51, 0xf5, 0xfc, 0x1d, 0x76, 0x19, 0xc5, 0x50, 0x93, 0x32, - 0x4b, 0x47, 0x9d, 0x4d, 0x5e, 0x9c, 0x2e, 0x13, 0x5a, 0x4e, 0xb4, 0xda, 0x2f, - 0x81, 0x94, 0x86, 0x17, 0x02, 0x8e, 0x32, 0x17, 0x06, 0xa3, 0xa7, 0x78, 0x01, - 0x8b, 0x51, 0x71, 0x25, 0x08, 0xb6, 0xcf, 0x26, 0x3d, 0xa8, 0xa8, 0x59, 0x41, - 0xc2, 0xea, 0x1b, 0xe4, 0x96, 0x32, 0xb5, 0x93, 0x2d, 0x50, 0xae, 0x07, 0x7a, - 0x79, 0xe4, 0xc2, 0x1a, 0xc8, 0xae, 0x47, 0x13, 0xbb, 0xc7, 0xb3, 0xf4, 0xd0, - 0xef, 0xb5, 0xec, 0x69, 0x79, 0x62, 0xc5, 0x0e, 0xa3, 0xb3, 0x9e, 0xb9, 0x62, - 0xc0, 0x39, 0x97, 0x5f, 0x93, 0x9e, 0xd5, 0xc6, 0xe4, 0xc4, 0x00, 0x18, 0x00, - 0xa2, 0xba, 0x71, 0xdb, 0x07, 0x83, 0x54, 0x86, 0x53, 0x32, 0x43, 0x58, 0x2b, - 0x20, 0x7e, 0xd1, 0x6e, 0x06, 0xe6, 0x46, 0x0f, 0x2d, 0x2a, 0x83, 0x34, 0x9b, - 0xb5, 0x54, 0x18, 0x7c, 0x5e, 0x35, 0x50, 0xf6, 0xce, 0x5c, 0xaa, 0xf2, 0x97, - 0x68, 0xeb, 0xb2, 0x7d, 0xac, 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, 0x77, - 0x2b, 0xf8, 0x7a, 0xe1, 0x0a, 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x02, - 0xfd, 0x56, 0x01, 0xc8, 0xb5, 0x43, 0xe1, 0x9a, 0xa9, 0xe1, 0x9b, 0x90, 0xe1, - 0x9b, 0x96, 0x56, 0xc3, 0xb6, 0xc6, 0xbe, 0xc6, 0xa5, 0xc7, 0x90, 0xe1, 0x9a, - 0xa6, 0xc8, 0x99, 0xe1, 0x9a, 0xae, 0xc6, 0xa8, 0x7e, 0xe1, 0x9b, 0xa7, 0xc6, - 0xaf, 0xe2, 0xb1, 0xb0, 0x35, 0xc3, 0xb6, 0xe1, 0x9a, 0xa2, 0xc6, 0xb5, 0xc6, - 0x95, 0xc7, 0xbd, 0xe1, 0x9a, 0xae, 0x7b, 0xc7, 0xba, 0xc3, 0x96, 0xc8, 0xa1, - 0xc7, 0xa3, 0x61, 0x40, 0xc7, 0xa6, 0xe1, 0x9a, 0xb5, 0xc6, 0xb9, 0x2f, 0xc5, - 0x9f, 0xc7, 0x8e, 0xc2, 0xa4, 0xc7, 0x88, 0xc4, 0x8f, 0x47, 0xe2, 0xb1, 0xbc, - 0xc8, 0xb0, 0xe2, 0xb1, 0xa6, 0xc5, 0x85, 0xc3, 0x80, 0xc4, 0xa9, 0xc8, 0x99, - 0xe1, 0x9a, 0xac, 0xc4, 0x94, 0xc6, 0x88, 0xc2, 0xa1, 0xc6, 0xb5, 0xc2, 0xac, - 0xc5, 0xa7, 0xc8, 0xae, 0xc5, 0xb0, 0xc3, 0xaa, 0xc3, 0xb8, 0xc3, 0xa4, 0xc8, - 0xb3, 0xc8, 0x82, 0xc7, 0xa6, 0xc2, 0xae, 0x40, 0xcd, 0xba, 0xc6, 0x9b, 0xc3, - 0xa6, 0xc9, 0x88, 0xc4, 0x8d, 0xe1, 0x9b, 0x81, 0xc4, 0x8c, 0xcd, 0xb3, 0xc4, - 0xaa, 0x75, 0x76, 0xc5, 0xa2, 0xc7, 0xb9, 0xe2, 0xb1, 0xbb, 0xc3, 0x80, 0xc4, - 0x9d, 0xc7, 0x92, 0xc2, 0xa9, 0xe2, 0xb1, 0xa7, 0xe2, 0xb1, 0xae, 0xc4, 0xbe, - 0xc4, 0x97, 0x5b, 0xc6, 0x88, 0xc6, 0xaf, 0xc2, 0xb3, 0x78, 0xe2, 0xb1, 0xb8, - 0xc5, 0xb8, 0xe1, 0x9a, 0xb5, 0xc3, 0xad, 0xc6, 0x9c, 0xc4, 0x83, 0xc8, 0xb0, - 0xe2, 0xb1, 0xbd, 0xc6, 0xa3, 0x43, 0xc3, 0x95, 0xc4, 0x87, 0xc2, 0xae, 0xc3, - 0x89, 0xc2, 0xb8, 0x2b, 0x75, 0x62, 0xe1, 0x9b, 0xb0, 0xc4, 0xad, 0xc5, 0x92, - 0xc6, 0x80, 0xe1, 0x9a, 0xa9, 0xc5, 0x95, 0xc4, 0xbf, 0x6b, 0xc9, 0x8a, 0xe2, - 0xb1, 0xa6, 0xe1, 0x9b, 0x9f, 0xc3, 0x8b, 0xc3, 0x9f, 0xc7, 0xaf, 0xc5, 0x86, - 0xc5, 0xa9, 0xc4, 0xac, 0x52, 0xc7, 0xb3, 0x7b, 0xc2, 0xac, 0xc7, 0xaf, 0xc7, - 0xbf, 0xe1, 0x9b, 0xa4, 0xc3, 0xa6, 0xc4, 0xb9, 0xc5, 0x9b, 0x3b, 0xc9, 0x84, - 0xe1, 0x9a, 0xa8, 0xc2, 0xb6, 0x7a, 0x7c, 0xc7, 0x9b, 0xc8, 0x97, 0xc6, 0x8c, - 0xc3, 0xb9, 0x51, 0xc4, 0xbc, 0xc6, 0x91, 0xc8, 0x87, 0xc5, 0x86, 0xc5, 0xbf, - 0xc5, 0x9d, 0xc7, 0x81, 0x26, 0xc4, 0xb8, 0xe1, 0x9a, 0xa2, 0xe2, 0xb1, 0xa1, - 0xc2, 0xbd, 0x23, 0xc4, 0x9a, 0xc6, 0x9a, 0xc2, 0xb7, 0xc3, 0xb6, 0xc4, 0x82, - 0xc8, 0xa1, 0xc8, 0x8d, 0xc3, 0xb3, 0x5a, 0x04, 0x85, 0x96, 0xe6, 0x04, 0x4d, - 0x7f, 0xa2, 0x9c, 0x3c, 0x3e, 0x12, 0x6d, 0xfa, 0x7d, 0xac, 0xad, 0x1f, 0x8b, - 0x28, 0x0e, 0xca, 0xd1, 0xeb, 0x64, 0x95, 0xc3, 0xb7, 0x44, 0xf7, 0xa8, 0x02, - 0x58, 0xe2, 0x57, 0x3f, 0x94, 0x80, 0x36, 0x23, 0x0a, 0x2b, 0xa2, 0x0d, 0x6b, - 0x5b, 0xc9, 0x42, 0x11, 0xb6, 0x54, 0x71, 0xbd, 0x48, 0xf0, 0x31, 0x81, 0xc1, - 0x17, 0xf0, 0x9c, 0xd8, 0xa7, 0x4a, 0x18, 0xb3, 0x5c, 0xdc, 0xee, 0x0c, 0x2d, - 0x63, 0x22, 0x5e, 0x3a, 0x25, 0x1c, 0x7d, 0x0d, 0xe5, 0xec, 0x54, 0x32, 0x3d, - 0xcf, 0x4e, 0x02, 0xc3, 0xc0, 0xa4, 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, 0x1d, - 0x63, 0xa6, 0x4c, 0xb2, 0xd3, 0x23, 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, - 0xb4, 0x68, 0x21, 0x42, 0xc8, 0x32, 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, - 0xe4, 0xb5, 0xe3, 0x60, 0x34, 0x51, 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, - 0x63, 0xfa, 0x6a, 0xbb, 0x78, 0xd2, 0x1c, 0x19, 0x3c, 0xbe, 0x65, 0xb6, 0xa4, - 0xd2, 0xa7, 0x62, 0x16, 0x6f, 0x7d, 0x0f, 0x63, 0xdc, 0xb4, 0x7a, 0xa7, 0x7c, - 0x69, 0x14, 0xde, 0xe7, 0xf3, 0x33, 0xd7, 0x84, 0x68, 0x5d, 0x8b, 0x34, 0x65, - 0xea, 0x0e, 0x81, 0xb4, 0xb2, 0xe8, 0x66, 0x6d, 0xa9, 0x17, 0xbf, 0xed, 0x06, - 0x29, 0x1d, 0x08, 0xde, 0x23, 0x6a, 0x16, 0x89, 0x73, 0x1f, 0x0a, 0xbd, 0x48, - 0xf0, 0x31, 0x81, 0xc1, 0x17, 0xf0, 0x9c, 0xd8, 0xa7, 0x4a, 0x18, 0xb3, 0x5c, - 0xdc, 0xee, 0x0c, 0x2d, 0x63, 0x22, 0x5e, 0x3a, 0x25, 0x1c, 0x7d, 0x0d, 0xe5, - 0xec, 0x54, 0x32, 0x3d, 0xa4, 0xea, 0x2a, 0x13, 0x1b, 0x47, 0x33, 0xcf, 0xe4, - 0x5c, 0x6b, 0x00, 0x12, 0xc3, 0xe9, 0xe2, 0x09, 0x75, 0xba, 0xae, 0xcb, 0x02, - 0x32, 0xdf, 0x88, 0x0b, 0xd7, 0xd1, 0xde, 0x13, 0xe1, 0x34, 0x94, 0x62, 0xec, - 0x8d, 0x5d, 0xf3, 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, 0x8a, 0x8d, 0xf7, 0xfc, - 0xf3, 0x98, 0xec, 0x23, 0x05, 0x13, 0xca, 0x9d, 0x61, 0x23, 0xf8, 0xb9, 0xd8, - 0x17, 0x85, 0x60, 0x62, 0xb6, 0x2e, 0x05, 0x21, 0x3e, 0x79, 0xc1, 0xd0, 0x82, - 0xe9, 0x7f, 0x97, 0x56, 0x3d, 0xbc, 0xee, 0x27, 0x9b, 0x9e, 0x3a, 0x6c, 0xaa, - 0x49, 0x26, 0x73, 0xdb, 0x00, 0xb3, 0x06, 0x35, 0x7f, 0x97, 0x0f, 0x40, 0xc8, - 0x29, 0x2a, 0x7b, 0x62, 0xee, 0x2f, 0x8a, 0xda, 0x00, 0x74, 0x63, 0x4e, 0x01, - 0xd2, 0xab, 0xbd, 0x48, 0xf0, 0x31, 0x81, 0xc1, 0x17, 0xf0, 0x9c, 0xd8, 0xa7, - 0x4a, 0x18, 0xb3, 0x5c, 0xdc, 0xee, 0x0c, 0x2d, 0x63, 0x22, 0x5e, 0x3a, 0x25, - 0x1c, 0x7d, 0x0d, 0xe5, 0xec, 0x54, 0x32, 0x3d, 0x46, 0x87, 0x3f, 0xd6, 0x13, - 0x31, 0x7b, 0x91, 0xd2, 0x92, 0x36, 0xea, 0x90, 0xe3, 0x65, 0xd1, 0x62, 0xcc, - 0x05, 0x1c, 0x84, 0x6d, 0x24, 0x21, 0x76, 0xda, 0xf6, 0xd2, 0x86, 0x18, 0xae, - 0x31, 0xfb, 0xaa, 0xe9, 0x99, 0xa9, 0x3f, 0x17, 0x5c, 0x69, 0x38, 0xe6, 0x31, - 0xa0, 0x81, 0xf2, 0xc1, 0xf3, 0xfd, 0x78, 0x25, 0x49, 0xd3, 0xf3, 0x24, 0x57, - 0x59, 0x60, 0x6d, 0x9f, 0x92, 0xd5, 0x54, 0xce, 0xe7, 0x9d, 0xa2, 0xac, 0xf5, - 0x2b, 0x46, 0xe7, 0xf4, 0x69, 0x6e, 0xe6, 0xaa, 0xde, 0xc5, 0x6c, 0xb3, 0xa3, - 0xf5, 0xf9, 0x2f, 0xb5, 0xc6, 0x77, 0xb1, 0xd5, 0xa8, 0xd8, 0x5b, 0x96, 0x12, - 0x3b, 0xac, 0x89, 0x5f, 0x2d, 0xb3, 0xfe, 0x44, 0x8a, 0xc7, 0x34, 0x87, 0xf2, - 0xda, 0x2b, 0x94, 0xb9, 0x95, 0xfe, 0xbd, 0x48, 0xf0, 0x31, 0x81, 0xc1, 0x17, - 0xf0, 0x9c, 0xd8, 0xa7, 0x4a, 0x18, 0xb3, 0x5c, 0xdc, 0xee, 0x0c, 0x2d, 0x63, - 0x22, 0x5e, 0x3a, 0x25, 0x1c, 0x7d, 0x0d, 0xe5, 0xec, 0x54, 0x32, 0x3d, 0xcb, - 0xe6, 0x22, 0xa7, 0x35, 0xef, 0x7f, 0x12, 0x07, 0xf6, 0x71, 0x62, 0x94, 0x89, - 0x20, 0x2b, 0xea, 0x0b, 0x47, 0x5e, 0x51, 0x68, 0x1a, 0xa1, 0x67, 0x78, 0xb3, - 0x9b, 0xd9, 0x23, 0xc9, 0x0d, 0xc6, 0xff, 0x83, 0x73, 0xc7, 0x9b, 0xb1, 0x70, - 0x30, 0x41, 0x7b, 0xc2, 0x00, 0xc8, 0xf0, 0xb8, 0x55, 0xac, 0xfe, 0xc1, 0x79, - 0xf7, 0x67, 0x4c, 0xec, 0x27, 0x21, 0xa1, 0x0f, 0xca, 0x69, 0x3d, 0x01, 0xfd, - 0xd0, 0x01, 0xc7, 0x9c, 0x7a, 0xe1, 0x9b, 0x8b, 0xc4, 0x9c, 0xc3, 0x8d, 0xc7, - 0xab, 0xc8, 0xb3, 0xc6, 0x9a, 0xc2, 0xb3, 0xe1, 0x9a, 0xb8, 0xc3, 0xa7, 0xc6, - 0x95, 0xc7, 0xac, 0x6d, 0xc8, 0x87, 0x68, 0xc8, 0x9d, 0xe2, 0xb1, 0xaf, 0xc6, - 0xb5, 0xc3, 0xa0, 0xc4, 0x90, 0xc4, 0xaf, 0xc5, 0xb3, 0xc4, 0xb8, 0xc4, 0x97, - 0xc3, 0xb4, 0xc5, 0xbd, 0xc8, 0x92, 0xc7, 0x88, 0xc4, 0x98, 0xc6, 0x91, 0xc5, - 0x98, 0xc3, 0x8f, 0xc7, 0xa5, 0xe2, 0xb1, 0xac, 0xe1, 0x9b, 0xa0, 0x46, 0xc3, - 0x88, 0xe1, 0x9a, 0xba, 0xe1, 0x9a, 0xad, 0xc8, 0x90, 0xc8, 0x90, 0xc7, 0xa4, - 0xc7, 0x82, 0xe2, 0xb1, 0xb3, 0x64, 0xc8, 0x87, 0xc8, 0x8d, 0xc6, 0x91, 0xc4, - 0x81, 0xc8, 0xa1, 0xc5, 0xac, 0x2e, 0xc8, 0x95, 0xc9, 0x87, 0xc3, 0x9d, 0xc8, - 0x8f, 0xc9, 0x8b, 0xc7, 0x98, 0xc7, 0x9a, 0xc6, 0xb9, 0xc7, 0xa7, 0x3d, 0xcd, - 0xb2, 0xc5, 0xb0, 0xc4, 0x8b, 0x66, 0xc3, 0x92, 0xe2, 0xb1, 0xbc, 0xe1, 0x9b, - 0x86, 0xc8, 0x95, 0xe1, 0x9b, 0xad, 0x49, 0xc8, 0x98, 0xe1, 0x9b, 0x8a, 0xe1, - 0x9a, 0xb8, 0xe1, 0x9a, 0xb0, 0xc6, 0xbd, 0xc6, 0xbe, 0xc6, 0x83, 0xc7, 0xba, - 0xc3, 0x84, 0xc7, 0xa3, 0xc6, 0xac, 0xe2, 0xb1, 0xb4, 0xc5, 0x90, 0xc7, 0x83, - 0xc8, 0x9c, 0xc5, 0xa7, 0xc4, 0xa1, 0xc3, 0xbd, 0xe2, 0xb1, 0xbf, 0xc7, 0x87, - 0xc4, 0x90, 0xc3, 0xac, 0xc7, 0x8f, 0xe1, 0x9a, 0xb2, 0xe1, 0x9b, 0xa0, 0xc3, - 0xb0, 0xc8, 0xbd, 0xc6, 0xb9, 0x39, 0xc4, 0x99, 0xc2, 0xb7, 0xc4, 0x9c, 0xc8, - 0xad, 0xc8, 0x8f, 0xc5, 0xae, 0xc4, 0x8e, 0xce, 0x86, 0xc7, 0xa6, 0xc8, 0x9a, - 0xc8, 0x8a, 0xc4, 0x97, 0xc5, 0xa8, 0xc6, 0xa6, 0xc5, 0xa5, 0xe1, 0x9b, 0xab, - 0xc7, 0x98, 0x35, 0xc8, 0xba, 0xe1, 0x9a, 0xb7, 0xc5, 0x8e, 0xc3, 0x89, 0xc5, - 0x81, 0xc8, 0x9b, 0x32, 0x66, 0xc9, 0x87, 0xe1, 0x9b, 0x97, 0x31, 0xc4, 0x81, - 0xc5, 0xb0, 0xc2, 0xb4, 0xc5, 0xbd, 0xe1, 0x9b, 0x92, 0xc6, 0xb1, 0xce, 0x86, - 0xe1, 0x9b, 0xab, 0xc8, 0x8c, 0xc4, 0x80, 0xe2, 0xb1, 0xb8, 0xc6, 0xb5, 0xc5, - 0xbb, 0xc6, 0x92, 0xe2, 0xb1, 0xba, 0xc4, 0xbc, 0xe2, 0xb1, 0xa5, 0x58, 0xc6, - 0xb7, 0xc3, 0xb2, 0xc6, 0xa5, 0xc7, 0xa5, 0x3e, 0xc6, 0x95, 0xc3, 0xbb, 0xc6, - 0xaf, 0xc8, 0x99, 0xc6, 0xb3, 0xc8, 0xb2, 0xe1, 0x9a, 0xb8, 0xc5, 0x8f, 0xc7, - 0x8a, 0xc3, 0xad, 0xc6, 0xa9, 0xe2, 0xb1, 0xb1, 0xc2, 0xa4, 0xc8, 0x97, 0xc4, - 0x89, 0x66, 0xc6, 0xad, 0xe2, 0xb1, 0xb3, 0xe2, 0xb1, 0xa9, 0xc9, 0x8c, 0xc6, - 0xb9, 0xc2, 0xbf, 0xc2, 0xa9, 0x5a, 0xc7, 0x8f, 0x2f, 0xe1, 0x9a, 0xb2, 0xe2, - 0xb1, 0xa1, 0xc6, 0xb9, 0xe1, 0x9b, 0xa7, 0xc7, 0x8f, 0xc4, 0x8f, 0xe1, 0x9a, - 0xa1, 0x73, 0xc2, 0xae, 0xc4, 0xa7, 0xe1, 0x9b, 0xa4, 0xc4, 0xa6, 0xc7, 0xa9, - 0xe1, 0x9b, 0xa1, 0x3b, 0xc4, 0x8c, 0xc6, 0xb9, 0xc5, 0x99, 0x2f, 0xc5, 0xb6, - 0xc7, 0x91, 0xc4, 0x82, 0xc8, 0x9f, 0xc3, 0x9e, 0xe2, 0xb1, 0xa1, 0xc4, 0xae, - 0xc6, 0x9c, 0xc4, 0xba, 0x4f, 0x58, 0xe1, 0x9a, 0xbf, 0xe1, 0x9a, 0xad, 0xe1, - 0x9a, 0xa1, 0xc4, 0xbb, 0xc4, 0xb8, 0x5a, 0xe1, 0x9a, 0xa2, 0xc5, 0xa8, 0xe1, - 0x9b, 0x8a, 0xc6, 0x9f, 0xc7, 0x91, 0xc8, 0xbf, 0xc4, 0x9d, 0x5a, 0x04, 0xb6, - 0xaa, 0x67, 0xfd, 0x55, 0x7a, 0x02, 0x92, 0x4d, 0x00, 0x07, 0x63, 0x39, 0xe4, - 0xd8, 0x78, 0xe4, 0xa9, 0x13, 0xf9, 0x4b, 0xf6, 0x41, 0x46, 0x80, 0x61, 0x97, - 0xc2, 0xa7, 0x5c, 0xc6, 0xb5, 0x83, 0xca, 0x33, 0x57, 0x8e, 0xe2, 0x8c, 0x12, - 0x1f, 0xcc, 0xb7, 0x47, 0x75, 0xe0, 0x02, 0x05, 0xfc, 0x9e, 0x45, 0x3b, 0x9f, - 0x5e, 0x9c, 0x4f, 0xb5, 0x5d, 0xf5, 0x32, 0xf6, 0xb1, 0xdb, 0x81, 0xc2, 0x72, - 0xbf, 0xfa, 0x7a, 0xf7, 0x57, 0x29, 0x55, 0x59, 0x41, 0x29, 0x65, 0x27, 0xe9, - 0xa3, 0x84, 0x7b, 0xbe, 0xf7, 0xb7, 0xd2, 0xe6, 0xd5, 0x5d, 0xcb, 0x90, 0xe2, - 0x3f, 0xf6, 0xb5, 0x08, 0x45, 0x9a, 0xa6, 0x99, 0xbf, 0xcb, 0xd5, 0x6f, 0x10, - 0x99, 0x77, 0x64, 0xd0, 0x87, 0x40, 0x89, 0x86, 0xe7, 0x3d, 0x6e, 0x28, 0x4f, - 0xea, 0x9a, 0x23, 0xc3, 0x93, 0x11, 0x78, 0x2f, 0x86, 0xca, 0xbf, 0xf9, 0x45, - 0x5e, 0x4c, 0xf6, 0x99, 0xe5, 0xf5, 0xd4, 0xbc, 0x0b, 0x39, 0x05, 0xa4, 0xe3, - 0xbd, 0x01, 0xc5, 0x50, 0x3c, 0x5f, 0xb2, 0x85, 0x06, 0x0a, 0xe2, 0x38, 0x96, - 0xed, 0x45, 0x08, 0xa0, 0xd0, 0xce, 0x3f, 0xba, 0x40, 0x19, 0x47, 0x1a, 0x1e, - 0x02, 0x4f, 0x67, 0x7e, 0x19, 0x81, 0x96, 0x41, 0x8c, 0xc7, 0x32, 0x69, 0x01, - 0xe4, 0x15, 0x88, 0xaa, 0x20, 0xe2, 0x92, 0x58, 0xdf, 0xb8, 0xdc, 0xf0, 0x0e, - 0x85, 0xa1, 0x3b, 0x9f, 0x5e, 0x9c, 0x4f, 0xb5, 0x5d, 0xf5, 0x32, 0xf6, 0xb1, - 0xdb, 0x81, 0xc2, 0x72, 0xbf, 0xfa, 0x7a, 0xf7, 0x57, 0x29, 0x55, 0x59, 0x41, - 0x29, 0x65, 0x27, 0xe9, 0xa3, 0x84, 0x7b, 0xbe, 0xa7, 0x6a, 0xa4, 0x77, 0xf2, - 0x24, 0xd8, 0x7a, 0x07, 0x4f, 0x43, 0xaf, 0x5d, 0x5f, 0x79, 0xb3, 0xab, 0x11, - 0x28, 0xf0, 0x81, 0x91, 0x44, 0x7f, 0xa6, 0x46, 0xbf, 0xdd, 0xe5, 0xb5, 0x1e, - 0x23, 0x3c, 0xa6, 0x15, 0x5d, 0x10, 0x15, 0x85, 0xbc, 0x2c, 0x40, 0x15, 0x8a, - 0xc2, 0x10, 0x6e, 0x66, 0xa2, 0x6e, 0x46, 0x42, 0x33, 0x70, 0x63, 0x68, 0x76, - 0xb4, 0x34, 0xa7, 0x4f, 0x8c, 0xe8, 0x06, 0xc7, 0x84, 0xd9, 0x2b, 0x77, 0x4c, - 0xa4, 0xc1, 0x8e, 0x90, 0x77, 0x08, 0x62, 0xf9, 0x7e, 0xeb, 0xfd, 0x96, 0xa9, - 0x43, 0x10, 0x75, 0xcd, 0xcf, 0x0d, 0x49, 0xb3, 0xd1, 0x30, 0x3b, 0xda, 0x5b, - 0xf4, 0xb7, 0x87, 0xfc, 0xb6, 0x3c, 0x62, 0x6d, 0x50, 0xee, 0x91, 0x47, 0x10, - 0xf6, 0xf6, 0x3a, 0x62, 0x69, 0x45, 0x3b, 0x9f, 0x5e, 0x9c, 0x4f, 0xb5, 0x5d, - 0xf5, 0x32, 0xf6, 0xb1, 0xdb, 0x81, 0xc2, 0x72, 0xbf, 0xfa, 0x7a, 0xf7, 0x57, - 0x29, 0x55, 0x59, 0x41, 0x29, 0x65, 0x27, 0xe9, 0xa3, 0x84, 0x7b, 0xbe, 0x00, - 0xf5, 0xae, 0x02, 0xd4, 0x18, 0x21, 0xc8, 0xe1, 0xee, 0x01, 0x38, 0xeb, 0xcb, - 0x72, 0x8d, 0x7c, 0x6c, 0x3c, 0x80, 0x02, 0x7e, 0x43, 0x75, 0x94, 0xc6, 0x70, - 0xfd, 0x6f, 0x39, 0x08, 0x22, 0x2e, 0xe7, 0xa1, 0xb9, 0x17, 0xf8, 0x27, 0x1a, - 0xbe, 0x66, 0x0e, 0x39, 0xe0, 0x51, 0xaa, 0xa6, 0xfc, 0xa1, 0x86, 0x22, 0x76, - 0xe2, 0xba, 0xa0, 0xfe, 0x0b, 0x16, 0x2a, 0xeb, 0xcf, 0xe3, 0xd9, 0xa9, 0x5a, - 0x8d, 0x0c, 0x7b, 0x60, 0xd1, 0x7b, 0x46, 0x19, 0xa8, 0x28, 0xe2, 0x11, 0x8f, - 0xf0, 0xca, 0xcd, 0x5e, 0xb4, 0xec, 0xfc, 0xac, 0x54, 0x7f, 0xa9, 0x68, 0x62, - 0x40, 0x3e, 0x05, 0x9e, 0xf5, 0xc3, 0x72, 0xf9, 0xb6, 0x1c, 0x57, 0x87, 0x02, - 0x79, 0x09, 0x99, 0x2b, 0x6e, 0xee, 0x95, 0xa9, 0xa0, 0x6b, 0x3b, 0x9f, 0x5e, - 0x9c, 0x4f, 0xb5, 0x5d, 0xf5, 0x32, 0xf6, 0xb1, 0xdb, 0x81, 0xc2, 0x72, 0xbf, - 0xfa, 0x7a, 0xf7, 0x57, 0x29, 0x55, 0x59, 0x41, 0x29, 0x65, 0x27, 0xe9, 0xa3, - 0x84, 0x7b, 0xbe, 0xfa, 0xfe, 0x87, 0x52, 0x62, 0xdd, 0x7b, 0xe4, 0x1c, 0xbb, - 0xc6, 0x24, 0x20, 0xd4, 0xad, 0x6d, 0xf5, 0xc9, 0xb7, 0x13, 0x60, 0x4f, 0x65, - 0x60, 0x88, 0xa4, 0x48, 0x5e, 0x93, 0xbe, 0x19, 0x07, 0xd2, 0x7a, 0xc6, 0xec, - 0x3c, 0x57, 0x25, 0x9b, 0xd6, 0x98, 0x1d, 0x42, 0xc1, 0xb7, 0x8a, 0x29, 0xad, - 0x96, 0x85, 0xe6, 0x3c, 0x49, 0x4d, 0x41, 0x29, 0x62, 0x3e, 0xa1, 0xa7, 0xff, - 0xec, 0x85, 0x00, 0xa9, 0x5b, 0x5a, 0x47, 0xce, 0xab, 0xf3, 0xd2, 0x9a, 0x18, - 0x0d, 0xd9, 0x2a, 0xd9, 0xc1, 0xe8, 0x41, 0x63, 0x94, 0x2f, 0x78, 0xd8, 0x77, - 0x2e, 0xef, 0x36, 0xfb, 0x38, 0x90, 0xe8, 0xde, 0x4c, 0x29, 0x41, 0x10, 0x73, - 0xed, 0xb2, 0x97, 0x8e, 0xf4, 0xe4, 0x69, 0xdd, 0xd5, 0xcd, 0xa9, 0x86, 0x18, - 0x99, 0x95, 0xf8, 0x8d, 0x6a, 0xb3, 0x66, 0xdb, 0x01, 0x90, 0x01, 0xf5, 0xb2, - 0x52, 0x88, 0xcf, 0x86, 0x0f, 0xd9, 0x98, 0xee, 0x57, 0x3c, 0x8c, 0xc4, 0x8a, - 0xa9, 0xef, 0xcf, 0x9b, 0x61, 0x7e, 0x04, 0x3c, 0x32, 0x9c, 0xd1, 0xaa, 0x1a, - 0x0e, 0xd3, 0xa4, 0x02, 0xfb, 0x96, 0xe3, 0x36, - ], - txid: [ - 0xc6, 0xf8, 0x2a, 0x3b, 0x06, 0x3f, 0xc6, 0x93, 0x03, 0x18, 0x01, 0xed, 0x9a, - 0x27, 0x22, 0x73, 0x7f, 0xd7, 0x51, 0x33, 0x61, 0xca, 0x15, 0x01, 0x3b, 0x4b, - 0x18, 0x88, 0x39, 0x34, 0xb9, 0xef, - ], - auth_digest: [ - 0xea, 0xa0, 0x68, 0xab, 0x73, 0xcc, 0xac, 0xa6, 0xda, 0x20, 0x63, 0xac, 0x06, - 0x02, 0x91, 0x69, 0x3c, 0x01, 0x9a, 0x35, 0x69, 0x96, 0x1a, 0x43, 0x6b, 0xdb, - 0xd9, 0x3d, 0xbe, 0x1b, 0x7f, 0x11, - ], - amounts: vec![486672440700666, 433276078536859], - script_pubkeys: vec![ - vec![0x51, 0x65, 0x63], - vec![0x65, 0x51, 0x6a, 0x00, 0x63, 0x00, 0x65, 0x6a], - ], - transparent_input: Some(1), - sighash_shielded: [ - 0xf7, 0x35, 0x53, 0xf7, 0x59, 0xbc, 0x69, 0xf8, 0x16, 0xf6, 0xcf, 0xcf, 0xc3, - 0xa4, 0x24, 0x46, 0xfd, 0x49, 0x0c, 0xd6, 0x4a, 0xeb, 0x39, 0x25, 0x56, 0xdc, - 0x5a, 0xa7, 0xe6, 0xc1, 0xdc, 0xfa, - ], - sighash_all: Some([ - 0xc5, 0xdf, 0xfc, 0x9a, 0xbf, 0x01, 0x39, 0xaa, 0x5b, 0x33, 0xd3, 0xf5, 0xa2, - 0xc9, 0xb1, 0x3d, 0x72, 0x48, 0xcc, 0x01, 0x5e, 0xbe, 0x2b, 0x88, 0x8b, 0x6c, - 0x97, 0xf2, 0x71, 0x58, 0x81, 0xa6, - ]), - sighash_none: Some([ - 0xcb, 0xbe, 0xe9, 0xa1, 0xb6, 0x2d, 0x48, 0xd9, 0xbb, 0xfd, 0xfa, 0x64, 0xf5, - 0x26, 0x64, 0x0d, 0x1d, 0xec, 0x09, 0xd5, 0x98, 0x3d, 0x15, 0x1d, 0xa6, 0xd4, - 0x4f, 0xc8, 0xe2, 0x1c, 0xe2, 0xac, - ]), - sighash_single: None, - sighash_all_anyone: Some([ - 0x11, 0xee, 0x8f, 0xe7, 0x55, 0xb0, 0x9e, 0xf4, 0xaf, 0x38, 0x42, 0x41, 0x61, - 0xdb, 0x46, 0xbf, 0x7f, 0xf7, 0x64, 0xcc, 0x5e, 0x9d, 0x2c, 0xba, 0x7a, 0xec, - 0x70, 0xab, 0x74, 0x90, 0x34, 0x55, - ]), - sighash_none_anyone: Some([ - 0x61, 0x04, 0x1a, 0x84, 0x65, 0x26, 0xea, 0x88, 0x8f, 0xa7, 0xf5, 0x7c, 0xb9, - 0xad, 0xa4, 0x60, 0xeb, 0x7d, 0x50, 0xcf, 0x46, 0x3d, 0x40, 0x6c, 0x91, 0x51, - 0x57, 0x0e, 0xdb, 0xe7, 0x2c, 0x0f, - ]), - sighash_single_anyone: None, - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xdf, - 0xf0, 0xb1, 0x14, 0x8d, 0x6a, 0x6b, 0x07, 0x03, 0x7d, 0x95, 0x33, 0x67, 0x70, - 0xa7, 0xd1, 0x6f, 0xac, 0x1a, 0xdd, 0x86, 0x07, 0x76, 0xcb, 0x48, 0x02, 0x21, - 0xf8, 0xfb, 0x33, 0xd7, 0xe4, 0xe9, 0xb0, 0x79, 0x02, 0xd2, 0xff, 0x86, 0xfd, - 0xac, 0x72, 0x09, 0x62, 0x34, 0x08, 0xac, 0x63, 0x00, 0x52, 0x6a, 0x53, 0x63, - 0x6a, 0x3b, 0xbf, 0x06, 0x15, 0xf6, 0x7b, 0x11, 0x00, 0xcc, 0x2e, 0xa3, 0xba, - 0x3d, 0x6c, 0x1a, 0x1a, 0x90, 0x87, 0xb1, 0x19, 0xba, 0xee, 0xbf, 0xa6, 0x2b, - 0xc9, 0xf0, 0xec, 0x47, 0x9d, 0x99, 0xc1, 0xa3, 0xb1, 0x58, 0xb5, 0x14, 0xd1, - 0x62, 0x9d, 0x03, 0x51, 0x6a, 0x51, 0x67, 0x2a, 0x26, 0x70, 0x8e, 0x5a, 0xd8, - 0x16, 0xb5, 0x47, 0xab, 0x7e, 0x82, 0x7d, 0x07, 0x1b, 0xa7, 0x84, 0x2b, 0x3e, - 0x90, 0x30, 0x53, 0x83, 0x89, 0x6e, 0xc4, 0x90, 0x5f, 0x70, 0xc7, 0x8b, 0x69, - 0x4e, 0x6a, 0x5a, 0x3e, 0x43, 0x12, 0xcd, 0x04, 0x00, 0x53, 0x53, 0xac, 0x0f, - 0x05, 0xc7, 0x14, 0x02, 0x4e, 0x06, 0x1c, 0xd0, 0xfb, 0x40, 0x04, 0x00, 0x06, - 0x53, 0x6a, 0xac, 0x52, 0x6a, 0xac, 0x7f, 0xab, 0xa1, 0x0c, 0x3e, 0x09, 0x02, - 0x00, 0x02, 0x51, 0x63, 0x02, 0xd4, 0x81, 0x54, 0x72, 0xf4, 0x2b, 0x3b, 0x9e, - 0x74, 0xc9, 0x84, 0x03, 0xa4, 0x0d, 0xdd, 0x20, 0x3c, 0xd7, 0xfe, 0x6e, 0x5c, - 0x38, 0x0c, 0xe7, 0x0b, 0x29, 0xc7, 0x94, 0x13, 0xbf, 0x02, 0x61, 0xf1, 0xc5, - 0xd3, 0xb3, 0x20, 0xf3, 0x49, 0xa5, 0xb3, 0xa8, 0xb3, 0x55, 0x59, 0x22, 0x96, - 0xaa, 0xf6, 0x1c, 0x5b, 0x72, 0x52, 0xf7, 0x3e, 0xc0, 0xa9, 0x46, 0x6a, 0x1b, - 0x85, 0x76, 0x4f, 0xb0, 0x83, 0x1b, 0x4a, 0x1a, 0x36, 0x89, 0x0e, 0x22, 0x4c, - 0x01, 0xac, 0xfc, 0xe4, 0x8e, 0xe3, 0xed, 0x93, 0x87, 0x73, 0x98, 0xe0, 0x72, - 0x6d, 0x02, 0x93, 0x6d, 0x0d, 0x03, 0x2e, 0x18, 0xe3, 0x28, 0xe2, 0x08, 0x9e, - 0x61, 0x64, 0x5e, 0x4b, 0xe0, 0xa9, 0xe8, 0xcb, 0x62, 0x62, 0x42, 0x88, 0xf0, - 0x77, 0xc7, 0xc2, 0x73, 0xb0, 0xd2, 0x0f, 0xc4, 0xa6, 0xd1, 0x9f, 0x94, 0xf9, - 0xe4, 0x88, 0x5e, 0x86, 0x3f, 0x13, 0x9e, 0x9c, 0x0b, 0x13, 0x1b, 0x2a, 0x4c, - 0x28, 0x07, 0x1a, 0x38, 0xec, 0x61, 0xf6, 0x68, 0x01, 0xaa, 0x59, 0x56, 0xfc, - 0xb2, 0xa4, 0x6b, 0x95, 0x87, 0x66, 0x5b, 0x75, 0x71, 0xaa, 0x03, 0x48, 0x1f, - 0xd8, 0xd9, 0xd5, 0x69, 0x8f, 0x83, 0x6f, 0xc8, 0x63, 0x5e, 0x69, 0xe3, 0xbd, - 0xe4, 0x2f, 0x4a, 0xc0, 0x71, 0x32, 0x8b, 0x54, 0x09, 0xf6, 0xe4, 0x2d, 0x79, - 0x0a, 0xed, 0x02, 0xa2, 0x2c, 0xff, 0xb5, 0xd8, 0x12, 0x33, 0xcf, 0x40, 0xa5, - 0xb0, 0x80, 0x44, 0x47, 0x0c, 0x9e, 0x09, 0x17, 0xb5, 0x10, 0x7a, 0xc8, 0x76, - 0x89, 0x0b, 0x6c, 0xb4, 0x92, 0xfa, 0xaf, 0x2e, 0xd4, 0x15, 0x0f, 0x2c, 0xea, - 0x1f, 0x05, 0x10, 0xf8, 0x4e, 0xd3, 0xe3, 0xf7, 0x38, 0xca, 0xd4, 0xc5, 0x01, - 0xc9, 0x15, 0xaa, 0x6d, 0x3a, 0xd9, 0xf0, 0xd2, 0xae, 0x5c, 0x7c, 0x07, 0xb7, - 0xb6, 0x69, 0x6b, 0x15, 0xa2, 0x16, 0x69, 0x68, 0x37, 0x25, 0x69, 0x10, 0x9d, - 0x0d, 0xf8, 0x25, 0x7a, 0x85, 0x51, 0x90, 0x1e, 0x8f, 0xa5, 0x5f, 0xa2, 0xe7, - 0x52, 0x4c, 0xb4, 0x71, 0x24, 0xfc, 0xbb, 0xac, 0xc1, 0x28, 0x5e, 0xfc, 0xa8, - 0x25, 0x99, 0xd1, 0x81, 0xf1, 0x23, 0x51, 0xf9, 0x39, 0xa9, 0x4e, 0xa8, 0xb9, - 0x75, 0xc0, 0x65, 0xa9, 0x1f, 0xf2, 0x57, 0xca, 0xc7, 0xa9, 0x23, 0x85, 0xfc, - 0x8f, 0xa9, 0x21, 0xb1, 0x06, 0xba, 0x86, 0x60, 0xc6, 0x0a, 0xc8, 0xba, 0x5e, - 0xce, 0x45, 0x60, 0x6f, 0x04, 0xf3, 0x6a, 0x3a, 0x90, 0xbb, 0x38, 0x38, 0xc4, - 0x2a, 0xbf, 0x62, 0xdd, 0x2d, 0x84, 0xba, 0xbe, 0xf3, 0xe1, 0x88, 0xe9, 0x17, - 0x1a, 0xff, 0x9b, 0xc1, 0x16, 0x66, 0x90, 0x09, 0xd8, 0x87, 0x13, 0x0a, 0xc9, - 0xf7, 0x39, 0x6a, 0x62, 0x7a, 0x84, 0x74, 0xc1, 0x81, 0x1b, 0x69, 0x6f, 0x99, - 0x55, 0x2b, 0x14, 0xc4, 0x84, 0xdf, 0xe4, 0x2c, 0x24, 0xd5, 0x7c, 0x3a, 0x9c, - 0x3f, 0xea, 0x13, 0x76, 0xcd, 0xcb, 0x63, 0x42, 0x1c, 0x31, 0x4a, 0x62, 0x2a, - 0x9a, 0xef, 0x0b, 0xc0, 0x57, 0xcb, 0x11, 0xbc, 0x5e, 0x30, 0x66, 0xe3, 0x3a, - 0x3b, 0x9b, 0x31, 0xdf, 0x25, 0x75, 0xcd, 0x51, 0x85, 0xa4, 0xf3, 0xfc, 0x4e, - 0x4c, 0x3d, 0x40, 0x2e, 0xd4, 0x20, 0x46, 0xf8, 0x1f, 0x97, 0x48, 0x16, 0xd2, - 0x79, 0xb1, 0x51, 0x3a, 0xb8, 0x1d, 0x3f, 0x0a, 0x3c, 0x7f, 0x7f, 0xcf, 0x2f, - 0xbb, 0x4e, 0x26, 0x32, 0x19, 0x93, 0xa5, 0x13, 0xad, 0x3d, 0x7f, 0x4a, 0xfe, - 0x6c, 0x1b, 0xbd, 0xc6, 0x57, 0x58, 0x50, 0x80, 0xbb, 0x5a, 0x0f, 0x25, 0x97, - 0x3d, 0x63, 0xeb, 0x20, 0xad, 0xa0, 0x16, 0x6b, 0xbd, 0x8a, 0x39, 0xff, 0x93, - 0x24, 0x6f, 0x27, 0x89, 0x73, 0x2a, 0xd0, 0x55, 0x87, 0xf8, 0xdb, 0x7b, 0xc8, - 0x7c, 0x24, 0x2c, 0xfd, 0x36, 0xce, 0x68, 0x5a, 0x4b, 0x65, 0x69, 0x86, 0xc3, - 0x9f, 0xd7, 0xfc, 0xb2, 0x3c, 0x91, 0x91, 0x3e, 0x46, 0x11, 0x19, 0x1e, 0xdc, - 0xc8, 0x8b, 0x78, 0xf1, 0x45, 0xea, 0x29, 0xd2, 0x71, 0xb9, 0x40, 0xc6, 0x99, - 0x41, 0xe4, 0xc3, 0xfd, 0x2d, 0x71, 0xf3, 0xb1, 0x90, 0x69, 0x0e, 0xe1, 0x6f, - 0x5d, 0x14, 0xac, 0x22, 0x24, 0xe6, 0xfc, 0x89, 0x59, 0x76, 0x54, 0x52, 0x7d, - 0xab, 0xe7, 0x2e, 0x75, 0xd2, 0xd2, 0xa1, 0x3a, 0x9f, 0xba, 0xa6, 0x37, 0x8e, - 0x8a, 0x26, 0x43, 0x21, 0x08, 0x7a, 0x19, 0x00, 0xef, 0xe3, 0xca, 0xd1, 0x4a, - 0x57, 0x96, 0x86, 0xaa, 0x36, 0x36, 0xbd, 0x37, 0x5b, 0xd3, 0x13, 0x6b, 0xee, - 0x0b, 0xda, 0xab, 0xcf, 0xac, 0x88, 0x1b, 0xc7, 0x01, 0x81, 0x27, 0x21, 0xe6, - 0xfb, 0x75, 0xaa, 0x07, 0x2d, 0x2d, 0x18, 0x7e, 0x62, 0x25, 0x8d, 0x65, 0xa1, - 0x92, 0x15, 0x7c, 0xdf, 0x2e, 0xc3, 0x21, 0x40, 0x7f, 0x68, 0x2f, 0x5e, 0xec, - 0x6a, 0x32, 0x97, 0xab, 0x20, 0xb7, 0x06, 0x1c, 0x62, 0x24, 0x57, 0x16, 0xa4, - 0x4f, 0x71, 0xfb, 0xfc, 0x34, 0xc7, 0x9b, 0x44, 0xe0, 0x9e, 0x42, 0x12, 0xac, - 0x26, 0x53, 0xf6, 0xc4, 0x03, 0x64, 0x3e, 0x1c, 0x5b, 0x9a, 0xd1, 0x34, 0xd8, - 0x9c, 0x68, 0x0b, 0x70, 0x72, 0x83, 0xaf, 0x54, 0x32, 0x6f, 0xc4, 0xf8, 0x4d, - 0x6a, 0x58, 0x29, 0xa0, 0xad, 0x48, 0x30, 0x80, 0x6c, 0x05, 0x75, 0x84, 0x92, - 0xcd, 0x6a, 0xc4, 0x6b, 0xa0, 0x1a, 0x2b, 0x37, 0x22, 0xb5, 0xe4, 0xcd, 0xaf, - 0xbb, 0x3f, 0x36, 0x78, 0x5f, 0x42, 0x4a, 0xf0, 0x44, 0xda, 0xc5, 0xdb, 0x5f, - 0x7d, 0xf8, 0x39, 0xeb, 0x63, 0xc0, 0xc1, 0x7d, 0x8b, 0x0c, 0x79, 0xdb, 0x86, - 0x30, 0x94, 0x20, 0x15, 0xbe, 0x13, 0xf7, 0x9a, 0xf6, 0xf4, 0x3e, 0x5a, 0xb0, - 0x77, 0x81, 0x14, 0x79, 0x8f, 0x44, 0x22, 0x58, 0xee, 0xdc, 0x43, 0x6f, 0xcc, - 0x38, 0x6b, 0x36, 0xb5, 0x7e, 0x19, 0x17, 0xd7, 0x20, 0x17, 0x73, 0x66, 0xf4, - 0x24, 0xb0, 0xa5, 0x4b, 0x0b, 0x60, 0xf4, 0xfb, 0x13, 0x58, 0xc2, 0x0a, 0xa4, - 0x1d, 0xc5, 0x02, 0xe1, 0xdd, 0x8a, 0x16, 0x33, 0xf3, 0xd8, 0xe3, 0x27, 0x6b, - 0x59, 0xe7, 0xd2, 0xc4, 0xe6, 0x24, 0xa6, 0xf5, 0x36, 0x95, 0xbc, 0xaf, 0x24, - 0x7e, 0x36, 0x48, 0x3f, 0x13, 0xb2, 0x04, 0x42, 0x22, 0x37, 0xfc, 0x6a, 0xb3, - 0xeb, 0xa0, 0x2f, 0xc4, 0x14, 0x2b, 0x42, 0x97, 0xeb, 0xb5, 0x68, 0x3d, 0xb8, - 0xd2, 0x43, 0x19, 0x70, 0x6a, 0xd2, 0x6a, 0xaf, 0xd8, 0x1c, 0x53, 0xb7, 0x40, - 0xf3, 0x45, 0x43, 0xa6, 0xb3, 0xe9, 0xf5, 0xbb, 0x7d, 0x5c, 0x49, 0xe8, 0xc3, - 0x7f, 0x61, 0x49, 0x21, 0x25, 0x4f, 0x32, 0x12, 0x39, 0x4c, 0x79, 0x7d, 0x1c, - 0xee, 0x78, 0x99, 0xb7, 0xb4, 0xb6, 0x5b, 0x59, 0xb7, 0x34, 0x2f, 0x92, 0x53, - 0x1c, 0x1d, 0x59, 0xe1, 0x79, 0x70, 0xb7, 0x31, 0x74, 0x14, 0x43, 0x8c, 0xd8, - 0x0b, 0xd0, 0xf9, 0xa6, 0x7c, 0x9b, 0x9e, 0x55, 0x2f, 0x01, 0x3c, 0x11, 0x5a, - 0x95, 0x4f, 0x35, 0xe0, 0x61, 0xe1, 0xd2, 0x0f, 0x5f, 0xb7, 0xf6, 0x23, 0xaf, - 0x1a, 0x32, 0x6a, 0x65, 0x9f, 0x37, 0x5c, 0x7b, 0x58, 0x2e, 0x3e, 0xea, 0x4c, - 0x22, 0x3e, 0x45, 0x9a, 0x8f, 0x15, 0xa9, 0xa6, 0x5b, 0x68, 0x2a, 0x50, 0x81, - 0x90, 0x9f, 0x0a, 0x80, 0xd6, 0x89, 0xdf, 0x23, 0x90, 0x6a, 0x59, 0xbe, 0xe9, - 0x23, 0xcc, 0x9d, 0x5e, 0x20, 0x0b, 0xa5, 0xae, 0x28, 0x40, 0x0b, 0xf5, 0x67, - 0x45, 0x6a, 0x8c, 0x31, 0x9f, 0x06, 0x16, 0x0a, 0x49, 0x61, 0x0b, 0x3f, 0x04, - 0x7e, 0xfb, 0x45, 0xdc, 0x9e, 0x97, 0xb5, 0x35, 0x51, 0x2f, 0x0b, 0x71, 0x4f, - 0x60, 0x50, 0xb4, 0x59, 0xf8, 0xb7, 0x81, 0xed, 0xad, 0x94, 0x45, 0x1e, 0xb3, - 0xcf, 0x4b, 0x3d, 0xfd, 0xd9, 0xd4, 0x54, 0x5c, 0x35, 0xb2, 0xb5, 0xa7, 0xdc, - 0x17, 0xa8, 0x36, 0xb1, 0x2b, 0x43, 0xbe, 0xfc, 0x0b, 0xe0, 0xa1, 0xbd, 0x36, - 0x97, 0x72, 0x33, 0x80, 0x78, 0xb4, 0xff, 0x7d, 0x8e, 0x2d, 0x97, 0x9a, 0x34, - 0x41, 0xe1, 0xc8, 0xf5, 0xaf, 0xe4, 0x7b, 0x1e, 0x7d, 0xa5, 0x6c, 0xf0, 0x06, - 0x02, 0xd0, 0x1b, 0x11, 0x0c, 0x05, 0xcf, 0x48, 0xfd, 0xa3, 0xe6, 0xcc, 0xe3, - 0x2a, 0x04, 0x40, 0x00, 0xf4, 0x5c, 0x6d, 0x1e, 0x69, 0x6d, 0x24, 0x5c, 0xbd, - 0x31, 0x2b, 0xdc, 0x3a, 0x3a, 0x21, 0xc9, 0x92, 0xd0, 0xeb, 0xc8, 0xcc, 0x8f, - 0xa6, 0x30, 0x6d, 0x7e, 0x13, 0x0a, 0x2b, 0xa4, 0x20, 0x18, 0xfe, 0x59, 0x69, - 0x49, 0xfd, 0x82, 0x26, 0x7b, 0xcc, 0x59, 0xdd, 0x46, 0x26, 0xef, 0xc3, 0xea, - 0x74, 0x38, 0xd0, 0x5c, 0x91, 0xb0, 0xf8, 0xe0, 0x92, 0x55, 0x0d, 0x2d, 0x39, - 0xa0, 0x1e, 0xb4, 0x5e, 0xe8, 0xf7, 0xd0, 0x9b, 0x03, 0x8d, 0x83, 0x83, 0xe1, - 0x9b, 0xc3, 0x0e, 0x64, 0x03, 0x82, 0x8c, 0xdb, 0x65, 0x2a, 0x55, 0x6b, 0x12, - 0x04, 0x09, 0x31, 0x40, 0x2a, 0xa6, 0xac, 0x34, 0xfc, 0x19, 0xfd, 0xc0, 0x6e, - 0x2e, 0x77, 0x87, 0xf5, 0xb7, 0x7b, 0x04, 0x5f, 0xd0, 0x98, 0xc0, 0x31, 0xbd, - 0xbd, 0x46, 0x27, 0x76, 0x09, 0xd8, 0x42, 0xf4, 0x84, 0x24, 0xed, 0xa3, 0x1e, - 0x3c, 0xf2, 0xcd, 0xd6, 0x43, 0x85, 0xba, 0xd3, 0x11, 0x88, 0x58, 0xd1, 0x42, - 0xd9, 0x06, 0xea, 0xdb, 0x75, 0x90, 0xc9, 0x41, 0x36, 0xda, 0x6a, 0x06, 0x35, - 0x14, 0xd6, 0xa2, 0x5f, 0x7b, 0x37, 0xd7, 0x66, 0x4f, 0x9b, 0x97, 0x09, 0x43, - 0x3e, 0x6e, 0x70, 0x21, 0x18, 0xa4, 0xab, 0x9e, 0x7a, 0x7a, 0x3e, 0x62, 0x59, - 0x12, 0x99, 0x37, 0xd2, 0x9d, 0x0d, 0xb2, 0x60, 0x70, 0x52, 0x3e, 0x8b, 0x06, - 0x43, 0x13, 0x0a, 0xbe, 0xfe, 0x94, 0x3b, 0x40, 0x12, 0x98, 0xae, 0x01, 0xa3, - 0xab, 0x00, 0xab, 0xbc, 0x60, 0xd7, 0xdb, 0x93, 0x3c, 0x7f, 0x07, 0xa8, 0xbf, - 0x0f, 0x7c, 0xe1, 0x66, 0x0b, 0xcc, 0xb4, 0x5e, 0x04, 0x2b, 0x45, 0x1b, 0x93, - 0x50, 0x02, 0xce, 0xce, 0x27, 0xf3, 0x6a, 0xba, 0x56, 0x47, 0xac, 0x28, 0xd8, - 0x18, 0x6c, 0xdd, 0x1f, 0xb9, 0x5d, 0xc1, 0x35, 0xd4, 0x89, 0x92, 0xf6, 0x8d, - 0xa1, 0x2a, 0xd6, 0x1a, 0xc7, 0x56, 0x68, 0x0d, 0xd7, 0xf8, 0xd0, 0x77, 0x4a, - 0xbd, 0x6c, 0xfd, 0xa2, 0xf0, 0x32, 0xaf, 0x3b, 0xe1, 0x39, 0xa6, 0x33, 0xd6, - 0x73, 0x3c, 0x75, 0xd1, 0xab, 0xa8, 0x90, 0x18, 0xc8, 0x57, 0x2b, 0x99, 0xcd, - 0x30, 0xc5, 0x37, 0x06, 0x79, 0x41, 0xdf, 0x1c, 0x4b, 0xc1, 0xfd, 0x57, 0x0f, - 0x7b, 0x4d, 0xdc, 0x97, 0x51, 0x86, 0x23, 0xe3, 0xae, 0x4a, 0x87, 0xbd, 0xb9, - 0x66, 0xc9, 0x4d, 0x86, 0x1e, 0x80, 0xde, 0x88, 0xc2, 0x92, 0xae, 0xe9, 0x38, - 0x71, 0x94, 0xe2, 0x56, 0xc6, 0x70, 0x07, 0x52, 0x30, 0x1c, 0x73, 0xfc, 0x95, - 0x65, 0xa4, 0x04, 0x80, 0xd8, 0x12, 0x6e, 0x9d, 0x08, 0x58, 0x79, 0xe2, 0x4b, - 0x16, 0xe9, 0xc4, 0x85, 0xd8, 0xf0, 0xd6, 0x18, 0xca, 0x0d, 0xd1, 0x21, 0xb5, - 0x1a, 0x7c, 0xab, 0x23, 0x0c, 0x5b, 0x45, 0x67, 0x2b, 0xdb, 0x8e, 0xa3, 0xa0, - 0x40, 0xf7, 0xaa, 0xa0, 0x98, 0xba, 0x26, 0x02, 0x5d, 0x2e, 0xab, 0x79, 0x48, - 0x69, 0x3d, 0xd5, 0xf6, 0xd3, 0x09, 0x65, 0x01, 0xe9, 0xe0, 0x71, 0x25, 0xd7, - 0xeb, 0x29, 0x3b, 0x3a, 0xba, 0xd5, 0x7f, 0xd5, 0xf0, 0x11, 0x64, 0x70, 0x2d, - 0xae, 0x64, 0xbd, 0xba, 0x8c, 0x92, 0x4f, 0xb0, 0x79, 0x96, 0x79, 0xd7, 0x7f, - 0x98, 0xd3, 0x03, 0x91, 0x9f, 0xb4, 0xa7, 0xff, 0x26, 0xa9, 0x6f, 0x13, 0x7a, - 0x5e, 0x5c, 0xb9, 0x5b, 0xc4, 0xc6, 0xff, 0x99, 0x93, 0x52, 0x6b, 0xda, 0x15, - 0x03, 0x16, 0x8a, 0xb4, 0x8c, 0xbd, 0x45, 0x15, 0x39, 0x27, 0xd3, 0x04, 0x30, - 0x42, 0x3d, 0xbd, 0xf0, 0x66, 0x05, 0xf5, 0xb5, 0x4b, 0x80, 0x8f, 0xeb, 0x22, - 0xb2, 0x08, 0xb0, 0x64, 0x58, 0x18, 0x47, 0xb2, 0xf6, 0x4c, 0xa6, 0x48, 0x37, - 0x00, 0x72, 0x16, 0xde, 0x6e, 0xca, 0xff, 0xeb, 0x4b, 0x69, 0xe6, 0x33, 0x47, - 0xf8, 0x4a, 0xbc, 0xad, 0x8f, 0x2e, 0x75, 0x7d, 0x58, 0x61, 0xce, 0x77, 0xee, - 0x46, 0x51, 0x3d, 0xa7, 0x41, 0x68, 0x37, 0xdc, 0xb2, 0x3d, 0x33, 0xea, 0x72, - 0xaf, 0x23, 0xd0, 0xad, 0x8c, 0x93, 0x07, 0xd0, 0xb5, 0x85, 0x8d, 0xa9, 0x5b, - 0x77, 0xff, 0xf9, 0x02, 0x7b, 0x88, 0x59, 0xe1, 0x1d, 0xcb, 0xd5, 0x98, 0x35, - 0x0e, 0xee, 0x50, 0x93, 0x94, 0x81, 0x70, 0x8e, 0xa7, 0x08, 0xeb, 0x9f, 0x66, - 0x43, 0x88, 0xb9, 0xc6, 0x4d, 0x6a, 0xf0, 0x0f, 0x64, 0x9b, 0x60, 0x91, 0xac, - 0x06, 0x00, 0x6f, 0x35, 0x4b, 0xa4, 0xd2, 0x58, 0x1d, 0x0c, 0xda, 0x54, 0xb6, - 0x38, 0xba, 0x9d, 0x76, 0xf9, 0xb5, 0x2d, 0x17, 0xc8, 0xf8, 0x8e, 0xe6, 0x3f, - 0x58, 0x45, 0xb5, 0xdc, 0xef, 0xa4, 0xc3, 0x47, 0x8b, 0x26, 0x70, 0xe1, 0x36, - 0x2c, 0x32, 0xd6, 0xe4, 0x73, 0x3b, 0x9d, 0xd2, 0xd5, 0xf2, 0x6e, 0x1f, 0xe3, - 0x06, 0xf7, 0x3c, 0x00, 0x7f, 0xdd, 0xca, 0xe9, 0xd9, 0xc0, 0xaa, 0xf1, 0x87, - 0xd7, 0x42, 0x8b, 0x1e, 0x9d, 0x47, 0x9c, 0x18, 0x23, 0x7b, 0x98, 0x28, 0xbc, - 0xa8, 0xb9, 0x8c, 0x9d, 0x9b, 0xec, 0x7d, 0x82, 0x70, 0xb5, 0xd8, 0xee, 0xc3, - 0xcc, 0x4f, 0x43, 0xfa, 0x01, 0x88, 0x52, 0x1b, 0xc6, 0x1b, 0x21, 0xdd, 0x04, - 0xe3, 0x7a, 0x83, 0xec, 0xe6, 0x8c, 0xa7, 0xa2, 0xfa, 0x6c, 0x8f, 0x9e, 0x34, - 0xa6, 0x29, 0x03, 0x35, 0xaa, 0x1f, 0xbd, 0x83, 0xd5, 0x4a, 0xaf, 0x44, 0x1e, - 0x31, 0x9e, 0xa4, 0x7a, 0x86, 0x2a, 0xd0, 0x29, 0x3c, 0xed, 0xf5, 0xdd, 0x9e, - 0xda, 0xde, 0xee, 0x33, 0xcb, 0x52, 0x2c, 0xd0, 0x11, 0x8b, 0xbd, 0x81, 0x1a, - 0xce, 0x9a, 0x23, 0xbd, 0xa3, 0x9a, 0xba, 0x72, 0xf1, 0x56, 0x6f, 0xc1, 0x68, - 0x84, 0x97, 0xd2, 0xa7, 0x92, 0x8c, 0x36, 0x70, 0x15, 0x25, 0x67, 0x8b, 0xc9, - 0x72, 0x14, 0xb3, 0x1b, 0x37, 0xba, 0xb4, 0x6b, 0x88, 0xf2, 0x7f, 0x04, 0x48, - 0xde, 0xcb, 0x31, 0x62, 0x2d, 0x0f, 0x0f, 0x87, 0xa8, 0x55, 0xba, 0x54, 0x00, - 0x03, 0x32, 0x03, 0x1f, 0x73, 0xab, 0xff, 0xd4, 0x65, 0x91, 0xda, 0x0b, 0x88, - 0x72, 0x35, 0x04, 0xed, 0xb2, 0xd7, 0x3b, 0xc1, 0xa2, 0x35, 0x47, 0x23, 0xb3, - 0xb8, 0x19, 0xd0, 0x63, 0x7a, 0x6f, 0xa4, 0x66, 0x39, 0x46, 0xa3, 0x0a, 0xc5, - 0xaf, 0xdd, 0x30, 0xce, 0x83, 0x0f, 0x67, 0x91, 0xb4, 0x57, 0x52, 0x70, 0xa1, - 0x72, 0x0f, 0x91, 0x86, 0x6e, 0x2b, 0x86, 0xf4, 0x78, 0x88, 0x94, 0xc8, 0xda, - 0x62, 0xd8, 0xb9, 0x1f, 0xaf, 0x52, 0x0e, 0x3b, 0xed, 0xbc, 0x12, 0x06, 0xa5, - 0xa5, 0xe6, 0xef, 0xd3, 0xdf, 0xde, 0x08, 0x43, 0xc3, 0xb0, 0x67, 0x57, 0x64, - 0x3f, 0xc0, 0x06, 0x00, 0x88, 0x38, 0xca, 0x47, 0x30, 0x87, 0xf8, 0x97, 0x79, - 0x18, 0xcc, 0x1b, 0x81, 0xc9, 0xe6, 0x8e, 0x3b, 0x88, 0x8f, 0xe6, 0xf7, 0xc6, - 0x30, 0xf1, 0xbc, 0x7a, 0xe1, 0x88, 0xf5, 0x12, 0x84, 0x20, 0x41, 0xca, 0xda, - 0x1e, 0x05, 0xf8, 0x66, 0xd2, 0x56, 0x2d, 0xbe, 0x09, 0xc4, 0xb4, 0x30, 0x68, - 0xf7, 0x54, 0xda, 0xd3, 0x4d, 0xf0, 0xfc, 0xfc, 0x18, 0x1f, 0x31, 0x80, 0x1a, - 0x79, 0x92, 0xd2, 0xf1, 0x6b, 0xe0, 0x21, 0x1b, 0x4a, 0x22, 0xf6, 0x2a, 0xab, - 0x64, 0x70, 0x1b, 0xf4, 0xa4, 0xe6, 0xd6, 0x66, 0xfc, 0x30, 0x4a, 0x5c, 0x79, - 0xc6, 0x09, 0xac, 0xc4, 0x3b, 0x00, 0xb4, 0x86, 0x48, 0x93, 0xd3, 0x7d, 0x50, - 0x07, 0xf0, 0xc3, 0x29, 0xa4, 0x75, 0x50, 0x52, 0x57, 0x75, 0x70, 0xdd, 0x38, - 0xfa, 0xc0, 0xa4, 0x89, 0xa1, 0x1b, 0xf3, 0x47, 0xaf, 0xab, 0xd5, 0x8a, 0x9e, - 0x65, 0x18, 0xae, 0x00, 0x80, 0x5f, 0x43, 0xdc, 0xbe, 0xad, 0x80, 0x04, 0xb4, - 0x7d, 0x7e, 0x87, 0xd6, 0x15, 0xb1, 0x93, 0x45, 0x06, 0xa9, 0x76, 0x9a, 0x88, - 0x3d, 0xb6, 0x75, 0x04, 0x2e, 0x44, 0xf5, 0xba, 0xba, 0x57, 0x90, 0x13, 0x3c, - 0x33, 0x75, 0x39, 0xab, 0x6e, 0x1b, 0x89, 0xda, 0x9b, 0xa2, 0x98, 0x87, 0xf8, - 0x01, 0xe2, 0x54, 0xbe, 0x2a, 0x76, 0x14, 0x47, 0xf5, 0xf9, 0x77, 0x4a, 0x8d, - 0x18, 0xa6, 0xf8, 0x27, 0xe3, 0x85, 0x45, 0x52, 0x5e, 0xac, 0x72, 0x2e, 0x34, - 0xf4, 0xe0, 0xa0, 0x70, 0x8b, 0xe9, 0x96, 0xfc, 0xc7, 0xe3, 0x0b, 0xa8, 0xe0, - 0x16, 0xaa, 0x36, 0xa6, 0xb5, 0xdf, 0x5e, 0x5a, 0x19, 0x09, 0xf6, 0x3a, 0xba, - 0x09, 0x5d, 0x98, 0x77, 0xa8, 0xf2, 0xdc, 0x53, 0xf4, 0x6f, 0x6c, 0x9b, 0x07, - 0x6c, 0x68, 0xd4, 0x31, 0x63, 0xd3, 0x34, 0xda, 0xc3, 0x82, 0x70, 0x33, 0xe5, - 0xad, 0x84, 0x88, 0xbf, 0xd9, 0xc4, 0xbb, 0xbe, 0x8f, 0x59, 0x35, 0xc6, 0xc5, - 0xea, 0x04, 0xc3, 0xad, 0x49, 0xc7, 0x47, 0xa9, 0xe7, 0x23, 0x1b, 0xcd, 0x7d, - 0x16, 0x21, 0x5e, 0x6e, 0x80, 0x73, 0x7d, 0x6b, 0x54, 0xfe, 0xc8, 0xb8, 0x84, - 0x02, 0xf0, 0x47, 0x52, 0x45, 0xe1, 0x74, 0xa7, 0x45, 0xb8, 0x31, 0xf8, 0xfe, - 0x03, 0xa7, 0x6f, 0xb9, 0xce, 0xca, 0x4d, 0x22, 0xb7, 0x83, 0xc3, 0x28, 0xc6, - 0x91, 0x5c, 0x43, 0x40, 0x50, 0x64, 0xae, 0x56, 0xbc, 0x89, 0xe6, 0x4d, 0x15, - 0x78, 0xe4, 0xd3, 0xa3, 0x4b, 0xb9, 0x55, 0x91, 0xea, 0xf1, 0xd3, 0xda, 0x02, - 0xa4, 0x54, 0x9f, 0xa8, 0x0d, 0xb0, 0xff, 0x7c, 0xb0, 0x39, 0x93, 0xb6, 0x8a, - 0xe1, 0x5a, 0x30, 0xe8, 0x79, 0x49, 0xaa, 0x08, 0x0e, 0x94, 0xab, 0xde, 0x68, - 0x89, 0x8c, 0x33, 0x92, 0xa2, 0x17, 0xd6, 0x49, 0x61, 0x6b, 0xbe, 0x73, 0x9b, - 0x13, 0xd1, 0x4d, 0xf0, 0x3f, 0xf2, 0x76, 0x71, 0x48, 0x9b, 0xe0, 0xb4, 0xbe, - 0xba, 0xaf, 0xa7, 0xd1, 0xe6, 0x39, 0xd5, 0xb3, 0xe9, 0x94, 0xff, 0xb6, 0xb7, - 0xa2, 0x09, 0xf6, 0xad, 0xfe, 0x8d, 0x1e, 0x5c, 0xcf, 0x01, 0x0c, 0x19, 0x16, - 0x8a, 0xeb, 0x18, 0xaa, 0x9d, 0x68, 0x7e, 0x24, 0xad, 0xc0, 0xf9, 0x66, 0x90, - 0x34, 0x24, 0x00, 0x34, 0x8e, 0x92, 0x9e, 0x07, 0x46, 0x02, 0x53, 0xf3, 0x83, - 0x90, 0xf8, 0x7b, 0xd6, 0xc0, 0x53, 0x08, 0xc3, 0xbd, 0xe2, 0x52, 0x28, 0xe0, - 0xfa, 0x08, 0x80, 0xb0, 0x8e, 0xf3, 0x4a, 0x5a, 0x9c, 0xc0, 0xea, 0x0a, 0x67, - 0xca, 0x65, 0xb6, 0xff, 0xd0, 0x05, 0x57, 0x29, 0x09, 0xf1, 0xc4, 0x2d, 0xd7, - 0x45, 0xee, 0xee, 0x9d, 0xd6, 0xb4, 0x43, 0x9c, 0x9f, 0x3f, 0x98, 0xa1, 0x18, - 0xfe, 0x16, 0x69, 0x8e, 0x9c, 0xef, 0xf5, 0x58, 0xf1, 0x60, 0x66, 0x97, 0x5f, - 0xe3, 0x95, 0x83, 0xe9, 0xb5, 0x85, 0x3b, 0x13, 0x11, 0x39, 0x15, 0x80, 0x01, - 0x9f, 0xe5, 0x5d, 0x59, 0xd1, 0xc8, 0x28, 0xd3, 0xfe, 0xb6, 0xa3, 0xb9, 0xce, - 0x92, 0xd0, 0x89, 0xae, 0x4b, 0x40, 0x8e, 0x23, 0xd6, 0xa4, 0x37, 0xd4, 0x98, - 0x9b, 0x51, 0x9b, 0x7a, 0x9e, 0xb0, 0x8a, 0xe6, 0xd4, 0x48, 0xa7, 0xa1, 0x6e, - 0x8a, 0xed, 0x26, 0xa2, 0xec, 0xd0, 0xca, 0xd8, 0x08, 0x44, 0xfd, 0x06, 0x50, - 0xd8, 0xc4, 0xe4, 0xd2, 0xaf, 0x90, 0x65, 0x67, 0x48, 0xd8, 0x09, 0x9a, 0x0c, - 0x75, 0x6f, 0xc1, 0x6c, 0xca, 0x06, 0xa3, 0x34, 0x43, 0x07, 0x02, 0xae, 0x19, - 0x61, 0x66, 0x5b, 0x48, 0x45, 0xac, 0xd1, 0xa8, 0xe3, 0x41, 0x01, 0xe6, 0x8b, - 0xb6, 0x44, 0xac, 0x03, 0x4d, 0xc6, 0x3e, 0xcc, 0x8a, 0xb4, 0x41, 0x06, 0xf3, - 0x66, 0x3e, 0x17, 0xe1, 0xa0, 0x5b, 0x90, 0x0d, 0x4a, 0x16, 0x7d, 0xfb, 0x71, - 0x9f, 0xd6, 0xb7, 0xff, 0xbd, 0xc1, 0x88, 0xa9, 0x2e, 0x71, 0xc7, 0xa3, 0xea, - 0xfe, 0x41, 0x68, 0xec, 0x8b, 0xd3, 0x98, 0x28, 0x3d, 0x1f, 0xd4, 0x82, 0x3c, - 0xde, 0x07, 0x9b, 0x12, 0x86, 0xd0, 0xb4, 0x6b, 0x44, 0x47, 0xb0, 0x82, 0xfa, - 0xed, 0x3f, 0xea, 0xe7, 0x1d, 0x03, 0x00, 0x04, 0xfd, 0xb5, 0x01, 0xe1, 0x9b, - 0xa1, 0xc3, 0x9e, 0xc7, 0x99, 0xc8, 0x88, 0xe1, 0x9b, 0xaa, 0xc8, 0x91, 0xc4, - 0x81, 0xcd, 0xb6, 0xc6, 0x85, 0xc7, 0xae, 0xc8, 0x9d, 0xc2, 0xaf, 0xc8, 0xa1, - 0xc6, 0xae, 0x69, 0xc7, 0xb3, 0xc6, 0xaa, 0xc6, 0xa6, 0xc6, 0xa0, 0xce, 0x86, - 0xe1, 0x9b, 0x94, 0xc4, 0x93, 0xc4, 0xb8, 0xc4, 0x8d, 0x62, 0xc8, 0x98, 0xc3, - 0x8b, 0xc9, 0x89, 0x72, 0xc5, 0xb9, 0xc4, 0xb5, 0xc4, 0x88, 0x44, 0xc4, 0x85, - 0xc5, 0xaa, 0xc5, 0x91, 0xc7, 0xa5, 0xc8, 0xb6, 0xc4, 0xa0, 0xe2, 0xb1, 0xa4, - 0x7b, 0xc4, 0xb6, 0xe1, 0x9a, 0xba, 0xc7, 0xae, 0xc4, 0x9e, 0x7c, 0xc4, 0xa1, - 0xc3, 0xa2, 0xc5, 0xbb, 0xe1, 0x9b, 0x9a, 0xc5, 0xb1, 0x66, 0xe1, 0x9b, 0x80, - 0xc7, 0x86, 0xe1, 0x9a, 0xbe, 0xc6, 0xa9, 0xc7, 0xb9, 0x4e, 0xc4, 0xa7, 0xc4, - 0xae, 0xc2, 0xae, 0xc6, 0xa9, 0xc8, 0x8c, 0xc4, 0x8a, 0xc6, 0xb3, 0xc3, 0x97, - 0xce, 0x84, 0xe2, 0xb1, 0xbf, 0xe2, 0xb1, 0xa1, 0xc7, 0x8c, 0xc8, 0xa3, 0xc8, - 0x9c, 0x37, 0xc7, 0x92, 0x47, 0xce, 0x86, 0xc9, 0x8b, 0xe1, 0x9a, 0xae, 0xc7, - 0x98, 0x77, 0xc6, 0xb4, 0xc5, 0xba, 0xc6, 0x82, 0xc4, 0x9d, 0xc7, 0xa6, 0xe2, - 0xb1, 0xac, 0xc4, 0x9a, 0xe2, 0xb1, 0xbb, 0xe1, 0x9b, 0x8b, 0xc5, 0x99, 0xc4, - 0xbf, 0xe1, 0x9b, 0xa6, 0xc6, 0xaa, 0xc5, 0x91, 0xc5, 0xb5, 0xc2, 0xb1, 0xc7, - 0xac, 0x76, 0x36, 0xc2, 0xa6, 0xc3, 0xbd, 0xc9, 0x89, 0xc5, 0xb7, 0xe1, 0x9a, - 0xb9, 0xc3, 0x88, 0xc7, 0x9e, 0xc5, 0x85, 0xc4, 0x85, 0xc7, 0x95, 0xc6, 0xb1, - 0x5f, 0xc8, 0x95, 0xc8, 0xa6, 0xc4, 0xba, 0xc3, 0x92, 0xc5, 0x97, 0xc3, 0x80, - 0xe1, 0x9b, 0x9c, 0xe2, 0xb1, 0xa0, 0xc9, 0x8a, 0xcd, 0xbd, 0xe1, 0x9a, 0xaf, - 0xc6, 0x83, 0xc8, 0x87, 0xce, 0x88, 0xc7, 0x90, 0xc9, 0x8d, 0xc8, 0x8d, 0xc5, - 0x97, 0xc4, 0xaf, 0xc5, 0xb3, 0xc8, 0x92, 0x70, 0x2f, 0xc5, 0xa4, 0xc7, 0x9e, - 0xc6, 0x92, 0xc9, 0x81, 0xc4, 0xb2, 0xc3, 0xaf, 0xc9, 0x89, 0xc3, 0xab, 0xc4, - 0x8d, 0x6a, 0xc7, 0xbd, 0xe2, 0xb1, 0xa3, 0xc5, 0x86, 0xc6, 0x92, 0x53, 0xc6, - 0x95, 0xc7, 0xa3, 0xc7, 0xbc, 0xc4, 0xb4, 0xc4, 0x8f, 0xc4, 0xb1, 0xc7, 0xb9, - 0xc4, 0xab, 0xc8, 0x84, 0x7b, 0xce, 0x89, 0xc6, 0xbc, 0xc6, 0xb1, 0xe2, 0xb1, - 0xbf, 0xc5, 0x97, 0xc2, 0xbc, 0xe1, 0x9b, 0x8a, 0xc4, 0xab, 0xe1, 0x9a, 0xb9, - 0xc8, 0x83, 0xe1, 0x9b, 0xa4, 0x78, 0xc8, 0xb3, 0xc3, 0x9c, 0x38, 0xe1, 0x9b, - 0xa7, 0xc6, 0xaf, 0xc8, 0xab, 0xe1, 0x9a, 0xa9, 0xc8, 0x9a, 0xe2, 0xb1, 0xbb, - 0xc4, 0x8b, 0xc6, 0xba, 0xe1, 0x9b, 0xab, 0x5a, 0xc6, 0xa0, 0xc4, 0xab, 0xe1, - 0x9b, 0x82, 0xc7, 0xb9, 0xc3, 0xb6, 0xc4, 0x83, 0x70, 0xc8, 0x81, 0xe1, 0x9a, - 0xa2, 0xc5, 0x8c, 0xc4, 0xa3, 0xc4, 0xb0, 0xc9, 0x80, 0xe1, 0x9a, 0xaf, 0xc4, - 0xb4, 0xc4, 0x9d, 0xc6, 0x98, 0xc6, 0xa6, 0xe1, 0x9b, 0x8b, 0xc7, 0xb5, 0xe1, - 0x9b, 0xae, 0xe1, 0x9b, 0x96, 0xc2, 0xbf, 0xc6, 0xb7, 0xc6, 0x96, 0xc5, 0x8d, - 0xc6, 0x8f, 0xc7, 0x94, 0xc5, 0xa6, 0x00, 0x01, 0xfd, 0x73, 0x01, 0xc7, 0xaf, - 0xc8, 0xae, 0xc4, 0x93, 0xc8, 0x9f, 0xc2, 0xb0, 0xc6, 0x92, 0xc5, 0x90, 0xe1, - 0x9b, 0x89, 0xc8, 0x88, 0xc8, 0xbe, 0xc7, 0x80, 0x7b, 0xc7, 0xb5, 0xe1, 0x9b, - 0xa8, 0xc8, 0x9e, 0xc2, 0xb3, 0xc5, 0xa1, 0xc9, 0x85, 0xe1, 0x9b, 0x83, 0xe1, - 0x9b, 0xa2, 0xc8, 0xba, 0xc4, 0x85, 0xc5, 0x81, 0xc5, 0x93, 0xc5, 0xa2, 0xc8, - 0x91, 0xe1, 0x9b, 0x85, 0xc4, 0xb3, 0xc5, 0x8f, 0xe1, 0x9a, 0xaa, 0xcd, 0xb1, - 0xe1, 0x9b, 0xad, 0xc3, 0xac, 0xc8, 0x9b, 0xc4, 0x8a, 0xc8, 0x9b, 0xe1, 0x9b, - 0x82, 0xc7, 0xa8, 0xc7, 0xa9, 0x2f, 0xc2, 0xba, 0xc3, 0x87, 0xc8, 0xb4, 0xc4, - 0x86, 0x5a, 0xe1, 0x9a, 0xb0, 0x45, 0xc5, 0xa9, 0xc3, 0x90, 0xcd, 0xbb, 0xe1, - 0x9a, 0xb2, 0xc5, 0x90, 0xc5, 0xa5, 0xc6, 0xa6, 0x71, 0xc4, 0x90, 0xc4, 0xaf, - 0xc8, 0x93, 0xc3, 0xad, 0xc7, 0xb6, 0x2e, 0xc3, 0xbd, 0x43, 0x7e, 0x75, 0xe1, - 0x9b, 0xad, 0x28, 0xc6, 0xaa, 0x78, 0xc4, 0xa2, 0xc3, 0x8b, 0xc8, 0x8c, 0xe1, - 0x9a, 0xba, 0xe1, 0x9a, 0xa7, 0xc7, 0xbe, 0xc6, 0xb6, 0xc2, 0xa5, 0xc6, 0x89, - 0xc9, 0x8e, 0x31, 0xe1, 0x9a, 0xb6, 0xc4, 0x92, 0x21, 0xc7, 0xb3, 0xc7, 0xb2, - 0xc4, 0xa8, 0xc8, 0xa3, 0xc7, 0x97, 0xc4, 0xbc, 0xc7, 0x9e, 0xc2, 0xa5, 0xe1, - 0x9a, 0xab, 0xc5, 0x98, 0xe1, 0x9a, 0xb0, 0x2f, 0x4a, 0xce, 0x88, 0xc6, 0xa6, - 0xc6, 0xb5, 0xe2, 0xb1, 0xb7, 0xc4, 0xa7, 0xc9, 0x83, 0xc5, 0xb5, 0xce, 0x8c, - 0xc7, 0x86, 0xc2, 0xba, 0xe1, 0x9b, 0x92, 0xc7, 0x9a, 0xe1, 0x9a, 0xba, 0xc6, - 0xb1, 0xc2, 0xb6, 0xc6, 0xbb, 0xc6, 0xb6, 0xc8, 0x8e, 0xc4, 0x80, 0xc8, 0x8f, - 0xc4, 0xa6, 0xc4, 0x8a, 0xc6, 0xa7, 0x26, 0x52, 0xc2, 0xa6, 0xc6, 0x8b, 0xc6, - 0xb5, 0xc6, 0x8e, 0xc6, 0xa2, 0xc8, 0x92, 0xc7, 0x9c, 0x43, 0xc8, 0x9c, 0x5e, - 0xe1, 0x9b, 0xa4, 0x50, 0xc8, 0xaf, 0xc4, 0x92, 0x42, 0xc8, 0x99, 0xc6, 0x9e, - 0xc3, 0xb3, 0xc5, 0x93, 0xc5, 0xa6, 0xc7, 0xb2, 0xc7, 0xb6, 0xc6, 0x83, 0xe2, - 0xb1, 0xb9, 0xc6, 0x91, 0xc8, 0x81, 0xc7, 0x96, 0xc9, 0x87, 0xc4, 0x86, 0xc6, - 0x9b, 0xc3, 0xb2, 0x6f, 0xe2, 0xb1, 0xae, 0xcd, 0xba, 0x6b, 0xe1, 0x9b, 0x8f, - 0xc6, 0x89, 0x59, 0xe1, 0x9b, 0x95, 0xe2, 0xb1, 0xbc, 0xe2, 0xb1, 0xaf, 0xc4, - 0xb1, 0xc2, 0xb8, 0xe1, 0x9b, 0xac, 0xe1, 0x9a, 0xa8, 0xc2, 0xb9, 0xc7, 0xa4, - 0xc6, 0xbf, 0xc4, 0x95, 0xe1, 0x9a, 0xb4, 0xc6, 0xba, 0xc8, 0x8e, 0xe1, 0x9b, - 0x90, 0x28, 0xcd, 0xb6, 0xc7, 0x98, 0xc6, 0xbe, 0xc6, 0x97, 0xc6, 0xa2, 0xc8, - 0x85, 0x3a, 0xc4, 0xa5, 0x5a, 0x04, 0xdf, 0x60, 0xdf, 0x19, 0x27, 0xc0, 0x48, - 0x6b, 0x56, 0xb9, 0x94, 0x13, 0xb6, 0xa5, 0xd3, 0x2b, 0x3f, 0x2c, 0xd7, 0x44, - 0xeb, 0xa1, 0xf0, 0x28, 0x36, 0x0c, 0xfe, 0x57, 0x88, 0x00, 0x0b, 0xad, 0xc7, - 0x55, 0xbe, 0xa3, 0xad, 0x5f, 0x58, 0xfb, 0x14, 0x40, 0xa2, 0x21, 0x1f, 0x1f, - 0x79, 0xcf, 0x33, 0x10, 0x8e, 0x2f, 0xf1, 0x25, 0xa2, 0xc3, 0x3c, 0xa2, 0x7a, - 0x77, 0x76, 0x24, 0x5f, 0x6a, 0xe4, 0x88, 0x44, 0x7e, 0xf6, 0x1a, 0xa1, 0x90, - 0xe0, 0xf2, 0x2e, 0xaf, 0xa0, 0xf6, 0xfa, 0x15, 0xc1, 0x94, 0x1a, 0x93, 0xd9, - 0x53, 0x78, 0xba, 0xe6, 0x95, 0x82, 0x74, 0xb3, 0x10, 0x88, 0xfb, 0xd8, 0xb3, - 0xa3, 0xa0, 0xd1, 0x54, 0xa7, 0x89, 0x73, 0x5b, 0x03, 0x49, 0xc4, 0xd5, 0x1c, - 0x88, 0x9d, 0x08, 0x15, 0x2d, 0xdd, 0x54, 0x88, 0xbe, 0x95, 0x56, 0x05, 0x94, - 0xe6, 0x73, 0xfa, 0x05, 0x1b, 0xf9, 0xb6, 0x14, 0xa1, 0x5e, 0x10, 0x0b, 0x60, - 0xa0, 0xfe, 0x9a, 0x7e, 0x12, 0xa9, 0xb2, 0x56, 0xdf, 0x58, 0xf9, 0x6f, 0xcb, - 0x3f, 0xdd, 0x17, 0xe2, 0x76, 0x8c, 0x17, 0x5b, 0xf1, 0xc9, 0xa4, 0x85, 0x1d, - 0x9a, 0xb7, 0x2a, 0xd8, 0xdf, 0xc3, 0x9d, 0xba, 0xbe, 0x2b, 0xc9, 0xca, 0x9d, - 0x72, 0x97, 0xdf, 0xc4, 0x1f, 0xd6, 0x4b, 0x3c, 0x9e, 0x18, 0x80, 0x58, 0x32, - 0xb8, 0x83, 0xe3, 0xdc, 0xd9, 0xf6, 0xea, 0xb3, 0xda, 0x2f, 0xf1, 0x25, 0xa2, - 0xc3, 0x3c, 0xa2, 0x7a, 0x77, 0x76, 0x24, 0x5f, 0x6a, 0xe4, 0x88, 0x44, 0x7e, - 0xf6, 0x1a, 0xa1, 0x90, 0xe0, 0xf2, 0x2e, 0xaf, 0xa0, 0xf6, 0xfa, 0x15, 0xc1, - 0x94, 0x1a, 0xdf, 0x87, 0x2f, 0x79, 0x63, 0x7d, 0xda, 0x39, 0x16, 0x79, 0x6a, - 0x5c, 0x62, 0xf5, 0x7f, 0x1d, 0xe3, 0x76, 0x78, 0xb6, 0xde, 0xa0, 0x08, 0x69, - 0x93, 0x36, 0x74, 0xf8, 0x8e, 0x41, 0xa9, 0x18, 0x08, 0x07, 0x3b, 0x0f, 0x43, - 0x6e, 0xbe, 0x25, 0xa5, 0xf4, 0x4a, 0x60, 0x10, 0x33, 0xe2, 0x18, 0x4b, 0x88, - 0xdb, 0x79, 0xe9, 0x68, 0xca, 0x6d, 0x89, 0xb7, 0x49, 0x01, 0xbe, 0x6c, 0x6d, - 0xb3, 0x0b, 0xf9, 0x09, 0x21, 0x83, 0x80, 0x79, 0x0e, 0x40, 0x7a, 0xb5, 0xf5, - 0x76, 0x31, 0x4c, 0x00, 0xd2, 0x80, 0x46, 0xe3, 0xf4, 0xc1, 0x33, 0x5f, 0x4a, - 0x0b, 0x87, 0x15, 0xab, 0x98, 0x19, 0x22, 0xc2, 0x0a, 0x11, 0x67, 0x22, 0xbc, - 0x82, 0xfa, 0xcd, 0x0f, 0x1d, 0x29, 0xf6, 0xc3, 0xff, 0x8e, 0x42, 0xe3, 0x09, - 0x2f, 0xf1, 0x25, 0xa2, 0xc3, 0x3c, 0xa2, 0x7a, 0x77, 0x76, 0x24, 0x5f, 0x6a, - 0xe4, 0x88, 0x44, 0x7e, 0xf6, 0x1a, 0xa1, 0x90, 0xe0, 0xf2, 0x2e, 0xaf, 0xa0, - 0xf6, 0xfa, 0x15, 0xc1, 0x94, 0x1a, 0xfd, 0x56, 0x53, 0x65, 0xa4, 0x16, 0x37, - 0x68, 0x78, 0x51, 0x53, 0x88, 0x7f, 0xb5, 0xf9, 0x63, 0xe7, 0xac, 0xc1, 0x62, - 0xf2, 0x80, 0x5f, 0x45, 0xf4, 0x44, 0x87, 0xf8, 0x5e, 0x19, 0x9c, 0x1d, 0xf4, - 0xa0, 0xfc, 0xa4, 0xd4, 0x4b, 0xaa, 0x62, 0xda, 0x7a, 0xf5, 0xed, 0x69, 0x68, - 0x41, 0x12, 0xd3, 0x5f, 0x36, 0x73, 0x73, 0x2f, 0x5a, 0x1a, 0xc3, 0xe4, 0xf0, - 0x21, 0xba, 0x5c, 0x2c, 0x32, 0x21, 0xa4, 0xbc, 0xc9, 0x32, 0xe7, 0x3e, 0x1b, - 0xdc, 0xdd, 0x7f, 0x42, 0x20, 0x5d, 0xba, 0x4b, 0xab, 0x90, 0x03, 0xb9, 0x4a, - 0x35, 0x97, 0xea, 0xa2, 0xa4, 0xbd, 0xb1, 0xd9, 0x87, 0x60, 0x80, 0x46, 0x73, - 0x1f, 0x04, 0x04, 0xbc, 0x6f, 0x49, 0x4d, 0x30, 0x97, 0x36, 0x02, 0x4d, 0x2e, - 0x79, 0x0f, 0xc6, 0xfd, 0x2f, 0xf1, 0x25, 0xa2, 0xc3, 0x3c, 0xa2, 0x7a, 0x77, - 0x76, 0x24, 0x5f, 0x6a, 0xe4, 0x88, 0x44, 0x7e, 0xf6, 0x1a, 0xa1, 0x90, 0xe0, - 0xf2, 0x2e, 0xaf, 0xa0, 0xf6, 0xfa, 0x15, 0xc1, 0x94, 0x1a, 0x66, 0x7f, 0x17, - 0x6e, 0x0a, 0xa9, 0x9d, 0xd1, 0xd7, 0x2b, 0x57, 0x36, 0x8f, 0x01, 0xb6, 0x6c, - 0x4a, 0x96, 0xc1, 0x56, 0xf3, 0xf2, 0x85, 0x41, 0xab, 0x4c, 0xa4, 0x96, 0x69, - 0x60, 0x21, 0x02, 0x08, 0x46, 0x69, 0x61, 0x12, 0x94, 0x90, 0xa7, 0xd8, 0xb6, - 0x5c, 0x14, 0x70, 0xba, 0xd8, 0xdb, 0x08, 0x28, 0xef, 0x06, 0xc1, 0xcb, 0x55, - 0x70, 0x0e, 0x85, 0xe2, 0x4f, 0xde, 0xa9, 0x4e, 0xa2, 0x00, 0xfd, 0x6f, 0x01, - 0xcd, 0xb1, 0x33, 0xc5, 0xb0, 0xe2, 0xb1, 0xbf, 0xc3, 0x9b, 0xc4, 0x8c, 0xc6, - 0xa0, 0xc5, 0xa4, 0xc8, 0x98, 0xc8, 0xbd, 0xc5, 0x93, 0x35, 0xc2, 0xb0, 0xe1, - 0x9b, 0x98, 0xc5, 0x94, 0xc8, 0xbe, 0x76, 0xc5, 0xa6, 0x4b, 0xc5, 0xa3, 0xc4, - 0xbc, 0xc5, 0x9a, 0xcd, 0xb6, 0xe1, 0x9b, 0x92, 0x36, 0xc3, 0x89, 0xc7, 0x85, - 0xc9, 0x8c, 0xc5, 0x98, 0x76, 0xc9, 0x8d, 0xc4, 0xbb, 0xc6, 0x80, 0xc2, 0xa8, - 0x71, 0xc8, 0x81, 0xc4, 0x9e, 0x4f, 0x5d, 0xe2, 0xb1, 0xbe, 0xc3, 0x95, 0x38, - 0xc6, 0x81, 0xc8, 0x88, 0xc5, 0x8b, 0xc5, 0x80, 0xe2, 0xb1, 0xbf, 0xe2, 0xb1, - 0xb4, 0xc3, 0xbf, 0xc2, 0xaf, 0xe2, 0xb1, 0xbc, 0xc4, 0x84, 0xc3, 0x80, 0xc3, - 0x8f, 0xc9, 0x8d, 0xc7, 0xa2, 0xc6, 0xa6, 0xc4, 0x82, 0xe2, 0xb1, 0xa6, 0xc5, - 0xaf, 0xc3, 0x9a, 0xc8, 0xb3, 0xc3, 0xa7, 0x42, 0xc3, 0x82, 0xe1, 0x9b, 0x90, - 0xc8, 0xa6, 0x79, 0xc3, 0x87, 0x3e, 0xc7, 0xa2, 0x73, 0xc6, 0x90, 0xc4, 0x90, - 0x28, 0xc5, 0xa3, 0xe1, 0x9a, 0xb8, 0xc7, 0xae, 0xc4, 0xbf, 0xc8, 0xb3, 0x59, - 0xc3, 0x90, 0xc8, 0x85, 0xc4, 0x84, 0xc5, 0xa1, 0xc6, 0x80, 0x36, 0xc7, 0x81, - 0xc5, 0xb1, 0xc5, 0x8c, 0xc7, 0xa9, 0xe1, 0x9b, 0xa4, 0xe1, 0x9a, 0xb0, 0xe1, - 0x9a, 0xbd, 0xc6, 0xba, 0xc4, 0xa9, 0xc3, 0x97, 0xe1, 0x9a, 0xb2, 0x67, 0xce, - 0x85, 0xce, 0x89, 0x4f, 0xc7, 0x95, 0xc7, 0x95, 0xc6, 0xb7, 0xc4, 0x9a, 0xe1, - 0x9b, 0xac, 0xc3, 0xaa, 0xc7, 0xad, 0xc3, 0x9e, 0xc9, 0x86, 0xc3, 0xbc, 0xe1, - 0x9b, 0xa0, 0x47, 0x4f, 0xe1, 0x9b, 0x86, 0xc6, 0x96, 0xc2, 0xa3, 0xc2, 0xab, - 0xc3, 0xa8, 0xc4, 0xb0, 0xc8, 0xa1, 0xc5, 0x95, 0xe2, 0xb1, 0xbe, 0xc2, 0xa9, - 0x2c, 0x67, 0x72, 0xc2, 0xbb, 0xc3, 0x8a, 0xce, 0x86, 0xe1, 0x9a, 0xb4, 0xc5, - 0x85, 0xc7, 0x8b, 0xe1, 0x9a, 0xba, 0x5e, 0xe1, 0x9b, 0xa5, 0xc6, 0x80, 0xe1, - 0x9a, 0xaf, 0x6c, 0x5f, 0xc8, 0x86, 0xc7, 0xb2, 0xe2, 0xb1, 0xb8, 0xc3, 0x95, - 0xe1, 0x9b, 0x9d, 0xc8, 0x82, 0xe1, 0x9b, 0xae, 0xc7, 0xa3, 0xc4, 0xaf, 0xc6, - 0xb7, 0xce, 0x8c, 0xc6, 0xaf, 0xc9, 0x87, 0xe2, 0xb1, 0xa1, 0x2a, 0xc4, 0x9e, - 0xc7, 0x9d, 0xcd, 0xb7, 0xc6, 0xaa, 0xc3, 0x89, 0xc5, 0xb0, 0xc8, 0xa2, 0xc8, - 0x98, 0xc6, 0xaa, 0xce, 0x84, 0xc3, 0x92, 0xc4, 0xab, 0x58, 0xe1, 0x9b, 0x9f, - 0xc2, 0xbc, 0xc8, 0xad, 0xc4, 0xb6, 0xe1, 0x9b, 0x93, 0xc3, 0x8f, 0xc6, 0xb8, - 0xc7, 0xb7, 0x50, 0xc5, 0x9e, 0xcd, 0xb1, 0xce, 0x8a, 0x71, 0xc5, 0xbf, 0xc4, - 0x8a, 0xc8, 0xb0, 0x00, 0x01, 0x20, 0xc8, 0xb5, 0xc5, 0x9f, 0xc3, 0x98, 0xe1, - 0x9b, 0x83, 0xe1, 0x9a, 0xa9, 0xc2, 0xbc, 0xc7, 0xa3, 0x28, 0xe2, 0xb1, 0xb3, - 0x2c, 0x45, 0xe1, 0x9b, 0x80, 0xc3, 0x98, 0xc4, 0x92, 0xc6, 0x84, 0x5a, 0x00, - 0x00, 0x9d, 0x2e, 0x9e, 0x09, 0x9f, 0x91, 0x58, 0x08, 0x4e, 0x9f, 0xc5, 0x45, - 0x5b, 0x42, 0xb1, 0x8b, 0x9e, 0x4f, 0xaf, 0x95, 0xc7, 0x00, 0x74, 0x39, 0x81, - 0xa4, 0x19, 0xdd, 0x67, 0x7e, 0x5d, 0x31, 0x1e, 0xff, 0xf1, 0x2e, 0xf9, 0xd4, - 0xf5, 0xb0, 0x45, 0x85, 0x19, 0x7c, 0x3b, 0x3c, 0xc8, 0xe8, 0x57, 0xd8, 0x1f, - 0x21, 0xef, 0x88, 0x1f, 0xed, 0x53, 0x3c, 0x92, 0xcf, 0x4c, 0xb0, 0xe1, 0x8f, - 0xe7, 0xd3, 0x4e, 0x99, 0x7c, 0x64, 0x92, 0x88, 0x4f, 0xe5, 0x6a, 0x8b, 0x91, - 0x08, 0x98, 0x0d, 0x45, 0x3c, 0xb8, 0xa6, 0x6e, 0xa0, 0xa0, 0x15, 0x35, 0x50, - 0x06, 0x0a, 0xcb, 0x04, 0x3a, 0x40, - ], - txid: [ - 0x98, 0x8a, 0x62, 0xa4, 0x7d, 0xdc, 0xdb, 0xc9, 0x94, 0xa7, 0x09, 0xf2, 0xbf, - 0xf0, 0xb2, 0x60, 0x8a, 0x77, 0x55, 0xd6, 0x32, 0xee, 0xd6, 0x78, 0x85, 0xa8, - 0x0f, 0x83, 0xc0, 0x80, 0x61, 0xe8, - ], - auth_digest: [ - 0xa6, 0x85, 0x12, 0x7b, 0x98, 0x11, 0x77, 0x77, 0x7f, 0xd9, 0x69, 0x68, 0x25, - 0x43, 0x42, 0xd5, 0x6f, 0xf7, 0x83, 0x23, 0xd2, 0xad, 0x4c, 0x90, 0xcc, 0xac, - 0x0a, 0xb3, 0xed, 0xfd, 0x90, 0x55, - ], - amounts: vec![1723266777323070, 447623377724180, 1162426483161967], - script_pubkeys: vec![ - vec![0x6a], - vec![0x6a, 0x63, 0xac, 0x65, 0x63], - vec![0x51, 0x6a, 0x63], - ], - transparent_input: Some(0), - sighash_shielded: [ - 0x20, 0x95, 0xb9, 0x26, 0xa8, 0xb1, 0x03, 0x1d, 0xaf, 0xa7, 0x3d, 0x48, 0x5f, - 0xb3, 0xd7, 0x76, 0x1a, 0x18, 0x01, 0xd2, 0x75, 0xdf, 0x12, 0x70, 0x94, 0xfe, - 0x41, 0x7b, 0x6a, 0xfc, 0xe6, 0x19, - ], - sighash_all: Some([ - 0x52, 0xf0, 0xcc, 0x6f, 0x54, 0xa6, 0xd3, 0x2a, 0xf9, 0x27, 0x46, 0x33, 0x1a, - 0x0e, 0x3d, 0x0b, 0x90, 0xfc, 0xd0, 0xa7, 0x77, 0x73, 0x2c, 0x11, 0xb6, 0x83, - 0x65, 0x4d, 0x79, 0xea, 0x64, 0x1c, - ]), - sighash_none: Some([ - 0x53, 0xa2, 0xa7, 0x9e, 0x0a, 0xb7, 0x34, 0xb8, 0xb4, 0x57, 0xa6, 0x77, 0x79, - 0x2e, 0x1a, 0x5d, 0xb5, 0x41, 0xe1, 0xe8, 0x4f, 0x06, 0x8b, 0xc9, 0xfb, 0x7c, - 0x4a, 0xfe, 0x90, 0x3f, 0x10, 0x86, - ]), - sighash_single: Some([ - 0x3a, 0x0f, 0xb6, 0x91, 0xa5, 0x43, 0xa6, 0x1c, 0xfb, 0xfe, 0x5a, 0x89, 0xd5, - 0x27, 0x96, 0x01, 0x70, 0xd8, 0xdf, 0xc0, 0xfe, 0x5d, 0x41, 0xc3, 0x85, 0x1c, - 0xf3, 0xd9, 0x55, 0xc7, 0xc0, 0x30, - ]), - sighash_all_anyone: Some([ - 0xc5, 0x68, 0xdb, 0x39, 0x94, 0xe0, 0x45, 0xca, 0xbd, 0xa9, 0x1c, 0x03, 0xf3, - 0xd6, 0xe7, 0xa7, 0x63, 0x11, 0xd2, 0xfc, 0x56, 0x2d, 0xac, 0xa7, 0xf0, 0x15, - 0x27, 0xde, 0xd8, 0xf3, 0xab, 0x92, - ]), - sighash_none_anyone: Some([ - 0xff, 0xa7, 0xb0, 0x63, 0xf6, 0xef, 0xde, 0xd3, 0x70, 0x50, 0x84, 0xb6, 0x2f, - 0xa0, 0x04, 0x18, 0x96, 0xc3, 0x85, 0xfc, 0xfd, 0x12, 0x22, 0xfc, 0x2c, 0x5a, - 0xa1, 0xe3, 0x96, 0x90, 0x0d, 0x70, - ]), - sighash_single_anyone: Some([ - 0x9c, 0x36, 0xe6, 0xe3, 0x01, 0xb5, 0x9f, 0xc5, 0x1e, 0x55, 0x79, 0xb1, 0x47, - 0x17, 0x5f, 0x87, 0x53, 0x06, 0x5f, 0xdb, 0x27, 0x61, 0xf1, 0x07, 0x67, 0xce, - 0x67, 0x34, 0x76, 0x5b, 0xcb, 0xa6, - ]), - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x08, - 0xff, 0xea, 0x77, 0x5a, 0xcd, 0xaf, 0x1b, 0x00, 0x00, 0x00, 0x02, 0x0b, 0xf8, - 0xbd, 0xbf, 0x01, 0x67, 0x34, 0x0d, 0x62, 0xdb, 0xe6, 0x47, 0x6c, 0xf7, 0x35, - 0x82, 0x1c, 0x9a, 0xbc, 0x73, 0xa2, 0x3c, 0x14, 0x4b, 0x38, 0x51, 0x7a, 0x38, - 0xf8, 0xdf, 0x3d, 0xaf, 0xd3, 0x91, 0xaf, 0x04, 0x9c, 0x39, 0xe2, 0x6d, 0x14, - 0xfb, 0xc4, 0x06, 0x8f, 0xc0, 0x58, 0x23, 0x68, 0xa5, 0x71, 0xee, 0x38, 0xe5, - 0x48, 0x79, 0x58, 0x9f, 0xe5, 0xf2, 0x44, 0x98, 0x2b, 0x11, 0xbc, 0x79, 0x78, - 0x06, 0x6e, 0x5d, 0xeb, 0x90, 0xe2, 0xc9, 0x60, 0x04, 0xa1, 0xdd, 0xbc, 0x5d, - 0x7d, 0x1a, 0x32, 0x76, 0x7e, 0x59, 0xc4, 0x62, 0x9c, 0x22, 0x49, 0x1c, 0x15, - 0x57, 0x7b, 0x88, 0xee, 0xa2, 0x1c, 0x8b, 0x09, 0x57, 0x02, 0x7c, 0x5d, 0x00, - 0xe5, 0x0a, 0x43, 0x88, 0xc7, 0xaf, 0x2b, 0xd6, 0x43, 0xcb, 0x5e, 0xae, 0x49, - 0x27, 0x4d, 0x12, 0x30, 0xa4, 0xcd, 0x49, 0x23, 0x7a, 0xe3, 0x7b, 0x38, 0x10, - 0xc2, 0xc3, 0x95, 0x8a, 0x7d, 0xee, 0x02, 0x34, 0x30, 0x1b, 0x89, 0xa2, 0xdf, - 0x2a, 0x78, 0xef, 0x0b, 0xfb, 0x4b, 0xf6, 0xb3, 0x87, 0xdf, 0x2c, 0x6c, 0x86, - 0xe6, 0x1c, 0xd1, 0x0c, 0xa1, 0x1f, 0x81, 0x13, 0x01, 0x26, 0x07, 0xf1, 0x5b, - 0x28, 0x56, 0x24, 0x0f, 0xdc, 0x52, 0x06, 0x5a, 0x10, 0x28, 0xc8, 0xa2, 0xdd, - 0xfd, 0xd1, 0x5c, 0xf5, 0x26, 0x5f, 0x87, 0x38, 0x8a, 0xb9, 0xbf, 0x21, 0xc9, - 0xa7, 0x8c, 0x59, 0x03, 0x8a, 0x98, 0xab, 0x64, 0xfd, 0x67, 0x10, 0x77, 0xd4, - 0x72, 0xc2, 0x09, 0xdd, 0x72, 0x9b, 0xd7, 0xf8, 0x48, 0x09, 0x45, 0xfb, 0xa7, - 0x52, 0x09, 0x8a, 0x94, 0xcc, 0xb2, 0x4c, 0xf3, 0xbc, 0x09, 0x2d, 0x42, 0x36, - 0x46, 0x11, 0xa2, 0x93, 0xaf, 0xf3, 0xc5, 0x79, 0x37, 0x2c, 0x12, 0xe1, 0x50, - 0x90, 0xaa, 0x27, 0x23, 0x20, 0x57, 0xf2, 0xed, 0xde, 0x4e, 0x1d, 0xb2, 0x92, - 0xf7, 0xb1, 0x86, 0x47, 0x22, 0x67, 0x35, 0x17, 0x6d, 0x90, 0xf1, 0x26, 0x5b, - 0x37, 0x98, 0xcc, 0xab, 0xac, 0x0b, 0x8d, 0x79, 0xb1, 0x77, 0x20, 0xb2, 0xba, - 0x71, 0xd7, 0x85, 0x0c, 0xc2, 0xa0, 0x87, 0x2b, 0xf0, 0xf4, 0xb8, 0x14, 0x36, - 0x78, 0x59, 0xf8, 0x99, 0x48, 0xf0, 0xa1, 0xa3, 0x83, 0x60, 0x4b, 0x9e, 0xf0, - 0x7e, 0xa9, 0x3d, 0xbb, 0x98, 0x71, 0xc0, 0x09, 0xaa, 0x6a, 0x31, 0xd8, 0xea, - 0xf1, 0x43, 0x0b, 0x7b, 0xc0, 0xac, 0x26, 0x4e, 0x2f, 0x97, 0x6a, 0xd3, 0x97, - 0xf2, 0x7f, 0x48, 0x37, 0x8f, 0x8a, 0x4e, 0xd9, 0x02, 0xc6, 0x6e, 0x49, 0x18, - 0xfa, 0xee, 0x8d, 0xc0, 0x06, 0x72, 0x46, 0x96, 0x0d, 0xb1, 0xf8, 0xcd, 0x07, - 0xbf, 0x90, 0xd7, 0x53, 0x7c, 0xc2, 0x7b, 0xbb, 0x8c, 0x9d, 0x5b, 0x29, 0x62, - 0xc4, 0x7e, 0xd1, 0x82, 0xa2, 0xfc, 0xe0, 0x5f, 0x8e, 0x03, 0xc4, 0xe2, 0x5e, - 0x49, 0x6d, 0xd5, 0x7d, 0x6a, 0xb3, 0x45, 0x8f, 0xac, 0xbd, 0x91, 0xea, 0x22, - 0x72, 0xff, 0xda, 0x47, 0xb0, 0x73, 0x59, 0x5e, 0x78, 0xdd, 0x84, 0xb7, 0x1f, - 0xf8, 0x8b, 0x74, 0x21, 0x02, 0x88, 0xf0, 0xea, 0xf8, 0xe7, 0x1a, 0xeb, 0xa4, - 0x4c, 0x5e, 0xc3, 0x82, 0xe3, 0x59, 0x33, 0xe1, 0x7b, 0xa7, 0xef, 0xd6, 0x64, - 0x90, 0xf6, 0x72, 0x03, 0x2d, 0x4e, 0xbc, 0xf7, 0xcd, 0x55, 0x7a, 0xe0, 0xdb, - 0xb7, 0x25, 0x00, 0x4e, 0xcb, 0x05, 0x7a, 0x5a, 0x2b, 0x15, 0x7a, 0x1a, 0xbf, - 0xb9, 0x83, 0x87, 0x08, 0xba, 0x28, 0xe7, 0xea, 0xa2, 0x12, 0xa9, 0x04, 0x22, - 0xc1, 0x27, 0x17, 0x53, 0xb9, 0xf3, 0x0f, 0x8f, 0xf8, 0xe5, 0x33, 0xa9, 0x93, - 0xf0, 0x69, 0xbd, 0x82, 0x2b, 0xf7, 0x24, 0xd1, 0xb7, 0x38, 0xc7, 0x3d, 0x4b, - 0x46, 0xe9, 0x90, 0x28, 0xde, 0x1e, 0xaa, 0xdf, 0x9a, 0xb0, 0x89, 0xdd, 0x46, - 0x6c, 0xa1, 0x85, 0xa8, 0x0a, 0xfc, 0xfd, 0x44, 0x68, 0x5c, 0xf8, 0xec, 0xe5, - 0x58, 0xd7, 0xbf, 0xd0, 0x17, 0x39, 0x20, 0xd7, 0x17, 0x51, 0x30, 0xf0, 0xe4, - 0xd0, 0x93, 0x74, 0x41, 0xbc, 0xe9, 0x8c, 0xfa, 0x5b, 0x33, 0x3b, 0x66, 0x19, - 0x0f, 0x2b, 0x44, 0x71, 0x38, 0xe8, 0xc2, 0x6d, 0x84, 0x12, 0xca, 0xc8, 0x20, - 0x86, 0xd6, 0x1b, 0x5d, 0x2c, 0x8c, 0xf0, 0xbb, 0xeb, 0xac, 0x5b, 0x89, 0xbf, - 0xe8, 0x2b, 0x58, 0x91, 0x76, 0x64, 0xba, 0xb9, 0x1c, 0xe2, 0xec, 0xe2, 0x90, - 0xb2, 0x7b, 0x60, 0x52, 0xd4, 0xbf, 0x99, 0x1a, 0x33, 0xf4, 0x58, 0x1a, 0x63, - 0x36, 0x25, 0x78, 0x79, 0x58, 0x89, 0x7f, 0xca, 0x4b, 0x98, 0xb7, 0xe7, 0x27, - 0x7c, 0x5e, 0x6a, 0x1d, 0x88, 0x59, 0x48, 0xc9, 0xd4, 0x84, 0xdd, 0x0c, 0xef, - 0xef, 0x85, 0x4e, 0x81, 0x76, 0xc3, 0x97, 0xdc, 0xfa, 0x77, 0x2e, 0x71, 0x14, - 0x72, 0xe7, 0x90, 0xba, 0x8d, 0x39, 0x35, 0xd5, 0x7c, 0xa3, 0x13, 0x49, 0x37, - 0x9e, 0x62, 0x83, 0xa6, 0xaa, 0x8f, 0xc9, 0x91, 0xef, 0xc7, 0xd3, 0xb7, 0xef, - 0x66, 0xb9, 0x2f, 0xe0, 0x9d, 0x35, 0x16, 0x27, 0x0a, 0xe1, 0x9a, 0x99, 0x92, - 0x16, 0xee, 0xae, 0x16, 0x21, 0x44, 0xac, 0xea, 0x56, 0x0d, 0x17, 0x72, 0x05, - 0xf2, 0x6c, 0x97, 0x03, 0xb5, 0x4e, 0x80, 0xaf, 0x1a, 0x87, 0x94, 0xd6, 0xd3, - 0xf1, 0xc5, 0xee, 0xad, 0x22, 0x0b, 0x11, 0x9f, 0x06, 0xb2, 0x00, 0x98, 0x6c, - 0x91, 0x21, 0x32, 0xcb, 0x08, 0xa9, 0x8e, 0x0f, 0xee, 0x35, 0xe7, 0xf7, 0x7f, - 0xc8, 0x52, 0x1d, 0x38, 0x77, 0x3e, 0x61, 0x4e, 0xee, 0xb8, 0xa3, 0xea, 0xd8, - 0xe9, 0x23, 0x9b, 0xec, 0x57, 0x0b, 0x9d, 0xdc, 0x0c, 0x21, 0x49, 0x69, 0xec, - 0x76, 0x71, 0x1d, 0x3f, 0x62, 0x96, 0x98, 0xda, 0xbb, 0xac, 0x9c, 0xe3, 0x2e, - 0x73, 0x73, 0x65, 0x95, 0x09, 0x24, 0x7b, 0x22, 0x6b, 0x04, 0xa7, 0xea, 0xe8, - 0x5f, 0x1c, 0x15, 0xcc, 0x19, 0x9e, 0xcd, 0xcb, 0xae, 0xae, 0xeb, 0x01, 0xac, - 0xfe, 0xff, 0x87, 0x84, 0x66, 0xf5, 0xee, 0x71, 0x19, 0x1c, 0x2a, 0x71, 0xec, - 0xb2, 0xbd, 0xa0, 0xb7, 0xa6, 0x43, 0xb3, 0x15, 0xe8, 0x14, 0xd0, 0x2d, 0x37, - 0x38, 0xe7, 0x3d, 0xd7, 0xbe, 0xf6, 0x5d, 0x40, 0x21, 0xc3, 0xf6, 0x95, 0xb0, - 0x6c, 0x5b, 0xaf, 0x49, 0x39, 0xfb, 0xa3, 0x6f, 0xe4, 0xcf, 0xd9, 0x7b, 0x4b, - 0xdd, 0x0c, 0x4d, 0x2c, 0x93, 0xc5, 0x72, 0x8b, 0x12, 0x87, 0xfd, 0x25, 0x41, - 0x72, 0x2c, 0x69, 0x9b, 0xc1, 0xa0, 0x05, 0x83, 0xdb, 0xc9, 0x48, 0xd5, 0x32, - 0x4a, 0xc5, 0xbd, 0x7a, 0x68, 0x09, 0x64, 0x67, 0x3e, 0xdf, 0x2c, 0x6d, 0xeb, - 0xb1, 0xc8, 0xe1, 0xd0, 0x24, 0x16, 0xe6, 0xbd, 0xb2, 0xa7, 0x68, 0x1b, 0xf4, - 0x29, 0x92, 0x25, 0xc2, 0x1b, 0x5d, 0xb6, 0xa8, 0x45, 0xad, 0x10, 0x4d, 0x34, - 0x29, 0xcd, 0xc5, 0x9e, 0x3b, 0xca, 0xcf, 0x6d, 0xbc, 0x88, 0xaf, 0x0f, 0x67, - 0xdc, 0xbd, 0xf3, 0xa0, 0x72, 0x3e, 0x4d, 0x4b, 0xce, 0x32, 0x85, 0x1b, 0xb5, - 0x19, 0x7a, 0x8f, 0x43, 0x30, 0xb2, 0x72, 0x27, 0xf0, 0xb7, 0x71, 0xd0, 0xaf, - 0x17, 0x5e, 0x9c, 0x3f, 0x6e, 0x1f, 0x68, 0x46, 0x2e, 0xe7, 0xfe, 0x17, 0x97, - 0xd9, 0x28, 0x40, 0x6f, 0x92, 0x38, 0xa3, 0xf3, 0xfd, 0x83, 0x6a, 0x27, 0x56, - 0xdd, 0x0a, 0x11, 0xe1, 0xab, 0x94, 0x9d, 0x5e, 0x30, 0x89, 0x4f, 0x56, 0x29, - 0x95, 0x25, 0xe6, 0x5d, 0x95, 0x0f, 0x2e, 0xb5, 0x0b, 0x3a, 0x8e, 0xa7, 0xac, - 0xad, 0xbc, 0x3c, 0x77, 0xeb, 0x53, 0xe7, 0xde, 0x9b, 0xa8, 0x2f, 0x7d, 0xd5, - 0xf6, 0x13, 0xcd, 0xa6, 0x29, 0xfc, 0xd2, 0xf6, 0x36, 0x6b, 0x2e, 0x1e, 0xc2, - 0x40, 0xd4, 0x82, 0xc3, 0xa6, 0xf9, 0xd9, 0x8d, 0xab, 0x1c, 0x86, 0x4c, 0x00, - 0xb8, 0xfd, 0x36, 0x46, 0xf0, 0xd5, 0x96, 0xfe, 0x18, 0x0f, 0x70, 0xb1, 0x94, - 0x84, 0x25, 0x63, 0xe9, 0xf3, 0xf4, 0xdc, 0xf5, 0x2b, 0x89, 0x3a, 0x70, 0x9e, - 0x1d, 0xd4, 0xa7, 0xca, 0x1c, 0x49, 0xec, 0x81, 0x4e, 0x8f, 0xe6, 0xe0, 0xe0, - 0xde, 0x54, 0x6a, 0x4f, 0xbe, 0x7d, 0x25, 0x67, 0x0b, 0x2f, 0xc6, 0x8a, 0x8f, - 0xb2, 0xc4, 0xa6, 0x3d, 0xef, 0xec, 0x6f, 0xe0, 0x1d, 0x8c, 0xe0, 0xf5, 0x1d, - 0x3c, 0x65, 0xa4, 0x28, 0x90, 0x97, 0x5f, 0xa1, 0xed, 0xed, 0x70, 0x56, 0x20, - 0xdf, 0xcd, 0x1d, 0x0c, 0xde, 0xad, 0x2a, 0xbf, 0xa6, 0xdf, 0xe2, 0x6d, 0x79, - 0xc9, 0x0c, 0x63, 0xff, 0x96, 0xe5, 0x40, 0xb7, 0x61, 0x5d, 0x43, 0xa6, 0x26, - 0x1d, 0x57, 0x73, 0x03, 0x06, 0xb6, 0x63, 0x2c, 0x8e, 0xe6, 0x1b, 0xaa, 0x4a, - 0xb4, 0xd3, 0x08, 0x4d, 0x65, 0x9c, 0xab, 0xcf, 0xc4, 0x06, 0x4c, 0x09, 0xd2, - 0x42, 0x69, 0xb3, 0x03, 0x17, 0x10, 0xb6, 0x7d, 0x3b, 0x0b, 0x73, 0x6f, 0xac, - 0xbc, 0x18, 0x1e, 0xb1, 0xdc, 0x8c, 0x49, 0x3f, 0x10, 0xdb, 0xe6, 0xfe, 0x45, - 0xfd, 0xd4, 0xab, 0x60, 0x22, 0xfa, 0xbd, 0xd3, 0x4c, 0x09, 0xf7, 0x51, 0x04, - 0xc3, 0x85, 0xc9, 0x26, 0x83, 0x41, 0xc1, 0x6e, 0xbe, 0x80, 0xf8, 0xc8, 0x0e, - 0x8e, 0x06, 0x23, 0x06, 0x03, 0x99, 0x5a, 0xde, 0x55, 0x61, 0xfe, 0xd4, 0x5c, - 0xf8, 0xd1, 0x14, 0xd4, 0xcf, 0x02, 0x42, 0x0c, 0x4b, 0x96, 0x2d, 0xc2, 0x02, - 0xf8, 0xa5, 0x07, 0xf3, 0xd8, 0xe8, 0xa3, 0x44, 0xfb, 0xa1, 0x0a, 0x32, 0x7f, - 0xf2, 0x22, 0x54, 0xf6, 0xc3, 0xac, 0x8f, 0x3c, 0xf9, 0x70, 0x0b, 0x1f, 0xd2, - 0xec, 0xbe, 0x9f, 0x4e, 0x91, 0xe4, 0x3a, 0x65, 0x4f, 0xff, 0x02, 0x7c, 0xd9, - 0x17, 0x4b, 0x63, 0x8e, 0x6e, 0xfe, 0xc4, 0xab, 0xfb, 0xa1, 0x87, 0xf8, 0xf3, - 0xdb, 0xa0, 0x45, 0x9d, 0xa6, 0xc3, 0xf8, 0x00, 0xcb, 0x6b, 0x61, 0x33, 0xa8, - 0xb4, 0xac, 0x1e, 0xf6, 0x58, 0xd1, 0x11, 0xc0, 0x3f, 0x07, 0x22, 0x08, 0xdc, - 0xc2, 0x07, 0xa2, 0x22, 0x3a, 0x70, 0x22, 0x92, 0x43, 0x2e, 0x83, 0x06, 0xfc, - 0x03, 0x04, 0x63, 0xe7, 0x54, 0xff, 0x0f, 0x15, 0x3d, 0x97, 0xbc, 0x9c, 0xe9, - 0x6d, 0xff, 0x4b, 0xed, 0x2f, 0x1e, 0xa5, 0xb8, 0xea, 0x87, 0x6d, 0x2e, 0xe4, - 0xe4, 0xf6, 0xe4, 0x9a, 0x4a, 0x85, 0xa9, 0xcf, 0x4a, 0x33, 0xdc, 0xd9, 0x36, - 0x60, 0xa4, 0x25, 0x43, 0xe5, 0x34, 0x22, 0x39, 0x0d, 0x66, 0x5b, 0xdd, 0x30, - 0x24, 0x78, 0xb3, 0x3c, 0x8d, 0x57, 0x47, 0x92, 0x41, 0x4c, 0x5f, 0xe5, 0xb7, - 0x4f, 0xe1, 0xd1, 0x69, 0x52, 0x5c, 0x99, 0x30, 0x1a, 0x3a, 0x68, 0xa0, 0xc8, - 0x5f, 0x99, 0x08, 0xed, 0x24, 0x25, 0x51, 0x5d, 0x45, 0xca, 0xe5, 0xca, 0xe7, - 0xce, 0x0e, 0x98, 0xb5, 0x82, 0x9e, 0xd6, 0x96, 0xbe, 0x2c, 0x3d, 0xb4, 0x59, - 0xe0, 0xad, 0x5b, 0x5d, 0xf7, 0x4a, 0xa1, 0x7b, 0x43, 0x44, 0x65, 0x42, 0xaf, - 0x17, 0x84, 0x40, 0x1e, 0xfe, 0xc9, 0xf1, 0x25, 0x6d, 0xaf, 0x71, 0x91, 0x59, - 0xd8, 0xa1, 0x83, 0x3f, 0xc0, 0x5c, 0xdb, 0x01, 0xf6, 0x88, 0xef, 0x49, 0x81, - 0xc7, 0x4a, 0x7f, 0xf4, 0x3d, 0xe3, 0x55, 0xc3, 0xc4, 0x66, 0x1c, 0x36, 0xfa, - 0x24, 0xec, 0x3c, 0x04, 0x7b, 0xf7, 0xd8, 0x03, 0x00, 0x00, 0x6a, 0x02, 0x48, - 0x32, 0xe6, 0x4a, 0x4c, 0x75, 0x72, 0x0c, 0xdc, 0xdd, 0xf9, 0xd0, 0x77, 0x09, - 0xa1, 0x68, 0xd0, 0x10, 0x12, 0xc2, 0xe4, 0xf3, 0x34, 0x30, 0xf2, 0x99, 0x70, - 0xc6, 0x0b, 0xe8, 0xc5, 0xe2, 0xc8, 0xcc, 0x8a, 0x86, 0xed, 0xcd, 0x51, 0x2d, - 0xa7, 0x0d, 0xd7, 0xbb, 0x40, 0xe2, 0x7b, 0x32, 0xdf, 0x3d, 0x77, 0x6a, 0x4a, - 0x7b, 0x00, 0xe3, 0xbd, 0x8f, 0x69, 0x7f, 0x1f, 0x4e, 0x5c, 0x9f, 0xbe, 0xbe, - 0xb4, 0x46, 0xb0, 0x25, 0xfd, 0x80, 0x65, 0xb1, 0x86, 0xae, 0xdc, 0x75, 0xf5, - 0x68, 0x87, 0x2c, 0x16, 0xfa, 0xf5, 0xe5, 0xa3, 0x47, 0x4d, 0x8a, 0x9d, 0x45, - 0x54, 0x8f, 0xac, 0xb7, 0x46, 0x9a, 0xcb, 0x2d, 0xa1, 0x0b, 0x70, 0x78, 0x25, - 0x9c, 0x50, 0x7c, 0x4d, 0xeb, 0xe4, 0x50, 0x8e, 0x0c, 0xee, 0x4f, 0xbc, 0xb0, - 0xd1, 0x3b, 0xf6, 0x24, 0x37, 0xdc, 0xf0, 0x5a, 0x63, 0x13, 0x45, 0xef, 0xbe, - 0x0d, 0x7b, 0xb9, 0x01, 0x61, 0x66, 0x55, 0x4f, 0xf3, 0x8a, 0x1d, 0x77, 0xf2, - 0xfd, 0xa4, 0xe7, 0xeb, 0xa7, 0xa7, 0x8a, 0xb3, 0x1f, 0x38, 0x29, 0x42, 0x52, - 0xa2, 0xb1, 0x0f, 0xd2, 0x86, 0x5b, 0x57, 0x05, 0x05, 0x5d, 0xfe, 0x9b, 0x3e, - 0x9e, 0x8f, 0x7a, 0xd5, 0xf4, 0x00, 0x7d, 0xbe, 0x42, 0x2b, 0x3a, 0xa0, 0xbe, - 0xb9, 0xd1, 0xc8, 0x9d, 0x37, 0x46, 0x08, 0x10, 0x99, 0xa8, 0xad, 0xf4, 0xe3, - 0x11, 0x48, 0x78, 0x20, 0xb5, 0xa7, 0x76, 0xea, 0x06, 0x42, 0xef, 0x8e, 0xf1, - 0xe2, 0x87, 0x82, 0x76, 0x7d, 0x9d, 0xe5, 0x7d, 0xea, 0xde, 0xad, 0xcb, 0x4a, - 0xf5, 0x19, 0x3e, 0x09, 0xc9, 0xbb, 0x74, 0x73, 0x77, 0x3a, 0x8c, 0xa5, 0x6d, - 0x76, 0x51, 0x1d, 0x65, 0x99, 0x20, 0xdb, 0x99, 0x64, 0xd3, 0x2b, 0xad, 0xb6, - 0x1f, 0x4c, 0xf6, 0xb0, 0x22, 0xd7, 0xc1, 0x53, 0x93, 0x18, 0x49, 0x64, 0x3e, - 0x8b, 0x99, 0xea, 0xe0, 0x28, 0x4f, 0x8b, 0x01, 0x15, 0xb4, 0x23, 0x7a, 0x7c, - 0x5d, 0x81, 0x97, 0x0f, 0xe8, 0x7c, 0x6f, 0x84, 0xb6, 0x68, 0x6c, 0x46, 0x25, - 0xdb, 0xdd, 0x9d, 0x79, 0xd2, 0xc5, 0x55, 0xdd, 0x4f, 0xce, 0xed, 0x2c, 0x5e, - 0x5e, 0x89, 0x6f, 0x63, 0x1a, 0xe4, 0x59, 0x7e, 0x9c, 0xc0, 0xbe, 0xe7, 0xb3, - 0x02, 0x5f, 0x95, 0x56, 0x10, 0x6a, 0x84, 0x3a, 0x18, 0x22, 0x7f, 0x5a, 0xb9, - 0x61, 0x7d, 0x7b, 0xcb, 0x1a, 0xf5, 0x28, 0xfa, 0xa7, 0xa0, 0x52, 0xea, 0x4f, - 0x52, 0xca, 0x59, 0x45, 0x57, 0xfd, 0xad, 0x33, 0x05, 0x2b, 0xc8, 0x2b, 0x39, - 0xc6, 0xa6, 0x09, 0xa0, 0x70, 0x75, 0x3d, 0x78, 0x8b, 0x2c, 0x4a, 0x2c, 0xae, - 0xbb, 0xe7, 0x9f, 0xf0, 0x12, 0x07, 0x1c, 0x07, 0x08, 0x10, 0x94, 0xad, 0x60, - 0x59, 0xc2, 0x8f, 0x48, 0x0c, 0x95, 0xf2, 0x59, 0xec, 0x67, 0xd7, 0x90, 0x4a, - 0x46, 0xda, 0x41, 0xe7, 0x24, 0x7f, 0x55, 0x59, 0xf7, 0xac, 0xb2, 0xc4, 0xc1, - 0x1e, 0xb9, 0xd2, 0x33, 0xc7, 0x6c, 0xfe, 0x0d, 0xd7, 0xaf, 0xfd, 0x0d, 0xbc, - 0x4e, 0x85, 0xa9, 0xe7, 0x6f, 0x2a, 0x48, 0x7c, 0x41, 0x20, 0xc7, 0xba, 0xfe, - 0x15, 0x06, 0x32, 0xa7, 0xd8, 0x85, 0x48, 0xa2, 0x48, 0x0d, 0x70, 0x2d, 0x34, - 0xe6, 0xc1, 0x05, 0x00, 0x00, - ], - txid: [ - 0xe4, 0xa3, 0x5e, 0xbe, 0x2e, 0x13, 0x4e, 0xcd, 0x74, 0x09, 0x21, 0x35, 0x8d, - 0x54, 0x53, 0x1e, 0xc1, 0x7f, 0x6c, 0x87, 0x80, 0x53, 0xf4, 0x42, 0x9b, 0x77, - 0x0d, 0x37, 0x22, 0xfb, 0xed, 0x23, - ], - auth_digest: [ - 0x8f, 0xe5, 0xaf, 0xed, 0xa9, 0xcb, 0xb4, 0x01, 0xf2, 0x70, 0xd4, 0xcb, 0x6a, - 0xe6, 0xb2, 0x9c, 0x79, 0xf1, 0xcb, 0x61, 0xd4, 0xbb, 0xa9, 0x7c, 0x9f, 0x54, - 0xea, 0x47, 0x71, 0xa9, 0x1a, 0x69, - ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, - sighash_shielded: [ - 0xe4, 0xa3, 0x5e, 0xbe, 0x2e, 0x13, 0x4e, 0xcd, 0x74, 0x09, 0x21, 0x35, 0x8d, - 0x54, 0x53, 0x1e, 0xc1, 0x7f, 0x6c, 0x87, 0x80, 0x53, 0xf4, 0x42, 0x9b, 0x77, - 0x0d, 0x37, 0x22, 0xfb, 0xed, 0x23, - ], - sighash_all: None, - sighash_none: None, - sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, - sighash_single_anyone: None, - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x4b, - 0x5d, 0x35, 0x4a, 0x71, 0x63, 0x16, 0x19, 0x01, 0x04, 0x08, 0xac, 0x70, 0x80, - 0xa2, 0xae, 0xee, 0x36, 0x6c, 0x58, 0x14, 0x6f, 0x32, 0xe3, 0x49, 0xa9, 0xbc, - 0x65, 0x7e, 0xc9, 0xe5, 0x7a, 0x89, 0xa0, 0x4c, 0xce, 0xee, 0x21, 0xbd, 0xf3, - 0x79, 0x3e, 0x49, 0xa5, 0xcf, 0x03, 0x52, 0x52, 0x00, 0x29, 0xdd, 0xdb, 0x3d, - 0x01, 0x95, 0xea, 0x6b, 0x56, 0xe7, 0x66, 0x03, 0x00, 0x02, 0xac, 0xac, 0x00, - 0x00, 0x03, 0x20, 0x36, 0xbd, 0x09, 0xe6, 0x9b, 0xe1, 0x41, 0x3e, 0x3b, 0x60, - 0x49, 0xf3, 0xe8, 0x7a, 0xba, 0xec, 0xa8, 0xc9, 0xb6, 0x65, 0xae, 0x82, 0x5c, - 0x52, 0xa7, 0x00, 0x6a, 0xd6, 0x5d, 0xcd, 0x83, 0x84, 0xa0, 0xbc, 0x9a, 0xf9, - 0x1d, 0xea, 0x82, 0x01, 0x95, 0xdb, 0x74, 0x59, 0x34, 0x73, 0x28, 0x25, 0xdf, - 0x4b, 0x5e, 0xd1, 0xc4, 0x1f, 0x12, 0x1b, 0x9e, 0x16, 0xfc, 0xa6, 0xe0, 0x15, - 0x29, 0x0b, 0xba, 0x21, 0xc2, 0x8c, 0x8d, 0xf6, 0x3b, 0xdd, 0x01, 0xf4, 0x2d, - 0xd4, 0x38, 0xa9, 0x2e, 0xe3, 0xce, 0x2f, 0x41, 0x3d, 0x64, 0x81, 0xea, 0x29, - 0xe2, 0xa9, 0xf9, 0xff, 0xd4, 0xab, 0x82, 0x8b, 0x6f, 0xd9, 0x5d, 0xab, 0xcf, - 0xb2, 0x5f, 0x23, 0x8b, 0x26, 0x62, 0x06, 0xb0, 0xa2, 0xf9, 0xa2, 0xee, 0xa1, - 0xc0, 0x83, 0xfa, 0xc8, 0x08, 0xaa, 0xfa, 0x03, 0x65, 0x66, 0xcc, 0xd2, 0x02, - 0x1f, 0xe0, 0x28, 0x7a, 0x04, 0x26, 0xcf, 0xf3, 0x25, 0xc7, 0x19, 0xbe, 0xbe, - 0xff, 0x69, 0x38, 0x05, 0xe4, 0xab, 0x64, 0xdc, 0x41, 0x1f, 0x7d, 0x91, 0x2d, - 0x3b, 0x63, 0x9a, 0xfc, 0x46, 0x1c, 0xab, 0xa5, 0x93, 0xdc, 0x9f, 0x5e, 0x5a, - 0xca, 0x1a, 0x64, 0x8e, 0xe4, 0x88, 0xf3, 0x6d, 0xeb, 0x4a, 0x3f, 0xdb, 0x0f, - 0xf6, 0xf5, 0xa3, 0x04, 0x4a, 0x63, 0xe1, 0x7f, 0x70, 0xa4, 0x30, 0x38, 0x24, - 0x60, 0x3a, 0xb5, 0x0e, 0x9b, 0xf7, 0x5b, 0xae, 0xb5, 0x7b, 0xfd, 0xc8, 0x9b, - 0xfd, 0xbc, 0x27, 0x27, 0x9d, 0x10, 0x73, 0xbf, 0x7f, 0x95, 0x05, 0xfb, 0x31, - 0x68, 0xd2, 0x06, 0xe2, 0xbf, 0x41, 0x02, 0xbf, 0x15, 0x9c, 0xff, 0x61, 0xe6, - 0xd6, 0x6c, 0x80, 0x37, 0x50, 0xda, 0x25, 0x4c, 0xd6, 0xb8, 0x1a, 0xed, 0x42, - 0x09, 0x97, 0x94, 0xb8, 0x4e, 0xce, 0x90, 0x42, 0x18, 0xe6, 0xf6, 0x6e, 0xc6, - 0x34, 0xe9, 0x2e, 0xef, 0xf4, 0x5f, 0x52, 0xe0, 0x4b, 0x4b, 0x79, 0x5a, 0x15, - 0x25, 0xaa, 0xf9, 0xc5, 0x1d, 0x62, 0x60, 0xfb, 0xd6, 0x4e, 0x8d, 0x8a, 0xc2, - 0x66, 0xdc, 0x6e, 0x7d, 0xf6, 0x15, 0x3a, 0xd9, 0x73, 0x55, 0x83, 0x79, 0x28, - 0x40, 0x4c, 0xd5, 0x81, 0xbc, 0x9c, 0xf9, 0xdc, 0xd6, 0x67, 0x47, 0xdc, 0x97, - 0x0a, 0x9f, 0x00, 0xde, 0xb4, 0x4b, 0xd6, 0x34, 0xab, 0x04, 0x2e, 0x01, 0x04, - 0xc1, 0xce, 0x74, 0x7f, 0x53, 0x75, 0x1b, 0xc3, 0x3e, 0x38, 0x4c, 0x6b, 0x55, - 0x76, 0x39, 0x9e, 0x16, 0xf8, 0xf0, 0xcb, 0x08, 0xde, 0x35, 0x08, 0x37, 0x33, - 0x95, 0x45, 0x87, 0xc1, 0xc2, 0x4d, 0xf2, 0xae, 0x66, 0x30, 0xff, 0xfe, 0x99, - 0x62, 0x15, 0xef, 0xe4, 0xd2, 0x62, 0x6d, 0xeb, 0x20, 0x56, 0x6a, 0x8f, 0x5e, - 0xad, 0x2f, 0x04, 0xdb, 0x5d, 0x08, 0x77, 0x9c, 0x9c, 0x65, 0x9e, 0xa3, 0x43, - 0xcd, 0x78, 0x46, 0x34, 0xc9, 0x9d, 0x8c, 0x8b, 0xad, 0xa9, 0x3b, 0xe8, 0xe6, - 0xda, 0x84, 0x15, 0x94, 0xba, 0xcf, 0x7c, 0xb3, 0xe6, 0x92, 0xc7, 0x4b, 0x5f, - 0xfe, 0x95, 0x78, 0x73, 0x11, 0x3a, 0x1a, 0xb0, 0x64, 0x02, 0x6f, 0x6d, 0xee, - 0x8b, 0x48, 0xa3, 0x84, 0xa1, 0x33, 0x83, 0x18, 0x36, 0x07, 0x86, 0x50, 0x27, - 0x84, 0xd1, 0x7d, 0x40, 0x0c, 0xe3, 0xd7, 0x21, 0x78, 0x7e, 0xdc, 0x4c, 0x6b, - 0x39, 0x35, 0x66, 0x25, 0x10, 0x77, 0x10, 0x00, 0x68, 0x0d, 0x78, 0xbb, 0x49, - 0xc5, 0x66, 0xef, 0x27, 0xdf, 0x61, 0xc9, 0xfe, 0xb9, 0x2c, 0x08, 0x97, 0x59, - 0x44, 0x87, 0x27, 0xa9, 0x34, 0xe3, 0x57, 0x95, 0x3d, 0xe1, 0xe9, 0xe9, 0x0f, - 0xd8, 0xdf, 0xfe, 0x40, 0xb8, 0x73, 0xbc, 0xd5, 0xb9, 0x82, 0x08, 0xdf, 0x4b, - 0x2c, 0xa2, 0x89, 0x7a, 0xf9, 0x0d, 0x8c, 0x8a, 0x23, 0x62, 0x30, 0x02, 0xa9, - 0xd8, 0xbc, 0x02, 0xe8, 0x06, 0x25, 0x4f, 0x41, 0x0e, 0x3b, 0x02, 0x40, 0x9c, - 0xbe, 0xbf, 0xce, 0x8a, 0xcf, 0x65, 0xcf, 0x39, 0x42, 0x6b, 0x64, 0xa6, 0xba, - 0x93, 0x74, 0xa1, 0x3d, 0x72, 0x59, 0x62, 0x3f, 0x65, 0xe9, 0x3e, 0x10, 0xbf, - 0x1f, 0x16, 0xba, 0x7a, 0xe0, 0x7d, 0xa9, 0x20, 0x58, 0x1c, 0x70, 0x40, 0x9e, - 0xdc, 0x7b, 0x9e, 0x21, 0x4e, 0x95, 0x91, 0x92, 0x82, 0x4c, 0x1d, 0xa6, 0x5d, - 0x33, 0x7b, 0x73, 0x75, 0xf5, 0x03, 0x2f, 0xea, 0xd3, 0xb4, 0xf3, 0x28, 0x48, - 0x11, 0x95, 0x0c, 0x7a, 0x90, 0xae, 0xc9, 0x75, 0xd4, 0xe3, 0x62, 0x9f, 0x52, - 0xd1, 0x9a, 0x16, 0x4e, 0x51, 0x16, 0xef, 0x3a, 0xd0, 0x22, 0x44, 0x2d, 0x1e, - 0xec, 0x76, 0xb8, 0x88, 0x73, 0x8b, 0x53, 0xe5, 0x05, 0x58, 0xa7, 0x0f, 0x20, - 0xc8, 0xac, 0xb5, 0x8d, 0xee, 0x63, 0x27, 0x15, 0xe4, 0x78, 0xe2, 0xbc, 0x21, - 0xbc, 0xfb, 0xe3, 0x15, 0x59, 0x96, 0xca, 0xe7, 0xbd, 0x97, 0xf0, 0x2b, 0x51, - 0x6d, 0x32, 0x00, 0xfb, 0x3c, 0x17, 0x39, 0x7c, 0xc1, 0x2b, 0xb7, 0xa1, 0x9f, - 0xd4, 0x36, 0xe6, 0x7a, 0xbc, 0xe6, 0x6d, 0x30, 0xfe, 0xc0, 0x47, 0xfb, 0x27, - 0x70, 0x82, 0x0e, 0x47, 0x6f, 0x3e, 0x32, 0xbc, 0x48, 0x3b, 0xf5, 0x31, 0x64, - 0xae, 0x49, 0x70, 0xf1, 0x1b, 0x9c, 0xae, 0xe4, 0xed, 0x6c, 0xb8, 0xd2, 0xd7, - 0x0f, 0x69, 0x13, 0xd8, 0xe0, 0x2a, 0xf8, 0xfb, 0xb1, 0xe4, 0x09, 0xb4, 0xef, - 0x08, 0x04, 0x48, 0xe5, 0x3b, 0xe6, 0xe5, 0xe6, 0x05, 0x75, 0xdf, 0xde, 0x94, - 0x28, 0xb0, 0x06, 0x96, 0x61, 0x1a, 0x2f, 0x72, 0x33, 0x2a, 0xe2, 0x90, 0x23, - 0xdd, 0x88, 0xae, 0x77, 0xf1, 0x5b, 0x8a, 0xe2, 0xc2, 0x4b, 0x86, 0xcf, 0x3d, - 0x57, 0x43, 0x9c, 0xaf, 0x17, 0xf2, 0x8e, 0xda, 0x94, 0x93, 0x2e, 0xef, 0x28, - 0x53, 0x4e, 0x16, 0x49, 0xce, 0xf8, 0x85, 0x40, 0xfc, 0xb1, 0xa6, 0x3e, 0x11, - 0x5c, 0x58, 0x22, 0xaf, 0xa4, 0x40, 0xc8, 0xd7, 0x9d, 0x66, 0xf9, 0xbb, 0x1f, - 0x48, 0xe1, 0x14, 0x0b, 0x06, 0xec, 0x87, 0x18, 0x3c, 0xbc, 0x6e, 0x95, 0xf6, - 0xcd, 0x5f, 0x7e, 0xbc, 0xad, 0xb8, 0x97, 0xc7, 0x7b, 0x4a, 0xfb, 0x36, 0x7b, - 0x95, 0x2d, 0xbb, 0x71, 0x7f, 0x75, 0x18, 0x90, 0xc8, 0xac, 0x30, 0x36, 0xda, - 0xcd, 0xbd, 0x78, 0x4a, 0x0d, 0x83, 0xab, 0xb8, 0x44, 0x1b, 0x60, 0xdb, 0x8d, - 0x0b, 0xf9, 0x2b, 0x56, 0x4a, 0x93, 0x67, 0x65, 0xea, 0xaa, 0xff, 0x49, 0x38, - 0x35, 0x47, 0xdc, 0x74, 0x07, 0x22, 0x31, 0xff, 0x8a, 0xf3, 0xe1, 0xf1, 0x41, - 0xba, 0x1f, 0xed, 0x0a, 0xf8, 0x0a, 0x3d, 0xfc, 0x5b, 0x0c, 0x6a, 0x37, 0x89, - 0xda, 0x6f, 0x3a, 0xf4, 0xdd, 0xc0, 0xb8, 0x93, 0xd6, 0xff, 0x8f, 0x90, 0x01, - 0x44, 0x15, 0x1b, 0xee, 0x34, 0xc7, 0x94, 0x0b, 0x45, 0x6f, 0x26, 0x4e, 0x2d, - 0x71, 0xe0, 0x1a, 0xea, 0x34, 0xe8, 0x4d, 0x50, 0xc4, 0x18, 0x8d, 0xbd, 0x25, - 0x3f, 0x28, 0xab, 0xd3, 0x26, 0x9f, 0x0f, 0x77, 0xe1, 0x53, 0xb7, 0xa5, 0x95, - 0x3b, 0x39, 0x15, 0x3a, 0x81, 0x69, 0xa4, 0xab, 0x46, 0x4e, 0x39, 0x0b, 0x7f, - 0x0a, 0x96, 0xd1, 0x4a, 0x73, 0xf7, 0x69, 0x7f, 0x7e, 0xce, 0x3c, 0xd7, 0x81, - 0xd3, 0x5d, 0xd2, 0x2a, 0xdd, 0xdd, 0x2f, 0xd7, 0x5b, 0x5f, 0x00, 0xdf, 0x88, - 0xe9, 0x5f, 0xd6, 0x01, 0xa0, 0xdb, 0x47, 0x75, 0xee, 0x05, 0xc8, 0x96, 0x7f, - 0xb5, 0x50, 0xe5, 0x14, 0xdf, 0x8c, 0xc2, 0x42, 0x09, 0x43, 0xb2, 0x55, 0x0b, - 0x63, 0xe9, 0xe6, 0x7f, 0x83, 0xdc, 0x9f, 0x48, 0x93, 0x33, 0xd5, 0x2a, 0x7f, - 0xd7, 0x68, 0x8a, 0x58, 0xd6, 0x62, 0x0b, 0x67, 0xe9, 0xc7, 0xb0, 0x91, 0x6f, - 0xef, 0x90, 0xf1, 0x5d, 0x8e, 0x4e, 0xb8, 0x0c, 0xf5, 0x99, 0x68, 0x2f, 0x95, - 0x4f, 0xf4, 0xe0, 0xb3, 0x71, 0x83, 0x13, 0x0c, 0xa2, 0xee, 0xd0, 0x91, 0x3f, - 0x46, 0xa4, 0xdb, 0x99, 0x2a, 0x1c, 0x3b, 0xf3, 0x19, 0xdc, 0x86, 0x75, 0x94, - 0x01, 0x01, 0x53, 0x7c, 0xff, 0xc4, 0xa8, 0x2d, 0x59, 0x9b, 0xbe, 0xa0, 0xd4, - 0x7e, 0x7a, 0xbf, 0xa9, 0x92, 0xb4, 0x99, 0x8c, 0xb2, 0x50, 0x09, 0x55, 0xe6, - 0x1c, 0x0d, 0x46, 0xb3, 0x21, 0x17, 0xfb, 0xb9, 0x7f, 0x7a, 0x76, 0x32, 0xd8, - 0x72, 0x4b, 0x5d, 0xff, 0x67, 0xf7, 0x5e, 0x2d, 0x31, 0x74, 0x06, 0xa0, 0xce, - 0xc2, 0x89, 0xed, 0x08, 0x3b, 0x7c, 0x58, 0x19, 0x81, 0x8c, 0x50, 0x47, 0x93, - 0xde, 0x53, 0xb6, 0xbf, 0xdb, 0x51, 0x0e, 0x7c, 0xa7, 0x29, 0xba, 0x74, 0x3d, - 0x10, 0xb3, 0xe9, 0x95, 0x7e, 0xfa, 0x84, 0x20, 0x13, 0x39, 0x47, 0x7c, 0xf3, - 0x5f, 0xbb, 0x6a, 0x27, 0x9b, 0xad, 0x9e, 0x8f, 0x42, 0xb9, 0xb3, 0xfd, 0x6f, - 0x3b, 0xc7, 0x70, 0x67, 0x1d, 0x9c, 0x19, 0x12, 0x2f, 0xa3, 0x25, 0x6d, 0x09, - 0x07, 0x36, 0xb6, 0xd6, 0x4e, 0xb9, 0xcc, 0x03, 0x20, 0xf1, 0xea, 0xaa, 0x27, - 0x1b, 0xa2, 0x86, 0x1e, 0xc4, 0xb3, 0xf3, 0xf6, 0xc8, 0x40, 0xb6, 0x19, 0xff, - 0x38, 0x8d, 0x81, 0xfc, 0x40, 0x44, 0xa0, 0xd5, 0x31, 0xa4, 0xbb, 0x44, 0xc9, - 0x3d, 0x09, 0x9d, 0xb0, 0x8a, 0x9b, 0xc3, 0x46, 0xa0, 0xb6, 0x2f, 0x16, 0x8f, - 0xfb, 0xdb, 0x73, 0x93, 0x66, 0xbb, 0x53, 0x5d, 0xde, 0x66, 0xc2, 0xc1, 0x28, - 0x7b, 0x3b, 0x27, 0x85, 0xae, 0xd6, 0x4c, 0xc4, 0x0c, 0xbc, 0x7d, 0x33, 0xcb, - 0xa4, 0xa9, 0xf3, 0xfc, 0xf5, 0xf8, 0x31, 0x36, 0xa4, 0x39, 0x2d, 0x21, 0xa7, - 0xf9, 0xeb, 0x1c, 0xe4, 0xb6, 0xe1, 0x7e, 0x6f, 0x4a, 0x85, 0xa5, 0x79, 0x66, - 0x9e, 0xfd, 0x0f, 0xb0, 0x98, 0x78, 0xe0, 0x88, 0xe3, 0x22, 0xe9, 0x06, 0xe8, - 0x0d, 0x27, 0xf8, 0xd0, 0xca, 0x7e, 0x79, 0x15, 0xab, 0x40, 0x96, 0x59, 0xa6, - 0xd8, 0x0f, 0xde, 0xd1, 0x0a, 0xff, 0x9f, 0xb7, 0x73, 0x74, 0x9d, 0x79, 0x28, - 0x57, 0xf6, 0x8c, 0x7e, 0x8c, 0xf5, 0x18, 0x26, 0x0a, 0x61, 0x08, 0x6d, 0xe3, - 0x2f, 0xff, 0x82, 0x39, 0xf4, 0x53, 0x61, 0x7a, 0x19, 0xf6, 0xfe, 0xc2, 0x20, - 0x67, 0x60, 0x65, 0xeb, 0xe2, 0x75, 0x7e, 0xfc, 0xac, 0xcb, 0x77, 0xfc, 0x61, - 0xe5, 0x9b, 0x97, 0x63, 0x7e, 0x92, 0x0d, 0xee, 0x5e, 0x7e, 0x7a, 0x12, 0xe9, - 0xd6, 0xd2, 0x28, 0xb2, 0x6b, 0x2f, 0xa8, 0x36, 0xf4, 0x72, 0x83, 0x69, 0xad, - 0xcd, 0xfc, 0xd0, 0x04, 0xdc, 0xf1, 0x9e, 0x27, 0xc0, 0xc0, 0x84, 0x44, 0xd2, - 0x9a, 0x12, 0x2b, 0x23, 0x09, 0xf7, 0x16, 0x3c, 0x99, 0x0e, 0xb9, 0x26, 0x1f, - 0xd4, 0x15, 0xc0, 0x45, 0x4a, 0x56, 0xaa, 0x3e, 0xaf, 0x9c, 0x1f, 0x9b, 0xff, - 0xf6, 0x04, 0x77, 0x6a, 0x4d, 0x25, 0xe7, 0xd3, 0xcd, 0xc5, 0xc5, 0xf1, 0x9c, - 0xd2, 0xa8, 0x79, 0x4a, 0x4f, 0x57, 0x16, 0x7f, 0xbc, 0x7e, 0xaa, 0x06, 0x16, - 0x4d, 0x51, 0xc4, 0x53, 0x06, 0x14, 0xbc, 0xf5, 0x20, 0xb2, 0x63, 0x82, 0x0a, - 0xa1, 0x7b, 0x20, 0xb4, 0x8c, 0xbf, 0x59, 0xd8, 0xe3, 0x09, 0x32, 0x2e, 0xbe, - 0x56, 0x6f, 0xbe, 0x46, 0xe0, 0xaa, 0x29, 0x76, 0x6a, 0xdf, 0xdf, 0x01, 0x7a, - 0x71, 0x05, 0x10, 0x3c, 0x7f, 0xca, 0xb7, 0xb0, 0x76, 0x48, 0xc7, 0xc1, 0x16, - 0x04, 0x84, 0xf7, 0x7a, 0x6c, 0x70, 0xa5, 0x38, 0x1b, 0x82, 0x56, 0x40, 0xa1, - 0xbe, 0x48, 0xe4, 0x15, 0xa1, 0xe6, 0xa2, 0x7d, 0x78, 0x02, 0x2a, 0x8a, 0x2f, - 0xf0, 0x70, 0xab, 0xf1, 0x23, 0x94, 0xe3, 0xae, 0x5a, 0x8c, 0x23, 0xe3, 0x73, - 0x3e, 0xa4, 0x7a, 0x44, 0xcb, 0x2c, 0x96, 0x8b, 0xca, 0x24, 0x98, 0x37, 0xde, - 0x1d, 0x39, 0xa5, 0xa1, 0xdc, 0xae, 0x71, 0x0c, 0xe0, 0x43, 0x01, 0x69, 0xbd, - 0x6e, 0x9f, 0x64, 0xab, 0xf1, 0xe6, 0x4e, 0xc4, 0x9e, 0xd0, 0x80, 0x4e, 0xb6, - 0x47, 0x74, 0x3a, 0xce, 0xa9, 0x29, 0xed, 0x0f, 0x7c, 0x90, 0x15, 0xb0, 0xe8, - 0x1e, 0x21, 0x29, 0xdb, 0x05, 0x0d, 0x5e, 0x78, 0xe6, 0x82, 0xc8, 0x19, 0x93, - 0xea, 0x87, 0x53, 0xc9, 0x91, 0xb0, 0x2e, 0x61, 0x81, 0x0e, 0x74, 0x61, 0xed, - 0x87, 0xb3, 0x80, 0xdb, 0x96, 0xab, 0xe3, 0xbe, 0xad, 0x0f, 0x4b, 0x22, 0x12, - 0xdb, 0x65, 0x8c, 0x11, 0xb8, 0x3f, 0x53, 0x11, 0x47, 0x85, 0x27, 0x65, 0x98, - 0xb0, 0x19, 0x7a, 0x7f, 0x1c, 0x25, 0x62, 0x7d, 0x79, 0x62, 0x4d, 0xac, 0xee, - 0x97, 0x7d, 0x9f, 0x4e, 0x1a, 0x35, 0xed, 0x2e, 0xaa, 0xd3, 0xcb, 0x68, 0x25, - 0x0a, 0xa9, 0xb3, 0xab, 0x1a, 0x83, 0x45, 0x72, 0x8e, 0x7d, 0x1a, 0x78, 0xbe, - 0x1f, 0xe4, 0x62, 0x27, 0xee, 0xf2, 0x16, 0xe5, 0xdd, 0x87, 0x79, 0x8b, 0x98, - 0x8b, 0x45, 0xc0, 0xcd, 0xde, 0x37, 0x03, 0x96, 0x42, 0x47, 0x77, 0x25, 0x1a, - 0x8e, 0x5d, 0x80, 0x8f, 0x1c, 0xbc, 0x92, 0xdb, 0xa5, 0x7c, 0xa1, 0xd0, 0x70, - 0xea, 0x7f, 0xc2, 0x89, 0xe9, 0xe5, 0x65, 0x29, 0xf2, 0x9f, 0x80, 0x74, 0xc9, - 0x4a, 0xe0, 0x48, 0x27, 0x21, 0xe1, 0xf2, 0x2c, 0xef, 0xe0, 0xdf, 0x7c, 0x57, - 0x7a, 0x23, 0xa2, 0xff, 0x33, 0x83, 0x03, 0xc0, 0x87, 0x45, 0xd4, 0x63, 0x56, - 0x57, 0x59, 0xcf, 0x92, 0xdd, 0x16, 0x41, 0x3b, 0xa4, 0x16, 0xb7, 0x17, 0x87, - 0x52, 0x13, 0x6d, 0x3f, 0x57, 0x3a, 0xae, 0x8c, 0x25, 0x42, 0x04, 0x41, 0x96, - 0xa4, 0xfd, 0x82, 0xd7, 0xc8, 0xc0, 0x03, 0x1b, 0xf4, 0xf0, 0x67, 0x51, 0xc8, - 0x0b, 0x19, 0xec, 0xb7, 0x86, 0xab, 0x3b, 0xb9, 0x37, 0xf0, 0xd9, 0x8e, 0x08, - 0x39, 0x18, 0xf5, 0x95, 0x34, 0x29, 0x60, 0x05, 0x67, 0xb1, 0xb4, 0x6f, 0xf3, - 0x54, 0xa5, 0x67, 0x35, 0x70, 0x34, 0x89, 0x0e, 0x1c, 0x55, 0xc2, 0x60, 0x07, - 0x5c, 0x88, 0x0e, 0x9c, 0x65, 0xd7, 0xbc, 0xa1, 0xf1, 0x70, 0xd2, 0x9a, 0xf0, - 0x3a, 0x3b, 0x45, 0x58, 0x9f, 0xae, 0x81, 0xeb, 0x0b, 0x5d, 0x8e, 0x0d, 0x38, - 0x02, 0x1d, 0x3b, 0x5f, 0x07, 0xe8, 0x8c, 0x99, 0x04, 0x37, 0x6d, 0x27, 0xf1, - 0x3e, 0x44, 0x41, 0xd5, 0x38, 0x74, 0x42, 0xc5, 0xea, 0x0a, 0xf5, 0xa2, 0x0a, - 0x38, 0x32, 0xbc, 0x3b, 0x9c, 0x59, 0xb8, 0x4b, 0xca, 0x39, 0xb5, 0x2c, 0xd6, - 0xb1, 0xfa, 0x29, 0x32, 0xba, 0x9d, 0x66, 0xc4, 0x12, 0xf5, 0xcd, 0x39, 0x35, - 0x1e, 0x13, 0x33, 0xef, 0x85, 0xd0, 0xee, 0xe5, 0x45, 0xa7, 0xe4, 0x06, 0xf6, - 0xeb, 0x3b, 0xf8, 0x93, 0xf3, 0xed, 0xac, 0x94, 0x64, 0x33, 0x92, 0xa2, 0x8b, - 0x0e, 0x49, 0x0c, 0x51, 0xe4, 0xb7, 0x16, 0x3c, 0x1c, 0xf7, 0x57, 0xd2, 0x24, - 0x18, 0xdd, 0x63, 0x38, 0x1b, 0xa2, 0xf2, 0x98, 0x28, 0x83, 0x6f, 0xe9, 0x78, - 0xda, 0xb5, 0x20, 0x1b, 0x2d, 0xb0, 0x8c, 0x3b, 0x38, 0x9b, 0xa4, 0xb6, 0xac, - 0xf7, 0x78, 0xc2, 0xbf, 0x91, 0x02, 0xbe, 0x0c, 0x3e, 0x12, 0xd7, 0x7a, 0xea, - 0x6d, 0xf7, 0x53, 0x8e, 0x8c, 0xf3, 0x62, 0xba, 0xaa, 0xad, 0x1d, 0xc5, 0x60, - 0x42, 0xc6, 0xf2, 0x4c, 0xaf, 0x46, 0xbe, 0xd6, 0x6a, 0xbf, 0x4c, 0x40, 0x2a, - 0x74, 0x92, 0x4e, 0xcf, 0xd0, 0xa0, 0x8d, 0xed, 0xee, 0xa0, 0xef, 0xce, 0xcd, - 0x35, 0x2c, 0x27, 0x5f, 0x13, 0xed, 0x20, 0x76, 0x03, 0x82, 0x2b, 0x1e, 0xf9, - 0x97, 0xb7, 0xed, 0x42, 0xf4, 0xa5, 0x76, 0xb9, 0xe4, 0xc0, 0x07, 0x38, 0x56, - 0x3f, 0x82, 0xa7, 0x62, 0x85, 0x46, 0x7d, 0xa2, 0x95, 0xc2, 0x3b, 0xa1, 0xc5, - 0x87, 0xeb, 0xef, 0xaf, 0x13, 0xcd, 0x4d, 0x50, 0xf2, 0x3c, 0xa5, 0x74, 0x3c, - 0x22, 0x5c, 0x38, 0x6d, 0x46, 0xd4, 0xac, 0x70, 0x83, 0x79, 0xef, 0x99, 0x96, - 0x74, 0x4b, 0x39, 0x12, 0x04, 0x4b, 0x35, 0x5f, 0x92, 0x7a, 0x67, 0xaf, 0x1e, - 0xf2, 0x6a, 0x71, 0x7f, 0xb5, 0xa8, 0x46, 0xac, 0x9d, 0xa1, 0x5e, 0xa3, 0xf1, - 0x8f, 0x8c, 0x36, 0x18, 0x3f, 0x87, 0x9b, 0xb9, 0xa3, 0xb2, 0x98, 0xff, 0xf9, - 0xa4, 0x89, 0x64, 0x6e, 0x77, 0x8e, 0x6d, 0x67, 0x01, 0xf9, 0xad, 0xac, 0x7a, - 0xe8, 0x82, 0x09, 0xa8, 0x43, 0xba, 0x8a, 0x55, 0xd1, 0x19, 0x2b, 0xbe, 0xef, - 0x31, 0xd0, 0x71, 0x45, 0x37, 0xf7, 0xa0, 0x35, 0xb0, 0x79, 0xc6, 0xad, 0xd4, - 0xab, 0x50, 0x61, 0x2d, 0x35, 0x89, 0x7a, 0x93, 0x3d, 0x49, 0xe8, 0xef, 0x08, - 0x6c, 0xdf, 0x96, 0xc8, 0x0d, 0x28, 0x56, 0xcc, 0xc7, 0xe4, 0x5f, 0xc4, 0xef, - 0xd4, 0xbf, 0x1b, 0x98, 0xab, 0x28, 0x89, 0x1b, 0x4a, 0xea, 0x7e, 0xf8, 0x4c, - 0xf7, 0x36, 0x93, 0x5c, 0x46, 0x6b, 0x24, 0x97, 0x4d, 0xf8, 0xf5, 0x35, 0x5b, - 0x8b, 0xa3, 0x20, 0xac, 0x5f, 0xbc, 0x47, 0x5a, 0xa2, 0xcf, 0x5a, 0xd3, 0x77, - 0x80, 0xbd, 0x9f, 0x9d, 0x46, 0x42, 0xcf, 0x6c, 0x2d, 0xc6, 0xb8, 0x2f, 0x91, - 0x7d, 0x09, 0xc4, 0xf7, 0x28, 0x88, 0xf9, 0x15, 0x53, 0x44, 0x7f, 0xc5, 0x70, - 0x26, 0x6d, 0xaa, 0xfd, 0x4b, 0x96, 0xcf, 0xe2, 0xa0, 0xb0, 0x67, 0x92, 0x46, - 0x9a, 0x72, 0x7d, 0xbe, 0xd0, 0x55, 0x91, 0xea, 0x60, 0x57, 0x32, 0x20, 0x5e, - 0x26, 0x05, 0x97, 0x8a, 0x3a, 0x90, 0x2c, 0x3c, 0xd6, 0x5f, 0x94, 0x83, 0x00, - 0xf7, 0x37, 0x51, 0x88, 0x15, 0xf4, 0x63, 0xd3, 0xc6, 0x1a, 0x18, 0x9b, 0xc3, - 0xbc, 0x84, 0xb0, 0x22, 0xf6, 0x3d, 0x65, 0x4f, 0x52, 0x0e, 0x3a, 0x7a, 0xd8, - 0x8e, 0x5d, 0x8d, 0xa1, 0x50, 0x14, 0xbe, 0x4b, 0xb9, 0x67, 0x99, 0x27, 0xdc, - 0x7e, 0x0f, 0xba, 0xf0, 0x58, 0xd9, 0x3f, 0x37, 0xc7, 0x2b, 0x28, 0x6b, 0x02, - 0xb7, 0x5f, 0x3c, 0xdb, 0xfb, 0x85, 0x0e, 0xed, 0x90, 0xcb, 0x23, 0x39, 0x24, - 0x32, 0xeb, 0xc3, 0x6b, 0xd2, 0x47, 0x54, 0x46, 0x9c, 0x03, 0x73, 0x1a, 0x7e, - 0xbb, 0xed, 0x28, 0x57, 0x78, 0x49, 0x81, 0xa0, 0x71, 0x67, 0x05, 0xd9, 0xcb, - 0x47, 0xd9, 0x87, 0xf8, 0x3d, 0x34, 0x21, 0xb1, 0x07, 0xd1, 0x55, 0xdb, 0xb6, - 0x61, 0xed, 0x08, 0xf2, 0xfc, 0x2e, 0x6b, 0x4a, 0x5b, 0x09, 0x77, 0x64, 0x51, - 0xd8, 0x73, 0xb2, 0xfc, 0x63, 0x68, 0x1c, 0xe3, 0x08, 0xc8, 0x08, 0xf5, 0x38, - 0x8c, 0xb1, 0xaa, 0x55, 0x89, 0xa1, 0x87, 0x73, 0xdb, 0x39, 0x07, 0xa0, 0x6b, - 0xef, 0x62, 0xd1, 0x29, 0x60, 0xaa, 0xe7, 0x2a, 0x2b, 0x89, 0x7e, 0x26, 0xb5, - 0x75, 0xfd, 0x04, 0x8a, 0x57, 0x22, 0x2c, 0x7c, 0x68, 0x0d, 0x54, 0xdc, 0x73, - 0x28, 0xd0, 0xf0, 0xf2, 0xd7, 0x0b, 0x43, 0x10, 0x8c, 0xb2, 0x0c, 0x5c, 0x31, - 0x16, 0x46, 0x31, 0xb0, 0xe5, 0xb3, 0xbd, 0x31, 0xb7, 0xdf, 0x8f, 0x4c, 0x1f, - 0xe1, 0x43, 0x4f, 0xa7, 0x47, 0x56, 0x70, 0x6f, 0x83, 0x10, 0x60, 0xa5, 0xb7, - 0x03, 0xdf, 0x9c, 0xd4, 0x2e, 0x24, 0x96, 0x0e, 0x50, 0x8a, 0x04, 0x36, 0x11, - 0x8d, 0x4a, 0x92, 0x07, 0xb6, 0xd8, 0x50, 0x59, 0x6d, 0xde, 0x07, 0xf5, 0x94, - 0x5c, 0x48, 0x3f, 0x66, 0x03, 0x00, 0x3b, 0xb9, 0x00, 0x0b, 0xc4, 0x1d, 0xcf, - 0x9a, 0x21, 0x44, 0x17, 0x6c, 0x4e, 0x92, 0xb5, 0xea, 0x07, 0xe1, 0x9f, 0x5a, - 0xb8, 0x29, 0x59, 0xb5, 0xcb, 0x96, 0x49, 0x97, 0x9e, 0x3c, 0xcf, 0x35, 0xc8, - 0xda, 0xd0, 0x54, 0x60, 0x26, 0x1f, 0xcd, 0xcb, 0x00, 0x7a, 0xeb, 0xc1, 0x5e, - 0x11, 0x67, 0x5c, 0x2d, 0xb4, 0xa6, 0xcb, 0x79, 0x38, 0xe1, 0xfe, 0xb5, 0xcd, - 0xdc, 0x27, 0xd6, 0xd0, 0x75, 0x44, 0x1e, 0x16, 0xc7, 0x07, 0xf0, 0x97, 0x14, - 0x47, 0x4c, 0x96, 0x16, 0x0a, 0xa6, 0x8e, 0xaa, 0x12, 0x31, 0x79, 0x06, 0x9c, - 0xd2, 0x20, 0x44, 0x06, 0x26, 0xcd, 0xfe, 0xed, 0x65, 0xf9, 0xfa, 0xbd, 0xaa, - 0x6d, 0xb1, 0x76, 0x0d, 0xa5, 0xd8, 0x4c, 0xfd, 0x60, 0x03, 0xcf, 0xfe, 0x52, - 0xfd, 0xd0, 0xd2, 0xa9, 0x80, 0x34, 0x8f, 0x26, 0x9f, 0x5a, 0x07, 0x64, 0x2e, - 0x89, 0xce, 0x26, 0x27, 0xba, 0x0e, 0x87, 0x13, 0x9e, 0xc2, 0xdb, 0x57, 0x2d, - 0x1c, 0xec, 0x82, 0x76, 0xd1, 0xa6, 0x2a, 0x47, 0x2f, 0x61, 0x2a, 0xc9, 0xda, - 0x09, 0x3a, 0x9c, 0x5f, 0xcc, 0x78, 0x11, 0x9c, 0x82, 0xbe, 0xfd, 0x7b, 0x30, - 0xff, 0x2c, 0x00, 0x59, 0x41, 0x0b, 0xfd, 0x5b, 0x32, 0x2c, 0xa5, 0xdb, 0x69, - 0x39, 0x39, 0xfa, 0x89, 0x76, 0x6f, 0xf0, 0x98, 0xad, 0x4b, 0xc6, 0x40, 0x37, - 0xa3, 0x4a, 0x73, 0x12, 0x86, 0x05, 0x72, 0x3a, 0x24, 0x1f, 0x0e, 0xb1, 0x54, - 0x0f, 0x5f, 0x5b, 0x55, 0x5b, 0x75, 0x79, 0x98, 0x0f, 0x97, 0x50, 0x46, 0x9b, - 0x58, 0xcb, 0x10, 0x70, 0x0b, 0xdf, 0xcf, 0xc6, 0x28, 0xac, 0x85, 0xc0, 0x7f, - 0xb3, 0xc0, 0x42, 0x00, 0x32, 0x5b, 0x75, 0xf2, 0xdf, 0x38, 0x6c, 0xdc, 0xa6, - 0x72, 0x3f, 0x15, 0x4d, 0xca, 0x23, 0x10, 0x4f, 0x6a, 0x01, 0x4e, 0x64, 0x6f, - 0x1b, 0x71, 0xec, 0x03, 0xca, 0xc8, 0xe4, 0x57, 0x65, 0x96, 0x15, 0xc2, 0x11, - 0x7e, 0x21, 0x91, 0x62, 0x0c, 0xe9, 0x70, 0x7b, 0xe3, 0xd8, 0x29, 0x7a, 0x73, - 0x06, 0xa5, 0x60, 0xff, 0x23, 0x15, 0x42, 0xbb, 0x21, 0xc3, 0xde, 0xd2, 0xf2, - 0x3b, 0x2a, 0x50, 0x20, 0x50, 0xd6, 0x00, 0x09, 0xa4, 0xea, 0x70, 0xad, 0xa5, - 0x21, 0xcc, 0x7c, 0xf8, 0xf4, 0x3c, 0xef, 0x20, 0x5e, 0x19, 0x68, 0x40, 0xee, - 0x5b, 0xc9, 0xdb, 0xaa, 0xf3, 0x46, 0xb8, 0x7c, 0x29, 0x2a, 0xb9, 0x38, 0x9d, - 0x3f, 0x24, 0xff, 0xe7, 0x3c, 0x34, 0xee, 0x14, 0x8b, 0x51, 0x90, 0x1f, 0x0a, - 0x85, 0xbb, 0x75, 0x1d, 0x62, 0x66, 0xc9, 0x03, 0x5b, 0x77, 0x9d, 0x76, 0x9d, - 0x49, 0x5c, 0x11, 0x44, 0x96, 0x2b, 0x9a, 0x38, 0xc1, 0x1d, 0xf9, 0x3e, 0x83, - 0x40, 0x09, 0xdb, 0x0a, 0xfb, 0x35, 0x4a, 0x8d, 0x29, 0x44, 0xd0, 0xe9, 0x74, - 0xa0, 0x0b, 0x7a, 0x4e, 0x64, 0xeb, 0x49, 0x4c, 0x30, 0x71, 0x3b, 0x03, 0x06, - 0x07, 0x8e, 0x16, 0x98, 0x65, 0x5e, 0x37, 0xc9, 0xfc, 0x22, 0xe4, 0xb5, 0x1d, - 0x41, 0xe5, 0xee, 0x03, 0xf9, 0xbd, 0x90, 0x65, 0x2b, 0x53, 0x72, 0x30, 0x3a, - 0x3a, 0x39, 0x02, 0xb8, 0x38, 0x79, 0x93, 0x67, 0x07, 0x79, 0x2b, 0x68, 0x3f, - 0xf1, 0x79, 0x1e, 0xf5, 0x01, 0x8e, 0x08, 0x3f, 0x20, 0x3b, 0xce, 0x72, 0xd3, - 0x83, 0xbe, 0x4e, 0x10, 0xd5, 0xae, 0xb2, 0x7a, 0x13, 0x05, 0xb6, 0xec, 0x57, - 0x89, 0xc1, 0x3f, 0xc2, 0xcd, 0x32, 0x7a, 0x91, 0x00, 0xa5, 0x46, 0x11, 0x64, - 0x64, 0x1c, 0xa8, 0x18, 0x0d, 0xdf, 0x4e, 0xb7, 0x4b, 0x37, 0x46, 0xf1, 0xeb, - 0x97, 0x0a, 0xe9, 0x75, 0xcc, 0x8d, 0x79, 0x12, 0xa8, 0xaf, 0x82, 0x8e, 0xad, - 0xdc, 0x54, 0x41, 0xa4, 0x02, 0xb4, 0xdb, 0x27, 0xc0, 0x58, 0xb0, 0x90, 0x28, - 0x16, 0x54, 0x23, 0x32, 0x69, 0x83, 0xf5, 0xf2, 0x7f, 0x80, 0x46, 0xc3, 0x4b, - 0x94, 0x7e, 0x1a, 0x45, 0x92, 0xc2, 0x0e, 0x86, 0x38, 0x6c, 0x37, 0x73, 0xc8, - 0xa1, 0x96, 0x64, 0xe2, 0xd8, 0x50, 0xc3, 0xe0, 0x28, 0xf2, 0x90, 0x8e, 0x52, - 0xe4, 0x6c, 0x8e, 0xf7, 0x5d, 0x26, 0xdc, 0x72, 0x0f, 0xe5, 0xec, 0x1f, 0x59, - 0x66, 0x2d, 0x95, 0x10, 0x00, - ], - txid: [ - 0x14, 0x12, 0xb0, 0x3c, 0xe8, 0xc2, 0x93, 0x90, 0xc5, 0x75, 0xfa, 0x01, 0x28, - 0x85, 0xb6, 0xb5, 0xab, 0xbb, 0xef, 0x8d, 0xe9, 0x20, 0x97, 0x20, 0x7c, 0x7f, - 0x3a, 0xf3, 0xcf, 0xb4, 0xd4, 0x6b, - ], - auth_digest: [ - 0xb9, 0x87, 0x60, 0x7e, 0x8a, 0x69, 0x2f, 0x82, 0x98, 0xc9, 0x9c, 0x50, 0xf9, - 0x1f, 0xe0, 0x18, 0xe2, 0xd2, 0x57, 0xc4, 0xce, 0xe0, 0xa2, 0x23, 0xd2, 0xfc, - 0x54, 0x39, 0x50, 0x89, 0x70, 0x6c, - ], - amounts: vec![241823465123147], - script_pubkeys: vec![vec![0x6a, 0x53, 0x63, 0x52, 0xac, 0x00, 0xac]], - transparent_input: Some(0), - sighash_shielded: [ - 0x74, 0x80, 0x8f, 0xf3, 0xcc, 0x14, 0x95, 0xaa, 0xa2, 0xca, 0xea, 0x5e, 0xc3, - 0xcb, 0xdb, 0x87, 0xfd, 0xe2, 0xc0, 0x6a, 0xde, 0x48, 0xc7, 0x45, 0x52, 0x85, - 0xe0, 0xff, 0xa3, 0x65, 0xc8, 0xc4, - ], - sighash_all: Some([ - 0x4a, 0x64, 0x2f, 0x6b, 0xba, 0x11, 0xa0, 0xbf, 0x54, 0xb4, 0xe7, 0xb4, 0xa6, - 0xeb, 0x87, 0x8f, 0x63, 0x10, 0x70, 0x33, 0xa2, 0x43, 0x57, 0x9c, 0xb2, 0xbb, - 0x2c, 0x83, 0xe6, 0x27, 0xc7, 0xbb, - ]), - sighash_none: Some([ - 0xc4, 0x23, 0xc3, 0x1c, 0xd2, 0xc7, 0x4d, 0xbb, 0x6b, 0xa1, 0x75, 0x48, 0x2e, - 0x10, 0x15, 0x95, 0x4c, 0x1d, 0x39, 0xfe, 0x54, 0x66, 0x72, 0xdf, 0x18, 0x37, - 0xe0, 0x77, 0xd0, 0xcb, 0x2f, 0xbd, - ]), - sighash_single: Some([ - 0xe1, 0xbd, 0x21, 0x45, 0x71, 0x3b, 0x4c, 0x55, 0x2a, 0x16, 0x70, 0x5e, 0x21, - 0x8b, 0x24, 0xcd, 0x25, 0xdc, 0x84, 0x44, 0x87, 0x41, 0xf5, 0x23, 0xe2, 0xc8, - 0xe8, 0x48, 0xaf, 0xd4, 0x3d, 0x15, - ]), - sighash_all_anyone: Some([ - 0xce, 0x2c, 0x46, 0x8a, 0xbc, 0xee, 0x28, 0xf0, 0x91, 0x76, 0x16, 0xc9, 0x8c, - 0xe5, 0x97, 0x44, 0x60, 0xff, 0x3a, 0xfc, 0x8c, 0x68, 0xd7, 0xa8, 0x97, 0x24, - 0xd9, 0x37, 0xf8, 0xa1, 0x58, 0x02, - ]), - sighash_none_anyone: Some([ - 0xb2, 0x6f, 0x6d, 0xa2, 0xce, 0x38, 0xca, 0x83, 0x78, 0xcd, 0xaf, 0x4e, 0xce, - 0xf9, 0x6b, 0x2f, 0x07, 0xfa, 0x3d, 0x79, 0x19, 0x42, 0x8e, 0x7a, 0xdf, 0xff, - 0xe9, 0x26, 0x33, 0x1e, 0x52, 0x90, - ]), - sighash_single_anyone: Some([ - 0x9c, 0x62, 0x69, 0xd6, 0xab, 0x5e, 0x2d, 0x01, 0xdb, 0xe5, 0x1d, 0x25, 0xbb, - 0x7b, 0x3b, 0xd9, 0x4c, 0xd3, 0x47, 0x3b, 0x34, 0x38, 0xb5, 0x52, 0x44, 0xbc, - 0x03, 0x5d, 0xb9, 0x38, 0x8b, 0x1b, - ]), - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x66, - 0x05, 0xf3, 0xf8, 0xaf, 0xbc, 0xcb, 0x12, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0xaf, 0xbc, 0xcb, 0x12, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfd, 0xb9, 0x01, 0xc3, 0x86, - 0xc5, 0xac, 0xc8, 0xa8, 0x6a, 0xc8, 0x94, 0xc6, 0x97, 0xe1, 0x9b, 0x9d, 0xce, - 0x86, 0xc8, 0xa0, 0x52, 0xc4, 0xa1, 0xc5, 0x8a, 0xc3, 0x9d, 0xc8, 0xb1, 0xcd, - 0xbb, 0xc6, 0x80, 0xc9, 0x83, 0xc7, 0xa0, 0xc4, 0x93, 0xe1, 0x9a, 0xb1, 0x4a, - 0xc5, 0xa2, 0xcd, 0xb4, 0xc3, 0xbe, 0xe1, 0x9b, 0x8a, 0xc5, 0xb2, 0xc3, 0xa5, - 0xc8, 0xad, 0xe1, 0x9a, 0xac, 0x59, 0xe1, 0x9b, 0xb0, 0xc9, 0x80, 0xc4, 0x86, - 0xe1, 0x9b, 0x95, 0xcd, 0xbb, 0x7b, 0x30, 0xc3, 0x94, 0xc2, 0xbf, 0x5b, 0x57, - 0xc6, 0xb3, 0xc6, 0x9e, 0x5e, 0xc7, 0x87, 0xc7, 0x9b, 0xc6, 0xa5, 0xc6, 0xb3, - 0xe1, 0x9b, 0xa9, 0xc4, 0xb6, 0xe1, 0x9a, 0xb2, 0x34, 0xc8, 0xb3, 0xc2, 0xac, - 0xc7, 0xbe, 0xe2, 0xb1, 0xb2, 0xe1, 0x9a, 0xa8, 0xc3, 0x90, 0xc3, 0x81, 0xc7, - 0x85, 0xe1, 0x9b, 0x90, 0xc7, 0x93, 0xc7, 0x8e, 0xc5, 0x8f, 0xe1, 0x9b, 0x90, - 0xc7, 0xb2, 0xc8, 0x85, 0x59, 0xe1, 0x9b, 0x8f, 0x60, 0xc5, 0x91, 0xc6, 0x89, - 0x69, 0x30, 0xe1, 0x9b, 0xa9, 0x6c, 0xc5, 0xbf, 0xc6, 0xab, 0xc5, 0xb4, 0xc9, - 0x82, 0xc4, 0xb4, 0x75, 0xcd, 0xb4, 0x70, 0xce, 0x85, 0xc2, 0xaa, 0xcd, 0xb7, - 0xc6, 0x83, 0xc7, 0x8f, 0xe1, 0x9b, 0x89, 0x5a, 0xc7, 0x96, 0xc3, 0x83, 0xc9, - 0x87, 0x4d, 0xe1, 0x9a, 0xaf, 0xc4, 0x99, 0xc5, 0xa1, 0xce, 0x86, 0xc7, 0xbe, - 0xc4, 0x83, 0xe2, 0xb1, 0xa8, 0xc7, 0xbb, 0xe1, 0x9b, 0x92, 0xe1, 0x9a, 0xb6, - 0xc8, 0xbc, 0xc2, 0xb8, 0xc3, 0x8b, 0xc8, 0xab, 0xc7, 0xa6, 0xe1, 0x9b, 0xa9, - 0xe1, 0x9b, 0x80, 0xc3, 0x89, 0xc8, 0xbb, 0xc8, 0x9b, 0xc7, 0x92, 0x47, 0xc5, - 0x8a, 0xe1, 0x9b, 0x98, 0xc5, 0xbf, 0xc3, 0xb1, 0xc2, 0xaf, 0xc4, 0xad, 0x7b, - 0xc4, 0x96, 0xc4, 0x98, 0xc6, 0xbb, 0x31, 0xc2, 0xa9, 0xe2, 0xb1, 0xab, 0x4a, - 0xc2, 0xb5, 0xc6, 0x94, 0xc6, 0x9d, 0xc8, 0xab, 0x79, 0xc3, 0x8f, 0xc8, 0x9f, - 0xc7, 0xbe, 0xc7, 0x95, 0x48, 0xe2, 0xb1, 0xaf, 0xc8, 0xa1, 0xc3, 0x85, 0xe2, - 0xb1, 0xa8, 0xc6, 0x93, 0xc4, 0x9f, 0xc6, 0xa2, 0xc3, 0xbd, 0xc5, 0xb5, 0xce, - 0x87, 0xe1, 0x9b, 0xa1, 0xc8, 0xb9, 0xc8, 0xa4, 0xc8, 0x87, 0xc8, 0xa8, 0x68, - 0xc8, 0xac, 0xc7, 0x8b, 0xc8, 0x95, 0xc5, 0xaa, 0xcd, 0xb3, 0xc6, 0x8e, 0xc6, - 0x8d, 0xc3, 0x9f, 0xc8, 0xa5, 0xe1, 0x9b, 0xab, 0xc3, 0xa1, 0xe1, 0x9a, 0xa0, - 0xc4, 0x92, 0xe1, 0x9b, 0xaf, 0xc8, 0xb8, 0xc7, 0x81, 0xc2, 0xae, 0x64, 0xc8, - 0xa1, 0x49, 0xc4, 0x88, 0xc8, 0xa0, 0xc7, 0xad, 0xc3, 0x98, 0xc5, 0xa2, 0xc7, - 0x83, 0xc5, 0xb2, 0xc8, 0x84, 0xcd, 0xbd, 0x2d, 0xc6, 0x90, 0xc5, 0x96, 0xe1, - 0x9b, 0x89, 0xc4, 0xb4, 0xc6, 0x86, 0xe1, 0x9a, 0xa6, 0xc5, 0x8d, 0xcd, 0xb5, - 0xc9, 0x89, 0xe1, 0x9b, 0xab, 0xc3, 0xab, 0xc6, 0x89, 0xe1, 0x9b, 0x82, 0xc5, - 0xb1, 0xc6, 0xbb, 0xc9, 0x8e, 0xc7, 0x90, 0xc3, 0x9e, 0xc3, 0x90, 0xc4, 0xae, - 0xe1, 0x9b, 0x9c, 0x60, 0xc4, 0xa6, 0xc4, 0x92, 0xc7, 0xba, 0xc8, 0x8c, 0xc6, - 0xbd, 0xe1, 0x9a, 0xba, 0xc3, 0x99, 0xc5, 0xb7, 0xc2, 0xb7, 0x00, 0x00, 0xc1, - 0xc4, 0x9b, 0x2e, 0xe2, 0xb1, 0xab, 0x48, 0xc3, 0xa7, 0xc4, 0xba, 0x34, 0x5b, - 0xc3, 0x9c, 0xc6, 0xbe, 0xc4, 0xbb, 0xc2, 0xbd, 0xc6, 0xa0, 0xc8, 0xa3, 0xc6, - 0xb2, 0xc5, 0xa5, 0xc7, 0x97, 0xc5, 0x93, 0xc6, 0xa6, 0xc4, 0xb0, 0xc4, 0x99, - 0xc6, 0xb1, 0xc6, 0x86, 0xc4, 0xaa, 0xc5, 0xbe, 0xe2, 0xb1, 0xa1, 0xc7, 0xb4, - 0xc4, 0xb2, 0xe1, 0x9b, 0x85, 0xc8, 0x98, 0xc7, 0xb3, 0xc8, 0xbb, 0x73, 0xc8, - 0x9e, 0xe1, 0x9a, 0xb8, 0xc6, 0xb6, 0xc8, 0x87, 0xe1, 0x9a, 0xbd, 0xc6, 0x88, - 0xc8, 0x93, 0xc7, 0xa4, 0x66, 0xc8, 0xbc, 0x36, 0xc4, 0x8e, 0xc3, 0x95, 0xe2, - 0xb1, 0xb8, 0xc3, 0xb6, 0xe1, 0x9b, 0xaa, 0x34, 0xc5, 0xab, 0xe2, 0xb1, 0xb4, - 0xc9, 0x80, 0xc3, 0xa1, 0xc2, 0xab, 0xc2, 0xbd, 0xc7, 0x9a, 0x53, 0x6e, 0xc8, - 0xa5, 0xe1, 0x9a, 0xae, 0xc5, 0xb4, 0xc7, 0xa1, 0xc9, 0x88, 0xc4, 0xb3, 0xc3, - 0xbd, 0xe1, 0x9a, 0xa2, 0xc9, 0x86, 0xc6, 0xb0, 0x73, 0xc4, 0xb6, 0xc6, 0x83, - 0xc6, 0x84, 0xc3, 0xae, 0xcd, 0xb6, 0xc6, 0x8b, 0xc7, 0x92, 0xc8, 0xad, 0xc6, - 0x9e, 0xc8, 0x8a, 0x6e, 0xc5, 0x9c, 0xc8, 0xab, 0xc3, 0x97, 0xc2, 0xbc, 0xc8, - 0xbe, 0xc7, 0x95, 0xc7, 0x87, 0x32, 0xc5, 0x90, 0xc2, 0xa3, 0xc5, 0xac, 0x64, - 0x4d, 0xc8, 0x93, 0x5f, 0xc5, 0x8b, 0xc3, 0xa8, 0xc9, 0x85, 0x5a, 0x01, 0x92, - 0xb6, 0xc7, 0x07, 0x88, 0x30, 0x73, 0xfd, 0xb5, 0xff, 0xdb, 0x9b, 0xb1, 0x93, - 0x9e, 0xbb, 0xb7, 0x62, 0xbc, 0xa4, 0x86, 0x63, 0xef, 0xa9, 0xd3, 0x42, 0x84, - 0xde, 0xbf, 0x45, 0xe6, 0x87, 0x9f, 0x9d, 0xd9, 0xdb, 0x63, 0xf7, 0xcb, 0x88, - 0xb1, 0x4a, 0x9c, 0xa8, 0x6a, 0xa1, 0xae, 0xa5, 0x03, 0xdd, 0xca, 0xd3, 0x0d, - 0x0d, 0x99, 0xca, 0x6c, 0x01, 0xe1, 0x31, 0x9b, 0xf2, 0x4a, 0xaf, 0x08, 0x67, - 0xc9, 0x0c, 0xb5, 0x40, 0xfe, 0xdf, 0xd4, 0x03, 0xa8, 0x99, 0x8f, 0xd4, 0x8d, - 0xcc, 0xf4, 0xb3, 0xa7, 0x58, 0xa3, 0xba, 0x92, 0x30, 0x5c, 0xc0, 0x76, 0x98, - 0xf1, 0x2e, 0xe1, 0xe4, 0x17, 0x13, 0x70, 0xac, 0x39, 0xdf, 0x0e, 0x46, 0x6d, - 0xc8, 0xec, 0xc3, 0x9d, 0xa5, 0xee, 0x47, 0xb6, 0x82, 0x1d, 0xbb, 0xa9, 0x97, - 0x0f, 0x03, 0x58, 0xed, 0x68, 0x26, 0x49, 0x60, 0x5c, 0x7b, 0xfe, 0xe6, 0x93, - 0x1a, 0x29, 0x5b, 0x14, 0xa3, 0x40, 0x76, 0x00, 0x07, 0x4e, 0xdc, 0x79, 0xfa, - 0x61, 0xe6, 0x80, 0x01, 0x29, 0xa5, 0x33, 0xb3, 0x96, 0x3a, 0x4e, 0x7d, 0x1b, - 0xb5, 0x6c, 0xfd, 0x70, 0x52, 0x3c, 0xd4, 0x0d, 0x80, 0x6a, 0x20, 0xb1, 0xa0, - 0x5e, 0xc2, 0x0b, 0x76, 0xdb, 0x29, 0xe0, 0xdc, 0xf6, 0x59, 0x11, 0x08, 0xd3, - 0x34, 0xb4, 0xa5, 0x90, 0xf7, 0xa0, 0x26, 0xb0, 0xeb, 0x02, 0x80, 0x4d, 0x39, - 0x17, 0x46, 0x6e, 0x99, 0x91, 0x20, 0x64, 0x1c, 0xe0, 0x7e, 0xbc, 0xdc, 0x99, - 0x42, 0x60, 0x82, 0xe0, 0x77, 0x1f, 0x15, 0x9c, 0x82, 0x6a, 0x9b, 0xe6, 0xce, - 0xd7, 0x2d, 0x0e, 0x9c, 0xfa, 0x5b, 0x4b, 0x8a, 0x86, 0x40, 0xca, 0x34, 0x88, - 0xa1, 0xeb, 0x2b, 0x6e, 0x37, 0x4e, 0x8c, 0x2e, 0x00, - ], - txid: [ - 0x84, 0xe4, 0xe6, 0xf6, 0xb9, 0x5c, 0x8d, 0x88, 0x4a, 0xc1, 0x17, 0x73, 0xc1, - 0xf4, 0x1c, 0x64, 0xb0, 0x09, 0x09, 0xd6, 0x27, 0x4d, 0xe7, 0xaa, 0xe9, 0x77, - 0x07, 0x22, 0x49, 0x84, 0x69, 0x34, - ], - auth_digest: [ - 0x9e, 0x32, 0x9b, 0xb3, 0xe7, 0xd2, 0x54, 0x33, 0xdc, 0xd4, 0x48, 0x29, 0x73, - 0x91, 0x2a, 0x02, 0x7c, 0x88, 0x2a, 0x94, 0xf0, 0x3a, 0x9b, 0x8d, 0x04, 0x56, - 0x57, 0x34, 0x4c, 0x78, 0x24, 0xab, - ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, - sighash_shielded: [ - 0x84, 0xe4, 0xe6, 0xf6, 0xb9, 0x5c, 0x8d, 0x88, 0x4a, 0xc1, 0x17, 0x73, 0xc1, - 0xf4, 0x1c, 0x64, 0xb0, 0x09, 0x09, 0xd6, 0x27, 0x4d, 0xe7, 0xaa, 0xe9, 0x77, - 0x07, 0x22, 0x49, 0x84, 0x69, 0x34, - ], - sighash_all: None, - sighash_none: None, - sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, - sighash_single_anyone: None, - }, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - TestVector { - tx: vec![ - 0x07, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xdf, - 0xa2, 0x32, 0x10, 0x37, 0xea, 0xe4, 0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x37, 0xea, 0xe4, 0x16, 0x00, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0x4f, 0xd7, 0x64, 0x2d, 0x1f, 0x91, 0x82, - 0xd1, 0x2e, 0x6a, 0x09, 0xbd, 0xb6, 0xef, 0xba, 0x60, 0x1a, 0x73, 0x70, 0xbc, - 0xda, 0xf6, 0xfb, 0x9b, 0x9c, 0xfb, 0x49, 0x7a, 0x2f, 0x49, 0xab, 0x60, 0x3f, - 0xc2, 0x09, 0x29, 0x8d, 0xc0, 0x51, 0xfc, 0x7a, 0xa7, 0xff, 0x40, 0x8d, 0x88, - 0x77, 0x1b, 0x23, 0x4f, 0xfd, 0x1d, 0x8c, 0xe3, 0x7f, 0xad, 0xc3, 0xa0, 0x84, - 0xe4, 0x01, 0x0f, 0x89, 0x2d, 0xda, 0x35, 0x7a, 0xe3, 0xba, 0x88, 0x66, 0x93, - 0xef, 0xbb, 0x06, 0xd8, 0x2e, 0x1f, 0xe8, 0x5c, 0x93, 0x55, 0x34, 0x45, 0xf0, - 0x44, 0xa3, 0x9b, 0x74, 0xdd, 0xe7, 0xa3, 0xd9, 0xf3, 0x57, 0x98, 0x69, 0x57, - 0x8c, 0x47, 0xdb, 0x5b, 0x3d, 0xda, 0x86, 0xaa, 0xb1, 0xec, 0x9f, 0x58, 0xd9, - 0x62, 0x26, 0xc6, 0xb9, 0x1d, 0xc0, 0xf0, 0x3f, 0xe8, 0xd7, 0xdf, 0x23, 0x0f, - 0x07, 0xb2, 0xfb, 0x94, 0x87, 0x76, 0x60, 0x1e, 0x9c, 0x83, 0xf6, 0xc1, 0xcf, - 0x87, 0x6f, 0xc8, 0xed, 0x44, 0xad, 0xa0, 0xe1, 0x60, 0x8f, 0x48, 0x5c, 0x6d, - 0x75, 0x67, 0x8b, 0x3c, 0x00, 0xe9, 0x67, 0xd3, 0x4a, 0x9c, 0xf1, 0x02, 0x8c, - 0x17, 0x05, 0xfa, 0x37, 0x67, 0xf4, 0x6d, 0x4b, 0xab, 0x70, 0x28, 0xb0, 0x9b, - 0x20, 0x38, 0xfc, 0x1b, 0x72, 0x7f, 0x61, 0x9e, 0x61, 0xc4, 0xfc, 0x16, 0xbf, - 0xfe, 0x65, 0x7e, 0x99, 0x12, 0x6a, 0xc5, 0x18, 0x4f, 0xc8, 0x7f, 0x5e, 0x53, - 0x01, 0x88, 0x64, 0x23, 0xb3, 0x56, 0x87, 0x59, 0x09, 0xec, 0x92, 0xb3, 0x2d, - 0x33, 0x08, 0x42, 0x53, 0xa1, 0xb9, 0x7c, 0x5d, 0x2e, 0xd6, 0x6c, 0x7e, 0x22, - 0xd1, 0x85, 0x58, 0xfe, 0x82, 0xb5, 0xec, 0x88, 0xc6, 0x07, 0x05, 0x82, 0xfa, - 0xcf, 0x75, 0x6d, 0x70, 0x32, 0x38, 0xd9, 0xaf, 0x94, 0x19, 0x96, 0x6b, 0xe4, - 0x62, 0xdf, 0xbd, 0x31, 0x5c, 0x5b, 0xfa, 0xf0, 0x44, 0xaa, 0x69, 0x5a, 0x05, - 0xe6, 0x9d, 0x3d, 0x41, 0xe7, 0x73, 0x78, 0x75, 0x1d, 0x4e, 0x02, 0xc2, 0x66, - 0xdf, 0xb5, 0xcb, 0x6a, 0x7c, 0x40, 0x08, 0xf9, 0x44, 0x88, 0x83, 0x11, 0xe6, - 0xde, 0x37, 0xdc, 0x7b, 0xdf, 0x65, 0xd7, 0x0c, 0xab, 0x3e, 0x07, 0x8a, 0xb4, - 0x4e, 0x23, 0x2b, 0x41, 0x1c, 0xaf, 0xb2, 0x88, 0x4e, 0x26, 0x45, 0x95, 0xbe, - 0xed, 0xf9, 0xd4, 0x9a, 0x79, 0x36, 0xbb, 0x28, 0x7f, 0xe2, 0x8e, 0x1c, 0x29, - 0x63, 0x5e, 0xae, 0xca, 0x74, 0x7d, 0x06, 0x87, 0xcf, 0x46, 0x59, 0x02, 0xd2, - 0x5f, 0x5e, 0x51, 0x58, 0x48, 0x1d, 0xaa, 0xcd, 0xd3, 0x00, 0xb4, 0x77, 0x40, - 0xbc, 0x0c, 0x62, 0x77, 0xb4, 0x47, 0xcc, 0x26, 0x64, 0x04, 0x42, 0x43, 0xdd, - 0x48, 0x11, 0x40, 0x4e, 0xcb, 0xd7, 0xc7, 0xa6, 0x3c, 0x9f, 0xb7, 0xd9, 0x37, - 0xbc, 0xd8, 0x12, 0xc2, 0x34, 0x59, 0x23, 0xb5, 0x90, 0x26, 0x83, 0xbd, 0x2e, - 0xd5, 0x4c, 0x01, 0xae, 0x04, 0x19, 0xa7, 0xf5, 0x4e, 0x8a, 0x3a, 0x59, 0xc6, - 0xa6, 0xda, 0xcf, 0x89, 0xc7, 0x37, 0x0e, 0x79, 0xb5, 0x60, 0x13, 0x6a, 0x2b, - 0x00, 0xdd, 0xb6, 0x07, 0x4d, 0x74, 0xff, 0xc5, 0xc5, 0xdf, 0xd0, 0x6b, 0x6c, - 0x51, 0x9a, 0xbe, 0xc3, 0x59, 0x6a, 0x47, 0x61, 0x13, 0xbe, 0x41, 0x38, 0xee, - 0xad, 0x5f, 0xfd, 0xe8, 0x6b, 0x1e, 0x32, 0x40, 0x1f, 0xa3, 0x84, 0x62, 0x32, - 0xd0, 0xb3, 0xc9, 0xbd, 0x56, 0x88, 0xb6, 0x4a, 0x33, 0x09, 0x38, 0x16, 0x2a, - 0x8b, 0x89, 0x29, 0xd7, 0x0c, 0x1b, 0x67, 0x53, 0x62, 0xf4, 0xc2, 0xa9, 0xbb, - 0x6b, 0x7f, 0x91, 0xeb, 0xd4, 0x7d, 0x26, 0x3c, 0xf0, 0xa4, 0x05, 0xa2, 0x8b, - 0xa7, 0x41, 0x56, 0x44, 0xf9, 0x3b, 0x6c, 0xdf, 0xa3, 0xec, 0xeb, 0xb7, 0xb8, - 0xd4, 0xee, 0x8b, 0x94, 0xb2, 0x7b, 0x61, 0xe4, 0x03, 0x5e, 0xd6, 0xa4, 0x77, - 0x46, 0x7f, 0x4a, 0x32, 0x0b, 0x8a, 0x4e, 0xba, 0x0a, 0xb5, 0x6c, 0x26, 0x3e, - 0x4b, 0xfb, 0xe2, 0x6a, 0x41, 0x8e, 0xd1, 0xcd, 0xe6, 0x18, 0x4b, 0x89, 0x50, - 0xfe, 0x7a, 0xac, 0x7f, 0x20, 0xa4, 0x7b, 0xa1, 0xbf, 0xf9, 0x80, 0x4f, 0x53, - 0xf6, 0x93, 0x23, 0xdb, 0x84, 0x75, 0x20, 0xa6, 0x58, 0x47, 0xb3, 0x03, 0x4c, - 0x4e, 0x08, 0x1b, 0xb4, 0xb8, 0x69, 0x26, 0x3b, 0x5f, 0x9b, 0x3a, 0x7a, 0x83, - 0x3b, 0x6e, 0x4c, 0xa7, 0x90, 0xcc, 0xf9, 0xfd, 0xae, 0x80, 0x79, 0xe5, 0x56, - 0x09, 0x27, 0x2c, 0x63, 0xb5, 0x49, 0xb0, 0xc8, 0x5f, 0x11, 0x0c, 0xc9, 0xc9, - 0x58, 0x68, 0x01, 0x14, 0xb3, 0x11, 0x74, 0x80, 0xaf, 0x57, 0xcb, 0x15, 0x9e, - 0xdf, 0xbe, 0x5c, 0xb9, 0xc6, 0x2b, 0xce, 0x2c, 0xf2, 0xab, 0x29, 0xb6, 0x67, - 0x11, 0xac, 0x7a, 0xa5, 0x3a, 0x74, 0x9f, 0xfa, 0x83, 0x90, 0x7e, 0xcb, 0x69, - 0x12, 0xaa, 0x56, 0x96, 0x38, 0xde, 0xa1, 0x9e, 0x54, 0x41, 0x61, 0x1e, 0xfc, - 0xa3, 0x20, 0x99, 0x65, 0x3e, 0x8a, 0x5c, 0xa1, 0xfb, 0xbd, 0xba, 0xb1, 0xd6, - 0x44, 0x71, 0xec, 0x32, 0x0e, 0xc3, 0x8e, 0xa4, 0x88, 0x40, 0x0c, 0x9b, 0x1f, - 0x4e, 0x8c, 0xb5, 0x48, 0x0c, 0x0e, 0x92, 0x42, 0xb0, 0x86, 0xa8, 0x0e, 0xee, - 0xd4, 0x90, 0xae, 0x32, 0x00, 0x0c, 0x80, 0x09, 0xec, 0xb7, 0x1f, 0xfa, 0x39, - 0xf4, 0xf3, 0xb5, 0x74, 0x9c, 0xfd, 0x1b, 0xef, 0xe0, 0xd9, 0x66, 0x7a, 0xb3, - 0x02, 0x20, 0xc2, 0xdc, 0x04, 0x39, 0x36, 0x98, 0xb2, 0xcf, 0xa2, 0x04, 0x92, - 0xf2, 0x50, 0xce, 0x14, 0x32, 0x35, 0x81, 0x58, 0xe8, 0xca, 0x44, 0x7d, 0xc9, - 0x5b, 0x03, 0x00, 0x70, 0x3d, 0xf7, 0xb1, 0x39, 0xd7, 0x45, 0xce, 0x1f, 0xc3, - 0x40, 0x78, 0x77, 0x01, 0xfb, 0x51, 0xdd, 0x5e, 0x48, 0xb8, 0x95, 0x09, 0x41, - 0x7d, 0x88, 0x89, 0x00, 0x80, 0x63, 0xf9, 0xba, 0x01, 0x5a, 0x07, 0xd8, 0xd3, - 0x9b, 0xbd, 0x00, 0x76, 0x2f, 0x59, 0x5a, 0xfa, 0xd8, 0xd8, 0x59, 0xea, 0xab, - 0xf0, 0xd8, 0x2d, 0x46, 0x33, 0xcf, 0x82, 0x98, 0xb0, 0x9b, 0xea, 0x3f, 0x22, - 0x28, 0x55, 0xa9, 0x2a, 0x08, 0x43, 0xf5, 0x2f, 0xa5, 0x8d, 0xb3, 0xa1, 0x75, - 0xc3, 0x0d, 0x2a, 0xbe, 0x64, 0x82, 0x64, 0x90, 0xcb, 0xe6, 0xca, 0x14, 0x88, - 0xfe, 0x3a, 0x01, 0x5a, 0x94, 0x6d, 0xc9, 0xc4, 0x5a, 0xc3, 0x09, 0x25, 0x72, - 0x7a, 0x13, 0xe0, 0x89, 0x78, 0xf7, 0x24, 0x03, 0x47, 0x20, 0x8a, 0x4d, 0x25, - 0x38, 0xc2, 0xd5, 0x61, 0x24, 0x37, 0x8c, 0x22, 0xc0, 0x4e, 0x23, 0xdc, 0x28, - 0xb1, 0x50, 0x19, 0xbe, 0x77, 0x6d, 0x70, 0xbf, 0xc1, 0xd2, 0x64, 0x5b, 0x5e, - 0x80, 0xd1, 0xfd, 0x84, 0x19, 0xdf, 0x72, 0x90, 0x43, 0x80, 0xe2, 0xe1, 0xfc, - 0x4d, 0xd1, 0xdf, 0x1b, 0xa3, 0xdf, 0xe4, 0x80, 0xcc, 0x84, 0x6d, 0x51, 0x51, - 0x4a, 0x06, 0x5e, 0xd7, 0x62, 0x78, 0x7a, 0xfd, 0x6e, 0xb9, 0x0b, 0xdf, 0x8f, - 0xbb, 0xad, 0x5e, 0xb3, 0xd2, 0x3f, 0xdc, 0x8c, 0x54, 0xcc, 0xa1, 0x0f, 0xa1, - 0xdc, 0xd6, 0xcc, 0xb7, 0x0b, 0x36, 0xec, 0x8d, 0x11, 0x77, 0x09, 0xbd, 0xef, - 0xfb, 0xb8, 0xb3, 0x59, 0xcd, 0xe5, 0xf2, 0xa7, 0x59, 0xd9, 0x74, 0x39, 0x9d, - 0x4f, 0x79, 0x64, 0x6b, 0x21, 0x57, 0x22, 0x92, 0xbc, 0xcf, 0x8e, 0x01, 0x59, - 0x45, 0x70, 0xe1, 0xb8, 0xaa, 0x0f, 0x9c, 0xe2, 0x9c, 0x63, 0xc9, 0xa1, 0xb4, - 0x0a, 0x0a, 0xdb, 0xf5, 0x5e, 0xcc, 0x7f, 0x61, 0xa7, 0x3a, 0xaf, 0x04, 0x01, - 0x87, 0x74, 0xc9, 0xa8, 0x46, 0xfd, 0xc3, 0x00, 0x39, 0x49, 0xb0, 0x95, 0x5d, - 0x77, 0x35, 0x6d, 0x88, 0x0a, 0xa1, 0x99, 0x8a, 0xcd, 0xb2, 0x08, 0xde, 0xf3, - 0x5a, 0xf6, 0xda, 0x93, 0x00, 0x2c, 0x52, 0xf1, 0xd0, 0xc8, 0x78, 0x78, 0x1d, - 0x0b, 0x3b, 0xe3, 0x84, 0x81, 0x3d, 0x49, 0xaf, 0x63, 0xd9, 0xbe, 0xa8, 0x4e, - 0xb5, 0xf0, 0xaf, 0x8b, 0x45, 0x77, 0x94, 0x98, 0xc9, 0xae, 0x1f, 0x35, 0x15, - 0x30, 0xfa, 0x04, 0xe7, 0xb6, 0xe1, 0x26, 0xc9, 0x6a, 0x83, 0xe8, 0x3d, 0x06, - 0x8a, 0x00, 0xfd, 0xd0, 0x2c, 0x9a, 0xf6, 0x47, 0xc5, 0xbc, 0xb8, 0xee, 0x7e, - 0x5a, 0x3a, 0xf3, 0x46, 0x15, 0x83, 0x17, 0x7d, 0x65, 0x5b, 0x6f, 0x34, 0xc4, - 0x99, 0x32, 0x2b, 0x65, 0xda, 0x6e, 0xb6, 0xb9, 0xe1, 0xf4, 0xd5, 0x90, 0x21, - 0x25, 0xb6, 0x4c, 0x93, 0xda, 0x74, 0xcc, 0x1a, 0x35, 0x60, 0x18, 0xd4, 0x67, - 0xa1, 0xbc, 0x73, 0x52, 0xa6, 0xcd, 0x2b, 0xc0, 0xa2, 0x1b, 0xdc, 0x7c, 0xc5, - 0x32, 0x1e, 0x3b, 0x7a, 0x17, 0x53, 0xc1, 0x13, 0xce, 0x76, 0xc9, 0x97, 0x1f, - 0x8d, 0xef, 0xa0, 0x39, 0x91, 0xf4, 0x1f, 0x22, 0xee, 0xe7, 0xf3, 0x6d, 0x79, - 0xcc, 0xa9, 0xc0, 0xe0, 0x1b, 0x26, 0xc4, 0x65, 0x11, 0x18, 0xea, 0x77, 0x15, - 0x14, 0xc7, 0x7e, 0xd6, 0x0c, 0xd5, 0x24, 0x51, 0x94, 0x2d, 0xc8, 0x5b, 0x3f, - 0xba, 0x44, 0x8b, 0x2d, 0x63, 0x10, 0xf2, 0x77, 0x79, 0x42, 0x83, 0x2e, 0x21, - 0xcf, 0x3d, 0x44, 0x87, 0x4f, 0x8d, 0x04, 0xa8, 0x05, 0x26, 0xc6, 0x9f, 0xd3, - 0xb5, 0x10, 0x49, 0xe6, 0x92, 0xba, 0x45, 0xa7, 0x02, 0xee, 0x12, 0x51, 0x4a, - 0xc2, 0xe1, 0x89, 0x4f, 0x9b, 0x83, 0xd7, 0x56, 0xd0, 0x93, 0x96, 0x97, 0xca, - 0x98, 0x2b, 0x68, 0x7c, 0x9e, 0xd7, 0xe0, 0xb2, 0x32, 0x77, 0x07, 0x3c, 0x19, - 0x30, 0xa4, 0x73, 0xd1, 0x66, 0x8e, 0xf2, 0xe9, 0xae, 0x96, 0x63, 0xcf, 0xf0, - 0x58, 0x16, 0x62, 0x6c, 0xd3, 0xc5, 0xbf, 0x77, 0x16, 0x53, 0xd7, 0x78, 0x51, - 0x81, 0x35, 0x5c, 0x05, 0xae, 0xd2, 0x4a, 0x99, 0xc4, 0xb6, 0x74, 0xd2, 0x4a, - 0x0f, 0x08, 0xf4, 0xb0, 0xcf, 0xbe, 0x90, 0xf2, 0xfd, 0xba, 0xb4, 0x24, 0x82, - 0xe9, 0x8f, 0x13, 0xff, 0xfc, 0xd1, 0xad, 0x33, 0xf4, 0xf4, 0xc0, 0x4d, 0xeb, - 0xc8, 0x9f, 0x40, 0xb5, 0xdb, 0xf6, 0x45, 0x46, 0xc5, 0x20, 0xdc, 0xa5, 0xd0, - 0xec, 0xf3, 0xf6, 0x5d, 0x3a, 0x77, 0xd0, 0x12, 0x9f, 0x60, 0x03, 0x71, 0x10, - 0x8a, 0xac, 0x30, 0xa9, 0xec, 0xa8, 0xbe, 0xe5, 0x52, 0x4f, 0xab, 0x67, 0x1f, - 0xc0, 0x86, 0x58, 0x76, 0x2c, 0x87, 0x38, 0xab, 0xc9, 0xfa, 0x76, 0x93, 0xe3, - 0x9d, 0x39, 0xd7, 0x03, 0xd5, 0xcd, 0x94, 0x2b, 0x5a, 0x55, 0xfe, 0xda, 0xfe, - 0xcc, 0xae, 0xf7, 0x02, 0x17, 0x69, 0xe9, 0x2c, 0xc9, 0xd3, 0xac, 0x7b, 0x4c, - 0x23, 0xb3, 0x3f, 0xc2, 0x23, 0x21, 0x85, 0x4b, 0xa3, 0x3f, 0x49, 0xee, 0xba, - 0xdd, 0xca, 0x29, 0xb3, 0x56, 0x40, 0xe4, 0xf0, 0xc2, 0xfd, 0x8c, 0x12, 0xb9, - 0x84, 0x52, 0x97, 0x60, 0xe0, 0x65, 0xfe, 0xcb, 0xa1, 0x21, 0x86, 0xd2, 0x0a, - 0xee, 0xc3, 0xda, 0x58, 0xfc, 0x35, 0x9b, 0xa8, 0x25, 0xe5, 0xb8, 0xe2, 0xe1, - 0x8f, 0x12, 0xcf, 0x29, 0x49, 0xc3, 0x12, 0xf6, 0x3c, 0x4d, 0xd7, 0xa7, 0x9b, - 0x0e, 0x66, 0xb9, 0xc8, 0xb6, 0x6f, 0xe8, 0x9a, 0xd7, 0xed, 0xc6, 0x2a, 0xc4, - 0xd2, 0x07, 0xe2, 0x77, 0xb9, 0x33, 0xb0, 0xc2, 0x06, 0xdd, 0x7c, 0x22, 0xd2, - 0xdb, 0x26, 0x33, 0xfc, 0x01, 0xa8, 0x3c, 0x24, 0xfc, 0xad, 0x40, 0x9c, 0xee, - 0xd5, 0x36, 0xa6, 0xd3, 0xe8, 0xe0, 0x8d, 0x42, 0xb5, 0x13, 0x48, 0x97, 0xb4, - 0x36, 0xbf, 0xf3, 0xa1, 0xbc, 0xef, 0xc5, 0x3a, 0xec, 0x30, 0xed, 0x89, 0x11, - 0x0f, 0x90, 0x10, 0x97, 0x8d, 0xf7, 0x0c, 0xe4, 0xac, 0x6f, 0x1d, 0x60, 0x25, - 0x50, 0xcf, 0x20, 0xe4, 0x44, 0x36, 0x06, 0x3e, 0x3a, 0x15, 0xb5, 0x1e, 0xcb, - 0xaa, 0x4a, 0x59, 0xdf, 0x2f, 0xe0, 0x15, 0xcb, 0x36, 0x37, 0xf3, 0x72, 0x83, - 0x04, 0xec, 0x3a, 0x72, 0x4f, 0x31, 0x49, 0x27, 0x5e, 0x7b, 0x63, 0x4b, 0xd8, - 0x82, 0x78, 0xd9, 0x3f, 0xab, 0x6b, 0x94, 0x16, 0x68, 0xd9, 0x13, 0xdb, 0xcd, - 0x89, 0x21, 0x3f, 0x3b, 0xac, 0xfc, 0xfd, 0x20, 0x02, 0xea, 0x86, 0x6f, 0x3f, - 0x17, 0x07, 0x35, 0x12, 0x64, 0xb6, 0x67, 0x88, 0xf4, 0xeb, 0x7f, 0x68, 0xc5, - 0xa5, 0x36, 0xfa, 0x9c, 0x13, 0x0d, 0x8f, 0x6d, 0xa1, 0xbb, 0x03, 0x1d, 0xf9, - 0xe2, 0x20, 0xd8, 0xca, 0x8b, 0xab, 0x46, 0xdd, 0xcf, 0x9c, 0x35, 0xfa, 0x63, - 0x48, 0x09, 0xa7, 0x3d, 0xcd, 0x91, 0xb7, 0x9f, 0x5b, 0xcb, 0x98, 0x7b, 0x20, - 0x54, 0x4b, 0xb5, 0x2a, 0xaf, 0x0d, 0x9e, 0x3a, 0xea, 0x91, 0x18, 0x3b, 0x8c, - 0x48, 0x12, 0x78, 0x6c, 0x8d, 0xc9, 0xb9, 0x30, 0x73, 0xa3, 0x05, 0x26, 0x71, - 0xb3, 0x71, 0x50, 0x52, 0x5d, 0x59, 0x24, 0xaa, 0x6e, 0xe5, 0xe0, 0x36, 0xc1, - 0xbe, 0xb9, 0xda, 0xf6, 0xf9, 0x4d, 0x05, 0x10, 0x0b, 0x2d, 0xdd, 0x36, 0xb1, - 0x3c, 0x4d, 0xf9, 0xd4, 0x56, 0xf6, 0x48, 0x0b, 0xb1, 0xaf, 0xa6, 0x20, 0x26, - 0xea, 0x80, 0x97, 0x94, 0xd3, 0xb7, 0x4d, 0x78, 0x01, 0x7e, 0xe0, 0xfb, 0xca, - 0x83, 0xcc, 0x7e, 0x5c, 0xbd, 0x52, 0x7a, 0xcd, 0xe7, 0x46, 0x53, 0x73, 0x51, - 0x2c, 0x07, 0x64, 0x6a, 0x62, 0xc6, 0x0f, 0x5c, 0x16, 0xc2, 0xef, 0x9f, 0x41, - 0x8d, 0x8c, 0x7d, 0x18, 0x8f, 0x7b, 0x13, 0xdd, 0x45, 0x38, 0xa5, 0x5d, 0x18, - 0x6a, 0xd6, 0x36, 0x2a, 0x58, 0x9a, 0x9f, 0x52, 0xb2, 0x5e, 0x61, 0x6f, 0xb2, - 0xa3, 0x57, 0xac, 0xca, 0xde, 0x63, 0x57, 0xfa, 0x5a, 0x42, 0xa7, 0x98, 0xe4, - 0x17, 0x13, 0x11, 0xad, 0xe9, 0xcc, 0xfd, 0x15, 0xf2, 0x7c, 0x8c, 0x19, 0x72, - 0x17, 0x9d, 0x26, 0x1f, 0xb9, 0xb0, 0x9b, 0xc7, 0xa0, 0x36, 0xc1, 0x05, 0x55, - 0x9b, 0x04, 0x38, 0x9d, 0xfd, 0x8a, 0x7b, 0xe2, 0xa3, 0xae, 0x2b, 0xba, 0x2a, - 0xfb, 0xd1, 0xe9, 0xbf, 0x90, 0x05, 0xc8, 0x02, 0xeb, 0x99, 0x24, 0x27, 0x4c, - 0x16, 0x00, 0x00, 0x98, 0x04, 0x54, 0x1c, 0x2c, 0x58, 0x97, 0x24, 0xef, 0xc6, - 0x9b, 0xc4, 0x65, 0xd0, 0x90, 0x8e, 0x09, 0xb8, 0x4d, 0x1f, 0x50, 0x41, 0x2b, - 0xb0, 0x7f, 0x47, 0xfb, 0x9f, 0x0d, 0x47, 0x29, 0x28, 0x36, 0x14, 0xca, 0xca, - 0xb6, 0x14, 0xef, 0x65, 0xce, 0xba, 0x13, 0x96, 0xb5, 0x24, 0x9d, 0x2c, 0x61, - 0x70, 0x4f, 0xb6, 0xf3, 0x48, 0x44, 0x71, 0x83, 0xf9, 0x88, 0x2a, 0x98, 0xae, - 0x9c, 0x71, 0xa7, 0x66, 0x33, 0xe0, 0x5b, 0x33, 0x3a, 0x1b, 0xce, 0xee, 0xc9, - 0xbd, 0x44, 0xb8, 0x87, 0x6f, 0xab, 0x6c, 0xd7, 0x2a, 0x5e, 0x33, 0x5c, 0x0b, - 0xd9, 0x23, 0x07, 0x97, 0xcc, 0x50, 0x5c, 0xad, 0x8f, 0x3f, 0xbb, 0x74, 0x5f, - 0xcf, 0x0f, 0x3d, 0x78, 0xc5, 0x19, 0x5f, 0x67, 0xff, 0x84, 0xe3, 0x91, 0x2b, - 0xbe, 0x76, 0xbc, 0x29, 0x37, 0x9f, 0xd1, 0x19, 0xfc, 0xe4, 0xa5, 0xfc, 0x5c, - 0x78, 0x2f, 0xc2, 0x3e, 0xb4, 0xc6, 0xc7, 0x7c, 0x9e, 0x8d, 0x58, 0xff, 0x42, - 0x74, 0xeb, 0xa8, 0xc6, 0x3f, 0x0f, 0xa1, 0x70, 0xa6, 0x3c, 0x3f, 0x02, 0x4f, - 0x28, 0x35, 0xfc, 0x9e, 0xc2, 0x45, 0xf8, 0xb5, 0x7c, 0x34, 0x06, 0x27, 0xeb, - 0xa4, 0x5c, 0x73, 0x0f, 0xc1, 0x14, 0x8b, 0x76, 0x4f, 0x0d, 0x23, 0xf5, 0x1b, - 0x89, 0x85, 0x3c, 0x28, 0x87, 0x32, 0x2f, 0x26, 0x2b, 0xbf, 0xbe, 0x95, 0xcc, - 0x43, 0x1b, 0x07, 0xb4, 0x4b, 0x0b, 0xb7, 0xa1, 0xd1, 0x7d, 0xa7, 0xf1, 0xcc, - 0x99, 0x90, 0xfa, 0x4c, 0xf6, 0x5a, 0x23, 0x2b, 0xb2, 0xca, 0xc3, 0xa5, 0xdd, - 0x2a, 0x96, 0x4f, 0x93, 0x95, 0x9d, 0x54, 0x34, 0xdf, 0x02, 0x3b, 0x94, 0xa5, - 0x8a, 0xee, 0x08, 0xea, 0xb3, 0x27, 0x4e, 0xe0, 0x0f, 0x20, 0x13, 0x09, 0xbf, - 0xfb, 0x6a, 0x44, 0xa3, 0xa2, 0x43, 0x7c, 0x81, 0xd8, 0xd4, 0x6b, 0x9e, 0x41, - 0x3b, 0xa0, 0x66, 0xd8, 0x78, 0x07, 0x38, 0x5f, 0xfe, 0x4e, 0x48, 0x60, 0x0e, - 0x6c, 0x83, 0x0f, 0x0b, 0x09, 0x16, 0xca, 0xcd, 0x16, 0xee, 0x6a, 0xaa, 0x5a, - 0x93, 0x14, 0x0d, 0x1d, 0xda, 0xca, 0xe4, 0xa7, 0x59, 0x0f, 0x5a, 0xb0, 0x38, - 0x03, 0xfd, 0xd5, 0x01, 0xc8, 0xab, 0xc5, 0x99, 0xe2, 0xb1, 0xb3, 0xc6, 0xac, - 0xc3, 0x98, 0xc7, 0x8c, 0x2e, 0xc7, 0x85, 0xc8, 0xb4, 0xc5, 0x9e, 0xc8, 0x9d, - 0xe1, 0x9b, 0x9d, 0xc4, 0xaf, 0xe1, 0x9a, 0xb1, 0x23, 0xcd, 0xb4, 0xc3, 0x9a, - 0xc8, 0x88, 0xc6, 0xbe, 0xc3, 0xac, 0xc6, 0xa1, 0xc4, 0x9d, 0x5f, 0xe1, 0x9b, - 0x84, 0xc4, 0x92, 0x6f, 0xe2, 0xb1, 0xa3, 0xc6, 0x9f, 0xc7, 0xa4, 0x7c, 0x36, - 0x61, 0xc9, 0x8f, 0xc4, 0xaa, 0xc2, 0xa2, 0xc7, 0xb7, 0xc8, 0x8c, 0xc2, 0xb9, - 0xc7, 0xb7, 0xc3, 0x90, 0xe2, 0xb1, 0xbe, 0xc6, 0x86, 0xcd, 0xb1, 0xe1, 0x9a, - 0xb1, 0xc3, 0xad, 0x57, 0xe1, 0x9a, 0xae, 0xc3, 0xb5, 0xc9, 0x8d, 0x78, 0xc7, - 0xa0, 0xe1, 0x9b, 0xa4, 0xc7, 0xb2, 0xe1, 0x9b, 0x98, 0xc8, 0xa6, 0xc8, 0xae, - 0xe1, 0x9b, 0xa5, 0xc7, 0x8f, 0xe1, 0x9a, 0xa0, 0x42, 0x77, 0xc4, 0x8a, 0xc5, - 0x91, 0xc6, 0xb2, 0xc6, 0xb9, 0xc7, 0x90, 0xc6, 0x83, 0xc2, 0xba, 0xc5, 0x88, - 0xc4, 0xb6, 0xc6, 0x9d, 0xc6, 0xba, 0xc7, 0x82, 0xe2, 0xb1, 0xa1, 0xe1, 0x9b, - 0x80, 0xc9, 0x86, 0xc3, 0xbd, 0x3f, 0xc7, 0x8c, 0xc7, 0xbe, 0x44, 0xe2, 0xb1, - 0xa9, 0x3d, 0xc4, 0xa9, 0xc7, 0xbb, 0x4f, 0xc7, 0x93, 0xc4, 0x97, 0xe1, 0x9b, - 0xa3, 0xc2, 0xaf, 0xe1, 0x9a, 0xa9, 0xc4, 0xa7, 0xc3, 0xbc, 0x72, 0xc5, 0x9e, - 0x48, 0xc8, 0x81, 0xc5, 0xa1, 0xc9, 0x84, 0xc6, 0xa6, 0xe1, 0x9b, 0x9e, 0xce, - 0x88, 0x58, 0xe2, 0xb1, 0xa4, 0xc8, 0x9c, 0xc6, 0xbf, 0xc4, 0x9b, 0xc6, 0xa1, - 0xc5, 0xa6, 0xc8, 0x98, 0xc8, 0xad, 0xc8, 0xb2, 0xc4, 0xbb, 0xc3, 0xb1, 0xc8, - 0xa1, 0xe1, 0x9a, 0xa8, 0xc6, 0xba, 0xc4, 0x80, 0xc4, 0x87, 0xc4, 0xa7, 0xe1, - 0x9b, 0xa3, 0x29, 0xc5, 0x98, 0xc6, 0xa3, 0xc3, 0xbd, 0xc4, 0xbd, 0x2b, 0xc9, - 0x87, 0x4b, 0xc5, 0x83, 0xe1, 0x9b, 0xaf, 0xc2, 0xbc, 0xc6, 0xb7, 0xe1, 0x9a, - 0xa5, 0xc9, 0x89, 0xc3, 0xa4, 0x3b, 0xc6, 0x90, 0xc5, 0xa4, 0xce, 0x8a, 0xc2, - 0xbe, 0xc4, 0xb1, 0xe2, 0xb1, 0xb1, 0xc9, 0x88, 0xc8, 0xae, 0xc8, 0xbb, 0xcd, - 0xb7, 0xc6, 0xb0, 0xc5, 0x92, 0xc8, 0x8d, 0xc3, 0xac, 0xc8, 0x91, 0xc5, 0xb0, - 0xe1, 0x9b, 0xad, 0x52, 0xc5, 0xa2, 0xc6, 0x97, 0xe2, 0xb1, 0xa5, 0xce, 0x8c, - 0xc8, 0x8d, 0xc4, 0xa1, 0xc5, 0xa9, 0xe2, 0xb1, 0xab, 0xc5, 0x8b, 0x40, 0x25, - 0x3e, 0xc3, 0x8c, 0xe1, 0x9a, 0xb1, 0xc5, 0x96, 0xc7, 0xb4, 0xc3, 0x93, 0xc4, - 0xbd, 0xc4, 0x93, 0xc8, 0x83, 0xc8, 0xa9, 0x5f, 0xe1, 0x9a, 0xb3, 0xe1, 0x9a, - 0xbd, 0xcd, 0xb4, 0xc5, 0x8e, 0x4b, 0xc7, 0xb1, 0xc7, 0xbf, 0xe1, 0x9b, 0x90, - 0xc2, 0xa4, 0xc7, 0xa4, 0xc4, 0x91, 0xe1, 0x9b, 0x88, 0xe1, 0x9a, 0xb0, 0xc6, - 0xa9, 0xc6, 0xbf, 0xce, 0x89, 0xc7, 0x90, 0xe1, 0x9a, 0xb6, 0xc3, 0xaa, 0x34, - 0xc3, 0xa5, 0x42, 0x49, 0x6d, 0xc7, 0xaf, 0xe2, 0xb1, 0xb9, 0xc4, 0x92, 0xc7, - 0x8a, 0xc2, 0xa9, 0xc6, 0xaf, 0xc4, 0x87, 0xc6, 0x85, 0xc5, 0x9b, 0xe1, 0x9a, - 0xa0, 0xc8, 0xbd, 0xcd, 0xb2, 0xe1, 0x9b, 0xa7, 0xc3, 0x85, 0xc4, 0x9f, 0xe2, - 0xb1, 0xb9, 0xe1, 0x9b, 0x9b, 0xc7, 0x99, 0xe1, 0x9b, 0x88, 0xc5, 0x81, 0x6c, - 0xc7, 0xa6, 0xc6, 0xb2, 0xc6, 0x91, 0x77, 0xc6, 0x9a, 0xc3, 0x97, 0xc2, 0xa1, - 0xc6, 0x85, 0xc6, 0x84, 0x5a, 0x04, 0xef, 0xc0, 0xaa, 0x2c, 0x96, 0xfc, 0xc7, - 0x50, 0xc2, 0x82, 0xbf, 0x98, 0x4a, 0x7c, 0x81, 0xbf, 0xac, 0x6b, 0x2a, 0xf1, - 0x69, 0xa1, 0x92, 0x09, 0x25, 0x34, 0xc5, 0xee, 0xcc, 0x22, 0x35, 0xd5, 0x86, - 0x34, 0xc3, 0x09, 0x34, 0xc4, 0x1a, 0x40, 0x2c, 0x8b, 0x8a, 0xa5, 0x86, 0x0f, - 0x43, 0xb5, 0x30, 0xf0, 0x3d, 0x1e, 0x04, 0x3b, 0x6b, 0x23, 0x20, 0xf0, 0xec, - 0x0a, 0xd6, 0x0c, 0xb9, 0xe4, 0x3f, 0x6a, 0xbc, 0xe3, 0xb8, 0xbf, 0x7f, 0xc8, - 0x9c, 0xdb, 0x14, 0x1e, 0xa4, 0x50, 0xc4, 0xab, 0xca, 0x42, 0x1e, 0x3c, 0xea, - 0x93, 0xf3, 0xab, 0xd3, 0x0b, 0xe6, 0xdb, 0x09, 0x35, 0x52, 0x9d, 0xed, 0x0b, - 0x50, 0xec, 0xef, 0x9f, 0x59, 0x6d, 0xb0, 0x1a, 0x87, 0xa8, 0xda, 0xdb, 0x82, - 0x7a, 0x1b, 0xe8, 0x35, 0x79, 0x9b, 0x33, 0xc9, 0x9a, 0x82, 0x2b, 0x73, 0xf7, - 0xe6, 0x62, 0xed, 0x6f, 0x86, 0x03, 0x45, 0xa2, 0x62, 0x83, 0xc1, 0xb4, 0x08, - 0x0e, 0xcd, 0xf5, 0x79, 0xd7, 0x0e, 0x7b, 0x0c, 0x0a, 0xb7, 0xb4, 0x56, 0x01, - 0xb0, 0x0b, 0x54, 0x7d, 0xe2, 0x09, 0xb4, 0x05, 0xa7, 0x1d, 0xd5, 0xe5, 0x7e, - 0xf2, 0x48, 0x9b, 0x2e, 0x80, 0xfd, 0xb6, 0x62, 0x5e, 0xc1, 0x48, 0x90, 0xc1, - 0x70, 0xb4, 0x66, 0x6a, 0xa5, 0x89, 0x8b, 0x9a, 0x0e, 0xed, 0xd1, 0xc2, 0x53, - 0x2e, 0xa0, 0x94, 0xe0, 0xe5, 0xf8, 0xce, 0xbb, 0x41, 0x1e, 0x04, 0x3b, 0x6b, - 0x23, 0x20, 0xf0, 0xec, 0x0a, 0xd6, 0x0c, 0xb9, 0xe4, 0x3f, 0x6a, 0xbc, 0xe3, - 0xb8, 0xbf, 0x7f, 0xc8, 0x9c, 0xdb, 0x14, 0x1e, 0xa4, 0x50, 0xc4, 0xab, 0xca, - 0x42, 0x1e, 0x71, 0x1a, 0x24, 0x44, 0x7f, 0xe0, 0x6c, 0xf8, 0x45, 0x5a, 0x44, - 0x06, 0x5e, 0x24, 0x52, 0x76, 0x3b, 0x0d, 0x93, 0xf8, 0x6a, 0x31, 0x47, 0xbd, - 0x08, 0x75, 0x7a, 0x4f, 0x7a, 0xa7, 0x79, 0x3c, 0x97, 0x82, 0x1c, 0x2b, 0x57, - 0x22, 0xc9, 0xdb, 0xad, 0x20, 0xf6, 0xa1, 0xe7, 0xad, 0xf6, 0x8b, 0xf2, 0x22, - 0x7b, 0xe5, 0x12, 0x04, 0xe9, 0xde, 0xca, 0x8d, 0x9e, 0xb6, 0x26, 0x6f, 0x65, - 0x9b, 0x05, 0xc9, 0x03, 0x23, 0xa3, 0x1f, 0xa0, 0x27, 0xa6, 0x86, 0x8d, 0x91, - 0xd7, 0x03, 0xce, 0x57, 0x2c, 0x3a, 0xbf, 0x01, 0xb8, 0x40, 0x10, 0x55, 0x4c, - 0xe7, 0x6e, 0x52, 0x71, 0xb2, 0x8d, 0x2b, 0xce, 0x3d, 0xa5, 0xd3, 0x19, 0xa0, - 0x36, 0xbf, 0xdf, 0x60, 0x1f, 0x43, 0x9a, 0x29, 0xbb, 0x0b, 0xcf, 0xd3, 0xa9, - 0x1e, 0x04, 0x3b, 0x6b, 0x23, 0x20, 0xf0, 0xec, 0x0a, 0xd6, 0x0c, 0xb9, 0xe4, - 0x3f, 0x6a, 0xbc, 0xe3, 0xb8, 0xbf, 0x7f, 0xc8, 0x9c, 0xdb, 0x14, 0x1e, 0xa4, - 0x50, 0xc4, 0xab, 0xca, 0x42, 0x1e, 0x99, 0xb3, 0x1f, 0xe7, 0xa9, 0x51, 0x00, - 0x2e, 0xe5, 0xdc, 0x01, 0x27, 0x03, 0x24, 0xb1, 0x10, 0x10, 0x37, 0x89, 0x29, - 0x42, 0x90, 0x7c, 0x6e, 0x19, 0x50, 0x9a, 0x6c, 0x5f, 0x66, 0x59, 0x3a, 0xf7, - 0xf4, 0x36, 0x3c, 0x49, 0x15, 0xe6, 0x1b, 0xda, 0x34, 0x06, 0x9b, 0xd9, 0x86, - 0xb6, 0x37, 0x7f, 0xf6, 0x04, 0xed, 0xe5, 0xa7, 0x42, 0x5d, 0xb2, 0x88, 0x86, - 0xb1, 0xa2, 0x61, 0x36, 0x6d, 0x28, 0x3a, 0xae, 0x64, 0xa9, 0xee, 0x8d, 0x2d, - 0x61, 0x8b, 0x08, 0xd8, 0xc8, 0x16, 0xad, 0x49, 0x3f, 0x21, 0xb3, 0xd3, 0x11, - 0xee, 0xcf, 0xdd, 0x54, 0x44, 0xc4, 0x5a, 0xcc, 0x4a, 0x94, 0xce, 0x52, 0x8f, - 0x08, 0xdf, 0xf2, 0x7e, 0x43, 0xdf, 0xc6, 0x7b, 0x93, 0xda, 0xc0, 0xad, 0x2d, - 0x55, 0xee, 0x7f, 0xc6, 0x1e, 0x04, 0x3b, 0x6b, 0x23, 0x20, 0xf0, 0xec, 0x0a, - 0xd6, 0x0c, 0xb9, 0xe4, 0x3f, 0x6a, 0xbc, 0xe3, 0xb8, 0xbf, 0x7f, 0xc8, 0x9c, - 0xdb, 0x14, 0x1e, 0xa4, 0x50, 0xc4, 0xab, 0xca, 0x42, 0x1e, 0x0b, 0xce, 0x22, - 0x88, 0x50, 0xba, 0x7b, 0x94, 0x3a, 0x8d, 0x50, 0xff, 0xcb, 0x2a, 0x67, 0x06, - 0x51, 0xd3, 0x15, 0xd8, 0x71, 0x9c, 0x7b, 0x57, 0xf6, 0x37, 0xa3, 0x7e, 0xdd, - 0x32, 0x6a, 0x3c, 0x76, 0xf0, 0xa7, 0x69, 0x0c, 0x23, 0x68, 0x80, 0x16, 0x01, - 0x07, 0xc2, 0xb4, 0xc8, 0x5e, 0xcf, 0x2a, 0xd9, 0xf5, 0xdd, 0x26, 0x45, 0x62, - 0x6e, 0x40, 0x90, 0xf1, 0x00, 0x47, 0xcc, 0x13, 0x15, 0x00, 0xcb, 0xc4, 0x96, - 0xc2, 0xa3, 0xc8, 0xb2, 0xe1, 0x9b, 0x82, 0xe1, 0x9b, 0x8e, 0xc6, 0x83, 0xce, - 0x85, 0xc6, 0xb1, 0xc8, 0x94, 0xe1, 0x9b, 0x84, 0xc6, 0x80, 0xc5, 0x95, 0xc8, - 0xba, 0xc5, 0x9d, 0xc7, 0x80, 0x6f, 0xe1, 0x9a, 0xa5, 0xc3, 0x99, 0x4d, 0xce, - 0x86, 0xc7, 0x8c, 0xc7, 0x83, 0xc8, 0x9c, 0xc2, 0xb2, 0xc3, 0x8c, 0xe1, 0x9a, - 0xa4, 0xe2, 0xb1, 0xb1, 0xc3, 0xbe, 0x5a, 0x71, 0x3c, 0xc3, 0x82, 0xc9, 0x8a, - 0xc5, 0xad, 0xc4, 0x9f, 0xc3, 0x84, 0xc2, 0xaf, 0xc7, 0xb8, 0x6f, 0x2b, 0x25, - 0x78, 0xc4, 0xbf, 0xc3, 0xaa, 0x3f, 0xe1, 0x9a, 0xa7, 0xc8, 0x83, 0xc9, 0x8a, - 0x65, 0xc8, 0xaf, 0xc6, 0x8f, 0xc6, 0x9f, 0xe1, 0x9a, 0xbf, 0xc5, 0x9f, 0xc3, - 0xba, 0xe1, 0x9b, 0x9f, 0xc7, 0x83, 0xc6, 0x85, 0xc8, 0x87, 0xc6, 0x8d, 0xe2, - 0xb1, 0xb6, 0xe1, 0x9a, 0xbe, 0xc7, 0xb7, 0xc9, 0x85, 0xe2, 0xb1, 0xb9, 0x5c, - 0xc9, 0x82, 0xc6, 0xa4, 0xe1, 0x9a, 0xaf, 0xc9, 0x84, 0xc7, 0xbd, 0xe1, 0x9a, - 0xa5, 0xc3, 0xbe, 0xc5, 0x90, 0xc4, 0x8d, 0xc5, 0xba, 0x5c, 0xe1, 0x9b, 0x8c, - 0xc7, 0xa2, 0xc8, 0xaf, 0xc3, 0xab, 0xc2, 0xbc, 0xe1, 0x9a, 0xb0, 0xc3, 0xa4, - 0xe1, 0x9a, 0xb4, 0xe1, 0x9a, 0xb2, 0xc3, 0x89, 0xc4, 0xac, 0xe1, 0x9a, 0xb1, - 0xc5, 0xba, 0xc4, 0x97, 0xc3, 0xbc, 0xce, 0x84, 0xc6, 0xab, 0xc5, 0xad, 0xc5, - 0x9c, 0xc7, 0x8b, 0xc3, 0x80, 0x5a, 0x01, 0x08, 0x8d, 0xc4, 0x8c, 0xe0, 0x6b, - 0x16, 0x07, 0x50, 0x2e, 0x1f, 0x1b, 0xcd, 0x24, 0xb0, 0x58, 0x90, 0x74, 0xb8, - 0x49, 0x18, 0x28, 0x38, 0x04, 0x4a, 0xa4, 0x67, 0x9c, 0x77, 0xda, 0x0c, 0x1c, - 0xf2, 0xc8, 0x06, 0xb1, 0x1c, 0x58, 0x81, 0xdc, 0x44, 0xc7, 0x07, 0x14, 0x1e, - 0xa0, 0x21, 0xcd, 0xd9, 0x5e, 0xfa, 0x77, 0x3f, 0xb4, 0x19, 0x3f, 0x34, 0x98, - 0xe4, 0x23, 0xf1, 0xe6, 0x32, 0x90, 0x7e, 0xf2, 0xd4, 0xc2, 0x66, 0xf7, 0x81, - 0x46, 0x99, 0x0f, 0x87, 0x89, 0x4c, 0xd3, 0x00, 0x60, 0xca, 0x4a, 0x17, 0x32, - 0x63, 0xa5, 0x05, 0xb8, 0x52, 0x29, 0xd1, 0x54, 0xec, 0xaa, 0x23, 0x5e, 0x8f, - 0xa1, 0x07, 0x95, 0xc9, 0xda, 0x27, 0x41, 0xcd, 0x98, 0x71, 0x90, 0x16, 0xa9, - 0x01, 0x17, 0xa7, 0x6f, 0x04, 0xf0, 0x0b, 0x5c, 0x3d, 0x4b, 0xce, 0xd7, 0x9a, - 0x73, 0xbf, 0xb3, 0xa1, 0xc7, 0x8a, 0xd1, 0xad, 0xea, 0x50, 0x78, 0xf2, 0xf1, - 0xb0, 0x0f, 0x81, 0x5b, 0xc7, 0xa3, 0x0e, 0xf8, 0x58, 0x40, 0x07, 0x01, 0x33, - 0xe2, 0xb1, 0xbe, 0xc5, 0xae, 0xe1, 0x9b, 0xa7, 0x41, 0xcd, 0xb1, 0xc4, 0x9d, - 0xc5, 0x8d, 0x54, 0xc7, 0x9c, 0xc7, 0x87, 0xc3, 0x8f, 0x76, 0xc8, 0x9e, 0x2a, - 0xe2, 0xb1, 0xac, 0xc4, 0xbe, 0x3d, 0x6d, 0xc3, 0xa9, 0xe1, 0x9b, 0x9b, 0xe2, - 0xb1, 0xb5, 0xc7, 0xa1, 0xc6, 0xaa, 0xe2, 0xb1, 0xba, 0x68, 0xc7, 0xa1, 0x04, - 0x3f, 0x4d, 0x4f, 0xad, 0x1d, 0x8a, 0xea, 0x31, 0x48, 0xa4, 0x2a, 0x9e, 0x3b, - 0x9a, 0x42, 0x04, 0x85, 0x85, 0x09, 0x8e, 0xab, 0xcc, 0x9b, 0xda, 0xb4, 0x15, - 0x11, 0xfc, 0xa6, 0xfb, 0xfe, 0x69, 0x9e, 0xaf, 0x17, 0x3e, 0x36, 0xbe, 0x97, - 0x3d, 0x95, 0x6b, 0x93, 0xf3, 0x32, 0xd5, 0xc6, 0xd3, 0x2b, 0xa2, 0xef, 0x42, - 0x2f, 0x69, 0xab, 0xb3, 0x38, 0x12, 0x59, 0xc2, 0x9f, 0x37, 0x0f, 0xd4, 0x12, - 0x8c, 0x24, 0x78, 0xc5, 0x4f, 0x13, 0xc0, 0x82, 0xe8, 0xa9, 0x20, 0x28, 0xa7, - 0x70, 0xbc, 0x66, 0xf1, 0x3a, 0x18, 0x66, 0xb3, 0x55, 0xcc, 0xbc, 0x07, 0x8c, - 0xd4, 0xdc, 0x03, 0x6f, 0xda, 0xa8, 0x1c, 0xb2, 0xde, 0x99, 0xcc, 0x88, 0xf6, - 0x0a, 0x49, 0x46, 0x42, 0x87, 0xf5, 0x9f, 0xc7, 0x14, 0x8b, 0x1a, 0xfb, 0x4a, - 0x2f, 0x9b, 0xb8, 0x97, 0x14, 0xe1, 0xeb, 0x8c, 0x03, 0x61, 0xe5, 0x99, 0x2a, - 0x5b, 0x79, 0xcd, 0xbb, 0x91, 0xd9, 0xbf, 0x29, 0xeb, 0x59, 0x8c, 0xbb, 0x4b, - 0xda, 0x92, 0x3d, 0x26, 0xbe, 0xa9, 0xbe, 0x55, 0x43, 0xaf, 0xa9, 0x7f, 0xa6, - 0x30, 0xc1, 0xef, 0xc8, 0x58, 0x7a, 0x41, 0xad, 0x5f, 0x30, 0xd0, 0xef, 0x57, - 0x89, 0xf4, 0xd8, 0xa0, 0x57, 0xe3, 0x1a, 0x08, 0xd0, 0x93, 0x19, 0x92, 0xb1, - 0xb6, 0xce, 0x32, 0x21, 0x87, 0xd0, 0x90, 0x88, 0xf8, 0xc9, 0x3e, 0x1b, 0xf2, - 0x9c, 0x3c, 0xfc, 0x42, 0x2f, 0x69, 0xab, 0xb3, 0x38, 0x12, 0x59, 0xc2, 0x9f, - 0x37, 0x0f, 0xd4, 0x12, 0x8c, 0x24, 0x78, 0xc5, 0x4f, 0x13, 0xc0, 0x82, 0xe8, - 0xa9, 0x20, 0x28, 0xa7, 0x70, 0xbc, 0x66, 0xf1, 0x3a, 0x2c, 0x52, 0xd0, 0x4e, - 0xbd, 0x3c, 0xe1, 0x7c, 0x60, 0xd9, 0x22, 0x57, 0xea, 0x58, 0x69, 0x09, 0x45, - 0x01, 0xbb, 0x67, 0x12, 0x68, 0xb2, 0x24, 0x47, 0x7a, 0x8e, 0x01, 0x41, 0xd6, - 0xff, 0x37, 0xe2, 0x4f, 0xf1, 0xc7, 0x65, 0xe8, 0x4d, 0x26, 0x4d, 0xb8, 0x8f, - 0x00, 0x92, 0x8e, 0x64, 0xc4, 0x12, 0xbd, 0x59, 0x15, 0x1a, 0x65, 0x71, 0xc6, - 0x67, 0x09, 0x16, 0xb0, 0x70, 0x6b, 0x04, 0x4f, 0xe1, 0x4a, 0xbb, 0xd2, 0x69, - 0xc8, 0x7b, 0x0c, 0xf4, 0xb2, 0x45, 0x4d, 0x8e, 0x16, 0x35, 0xa8, 0xe7, 0xab, - 0x42, 0xdc, 0x16, 0x5a, 0x9d, 0xb4, 0xe6, 0x91, 0x9e, 0xa4, 0x9f, 0x3a, 0xfc, - 0xf3, 0x58, 0xd8, 0x69, 0xa1, 0x39, 0xab, 0xa4, 0x83, 0x67, 0xac, 0xad, 0x83, - 0x6e, 0xf6, 0xa1, 0xde, 0x48, 0x09, 0x5d, 0x42, 0x2f, 0x69, 0xab, 0xb3, 0x38, - 0x12, 0x59, 0xc2, 0x9f, 0x37, 0x0f, 0xd4, 0x12, 0x8c, 0x24, 0x78, 0xc5, 0x4f, - 0x13, 0xc0, 0x82, 0xe8, 0xa9, 0x20, 0x28, 0xa7, 0x70, 0xbc, 0x66, 0xf1, 0x3a, - 0xcb, 0x46, 0x12, 0x78, 0xb1, 0x6c, 0x45, 0x68, 0x90, 0xb2, 0x3d, 0x40, 0xbd, - 0x36, 0x04, 0x10, 0xf0, 0x01, 0x0a, 0x55, 0xf5, 0x05, 0xfe, 0x5e, 0x2d, 0xb2, - 0x01, 0xc7, 0x52, 0xe9, 0xb5, 0x31, 0x5b, 0xf8, 0xaa, 0x9e, 0x82, 0xd6, 0x49, - 0xab, 0x11, 0x73, 0xba, 0x2a, 0x51, 0x32, 0xe0, 0xcc, 0x50, 0x51, 0xcc, 0xf7, - 0x4c, 0x7a, 0x6a, 0x37, 0x07, 0xab, 0x59, 0x83, 0xf7, 0xcc, 0x27, 0x5c, 0xad, - 0x28, 0x34, 0x3d, 0x44, 0xe1, 0x4b, 0x1c, 0x2c, 0x59, 0x61, 0xbd, 0x25, 0x69, - 0xe0, 0xad, 0x28, 0x50, 0x8d, 0x0f, 0xaf, 0x08, 0xe6, 0xb5, 0xda, 0x23, 0x65, - 0x7d, 0x07, 0x57, 0x83, 0xb8, 0x7f, 0x32, 0x07, 0x05, 0x2d, 0xc7, 0x84, 0xd7, - 0x02, 0x96, 0x39, 0x29, 0x31, 0x2f, 0xa9, 0x45, 0x39, 0xd9, 0xcb, 0x42, 0x2f, - 0x69, 0xab, 0xb3, 0x38, 0x12, 0x59, 0xc2, 0x9f, 0x37, 0x0f, 0xd4, 0x12, 0x8c, - 0x24, 0x78, 0xc5, 0x4f, 0x13, 0xc0, 0x82, 0xe8, 0xa9, 0x20, 0x28, 0xa7, 0x70, - 0xbc, 0x66, 0xf1, 0x3a, 0xcd, 0xf6, 0x88, 0x43, 0xa8, 0xb9, 0x36, 0xa0, 0xcf, - 0x5e, 0x6a, 0xa8, 0xae, 0x1b, 0x80, 0xf6, 0x01, 0x61, 0xbf, 0x41, 0x4f, 0x28, - 0x02, 0x11, 0x11, 0x09, 0x21, 0xa9, 0xc8, 0x5f, 0x51, 0x04, 0xa0, 0x16, 0x8e, - 0x8e, 0x72, 0xde, 0x4f, 0x8a, 0xa0, 0x41, 0x32, 0xeb, 0x25, 0x88, 0x76, 0xf1, - 0x9d, 0x7b, 0xe5, 0xf2, 0xdd, 0x2b, 0x0b, 0x30, 0x4b, 0x92, 0x3b, 0x29, 0x52, - 0xd9, 0x1f, 0xde, 0x01, 0x1b, 0xe3, 0xa4, 0xd0, 0xaa, 0x0f, 0xce, 0x4b, 0x4d, - 0x1c, 0x85, 0x1a, 0x35, 0x8e, 0xb1, 0x3a, 0xa4, 0xd4, 0x31, 0x16, 0xed, 0x21, - 0xf6, 0x01, 0x5a, 0xeb, 0xb9, 0xb0, 0xfb, 0x3a, 0x94, 0xbc, 0xe5, 0x52, 0x05, - 0xdb, 0xb1, 0x94, 0xeb, 0xba, 0x32, 0x2f, 0xdc, 0x67, 0xb2, 0x52, 0x2c, 0x92, - 0x61, 0x21, 0xc7, 0xfa, 0x1a, 0xf1, 0x7e, 0xd0, 0x6c, 0x47, 0x27, 0x8f, 0x96, - 0x08, 0x92, 0x96, 0x08, 0x7a, 0x70, 0x4b, 0x7d, 0x0f, 0x84, 0x7d, 0x51, 0xd6, - 0xcc, 0x68, 0xac, 0xc5, 0x22, 0x07, 0x74, 0x73, 0x41, 0xf6, 0xb9, 0x8c, 0xb1, - 0xcd, 0x4f, 0xaf, 0xcd, 0x2b, 0xb0, 0xd0, 0x5b, 0xc7, - ], - txid: [ - 0x79, 0xca, 0x68, 0x7e, 0x8c, 0x5b, 0xb9, 0xa1, 0x18, 0xd7, 0x16, 0x81, 0x41, - 0x13, 0x55, 0x83, 0xf9, 0x68, 0xf3, 0xd9, 0x66, 0xd2, 0xf3, 0x8d, 0x3a, 0xc5, - 0x3e, 0x1a, 0x91, 0x99, 0x8b, 0xa9, - ], - auth_digest: [ - 0x12, 0x85, 0x20, 0xbe, 0xcd, 0x4c, 0x85, 0xae, 0xed, 0x39, 0x45, 0xeb, 0xd3, - 0xc1, 0x76, 0x6b, 0x47, 0xdd, 0xb3, 0xc1, 0x96, 0x95, 0xba, 0x3b, 0xad, 0x6c, - 0x6c, 0x02, 0x95, 0x58, 0xf4, 0xd6, - ], - amounts: vec![], - script_pubkeys: vec![], - transparent_input: None, - sighash_shielded: [ - 0x79, 0xca, 0x68, 0x7e, 0x8c, 0x5b, 0xb9, 0xa1, 0x18, 0xd7, 0x16, 0x81, 0x41, - 0x13, 0x55, 0x83, 0xf9, 0x68, 0xf3, 0xd9, 0x66, 0xd2, 0xf3, 0x8d, 0x3a, 0xc5, - 0x3e, 0x1a, 0x91, 0x99, 0x8b, 0xa9, - ], - sighash_all: None, - sighash_none: None, - sighash_single: None, - sighash_all_anyone: None, - sighash_none_anyone: None, - sighash_single_anyone: None, - }, ] } } diff --git a/zcash_primitives/src/transaction/tests/data_v6.rs b/zcash_primitives/src/transaction/tests/data_v6.rs new file mode 100644 index 0000000000..e1a9b81236 --- /dev/null +++ b/zcash_primitives/src/transaction/tests/data_v6.rs @@ -0,0 +1,3703 @@ +pub mod orchard_zsa_digests { + use crate::transaction::tests::data::zip_0244::TestVector; + // From https://github.com/QED-it/zcash-test-vectors/blob/zsa1/zcash_test_vectors/transaction_zsa.py + #[allow(dead_code)] // used only for V6 tests that are flagged off by default + pub fn make_test_vectors() -> Vec { + vec![ + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x7a, + 0x8f, 0x73, 0x9a, 0x2d, 0x6f, 0x2c, 0x02, 0x01, 0xe1, 0x52, 0xa8, 0x04, 0x9e, + 0x29, 0x4c, 0x4d, 0x6e, 0x66, 0xb1, 0x64, 0x93, 0x9d, 0xaf, 0xfa, 0x2e, 0xf6, + 0xee, 0x69, 0x21, 0x48, 0x1c, 0xdd, 0x86, 0xb3, 0xcc, 0x43, 0x18, 0xd9, 0x61, + 0x4f, 0xc8, 0x20, 0x90, 0x5d, 0x04, 0x53, 0x51, 0x6a, 0xac, 0xa3, 0xf2, 0x49, + 0x88, 0x00, 0x01, 0x9f, 0x33, 0xbf, 0x3a, 0x10, 0x9b, 0xdd, 0x1b, 0x23, 0x2b, + 0x47, 0xb1, 0x64, 0x6d, 0x91, 0xe1, 0x29, 0x66, 0x34, 0xeb, 0xde, 0x5c, 0xca, + 0xd5, 0x72, 0x88, 0xb5, 0xb2, 0x22, 0x81, 0x86, 0xe5, 0x4b, 0x69, 0x68, 0x91, + 0x2a, 0x63, 0x81, 0xce, 0x3d, 0xc1, 0x66, 0xd5, 0x6a, 0x1d, 0x62, 0xf5, 0xa8, + 0xd7, 0x55, 0x1d, 0xb5, 0xfd, 0x93, 0x13, 0xe8, 0xc7, 0x20, 0x3d, 0x99, 0x6a, + 0xf7, 0xd4, 0x1a, 0x38, 0xe0, 0x1d, 0x94, 0x90, 0x3d, 0x3c, 0x3e, 0x0a, 0xd3, + 0x36, 0x0c, 0x1d, 0x37, 0x10, 0xac, 0xd2, 0x0b, 0x18, 0x3e, 0x31, 0xd4, 0x9f, + 0x25, 0xc9, 0xa1, 0x38, 0xf4, 0x9b, 0x1a, 0x53, 0x01, 0x46, 0x6b, 0x3d, 0xa6, + 0x12, 0x14, 0x9d, 0xf5, 0xed, 0xa0, 0xf1, 0x4f, 0x2e, 0xfc, 0x5c, 0x6a, 0xc0, + 0x38, 0x84, 0x42, 0x8a, 0x31, 0x5d, 0xc9, 0x1f, 0x8d, 0x7b, 0x49, 0x2e, 0xbc, + 0x57, 0xe4, 0x75, 0xa4, 0xa6, 0xf2, 0x65, 0x72, 0x50, 0x4b, 0x19, 0x22, 0x32, + 0xec, 0xb9, 0xf0, 0xc0, 0x24, 0x11, 0xe5, 0x25, 0x96, 0xbc, 0x5e, 0x90, 0x45, + 0x7e, 0x74, 0x59, 0x39, 0xff, 0xed, 0xbd, 0x12, 0x1e, 0x37, 0xec, 0x1e, 0x9d, + 0xdd, 0xc3, 0x1b, 0x06, 0xdc, 0x95, 0x76, 0xa1, 0x73, 0x8e, 0xf7, 0x3e, 0x6b, + 0xa7, 0x16, 0x48, 0x91, 0x3d, 0xbf, 0x75, 0xa7, 0x79, 0xfd, 0xd4, 0x88, 0xd8, + 0x3f, 0x85, 0x7d, 0xee, 0xcc, 0x40, 0xa9, 0x8d, 0x5f, 0x29, 0x35, 0x39, 0x5e, + 0xe4, 0x76, 0x2d, 0xd2, 0x1a, 0xfd, 0xbb, 0x5d, 0x47, 0xfa, 0x9a, 0x6d, 0xd9, + 0x84, 0xd5, 0x67, 0xdb, 0x28, 0x57, 0xb9, 0x27, 0xb7, 0xfa, 0xe2, 0xdb, 0x58, + 0x71, 0x05, 0x41, 0x5d, 0x46, 0x42, 0x78, 0x9d, 0x38, 0xf5, 0x0b, 0x8d, 0xbc, + 0xc1, 0x29, 0xca, 0xb3, 0xd1, 0x7d, 0x19, 0xf3, 0x35, 0x5b, 0xcf, 0x73, 0xce, + 0xcb, 0x8c, 0xb8, 0xa5, 0xda, 0x01, 0x30, 0x71, 0x52, 0xf1, 0x39, 0x36, 0xa2, + 0x70, 0x57, 0x26, 0x70, 0xdc, 0x82, 0xd3, 0x90, 0x26, 0xc6, 0xcb, 0x4c, 0xd4, + 0xb0, 0xf7, 0xf5, 0xaa, 0x2a, 0x4f, 0x5a, 0x53, 0x41, 0xec, 0x5d, 0xd7, 0x15, + 0x40, 0x6f, 0x2f, 0xdd, 0x2a, 0xfa, 0x73, 0x3f, 0x5f, 0x64, 0x1c, 0x8c, 0x21, + 0x86, 0x2a, 0x1b, 0xaf, 0xce, 0x26, 0x09, 0xd9, 0xee, 0xcf, 0xa1, 0x58, 0xcf, + 0xb5, 0xcd, 0x79, 0xf8, 0x80, 0x08, 0xe3, 0x15, 0xdc, 0x7d, 0x83, 0x88, 0xe7, + 0x6c, 0x17, 0x82, 0xfd, 0x27, 0x95, 0xd1, 0x8a, 0x76, 0x36, 0x24, 0xc2, 0x5f, + 0xa9, 0x59, 0xcc, 0x97, 0x48, 0x9c, 0xe7, 0x57, 0x45, 0x82, 0x4b, 0x77, 0x86, + 0x8c, 0x53, 0x23, 0x9c, 0xfb, 0xdf, 0x73, 0xca, 0xec, 0x65, 0x60, 0x40, 0x37, + 0x31, 0x4f, 0xaa, 0xce, 0xb5, 0x62, 0x18, 0xc6, 0xbd, 0x30, 0xf8, 0x37, 0x4a, + 0xc1, 0x33, 0x86, 0x79, 0x3f, 0x21, 0xa9, 0xfb, 0x80, 0xad, 0x03, 0xbc, 0x0c, + 0xda, 0x4a, 0x44, 0x94, 0x6c, 0x00, 0xe1, 0xb1, 0xa1, 0xdf, 0x0e, 0x5b, 0x87, + 0xb5, 0xbe, 0xce, 0x47, 0x7a, 0x70, 0x96, 0x49, 0xe9, 0x50, 0x06, 0x05, 0x91, + 0x39, 0x48, 0x12, 0x95, 0x1e, 0x1f, 0xe3, 0x89, 0x5b, 0x8c, 0xc3, 0xd1, 0x4d, + 0x2c, 0xf6, 0x55, 0x6d, 0xf6, 0xed, 0x4b, 0x4d, 0xdd, 0x3d, 0x9a, 0x69, 0xf5, + 0x33, 0x57, 0xd7, 0x76, 0x7f, 0x4f, 0x5c, 0xcb, 0xdb, 0xc5, 0x96, 0x63, 0x12, + 0x77, 0xf8, 0xfe, 0xcd, 0x08, 0xcb, 0x05, 0x6b, 0x95, 0xe3, 0x02, 0x5b, 0x97, + 0x92, 0xff, 0xf7, 0xf2, 0x44, 0xfc, 0x71, 0x62, 0x69, 0xb9, 0x26, 0xd6, 0x2e, + 0x95, 0x96, 0xfa, 0x82, 0x5c, 0x6b, 0xf2, 0x1a, 0xff, 0x9e, 0x68, 0x62, 0x5a, + 0x19, 0x24, 0x40, 0xea, 0x06, 0x82, 0x81, 0x23, 0xd9, 0x78, 0x84, 0x80, 0x6f, + 0x15, 0xfa, 0x08, 0xda, 0x52, 0x75, 0x4a, 0x10, 0x95, 0xe3, 0xff, 0x1a, 0xbd, + 0x5c, 0xe4, 0xfd, 0xdf, 0xcc, 0xfc, 0x3a, 0x61, 0x28, 0xae, 0xf7, 0x84, 0xa6, + 0x46, 0x10, 0xa8, 0x9d, 0x1a, 0x70, 0x99, 0x21, 0x6d, 0x08, 0x14, 0xd3, 0xa2, + 0xd4, 0x52, 0x43, 0x1c, 0x32, 0xd4, 0x11, 0xac, 0x1c, 0xce, 0x82, 0xad, 0x02, + 0x29, 0x40, 0x7b, 0xbc, 0x48, 0x98, 0x56, 0x75, 0xe3, 0xf8, 0x74, 0xa4, 0x53, + 0x3f, 0x1d, 0x63, 0xa8, 0x4d, 0xfa, 0x3e, 0x0f, 0x46, 0x0f, 0xe2, 0xf5, 0x7e, + 0x34, 0xfb, 0xc7, 0x54, 0x23, 0xc3, 0x73, 0x7f, 0x5b, 0x2a, 0x06, 0x15, 0xf5, + 0x72, 0x2d, 0xb0, 0x41, 0xa3, 0xef, 0x66, 0xfa, 0x48, 0x3a, 0xfd, 0x3c, 0x2e, + 0x19, 0xe5, 0x94, 0x44, 0xa6, 0x4a, 0xdd, 0x6d, 0xf1, 0xd9, 0x63, 0xf5, 0xdd, + 0x5b, 0x50, 0x10, 0xd3, 0xd0, 0x25, 0xf0, 0x28, 0x7c, 0x4c, 0xf1, 0x9c, 0x75, + 0xf3, 0x3d, 0x51, 0xdd, 0xdd, 0xba, 0x5d, 0x65, 0x7b, 0x43, 0xee, 0x8d, 0xa6, + 0x45, 0x44, 0x38, 0x14, 0xcc, 0x73, 0x29, 0xf3, 0xe9, 0xb4, 0xe5, 0x4c, 0x23, + 0x6c, 0x29, 0xaf, 0x39, 0x23, 0x10, 0x17, 0x56, 0xd9, 0xfa, 0x4b, 0xd0, 0xf7, + 0xd2, 0xdd, 0xaa, 0xcb, 0x6b, 0x0f, 0x86, 0xa2, 0x65, 0x8e, 0x0a, 0x07, 0xa0, + 0x5a, 0xc5, 0xb9, 0x50, 0x05, 0x1c, 0xd2, 0x4c, 0x47, 0xa8, 0x8d, 0x13, 0xd6, + 0x59, 0xba, 0x2a, 0x46, 0xca, 0x18, 0x30, 0x81, 0x6d, 0x09, 0xcd, 0x76, 0x46, + 0xf7, 0x6f, 0x71, 0x6a, 0xbe, 0xc5, 0xde, 0x07, 0xfe, 0x9b, 0x52, 0x34, 0x10, + 0x80, 0x6e, 0xa6, 0xf2, 0x88, 0xf8, 0x73, 0x6c, 0x23, 0x35, 0x7c, 0x85, 0xf4, + 0x57, 0x91, 0xe1, 0x70, 0x80, 0x29, 0xd9, 0x82, 0x4d, 0x90, 0x70, 0x46, 0x07, + 0xf3, 0x87, 0xa0, 0x3e, 0x49, 0xbf, 0x98, 0x36, 0x57, 0x44, 0x31, 0x34, 0x5a, + 0x78, 0x77, 0xef, 0xaa, 0x8a, 0x08, 0xe7, 0x30, 0x81, 0xef, 0x8d, 0x62, 0xcb, + 0x78, 0x0a, 0xb6, 0x88, 0x3a, 0x50, 0xa0, 0xd4, 0x70, 0x19, 0x0d, 0xfb, 0xa1, + 0x0a, 0x85, 0x7f, 0x82, 0x84, 0x2d, 0x38, 0x25, 0xb3, 0xd6, 0xda, 0x05, 0x73, + 0xd3, 0x16, 0xeb, 0x16, 0x0d, 0xc0, 0xb7, 0x16, 0xc4, 0x8f, 0xbd, 0x46, 0x7f, + 0x75, 0xb7, 0x80, 0x14, 0x9a, 0xe8, 0x80, 0x8f, 0x4e, 0x68, 0xf5, 0x0c, 0x05, + 0x36, 0xac, 0xdd, 0xf6, 0xf1, 0xae, 0xab, 0x01, 0x6b, 0x6b, 0xc1, 0xa5, 0x1e, + 0xd4, 0x4c, 0xfa, 0xb7, 0x00, 0x00, 0xc7, 0xb3, 0x53, 0x42, 0x01, 0xcf, 0xb1, + 0xcd, 0x8d, 0xbf, 0x69, 0xb8, 0x25, 0x0c, 0x18, 0xef, 0x41, 0x29, 0x4c, 0xa9, + 0x79, 0x93, 0xdb, 0x54, 0x6c, 0x1f, 0xe0, 0x1f, 0x7e, 0x9c, 0x8e, 0x36, 0x7e, + 0xdc, 0xf0, 0x4b, 0xe3, 0x4a, 0x98, 0x51, 0xa7, 0xaf, 0x9d, 0xb6, 0x99, 0x0e, + 0xd8, 0x3d, 0xd6, 0x4a, 0xf3, 0x59, 0x7c, 0x04, 0x32, 0x3e, 0xa5, 0x1b, 0x00, + 0x52, 0xad, 0x80, 0x84, 0xa8, 0xb9, 0xda, 0x94, 0x8d, 0x32, 0x0d, 0xad, 0xd6, + 0x4f, 0x54, 0x31, 0xe6, 0x1d, 0xdf, 0x65, 0x8d, 0x24, 0xae, 0x67, 0xc2, 0x2c, + 0x8d, 0x13, 0x09, 0x13, 0x1f, 0xc0, 0x0f, 0xe7, 0xf2, 0x35, 0x73, 0x42, 0x76, + 0xd3, 0x8d, 0x47, 0xf1, 0xe1, 0x91, 0xe0, 0x0c, 0x7a, 0x1d, 0x48, 0xaf, 0x04, + 0x68, 0x27, 0x59, 0x1e, 0x97, 0x33, 0xa9, 0x7f, 0xa6, 0xb6, 0x79, 0xf3, 0xdc, + 0x60, 0x1d, 0x00, 0x82, 0x85, 0xed, 0xcb, 0xda, 0xe6, 0x9c, 0xe8, 0xfc, 0x1b, + 0xe4, 0xaa, 0xc0, 0x0f, 0xf2, 0x71, 0x1e, 0xbd, 0x93, 0x1d, 0xe5, 0x18, 0x85, + 0x68, 0x78, 0xf7, 0x34, 0x76, 0xf2, 0x1a, 0x48, 0x2e, 0xc9, 0x37, 0x83, 0x65, + 0xc8, 0xf7, 0x39, 0x3c, 0x94, 0xe2, 0x88, 0x53, 0x15, 0xeb, 0x46, 0x71, 0x09, + 0x8b, 0x79, 0x53, 0x5e, 0x79, 0x0f, 0xe5, 0x3e, 0x29, 0xfe, 0xf2, 0xb3, 0x76, + 0x66, 0x97, 0xac, 0x32, 0xb4, 0xf4, 0x73, 0xf4, 0x68, 0xa0, 0x08, 0xe7, 0x23, + 0x89, 0xfc, 0x03, 0x88, 0x0d, 0x78, 0x0c, 0xb0, 0x7f, 0xcf, 0xaa, 0xbe, 0x3f, + 0x1a, 0x84, 0xb2, 0x7d, 0xb5, 0x9a, 0x4a, 0x15, 0x3d, 0x10, 0x70, 0x68, 0x9f, + 0x2c, 0xcf, 0x97, 0x5b, 0x2b, 0x17, 0x6e, 0x1c, 0x69, 0xdb, 0xe3, 0x81, 0x34, + 0x0e, 0xf1, 0xf9, 0x8f, 0xdc, 0x4b, 0x45, 0x3a, 0xbd, 0xa3, 0xa2, 0xbf, 0xac, + 0x30, 0x69, 0xba, 0x7f, 0x1c, 0xc5, 0x0a, 0x81, 0xc2, 0x52, 0x0e, 0x41, 0x2f, + 0xab, 0x4e, 0x5d, 0x39, 0x7e, 0xcf, 0x73, 0x9f, 0x28, 0x0d, 0x5b, 0x68, 0x45, + 0x33, 0xd5, 0xd2, 0x9c, 0xfe, 0x7e, 0x73, 0x02, 0xec, 0x14, 0x4b, 0x4e, 0x55, + 0x3a, 0xcf, 0xd6, 0x70, 0xf7, 0x7e, 0x75, 0x5f, 0xc8, 0x8e, 0x06, 0x77, 0xe3, + 0x1b, 0xa4, 0x59, 0xb4, 0x4e, 0x30, 0x77, 0x68, 0x95, 0x8f, 0xe3, 0x78, 0x9d, + 0x41, 0xc2, 0xb1, 0xff, 0x43, 0x4c, 0xb3, 0x0e, 0x15, 0x91, 0x4f, 0x01, 0xbc, + 0x6b, 0xc2, 0x30, 0x7b, 0x48, 0x8d, 0x25, 0x56, 0xd7, 0xb7, 0x38, 0x0e, 0xa4, + 0xff, 0xd7, 0x12, 0xf6, 0xb0, 0x2f, 0xe8, 0x06, 0xb9, 0x45, 0x69, 0xcd, 0x40, + 0x59, 0xf3, 0x96, 0xbf, 0x29, 0xb9, 0x9d, 0x0a, 0x40, 0xe5, 0xe1, 0x71, 0x1c, + 0xa9, 0x44, 0xf7, 0x2d, 0x43, 0x6a, 0x10, 0x2f, 0xca, 0x4b, 0x97, 0x69, 0x3d, + 0xa0, 0xb0, 0x86, 0xfe, 0x9d, 0x2e, 0x71, 0x62, 0x47, 0x0d, 0x02, 0xe0, 0xf0, + 0x5d, 0x4b, 0xec, 0x95, 0x12, 0xbf, 0xb3, 0xf3, 0x83, 0x27, 0x29, 0x6e, 0xfa, + 0xa7, 0x43, 0x28, 0xb1, 0x18, 0xc2, 0x74, 0x02, 0xc7, 0x0c, 0x3a, 0x90, 0xb4, + 0x9a, 0xd4, 0xbb, 0xc6, 0x8e, 0x37, 0xc0, 0xaa, 0x7d, 0x9b, 0x3f, 0xe1, 0x77, + 0x99, 0xd7, 0x3b, 0x84, 0x1e, 0x75, 0x17, 0x13, 0xa0, 0x29, 0x43, 0x90, 0x5a, + 0xae, 0x08, 0x03, 0xfd, 0x69, 0x44, 0x2e, 0xb7, 0x68, 0x1e, 0xc2, 0xa0, 0x56, + 0x00, 0x05, 0x4e, 0x92, 0xee, 0xd5, 0x55, 0x02, 0x8f, 0x21, 0xb6, 0xa1, 0x55, + 0x26, 0x8a, 0x2d, 0xd6, 0x64, 0x05, 0x25, 0x28, 0xa5, 0xf8, 0xed, 0x02, 0x8f, + 0x59, 0xaf, 0x98, 0x5a, 0xd1, 0x31, 0x5c, 0x2e, 0x25, 0xae, 0xb9, 0xd7, 0xf1, + 0x34, 0xe4, 0xbf, 0x47, 0x86, 0x42, 0xab, 0x96, 0xb1, 0x5d, 0x3b, 0x3e, 0x13, + 0xce, 0x23, 0x87, 0xac, 0x84, 0xdc, 0x08, 0x19, 0xe8, 0x12, 0x60, 0xe1, 0x1d, + 0x39, 0x2a, 0x5f, 0x06, 0xdb, 0x8b, 0x56, 0x33, 0xde, 0x28, 0x1a, 0x0e, 0x9c, + 0x95, 0x8c, 0x24, 0x06, 0x00, 0x00, + ], + txid: [ + 0xe6, 0xa2, 0x02, 0x4f, 0x3f, 0x42, 0x2a, 0x2a, 0x70, 0x74, 0xa4, 0x3e, 0x8b, + 0x7d, 0xf9, 0xa2, 0xb9, 0x0e, 0xee, 0xf2, 0x39, 0x3f, 0x1c, 0x07, 0xf1, 0x80, + 0x42, 0xa4, 0xc0, 0xf0, 0xcb, 0x8b, + ], + auth_digest: [ + 0xc4, 0x7e, 0xfe, 0x33, 0xfa, 0x33, 0xf9, 0xee, 0x64, 0xc5, 0xb0, 0xdf, 0x6e, + 0xdb, 0x2b, 0xab, 0xae, 0x5c, 0x17, 0x0f, 0x80, 0x00, 0x17, 0x90, 0x03, 0xaf, + 0xd3, 0x30, 0xf1, 0x6b, 0xec, 0xd6, + ], + amounts: vec![1311766330213275], + script_pubkeys: vec![vec![0x63, 0x63]], + transparent_input: Some(0), + sighash_shielded: [ + 0xe2, 0x93, 0x95, 0x8a, 0xe7, 0xb6, 0x1e, 0x56, 0x89, 0xd8, 0xa5, 0x62, 0xa1, + 0xb1, 0x49, 0x04, 0x07, 0xe1, 0xb5, 0xf3, 0xab, 0x56, 0xc8, 0x77, 0x2b, 0xf1, + 0x7b, 0xde, 0xb4, 0x2b, 0x4d, 0x71, + ], + sighash_all: Some([ + 0x5c, 0x96, 0xee, 0x8d, 0x2d, 0x58, 0x37, 0x18, 0x31, 0x82, 0x00, 0x75, 0x0c, + 0x96, 0x00, 0x0c, 0x58, 0xfb, 0xa9, 0x08, 0x80, 0x85, 0x3f, 0xf5, 0xf1, 0x37, + 0x1b, 0x5a, 0x4b, 0x35, 0xd3, 0x1b, + ]), + sighash_none: Some([ + 0x45, 0xa6, 0x8e, 0xef, 0x07, 0x18, 0x22, 0x3e, 0x11, 0xe0, 0xb0, 0xe0, 0x5c, + 0x1d, 0xc0, 0x41, 0x04, 0xd2, 0xc1, 0xe1, 0x6b, 0x76, 0x25, 0x4c, 0xb8, 0x1e, + 0xf2, 0xc4, 0x13, 0xfb, 0x95, 0x03, + ]), + sighash_single: None, + sighash_all_anyone: Some([ + 0x3b, 0x76, 0xab, 0xbb, 0x12, 0xd8, 0xc5, 0x7b, 0x7c, 0x29, 0x85, 0x9e, 0x27, + 0xfd, 0x1a, 0x55, 0x3e, 0x5c, 0x11, 0xba, 0x6b, 0xc1, 0x35, 0x50, 0x01, 0xe3, + 0x92, 0x30, 0x2e, 0x2d, 0x29, 0x1c, + ]), + sighash_none_anyone: Some([ + 0xf1, 0xc9, 0x68, 0x5c, 0x0b, 0x80, 0x3a, 0x08, 0x17, 0x85, 0x37, 0x56, 0x39, + 0x3c, 0xad, 0x3b, 0x9a, 0xd0, 0xb7, 0x6a, 0x4b, 0x8b, 0xbb, 0x0a, 0x09, 0x8a, + 0x0e, 0xd0, 0x08, 0x81, 0x9a, 0x91, + ]), + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xd3, + 0xf4, 0x1e, 0x72, 0x8e, 0xf2, 0xbc, 0x09, 0x02, 0xb8, 0x9f, 0xfd, 0xec, 0xa3, + 0x64, 0xdd, 0x2f, 0x0f, 0x07, 0x39, 0xf0, 0x53, 0x45, 0x56, 0x48, 0x31, 0x99, + 0xc7, 0x1f, 0x18, 0x93, 0x41, 0xac, 0x9b, 0x78, 0xa2, 0x69, 0x16, 0x42, 0x06, + 0xa0, 0xea, 0x1c, 0xe7, 0x3b, 0x05, 0x52, 0xac, 0x65, 0x53, 0x00, 0xb2, 0x47, + 0xc0, 0x46, 0xf8, 0xe7, 0x5e, 0xf8, 0xe3, 0xf8, 0xbd, 0x82, 0x1c, 0xf5, 0x77, + 0x49, 0x18, 0x64, 0xe2, 0x0e, 0x6d, 0x08, 0xfd, 0x2e, 0x32, 0xb5, 0x55, 0xc9, + 0x2c, 0x66, 0x1f, 0x19, 0x58, 0x8b, 0x72, 0xa8, 0x95, 0x99, 0x71, 0x0a, 0x00, + 0x06, 0x12, 0x53, 0xca, 0x02, 0xc4, 0x9d, 0x7d, 0x74, 0xf6, 0x5f, 0x01, 0x00, + 0x09, 0xac, 0x53, 0xac, 0x00, 0xac, 0x52, 0x00, 0x00, 0xac, 0xb7, 0x39, 0x17, + 0xd3, 0xcc, 0x94, 0x05, 0x00, 0x09, 0xac, 0x6a, 0x6a, 0x00, 0x63, 0x53, 0x52, + 0xac, 0xac, 0x00, 0x02, 0x80, 0xa9, 0x89, 0x23, 0x5d, 0x81, 0x05, 0x18, 0xdb, + 0xa3, 0xf3, 0x4c, 0x72, 0x7b, 0x77, 0xf2, 0x3d, 0x14, 0xf0, 0x22, 0xbf, 0x38, + 0x1e, 0x29, 0xed, 0xb1, 0x74, 0x9e, 0x05, 0x46, 0xeb, 0xdc, 0x53, 0x04, 0x35, + 0x31, 0x2e, 0xdc, 0xed, 0xc6, 0xa9, 0x61, 0x13, 0x33, 0x38, 0xd7, 0x86, 0xc4, + 0xa3, 0xe1, 0x03, 0xf6, 0x01, 0x10, 0xa1, 0x6b, 0x13, 0x37, 0x12, 0x97, 0x04, + 0xbf, 0x47, 0x54, 0x7f, 0xef, 0x3a, 0x8b, 0x97, 0xe7, 0x37, 0x53, 0x67, 0x5e, + 0x91, 0x07, 0x43, 0x64, 0xab, 0x31, 0x90, 0xcd, 0xd0, 0xf0, 0x33, 0x1b, 0x51, + 0x40, 0x00, 0xfc, 0x16, 0xc9, 0xf0, 0x65, 0xd4, 0xe2, 0xd8, 0xfe, 0x94, 0xe9, + 0x7d, 0x2e, 0x9e, 0x85, 0xc6, 0xbb, 0x74, 0x8c, 0x00, 0x42, 0xd3, 0x24, 0x9a, + 0xbb, 0x13, 0x42, 0xbb, 0x0e, 0xeb, 0xf6, 0x20, 0x58, 0xbf, 0x3d, 0xe0, 0x80, + 0xd9, 0x46, 0x11, 0xa3, 0x75, 0x09, 0x15, 0xb5, 0xdc, 0x6c, 0x0b, 0x38, 0x99, + 0xd4, 0x12, 0x22, 0xba, 0xce, 0x76, 0x0e, 0xe9, 0xc8, 0x81, 0x8d, 0xed, 0x59, + 0x9e, 0x34, 0xc5, 0x6d, 0x73, 0x72, 0xaf, 0x1e, 0xb8, 0x68, 0x52, 0xf2, 0xa7, + 0x32, 0x10, 0x4b, 0xdb, 0x75, 0x07, 0x39, 0xde, 0x6c, 0x2c, 0x6e, 0x0f, 0x9e, + 0xb7, 0xcb, 0x17, 0xf1, 0x94, 0x2b, 0xfc, 0x9f, 0x4f, 0xd6, 0xeb, 0xb6, 0xb4, + 0xcd, 0xd4, 0xda, 0x2b, 0xca, 0x26, 0xfa, 0xc4, 0x57, 0x8e, 0x9f, 0x54, 0x34, + 0x05, 0xac, 0xc7, 0xd8, 0x6f, 0xf5, 0x91, 0x58, 0xbd, 0x0c, 0xba, 0x3a, 0xef, + 0x6f, 0x4a, 0x84, 0x72, 0xd1, 0x44, 0xd9, 0x9f, 0x8b, 0x8d, 0x1d, 0xed, 0xaa, + 0x90, 0x77, 0xd4, 0xf0, 0x1d, 0x4b, 0xb2, 0x7b, 0xbe, 0x31, 0xd8, 0x8f, 0xbe, + 0xfa, 0xc3, 0xdc, 0xd4, 0x79, 0x75, 0x63, 0xa2, 0x6b, 0x1d, 0x61, 0xfc, 0xd9, + 0xa4, 0x64, 0xab, 0x21, 0xed, 0x55, 0x0f, 0xe6, 0xfa, 0x09, 0x69, 0x5b, 0xa0, + 0xb2, 0xf1, 0x0e, 0xea, 0x64, 0x68, 0xcc, 0x6e, 0x20, 0xa6, 0x6f, 0x82, 0x6e, + 0x3d, 0x14, 0xc5, 0x00, 0x6f, 0x05, 0x63, 0x88, 0x7f, 0x5e, 0x12, 0x89, 0xbe, + 0x1b, 0x20, 0x04, 0xca, 0xca, 0x8d, 0x3f, 0x34, 0xd6, 0xe8, 0x4b, 0xf5, 0x9c, + 0x1e, 0x04, 0x61, 0x9a, 0x7c, 0x23, 0xa9, 0x96, 0x94, 0x1d, 0x88, 0x9e, 0x46, + 0x22, 0xa9, 0xb9, 0xb1, 0xd5, 0x9d, 0x5e, 0x31, 0x90, 0x94, 0x31, 0x8c, 0xd4, + 0x05, 0xba, 0x27, 0xb7, 0xe2, 0xc0, 0x84, 0x76, 0x2d, 0x31, 0x45, 0x3e, 0xc4, + 0x54, 0x9a, 0x4d, 0x97, 0x72, 0x9d, 0x03, 0x34, 0x60, 0xfc, 0xf8, 0x9d, 0x64, + 0x94, 0xf2, 0xff, 0xd7, 0x89, 0xe9, 0x80, 0x82, 0xea, 0x5c, 0xe9, 0x53, 0x4b, + 0x3a, 0xcd, 0x60, 0xfe, 0x49, 0xe3, 0x7e, 0x4f, 0x66, 0x69, 0x31, 0x67, 0x73, + 0x19, 0xed, 0x89, 0xf8, 0x55, 0x88, 0x74, 0x1b, 0x31, 0x28, 0x90, 0x1a, 0x93, + 0xbd, 0x78, 0xe4, 0xbe, 0x02, 0x25, 0xa9, 0xe2, 0x69, 0x2c, 0x77, 0xc9, 0x69, + 0xed, 0x01, 0x76, 0xbd, 0xf9, 0x55, 0x59, 0x48, 0xcb, 0xd5, 0xa3, 0x32, 0xd0, + 0x45, 0xde, 0x6b, 0xa6, 0xbf, 0x44, 0x90, 0xad, 0xfe, 0x74, 0x44, 0xcd, 0x46, + 0x7a, 0x09, 0x07, 0x54, 0x17, 0xfc, 0xc0, 0x06, 0x2e, 0x49, 0xf0, 0x08, 0xc5, + 0x1a, 0xd4, 0x22, 0x74, 0x39, 0xc1, 0xb4, 0x47, 0x6c, 0xcd, 0x8e, 0x97, 0x86, + 0x2d, 0xab, 0x7b, 0xe1, 0xe8, 0xd3, 0x99, 0xc0, 0x5e, 0xf2, 0x7c, 0x6e, 0x22, + 0xee, 0x27, 0x3e, 0x15, 0x78, 0x6e, 0x39, 0x4c, 0x8f, 0x1b, 0xe3, 0x16, 0x82, + 0xa3, 0x01, 0x47, 0x96, 0x3a, 0xc8, 0xda, 0x8d, 0x41, 0xd8, 0x04, 0x25, 0x84, + 0x26, 0xa3, 0xf7, 0x02, 0x89, 0xb8, 0xad, 0x19, 0xd8, 0xde, 0x13, 0xbe, 0x4e, + 0xeb, 0xe3, 0xbd, 0x4c, 0x8a, 0x6f, 0x55, 0xd6, 0xe0, 0xc3, 0x73, 0xd4, 0x56, + 0x85, 0x18, 0x79, 0xf5, 0xfb, 0xc2, 0x82, 0xdb, 0x9e, 0x13, 0x48, 0x06, 0xbf, + 0xf7, 0x1e, 0x11, 0xbc, 0x33, 0xab, 0x75, 0xdd, 0x6c, 0xa0, 0x67, 0xfb, 0x73, + 0xa0, 0x43, 0xb6, 0x46, 0xa7, 0xcf, 0x39, 0xca, 0xb4, 0x92, 0x83, 0x86, 0x78, + 0x6d, 0x2f, 0x24, 0x14, 0x1e, 0xe1, 0x20, 0xfd, 0xc3, 0x4d, 0x67, 0x64, 0xea, + 0xfc, 0x66, 0x88, 0x0e, 0xe0, 0x20, 0x4f, 0x53, 0xcc, 0x11, 0x67, 0xed, 0x20, + 0xb4, 0x3a, 0x52, 0xde, 0xa3, 0xca, 0x7c, 0xff, 0x8e, 0xf3, 0x5c, 0xd8, 0xe6, + 0xd7, 0xc1, 0x11, 0xa6, 0x8e, 0xf4, 0x4b, 0xcd, 0x0c, 0x15, 0x13, 0xad, 0x47, + 0xca, 0x61, 0xc6, 0x59, 0xcc, 0x5d, 0x32, 0x5b, 0x44, 0x0f, 0x6b, 0x9f, 0x59, + 0xaf, 0xf6, 0x68, 0x79, 0xbb, 0x66, 0x88, 0xfd, 0x28, 0x59, 0x36, 0x2b, 0x18, + 0x2f, 0x20, 0x7b, 0x31, 0x75, 0x96, 0x1f, 0x64, 0x11, 0xa4, 0x93, 0xbf, 0xfd, + 0x04, 0x8e, 0x7d, 0x0d, 0x87, 0xd8, 0x2f, 0xe6, 0xf9, 0x90, 0xa2, 0xb0, 0xa2, + 0x5f, 0x5a, 0xa0, 0x11, 0x1a, 0x6e, 0x68, 0xf3, 0x7b, 0xf6, 0xf3, 0xac, 0x2d, + 0x26, 0xb8, 0x46, 0x86, 0xe5, 0x69, 0xd5, 0x8d, 0x99, 0xc1, 0x38, 0x35, 0x97, + 0xfa, 0xd8, 0x11, 0x93, 0xc4, 0xc1, 0xb1, 0x6e, 0x6a, 0x90, 0xe2, 0xd5, 0x07, + 0xcd, 0xfe, 0x6f, 0xbd, 0xaa, 0x86, 0x16, 0x3e, 0x9c, 0xf5, 0xde, 0x31, 0x00, + 0xfb, 0xca, 0x7e, 0x8d, 0xa0, 0x47, 0xb0, 0x90, 0xdb, 0x9f, 0x37, 0x95, 0x2f, + 0xbf, 0xee, 0x76, 0xaf, 0x61, 0x66, 0x81, 0x90, 0xbd, 0x52, 0xed, 0x49, 0x0e, + 0x67, 0x7b, 0x51, 0x5d, 0x01, 0x43, 0x18, 0xb4, 0x36, 0xba, 0x91, 0x21, 0xa3, + 0x05, 0x9e, 0x03, 0x65, 0x0d, 0xf3, 0xa8, 0x68, 0x5c, 0x8c, 0x3e, 0x8a, 0x77, + 0x8f, 0x49, 0x1d, 0x81, 0x6f, 0x6c, 0x2b, 0x55, 0x13, 0x25, 0xc8, 0x08, 0x0a, + 0x80, 0x78, 0x99, 0x97, 0x3e, 0xb9, 0x3c, 0x5e, 0x81, 0x9a, 0xad, 0x66, 0x94, + 0x13, 0xf8, 0x38, 0x79, 0x33, 0xad, 0x15, 0x84, 0xaa, 0x35, 0xe4, 0x3f, 0x4e, + 0xcd, 0x1e, 0x2d, 0x04, 0x07, 0xfb, 0xc4, 0x03, 0x03, 0xa9, 0x4d, 0x73, 0x1e, + 0x7c, 0xf5, 0x45, 0xa2, 0x62, 0x77, 0xca, 0xad, 0x39, 0x83, 0x7f, 0x1e, 0x6a, + 0x69, 0x1c, 0x2f, 0xf1, 0xe3, 0x23, 0x8a, 0x20, 0xc2, 0x03, 0x92, 0x54, 0x4d, + 0x63, 0x59, 0xeb, 0x23, 0xfa, 0xf3, 0x8a, 0x08, 0x22, 0xda, 0x36, 0xce, 0x42, + 0x6c, 0x4a, 0x2f, 0xbe, 0xff, 0xeb, 0x0a, 0x8a, 0x2e, 0x29, 0x7a, 0x9d, 0x19, + 0xba, 0x15, 0x02, 0x45, 0x90, 0xe3, 0x32, 0x9d, 0x9f, 0xa9, 0x26, 0x1f, 0x99, + 0x38, 0xa4, 0x03, 0x2d, 0xd3, 0x46, 0x06, 0xc9, 0xcf, 0x9f, 0x3d, 0xd3, 0x3e, + 0x57, 0x6f, 0x05, 0xcd, 0x1d, 0xd6, 0x81, 0x1c, 0x62, 0x98, 0x75, 0x7d, 0x77, + 0xd9, 0xe8, 0x10, 0xab, 0xdb, 0x22, 0x6a, 0xfc, 0xaa, 0x43, 0x46, 0xa6, 0x56, + 0x0f, 0x89, 0x32, 0xb3, 0x18, 0x1f, 0xd3, 0x55, 0xd5, 0xd3, 0x91, 0x97, 0x61, + 0x83, 0xf8, 0xd9, 0x93, 0x88, 0x83, 0x96, 0x32, 0xd6, 0x35, 0x4f, 0x66, 0x6d, + 0x09, 0xd3, 0xe5, 0x62, 0x9e, 0xa1, 0x97, 0x37, 0x38, 0x86, 0x13, 0xd3, 0x8a, + 0x34, 0xfd, 0x0f, 0x6e, 0x50, 0xee, 0x5a, 0x0c, 0xc9, 0x67, 0x71, 0x77, 0xf5, + 0x00, 0x28, 0xc1, 0x41, 0x37, 0x81, 0x87, 0xbd, 0x28, 0x19, 0x40, 0x3f, 0xc5, + 0x34, 0xf8, 0x00, 0x76, 0xe9, 0x38, 0x0c, 0xb4, 0x96, 0x4d, 0x3b, 0x6b, 0x45, + 0x81, 0x9d, 0x3b, 0x8e, 0x9c, 0xaf, 0x54, 0xf0, 0x51, 0x85, 0x2d, 0x67, 0x1b, + 0xf8, 0xc1, 0xff, 0xde, 0x2d, 0x15, 0x10, 0x75, 0x64, 0x18, 0xcb, 0x48, 0x10, + 0x93, 0x6a, 0xa5, 0x7e, 0x69, 0x65, 0xd6, 0xfb, 0x65, 0x6a, 0x76, 0x0b, 0x7f, + 0x19, 0xad, 0xf9, 0x6c, 0x17, 0x34, 0x88, 0x55, 0x21, 0x93, 0xb1, 0x47, 0xee, + 0x58, 0x85, 0x80, 0x33, 0xda, 0xc7, 0xcd, 0x0e, 0xb2, 0x04, 0xc0, 0x64, 0x90, + 0xbb, 0xde, 0xdf, 0x5f, 0x75, 0x71, 0xac, 0xb2, 0xeb, 0xe7, 0x6a, 0xce, 0xf3, + 0xf2, 0xa0, 0x1e, 0xe9, 0x87, 0x48, 0x6d, 0xfe, 0x6c, 0x3f, 0x0a, 0x5e, 0x23, + 0x4c, 0x12, 0x72, 0x58, 0xf9, 0x7a, 0x28, 0xfb, 0x5d, 0x16, 0x4a, 0x81, 0x76, + 0xbe, 0x94, 0x6b, 0x80, 0x97, 0xd0, 0xe3, 0x17, 0x28, 0x7f, 0x33, 0xbf, 0x9c, + 0x16, 0xf9, 0xa5, 0x45, 0x40, 0x9c, 0xe2, 0x9b, 0x1f, 0x42, 0x73, 0x72, 0x5f, + 0xc0, 0xdf, 0x02, 0xa0, 0x4e, 0xba, 0xe1, 0x78, 0xb3, 0x41, 0x4f, 0xb0, 0xa8, + 0x2d, 0x50, 0xde, 0xb0, 0x9f, 0xcf, 0x4e, 0x6e, 0xe9, 0xd1, 0x80, 0xff, 0x4f, + 0x56, 0xff, 0x3b, 0xc1, 0xd3, 0x60, 0x1f, 0xc2, 0xdc, 0x90, 0xd8, 0x14, 0xc3, + 0x25, 0x6f, 0x49, 0x67, 0xd3, 0xa8, 0xd6, 0x4c, 0x83, 0xfe, 0xa3, 0x39, 0xc5, + 0x1f, 0x5a, 0x8e, 0x58, 0x01, 0xfb, 0xb9, 0x78, 0x35, 0x58, 0x1b, 0x60, 0x24, + 0x65, 0xde, 0xe0, 0x4b, 0x59, 0x22, 0xc2, 0x76, 0x1b, 0x54, 0x24, 0x5b, 0xec, + 0x0c, 0x9e, 0xef, 0x2d, 0xb9, 0x7d, 0x22, 0xb2, 0xb3, 0x55, 0x6c, 0xc9, 0x69, + 0xfb, 0xb1, 0x3d, 0x06, 0x50, 0x97, 0x65, 0xa5, 0x2b, 0x3f, 0xac, 0x54, 0xb9, + 0x3f, 0x42, 0x1b, 0xf0, 0x8e, 0x18, 0xd5, 0x2d, 0xdd, 0x52, 0xcc, 0x1c, 0x8c, + 0xa8, 0xad, 0xfa, 0xcc, 0xab, 0x7e, 0x5c, 0xc2, 0xf4, 0x57, 0x3f, 0xbb, 0xf8, + 0x23, 0x9b, 0xb0, 0xb8, 0xae, 0xdb, 0xf8, 0xda, 0xd1, 0x62, 0x82, 0xda, 0x5c, + 0x91, 0x25, 0xdb, 0xa1, 0xc0, 0x59, 0xd0, 0xdf, 0x8a, 0xbf, 0x62, 0x10, 0x78, + 0xf0, 0x2d, 0x6c, 0x4b, 0xc8, 0x6d, 0x40, 0x84, 0x5a, 0xc1, 0xd5, 0x97, 0x10, + 0xc4, 0x5f, 0x07, 0xd5, 0x85, 0xeb, 0x48, 0xb3, 0x2f, 0xc0, 0x16, 0x7b, 0xa2, + 0x56, 0xe7, 0x3c, 0xa3, 0xb9, 0x31, 0x1c, 0x62, 0xd1, 0x09, 0x49, 0x79, 0x57, + 0xd8, 0xdb, 0xe1, 0x0a, 0xa3, 0xe8, 0x66, 0xb4, 0x0c, 0x0b, 0xaa, 0x2b, 0xc4, + 0x92, 0xc1, 0x9a, 0xd1, 0xe6, 0x37, 0x2d, 0x96, 0x22, 0xbf, 0x16, 0x3f, 0xbf, + 0xfe, 0xae, 0xee, 0x79, 0x6a, 0x3c, 0xd9, 0xb6, 0xfb, 0xbf, 0xa4, 0xd7, 0x92, + 0xf3, 0x4d, 0x7f, 0xd6, 0xe7, 0x63, 0xcd, 0x58, 0x59, 0xdd, 0x26, 0x83, 0x3d, + 0x21, 0xd9, 0xbc, 0x54, 0x52, 0xbd, 0x19, 0x51, 0x5d, 0xff, 0x9f, 0x49, 0x95, + 0xb3, 0x5b, 0xc0, 0xc1, 0xf8, 0x76, 0xe6, 0xad, 0x11, 0xf2, 0x45, 0x2d, 0xc9, + 0xae, 0x85, 0xae, 0xc0, 0x1f, 0xc5, 0x6f, 0x8c, 0xbf, 0xda, 0x75, 0xa7, 0x72, + 0x7b, 0x75, 0xeb, 0xbd, 0x6b, 0xbf, 0xfb, 0x43, 0xb6, 0x3a, 0x3b, 0x1b, 0x67, + 0x1e, 0x40, 0xfe, 0xb0, 0xdb, 0x00, 0x29, 0x74, 0xa3, 0xc3, 0xb1, 0xa7, 0x88, + 0x56, 0x72, 0x31, 0xbf, 0x63, 0x99, 0xff, 0x89, 0x23, 0x69, 0x81, 0x14, 0x9d, + 0x42, 0x38, 0x02, 0xd2, 0x34, 0x1a, 0x3b, 0xed, 0xb9, 0xdd, 0xcb, 0xac, 0x1f, + 0xe7, 0xb6, 0x43, 0x5e, 0x14, 0x79, 0xc7, 0x2e, 0x70, 0x89, 0xd0, 0x29, 0xe7, + 0xfb, 0xba, 0xf3, 0xcf, 0x37, 0xe9, 0xb9, 0xa6, 0xb7, 0x76, 0x79, 0x1e, 0x4c, + 0x5e, 0x6f, 0xda, 0x57, 0xe8, 0xd5, 0xf1, 0x4c, 0xd8, 0x2d, 0x6b, 0x59, 0xe8, + 0x75, 0x02, 0x00, 0x84, 0xaf, 0x07, 0x21, 0x9c, 0x7c, 0x0e, 0xe7, 0xfc, 0x7b, + 0xfc, 0x79, 0xf3, 0x25, 0x64, 0x4e, 0x4d, 0xf4, 0xc0, 0xd7, 0xdb, 0x08, 0xe9, + 0xf0, 0xbd, 0x02, 0x49, 0x43, 0xc7, 0x05, 0xab, 0xff, 0x89, 0x94, 0xbf, 0xa6, + 0x05, 0xcf, 0xbc, 0x7e, 0xd7, 0x46, 0xa7, 0xd3, 0xf7, 0xc3, 0x7d, 0x9e, 0x8b, + 0xdc, 0x43, 0x3b, 0x7d, 0x79, 0xe0, 0x8a, 0x12, 0xf7, 0x38, 0xa8, 0xf0, 0xdb, + 0xdd, 0xfe, 0xf2, 0xf2, 0x65, 0x7e, 0xf3, 0xe4, 0x7d, 0x1b, 0x0f, 0xd1, 0x1e, + 0x6a, 0x13, 0x31, 0x1f, 0xb7, 0x99, 0xc7, 0x9c, 0x64, 0x1d, 0x9d, 0xa4, 0x3b, + 0x33, 0xe7, 0xad, 0x01, 0x2e, 0x28, 0x25, 0x53, 0x98, 0x78, 0x92, 0x62, 0x27, + 0x5f, 0x11, 0x75, 0xbe, 0x84, 0x62, 0xc0, 0x14, 0x91, 0xc4, 0xd8, 0x42, 0x40, + 0x6d, 0x0e, 0xc4, 0x28, 0x2c, 0x95, 0x26, 0x17, 0x4a, 0x09, 0x87, 0x8f, 0xe8, + 0xfd, 0xde, 0x33, 0xa2, 0x96, 0x04, 0xe5, 0xe5, 0xe7, 0xb2, 0xa0, 0x25, 0xd6, + 0x65, 0x0b, 0x97, 0xdb, 0xb5, 0x2b, 0xef, 0xb5, 0x9b, 0x1d, 0x30, 0xa5, 0x74, + 0x33, 0xb0, 0xa3, 0x51, 0x47, 0x44, 0x44, 0x09, 0x9d, 0xaa, 0x37, 0x10, 0x46, + 0x61, 0x32, 0x60, 0xcf, 0x33, 0x54, 0xcf, 0xcd, 0xad, 0xa6, 0x63, 0xec, 0xe8, + 0x24, 0xff, 0xd7, 0xe4, 0x43, 0x93, 0x88, 0x6a, 0x86, 0x16, 0x5d, 0xdd, 0xdf, + 0x8c, 0x35, 0xa2, 0xd2, 0x70, 0x84, 0x6b, 0x9d, 0xbe, 0x00, 0x5c, 0xda, 0x16, + 0xaf, 0x44, 0x08, 0xf3, 0xab, 0x06, 0xa9, 0x16, 0xee, 0xeb, 0x9c, 0x95, 0x94, + 0xb7, 0x04, 0x24, 0xa4, 0xc1, 0xd1, 0x71, 0x29, 0x5b, 0x67, 0x63, 0xb2, 0x2f, + 0x47, 0xf8, 0x0b, 0x53, 0xcc, 0xbb, 0x90, 0x4b, 0xd6, 0x8f, 0xd6, 0x5f, 0xbd, + 0x3f, 0xbd, 0xea, 0x10, 0x35, 0xe9, 0x8c, 0x21, 0xa7, 0xdb, 0xc9, 0x1a, 0x9b, + 0x5b, 0xc7, 0x69, 0x0f, 0x05, 0xec, 0x31, 0x7c, 0x97, 0xf8, 0x76, 0x4e, 0xb4, + 0x8e, 0x91, 0x1d, 0x42, 0x8e, 0xc8, 0xd8, 0x61, 0xb7, 0x08, 0xe8, 0x29, 0x8a, + 0xcb, 0x62, 0x15, 0x51, 0x45, 0x15, 0x5a, 0xe9, 0x5f, 0x0a, 0x1d, 0x15, 0x01, + 0x03, 0x47, 0x53, 0x14, 0x6e, 0x22, 0xd0, 0x5f, 0x58, 0x6d, 0x7f, 0x6b, 0x4f, + 0xe1, 0x2d, 0xad, 0x9a, 0x17, 0xf5, 0xdb, 0x70, 0xb1, 0xdb, 0x96, 0xb8, 0xd9, + 0xa8, 0x3e, 0xda, 0xdc, 0x96, 0x6c, 0x8a, 0x54, 0x66, 0xb6, 0x1f, 0xc9, 0x98, + 0xc3, 0x1f, 0x10, 0x70, 0xd9, 0xa5, 0xc9, 0xa6, 0xd2, 0x68, 0xd3, 0x04, 0xfe, + 0x6b, 0x8f, 0xd3, 0xb4, 0x01, 0x03, 0x48, 0x61, 0x1a, 0xbd, 0xcb, 0xd4, 0x9f, + 0xe4, 0xf8, 0x5b, 0x62, 0x3c, 0x78, 0x28, 0xc7, 0x13, 0x82, 0xe1, 0x03, 0x4e, + 0xa6, 0x7b, 0xc8, 0xae, 0x97, 0x40, 0x4b, 0x0c, 0x50, 0xb2, 0xfa, 0xda, 0x0a, + 0xbf, 0x4f, 0xd3, 0xa8, 0xbf, 0x7f, 0x3c, 0x0b, 0x38, 0xb2, 0xb0, 0x8d, 0xd4, + 0xba, 0xe0, 0x8a, 0xc8, 0xf5, 0x09, 0xc5, 0x97, 0x22, 0x39, 0x43, 0x9c, 0x3c, + 0x08, 0x02, 0x54, 0x14, 0x94, 0x36, 0x49, 0x30, 0x55, 0x21, 0x32, 0x6b, 0xde, + 0x08, 0x56, 0x30, 0x86, 0x46, 0x29, 0x29, 0x1b, 0xae, 0x25, 0xff, 0x88, 0x22, + 0xa1, 0x4c, 0x4b, 0x66, 0x6a, 0x92, 0x59, 0xad, 0x0d, 0x00, 0x00, + ], + txid: [ + 0x4d, 0x07, 0xfd, 0x00, 0x8b, 0xe8, 0xfb, 0xd6, 0x85, 0x4b, 0x10, 0x19, 0x23, + 0xcc, 0xbb, 0x18, 0xef, 0x5c, 0x11, 0xd7, 0xce, 0xe3, 0xa6, 0x16, 0x63, 0xc6, + 0x9a, 0x32, 0x01, 0x69, 0xaa, 0xf7, + ], + auth_digest: [ + 0x92, 0x6a, 0x20, 0x24, 0xb5, 0x7b, 0x11, 0x48, 0x33, 0xf7, 0x2a, 0x38, 0x7e, + 0x67, 0x2a, 0x60, 0x65, 0x6e, 0xf3, 0x28, 0x0b, 0xf0, 0x7e, 0x3b, 0x6d, 0x15, + 0xbd, 0x31, 0x49, 0x04, 0x18, 0x10, + ], + amounts: vec![221157483985475, 1614190427764494], + script_pubkeys: vec![vec![], vec![0x53, 0x51]], + transparent_input: Some(0), + sighash_shielded: [ + 0xcb, 0x8b, 0xa0, 0x7a, 0x5a, 0x52, 0x61, 0x7a, 0xc3, 0xdf, 0x07, 0x10, 0x2c, + 0x29, 0x6e, 0xa9, 0x4c, 0x86, 0xf4, 0x19, 0x73, 0x9b, 0x78, 0x19, 0xeb, 0xdc, + 0xe6, 0x39, 0x12, 0x25, 0x6d, 0x8e, + ], + sighash_all: Some([ + 0x54, 0x40, 0x23, 0x1a, 0x91, 0xf3, 0xe2, 0x45, 0x65, 0x10, 0x40, 0xcd, 0x8a, + 0x4e, 0xbd, 0x83, 0xc7, 0x16, 0x87, 0x2b, 0x57, 0xa7, 0x8d, 0x6f, 0x98, 0xfe, + 0x9b, 0x6c, 0x49, 0x50, 0x4c, 0xd8, + ]), + sighash_none: Some([ + 0xac, 0x2c, 0x64, 0xd6, 0x25, 0x46, 0x8d, 0x2b, 0x00, 0xa7, 0xd9, 0x4d, 0x94, + 0x7d, 0xae, 0x2c, 0x42, 0x5b, 0x67, 0x60, 0xed, 0x2a, 0x9b, 0xe1, 0x69, 0xde, + 0xd5, 0x67, 0xb8, 0xe2, 0x5d, 0x3c, + ]), + sighash_single: Some([ + 0xdb, 0x2d, 0x10, 0x37, 0xda, 0x82, 0x73, 0x6a, 0x90, 0x9d, 0x40, 0x84, 0xe5, + 0x5d, 0xb2, 0x05, 0x1d, 0xcd, 0x98, 0x5c, 0x6a, 0xd2, 0xf7, 0x86, 0x0f, 0x21, + 0x9a, 0xd0, 0x54, 0x7d, 0xd6, 0xac, + ]), + sighash_all_anyone: Some([ + 0x14, 0xc7, 0x36, 0x94, 0x5a, 0x17, 0x3c, 0x1c, 0x08, 0x1f, 0x09, 0xf7, 0xd1, + 0x77, 0x66, 0xa7, 0x64, 0xe1, 0xd8, 0x14, 0x97, 0xdf, 0x65, 0xbc, 0x75, 0xd9, + 0x4f, 0x15, 0xfa, 0x26, 0xe9, 0xc3, + ]), + sighash_none_anyone: Some([ + 0x5d, 0x31, 0x23, 0xf5, 0x3c, 0x30, 0x88, 0x1a, 0x81, 0xda, 0x72, 0xb3, 0xf7, + 0x41, 0xa3, 0x3e, 0xc7, 0xc3, 0x8f, 0x22, 0x04, 0xea, 0x8a, 0x28, 0x6e, 0xca, + 0xf8, 0x80, 0xde, 0xd5, 0x3a, 0xea, + ]), + sighash_single_anyone: Some([ + 0x1e, 0xad, 0x3e, 0xb3, 0x74, 0x5f, 0xb6, 0xda, 0x49, 0xb3, 0xe8, 0x8c, 0xb5, + 0xf5, 0x1b, 0xdc, 0xfc, 0xb1, 0xbf, 0x95, 0xff, 0xdf, 0xd4, 0x2c, 0xdc, 0xd2, + 0x96, 0x22, 0x79, 0x7f, 0x39, 0x0c, + ]), + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x47, + 0x70, 0x1c, 0x85, 0x97, 0x65, 0x43, 0x11, 0x02, 0xa6, 0xfa, 0x0b, 0xf2, 0x99, + 0x99, 0x56, 0xfb, 0xfd, 0x0e, 0xe6, 0x8e, 0xc3, 0x6e, 0x46, 0x88, 0x80, 0x9a, + 0xe2, 0x31, 0xeb, 0x8b, 0xc4, 0x36, 0x9f, 0x5f, 0xe1, 0x57, 0x3f, 0x57, 0xe0, + 0x99, 0xd9, 0xc0, 0x99, 0x01, 0x05, 0x51, 0x52, 0xac, 0x00, 0xac, 0x11, 0x95, + 0x6a, 0x8a, 0xe9, 0x05, 0xea, 0xd8, 0x69, 0x54, 0x54, 0x7c, 0x44, 0x8a, 0xe4, + 0x3d, 0x31, 0x5e, 0x66, 0x9c, 0x42, 0x42, 0xda, 0x56, 0x59, 0x38, 0xf4, 0x17, + 0xbf, 0x43, 0xce, 0x7b, 0x2b, 0x30, 0xb1, 0xcd, 0x40, 0x18, 0x38, 0x8e, 0x06, + 0x51, 0x6a, 0x6a, 0xac, 0x6a, 0x00, 0x87, 0x7a, 0x59, 0x25, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x23, 0xc7, 0x84, 0xc5, 0xb8, 0x7c, 0xc8, 0xa3, 0xc6, 0x80, 0xc7, + 0xb8, 0xc6, 0x9c, 0xc7, 0xba, 0xc5, 0xa1, 0xc4, 0xb5, 0xc7, 0x82, 0xc4, 0x84, + 0xc3, 0x87, 0xc7, 0x9c, 0xc4, 0x82, 0xc3, 0xb3, 0xc5, 0x97, 0xc8, 0x96, 0x01, + 0x7d, 0x04, 0x25, 0x3c, 0x63, 0x63, 0x6e, 0x16, 0x67, 0x60, 0xed, 0xbf, 0x73, + 0x94, 0x77, 0xe6, 0xe3, 0x0f, 0xfb, 0xde, 0x57, 0xf2, 0x88, 0x08, 0x43, 0x4c, + 0xf5, 0xb6, 0x60, 0xa1, 0xad, 0x28, 0x85, 0x7a, 0xc9, 0xd6, 0xc9, 0x27, 0x6a, + 0x87, 0x90, 0x80, 0x0d, 0xca, 0x8a, 0x8c, 0x31, 0x44, 0x3c, 0x10, 0x34, 0xd1, + 0xf3, 0x1a, 0x0f, 0xd2, 0x02, 0xe6, 0xa0, 0x9c, 0xa8, 0x7c, 0xc2, 0xd5, 0xca, + 0x02, 0xa9, 0x13, 0x8d, 0xd1, 0x78, 0xe0, 0xab, 0x58, 0xe8, 0x52, 0x44, 0xa7, + 0x2e, 0xdf, 0x72, 0x7d, 0x00, 0x06, 0x14, 0xe8, 0x35, 0x62, 0xf8, 0x2d, 0xfd, + 0x40, 0x5b, 0x54, 0xa4, 0x5e, 0xb3, 0x2c, 0x16, 0x54, 0x48, 0xd4, 0xd5, 0xd6, + 0x1c, 0xa2, 0x85, 0x95, 0x85, 0x36, 0x9f, 0x53, 0xf1, 0xa1, 0x37, 0xe9, 0xe8, + 0x2b, 0x67, 0xb8, 0xfd, 0xaf, 0x01, 0xbd, 0xa5, 0x4a, 0x31, 0x73, 0x11, 0x89, + 0x6a, 0xe1, 0x02, 0x80, 0xa0, 0x32, 0x44, 0x0c, 0x42, 0x0a, 0x42, 0x1e, 0x94, + 0x4d, 0x1e, 0x95, 0x2b, 0x00, 0xd6, 0x41, 0x5b, 0xc4, 0xaa, 0xc2, 0xb7, 0xc7, + 0x90, 0xce, 0x87, 0xc6, 0x8a, 0xcd, 0xb7, 0xe1, 0x9a, 0xbe, 0xc8, 0xb4, 0xc2, + 0xaa, 0x29, 0x41, 0xc6, 0x82, 0xe1, 0x9b, 0xab, 0xc6, 0xb3, 0xc6, 0x88, 0xc8, + 0xac, 0xc6, 0x80, 0xc5, 0x94, 0xc6, 0x94, 0xe1, 0x9a, 0xaf, 0xce, 0x88, 0xc7, + 0xb8, 0xc8, 0xa9, 0x33, 0xc3, 0xbd, 0xc8, 0x93, 0xc4, 0xb5, 0xc7, 0xb9, 0x31, + 0x4e, 0xc5, 0xa8, 0xc7, 0x88, 0xc8, 0x99, 0xc6, 0x97, 0xc5, 0x91, 0xe1, 0x9a, + 0xa3, 0xc6, 0x8c, 0xc7, 0xa7, 0xc6, 0xbf, 0x4a, 0xc7, 0x89, 0xc5, 0x89, 0xc2, + 0xa9, 0xc8, 0x87, 0xc7, 0x86, 0x65, 0xc8, 0x99, 0xc3, 0x84, 0xc7, 0xa7, 0x62, + 0xc3, 0xb5, 0xe1, 0x9a, 0xad, 0xc6, 0xbb, 0xc6, 0x98, 0xe2, 0xb1, 0xa0, 0xc5, + 0xbb, 0xc6, 0xb6, 0xe2, 0xb1, 0xa6, 0xc3, 0x8e, 0xe1, 0x9a, 0xb9, 0x3a, 0xc8, + 0x86, 0xc6, 0x87, 0x52, 0xc4, 0xa4, 0xc3, 0x9f, 0xc5, 0x8b, 0x7d, 0xe1, 0x9a, + 0xb6, 0xc5, 0xb8, 0xc8, 0x9e, 0xc3, 0x8d, 0xe2, 0xb1, 0xaa, 0xc8, 0xb0, 0xc7, + 0xaf, 0x26, 0xc5, 0x94, 0xe1, 0x9a, 0xb1, 0xc8, 0xb1, 0xc5, 0xa3, 0xcd, 0xb4, + 0xc8, 0x97, 0xc3, 0xb2, 0xce, 0x8c, 0xc3, 0xba, 0xc4, 0xb0, 0xc5, 0xb6, 0xc4, + 0x8b, 0x74, 0x72, 0xc3, 0xae, 0x35, 0xc6, 0xa3, 0xc4, 0x98, 0xc7, 0x94, 0xc8, + 0x98, 0xc4, 0xaa, 0x42, 0xe1, 0x9b, 0x95, 0xc5, 0x97, 0xc7, 0xaa, 0x74, 0xc5, + 0x9e, 0x2a, 0xc4, 0x95, 0xc2, 0xb7, 0xc5, 0x8b, 0xe1, 0x9a, 0xa4, 0x5a, 0x04, + 0x37, 0xb7, 0xb2, 0x19, 0xb4, 0xa3, 0x61, 0x6d, 0xf2, 0xd8, 0xe7, 0x7a, 0x20, + 0x5c, 0x89, 0x95, 0x91, 0x07, 0x76, 0xd5, 0xfa, 0x3d, 0x32, 0xde, 0xe8, 0x0d, + 0xb6, 0x01, 0xf3, 0xed, 0xd3, 0xaf, 0xc8, 0x5f, 0xb7, 0x56, 0x0c, 0x53, 0x48, + 0xc6, 0x9c, 0x41, 0x93, 0xa8, 0xbb, 0xfd, 0x05, 0x2c, 0xbf, 0x7e, 0x1c, 0xfc, + 0xb7, 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, + 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, + 0x26, 0xe0, 0x96, 0xd8, 0xb1, 0xe4, 0x95, 0x4b, 0x54, 0x81, 0x3b, 0xb3, 0x3f, + 0x08, 0xd5, 0x62, 0xba, 0x51, 0x3f, 0xee, 0x1b, 0x09, 0xc0, 0xfc, 0xd5, 0x16, + 0x05, 0x54, 0x19, 0x47, 0x4d, 0xd7, 0xfd, 0xa0, 0x38, 0xa8, 0x1c, 0x84, 0xea, + 0x7b, 0x94, 0x68, 0x28, 0x7f, 0x0e, 0xb0, 0xc1, 0x0c, 0x4b, 0x13, 0x25, 0x20, + 0x19, 0x4d, 0x3d, 0x8d, 0x53, 0x51, 0xfc, 0x10, 0xd0, 0x9c, 0x15, 0xc8, 0xcc, + 0x10, 0x1a, 0xa1, 0x66, 0x0c, 0xd7, 0xde, 0xdd, 0xca, 0x3b, 0x40, 0xfa, 0xee, + 0x54, 0x3f, 0x2d, 0x44, 0x34, 0x58, 0xb1, 0xcf, 0xe1, 0xb9, 0xd4, 0x63, 0x91, + 0xf8, 0x47, 0x49, 0x05, 0xc5, 0xf7, 0xf2, 0x13, 0x55, 0x15, 0x79, 0x16, 0x71, + 0xe5, 0x35, 0xa1, 0x74, 0xd6, 0x7b, 0x5d, 0x13, 0xf8, 0x1f, 0x46, 0xdf, 0x7a, + 0x90, 0x2a, 0x40, 0xfc, 0xb7, 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, + 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, + 0xe8, 0xa7, 0xb3, 0x4d, 0x26, 0xe0, 0x96, 0xd8, 0xb1, 0xca, 0x0d, 0x67, 0xf6, + 0xe5, 0x54, 0x12, 0x47, 0x39, 0xf8, 0x05, 0xaf, 0x87, 0x6a, 0xee, 0xde, 0x53, + 0xaa, 0x8b, 0x0f, 0x8e, 0x56, 0x04, 0xa7, 0x3c, 0x30, 0xcb, 0xd0, 0x9d, 0xad, + 0x96, 0x3d, 0x6f, 0x8a, 0x5d, 0xcc, 0x40, 0xde, 0xf4, 0x07, 0x97, 0x34, 0x21, + 0x13, 0xba, 0x20, 0x6f, 0xae, 0x8e, 0xbe, 0x4f, 0x3b, 0xc3, 0xca, 0xf6, 0x92, + 0x59, 0xe4, 0x62, 0xef, 0xf9, 0xba, 0x8b, 0x3f, 0xcc, 0x95, 0xbe, 0xce, 0x3d, + 0xfd, 0xfc, 0xe5, 0xcf, 0x9e, 0x1b, 0x41, 0x96, 0xa6, 0x13, 0x2e, 0x53, 0x11, + 0xfa, 0xac, 0xd6, 0x21, 0xef, 0xee, 0x9f, 0x66, 0x2d, 0xb4, 0x9a, 0x3c, 0x6e, + 0x14, 0x2c, 0x18, 0x4a, 0x79, 0x6c, 0x2b, 0xb9, 0xf0, 0x3a, 0x95, 0x35, 0x72, + 0xba, 0x5d, 0x42, 0x87, 0xc0, 0xce, 0xfb, 0xfc, 0xb7, 0x3c, 0xb0, 0x33, 0x97, + 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, 0x7b, 0xe4, 0x2d, 0x4d, + 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, 0x26, 0xe0, 0x96, 0xd8, 0xb1, + 0x27, 0x43, 0x3f, 0x9e, 0x49, 0xd3, 0xaa, 0x09, 0xe3, 0x56, 0xd8, 0xd6, 0x6d, + 0x0c, 0x01, 0x21, 0xe9, 0x1a, 0x3c, 0x4a, 0xa3, 0xf2, 0x7f, 0xa1, 0xb6, 0x33, + 0x96, 0xe2, 0xb4, 0x1d, 0xb9, 0x08, 0xfd, 0xab, 0x8b, 0x18, 0xcc, 0x73, 0x04, + 0xe9, 0x4e, 0x97, 0x05, 0x68, 0xf9, 0x42, 0x1c, 0x0d, 0xbb, 0xba, 0xf8, 0x45, + 0x98, 0xd9, 0x72, 0xb0, 0x53, 0x4f, 0x48, 0xa5, 0xe5, 0x26, 0x70, 0x43, 0x3a, + 0xf1, 0xb8, 0x24, 0x4d, 0x83, 0x88, 0x8d, 0x72, 0x32, 0xfa, 0x09, 0x3f, 0x81, + 0x5e, 0xa0, 0x2f, 0x9a, 0xb0, 0x31, 0xe1, 0x64, 0x6a, 0x5d, 0x62, 0x85, 0xdd, + 0x92, 0x57, 0x27, 0x81, 0x10, 0xf0, 0x38, 0x31, 0x64, 0x7d, 0xff, 0xf7, 0x23, + 0xe5, 0xe4, 0x3d, 0xc1, 0x48, 0xcb, 0x64, 0x97, 0x0e, 0x32, 0x23, 0xfc, 0xb7, + 0x3c, 0xb0, 0x33, 0x97, 0x93, 0x55, 0xdb, 0x69, 0xa6, 0xcc, 0xb4, 0x7b, 0xe2, + 0x7b, 0xe4, 0x2d, 0x4d, 0x92, 0x5b, 0x98, 0xe2, 0xe8, 0xa7, 0xb3, 0x4d, 0x26, + 0xe0, 0x96, 0xd8, 0xb1, 0x01, 0xf5, 0xcd, 0xe5, 0xf0, 0x46, 0x80, 0xbb, 0xfe, + 0xd8, 0x7f, 0x6c, 0xf4, 0x29, 0xfb, 0x27, 0xad, 0x6b, 0xab, 0xe7, 0x91, 0x76, + 0x66, 0x11, 0xcf, 0x5b, 0xc2, 0x0e, 0x48, 0xbe, 0xf1, 0x19, 0x25, 0x9b, 0x9b, + 0x8a, 0x0e, 0x39, 0xc3, 0xdf, 0x28, 0xcb, 0x95, 0x82, 0xea, 0x33, 0x86, 0x01, + 0xcd, 0xc4, 0x81, 0xb3, 0x2f, 0xb8, 0x2a, 0xde, 0xeb, 0xb3, 0xda, 0xde, 0x25, + 0xd1, 0xa3, 0xdf, 0x00, 0xc4, 0xe1, 0x9b, 0x81, 0x75, 0xc8, 0xb6, 0xc5, 0x91, + 0x48, 0x21, 0xc3, 0x9b, 0xe1, 0x9b, 0x8e, 0xc8, 0xa7, 0xc7, 0x84, 0xc6, 0x8d, + 0x39, 0xc5, 0x9d, 0xc8, 0xba, 0xc4, 0x90, 0xc7, 0xad, 0xe2, 0xb1, 0xbd, 0xe2, + 0xb1, 0xbe, 0xc2, 0xa5, 0xc4, 0x8b, 0xe1, 0x9a, 0xb6, 0xe1, 0x9a, 0xac, 0xc5, + 0x95, 0xe1, 0x9b, 0xa6, 0x7d, 0xc7, 0xb8, 0xc6, 0x9d, 0xc2, 0xa4, 0xc6, 0xb8, + 0xc7, 0xa9, 0xc5, 0x86, 0xc8, 0x8d, 0xc2, 0xa5, 0xc4, 0x8f, 0xce, 0x86, 0xc5, + 0xb0, 0xc2, 0xa8, 0x51, 0xe1, 0x9b, 0x90, 0xc4, 0x93, 0xc6, 0xb7, 0xc8, 0xb8, + 0xc4, 0x8c, 0xe2, 0xb1, 0xa5, 0xe1, 0x9b, 0x83, 0xc9, 0x89, 0x40, 0xce, 0x84, + 0xc6, 0xb8, 0xc5, 0x80, 0xe1, 0x9b, 0x9e, 0xc7, 0xbe, 0xc5, 0xbd, 0xc6, 0xb3, + 0xe1, 0x9b, 0x91, 0xc3, 0x80, 0x7e, 0xc9, 0x86, 0xe2, 0xb1, 0xaf, 0xc4, 0x91, + 0xc2, 0xbd, 0xe1, 0x9b, 0xa4, 0xc5, 0x98, 0xc6, 0x85, 0xc4, 0x8e, 0xc7, 0x8a, + 0xc8, 0xb5, 0xc4, 0xaa, 0xc3, 0x93, 0xe1, 0x9b, 0x99, 0xc4, 0x9c, 0xe2, 0xb1, + 0xac, 0x2f, 0xc4, 0x87, 0xc3, 0xb3, 0x34, 0xc6, 0x9a, 0xe1, 0x9a, 0xb1, 0xcd, + 0xb0, 0xe1, 0x9b, 0xaf, 0xc5, 0xbf, 0xc7, 0x85, 0xc7, 0x88, 0xe2, 0xb1, 0xb2, + 0xc7, 0x94, 0xc5, 0xae, 0xc3, 0x87, 0xc8, 0xba, 0x5a, 0xc4, 0x83, 0xc7, 0xb7, + 0xe1, 0x9b, 0x96, 0xc7, 0x9d, 0x5a, 0x01, 0x14, 0x02, 0xa3, 0x2d, 0x23, 0x22, + 0x5f, 0x8e, 0x47, 0xe7, 0x42, 0xe4, 0x5b, 0x77, 0xba, 0x92, 0xf7, 0x7c, 0xdd, + 0x2a, 0xae, 0x00, 0x50, 0x60, 0x8d, 0x0a, 0x06, 0xde, 0x70, 0x44, 0xe3, 0x94, + 0xac, 0xf8, 0x01, 0xb6, 0xee, 0x94, 0xa8, 0x5d, 0x32, 0x19, 0x34, 0x60, 0x4e, + 0x47, 0x99, 0x70, 0x16, 0xb3, 0x04, 0xbd, 0xa0, 0x65, 0x5f, 0x62, 0x60, 0xae, + 0x11, 0xd2, 0x50, 0xdc, 0xa8, 0x87, 0x71, 0xd9, 0x0e, 0x71, 0xbd, 0xc0, 0xff, + 0xf7, 0x78, 0xca, 0x9b, 0x89, 0x02, 0x6d, 0x38, 0x8a, 0x0e, 0x77, 0x1d, 0xd2, + 0xcf, 0x77, 0x73, 0xb6, 0xba, 0x2a, 0x5f, 0x66, 0x48, 0x47, 0xbf, 0x70, 0x7f, + 0x2f, 0xc1, 0x0c, 0x98, 0xf2, 0xf0, 0x06, 0xec, 0x22, 0xcc, 0xb5, 0xa8, 0xc8, + 0xb7, 0xc4, 0x0c, 0x7c, 0x2d, 0x49, 0xa6, 0x63, 0x9b, 0x9f, 0x2c, 0xe3, 0x3c, + 0x25, 0xc0, 0x4b, 0xc4, 0x61, 0xe7, 0x44, 0xdf, 0xa5, 0x36, 0xb0, 0x0d, 0x94, + 0xba, 0xdd, 0xf4, 0xf4, 0xd1, 0x40, 0x44, 0xc6, 0x95, 0xa3, 0x38, 0x01, 0xfd, + 0x48, 0x01, 0xe1, 0x9b, 0xad, 0x5f, 0x48, 0xc6, 0x89, 0xc3, 0x9a, 0xe1, 0x9b, + 0xaf, 0xe2, 0xb1, 0xb1, 0xc6, 0x8e, 0x48, 0xc7, 0x83, 0xc2, 0xb9, 0xc5, 0x84, + 0x23, 0xc7, 0x85, 0xc8, 0xa5, 0xc5, 0xb9, 0xe1, 0x9a, 0xa2, 0xcd, 0xb3, 0xe1, + 0x9b, 0xad, 0xc3, 0xad, 0xe2, 0xb1, 0xae, 0xc5, 0x85, 0xc5, 0x82, 0xe1, 0x9a, + 0xb0, 0x23, 0xc7, 0x9e, 0xe2, 0xb1, 0xa4, 0xcd, 0xbe, 0xe1, 0x9b, 0x88, 0xc7, + 0xa7, 0xe1, 0x9b, 0xb0, 0x7d, 0xc6, 0xb5, 0xc5, 0xbc, 0x39, 0x67, 0xc9, 0x82, + 0xc6, 0x8c, 0xe2, 0xb1, 0xba, 0xc3, 0xae, 0xc6, 0xa2, 0xc4, 0xb4, 0x44, 0x65, + 0xcd, 0xbd, 0xc4, 0x87, 0xe1, 0x9b, 0x8b, 0xcd, 0xbb, 0x59, 0x3e, 0x61, 0xc7, + 0xb3, 0x74, 0x37, 0xc8, 0xb8, 0xc3, 0xa4, 0xc7, 0x81, 0xc3, 0xb1, 0xc8, 0xaa, + 0xc7, 0xbc, 0xc2, 0xb2, 0xc2, 0xbe, 0xc3, 0xab, 0xc5, 0xb5, 0xc6, 0x8f, 0xe1, + 0x9a, 0xa0, 0xc8, 0xa0, 0xc7, 0xae, 0xc3, 0x94, 0xe1, 0x9b, 0x85, 0xe1, 0x9b, + 0xad, 0xe2, 0xb1, 0xbc, 0xc6, 0xa4, 0xe1, 0x9a, 0xa1, 0xc5, 0xae, 0xc5, 0xa4, + 0xe2, 0xb1, 0xa7, 0xe1, 0x9a, 0xb5, 0xc4, 0xa1, 0x4c, 0xc7, 0xbe, 0xc5, 0xb8, + 0xe1, 0x9a, 0xbb, 0xc5, 0x87, 0xc4, 0x80, 0xe1, 0x9a, 0xa5, 0xc8, 0xa1, 0xc8, + 0x87, 0x7d, 0xc6, 0xbb, 0xe1, 0x9b, 0xa3, 0xc5, 0x85, 0xc2, 0xb0, 0xc7, 0xb5, + 0xc2, 0xab, 0xc2, 0xb2, 0xc6, 0x87, 0xc5, 0xb4, 0x63, 0xc9, 0x86, 0xe1, 0x9a, + 0xbc, 0xe1, 0x9b, 0x9d, 0xe1, 0x9a, 0xab, 0xc4, 0x9e, 0xc2, 0xa3, 0xc8, 0x9f, + 0xc6, 0xb9, 0xc7, 0x99, 0xc7, 0xa7, 0xc5, 0xac, 0xcd, 0xb4, 0xc6, 0x98, 0xc6, + 0x85, 0xc6, 0xa7, 0xc6, 0xbc, 0xc8, 0xbd, 0xc6, 0xa9, 0xc5, 0xa4, 0xc4, 0x8a, + 0x25, 0xce, 0x8c, 0xe1, 0x9b, 0x9c, 0xc4, 0xa9, 0xc4, 0x94, 0xe2, 0xb1, 0xaa, + 0xe1, 0x9b, 0x81, 0xc7, 0x9a, 0xc6, 0xa4, 0xc8, 0xbb, 0xe1, 0x9b, 0x97, 0xc5, + 0xa8, 0xc3, 0x87, 0xe2, 0xb1, 0xa5, 0x79, 0xe1, 0x9a, 0xa0, 0xc6, 0xbe, 0x6f, + 0xc3, 0xbb, 0xe2, 0xb1, 0xb6, 0x5b, 0xc3, 0xa1, 0xc6, 0x94, 0xce, 0x8c, 0xe1, + 0x9b, 0x94, 0xc3, 0xaf, 0xce, 0x87, 0xc5, 0xa3, 0xe1, 0x9a, 0xa1, 0x44, 0xe1, + 0x9b, 0x82, 0xc6, 0x86, 0x78, 0x41, 0x4f, 0xc4, 0xa0, 0xc6, 0x92, 0xe1, 0x9a, + 0xa0, 0xc8, 0xae, 0xc7, 0x97, 0x02, 0x57, 0x64, 0x27, 0xb0, 0x8a, 0x45, 0x0b, + 0x7a, 0x98, 0x63, 0x35, 0x00, 0x1e, 0x63, 0x21, 0x7b, 0x81, 0x31, 0x04, 0x2f, + 0x3a, 0xe0, 0x12, 0x19, 0x21, 0x33, 0x60, 0xfe, 0x9e, 0x20, 0x2c, 0x9e, 0x9c, + 0x9f, 0x64, 0xbb, 0x3a, 0x11, 0xcc, 0xac, 0x23, 0x04, 0x88, 0x6a, 0xe1, 0x01, + 0x0b, 0x0d, 0xfd, 0x9c, 0xb2, 0x29, 0x42, 0x34, 0x86, 0xf4, 0x99, 0x35, 0x9f, + 0x32, 0x0a, 0x30, 0xff, 0x48, 0x8f, 0x90, 0x41, 0x7f, 0xef, 0xc7, 0xcb, 0x9f, + 0xbc, 0x77, 0x7c, 0xbc, 0xf3, 0x8d, 0x79, 0x14, 0x27, 0xa0, 0x0d, 0x54, 0x3e, + 0x45, 0xf9, 0x97, 0x49, 0xcc, 0x4d, 0x61, 0xf2, 0xe8, 0xaa, 0xbf, 0xe9, 0x8b, + 0xd9, 0x05, 0xfa, 0x39, 0x95, 0x1b, 0x33, 0xea, 0x76, 0x9c, 0x45, 0xab, 0x95, + 0x31, 0xc5, 0x72, 0x09, 0x86, 0x2a, 0xd1, 0x2f, 0xd7, 0x6b, 0xa4, 0x80, 0x7e, + 0x65, 0x41, 0x7b, 0x6c, 0xd1, 0x2f, 0xa8, 0xec, 0x91, 0x6f, 0x01, 0x3e, 0xbb, + 0x87, 0x06, 0xa9, 0x6e, 0xff, 0xed, 0xa0, 0x6c, 0x4b, 0xe2, 0x13, 0x1c, 0x18, + 0x38, 0xff, 0x75, 0x7d, 0x92, 0x6c, 0xb3, 0x5f, 0xed, 0x6a, 0xb4, 0x95, 0x95, + 0x79, 0x54, 0x80, 0x21, 0xc0, 0xb1, 0xc0, 0x83, 0x22, 0xb1, 0xad, 0xf2, 0x7c, + 0x87, 0xad, 0x45, 0x09, 0x09, 0xd8, 0x92, 0x4c, 0x9c, 0x07, 0x10, 0xd7, 0x9a, + 0x19, 0x0f, 0x28, 0x41, 0xcf, 0x3a, 0x1c, 0x6a, 0xb5, 0x29, 0x42, 0x34, 0x86, + 0xf4, 0x99, 0x35, 0x9f, 0x32, 0x0a, 0x30, 0xff, 0x48, 0x8f, 0x90, 0x41, 0x7f, + 0xef, 0xc7, 0xcb, 0x9f, 0xbc, 0x77, 0x7c, 0xbc, 0xf3, 0x8d, 0x79, 0x14, 0x27, + 0xa0, 0x0d, 0xe2, 0xd0, 0x91, 0x30, 0xf6, 0x35, 0x11, 0xda, 0x54, 0x83, 0x2d, + 0xe9, 0x13, 0x6b, 0x39, 0xf4, 0x59, 0x9f, 0x5a, 0xa5, 0xdf, 0xbb, 0x45, 0xda, + 0x60, 0xcd, 0xce, 0xab, 0x7e, 0xef, 0xde, 0x09, 0xbe, 0x63, 0xf3, 0xf7, 0xc0, + 0xd2, 0x32, 0x48, 0x47, 0xcc, 0xe1, 0x40, 0x5d, 0xef, 0x7c, 0x46, 0x9b, 0x0e, + 0x27, 0x24, 0x94, 0xe5, 0xdf, 0x54, 0xf5, 0x68, 0x65, 0x6c, 0xb9, 0xc8, 0x81, + 0x8d, 0x00, 0xcc, 0x2f, 0x77, 0xf8, 0xf4, 0x9b, 0x12, 0xea, 0x88, 0xf4, 0xed, + 0xe1, 0x8a, 0x4a, 0x0f, 0x87, 0x83, 0xe2, 0x62, 0x2f, 0x87, 0x92, 0x28, 0x58, + 0xfe, 0x1d, 0x2f, 0x05, 0xee, 0x30, 0xf3, 0x34, 0xb9, 0xcd, 0xd4, 0x9a, 0xcb, + 0xcd, 0xf1, 0x93, 0x5b, 0x85, 0xd4, 0xf1, 0xb2, 0x86, 0xac, 0x19, 0x29, 0xcb, + 0xec, 0xe2, 0xdf, 0xf4, 0x14, 0xc7, 0x0c, 0xd4, 0x3a, 0x1a, 0xe2, 0x04, 0x23, + 0xcd, 0x96, 0xb0, 0x1f, 0xa8, 0xa7, 0xdf, 0x65, 0x91, 0x83, 0x6f, 0x95, 0x89, + 0x3c, 0x0a, 0x69, 0xea, 0xaf, 0x80, 0x5d, 0x2a, 0x0c, 0xd8, 0x45, 0xf5, 0x0b, + 0xcf, 0x7e, 0x92, 0xa4, 0x88, 0x55, 0x50, + ], + txid: [ + 0x82, 0xa1, 0x92, 0xbf, 0x26, 0xf6, 0x93, 0xca, 0xab, 0xd9, 0x8f, 0x43, 0x32, + 0xa1, 0x2c, 0xd2, 0xc3, 0x7c, 0x68, 0x81, 0xb9, 0xf6, 0x6e, 0x07, 0xc8, 0x26, + 0x9e, 0x18, 0xb2, 0xef, 0x76, 0x19, + ], + auth_digest: [ + 0x95, 0xaf, 0x00, 0xfa, 0x05, 0xb4, 0xf2, 0x7e, 0x11, 0xa8, 0xd3, 0x01, 0xc5, + 0xd3, 0x1f, 0x64, 0x20, 0xcc, 0xf3, 0xa7, 0x4b, 0xb3, 0x93, 0xa4, 0x11, 0xaf, + 0x09, 0x79, 0xaf, 0xfd, 0xd5, 0xc6, + ], + amounts: vec![701369169176795, 1525114870428739], + script_pubkeys: vec![ + vec![0x53, 0x53, 0x53, 0x63, 0x6a, 0x53, 0x51], + vec![0x53, 0x52, 0x6a, 0x51, 0x53, 0x00, 0x63, 0x00], + ], + transparent_input: Some(0), + sighash_shielded: [ + 0xce, 0xf9, 0x33, 0x63, 0xa1, 0x78, 0xbd, 0x84, 0x83, 0xb9, 0x76, 0x67, 0x56, + 0xa7, 0xe6, 0x34, 0xce, 0x46, 0x83, 0x61, 0x2e, 0x7d, 0x0a, 0x2d, 0x04, 0xe2, + 0x14, 0x1a, 0x98, 0x32, 0x87, 0x4c, + ], + sighash_all: Some([ + 0xb5, 0xb8, 0x01, 0x7a, 0x80, 0xf5, 0xf0, 0x84, 0x2e, 0xae, 0xbd, 0x42, 0x17, + 0x14, 0x9b, 0x84, 0xfa, 0xb8, 0xff, 0xef, 0xc9, 0xc5, 0x1b, 0x16, 0x91, 0x9f, + 0x57, 0x4c, 0xf2, 0xdd, 0x00, 0x24, + ]), + sighash_none: Some([ + 0xea, 0xa0, 0x35, 0x1b, 0x07, 0x1d, 0x4d, 0x45, 0x13, 0x4d, 0x02, 0x99, 0xbe, + 0x62, 0x61, 0xbf, 0xe4, 0x40, 0x98, 0x82, 0x12, 0x7f, 0xfd, 0x0f, 0xa7, 0xea, + 0xfb, 0x46, 0xb8, 0x89, 0xdd, 0xa0, + ]), + sighash_single: None, + sighash_all_anyone: Some([ + 0x02, 0x8b, 0xec, 0xc8, 0x05, 0x92, 0xa8, 0x68, 0x28, 0x6b, 0x1f, 0xde, 0x3c, + 0x8d, 0xfb, 0x62, 0xdc, 0x38, 0x89, 0x51, 0x2c, 0x32, 0x10, 0x1c, 0x2f, 0x9f, + 0x64, 0x0e, 0x17, 0xed, 0x43, 0xbe, + ]), + sighash_none_anyone: Some([ + 0xc5, 0xd0, 0x02, 0x39, 0x48, 0x1b, 0x60, 0xc8, 0x55, 0x33, 0xb8, 0x40, 0x28, + 0xfb, 0x32, 0xcb, 0x60, 0x62, 0x59, 0x7e, 0x9e, 0x44, 0x7d, 0x73, 0xb4, 0x87, + 0xd8, 0x69, 0xfc, 0xce, 0x6d, 0x46, + ]), + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x0c, + 0xba, 0x7d, 0xa3, 0xa5, 0xe7, 0x58, 0x1a, 0x00, 0x02, 0xe1, 0x89, 0xc7, 0x30, + 0x06, 0x59, 0x04, 0x00, 0x06, 0x00, 0x52, 0x6a, 0x53, 0x51, 0x53, 0x74, 0x0e, + 0xd7, 0xac, 0x8c, 0x45, 0x05, 0x00, 0x08, 0x53, 0x65, 0x51, 0x53, 0x63, 0x00, + 0x52, 0x63, 0x00, 0x01, 0x64, 0xb0, 0x39, 0xb3, 0x8a, 0xb6, 0x3a, 0x22, 0x6e, + 0x76, 0xa2, 0x56, 0xa3, 0x2b, 0x95, 0x47, 0x3d, 0x0e, 0x39, 0xed, 0x66, 0xe5, + 0xcb, 0x95, 0x1f, 0xe4, 0x1a, 0x07, 0x0d, 0x98, 0x3c, 0x59, 0x8a, 0xe1, 0x29, + 0xfd, 0xaf, 0xb7, 0x59, 0xed, 0xe1, 0xe8, 0x92, 0x00, 0xf6, 0x46, 0xdb, 0xd4, + 0xe4, 0xe3, 0x82, 0x66, 0x1d, 0x51, 0x6b, 0x9f, 0x55, 0xdb, 0x45, 0xa1, 0x2f, + 0x86, 0xb2, 0x08, 0x4f, 0x39, 0x3e, 0x8d, 0xb8, 0x4b, 0x3a, 0x10, 0x88, 0x28, + 0xcc, 0x9e, 0x1f, 0x1c, 0x03, 0xce, 0x87, 0x3f, 0x16, 0x0f, 0xe2, 0xc3, 0xad, + 0x59, 0x9c, 0x0d, 0xc7, 0xf3, 0xfa, 0xe1, 0xae, 0xea, 0x95, 0x7a, 0x31, 0x49, + 0xa9, 0x93, 0xcc, 0x47, 0x23, 0x62, 0x29, 0x87, 0x36, 0xa8, 0xb7, 0x78, 0xd9, + 0x7c, 0xe4, 0x23, 0x01, 0x3d, 0x64, 0xb3, 0x2c, 0xd1, 0x72, 0xef, 0xa5, 0x51, + 0xbf, 0x7f, 0x36, 0x8f, 0x04, 0xbd, 0xae, 0xc6, 0x09, 0x1a, 0x30, 0x04, 0xa7, + 0x57, 0x59, 0x8b, 0x80, 0x1d, 0xcf, 0x67, 0x5c, 0xb8, 0x3e, 0x43, 0xa5, 0x3a, + 0xe8, 0xb2, 0x54, 0xd3, 0x33, 0xbc, 0xda, 0x20, 0xd4, 0x81, 0x7d, 0x34, 0x77, + 0xab, 0xfb, 0xa2, 0x5b, 0xb8, 0x3d, 0xf5, 0x94, 0x9c, 0x12, 0x6f, 0x14, 0x9b, + 0x1d, 0x99, 0x34, 0x1e, 0x4e, 0x6f, 0x91, 0x20, 0xf4, 0xd4, 0x1e, 0x62, 0x91, + 0x85, 0x00, 0x2c, 0x72, 0xc0, 0x12, 0xc4, 0x14, 0xd2, 0x38, 0x2a, 0x6d, 0x47, + 0xc7, 0xb3, 0xde, 0xab, 0xa7, 0x70, 0xc4, 0x00, 0xca, 0x96, 0xb2, 0x81, 0x4f, + 0x6b, 0x26, 0xc3, 0xef, 0x17, 0x42, 0x9f, 0x1a, 0x98, 0xc8, 0x5d, 0x83, 0xdb, + 0x20, 0xef, 0xad, 0x48, 0xbe, 0x89, 0x96, 0xfb, 0x1b, 0xff, 0x59, 0x1e, 0xff, + 0xf3, 0x60, 0xfe, 0x11, 0x99, 0x05, 0x6c, 0x56, 0xe5, 0xfe, 0xec, 0x61, 0xa7, + 0xb8, 0xb9, 0xf6, 0x99, 0xd6, 0x01, 0x2c, 0x28, 0x49, 0x23, 0x2f, 0x32, 0x9f, + 0xef, 0x95, 0xc7, 0xaf, 0x37, 0x00, 0x98, 0xff, 0xe4, 0x91, 0x8e, 0x0c, 0xa1, + 0xdf, 0x47, 0xf2, 0x75, 0x86, 0x7b, 0x73, 0x9e, 0x0a, 0x51, 0x4d, 0x32, 0x09, + 0x32, 0x5e, 0x21, 0x70, 0x45, 0x92, 0x7b, 0x47, 0x9c, 0x1c, 0xe2, 0xe5, 0xd5, + 0x4f, 0x25, 0x48, 0x8c, 0xad, 0x15, 0x13, 0xe3, 0xf4, 0x4a, 0x21, 0x26, 0x6c, + 0xfd, 0x84, 0x16, 0x33, 0x32, 0x7d, 0xee, 0x6c, 0xf8, 0x10, 0xfb, 0xf7, 0x39, + 0x3e, 0x31, 0x7d, 0x9e, 0x53, 0xd1, 0xbe, 0x1d, 0x5a, 0xe7, 0x83, 0x9b, 0x66, + 0xb9, 0x43, 0xb9, 0xed, 0x18, 0xf2, 0xc5, 0x30, 0xe9, 0x75, 0x42, 0x23, 0x32, + 0xc3, 0x43, 0x9c, 0xce, 0x49, 0xa2, 0x9f, 0x2a, 0x33, 0x6a, 0x48, 0x51, 0x26, + 0x3c, 0x5e, 0x9b, 0xd1, 0x3d, 0x73, 0x11, 0x09, 0xe8, 0x44, 0xb7, 0xf8, 0xc3, + 0x92, 0xa5, 0xc1, 0xdc, 0xaa, 0x2a, 0xe5, 0xf5, 0x0f, 0xf6, 0x3f, 0xab, 0x97, + 0x65, 0xe0, 0x16, 0x70, 0x2c, 0x35, 0xa6, 0x7c, 0xd7, 0x36, 0x4d, 0x3f, 0xab, + 0x55, 0x2f, 0xb3, 0x49, 0xe3, 0x5c, 0x15, 0xc5, 0x02, 0x50, 0x45, 0x3f, 0xd1, + 0x8f, 0x7b, 0x85, 0x59, 0x92, 0x63, 0x2e, 0x2c, 0x76, 0xc0, 0xfb, 0xf1, 0xef, + 0x96, 0x3e, 0xa8, 0x0e, 0x32, 0x23, 0xde, 0x32, 0x77, 0xbc, 0x55, 0x92, 0x51, + 0x72, 0x58, 0x29, 0xec, 0x03, 0xf2, 0x13, 0xba, 0x89, 0x55, 0xca, 0xb2, 0x82, + 0x2f, 0xf2, 0x1a, 0x9b, 0x0a, 0x49, 0x04, 0xd6, 0x68, 0xfc, 0xd7, 0x72, 0x24, + 0xbd, 0xe3, 0xdd, 0x01, 0xf6, 0xff, 0xc4, 0x82, 0x8f, 0x6b, 0x64, 0x23, 0x0b, + 0x35, 0xc6, 0xa0, 0x49, 0x87, 0x34, 0x94, 0x27, 0x6e, 0xa1, 0xd7, 0xed, 0x5e, + 0x92, 0xcb, 0x4f, 0x90, 0xba, 0x83, 0xa9, 0xe4, 0x96, 0x01, 0xb1, 0x94, 0x04, + 0x2f, 0x29, 0x00, 0xd9, 0x9d, 0x31, 0x2d, 0x7b, 0x70, 0x50, 0x8c, 0xf1, 0x76, + 0x06, 0x6d, 0x15, 0x4d, 0xbe, 0x96, 0xef, 0x9d, 0x43, 0x67, 0xe4, 0xc8, 0x40, + 0xe4, 0xa1, 0x7b, 0x5e, 0x51, 0x22, 0xe8, 0xeb, 0xe2, 0x15, 0x8a, 0x3c, 0x5f, + 0x4c, 0xba, 0xe2, 0x1e, 0xa3, 0xfa, 0x1a, 0xe6, 0xc2, 0x5a, 0x94, 0x62, 0xeb, + 0xcb, 0xb0, 0xfd, 0x5f, 0x14, 0x55, 0x4b, 0xc9, 0x77, 0x47, 0xc3, 0x3e, 0x34, + 0xda, 0x90, 0xc8, 0x16, 0xd8, 0xd0, 0xd5, 0x0b, 0xfe, 0x37, 0x61, 0x8c, 0x58, + 0x12, 0x89, 0x14, 0x84, 0xfa, 0x25, 0x93, 0x22, 0xc1, 0x50, 0x92, 0xd4, 0x15, + 0x5d, 0x86, 0x96, 0xd6, 0xf1, 0x2f, 0x24, 0xfd, 0x36, 0x44, 0x96, 0xb3, 0xbe, + 0x08, 0x71, 0xca, 0x3d, 0xd9, 0x62, 0x53, 0x48, 0xa6, 0x14, 0xb5, 0x9b, 0xde, + 0x45, 0x88, 0x56, 0x49, 0xba, 0xe3, 0x6d, 0xe3, 0x4d, 0xef, 0x8f, 0xce, 0xc8, + 0x53, 0x43, 0x47, 0x5d, 0x97, 0x6a, 0xe1, 0xe9, 0xb2, 0x78, 0x29, 0xce, 0x2a, + 0xc5, 0xef, 0xd0, 0xb3, 0x99, 0xa8, 0xb4, 0x48, 0xbe, 0x65, 0x04, 0x29, 0x4e, + 0xe6, 0xb3, 0xc1, 0xc6, 0xa5, 0x34, 0x2d, 0x7c, 0x01, 0xae, 0x9d, 0x8a, 0xd3, + 0x07, 0x0c, 0x2b, 0x1a, 0x91, 0x57, 0x3a, 0xf5, 0xe0, 0xc5, 0xe4, 0xcb, 0xbf, + 0x4a, 0xcd, 0xc6, 0xb5, 0x4c, 0x92, 0x72, 0x20, 0x0d, 0x99, 0x70, 0x25, 0x0c, + 0x17, 0xc1, 0x03, 0x6f, 0x06, 0x08, 0x5c, 0x41, 0x85, 0x8e, 0xd3, 0xa0, 0xc4, + 0x81, 0x50, 0xbc, 0x69, 0x7e, 0x4a, 0x69, 0x5f, 0xef, 0x33, 0x5f, 0x7a, 0xd0, + 0x7e, 0x1a, 0x46, 0xdc, 0x76, 0x7f, 0xf8, 0x22, 0xdb, 0x70, 0xe6, 0x66, 0x90, + 0x80, 0xb9, 0x81, 0x6b, 0x22, 0x32, 0x79, 0xde, 0x20, 0xd6, 0x26, 0x43, 0x03, + 0x00, 0xc8, 0x1a, 0x4c, 0x66, 0xcc, 0x58, 0x6a, 0xbf, 0xe1, 0xea, 0xa8, 0xca, + 0x6c, 0xf4, 0x1f, 0xc3, 0xc3, 0xe6, 0xc7, 0xb8, 0x86, 0xfb, 0x6d, 0xac, 0x9f, + 0x48, 0x22, 0xb4, 0xfc, 0x6f, 0xff, 0x9d, 0x05, 0x13, 0xd6, 0x1a, 0x21, 0xc8, + 0x0a, 0x37, 0x76, 0x71, 0xd1, 0x35, 0xa6, 0x68, 0xa0, 0xae, 0x2b, 0xb9, 0x34, + 0xc8, 0x2c, 0x41, 0x42, 0xda, 0x69, 0xd1, 0x2c, 0xa7, 0xde, 0x9a, 0x7d, 0xf7, + 0x06, 0x40, 0x0e, 0xc7, 0x98, 0x78, 0xd8, 0x68, 0xe1, 0x7e, 0x8f, 0x71, 0xea, + 0x31, 0x49, 0x5a, 0xf8, 0x19, 0xa0, 0x16, 0xcc, 0x41, 0x9e, 0x07, 0xc5, 0x01, + 0xaa, 0x83, 0x09, 0xb2, 0xe6, 0xc8, 0x5b, 0x79, 0xb2, 0x76, 0x37, 0x33, 0xa3, + 0x7b, 0xbc, 0x04, 0x20, 0xd4, 0x25, 0x37, 0xb8, 0x71, 0xb4, 0x29, 0x4a, 0x65, + 0xd3, 0xe0, 0x55, 0xff, 0x71, 0x8d, 0xd9, 0xdc, 0x8c, 0x75, 0xe7, 0xe5, 0xb2, + 0xef, 0xe4, 0x42, 0x63, 0x73, 0x71, 0xb7, 0xc4, 0x8f, 0x6e, 0xe9, 0x9e, 0x3e, + 0xa3, 0x8a, 0x4b, 0x0f, 0x2f, 0x67, 0xfc, 0x2b, 0x90, 0x8c, 0xda, 0x65, 0x7e, + 0xae, 0x75, 0x4e, 0x03, 0x7e, 0x26, 0x2e, 0x9a, 0x9f, 0x9b, 0xd7, 0xec, 0x42, + 0x67, 0xed, 0x8e, 0x96, 0x93, 0x0e, 0x10, 0x84, 0x78, 0x3c, 0x37, 0xd6, 0xf9, + 0xdd, 0x15, 0xfd, 0x29, 0xf4, 0xcc, 0x47, 0x7e, 0x66, 0xf1, 0x30, 0x28, 0x7a, + 0xec, 0x77, 0xc3, 0x86, 0xd7, 0x4b, 0xcf, 0x42, 0xfa, 0x7b, 0x8c, 0x83, 0x66, + 0x3b, 0x9f, 0xe9, 0xe2, 0xcd, 0x78, 0xb1, 0x5d, 0x46, 0x25, 0xa6, 0x7c, 0x46, + 0x3e, 0x34, 0xac, 0xe7, 0x7c, 0x55, 0xf0, 0x95, 0x40, 0x65, 0x41, 0x58, 0x76, + 0x29, 0x8f, 0x3f, 0x3b, 0x13, 0xbb, 0xfc, 0x08, 0x8b, 0x30, 0xf5, 0x5e, 0x7a, + 0xea, 0xc2, 0x98, 0xdd, 0xeb, 0xcf, 0xb9, 0x63, 0xbe, 0x04, 0x00, 0x02, 0x5b, + 0x6b, 0xc2, 0xa9, 0xc5, 0x87, 0xc7, 0x88, 0xc3, 0x94, 0xc3, 0x90, 0x5b, 0x39, + 0xc3, 0xbb, 0xe1, 0x9b, 0x85, 0x4b, 0xc7, 0x9f, 0x53, 0x61, 0xc5, 0xbb, 0xc2, + 0xa8, 0xc4, 0x86, 0xc8, 0xbe, 0xc3, 0x92, 0x64, 0xc7, 0x90, 0x7e, 0xc3, 0xa7, + 0x43, 0xc7, 0xa4, 0xc6, 0xa4, 0xc8, 0xaa, 0xc8, 0x98, 0xc5, 0x91, 0xc7, 0xab, + 0xc5, 0x89, 0xce, 0x89, 0xc8, 0xa8, 0xc3, 0x9c, 0xe2, 0xb1, 0xb4, 0xc5, 0xa8, + 0x3f, 0xc6, 0xb7, 0xc8, 0xa6, 0xc4, 0x8b, 0xc7, 0x83, 0xc4, 0x8d, 0xc3, 0x9b, + 0xc6, 0xb8, 0xe2, 0xb1, 0xa9, 0xc5, 0xa3, 0xe1, 0x9b, 0x81, 0x21, 0xc3, 0xad, + 0x01, 0xbd, 0xd8, 0xa0, 0x39, 0x65, 0x90, 0x0c, 0x6f, 0xf1, 0xb5, 0x47, 0x46, + 0x51, 0x5c, 0x83, 0x81, 0xf3, 0x21, 0x7d, 0x00, 0xda, 0xf3, 0xa2, 0x01, 0x51, + 0x43, 0x9b, 0xc1, 0x3c, 0x9a, 0x0e, 0xbe, 0x28, 0xc3, 0x0f, 0x69, 0xb0, 0x58, + 0x64, 0x2e, 0x77, 0x31, 0x92, 0xdd, 0x9a, 0x16, 0xef, 0x84, 0x06, 0xf9, 0x43, + 0x01, 0x2d, 0x52, 0x79, 0x71, 0x94, 0x8a, 0x73, 0x27, 0x22, 0xf6, 0xfd, 0x7f, + 0x12, 0xb2, 0x8a, 0x29, 0xfd, 0xd5, 0xc7, 0x0b, 0xbf, 0x7c, 0x98, 0x42, 0x9c, + 0xde, 0x57, 0x2e, 0x91, 0xbe, 0x15, 0x80, 0xa2, 0x94, 0x10, 0x72, 0xe9, 0x51, + 0x31, 0xb1, 0x67, 0x9d, 0xf0, 0x63, 0x76, 0x25, 0x04, 0x2c, 0x37, 0xd4, 0x8f, + 0xfb, 0x15, 0x2e, 0x5e, 0xbc, 0x18, 0x5c, 0x8a, 0x2b, 0x7d, 0x43, 0x05, 0xf1, + 0xc9, 0x5a, 0xf9, 0x37, 0xdf, 0x78, 0xdf, 0xd8, 0x75, 0x7f, 0xab, 0x43, 0x49, + 0x68, 0xb0, 0xb5, 0x7c, 0x66, 0x57, 0x44, 0x68, 0xf1, 0x60, 0xb4, 0x47, 0xac, + 0x82, 0x21, 0xe5, 0x06, 0x06, 0x00, 0xa9, 0xc2, 0xb4, 0xc2, 0xa2, 0x23, 0xc6, + 0xb3, 0xc5, 0xbb, 0xc4, 0xa6, 0x7c, 0xe2, 0xb1, 0xa9, 0xc2, 0xa3, 0x2b, 0x44, + 0x6d, 0xc7, 0xbc, 0xcd, 0xb4, 0xe1, 0x9b, 0x8f, 0xce, 0x88, 0xc4, 0xb1, 0xe2, + 0xb1, 0xb8, 0x32, 0xc8, 0x92, 0x52, 0xe1, 0x9b, 0x82, 0x50, 0xc7, 0xaa, 0xc7, + 0x8d, 0x55, 0xc3, 0xa0, 0xc2, 0xa5, 0xe1, 0x9b, 0xa4, 0xc6, 0x93, 0xc7, 0x9c, + 0xc7, 0xa3, 0xc5, 0xbc, 0xc5, 0x9b, 0xc5, 0xb1, 0xe1, 0x9a, 0xa4, 0x40, 0xc7, + 0x86, 0xc5, 0xab, 0xcd, 0xba, 0xc2, 0xa2, 0xc7, 0xae, 0xc4, 0xbb, 0x6a, 0x48, + 0xc5, 0x94, 0xc4, 0xb2, 0xc5, 0x91, 0xc6, 0xb3, 0xc7, 0x9b, 0xc6, 0x8e, 0x6a, + 0xc4, 0xae, 0xe1, 0x9a, 0xb0, 0x53, 0x32, 0xc5, 0x9d, 0xe1, 0x9a, 0xad, 0xc3, + 0xb7, 0x32, 0xc6, 0xb7, 0x4c, 0xe2, 0xb1, 0xbe, 0xc6, 0x89, 0xcd, 0xb4, 0x37, + 0xe1, 0x9a, 0xb3, 0xc5, 0xa9, 0xc8, 0x83, 0xc4, 0xa7, 0xc3, 0x9b, 0xc7, 0xa2, + 0xc8, 0xbe, 0xc8, 0x98, 0xc8, 0xb1, 0xc3, 0x95, 0xc6, 0xbd, 0xc4, 0x81, 0xc6, + 0x87, 0xc3, 0x99, 0xc6, 0x9d, 0xc5, 0x9f, 0xc5, 0x90, 0xc4, 0x90, 0xe2, 0xb1, + 0xae, 0xc3, 0x89, 0xc4, 0xb4, 0x5a, 0x5a, 0x03, 0x3c, 0x0f, 0xcc, 0x58, 0x56, + 0x7e, 0x78, 0x41, 0x22, 0xb2, 0x46, 0xbc, 0xc3, 0x4a, 0x8c, 0xb2, 0xfd, 0x4f, + 0xb8, 0x28, 0xfb, 0xee, 0x76, 0x1c, 0x8a, 0x01, 0x08, 0xbe, 0x85, 0x55, 0xaf, + 0xf3, 0x79, 0x95, 0xe0, 0x9e, 0xef, 0xd9, 0x28, 0x2d, 0x02, 0x7d, 0x2e, 0xa6, + 0x23, 0x40, 0xb3, 0xe6, 0xaf, 0xd0, 0x52, 0xf7, 0xbd, 0x5b, 0xd4, 0x90, 0x04, + 0x5a, 0xaa, 0xd0, 0xd9, 0x99, 0x3c, 0xc9, 0x2a, 0x86, 0xad, 0x4d, 0x89, 0xbd, + 0x4a, 0x19, 0xd2, 0x9d, 0x60, 0x3a, 0xd9, 0xae, 0x2b, 0x13, 0x18, 0x25, 0x23, + 0x68, 0xf6, 0x96, 0x49, 0x24, 0x48, 0xdd, 0x52, 0x66, 0x97, 0x47, 0x6d, 0xc0, + 0x61, 0x34, 0x6e, 0xbe, 0x3f, 0x67, 0x72, 0x17, 0xff, 0x9c, 0x60, 0xef, 0xce, + 0x94, 0x3a, 0xf2, 0x8d, 0xfd, 0x3f, 0x9e, 0x59, 0x69, 0x25, 0x98, 0xa6, 0x04, + 0x7c, 0x23, 0xc4, 0xc0, 0x14, 0x00, 0xf1, 0xab, 0x57, 0x30, 0xea, 0xc0, 0xae, + 0x8d, 0x58, 0x43, 0xd5, 0x05, 0x1c, 0x37, 0x62, 0x40, 0x17, 0x2a, 0xf2, 0x67, + 0x14, 0xa5, 0x91, 0xa8, 0x17, 0x97, 0x83, 0x98, 0x6a, 0xba, 0xc6, 0x7f, 0x10, + 0x37, 0x1d, 0x0f, 0xc4, 0xce, 0x17, 0x80, 0x2f, 0x91, 0xa0, 0xe7, 0xfb, 0xae, + 0x66, 0x5c, 0xc0, 0x57, 0x23, 0x97, 0xe8, 0xd0, 0x5c, 0x22, 0xe8, 0x80, 0x37, + 0x7d, 0xfc, 0x2f, 0x13, 0xe6, 0x7c, 0x61, 0xdb, 0xc5, 0x9c, 0x60, 0xf7, 0xbd, + 0x5b, 0xd4, 0x90, 0x04, 0x5a, 0xaa, 0xd0, 0xd9, 0x99, 0x3c, 0xc9, 0x2a, 0x86, + 0xad, 0x4d, 0x89, 0xbd, 0x4a, 0x19, 0xd2, 0x9d, 0x60, 0x3a, 0xd9, 0xae, 0x2b, + 0x13, 0x18, 0x25, 0x23, 0xfa, 0x92, 0x23, 0x9b, 0x87, 0x3d, 0xc6, 0xc3, 0x57, + 0xea, 0xa8, 0xaf, 0x4e, 0xe6, 0xd0, 0x05, 0x40, 0x65, 0x7f, 0xe3, 0x29, 0x14, + 0x10, 0x3b, 0x5d, 0x98, 0xf6, 0x8b, 0xd3, 0xe2, 0xb5, 0x35, 0x9f, 0x08, 0xcc, + 0xd8, 0x8d, 0x0c, 0x81, 0x1e, 0x4c, 0x31, 0xfb, 0xb4, 0x9f, 0x3a, 0x90, 0xbb, + 0xd0, 0x5d, 0xce, 0x62, 0xf3, 0x44, 0xe7, 0x07, 0x75, 0x93, 0x15, 0x9a, 0xe3, + 0x50, 0x50, 0xb0, 0xe8, 0x86, 0xc9, 0xe9, 0xcb, 0xa1, 0x89, 0x96, 0x71, 0x2e, + 0xaf, 0xb2, 0xb6, 0xf3, 0xc8, 0xd0, 0xbb, 0x9b, 0x26, 0xc9, 0x39, 0x28, 0x10, + 0x27, 0xf9, 0x22, 0xb8, 0x97, 0xb9, 0x01, 0x10, 0x7f, 0x24, 0xb0, 0xa5, 0xfd, + 0xb1, 0xe3, 0xe0, 0x7e, 0x5b, 0x0d, 0x8b, 0xd2, 0x77, 0x85, 0x6a, 0xa4, 0x25, + 0x01, 0xe5, 0xf7, 0xbd, 0x5b, 0xd4, 0x90, 0x04, 0x5a, 0xaa, 0xd0, 0xd9, 0x99, + 0x3c, 0xc9, 0x2a, 0x86, 0xad, 0x4d, 0x89, 0xbd, 0x4a, 0x19, 0xd2, 0x9d, 0x60, + 0x3a, 0xd9, 0xae, 0x2b, 0x13, 0x18, 0x25, 0x23, 0xa7, 0xe1, 0x9a, 0x46, 0xe9, + 0x70, 0xb5, 0xc5, 0x06, 0x70, 0x84, 0x30, 0x31, 0x7b, 0x1b, 0xb3, 0xb3, 0x5d, + 0xf6, 0x8a, 0xe3, 0x3a, 0x49, 0x26, 0xa0, 0x3e, 0x6b, 0xfe, 0xb5, 0x51, 0x04, + 0x16, 0xfc, 0xbb, 0x05, 0x24, 0xc9, 0xca, 0x50, 0x74, 0x15, 0x6c, 0xc5, 0xa5, + 0xd6, 0xfe, 0x1c, 0x99, 0x5e, 0xdc, 0x60, 0xa2, 0xf5, 0x50, 0x41, 0x1a, 0xa4, + 0x1e, 0x3d, 0xa3, 0xbd, 0xcf, 0x64, 0xbc, 0x00, 0x38, 0x20, 0xc8, 0xc5, 0xd3, + 0x35, 0x9f, 0x39, 0x6e, 0x8a, 0x3c, 0x63, 0xc4, 0xc0, 0x3c, 0xe7, 0x78, 0xf3, + 0xdc, 0x3f, 0x72, 0xbf, 0x2a, 0x05, 0xac, 0x30, 0x78, 0x89, 0xb8, 0x20, 0xf8, + 0x22, 0x3e, 0x9a, 0x89, 0xf1, 0x07, 0x93, 0xbd, 0x6b, 0x8b, 0x32, 0x02, 0xcb, + 0x47, 0x9e, 0xec, 0xc7, 0x37, 0xa0, 0xcd, 0x20, 0xdc, 0xce, 0x6c, 0xe8, 0x03, + 0x16, 0x47, 0x5a, 0xcb, 0x97, 0x79, 0x97, 0xe8, 0xba, 0xb3, 0x95, 0x9e, 0xbd, + 0x5a, 0x76, 0xbf, 0x32, 0x3f, 0x6a, 0xf1, 0xd2, 0x53, 0xa0, 0x1b, 0xca, 0xda, + 0xdf, 0x21, 0x95, 0x94, 0x30, 0x70, 0x63, 0xd7, 0x8f, 0x93, 0x02, 0x3a, 0x39, + ], + txid: [ + 0x00, 0xa0, 0xd6, 0x91, 0x69, 0xa7, 0x50, 0x7c, 0x40, 0x8d, 0xda, 0x6d, 0xd5, + 0xc3, 0x71, 0xe5, 0xa2, 0x78, 0x79, 0x2a, 0x7d, 0xff, 0x5e, 0x9a, 0xbf, 0x02, + 0xfe, 0x6c, 0x0d, 0xf7, 0x8c, 0xdd, + ], + auth_digest: [ + 0x3d, 0x97, 0x88, 0x97, 0x7b, 0x77, 0x4b, 0x9a, 0x6b, 0xa2, 0x1e, 0x44, 0x3c, + 0x51, 0x3f, 0x79, 0x06, 0x06, 0xf8, 0x56, 0xf9, 0x92, 0x77, 0x10, 0x69, 0xdb, + 0xeb, 0x26, 0x7e, 0x9f, 0xdc, 0xe7, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0x00, 0xa0, 0xd6, 0x91, 0x69, 0xa7, 0x50, 0x7c, 0x40, 0x8d, 0xda, 0x6d, 0xd5, + 0xc3, 0x71, 0xe5, 0xa2, 0x78, 0x79, 0x2a, 0x7d, 0xff, 0x5e, 0x9a, 0xbf, 0x02, + 0xfe, 0x6c, 0x0d, 0xf7, 0x8c, 0xdd, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x05, + 0x10, 0x57, 0x1b, 0x93, 0xaa, 0xa9, 0x14, 0x00, 0x03, 0x56, 0x78, 0x30, 0xde, + 0xda, 0x8f, 0x03, 0x00, 0x02, 0xac, 0x00, 0x4f, 0xcf, 0x2d, 0x3f, 0x56, 0x04, + 0x01, 0x00, 0x01, 0xac, 0xa7, 0xc6, 0x92, 0xee, 0x99, 0x14, 0x07, 0x00, 0x02, + 0x6a, 0x63, 0x00, 0x00, 0x01, 0xae, 0xd0, 0xe9, 0x5a, 0x37, 0xc4, 0xc7, 0x25, + 0x21, 0x48, 0x5f, 0xa5, 0x62, 0x0c, 0x64, 0xca, 0x6a, 0xc2, 0x40, 0x28, 0x7b, + 0x8c, 0x67, 0xd5, 0xff, 0x8a, 0x39, 0x5b, 0xea, 0xf5, 0x57, 0xab, 0x05, 0xd6, + 0x60, 0x4b, 0x36, 0xff, 0x88, 0x1a, 0x2d, 0x59, 0xc8, 0xec, 0x0a, 0x58, 0x42, + 0x18, 0x75, 0x15, 0x88, 0xc7, 0xef, 0xa5, 0x06, 0xc3, 0xe8, 0xd0, 0xc6, 0x01, + 0x92, 0xe8, 0x47, 0x2b, 0x0d, 0xda, 0x51, 0xab, 0xbf, 0x8f, 0x2e, 0x5a, 0xfc, + 0x1a, 0x10, 0x59, 0x3c, 0x37, 0x79, 0x16, 0xfe, 0x2b, 0x71, 0x4f, 0xd4, 0x40, + 0x56, 0x9c, 0x9a, 0xb9, 0x37, 0xe2, 0x99, 0xb6, 0xf7, 0x23, 0xc4, 0x3a, 0x0e, + 0xd4, 0x53, 0x1d, 0x7e, 0x4b, 0x00, 0xbc, 0xe3, 0x8c, 0xa7, 0x18, 0x40, 0x33, + 0xfd, 0x97, 0x93, 0xb3, 0xe0, 0x2f, 0x27, 0xf0, 0x40, 0x04, 0x65, 0x95, 0xac, + 0xd4, 0x7b, 0x31, 0xcc, 0x13, 0x28, 0x04, 0x81, 0x55, 0xd7, 0x60, 0x8d, 0xb8, + 0x33, 0x04, 0x98, 0xd2, 0x03, 0xb2, 0x8d, 0x7e, 0x2d, 0xf3, 0xe0, 0x23, 0xd1, + 0xc9, 0x07, 0x85, 0xe5, 0xf5, 0xbc, 0xde, 0x5e, 0x3b, 0xfe, 0x6c, 0xa1, 0x76, + 0xfa, 0xb7, 0xb0, 0xf3, 0xbf, 0xa0, 0xab, 0x61, 0xe3, 0x40, 0xc3, 0x4e, 0xb9, + 0xf1, 0x7c, 0x7e, 0xc2, 0xbe, 0x03, 0xb1, 0x80, 0xf0, 0xbb, 0x6f, 0x43, 0x4c, + 0x2a, 0x65, 0x42, 0xe0, 0x0e, 0x84, 0x37, 0x3f, 0x4f, 0x46, 0x49, 0xcd, 0xa3, + 0x2b, 0xf6, 0x86, 0x66, 0x61, 0x43, 0xf6, 0x22, 0xaa, 0x48, 0x04, 0x60, 0xb5, + 0xaf, 0xac, 0x51, 0x86, 0x07, 0xcd, 0x9a, 0xf8, 0xbc, 0xd6, 0xb5, 0x8c, 0x30, + 0x12, 0x73, 0x16, 0xb2, 0x5d, 0x5e, 0xa7, 0xbf, 0x6b, 0x0c, 0xab, 0x85, 0x42, + 0xff, 0x69, 0xd9, 0xb2, 0xf1, 0x80, 0xbe, 0x12, 0xed, 0x75, 0x34, 0x4a, 0x39, + 0x5a, 0xa1, 0x0f, 0x85, 0x2f, 0x08, 0x3a, 0xd6, 0x4e, 0xf4, 0x0e, 0x9c, 0x03, + 0x09, 0xe9, 0xbb, 0xa5, 0x4b, 0x8c, 0xb3, 0x3c, 0x95, 0x49, 0x8a, 0x69, 0x53, + 0x8d, 0x3a, 0xe5, 0xb2, 0x5e, 0x24, 0x70, 0x98, 0x30, 0x6f, 0xa8, 0xc7, 0x4a, + 0x8e, 0xe5, 0xbc, 0xa9, 0x41, 0x53, 0x1d, 0x61, 0xaa, 0xc2, 0x7a, 0xab, 0x3d, + 0xc5, 0x61, 0x7d, 0x56, 0x06, 0xc9, 0x57, 0x7a, 0x2a, 0x83, 0x46, 0xe8, 0xd8, + 0x5b, 0x32, 0xb8, 0x50, 0x57, 0x75, 0x10, 0x8d, 0xc8, 0x5e, 0x2a, 0xde, 0x2e, + 0xac, 0x1e, 0x63, 0x6e, 0x1a, 0xf4, 0x05, 0x4c, 0x8b, 0x6f, 0x57, 0x63, 0x2d, + 0xf2, 0x69, 0xc3, 0x72, 0x3b, 0x32, 0x08, 0x72, 0xe4, 0xc5, 0x7b, 0x21, 0x83, + 0x58, 0xdc, 0x7e, 0x99, 0x05, 0xbb, 0x04, 0xed, 0xf9, 0x2e, 0xdf, 0x0d, 0xf6, + 0x35, 0xf3, 0xbf, 0x36, 0x1e, 0x57, 0xa1, 0x32, 0x96, 0xe1, 0x44, 0x7a, 0xf5, + 0x08, 0x78, 0x72, 0xd6, 0x36, 0xe2, 0x75, 0x18, 0xa9, 0x87, 0x6e, 0x15, 0xeb, + 0x01, 0xf5, 0xe8, 0xde, 0xd8, 0x18, 0x92, 0x51, 0x1c, 0xc2, 0x85, 0x1b, 0x00, + 0xb8, 0x32, 0x71, 0x2a, 0x6d, 0x3b, 0xa5, 0x66, 0x65, 0x17, 0xbc, 0xd3, 0x56, + 0x76, 0x21, 0xa7, 0xcf, 0x84, 0x45, 0x58, 0x96, 0x53, 0x26, 0x20, 0x20, 0xc3, + 0x3b, 0xf7, 0x80, 0x31, 0xb8, 0xee, 0x07, 0x07, 0xde, 0x07, 0x20, 0x68, 0xc1, + 0x70, 0x57, 0x03, 0x27, 0xe6, 0xd9, 0xf5, 0xc6, 0xdd, 0xc3, 0x35, 0x40, 0x2e, + 0xfc, 0x54, 0x88, 0x62, 0xf5, 0xa0, 0x70, 0x94, 0xfd, 0x42, 0x8a, 0x7b, 0xbc, + 0x15, 0xd7, 0xb3, 0x8d, 0x05, 0x36, 0x2c, 0x9c, 0xa9, 0x85, 0xf5, 0x8a, 0x76, + 0x64, 0x7d, 0x2b, 0xe4, 0xc2, 0xcd, 0x6b, 0x3d, 0x17, 0xd6, 0x87, 0x09, 0x71, + 0xd7, 0xa0, 0x98, 0xba, 0xf7, 0x2c, 0x6f, 0x6f, 0x12, 0x14, 0xcf, 0x1f, 0xaa, + 0xe4, 0x88, 0xbd, 0x7d, 0xe2, 0x59, 0xd3, 0x41, 0x5c, 0x2f, 0x0d, 0xde, 0xc7, + 0x45, 0x70, 0x04, 0xf3, 0x57, 0x08, 0xd1, 0xec, 0xcc, 0xcc, 0x0d, 0xf6, 0x5a, + 0x04, 0x94, 0x3a, 0xd5, 0xcb, 0xc1, 0x3f, 0x29, 0x5f, 0x00, 0x0f, 0xe0, 0x56, + 0xc4, 0x0b, 0x2d, 0x88, 0xf2, 0x7d, 0xc3, 0x4c, 0xfe, 0xb8, 0x03, 0xbe, 0x34, + 0x83, 0xa9, 0xeb, 0xf9, 0xb5, 0xa9, 0x02, 0x60, 0x57, 0x72, 0x5d, 0x63, 0xea, + 0xd2, 0xc0, 0xc0, 0xff, 0x1f, 0xe2, 0x6a, 0xc1, 0xe7, 0xbd, 0xfc, 0xd6, 0xfa, + 0xd8, 0x75, 0x84, 0x2d, 0x19, 0x4f, 0x33, 0x17, 0x50, 0x46, 0x2c, 0x06, 0xb8, + 0xd7, 0x98, 0x2d, 0x67, 0x99, 0x5e, 0xd5, 0xd3, 0xae, 0x96, 0xa0, 0x5a, 0xe0, + 0x06, 0x7f, 0x4e, 0xb1, 0xc7, 0xc9, 0x32, 0x31, 0xbd, 0x39, 0x77, 0x3c, 0xbe, + 0x0a, 0x9d, 0x66, 0xb0, 0xc9, 0xaa, 0x8c, 0xff, 0x6a, 0x37, 0x6e, 0x1f, 0x37, + 0x2e, 0xac, 0x6a, 0xc4, 0xe4, 0x6c, 0xc0, 0x94, 0x22, 0x45, 0xd4, 0xc2, 0xdc, + 0xf0, 0x2d, 0x76, 0x40, 0xff, 0xcc, 0x5a, 0x6a, 0xc3, 0xa8, 0x7f, 0x5c, 0x41, + 0x15, 0x51, 0xbc, 0xc2, 0xf2, 0x6c, 0xb9, 0x49, 0x61, 0xd5, 0x3f, 0x95, 0xdd, + 0xb1, 0x9a, 0xe9, 0x30, 0xc8, 0xd7, 0x0f, 0x03, 0x1b, 0x29, 0xa5, 0xdf, 0x99, + 0xff, 0x36, 0x69, 0x5e, 0x80, 0x2c, 0xbc, 0xb6, 0xb5, 0x8c, 0x1b, 0xa7, 0xed, + 0x5e, 0xac, 0xfa, 0x76, 0x41, 0x4a, 0x41, 0xad, 0x4a, 0x44, 0xf7, 0x1f, 0x1b, + 0x58, 0x0d, 0x34, 0xc3, 0xa9, 0x52, 0x92, 0x0b, 0x25, 0x4a, 0x14, 0x5f, 0xea, + 0x51, 0x7f, 0x5b, 0x42, 0xb2, 0xf6, 0x5e, 0xcd, 0x0f, 0x82, 0x59, 0x54, 0x78, + 0xd8, 0x0a, 0xe5, 0xc8, 0xce, 0xea, 0x12, 0xa1, 0x61, 0xcc, 0xbb, 0x5e, 0xac, + 0x09, 0x99, 0x0f, 0xc6, 0x19, 0xa4, 0x60, 0x80, 0x43, 0x6d, 0xbd, 0x08, 0xd7, + 0x47, 0x84, 0xaf, 0x00, 0x2d, 0x58, 0xe0, 0x6f, 0xaf, 0x7f, 0x3c, 0xea, 0xe7, + 0xd3, 0x41, 0x9b, 0x1f, 0xca, 0x26, 0x5a, 0x55, 0x59, 0xcf, 0x9e, 0x2d, 0x3b, + 0x60, 0x97, 0x8d, 0x81, 0xa6, 0x78, 0xb9, 0xed, 0x8e, 0x44, 0x86, 0xb4, 0xd1, + 0x46, 0x09, 0xd6, 0xc1, 0x27, 0xc0, 0xc2, 0xfb, 0xff, 0xe3, 0x0a, 0x60, 0xf7, + 0xbf, 0xf1, 0xd9, 0xfb, 0x83, 0x00, 0xed, 0x00, 0x92, 0x53, 0xba, 0x9b, 0x99, + 0x6f, 0xa0, 0x52, 0x41, 0xb1, 0x0f, 0x5a, 0xc9, 0xa8, 0x40, 0x8e, 0x92, 0x07, + 0x42, 0x3a, 0x3b, 0x82, 0xaa, 0xd6, 0x02, 0x00, 0x89, 0x9c, 0x0a, 0xd4, 0x66, + 0xde, 0x17, 0xd7, 0xb5, 0x78, 0x05, 0xf6, 0x4d, 0x1b, 0xc9, 0x10, 0x93, 0xe1, + 0xa6, 0x3b, 0x93, 0x85, 0x36, 0xb4, 0x92, 0x44, 0xe9, 0x7d, 0x88, 0x01, 0x73, + 0x36, 0x60, 0xf2, 0xdd, 0xb7, 0x4d, 0x06, 0x8e, 0xcb, 0x46, 0xcf, 0x28, 0x9b, + 0x7d, 0x89, 0x13, 0x07, 0xbb, 0xa3, 0x70, 0x54, 0xcf, 0x91, 0xb3, 0x1f, 0xc8, + 0x2f, 0x74, 0xd5, 0xfc, 0xc0, 0x00, 0x94, 0x2e, 0xde, 0x91, 0x18, 0x25, 0xf5, + 0x3f, 0xe6, 0x09, 0x68, 0x6f, 0x46, 0x32, 0x23, 0xb1, 0xe9, 0xbc, 0x03, 0xbd, + 0xe8, 0x95, 0xd1, 0x23, 0x8f, 0xad, 0x04, 0xa3, 0xbf, 0xce, 0x68, 0xa0, 0x75, + 0xe8, 0xa3, 0x7c, 0x0e, 0x87, 0xbf, 0x46, 0xdd, 0x01, 0x55, 0x45, 0xf9, 0xb4, + 0xfb, 0x0e, 0xec, 0x64, 0x5f, 0xfc, 0xbb, 0xe0, 0xca, 0x5f, 0x8c, 0x56, 0x1b, + 0x25, 0x7d, 0x52, 0xd6, 0x02, 0xd8, 0xc9, 0x1a, 0xc6, 0x40, 0x16, 0xaa, 0x14, + 0x57, 0x2a, 0x2b, 0x02, 0x97, 0xf2, 0x0c, 0x14, 0xdd, 0x2d, 0xc7, 0x3b, 0x51, + 0x89, 0xf7, 0xae, 0x2a, 0x41, 0xef, 0x3d, 0x22, 0x5e, 0x5a, 0xd6, 0xa1, 0x18, + 0x23, 0x4a, 0xb3, 0x6d, 0xea, 0xa8, 0xb6, 0xb9, 0x0c, 0x90, 0x15, 0xa2, 0x53, + 0xb9, 0xe3, 0xa5, 0x8f, 0xa9, 0x4b, 0x6c, 0x6e, 0x01, 0x2d, 0x79, 0xe3, 0xf5, + 0x36, 0x89, 0xc2, 0xb1, 0xa1, 0x0e, 0x00, 0x0e, 0x8d, 0x8d, 0xa5, 0x22, 0x87, + 0x48, 0xc5, 0xc0, 0x0b, 0xfe, 0x68, 0x13, 0x54, 0x69, 0x15, 0x3c, 0xb9, 0xce, + 0x6e, 0xea, 0x28, 0x6f, 0x70, 0x2a, 0x91, 0xda, 0xf6, 0x02, 0xbe, 0x2a, 0x2c, + 0x5e, 0x37, 0x45, 0xf0, 0x09, 0xc5, 0xdc, 0xe2, 0x0b, 0x69, 0xd5, 0xd7, 0xc4, + 0x3c, 0xeb, 0x73, 0x6b, 0x68, 0x31, 0xe8, 0xc1, 0x10, 0xf1, 0x6c, 0xfd, 0xb3, + 0xa4, 0x67, 0xe9, 0x41, 0x4c, 0x00, 0x00, + ], + txid: [ + 0x9f, 0x65, 0x3f, 0x24, 0x82, 0x8b, 0xc3, 0xd7, 0xe7, 0xb5, 0xb5, 0x97, 0x7f, + 0xa3, 0xd5, 0xe4, 0xc9, 0x42, 0x8f, 0x10, 0x71, 0xd5, 0xe7, 0xdc, 0x9c, 0x16, + 0x83, 0x1b, 0xd5, 0xbc, 0x91, 0xab, + ], + auth_digest: [ + 0x59, 0xe0, 0x24, 0x6b, 0x13, 0x86, 0xb5, 0x49, 0xcf, 0x1e, 0x11, 0x99, 0x96, + 0x90, 0x3e, 0xdc, 0x22, 0x7b, 0x26, 0x85, 0xd9, 0xe8, 0xc0, 0x15, 0x0e, 0x96, + 0x55, 0xb8, 0xae, 0xad, 0x22, 0xd5, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0x9f, 0x65, 0x3f, 0x24, 0x82, 0x8b, 0xc3, 0xd7, 0xe7, 0xb5, 0xb5, 0x97, 0x7f, + 0xa3, 0xd5, 0xe4, 0xc9, 0x42, 0x8f, 0x10, 0x71, 0xd5, 0xe7, 0xdc, 0x9c, 0x16, + 0x83, 0x1b, 0xd5, 0xbc, 0x91, 0xab, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x47, + 0x1d, 0x13, 0xc1, 0xab, 0x39, 0xd9, 0x19, 0x03, 0xe8, 0x43, 0xab, 0x1d, 0x28, + 0xff, 0xa8, 0xf6, 0x9d, 0xc7, 0xe1, 0x5c, 0xc3, 0x8b, 0x12, 0xe8, 0xfc, 0xd7, + 0x92, 0x55, 0xb7, 0x21, 0x60, 0x56, 0xd9, 0xed, 0xb7, 0x48, 0x2f, 0xb9, 0x8a, + 0xa0, 0x33, 0xb6, 0x5e, 0x51, 0x07, 0x00, 0x53, 0x52, 0x51, 0x00, 0x63, 0xac, + 0x09, 0xb7, 0x34, 0xf4, 0x52, 0xaa, 0xf0, 0xd6, 0xb1, 0x8f, 0x50, 0x25, 0x86, + 0x83, 0xd3, 0xf9, 0xa7, 0x6d, 0x39, 0x9f, 0xd0, 0x47, 0xee, 0xe2, 0x88, 0xbb, + 0x45, 0x85, 0x85, 0x1d, 0xc9, 0x3e, 0xcc, 0xc6, 0x23, 0x22, 0x92, 0x4c, 0xd1, + 0x3b, 0x03, 0xac, 0x65, 0x65, 0x6e, 0xd8, 0xd9, 0x97, 0x2d, 0x77, 0x26, 0x29, + 0xea, 0x64, 0x74, 0x2e, 0x54, 0x73, 0x39, 0x81, 0xb0, 0x06, 0xc0, 0x62, 0x46, + 0x8e, 0x4b, 0xd8, 0xf7, 0xdd, 0x9a, 0xf6, 0x98, 0xf5, 0x2a, 0xe8, 0x14, 0x63, + 0x4e, 0x81, 0xd7, 0xf3, 0xe0, 0xc4, 0x02, 0x51, 0xac, 0xac, 0xa9, 0xae, 0x48, + 0x00, 0x00, 0x02, 0xa8, 0xbb, 0x16, 0xde, 0x29, 0x4d, 0x31, 0xa4, 0x36, 0x00, + 0x0f, 0x41, 0x07, 0xca, 0x39, 0x6d, 0xfc, 0x5a, 0x8d, 0x41, 0xdf, 0xbd, 0x62, + 0x55, 0xcf, 0xbe, 0x3a, 0x4f, 0x3e, 0x62, 0xb9, 0x4f, 0xb2, 0x01, 0x52, 0x13, + 0x3b, 0xa3, 0x83, 0x1a, 0xf4, 0x20, 0x76, 0xd9, 0x9b, 0xfa, 0x78, 0xab, 0x6b, + 0x39, 0x31, 0x1a, 0x7b, 0x2d, 0x2f, 0xe2, 0xbf, 0x24, 0x26, 0x7b, 0xeb, 0xcd, + 0x6f, 0x4c, 0xd6, 0xf1, 0x3a, 0xd0, 0x53, 0x36, 0x1d, 0x43, 0x30, 0x6c, 0x31, + 0x44, 0x61, 0x4a, 0xd8, 0x1d, 0xed, 0x2b, 0xfe, 0x88, 0x88, 0x4d, 0x04, 0xd8, + 0xbe, 0xc4, 0x80, 0xcf, 0x08, 0x0d, 0xd3, 0x27, 0x4d, 0x42, 0xb4, 0xbc, 0x2b, + 0x4a, 0x03, 0x8a, 0xe6, 0xe4, 0x6b, 0x24, 0xcf, 0xc8, 0x41, 0x53, 0xd3, 0x1e, + 0xaf, 0x89, 0x50, 0x63, 0xa5, 0xca, 0x95, 0x9b, 0xe6, 0x3f, 0x37, 0xf2, 0xba, + 0x0d, 0x43, 0x23, 0x66, 0x73, 0x6d, 0x86, 0x32, 0xfc, 0xe0, 0x72, 0xb6, 0xae, + 0x5b, 0x6f, 0x3f, 0xd5, 0x9d, 0x3f, 0xaf, 0xf6, 0x38, 0x27, 0x5a, 0x99, 0x2f, + 0xef, 0xc8, 0x7e, 0x60, 0xd4, 0x4c, 0x2c, 0xad, 0xc2, 0xb5, 0xc4, 0x94, 0xe3, + 0xe7, 0x2e, 0xb4, 0x59, 0x7c, 0x96, 0xb4, 0x01, 0x67, 0x79, 0x9a, 0x90, 0x01, + 0xa2, 0xed, 0x36, 0x76, 0xa8, 0xb4, 0x03, 0xae, 0x25, 0xff, 0xd7, 0x72, 0xf7, + 0x08, 0x1e, 0x9a, 0x32, 0xbc, 0xc1, 0xc5, 0xe2, 0xed, 0xd4, 0xe2, 0xa6, 0x57, + 0x6b, 0x78, 0x3c, 0xce, 0x3a, 0xae, 0x11, 0xfa, 0x43, 0x22, 0x62, 0x54, 0x88, + 0x56, 0x18, 0x3e, 0xe6, 0x82, 0xd5, 0xdc, 0x31, 0xbe, 0xb3, 0x8f, 0x06, 0x1c, + 0xbd, 0xec, 0xa7, 0x02, 0x1a, 0x44, 0x4e, 0x2d, 0xd4, 0x17, 0xdf, 0x26, 0xdc, + 0xd2, 0x20, 0xf2, 0xb7, 0x31, 0x77, 0x2b, 0x43, 0x9e, 0x96, 0xd6, 0x14, 0xe1, + 0xfa, 0xcb, 0x48, 0x6c, 0x7a, 0x7d, 0x51, 0x71, 0xb1, 0xde, 0x35, 0x9f, 0x6a, + 0xd3, 0xa9, 0x6f, 0x64, 0x9c, 0x96, 0x91, 0x02, 0xa1, 0x96, 0x4f, 0xb4, 0xb4, + 0xa1, 0xa4, 0x27, 0x9c, 0x68, 0xe6, 0xc3, 0x72, 0xe4, 0x21, 0x87, 0xd7, 0x54, + 0xe8, 0x04, 0xa6, 0x16, 0x53, 0x09, 0x20, 0x69, 0xfb, 0x9b, 0x6d, 0x25, 0x26, + 0x68, 0x90, 0x80, 0x8b, 0x01, 0x5d, 0xf2, 0x8c, 0x80, 0x10, 0x65, 0xda, 0x6f, + 0xeb, 0xdc, 0x1a, 0x56, 0xbf, 0xd0, 0x02, 0x62, 0x5a, 0xcf, 0xaa, 0x53, 0x73, + 0xfd, 0xe1, 0x49, 0xc1, 0xcf, 0xc3, 0x64, 0x9b, 0x48, 0x69, 0x69, 0x6d, 0x44, + 0xec, 0xb1, 0x24, 0x79, 0xc5, 0xeb, 0xef, 0x99, 0x5f, 0x10, 0x02, 0x9f, 0x8b, + 0x53, 0x0e, 0xeb, 0x3f, 0xdc, 0x2e, 0x50, 0xe8, 0x75, 0x7f, 0xc0, 0xbb, 0x9e, + 0x26, 0x30, 0x23, 0xdb, 0x82, 0xf8, 0x78, 0xd9, 0xac, 0x7f, 0xfb, 0x0b, 0xd4, + 0x39, 0x1d, 0xf1, 0xd8, 0x79, 0x89, 0x9a, 0x3e, 0xf5, 0x7b, 0xfd, 0x0d, 0x1f, + 0x77, 0x55, 0x64, 0x8e, 0xdd, 0x85, 0xbb, 0x05, 0x2a, 0x6e, 0xdf, 0x71, 0xcd, + 0x26, 0x28, 0xc9, 0x87, 0x42, 0x9f, 0x36, 0xdc, 0x50, 0x5c, 0xcc, 0x43, 0xf3, + 0x0e, 0x7a, 0x86, 0x9c, 0x9e, 0x25, 0x5e, 0x2a, 0xf9, 0xfc, 0xf3, 0x0c, 0x12, + 0x17, 0x96, 0xd1, 0x90, 0x00, 0x09, 0x60, 0xcb, 0x6f, 0xe2, 0xf1, 0xbf, 0x24, + 0x61, 0x18, 0xb4, 0x98, 0xf3, 0x24, 0x7f, 0x9d, 0x48, 0x4c, 0x73, 0xcf, 0x09, + 0x39, 0x30, 0x39, 0xe4, 0x53, 0x26, 0xb8, 0xff, 0xff, 0xb3, 0xe7, 0xe6, 0x15, + 0x9c, 0x46, 0x69, 0x9f, 0x10, 0x07, 0x92, 0xd4, 0x67, 0x29, 0x50, 0x34, 0x8a, + 0x90, 0x55, 0x2e, 0x45, 0x94, 0x3b, 0xee, 0xac, 0xf0, 0x3f, 0x32, 0x16, 0xf9, + 0x4e, 0x27, 0x4d, 0x63, 0xd6, 0x37, 0xd9, 0xf1, 0x90, 0xe8, 0xa2, 0x66, 0xcd, + 0xee, 0xf1, 0x53, 0x53, 0x0b, 0xee, 0x5c, 0xb8, 0x35, 0x52, 0x60, 0x50, 0x5c, + 0x2c, 0x2e, 0x5d, 0x99, 0x0f, 0xff, 0xdc, 0x34, 0xec, 0x0f, 0xf7, 0xf1, 0xaf, + 0x81, 0xb2, 0x4c, 0xed, 0x0e, 0xfa, 0x62, 0x13, 0xda, 0x6c, 0x7c, 0x60, 0xc4, + 0x87, 0xf5, 0xf7, 0xb0, 0x3f, 0x81, 0x60, 0xa0, 0x57, 0xf4, 0x6d, 0x05, 0xbf, + 0x82, 0x18, 0xb3, 0xad, 0xd9, 0xc0, 0x68, 0x93, 0xbd, 0x02, 0xdb, 0x9b, 0x61, + 0x19, 0x1d, 0xfb, 0x13, 0x3b, 0xfa, 0xbe, 0x48, 0x58, 0xe4, 0x7a, 0x4c, 0xc3, + 0x2e, 0x41, 0x6e, 0xc0, 0x8b, 0x8a, 0xc7, 0x91, 0x5a, 0x43, 0x73, 0x3f, 0x44, + 0x06, 0xe9, 0xd9, 0x67, 0xc5, 0x60, 0xf3, 0x44, 0xd7, 0xe9, 0x04, 0xa2, 0x80, + 0x45, 0xd9, 0x9f, 0x3a, 0xf8, 0xc8, 0x2e, 0x97, 0xe1, 0xb9, 0xc1, 0xb2, 0x05, + 0xe5, 0x85, 0xfb, 0xeb, 0xb4, 0x8f, 0xaf, 0x58, 0xf1, 0xb6, 0x5d, 0xca, 0x24, + 0x97, 0xe0, 0x9a, 0x70, 0xaa, 0xd4, 0x86, 0x5f, 0x85, 0x71, 0x5a, 0x28, 0x0e, + 0x18, 0x6f, 0x3f, 0xc1, 0x74, 0x0d, 0x81, 0x84, 0xd3, 0x3e, 0x83, 0x22, 0x16, + 0x95, 0x21, 0xcd, 0xc1, 0x32, 0x21, 0x29, 0x39, 0xc8, 0x4a, 0x10, 0x89, 0x64, + 0xe2, 0xde, 0x74, 0xb6, 0xea, 0x55, 0xb4, 0xcb, 0x8f, 0x6f, 0x9b, 0xee, 0x98, + 0xb1, 0x0d, 0x41, 0x51, 0x09, 0x45, 0x5f, 0x48, 0xb7, 0x76, 0x08, 0x2d, 0xc3, + 0x0b, 0x4b, 0xc7, 0x34, 0x77, 0x07, 0x55, 0x11, 0x70, 0x03, 0x08, 0x15, 0x8c, + 0xe2, 0xf2, 0xf9, 0xbf, 0x0f, 0x69, 0x1b, 0x2c, 0xe5, 0x3e, 0x61, 0x14, 0x2c, + 0xb7, 0x40, 0xc1, 0x5b, 0x7b, 0x62, 0x3c, 0xf4, 0x8b, 0x3f, 0x7b, 0xfe, 0xfa, + 0x31, 0xbc, 0xdc, 0x66, 0x5c, 0xe7, 0x59, 0x2d, 0x76, 0x40, 0xb0, 0xee, 0x13, + 0xee, 0x13, 0x8a, 0x2a, 0x51, 0xc5, 0x3b, 0x75, 0xfa, 0x04, 0x55, 0x7b, 0x9c, + 0xe7, 0xad, 0x7f, 0x2f, 0x3d, 0xa0, 0xb1, 0x38, 0xba, 0x7f, 0xec, 0xa8, 0x6b, + 0xf2, 0xc7, 0x6f, 0x39, 0x93, 0x15, 0x4f, 0xc7, 0x3e, 0x6f, 0xbb, 0xa2, 0x21, + 0x0c, 0x27, 0x43, 0xf5, 0x30, 0xa4, 0x27, 0x84, 0x9a, 0x30, 0x1e, 0x00, 0xe0, + 0x11, 0x29, 0xf0, 0x3a, 0x90, 0x93, 0x91, 0xd8, 0x32, 0xbd, 0x39, 0x28, 0x80, + 0x18, 0xe5, 0x53, 0xde, 0xcd, 0xe5, 0x28, 0x78, 0xe5, 0xd5, 0x23, 0xfd, 0xcc, + 0x50, 0x87, 0xb2, 0xf8, 0xa0, 0xff, 0xc8, 0x8c, 0x0e, 0xd0, 0x44, 0xe5, 0x49, + 0xc4, 0x53, 0x48, 0x19, 0xac, 0xd8, 0xbb, 0x0a, 0x02, 0xa5, 0xfa, 0x7a, 0x1c, + 0x1d, 0x38, 0x06, 0xfb, 0xc3, 0x40, 0x7f, 0xd7, 0xda, 0x93, 0xfd, 0x0d, 0xe6, + 0x40, 0x0d, 0x3a, 0xb8, 0x97, 0x74, 0x85, 0xcd, 0xdf, 0xbe, 0xd5, 0x93, 0x2f, + 0x50, 0x7b, 0x79, 0x94, 0x7a, 0xdb, 0x2f, 0xad, 0x37, 0x61, 0x5a, 0xa7, 0x17, + 0xdb, 0x5f, 0x29, 0x80, 0x99, 0xf2, 0x0f, 0x26, 0x3b, 0x35, 0x9a, 0x11, 0x51, + 0xa6, 0xb7, 0x5c, 0x01, 0x36, 0x5e, 0xb1, 0x54, 0xae, 0x42, 0x14, 0x0d, 0x6e, + 0x10, 0x34, 0x2f, 0x14, 0xf3, 0x4d, 0xc3, 0x3e, 0x07, 0xff, 0x0e, 0x4d, 0x1a, + 0x6b, 0xe3, 0x75, 0xb3, 0x2f, 0x84, 0xb9, 0x2e, 0x5d, 0x81, 0xeb, 0xb6, 0x39, + 0xc4, 0xf2, 0x7e, 0x71, 0x5a, 0xa4, 0x2c, 0xc7, 0x57, 0x07, 0xd4, 0xeb, 0xd1, + 0xbb, 0xfb, 0xe8, 0xf9, 0x0f, 0xc7, 0xc9, 0x53, 0xe7, 0xa9, 0x71, 0x5e, 0x65, + 0xaf, 0x82, 0x67, 0x37, 0x3d, 0x34, 0x51, 0x67, 0x4f, 0xf0, 0x84, 0xef, 0xd9, + 0x2c, 0xcf, 0x3b, 0xcc, 0x7a, 0xca, 0x14, 0x67, 0xb6, 0x32, 0x7e, 0x4f, 0x95, + 0x22, 0xb2, 0xcc, 0x57, 0x9a, 0x7a, 0x8f, 0xff, 0x7c, 0xa7, 0xcf, 0x14, 0x5d, + 0xfc, 0x13, 0xea, 0xfc, 0x34, 0x15, 0x3b, 0x2c, 0x3e, 0x8a, 0xfb, 0xe5, 0x34, + 0x44, 0xd0, 0xc7, 0x3b, 0x3b, 0xd5, 0xbc, 0x87, 0x0b, 0x01, 0xcd, 0x45, 0x79, + 0x11, 0xe3, 0x56, 0x31, 0x3f, 0xd1, 0xda, 0xfb, 0x4c, 0x81, 0x51, 0x63, 0x4a, + 0x01, 0xaf, 0xf7, 0xcf, 0x11, 0x6d, 0x43, 0x3c, 0x3d, 0x2b, 0x3a, 0xdd, 0xa9, + 0xce, 0xbe, 0x18, 0xf7, 0xd1, 0x72, 0x44, 0x3e, 0x5e, 0x7b, 0x5a, 0xc9, 0xab, + 0xe8, 0xdb, 0x22, 0x56, 0xd7, 0xeb, 0xe2, 0xff, 0x28, 0x02, 0x09, 0x39, 0x50, + 0x38, 0x70, 0x59, 0x7b, 0x9a, 0x95, 0x58, 0x92, 0xc7, 0x38, 0x96, 0x50, 0xa2, + 0xd4, 0x2e, 0xc9, 0x2b, 0xe7, 0x23, 0xfe, 0xdf, 0x2f, 0x2e, 0xde, 0x5a, 0x47, + 0x2a, 0xa1, 0xe7, 0x4f, 0x33, 0xad, 0x41, 0x90, 0x15, 0x44, 0xed, 0xbb, 0xe3, + 0xac, 0x46, 0x4c, 0xf4, 0x39, 0x19, 0x60, 0x15, 0xf4, 0xf2, 0x2a, 0xc2, 0xb8, + 0xfc, 0x01, 0x49, 0x6b, 0xea, 0xb4, 0xd4, 0x59, 0x07, 0xf4, 0x79, 0x81, 0x2a, + 0x25, 0x94, 0x31, 0xa2, 0xcb, 0xc9, 0x3d, 0x4f, 0x3b, 0x84, 0xe4, 0xdd, 0x36, + 0x60, 0x20, 0x27, 0x3a, 0x67, 0x52, 0xe5, 0x01, 0xaf, 0x6f, 0xf1, 0xb7, 0x8d, + 0xdc, 0x81, 0x7e, 0x6e, 0xa3, 0x51, 0xd6, 0x00, 0x6b, 0xec, 0xf8, 0xd2, 0xff, + 0xb0, 0x39, 0x90, 0xf6, 0x77, 0x74, 0xa8, 0x1e, 0x05, 0xb7, 0xf4, 0xbb, 0xad, + 0x85, 0x77, 0xfa, 0x27, 0xc9, 0xde, 0x64, 0xe1, 0xb1, 0x1d, 0xcf, 0x38, 0x4f, + 0x59, 0x56, 0x44, 0x37, 0x48, 0x75, 0x5a, 0x9f, 0xc6, 0xf2, 0xa0, 0x0b, 0x10, + 0xc3, 0x65, 0x7e, 0xba, 0xc0, 0x3b, 0xfc, 0x0b, 0x58, 0x7b, 0xef, 0x2f, 0x45, + 0xec, 0x8a, 0xcd, 0xaa, 0x51, 0xc1, 0x43, 0xb0, 0xcb, 0x25, 0xb9, 0x14, 0x2c, + 0x61, 0xbd, 0x79, 0x0a, 0x80, 0xd7, 0xc2, 0x3f, 0x90, 0xcc, 0x03, 0x49, 0x5b, + 0x51, 0xe4, 0xd2, 0x84, 0x3e, 0x55, 0x7f, 0x9e, 0x25, 0x45, 0x10, 0x8c, 0x6c, + 0x6f, 0xae, 0x35, 0x9f, 0x64, 0x5c, 0x27, 0x68, 0x91, 0xc0, 0xdc, 0xab, 0x3f, + 0xaf, 0x18, 0x77, 0x00, 0xc0, 0x82, 0xdc, 0x47, 0x77, 0x40, 0xfb, 0x3f, 0x2c, + 0xd7, 0xbb, 0x59, 0xfb, 0x35, 0x85, 0x54, 0xe9, 0x4c, 0x7e, 0x67, 0x8c, 0xe0, + 0x1a, 0xeb, 0xf9, 0x4e, 0x51, 0x5e, 0x49, 0x72, 0x29, 0x67, 0x99, 0x5a, 0xea, + 0x85, 0x8d, 0x64, 0xe7, 0x78, 0x9f, 0xf3, 0x06, 0x36, 0x95, 0x77, 0x22, 0x81, + 0x80, 0x32, 0x6a, 0x5b, 0x0a, 0xf4, 0x75, 0xe2, 0x7a, 0x54, 0xb2, 0x07, 0xb4, + 0x1f, 0x92, 0xe3, 0x76, 0x17, 0x0e, 0x3f, 0xb0, 0x05, 0x02, 0x82, 0x61, 0xc9, + 0x9c, 0x2d, 0xbd, 0x0e, 0xed, 0xee, 0x87, 0x1c, 0x1c, 0x0f, 0x48, 0xb8, 0xe9, + 0xb8, 0xe4, 0xbe, 0x77, 0xd1, 0xb7, 0x37, 0xfe, 0x21, 0xf0, 0xfa, 0x5a, 0x18, + 0xeb, 0xb5, 0x27, 0x55, 0xb5, 0xa6, 0xcf, 0x61, 0x30, 0xfb, 0x56, 0x94, 0x4c, + 0xfa, 0xb8, 0x75, 0x27, 0xc2, 0x50, 0xd1, 0x13, 0xb2, 0x9b, 0xca, 0xc9, 0xaa, + 0xa1, 0x0c, 0x2e, 0x7d, 0xe4, 0x15, 0xed, 0xb0, 0x80, 0x6c, 0x6d, 0xa0, 0x30, + 0x20, 0xa1, 0x34, 0xca, 0x7e, 0xcd, 0xc8, 0xda, 0x1b, 0xd5, 0x7a, 0x37, 0xf5, + 0x5a, 0x46, 0x94, 0x0b, 0x45, 0xb2, 0x41, 0xb1, 0xc1, 0x6e, 0xe1, 0x00, 0x92, + 0x7d, 0x1b, 0xd8, 0x60, 0xd4, 0x45, 0xa9, 0xde, 0x50, 0xd4, 0xc3, 0x84, 0xd6, + 0xe1, 0xd0, 0x01, 0x08, 0x02, 0x6c, 0x0e, 0xa5, 0xeb, 0xbf, 0x0b, 0x72, 0xfb, + 0xf5, 0xc3, 0x70, 0xbc, 0xe1, 0x8d, 0x3a, 0x6e, 0xdf, 0x98, 0x3c, 0xd9, 0x92, + 0x05, 0x00, 0x6d, 0x71, 0x23, 0xe9, 0x53, 0x50, 0x81, 0x13, 0x75, 0x94, 0x7b, + 0x05, 0x5a, 0x43, 0xdb, 0x07, 0xe0, 0x3f, 0x33, 0x62, 0x7d, 0xf5, 0xc6, 0x38, + 0xbf, 0xad, 0x95, 0x6d, 0xdc, 0x1e, 0xa7, 0xd7, 0x62, 0x0a, 0x20, 0xf2, 0x79, + 0x2f, 0x63, 0x81, 0x7a, 0x1c, 0xf3, 0x25, 0x80, 0xd0, 0x42, 0x74, 0x23, 0x4a, + 0xf2, 0xa5, 0x1b, 0x56, 0xbb, 0x68, 0xa2, 0x9e, 0x43, 0xa9, 0x54, 0x14, 0x2b, + 0xa4, 0xca, 0x68, 0x23, 0xbd, 0xe9, 0x05, 0x3d, 0x72, 0xfd, 0xad, 0xbc, 0x61, + 0xad, 0x59, 0x36, 0xc5, 0x3f, 0xdd, 0x75, 0x79, 0x44, 0x6d, 0x11, 0xc4, 0x46, + 0x07, 0xf4, 0x16, 0x30, 0xe4, 0xc0, 0x89, 0x15, 0xe6, 0x31, 0x77, 0x15, 0x50, + 0xe9, 0xce, 0x1f, 0xca, 0x2c, 0x63, 0xfe, 0x06, 0xb7, 0x98, 0x9d, 0x58, 0x4f, + 0xa7, 0xd7, 0x82, 0xa8, 0x8c, 0x1e, 0x7d, 0x64, 0xb6, 0xfb, 0xf5, 0x5e, 0x35, + 0x96, 0xaf, 0x9b, 0xcb, 0x75, 0x85, 0xf8, 0xc7, 0xd3, 0xaa, 0x5c, 0x20, 0x82, + 0xb2, 0x65, 0x24, 0x9d, 0xf0, 0x57, 0x01, 0xda, 0xb0, 0x31, 0xc4, 0xba, 0xc1, + 0xea, 0x26, 0x7a, 0x29, 0x96, 0xa2, 0x02, 0x8d, 0x1e, 0x6a, 0x0f, 0x80, 0xa3, + 0x84, 0x7c, 0x53, 0x1d, 0xba, 0x96, 0xee, 0x65, 0xa2, 0x41, 0x89, 0xbd, 0x27, + 0x12, 0xe4, 0x0e, 0x95, 0x96, 0x64, 0x98, 0x1e, 0x58, 0xb2, 0xa4, 0xf9, 0xcb, + 0xc4, 0x65, 0x99, 0x09, 0x9b, 0xaa, 0xe1, 0xd8, 0x02, 0xf7, 0x73, 0x33, 0x49, + 0x4a, 0x7a, 0xe1, 0x30, 0xfe, 0x86, 0xe8, 0xf8, 0x18, 0xf9, 0x26, 0x1a, 0x2d, + 0xad, 0xb4, 0x12, 0x52, 0x29, 0xba, 0x0f, 0xfc, 0x0e, 0x70, 0x90, 0x32, 0x44, + 0x30, 0xb5, 0x21, 0xa9, 0x0d, 0x22, 0x4a, 0xb7, 0xa1, 0x02, 0x4e, 0x1d, 0x89, + 0x3e, 0x74, 0x04, 0xfe, 0xdb, 0x34, 0x8e, 0x4d, 0x5e, 0x22, 0x35, 0xc5, 0x9a, + 0x78, 0x76, 0xa0, 0xfc, 0x60, 0x14, 0x5c, 0x6a, 0x00, 0x96, 0x87, 0x68, 0x44, + 0x60, 0x27, 0x1e, 0xe1, 0x33, 0xa4, 0x37, 0xfe, 0x52, 0xfb, 0x6c, 0xfb, 0xa9, + 0x7f, 0xce, 0xc1, 0x61, 0xdf, 0x51, 0x5d, 0xde, 0x90, 0x5a, 0x24, 0xda, 0x6d, + 0x37, 0xbd, 0xc3, 0x40, 0x44, 0xa9, 0x55, 0xe6, 0x82, 0xb4, 0x74, 0x71, 0xca, + 0x1e, 0x8c, 0x78, 0xc5, 0x1e, 0xd3, 0x77, 0xcd, 0x4a, 0xfa, 0x89, 0x4b, 0xd9, + 0xbd, 0x12, 0xe7, 0x07, 0x15, 0x6d, 0xa0, 0x72, 0x6f, 0x7c, 0xf5, 0x72, 0x9f, + 0xab, 0xe3, 0x72, 0x16, 0x04, 0x63, 0xfe, 0x04, 0x29, 0x24, 0x4d, 0x06, 0x74, + 0x89, 0xba, 0x5d, 0x09, 0x47, 0x2e, 0xcd, 0x9b, 0xcd, 0xc4, 0xd5, 0xe4, 0xdf, + 0x10, 0x1e, 0x18, 0x9d, 0xb8, 0x46, 0x3e, 0xb5, 0x38, 0x30, 0x7b, 0x58, 0x7d, + 0xef, 0xf7, 0x8d, 0xe9, 0xc7, 0x3a, 0xf2, 0x80, 0x80, 0xf0, 0x5f, 0x80, 0x08, + 0xd5, 0x9d, 0x2e, 0x9b, 0xed, 0x88, 0x33, 0x25, 0x88, 0x4a, 0x42, 0x43, 0x7c, + 0x35, 0xf5, 0x99, 0xe2, 0xe3, 0x6b, 0x15, 0xf5, 0x10, 0x30, 0x79, 0x28, 0x24, + 0x6b, 0xd2, 0xbf, 0x0b, 0x5f, 0xb4, 0x52, 0x29, 0x12, 0x3c, 0x6f, 0xc4, 0xdc, + 0x37, 0x24, 0x69, 0xea, 0x09, 0x5a, 0x0e, 0x50, 0x43, 0xdf, 0xed, 0x02, 0xbe, + 0x9d, 0xc6, 0xcb, 0xf8, 0xc3, 0xac, 0x3b, 0x03, 0x04, 0x3f, 0xb4, 0x97, 0xa1, + 0xbc, 0xec, 0xc9, 0xd3, 0x87, 0x71, 0xe9, 0x58, 0x0b, 0x71, 0x8f, 0x6b, 0x9a, + 0x1f, 0x77, 0x11, 0x28, 0x01, 0x09, 0x18, 0xab, 0x10, 0xe0, 0x40, 0xed, 0xff, + 0x3b, 0x95, 0x17, 0xff, 0x45, 0x33, 0xca, 0x23, 0x95, 0xac, 0xd1, 0x38, 0xc5, + 0x3a, 0x27, 0x48, 0x01, 0x7a, 0x7e, 0xd8, 0x2b, 0x7b, 0x05, 0xa8, 0xcf, 0xe1, + 0xe3, 0x73, 0x45, 0x9f, 0x1b, 0xdc, 0xbf, 0x15, 0x1b, 0x32, 0xaf, 0x95, 0x15, + 0x93, 0x1c, 0x0f, 0xbc, 0x23, 0x11, 0x19, 0x74, 0xdd, 0xe4, 0xe5, 0x63, 0xe7, + 0x1b, 0xf0, 0x59, 0xa1, 0xe2, 0x9c, 0x2d, 0x8e, 0xc9, 0xfc, 0x2b, 0x3f, 0x3d, + 0xb4, 0xa6, 0x78, 0xb9, 0x9b, 0xa8, 0xe7, 0x80, 0xeb, 0x46, 0xa3, 0x6b, 0x59, + 0xa0, 0x7d, 0x7b, 0xf8, 0x97, 0xcb, 0x0e, 0xd9, 0xe3, 0xf7, 0x43, 0x6e, 0x1c, + 0x76, 0x43, 0x76, 0x6f, 0x96, 0x6b, 0x03, 0x09, 0x76, 0x4e, 0xdb, 0x5f, 0x8f, + 0xd5, 0xed, 0x5c, 0xc9, 0xd7, 0x36, 0x69, 0xcb, 0x06, 0x11, 0xf9, 0x68, 0xc5, + 0xfe, 0xcf, 0x5e, 0xbf, 0x53, 0x11, 0xe0, 0xe5, 0x12, 0xe6, 0xc6, 0x9f, 0xbf, + 0xd5, 0x47, 0xd8, 0x48, 0x54, 0x81, 0x7e, 0xf3, 0x96, 0x35, 0xc2, 0x98, 0x27, + 0xaa, 0xd8, 0x67, 0x26, 0xc9, 0xad, 0xe3, 0xb2, 0x65, 0xb9, 0x08, 0x6c, 0x8b, + 0x5b, 0x75, 0xef, 0x56, 0xfe, 0x4b, 0xd8, 0xb4, 0xd6, 0x28, 0x93, 0x89, 0x5b, + 0x3f, 0xd2, 0x73, 0x4f, 0xda, 0xc4, 0x64, 0x15, 0x6d, 0x7e, 0x5e, 0xbc, 0x7e, + 0xcf, 0x1d, 0x83, 0xb8, 0x6f, 0x65, 0x96, 0x37, 0xe3, 0xb1, 0x42, 0xc1, 0x64, + 0x96, 0x3b, 0x8c, 0xdc, 0xf4, 0xba, 0x4f, 0x40, 0x35, 0xdf, 0xfc, 0x5a, 0x78, + 0x94, 0x58, 0x84, 0x77, 0x81, 0x91, 0x8a, 0xc7, 0x2f, 0xc1, 0x8b, 0xbb, 0xf5, + 0x11, 0x00, 0x32, 0xe6, 0x6d, 0x75, 0xb3, 0x17, 0x1e, 0xf4, 0xb5, 0x13, 0x29, + 0x01, 0x64, 0xa7, 0x7b, 0x42, 0xb0, 0xa4, 0xcf, 0xb8, 0x96, 0x39, 0xab, 0x23, + 0x84, 0x5e, 0x1a, 0xa2, 0xa4, 0x52, 0xf3, 0x73, 0x1c, 0x8c, 0xb6, 0x50, 0x82, + 0xa6, 0x22, 0xa7, 0xc2, 0xe0, 0x01, 0x3e, 0xa4, 0x7d, 0x0b, 0xdd, 0x42, 0xd6, + 0x99, 0x04, 0x66, 0x64, 0x9a, 0x90, 0x5c, 0x68, 0x4c, 0x32, 0x51, 0x71, 0x6d, + 0x61, 0xf7, 0x60, 0xd5, 0x3d, 0xe6, 0xe3, 0xf7, 0x90, 0xfb, 0xa7, 0xf5, 0xf1, + 0xf4, 0xde, 0x26, 0x71, 0x13, 0xbd, 0xfc, 0xd7, 0x42, 0x28, 0x22, 0x33, 0x0b, + 0x32, 0xd5, 0x8e, 0x67, 0x77, 0x76, 0x5f, 0x22, 0xa4, 0x11, 0x63, 0x44, 0xee, + 0xb6, 0x5b, 0x2e, 0xc5, 0x16, 0x39, 0x3a, 0xb3, 0x75, 0x1b, 0x53, 0x56, 0xd2, + 0xb0, 0xc9, 0x50, 0x0c, 0x0f, 0x3e, 0x46, 0x91, 0x81, 0x03, 0x5b, 0xc3, 0x66, + 0x0f, 0x0b, 0x8f, 0x9f, 0xbe, 0x6e, 0x40, 0xb5, 0xe8, 0x9c, 0xb7, 0x9b, 0x06, + 0x37, 0x14, 0xca, 0x75, 0xe7, 0x2e, 0x2e, 0x10, 0x0a, 0x10, 0xd6, 0x3b, 0xf7, + 0x84, 0xdf, 0x08, 0x20, 0xef, 0x25, 0xf8, 0xef, 0x40, 0xfe, 0x5f, 0x05, 0xfb, + 0x95, 0x68, 0x3f, 0x91, 0x05, 0xff, 0x3c, 0xb2, 0xd2, 0x19, 0xab, 0x76, 0x60, + 0x5a, 0x06, 0x4f, 0x69, 0x21, 0x9f, 0x1d, 0xc0, 0xd0, 0x0b, 0x3b, 0x48, 0x64, + 0x2f, 0x97, 0x0d, 0xc0, 0x0c, 0xca, 0x4b, 0x8b, 0x43, 0x30, 0x8b, 0xe1, 0x82, + 0x86, 0xec, 0x5a, 0x42, 0x88, 0xd6, 0x00, 0xa3, 0x78, 0x5c, 0xb6, 0x22, 0xd4, + 0x68, 0xa4, 0xc6, 0x96, 0x9b, 0x37, 0x92, 0xf2, 0x48, 0x50, 0x27, 0xd0, 0xad, + 0x9a, 0xa4, 0xa9, 0xc2, 0xcc, 0x97, 0x2f, 0x9e, 0xe5, 0x19, 0x0a, 0x95, 0xb1, + 0xeb, 0x05, 0x8d, 0xdd, 0xd8, 0xc0, 0x8e, 0x7d, 0x75, 0x3f, 0x5e, 0x01, 0x1b, + 0x2b, 0xcf, 0xee, 0x1d, 0x52, 0xc1, 0xc4, 0xf2, 0xca, 0xcd, 0xa3, 0x0b, 0xdb, + 0x69, 0x30, 0x65, 0x3c, 0x0c, 0xc4, 0x48, 0x6e, 0x60, 0xe8, 0x9f, 0xa8, 0x49, + 0xb3, 0x20, 0x83, 0xba, 0x9d, 0xb4, 0x53, 0xfb, 0x8d, 0xf6, 0x83, 0xcd, 0x68, + 0x75, 0x4c, 0x87, 0xda, 0xa7, 0x31, 0xf5, 0x70, 0xa7, 0xa4, 0x06, 0x0a, 0xf0, + 0xce, 0x70, 0x0d, 0x31, 0xbc, 0xa7, 0xe7, 0x4b, 0x3e, 0x3b, 0xa3, 0xd0, 0xe8, + 0xa6, 0x39, 0x2a, 0x06, 0x2b, 0x8e, 0x86, 0xd9, 0xd7, 0xd0, 0x0b, 0x21, 0x70, + 0x1e, 0x7b, 0x06, 0x2e, 0x06, 0xb1, 0xbc, 0xd8, 0x2a, 0x01, 0xd3, 0x75, 0x62, + 0x6f, 0xbf, 0x87, 0x2d, 0x27, 0xfa, 0x45, 0x11, 0xf5, 0xf8, 0xcf, 0x8c, 0x9a, + 0xbc, 0xef, 0x2a, 0x99, 0x01, 0x76, 0xae, 0x33, 0x93, 0x25, 0xd5, 0xa5, 0x88, + 0xda, 0x57, 0x96, 0xfa, 0xae, 0x5b, 0xab, 0x7c, 0x82, 0x97, 0x7c, 0x0f, 0xf7, + 0x97, 0x09, 0x3e, 0x2c, 0x1f, 0x3a, 0xe8, 0x55, 0xf6, 0x5a, 0xea, 0x91, 0xe1, + 0x31, 0x2f, 0xc6, 0xb8, 0xa4, 0x35, 0x1a, 0x2e, 0xc0, 0x3e, 0x02, 0xe5, 0xd0, + 0x2f, 0x53, 0x35, 0x4b, 0x05, 0x2f, 0xd3, 0xda, 0x0d, 0xff, 0x82, 0xcd, 0x1f, + 0x55, 0xeb, 0xca, 0x57, 0xb6, 0x33, 0x7c, 0x85, 0x93, 0x8a, 0x79, 0x81, 0x3d, + 0x20, 0x21, 0xd6, 0x09, 0x4c, 0x68, 0xb3, 0x75, 0xe9, 0x84, 0xf6, 0x83, 0x93, + 0x30, 0x08, 0x71, 0xe3, 0x48, 0xfc, 0x52, 0x36, 0xcc, 0xa6, 0x33, 0x05, 0x44, + 0xe5, 0x46, 0x39, 0xb5, 0x41, 0x87, 0x01, 0xff, 0x4c, 0xc4, 0x5a, 0x31, 0xf6, + 0x2e, 0xdd, 0x84, 0x3d, 0xbb, 0xdc, 0x5a, 0xa7, 0x27, 0xab, 0x79, 0xb4, 0x42, + 0x68, 0x3c, 0x49, 0x56, 0xbb, 0xb1, 0x95, 0xa4, 0xfa, 0x66, 0xdc, 0x9c, 0xd5, + 0x42, 0xc7, 0x6b, 0x91, 0x50, 0xc8, 0x4b, 0xf8, 0x90, 0x78, 0x99, 0x42, 0xf5, + 0x5c, 0x20, 0x0b, 0x77, 0x3e, 0xcd, 0xd7, 0x99, 0x2c, 0xff, 0x3e, 0xca, 0x24, + 0xde, 0x3e, 0x09, 0x84, 0xe1, 0x0e, 0x68, 0xae, 0x38, 0x75, 0x34, 0xb9, 0x6c, + 0xde, 0x37, 0x92, 0xf1, 0x35, 0xbf, 0x5f, 0x68, 0x78, 0x7d, 0x37, 0x0c, 0xa8, + 0xc4, 0xc4, 0x07, 0x4d, 0xc5, 0xd6, 0x01, 0xae, 0x90, 0x49, 0x54, 0x37, 0xc3, + 0xc2, 0xd4, 0x8a, 0x3d, 0x96, 0x66, 0x83, 0xac, 0x05, 0x16, 0x0b, 0x7a, 0x84, + 0xea, 0xa7, 0xaa, 0xb7, 0x40, 0x09, 0xe5, 0x7a, 0x85, 0xf7, 0xbf, 0x68, 0xa2, + 0xe4, 0x82, 0x00, 0x30, 0x85, 0x2c, 0xf2, 0x2b, 0x5e, 0x22, 0xd5, 0xd1, 0x69, + 0x2f, 0x03, 0xb9, 0xa2, 0xdf, 0xf4, 0x9c, 0x88, 0x1e, 0xe9, 0xc7, 0xf0, 0xc9, + 0x12, 0xbd, 0xeb, 0xf8, 0xcf, 0x64, 0xad, 0x09, 0x0e, 0xdb, 0x4e, 0x5f, 0x04, + 0xcc, 0xc2, 0xc9, 0xcf, 0x04, 0xa9, 0x04, 0x21, 0xcc, 0xc9, 0xf2, 0xcd, 0xbc, + 0xf2, 0x1f, 0x07, 0xf2, 0x65, 0xc5, 0x37, 0xd5, 0x1c, 0x65, 0x51, 0xf4, 0x61, + 0x7b, 0x11, 0xc2, 0xf6, 0x90, 0x9d, 0xa8, 0x7e, 0x46, 0xfe, 0x0a, 0xb7, 0xb7, + 0x73, 0x7a, 0x52, 0x15, 0xf0, 0xcf, 0x42, 0x56, 0x6f, 0x88, 0x71, 0x49, 0xf1, + 0x62, 0x83, 0x9a, 0x0b, 0xc0, 0x54, 0x3a, 0x1a, 0xe9, 0x07, 0xb7, 0x4e, 0x8b, + 0xc8, 0xb0, 0x92, 0xd5, 0x79, 0x6e, 0x27, 0x5d, 0xa4, 0x3a, 0xec, 0x6d, 0x74, + 0x08, 0x6f, 0x47, 0x68, 0x93, 0x3a, 0xa2, 0x48, 0x73, 0x68, 0x18, 0x67, 0xa7, + 0x09, 0xa5, 0x32, 0x6b, 0xf1, 0x5b, 0x17, 0x1c, 0xb0, 0x32, 0x4c, 0x4b, 0xe3, + 0x64, 0xfe, 0x54, 0x3f, 0x5b, 0xba, 0x31, 0xad, 0x47, 0x02, 0xa9, 0xaa, 0x63, + 0x7b, 0xc9, 0x6f, 0x85, 0xfb, 0x90, 0xa5, 0x84, 0x59, 0x03, 0x60, 0x69, 0x5d, + 0x4e, 0x19, 0x84, 0x9e, 0x63, 0x4f, 0x24, 0xd9, 0xad, 0x39, 0x6c, 0x19, 0xff, + 0x83, 0xce, 0x74, 0xf4, 0x6e, 0x64, 0x5f, 0x93, 0x2e, 0x14, 0x1a, 0x41, 0x19, + 0x59, 0x36, 0xc8, 0x5d, 0x51, 0x44, 0x14, 0xf1, 0x12, 0xe6, 0x0b, 0x1a, 0x25, + 0x37, 0xc3, 0x8d, 0x6d, 0xc6, 0xc4, 0x63, 0x83, 0x05, 0xc9, 0xbd, 0x6c, 0x62, + 0xe3, 0x66, 0xbc, 0x63, 0x12, 0x3e, 0x3e, 0x6d, 0xd3, 0x6e, 0xed, 0xd3, 0x13, + 0x6f, 0xce, 0x8d, 0xee, 0xca, 0x2a, 0xa0, 0x9a, 0x32, 0x98, 0xa3, 0x9d, 0x83, + 0x85, 0x9e, 0xfc, 0x9b, 0x2b, 0x69, 0xcf, 0x9a, 0x7d, 0xee, 0x08, 0xa9, 0x8e, + 0x4b, 0xe5, 0x58, 0xac, 0x79, 0x12, 0xfd, 0xcb, 0x42, 0x20, 0x90, 0x75, 0x42, + 0x02, 0x60, 0xf7, 0xca, 0xd0, 0xf2, 0xc0, 0x1f, 0x2a, 0xfe, 0x33, 0x07, 0x3f, + 0x26, 0x24, 0x9d, 0x94, 0x4f, 0x7a, 0x50, 0xdd, 0x84, 0x83, 0x9b, 0xc3, 0xea, + 0x7f, 0xde, 0xe4, 0xed, 0x71, 0x44, 0x9c, 0xf0, 0x75, 0x33, 0xd2, 0x6e, 0x1e, + 0x27, 0xa3, 0xef, 0xb0, 0x32, 0xc3, 0xa3, 0xb3, 0x4b, 0xd3, 0x09, 0x26, 0x22, + 0xd2, 0x06, 0x2a, 0xe5, 0x36, 0xef, 0x51, 0x49, 0xc4, 0x9b, 0x5b, 0xc9, 0x47, + 0x5e, 0xaf, 0xab, 0x6e, 0x67, 0x57, 0x61, 0x00, 0x8b, 0x0d, 0xad, 0xde, 0xec, + 0xaa, 0x60, 0x44, 0x70, 0xbb, 0xe0, 0xfa, 0xda, 0x25, 0x5d, 0x29, 0x0e, 0x92, + 0xb1, 0x90, 0xc2, 0xc2, 0xd8, 0xc2, 0xde, 0xe5, 0x45, 0x5d, 0x1f, 0xa9, 0xa9, + 0xf3, 0xdb, 0x77, 0x79, 0xb5, 0x84, 0x64, 0x34, 0x64, 0xaa, 0x80, 0x14, 0xba, + 0x66, 0x99, 0x4d, 0xe2, 0x55, 0x17, 0xf8, 0x39, 0x80, 0xe6, 0x6e, 0xe4, 0xf6, + 0x23, 0x14, 0xae, 0x6d, 0xbe, 0xf4, 0x52, 0xd5, 0xd3, 0x8b, 0x0a, 0x16, 0xf3, + 0x99, 0x1f, 0x36, 0xd8, 0xa8, 0xb3, 0x9d, 0xdc, 0x0d, 0x55, 0x95, 0xee, 0xd9, + 0x87, 0x62, 0x87, 0x8c, 0xdf, 0x3f, 0x4a, 0x2e, 0xdc, 0x5c, 0xda, 0x77, 0xd5, + 0xfe, 0x4f, 0xaf, 0x63, 0xa1, 0x5f, 0x56, 0x8a, 0x54, 0x0d, 0xa5, 0x7d, 0xd9, + 0xbe, 0xb6, 0xfb, 0x1a, 0x97, 0x7c, 0xcb, 0x91, 0xb4, 0xd7, 0x9c, 0xb3, 0x9b, + 0x28, 0x91, 0x1a, 0x29, 0xe7, 0xbf, 0x02, 0x8a, 0xc6, 0x10, 0x37, 0x96, 0xdf, + 0xb6, 0xb2, 0x09, 0x67, 0x23, 0x9a, 0xd3, 0x73, 0xc3, 0x8c, 0x53, 0xf6, 0xdf, + 0x18, 0x23, 0xd4, 0x95, 0x0a, 0x02, 0x83, 0xe9, 0x9b, 0x9c, 0x06, 0xab, 0x29, + 0x66, 0x66, 0x7c, 0x9d, 0xf6, 0x77, 0x71, 0x6b, 0x0c, 0xad, 0xed, 0x81, 0x8d, + 0xf9, 0xe4, 0x49, 0xc0, 0x72, 0xe2, 0x2f, 0x9d, 0x98, 0xbb, 0x0f, 0x9b, 0x03, + 0xbd, 0x5f, 0xd0, 0x13, 0xfc, 0xef, 0x3e, 0xd6, 0xa4, 0x9a, 0xeb, 0x98, 0x72, + 0x02, 0x54, 0x08, 0x7e, 0xf7, 0x28, 0xe3, 0x19, 0x47, 0xff, 0xe8, 0xf7, 0x66, + 0xe6, 0x3e, 0xe4, 0x6f, 0xf2, 0x08, 0x16, 0xd5, 0xfa, 0x8f, 0xf5, 0x5a, 0x26, + 0x39, 0x89, 0x61, 0x49, 0x0a, 0xb9, 0xae, 0x36, 0x6f, 0xc5, 0xa2, 0xd1, 0x99, + 0x6e, 0xd6, 0x93, 0xcc, 0xca, 0x82, 0x35, 0x6f, 0x60, 0x0a, 0xb0, 0x99, 0xf6, + 0xec, 0xa8, 0xbf, 0xe6, 0x45, 0x27, 0x0d, 0x3f, 0x95, 0xed, 0xba, 0x5b, 0x0d, + 0xe7, 0xa3, 0x28, 0x19, 0x23, 0x3b, 0xcc, 0x75, 0x4a, 0x5c, 0xe2, 0xe5, 0xea, + 0x07, 0x84, 0x2e, 0x5f, 0xf2, 0xce, 0xbe, 0x62, 0xad, 0x76, 0xe8, 0xef, 0xf8, + 0xd1, 0x5e, 0xa4, 0xc2, 0x4a, 0x5f, 0x20, 0x78, 0x68, 0x31, 0x9a, 0x5a, 0xf6, + 0xb0, 0x35, 0xbe, 0x3f, 0x44, 0xf4, 0x34, 0x09, 0x4f, 0x6e, 0x52, 0x5b, 0xe6, + 0x14, 0xda, 0xc9, 0x20, 0xa3, 0x30, 0xbd, 0xfb, 0x26, 0xd7, 0x5f, 0xe7, 0xb4, + 0xb3, 0x65, 0xd0, 0x94, 0x45, 0x92, 0x50, 0xaa, 0xa5, 0x54, 0x44, 0x89, 0xfb, + 0x1d, 0x99, 0x25, 0x81, 0x80, 0x0a, 0x77, 0xb8, 0x91, 0x21, 0x57, 0xfc, 0x97, + 0x13, 0xaa, 0xac, 0x25, 0xb4, 0xc2, 0x6e, 0xb0, 0x3f, 0x71, 0x66, 0x46, 0x61, + 0x9a, 0xf0, 0x24, 0x56, 0xae, 0x69, 0x59, 0x62, 0xfe, 0x5e, 0x93, 0x1a, 0x63, + 0xb5, 0xc7, 0x90, 0x52, 0xec, 0xd3, 0x33, 0xe1, 0x84, 0x12, 0xdb, 0x91, 0xe1, + 0x5f, 0x7c, 0xbc, 0x70, 0xb4, 0xcd, 0x7e, 0x8e, 0x3c, 0x95, 0x1f, 0x35, 0x85, + 0x72, 0xe3, 0x77, 0x67, 0xe7, 0xd5, 0x27, 0x04, 0xa6, 0x72, 0x1b, 0x30, 0xef, + 0xc4, 0x10, 0x17, 0xae, 0x4d, 0x23, 0x15, 0x58, 0xc5, 0xc8, 0x2c, 0xc7, 0xdd, + 0x7e, 0x33, 0x56, 0xc0, 0x9d, 0xc2, 0x49, 0x06, 0xf0, 0x43, 0x8d, 0xfc, 0xc3, + 0x00, 0x85, 0x6a, 0xc2, 0xce, 0xd8, 0xf7, 0x7f, 0xa8, 0x01, 0x57, 0x36, 0xc6, + 0x61, 0xe8, 0x02, 0x48, 0xae, 0xeb, 0x77, 0x48, 0x74, 0xaa, 0x79, 0xd2, 0x90, + 0xb8, 0xf5, 0x02, 0x7a, 0x0a, 0x50, 0x95, 0x37, 0xfc, 0x7c, 0x68, 0x9b, 0x7a, + 0xd8, 0x61, 0x16, 0xcf, 0xec, 0x26, 0x47, 0xcc, 0xaa, 0xe1, 0xc7, 0x4b, 0x41, + 0x6f, 0x3e, 0x6a, 0xe8, 0xf7, 0xcc, 0x60, 0xea, 0xaf, 0x7b, 0x1f, 0x30, 0x6e, + 0x06, 0x56, 0xa7, 0xd7, 0xc2, 0xa2, 0x7a, 0xe2, 0xf1, 0x40, 0x14, 0x8e, 0x7d, + 0x7b, 0xed, 0x48, 0xa0, 0xa1, 0x2c, 0x17, 0xa7, 0xfa, 0xfc, 0x3b, 0x2b, 0xd0, + 0x25, 0x87, 0x34, 0x6f, 0x26, 0xd0, 0xe6, 0x88, 0x2e, 0x05, 0xe0, 0x18, 0xa0, + 0xd5, 0x57, 0x2a, 0x67, 0x03, 0x9f, 0x8f, 0x69, 0xad, 0x9a, 0x91, 0x92, 0xb3, + 0x02, 0xf2, 0x6b, 0xdd, 0xa4, 0x65, 0xd9, 0x0b, 0x14, 0xac, 0x00, 0xfe, 0x3a, + 0xcf, 0xdc, 0xea, 0xf5, 0xbc, 0x4d, 0x75, 0x66, 0x19, 0x17, 0x09, 0x69, 0x65, + 0x42, 0xba, 0x16, 0x7c, 0x2d, 0xa1, 0x52, 0x5f, 0x73, 0x9e, 0x1b, 0x68, 0xcb, + 0x6d, 0x01, 0x44, 0xd1, 0xbe, 0x8f, 0x50, 0x93, 0x7a, 0x6e, 0xf7, 0x84, 0x48, + 0xc9, 0xb1, 0xc0, 0x08, 0x4a, 0x03, 0xd2, 0x49, 0x23, 0x06, 0x7a, 0xe4, 0x7f, + 0xd6, 0x42, 0x5e, 0xfb, 0x9c, 0x1d, 0x50, 0x0e, 0xe2, 0xd2, 0x04, 0xc3, 0x4e, + 0x1b, 0x96, 0x18, 0xc8, 0x59, 0xcc, 0x0a, 0x46, 0xa0, 0xca, 0xcd, 0x18, 0x80, + 0x38, 0x0c, 0xaa, 0xe7, 0x88, 0xe6, 0xff, 0x3d, 0x17, 0x01, 0x89, 0xec, 0x4a, + 0x9d, 0xa8, 0x8d, 0xea, 0x07, 0x5b, 0xa9, 0x96, 0xd3, 0xc3, 0x36, 0x64, 0x8e, + 0x86, 0x94, 0xd3, 0xa1, 0x9d, 0x3d, 0xca, 0x53, 0x1b, 0xeb, 0x50, 0xd4, 0x32, + 0x7c, 0x5c, 0x0c, 0x23, 0xcb, 0x7c, 0xfd, 0xb0, 0x8c, 0xa7, 0xcf, 0x2c, 0xac, + 0x6b, 0xc1, 0x39, 0xd0, 0x74, 0x14, 0x73, 0xd3, 0x76, 0x02, 0x9c, 0xb4, 0xab, + 0x6b, 0xf0, 0x54, 0x55, 0x7c, 0xe2, 0x94, 0xc7, 0x28, 0xa4, 0x68, 0x7d, 0x57, + 0xec, 0x89, 0x09, 0xff, 0x51, 0xa4, 0xd0, 0x2f, 0x9d, 0xcd, 0x11, 0x19, 0x3d, + 0x7d, 0x1c, 0x9f, 0xda, 0xe6, 0xa1, 0x73, 0x96, 0xa1, 0xbf, 0x57, 0xa9, 0x94, + 0x93, 0x4f, 0x5e, 0x7a, 0x59, 0xf0, 0x45, 0xde, 0xbe, 0xaf, 0xf6, 0x2e, 0xf3, + 0x26, 0xb9, 0x47, 0xf2, 0xa8, 0xb4, 0x95, 0x55, 0xe4, 0xd9, 0x9b, 0x3b, 0xf5, + 0xc8, 0x1f, 0xf9, 0xfe, 0x31, 0x4e, 0x04, 0x7a, 0xf1, 0x52, 0x50, 0x8f, 0x57, + 0x01, 0x5c, 0xa4, 0x02, 0xc6, 0x7d, 0x92, 0x5c, 0x99, 0xac, 0xea, 0x3e, 0xe8, + 0xcc, 0x4b, 0x00, 0x8c, 0x5c, 0xb4, 0x39, 0x66, 0xe7, 0x14, 0xef, 0x48, 0x0f, + 0xd0, 0x5e, 0x07, 0xc7, 0xb2, 0xdd, 0xa9, 0xaa, 0x39, 0x66, 0x11, 0x3e, 0xaa, + 0x29, 0x3d, 0x3f, 0x62, 0x2b, 0x30, 0x9d, 0x64, 0x80, 0x3c, 0xe1, 0xe6, 0x37, + 0x8b, 0x6a, 0xac, 0x4f, 0xab, 0x52, 0x7c, 0x43, 0xcd, 0x45, 0xed, 0x0a, 0x3c, + 0x1a, 0x4b, 0x9f, 0xb1, 0x8d, 0xcc, 0xcf, 0xcd, 0xb6, 0xac, 0x0c, 0x24, 0x21, + 0x63, 0x9c, 0xda, 0x00, 0x75, 0xa2, 0x0d, 0xc5, 0x11, 0x1b, 0x8d, 0x3d, 0x31, + 0x99, 0x49, 0x5b, 0xd9, 0x13, 0x3d, 0xba, 0xb9, 0x45, 0x41, 0x41, 0x0e, 0x4f, + 0xba, 0x92, 0xc7, 0xb6, 0x06, 0xa5, 0xcb, 0x12, 0x2f, 0x14, 0x0c, 0xf1, 0xa3, + 0x59, 0x6f, 0x27, 0x88, 0xf3, 0xc8, 0xb9, 0x26, 0x60, 0xf1, 0x4c, 0xb6, 0x5a, + 0xf5, 0xdd, 0x23, 0xdf, 0xdb, 0xac, 0x13, 0x71, 0xec, 0xf4, 0xb3, 0x37, 0x12, + 0xfe, 0xd2, 0x29, 0x2c, 0x44, 0xf7, 0x08, 0x34, 0xcf, 0x96, 0xc0, 0x5d, 0x58, + 0x82, 0x7e, 0x69, 0xbf, 0xc2, 0xe6, 0x96, 0xfa, 0x08, 0x74, 0x86, 0x9c, 0x02, + 0xf3, 0xdc, 0xa1, 0x1c, 0x3b, 0x90, 0xcb, 0x21, 0x4e, 0x68, 0xbc, 0x1c, 0xae, + 0x03, 0x9d, 0x7a, 0x14, 0x6c, 0xdc, 0x1d, 0x60, 0x9d, 0x7a, 0x6b, 0x3f, 0xd5, + 0xd4, 0x61, 0xb0, 0x95, 0x1c, 0x82, 0xcf, 0xb3, 0xe7, 0x63, 0xfa, 0xd2, 0xd1, + 0xbc, 0x76, 0x78, 0xcd, 0xf8, 0x27, 0x79, 0xf8, 0xfd, 0x5a, 0x1c, 0xe2, 0x2a, + 0x8d, 0x3c, 0x45, 0x47, 0xab, 0xd9, 0x59, 0x83, 0x8a, 0x46, 0xfb, 0x80, 0xaf, + 0xe0, 0x1f, 0x8e, 0xcc, 0x99, 0x31, 0x51, 0x3b, 0x19, 0x62, 0xec, 0x54, 0x08, + 0x56, 0xcb, 0x18, 0x93, 0x87, 0xcf, 0xbf, 0xcc, 0x0f, 0x7c, 0x68, 0x22, 0x3c, + 0xba, 0x47, 0xfb, 0x0c, 0x9b, 0x48, 0x6e, 0x4d, 0x99, 0x17, 0x19, 0x41, 0xf7, + 0x67, 0x5a, 0x8b, 0x46, 0x32, 0x8a, 0x3b, 0xc1, 0x09, 0xbf, 0x07, 0xc6, 0x6d, + 0x5e, 0xde, 0x77, 0x1c, 0xc4, 0xc7, 0x4c, 0xe8, 0x03, 0x33, 0x82, 0x91, 0x91, + 0xee, 0xdc, 0x49, 0x35, 0x08, 0xa6, 0x44, 0x53, 0x0a, 0x61, 0x44, 0xf2, 0x2d, + 0xcf, 0x97, 0x52, 0x5a, 0x4c, 0xdc, 0xa1, 0xad, 0x71, 0x07, 0x3b, 0x08, 0x0b, + 0x73, 0xea, 0x45, 0x49, 0xf5, 0x40, 0x1b, 0xff, 0x43, 0x18, 0x26, 0x8e, 0x6a, + 0xd6, 0x37, 0x36, 0x31, 0x57, 0xa1, 0x9a, 0x53, 0xf1, 0x23, 0xa0, 0xb0, 0xe1, + 0x6d, 0x0b, 0x77, 0xf0, 0x20, 0x28, 0xda, 0x46, 0x41, 0x00, 0xfd, 0xe7, 0x6d, + 0x83, 0xdd, 0x0b, 0xb2, 0x24, 0xf7, 0xb5, 0x7a, 0x00, 0xc0, 0x2f, 0x68, 0xae, + 0x64, 0x8f, 0xdc, 0x52, 0x99, 0x57, 0xa1, 0x04, 0x90, 0xdc, 0xe1, 0xfd, 0xdb, + 0xb0, 0x90, 0x4f, 0x0d, 0x51, 0x8b, 0xb3, 0x87, 0x54, 0x40, 0x19, 0x98, 0x3b, + 0x61, 0x69, 0x75, 0xa7, 0x8e, 0x74, 0xd8, 0x54, 0xfd, 0xdc, 0x49, 0xb2, 0x55, + 0x16, 0x7b, 0x55, 0xef, 0x4b, 0xee, 0x46, 0x56, 0x68, 0xb2, 0x0e, 0xa4, 0x11, + 0x8c, 0xa5, 0x69, 0xae, 0x48, 0x0e, 0x0f, 0x6e, 0x5e, 0x04, 0x3a, 0x35, 0x7b, + 0x36, 0xd3, 0xab, 0x36, 0xc8, 0x61, 0xf2, 0x27, 0x83, 0x01, 0xdc, 0xe5, 0x76, + 0x74, 0xd5, 0x07, 0x3b, 0x3a, 0x6f, 0x51, 0x03, 0xa0, 0x79, 0x3a, 0xf1, 0xb7, + 0xd4, 0x6f, 0x95, 0x7e, 0x22, 0xd8, 0xd2, 0x58, 0x3b, 0xf1, 0x81, 0x83, 0x6c, + 0x3b, 0xe9, 0x93, 0x0b, 0xac, 0x8f, 0xa4, 0x60, 0xe9, 0x68, 0xaa, 0x71, 0x09, + 0x87, 0x0b, 0xbe, 0xd1, 0x7d, 0xf5, 0xf8, 0x88, 0xc8, 0xca, 0x14, 0x67, 0xae, + 0x17, 0xdb, 0xbc, 0xde, 0x31, 0xc1, 0x10, 0x5c, 0xb5, 0xbd, 0xa8, 0x8a, 0xc6, + 0xc6, 0x27, 0x00, 0x2c, 0xe2, 0x1c, 0x02, 0x14, 0x0f, 0xfe, 0x81, 0xec, 0x58, + 0xbf, 0x1e, 0x6d, 0x1b, 0xb7, 0xaa, 0xad, 0xa4, 0x1f, 0xba, 0x0b, 0xb5, 0x88, + 0x77, 0x8a, 0x7f, 0x65, 0x20, 0x2a, 0xd8, 0x11, 0xea, 0x73, 0xd2, 0x6c, 0x74, + 0x55, 0x03, 0x95, 0xaf, 0x61, 0xe8, 0x9b, 0xc1, 0xac, 0xf3, 0x19, 0x78, 0x18, + 0xa3, 0xc4, 0xfc, 0xda, 0xf6, 0xb0, 0x54, 0xeb, 0xf3, 0xb2, 0xb6, 0x82, 0x00, + 0x4b, 0x5a, 0x4c, 0x03, 0x5f, 0x5f, 0x5a, 0x6c, 0xbd, 0x34, 0x25, 0x90, 0xe9, + 0x0c, 0x8c, 0x38, 0x8e, 0xa7, 0x95, 0x51, 0x22, 0xdb, 0xac, 0xa6, 0x7b, 0x30, + 0x39, 0x5a, 0x92, 0x8b, 0x57, 0xb8, 0x57, 0x51, 0x23, 0x20, 0x5a, 0xe1, 0x91, + 0x52, 0xe4, 0x1e, 0xb9, 0xc1, 0x37, 0xfa, 0x12, 0x8c, 0x3b, 0x0e, 0x0b, 0xe5, + 0x81, 0xb5, 0xa2, 0x9f, 0xde, 0x8a, 0x21, 0x7f, 0x40, 0x15, 0xd4, 0xf3, 0xc1, + 0xd7, 0x30, 0xea, 0x66, 0x26, 0xe2, 0x13, 0x4e, 0x39, 0x58, 0xe2, 0x96, 0x24, + 0xc5, 0x32, 0x19, 0xa6, 0x0c, 0xd0, 0xa8, 0xc4, 0xda, 0x36, 0x7e, 0x29, 0xa7, + 0x17, 0x79, 0xa7, 0x30, 0x32, 0x98, 0x5a, 0x3d, 0x1f, 0xd0, 0x3d, 0xd4, 0xd0, + 0x6e, 0x05, 0x25, 0xd0, 0x95, 0x79, 0xb9, 0x54, 0x87, 0x12, 0x9f, 0x19, 0xd7, + 0x5f, 0x35, 0x8b, 0x66, 0xba, 0x75, 0x19, 0x20, 0xe0, 0x13, 0x08, 0xa9, 0x4d, + 0xdf, 0x56, 0x57, 0xfc, 0x35, 0x62, 0x10, 0x09, 0xa5, 0x0c, 0x38, 0xbd, 0x03, + 0x87, 0x72, 0xc4, 0x14, 0x3d, 0x8b, 0x7a, 0xcf, 0xd7, 0x4e, 0x72, 0xc0, 0x4d, + 0x89, 0x24, 0x8d, 0xff, 0x20, 0xfe, 0x8d, 0xc5, 0xec, 0x21, 0x49, 0x05, 0x4e, + 0xa2, 0x41, 0x64, 0xe8, 0x5f, 0x67, 0x44, 0xad, 0x0c, 0xac, 0xf1, 0xa8, 0xb7, + 0x01, 0x26, 0xf4, 0x82, 0xc0, 0x92, 0xed, 0x9f, 0x61, 0x27, 0xd2, 0x05, 0x0d, + 0x12, 0xe8, 0x78, 0xa7, 0x96, 0x53, 0xa1, 0xe8, 0x4d, 0xae, 0xc3, 0xeb, 0xe6, + 0x2d, 0x5f, 0x6c, 0x4a, 0xbe, 0x5c, 0xe9, 0x0a, 0x7f, 0xe2, 0xe5, 0x2a, 0x8d, + 0x78, 0x46, 0xe8, 0xed, 0xf2, 0xf2, 0xbc, 0xe0, 0x5a, 0x03, 0x7c, 0x82, 0x6f, + 0x22, 0xca, 0xad, 0x12, 0x61, 0x46, 0x7d, 0xcf, 0xb7, 0xd6, 0xb6, 0x13, 0x3d, + 0xc2, 0x1e, 0x80, 0x96, 0xc7, 0xe9, 0xf8, 0xe9, 0xe1, 0x0c, 0x1e, 0x3f, 0xac, + 0x40, 0x58, 0xb6, 0x82, 0xc6, 0x8e, 0x54, 0xfa, 0xca, 0xe0, 0xf9, 0xc2, 0xdd, + 0x4d, 0x64, 0xd9, 0x04, 0x61, 0x52, 0xb4, 0x76, 0x23, 0x32, 0x93, 0x9f, 0x17, + 0xe6, 0xaa, 0xf7, 0xd8, 0xb9, 0xd3, 0x58, 0xe2, 0x21, 0x8d, 0x4e, 0x0d, 0x69, + 0xa4, 0xf1, 0x19, 0xe1, 0xc6, 0x4e, 0xec, 0x4c, 0x8b, 0x53, 0x28, 0x09, 0x70, + 0x71, 0x31, 0xf0, 0x1f, 0x55, 0xc7, 0xad, 0x04, 0xcf, 0xb6, 0x3f, 0x7c, 0x4a, + 0x3d, 0x0a, 0x2b, 0x0f, 0xfb, 0x0b, 0x05, 0xa6, 0xbe, 0x05, 0x5b, 0x8c, 0x94, + 0xca, 0x80, 0xbb, 0x0a, 0x1d, 0x13, 0xcd, 0x4c, 0xd6, 0x9a, 0xb9, 0x83, 0x04, + 0xae, 0x25, 0x15, 0xd5, 0xf7, 0x69, 0x9d, 0x4a, 0xbe, 0xe5, 0xc2, 0x0b, 0xe6, + 0x09, 0xd8, 0x73, 0x51, 0x10, 0x12, 0xf2, 0x34, 0xbd, 0x85, 0xa7, 0xef, 0xf5, + 0xfb, 0x63, 0x4c, 0xff, 0x26, 0x58, 0xba, 0x65, 0x16, 0x04, 0x85, 0x63, 0x09, + 0x5e, 0xce, 0xfb, 0x30, 0x15, 0xee, 0x3f, 0x03, 0xca, 0x52, 0xa1, 0x77, 0xf2, + 0x61, 0xec, 0xdc, 0x26, 0xbc, 0x08, 0x9d, 0x34, 0xc6, 0x40, 0x48, 0x46, 0xe9, + 0xc6, 0x47, 0xfc, 0xfe, 0x98, 0xcc, 0x6a, 0xcd, 0xbb, 0x46, 0x4f, 0x64, 0x27, + 0x8a, 0xd8, 0xce, 0x9d, 0x1a, 0xe0, 0xd4, 0x15, 0xbc, 0x0c, 0x05, 0x24, 0x5f, + 0xdd, 0xaf, 0x4e, 0xbc, 0x8d, 0xc7, 0x03, 0xa8, 0x5c, 0xb2, 0x70, 0xf7, 0x96, + 0xad, 0x2d, 0x93, 0x7e, 0x2a, 0xc0, 0xd5, 0xe0, 0xa3, 0x48, 0x21, 0x75, 0x80, + 0x00, 0xaa, 0x59, 0xc9, 0xd4, 0x65, 0x24, 0x85, 0x29, 0x4e, 0xe0, 0xab, 0x29, + 0x69, 0x6b, 0x21, 0x43, 0x0f, 0xa5, 0x4d, 0xcf, 0xbf, 0x2b, 0x9c, 0x49, 0xd1, + 0x42, 0x06, 0x42, 0x09, 0xee, 0xee, 0xd4, 0xd4, 0x71, 0xff, 0xc0, 0x17, 0xd4, + 0xe2, 0x0a, 0x79, 0x6b, 0x09, 0x27, 0x80, 0x4c, 0x06, 0x1b, 0x9f, 0x4a, 0x70, + 0x91, 0xfe, 0x01, 0x5a, 0xda, 0x68, 0xfd, 0x84, 0x42, 0xe0, 0x18, 0x25, 0xc8, + 0x8d, 0xfe, 0x55, 0xcf, 0x5d, 0xe3, 0x89, 0x36, 0xf7, 0xce, 0x25, 0x31, 0x1b, + 0x90, 0x2b, 0xa9, 0x7a, 0x3c, 0x12, 0xa9, 0x5c, 0xfa, 0x1c, 0x3a, 0x59, 0x1b, + 0x81, 0x8f, 0x60, 0x83, 0x27, 0x09, 0xd9, 0xe4, 0x83, 0x9e, 0x41, 0x0f, 0xb3, + 0x6b, 0x84, 0xf3, 0xac, 0x4f, 0x07, 0x0f, 0xc3, 0x5e, 0x16, 0x19, 0x78, 0x25, + 0x9e, 0x5b, 0x8e, 0xdc, 0x74, 0x4d, 0x90, 0x91, 0x9a, 0xa7, 0x70, 0xbb, 0x36, + 0x21, 0x51, 0x28, 0xe5, 0x82, 0xb5, 0x96, 0x41, 0xe2, 0x38, 0x52, 0xe9, 0x58, + 0xeb, 0x8f, 0xc3, 0xc0, 0xaa, 0x96, 0x15, 0x2b, 0xa4, 0xf7, 0x7f, 0x13, 0x8d, + 0x6a, 0x67, 0x12, 0xa3, 0xae, 0x32, 0x26, 0x01, 0x58, 0x83, 0xf8, 0x1d, 0xb2, + 0x3e, 0x58, 0x3c, 0x86, 0x9c, 0x4c, 0x71, 0x14, 0x3a, 0x6f, 0xff, 0xd6, 0x5e, + 0x8d, 0xfd, 0xc5, 0x0c, 0x99, 0xa2, 0xf1, 0xf3, 0x14, 0xcd, 0xcc, 0x71, 0x35, + 0x9e, 0x23, 0x5f, 0x1d, 0x7d, 0xc2, 0xb5, 0xf3, 0x8e, 0xf7, 0xb9, 0x70, 0x84, + 0x31, 0x63, 0xc0, 0x3f, 0x9d, 0xd4, 0x0a, 0x80, 0x15, 0xef, 0xdc, 0x87, 0x91, + 0x95, 0x6a, 0x3f, 0x3c, 0xed, 0xd9, 0xea, 0x64, 0xf8, 0xef, 0xa7, 0xa0, 0x81, + 0x5a, 0x70, 0x38, 0x1d, 0x71, 0x46, 0x78, 0x17, 0xbd, 0x04, 0xca, 0x52, 0x9a, + 0xed, 0xe0, 0x7f, 0xf6, 0x0d, 0x17, 0x6a, 0xed, 0x0f, 0x85, 0x5a, 0x2e, 0xae, + 0xa8, 0x9e, 0xae, 0xac, 0xa8, 0x93, 0x58, 0xc0, 0x81, 0x82, 0x6a, 0x08, 0x12, + 0xa5, 0xbc, 0xa2, 0x8b, 0xe1, 0x37, 0x3f, 0x08, 0x6d, 0xbd, 0xba, 0x7e, 0x43, + 0xe2, 0x03, 0x21, 0x2c, 0x9f, 0xed, 0x21, 0x47, 0x4b, 0xa1, 0x9a, 0x05, 0x5f, + 0xfc, 0xc1, 0x79, 0x41, 0x2e, 0x89, 0x3a, 0x74, 0x48, 0x32, 0x29, 0x8c, 0x5f, + 0xe2, 0x4c, 0xc6, 0xb1, 0x86, 0x67, 0xf4, 0x9b, 0x34, 0xdf, 0xb1, 0x23, 0x79, + 0x26, 0x74, 0x19, 0xa9, 0xcb, 0x94, 0x03, 0xd8, 0x16, 0x7d, 0x8d, 0x1e, 0x91, + 0xd2, 0x81, 0x1a, 0x04, 0x3b, 0x29, 0x24, 0x3b, 0x06, 0x9b, 0x37, 0x58, 0x78, + 0x47, 0xdc, 0x6f, 0xcd, 0xdb, 0x18, 0x31, 0xbd, 0x1c, 0xc2, 0x56, 0x05, 0x35, + 0xf9, 0xa8, 0xa5, 0xf2, 0x4b, 0x06, 0x00, 0x02, 0x1b, 0x20, 0x29, 0x0f, 0xeb, + 0xba, 0xf1, 0x27, 0x28, 0xfb, 0x75, 0x48, 0x88, 0xb2, 0xf3, 0x09, 0x4d, 0x20, + 0xf1, 0x18, 0x4e, 0x77, 0x82, 0x7d, 0xe3, 0xff, 0x8f, 0x3d, 0x73, 0x45, 0x1a, + 0xfd, 0x1e, 0x01, 0x24, 0x1f, 0x72, 0x3c, 0x08, 0x48, 0x23, 0x23, 0x0e, 0x00, + 0x3d, 0x3d, 0x21, 0xe5, 0x35, 0x01, 0xec, 0x04, 0x99, 0xb0, 0x83, 0xa7, 0xda, + 0xd6, 0x85, 0xc5, 0x71, 0x27, 0xf4, 0xde, 0x64, 0x73, 0x3a, 0x88, 0x0c, 0x2d, + 0xb2, 0x8f, 0xda, 0xab, 0xf1, 0xb5, 0x42, 0xd2, 0x05, 0xf6, 0x64, 0xa3, 0x51, + 0x35, 0x71, 0x27, 0x11, 0xdc, 0xcc, 0xd9, 0x31, 0xa5, 0x0b, 0x9c, 0x56, 0x61, + 0x88, 0x23, 0x60, 0xd4, 0xca, 0xc0, 0x04, 0x76, 0x81, 0xbc, 0x2e, 0x2b, 0x3b, + 0xf6, 0xc9, 0x97, 0x60, 0xd7, 0xcf, 0xb4, 0xfa, 0x21, 0x39, 0x43, 0x77, 0xa4, + 0x55, 0x1c, 0x76, 0xd1, 0xf7, 0x5a, 0xc0, 0x3c, 0x26, 0x20, 0x54, 0xdf, 0xfd, + 0x79, 0xa9, 0xde, 0xd0, 0x5e, 0x88, 0x89, 0x58, 0x19, 0x9e, 0xea, 0x45, 0x01, + 0xe2, 0x99, 0x0a, 0x53, 0xa5, 0xcd, 0x2a, 0x46, 0xa4, 0x01, 0x57, 0x65, 0x88, + 0xfd, 0x7d, 0x05, 0x8a, 0x26, 0xf2, 0x84, 0x38, 0xe5, 0x78, 0x2f, 0x45, 0xac, + 0x1d, 0x07, 0xf6, 0xf6, 0xf5, 0xed, 0x73, 0x74, 0x1d, 0x57, 0x85, 0x83, 0x7a, + 0x6b, 0x84, 0x4b, 0x47, 0x47, 0x75, 0x71, 0x8c, 0x29, 0xdd, 0x99, 0x08, 0x4e, + 0x9f, 0x88, 0xef, 0x15, 0x3a, 0x83, 0x29, 0xf5, 0x32, 0xa6, 0x90, 0x17, 0xdc, + 0x3a, 0x97, 0xed, 0x75, 0x43, 0x67, 0x72, 0x30, 0x98, 0xe5, 0x76, 0x58, 0x40, + 0xb0, 0x22, 0x89, 0x72, 0x44, 0x74, 0x5f, 0xbb, 0xbb, 0x30, 0xa7, 0xcb, 0x54, + 0xfa, 0x05, 0x11, 0x16, 0x6e, 0x95, 0x44, 0x12, 0x20, 0x00, 0x61, 0x0b, 0xd2, + 0xaa, 0xcb, 0xd8, 0x23, 0x25, 0xa5, 0x9b, 0x95, 0x15, 0x4e, 0xcd, 0x82, 0xc8, + 0x8d, 0x23, 0xab, 0xd1, 0xe2, 0x07, 0x70, 0xff, 0xb8, 0xaa, 0xbf, 0x83, 0xfc, + 0x07, 0x34, 0x96, 0x4c, 0xcd, 0x41, 0x1d, 0x1c, 0x93, 0x57, 0x14, 0xe2, 0x4a, + 0xab, 0x56, 0x6f, 0x4f, 0x08, 0x42, 0x40, 0x14, 0xc4, 0xec, 0xa9, 0x1b, 0x59, + 0x0f, 0x08, 0x2b, 0x47, 0x3f, 0x36, 0x1c, 0x87, 0x41, 0x5d, 0x37, 0xbd, 0x20, + 0xd7, 0x0f, 0xd0, 0xab, 0xe3, 0xeb, 0x19, 0xf8, 0xe9, 0x51, 0xb4, 0x98, 0x3a, + 0x96, 0x4f, 0x27, 0xdb, 0xf8, 0xfa, 0xf4, 0x6a, 0x16, 0xa1, 0xaa, 0x99, 0x3e, + 0x04, 0xf4, 0xdd, 0x6c, 0x4c, 0xe4, 0xf8, 0x57, 0x2a, 0x62, 0x88, 0x19, 0xea, + 0x51, 0xc2, 0x21, 0xb7, 0x99, 0x62, 0x9c, 0xd0, 0xad, 0x87, 0x5e, 0x68, 0xad, + 0xec, 0x75, 0xab, 0x18, 0x66, 0xe4, 0xc0, 0x15, 0x5a, 0x9c, 0x74, 0xa7, 0xa5, + 0x7c, 0x0f, 0x2b, 0x5a, 0xdd, 0x96, 0xeb, 0xf6, 0x7a, 0x86, 0x5c, 0xb0, 0x5d, + 0xe9, 0x91, 0x99, 0xad, 0x8f, 0xa4, 0x9f, 0x51, 0xff, 0xea, 0x05, 0x42, 0xf2, + 0xa7, 0xb2, 0xc0, 0x8c, 0x2d, 0x89, 0x59, 0xba, 0xca, 0x59, 0xfc, 0xb6, 0xae, + 0x39, 0x59, 0xf6, 0xb3, 0x94, 0xe8, 0xe4, 0xc6, 0x51, 0xe4, 0x69, 0x7d, 0x79, + 0x7b, 0xf5, 0xde, 0x52, 0xbc, 0xee, 0xb0, 0x23, 0x01, 0xc8, 0x96, 0x2a, 0xc1, + 0x3c, 0x0a, 0x21, 0x0e, 0xa8, 0xaf, 0x27, 0x6c, 0x66, 0x4a, 0x39, 0xe9, 0x51, + 0x88, 0xfc, 0x5f, 0x5e, 0x13, 0xb1, 0x78, 0x01, 0x8f, 0x77, 0xdc, 0x04, 0x51, + 0x76, 0x88, 0x3d, 0x33, 0x38, 0x67, 0x35, 0xae, 0xdc, 0x52, 0x87, 0xb6, 0xc2, + 0xcb, 0xbf, 0xfb, 0x97, 0xc5, 0x58, 0xd1, 0x83, 0x59, 0x69, 0x28, 0x2e, 0xfe, + 0xf7, 0xf9, 0x28, 0xdf, 0x76, 0xe2, 0x82, 0x1a, 0x41, 0x84, 0x13, 0xeb, 0x3c, + 0x87, 0xca, 0x04, 0x5f, 0x1b, 0xf0, 0xa9, 0x38, 0x2a, 0x05, 0xfb, 0xe6, 0x6c, + 0xaa, 0xf1, 0x04, 0xb1, 0xb3, 0xd9, 0x4e, 0xdb, 0xf6, 0xeb, 0xe3, 0x90, 0x0f, + 0xd1, 0x02, 0x16, 0xdb, 0x99, 0x91, 0xaf, 0xed, 0x18, 0x65, 0xd1, 0x72, 0x19, + 0x90, 0x52, 0x96, 0xec, 0xf1, 0x23, 0x08, 0x95, 0x26, 0x53, 0x3d, 0x3d, 0x6b, + 0x28, 0x8e, 0x4d, 0x9a, 0x4d, 0xff, 0x8e, 0xc2, 0x1c, 0x96, 0xf5, 0x38, 0x00, + 0x05, 0x78, 0xdb, 0xcf, 0xe0, 0xf5, 0xf8, 0x89, 0x7c, 0xf8, 0x60, 0xab, 0x0c, + 0xf2, 0xd4, 0x1e, 0x15, 0x0f, 0xc8, 0xed, 0x19, 0xa5, 0x22, 0x9e, 0xa7, 0x64, + 0xde, 0xb6, 0x10, 0x99, 0x5c, 0x0c, 0xc5, 0x75, 0xbe, 0x18, 0xf6, 0x03, 0x79, + 0x71, 0xb6, 0xc0, 0x6f, 0x10, 0x0c, 0x03, 0xe2, 0x1c, 0x19, 0x64, 0x99, 0x68, + 0xc2, 0x49, 0x8c, 0xde, 0x56, 0xf5, 0x00, 0x43, 0x4f, 0x28, 0x0d, 0x37, 0x00, + ], + txid: [ + 0x9d, 0x4d, 0x04, 0x6d, 0xd8, 0x56, 0x3b, 0x1e, 0x43, 0x7b, 0x96, 0x1c, 0x39, + 0x58, 0x86, 0xdc, 0xee, 0xa1, 0xce, 0x6a, 0xa9, 0x50, 0x1a, 0xb3, 0x2f, 0x63, + 0x68, 0xd5, 0x3c, 0x23, 0xd7, 0x08, + ], + auth_digest: [ + 0x4a, 0xbd, 0xb3, 0x9c, 0x9d, 0xd0, 0xca, 0xee, 0x40, 0x71, 0x18, 0xd4, 0xbc, + 0xa2, 0xec, 0x07, 0xce, 0x30, 0x9e, 0x61, 0x49, 0x18, 0xf8, 0xc4, 0xfb, 0x9d, + 0xeb, 0x5a, 0xfe, 0x1a, 0xbb, 0x08, + ], + amounts: vec![2095567810517394, 6498403494284, 1319576288184536], + script_pubkeys: vec![ + vec![0x00, 0x00, 0x63, 0x65, 0x65], + vec![0xac, 0x51, 0x51, 0x6a, 0x51, 0x53, 0x6a], + vec![0x51, 0xac, 0x52, 0x00, 0x52, 0x6a, 0x53], + ], + transparent_input: Some(1), + sighash_shielded: [ + 0x95, 0x22, 0x22, 0x51, 0x87, 0xd3, 0xeb, 0xcb, 0x74, 0x9b, 0xad, 0x07, 0xc4, + 0xf6, 0xd1, 0xf5, 0x16, 0xb1, 0x3e, 0x6e, 0xc7, 0x8d, 0x5d, 0x90, 0x8f, 0x3f, + 0xf7, 0xfc, 0x8e, 0xcc, 0xd0, 0x7c, + ], + sighash_all: Some([ + 0x69, 0x28, 0x18, 0xcd, 0xe5, 0xbc, 0x48, 0x86, 0x9c, 0xce, 0x66, 0xfd, 0xdc, + 0x95, 0x4e, 0x98, 0xd4, 0xd0, 0xc4, 0xf7, 0xc3, 0x7f, 0x1b, 0xd6, 0xb7, 0xbe, + 0x01, 0x4f, 0x3c, 0xa0, 0x97, 0xa2, + ]), + sighash_none: Some([ + 0x0d, 0xef, 0xe3, 0xdd, 0x16, 0xef, 0x79, 0xad, 0xdd, 0xa3, 0xf2, 0x2a, 0xd3, + 0x96, 0xd1, 0x41, 0xd2, 0x07, 0x19, 0xc3, 0x02, 0x81, 0x4b, 0x8a, 0x17, 0x27, + 0xec, 0x1c, 0x4f, 0xd9, 0x25, 0xaf, + ]), + sighash_single: None, + sighash_all_anyone: Some([ + 0x13, 0xac, 0x95, 0x0e, 0x2e, 0x9d, 0x8f, 0x99, 0xc7, 0xef, 0x6a, 0xab, 0x5f, + 0xe5, 0x6a, 0xe6, 0x29, 0x73, 0x2e, 0x15, 0x36, 0x1a, 0xac, 0x06, 0xbc, 0xe3, + 0x26, 0x41, 0x7e, 0x30, 0x78, 0xbc, + ]), + sighash_none_anyone: Some([ + 0x12, 0x00, 0x1f, 0x63, 0x84, 0x09, 0x62, 0xd8, 0x35, 0xbb, 0xab, 0x14, 0x64, + 0xbd, 0xd1, 0x94, 0xd3, 0x7c, 0x2f, 0x6c, 0xec, 0x95, 0x15, 0xb7, 0x7d, 0xae, + 0xd5, 0x79, 0x4b, 0x16, 0x56, 0x8f, + ]), + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x3f, + 0xf8, 0x6f, 0x50, 0xec, 0xbf, 0xbe, 0x1b, 0x02, 0xe4, 0xad, 0x34, 0x96, 0x03, + 0x06, 0x6f, 0xc9, 0xc6, 0x61, 0xd6, 0x9f, 0x91, 0x1d, 0xfa, 0x72, 0x41, 0xc8, + 0xd5, 0x79, 0x2d, 0x43, 0xc4, 0x57, 0xd5, 0xde, 0x96, 0x52, 0x3a, 0x53, 0xd6, + 0x67, 0xec, 0x5c, 0x4e, 0xf9, 0x07, 0x52, 0x51, 0x6a, 0x63, 0x52, 0x6a, 0x00, + 0x96, 0xd7, 0x9b, 0xc5, 0x78, 0x33, 0xe9, 0x77, 0x17, 0x1c, 0x32, 0x4d, 0xce, + 0x2a, 0x1e, 0xa1, 0xe4, 0x30, 0x4f, 0x49, 0xe4, 0x3a, 0xe0, 0x65, 0xe3, 0xfb, + 0x19, 0x6f, 0x76, 0xd9, 0xb8, 0x79, 0xc7, 0x20, 0x08, 0x62, 0xea, 0xd1, 0x8d, + 0xea, 0x05, 0x65, 0x51, 0x52, 0x65, 0x53, 0x33, 0x86, 0xeb, 0x4c, 0x03, 0x3c, + 0xb3, 0xd8, 0x2c, 0xdf, 0xd4, 0x02, 0x00, 0x03, 0x53, 0x52, 0x52, 0xd2, 0xc5, + 0xd7, 0xc4, 0x74, 0xbb, 0x05, 0x00, 0x00, 0xee, 0x7e, 0xf4, 0x13, 0x04, 0x19, + 0x05, 0x00, 0x02, 0x53, 0x65, 0x00, 0x02, 0x91, 0xee, 0x85, 0x28, 0x7e, 0xf0, + 0x6d, 0x2e, 0x80, 0xec, 0x0b, 0xe4, 0x73, 0xfe, 0x5d, 0x64, 0xb7, 0x6d, 0xbb, + 0x8b, 0x5d, 0x05, 0x46, 0x72, 0x67, 0x4a, 0x79, 0x40, 0x11, 0x30, 0x3e, 0x28, + 0xb9, 0x0a, 0xde, 0x1d, 0x68, 0x27, 0x26, 0xf4, 0x20, 0x08, 0xb4, 0x6a, 0xd7, + 0xf8, 0xab, 0xdb, 0x18, 0x11, 0x7f, 0x72, 0x64, 0x13, 0x90, 0xf0, 0x86, 0xb6, + 0xe1, 0x49, 0x8b, 0xe6, 0x95, 0x48, 0x43, 0x33, 0xe8, 0xd2, 0x6e, 0x6a, 0x14, + 0xe5, 0x49, 0x37, 0xed, 0xd0, 0xde, 0x5f, 0x54, 0xb6, 0x72, 0x88, 0xbe, 0x47, + 0xbe, 0xdb, 0x59, 0x8f, 0xbf, 0xcf, 0x70, 0xb3, 0xe7, 0xb6, 0x33, 0xf3, 0xb7, + 0xe0, 0x39, 0xa3, 0x76, 0xf7, 0xac, 0xbb, 0xea, 0xdb, 0x34, 0xf9, 0x45, 0xbe, + 0xb9, 0xd7, 0xca, 0x0e, 0x4e, 0x3d, 0x5c, 0x5e, 0x4e, 0xb1, 0xd8, 0x52, 0x6e, + 0xbd, 0x13, 0xda, 0xcb, 0x1b, 0xa3, 0x57, 0x35, 0xc6, 0xd0, 0x4a, 0x45, 0x55, + 0xac, 0xf4, 0xbf, 0x11, 0x76, 0x26, 0x50, 0x0d, 0x77, 0xb3, 0x81, 0x89, 0xdd, + 0x48, 0x88, 0x04, 0x12, 0x25, 0xac, 0xbe, 0x38, 0x74, 0xa4, 0xc0, 0xf6, 0x07, + 0xfe, 0x67, 0x45, 0xf9, 0x35, 0x5b, 0x3f, 0xa1, 0x88, 0xf1, 0xd6, 0x5c, 0x09, + 0xf3, 0x89, 0xaf, 0x1b, 0x9d, 0x62, 0x32, 0xaa, 0x79, 0x44, 0x79, 0x19, 0xc5, + 0x50, 0xf6, 0xf3, 0x1f, 0xec, 0x35, 0x48, 0x1c, 0xb9, 0x22, 0xde, 0x2d, 0xb5, + 0xb4, 0xda, 0x2f, 0x81, 0x94, 0x86, 0x17, 0x02, 0x8e, 0x32, 0x17, 0x06, 0xa3, + 0xa7, 0x78, 0xc1, 0x93, 0x8c, 0x44, 0x3b, 0xb0, 0x0e, 0x5b, 0x0f, 0xf0, 0x6a, + 0xd8, 0xab, 0x9b, 0x1a, 0xb0, 0xc1, 0x14, 0x77, 0x67, 0x3f, 0x85, 0xdf, 0x95, + 0x61, 0xdb, 0xea, 0x45, 0xd5, 0xf9, 0x78, 0x1e, 0xbe, 0x31, 0x7a, 0x07, 0x10, + 0xae, 0x54, 0x61, 0xe3, 0x4f, 0xe6, 0xf1, 0xb1, 0xaa, 0x9b, 0x4e, 0x67, 0xb1, + 0x49, 0x10, 0x98, 0x48, 0x02, 0xc2, 0xa7, 0xe3, 0x81, 0x93, 0xbc, 0x7b, 0xdc, + 0x8b, 0xa3, 0xe4, 0xe3, 0xd1, 0xd9, 0x33, 0xbf, 0xb5, 0x80, 0xf5, 0xb3, 0xe8, + 0x7a, 0x2a, 0x06, 0x51, 0x70, 0x51, 0x41, 0x0f, 0xe1, 0xb4, 0xff, 0x1e, 0xa0, + 0xad, 0xe8, 0x24, 0xf3, 0x38, 0x51, 0x54, 0x56, 0xa5, 0x7c, 0x7a, 0x91, 0x6a, + 0x74, 0x38, 0x8e, 0xe8, 0xf1, 0x28, 0x1f, 0x9a, 0xde, 0x0a, 0xe2, 0xa2, 0x61, + 0x3a, 0x06, 0x12, 0xc4, 0x69, 0xdf, 0x79, 0x2b, 0x8d, 0xf4, 0xca, 0xe4, 0xfc, + 0x25, 0xc1, 0xca, 0xdb, 0xa9, 0x5a, 0x80, 0x7c, 0xe6, 0x1e, 0x5a, 0x53, 0x03, + 0xfa, 0xaf, 0x9e, 0x14, 0x65, 0x39, 0x96, 0xb5, 0xa8, 0xad, 0xc3, 0x4f, 0xd4, + 0x75, 0xef, 0x14, 0x99, 0x09, 0x4b, 0xab, 0xaf, 0x1f, 0x3f, 0x07, 0xda, 0x9a, + 0x39, 0x0b, 0x1d, 0x9f, 0xc9, 0xa0, 0x83, 0x27, 0x98, 0x7a, 0xdf, 0xe9, 0x56, + 0x48, 0x63, 0xfb, 0xdf, 0xa8, 0xf6, 0xb4, 0x6a, 0x88, 0x41, 0x58, 0x30, 0x99, + 0xaf, 0xb7, 0x87, 0x01, 0x18, 0xfa, 0xce, 0x76, 0x34, 0x7e, 0x40, 0xb6, 0xfd, + 0x8c, 0xd1, 0x55, 0x82, 0xae, 0x8e, 0x23, 0xbe, 0x9a, 0x02, 0x19, 0xbc, 0x3e, + 0x4e, 0x45, 0x46, 0xa3, 0x0d, 0x3b, 0xbb, 0xbd, 0x16, 0x86, 0x08, 0x68, 0x76, + 0xbe, 0x0e, 0x4c, 0x85, 0x9b, 0xe7, 0x1f, 0xb5, 0x8f, 0x4f, 0xab, 0x3d, 0x28, + 0xc0, 0xb4, 0xf7, 0xe7, 0x5a, 0xd1, 0xed, 0xb7, 0xf8, 0x89, 0x46, 0xfb, 0x40, + 0xcf, 0xa5, 0x78, 0x6a, 0x0f, 0xcb, 0xa1, 0x30, 0x3c, 0x83, 0x47, 0xec, 0xee, + 0x93, 0xd4, 0x6d, 0x14, 0x0b, 0xb5, 0xf6, 0x95, 0x31, 0xd6, 0x66, 0x54, 0x8b, + 0x10, 0x9c, 0xe7, 0x64, 0xbe, 0xad, 0x7c, 0x87, 0xbd, 0x4c, 0x87, 0x64, 0x94, + 0xde, 0x82, 0xdb, 0x6e, 0x50, 0x73, 0xa6, 0xc9, 0x4f, 0x7c, 0x09, 0x9a, 0x40, + 0xd7, 0xa3, 0x1c, 0x4a, 0x04, 0xb6, 0x9c, 0x9f, 0xcc, 0xf3, 0xc7, 0xdd, 0x56, + 0xf5, 0x54, 0x47, 0x76, 0xc5, 0x3b, 0x4d, 0xf7, 0x95, 0x39, 0x81, 0xd5, 0x5a, + 0x96, 0xa6, 0xdc, 0xff, 0x99, 0x04, 0xa9, 0x08, 0x42, 0xe5, 0xba, 0xfe, 0xc8, + 0x84, 0x0c, 0x2d, 0x25, 0x5b, 0xf5, 0xad, 0x61, 0xc4, 0x60, 0xf9, 0x8f, 0xeb, + 0x82, 0xa1, 0x0f, 0xa1, 0xc0, 0x99, 0xf6, 0x27, 0x76, 0x79, 0x82, 0x36, 0xc5, + 0xca, 0x7f, 0x1e, 0x46, 0xeb, 0xdb, 0x2b, 0x14, 0x4d, 0x87, 0x13, 0xe5, 0x6c, + 0x77, 0x2f, 0x2c, 0x3b, 0x86, 0x0e, 0xa5, 0xb0, 0x3a, 0x88, 0x54, 0xbc, 0x6e, + 0x65, 0x90, 0xd6, 0x3c, 0xc0, 0xea, 0x54, 0xf1, 0x0b, 0x73, 0xba, 0x24, 0x1b, + 0xf7, 0x4b, 0x63, 0x55, 0x51, 0xa2, 0xaa, 0xca, 0x96, 0x87, 0xac, 0x52, 0x69, + 0xfd, 0x36, 0x8b, 0x26, 0xd7, 0x0a, 0x73, 0x7f, 0x26, 0x76, 0x85, 0x99, 0x8a, + 0x3f, 0x7d, 0x26, 0x37, 0x91, 0x49, 0x09, 0xc7, 0x46, 0x49, 0x5d, 0x24, 0xc4, + 0x98, 0x63, 0x5e, 0xf9, 0x7a, 0xc6, 0x6a, 0x40, 0x08, 0x94, 0xc0, 0x9f, 0x73, + 0x48, 0x8e, 0xb7, 0xcf, 0x33, 0xf6, 0xda, 0xd1, 0x66, 0x6a, 0x05, 0xf9, 0x1a, + 0xd7, 0x75, 0x79, 0x65, 0xc2, 0x99, 0x36, 0xe7, 0xfa, 0x48, 0xd7, 0x7e, 0x89, + 0xee, 0x09, 0x62, 0xf5, 0x8c, 0x05, 0x1d, 0x11, 0xd0, 0x55, 0xfc, 0xe2, 0x04, + 0xa5, 0x62, 0xde, 0x68, 0x08, 0x8a, 0x1b, 0x26, 0x48, 0xb8, 0x17, 0x4c, 0xbc, + 0xfc, 0x8b, 0x5b, 0x5c, 0xd0, 0x77, 0x11, 0x5a, 0xfd, 0xe1, 0x84, 0x05, 0x05, + 0x4e, 0x5d, 0xa9, 0xa0, 0x43, 0x10, 0x34, 0x2c, 0x5d, 0xfc, 0x18, 0x60, 0x70, + 0xef, 0xe8, 0x0e, 0x2f, 0x4e, 0x1d, 0x9f, 0x77, 0xcd, 0x2c, 0xa7, 0xbb, 0x18, + 0xf0, 0x17, 0x94, 0xbb, 0x77, 0x9e, 0xb5, 0xaf, 0x6a, 0xb5, 0xb1, 0x33, 0x2b, + 0x62, 0x38, 0xc0, 0xf6, 0x65, 0xbe, 0x81, 0x33, 0xb7, 0xdc, 0x1d, 0x86, 0x04, + 0x4d, 0xb0, 0xf9, 0xdb, 0x40, 0xfb, 0x0e, 0x9f, 0x8b, 0xc2, 0xe4, 0xdb, 0x53, + 0x82, 0xa8, 0xb4, 0xf8, 0x15, 0xb4, 0xe8, 0x43, 0x66, 0xc6, 0x75, 0x04, 0xd3, + 0xf4, 0xd2, 0xfb, 0xef, 0x16, 0x65, 0x03, 0xaa, 0x0e, 0x1d, 0x14, 0x84, 0x57, + 0xc8, 0x6e, 0x8c, 0xd1, 0xc5, 0x4e, 0xa6, 0xa6, 0x0c, 0x90, 0xb2, 0xc3, 0x71, + 0x99, 0xba, 0x43, 0x64, 0xe8, 0x4b, 0xac, 0x37, 0x92, 0x98, 0xdf, 0x29, 0x32, + 0xe6, 0x9b, 0xb5, 0xd0, 0x45, 0x51, 0x6e, 0xfc, 0x33, 0xae, 0x6c, 0xc3, 0x94, + 0x7c, 0xeb, 0x09, 0xed, 0x37, 0x16, 0x67, 0x21, 0x2a, 0x83, 0x1b, 0x54, 0x85, + 0xea, 0xfc, 0xe8, 0x48, 0x81, 0x88, 0xea, 0x4e, 0x27, 0xd0, 0xcd, 0xf7, 0xdd, + 0xd3, 0x48, 0xab, 0xff, 0x77, 0x7f, 0x4a, 0x13, 0xbb, 0xc7, 0x16, 0xb6, 0xa5, + 0x94, 0x4e, 0xe7, 0x27, 0x96, 0x56, 0x90, 0xe2, 0x09, 0xb4, 0x9e, 0xb9, 0x62, + 0xc0, 0x39, 0x97, 0x5f, 0x93, 0x9e, 0xd5, 0xc6, 0xe4, 0xc4, 0x00, 0xd8, 0x87, + 0x75, 0x94, 0x33, 0xd3, 0xad, 0x71, 0x6d, 0xa0, 0xcb, 0x44, 0x61, 0x13, 0xc7, + 0x72, 0x7a, 0x64, 0xb5, 0x8c, 0x3f, 0x8a, 0x0f, 0x81, 0x18, 0x9f, 0x98, 0x00, + 0x52, 0x33, 0xa8, 0x13, 0x66, 0xae, 0xe7, 0x3c, 0xec, 0x85, 0x22, 0x8e, 0xbc, + 0xfd, 0x5e, 0xe3, 0xc3, 0xfb, 0x44, 0xdb, 0x76, 0xba, 0x24, 0x3f, 0x28, 0x42, + 0xb7, 0xb5, 0xfc, 0x74, 0x6a, 0xe5, 0x1b, 0x0b, 0xc4, 0xbd, 0x4f, 0xc9, 0xfd, + 0x83, 0x35, 0x65, 0xea, 0x85, 0x2b, 0x92, 0xb2, 0x24, 0xf6, 0x99, 0x03, 0x18, + 0xad, 0x8c, 0x7d, 0x94, 0x37, 0xe2, 0x0e, 0x2a, 0x1f, 0x20, 0xe8, 0x18, 0xf9, + 0x05, 0x7c, 0x5a, 0xba, 0xaa, 0x2e, 0x5c, 0x15, 0xb9, 0x49, 0x45, 0xcd, 0x42, + 0x4c, 0x28, 0xa5, 0xfa, 0x38, 0x5d, 0xad, 0xfe, 0x49, 0x07, 0xb2, 0x74, 0xd8, + 0x42, 0x70, 0x7d, 0xb3, 0x69, 0x7a, 0x5a, 0xe6, 0xc8, 0xf5, 0x42, 0xe5, 0xec, + 0xc0, 0x7f, 0xe4, 0x73, 0x50, 0xd1, 0x01, 0x46, 0x70, 0x21, 0x2e, 0xfe, 0x81, + 0xfb, 0x7c, 0x73, 0xe8, 0x45, 0x0d, 0xf8, 0x14, 0xef, 0x62, 0x32, 0xf7, 0x49, + 0x0f, 0x63, 0xcc, 0xf0, 0x74, 0x80, 0xf8, 0x84, 0xa6, 0x6e, 0xaf, 0xfc, 0x28, + 0xfe, 0xa4, 0x48, 0xd7, 0xb4, 0x01, 0xcd, 0xae, 0x10, 0xe7, 0xc0, 0xc7, 0xf9, + 0xa7, 0xb1, 0x53, 0x31, 0x96, 0x9f, 0xc8, 0xcb, 0x36, 0x39, 0x67, 0x73, 0xde, + 0x19, 0x19, 0x31, 0xc7, 0x50, 0xf6, 0xce, 0x5c, 0xaa, 0xf2, 0x97, 0x68, 0xeb, + 0xb2, 0x7d, 0xac, 0xc7, 0x38, 0x05, 0x6a, 0x81, 0x25, 0xb4, 0x77, 0x2b, 0xf8, + 0x7a, 0xe1, 0x0a, 0x8a, 0x30, 0x9b, 0x9b, 0xd6, 0x55, 0x04, 0x3c, 0xfc, 0x31, + 0x59, 0x49, 0x43, 0x68, 0xc5, 0xab, 0x8c, 0xad, 0xb7, 0xf6, 0x71, 0xe9, 0x62, + 0x6b, 0xd2, 0x63, 0xe3, 0x11, 0x81, 0xa6, 0x04, 0xb5, 0x06, 0xa0, 0x3b, 0x43, + 0x9a, 0x7f, 0xfe, 0x43, 0x55, 0x89, 0x24, 0x77, 0xe2, 0xbd, 0xf3, 0x38, 0xc6, + 0x2c, 0x39, 0x22, 0xf7, 0xd3, 0xc9, 0xa5, 0x6c, 0x71, 0x03, 0xd9, 0x11, 0x94, + 0x8a, 0x84, 0xb5, 0xae, 0x2d, 0xbb, 0x16, 0xa3, 0x76, 0x1a, 0xdd, 0x05, 0x3a, + 0x0f, 0x96, 0x7e, 0x6b, 0x5b, 0xc9, 0x42, 0x11, 0xb6, 0x54, 0x71, 0x53, 0x26, + 0x7c, 0x6e, 0xe1, 0xca, 0xd0, 0xd9, 0x74, 0xa7, 0x10, 0x88, 0x58, 0x37, 0x35, + 0xe4, 0xf6, 0x3d, 0x33, 0x15, 0x6d, 0xad, 0xd5, 0x4c, 0x2f, 0xaf, 0x89, 0x11, + 0x4a, 0x12, 0x7b, 0x97, 0xb9, 0x4c, 0xc2, 0xa2, 0x2e, 0xf3, 0x03, 0xf4, 0x59, + 0xd0, 0x4f, 0xc0, 0xb5, 0x3a, 0xce, 0x59, 0x18, 0xd4, 0x7f, 0xf3, 0x3a, 0x55, + 0x8b, 0xd7, 0x1a, 0x75, 0xf3, 0x55, 0xfb, 0xd0, 0x6b, 0xbc, 0xcf, 0x4e, 0x02, + 0xc3, 0xc0, 0xa4, 0xb6, 0x3d, 0x0c, 0xc9, 0x49, 0x80, 0x1d, 0x63, 0xa6, 0x4c, + 0xb2, 0xd3, 0x23, 0x73, 0xb2, 0xc7, 0xb2, 0x74, 0xab, 0x2d, 0xb4, 0x68, 0x21, + 0x42, 0xc8, 0xb2, 0x1d, 0x84, 0xc4, 0x81, 0xf5, 0xef, 0x21, 0xe4, 0xb5, 0xe3, + 0x60, 0x34, 0x51, 0xbf, 0x94, 0x77, 0x4d, 0x0e, 0xf4, 0x7f, 0x63, 0xfa, 0x6a, + 0xbb, 0x78, 0xd2, 0x1c, 0x19, 0x3c, 0xbe, 0x65, 0xb6, 0x95, 0xfe, 0x67, 0x42, + 0x3c, 0x1e, 0x2d, 0x31, 0x2e, 0x27, 0x76, 0xfa, 0x24, 0xec, 0xe8, 0x46, 0x83, + 0xe7, 0x48, 0x76, 0xc5, 0x5e, 0xa0, 0x36, 0x9e, 0x4e, 0xa0, 0xe8, 0x64, 0x94, + 0xe0, 0x0d, 0xde, 0x23, 0x6a, 0x16, 0x89, 0x73, 0x1f, 0x0a, 0x5d, 0x82, 0x03, + 0xaf, 0xde, 0x5c, 0x42, 0x36, 0x40, 0xb8, 0x1e, 0x4f, 0x63, 0x1c, 0x98, 0x1c, + 0x11, 0xa2, 0xe1, 0xd1, 0x84, 0xc6, 0x7c, 0x52, 0x8d, 0xf9, 0x2d, 0x53, 0xae, + 0xc4, 0x4a, 0x40, 0xa4, 0xea, 0x2a, 0x13, 0x1b, 0x47, 0x33, 0xcf, 0xe4, 0x5c, + 0x6b, 0x00, 0x12, 0xc3, 0xe9, 0xe2, 0x09, 0x75, 0xba, 0xae, 0xcb, 0x02, 0x32, + 0xdf, 0x88, 0x0b, 0xd7, 0xd1, 0xde, 0x13, 0xe1, 0x34, 0x94, 0x62, 0xec, 0x8d, + 0x5d, 0xf3, 0xe7, 0x80, 0xff, 0xa7, 0x2e, 0xba, 0x8a, 0x8d, 0xf7, 0xfc, 0xf3, + 0x98, 0xec, 0x23, 0x05, 0x13, 0xca, 0x9d, 0x61, 0x23, 0xf8, 0xb9, 0x1d, 0xe8, + 0x82, 0xc6, 0xa1, 0x9b, 0x05, 0x00, 0x3b, 0x52, 0x6e, 0x0b, 0x02, 0xc5, 0xca, + 0x17, 0x22, 0xba, 0xde, 0xee, 0x23, 0xd1, 0x45, 0xe8, 0xeb, 0x22, 0x13, 0xfc, + 0x4a, 0xf1, 0xe4, 0x50, 0xe4, 0xd5, 0x21, 0x7c, 0x66, 0x17, 0x00, 0x8c, 0x78, + 0xf4, 0xfb, 0x11, 0x12, 0xf4, 0x02, 0x8a, 0x70, 0x4f, 0xc5, 0xa9, 0x38, 0x2c, + 0x6b, 0x03, 0xe7, 0xd8, 0x08, 0x5e, 0x90, 0x6c, 0xf8, 0x4c, 0xa2, 0xc1, 0x20, + 0x7c, 0x87, 0xa2, 0xbc, 0xe2, 0x08, 0x0a, 0x98, 0x91, 0x66, 0x8d, 0x69, 0xb0, + 0x44, 0xbe, 0xce, 0xd6, 0xcd, 0xa3, 0x2c, 0x22, 0x9c, 0x91, 0x17, 0x91, 0x7a, + 0xa0, 0x7d, 0xdf, 0xfc, 0xd3, 0x77, 0x39, 0x5c, 0xba, 0x61, 0x6d, 0x63, 0xc0, + 0xb6, 0x9c, 0x01, 0xfc, 0xc4, 0x53, 0x91, 0xfd, 0x5b, 0x87, 0x63, 0xfb, 0x96, + 0xd7, 0xca, 0x33, 0x3a, 0x12, 0xde, 0x3c, 0xef, 0xa9, 0x1c, 0x6c, 0x98, 0xf9, + 0x47, 0x3b, 0x8e, 0x10, 0x4a, 0x71, 0x29, 0x3e, 0x46, 0x37, 0x47, 0x05, 0xba, + 0xf6, 0x5f, 0xa4, 0x13, 0x84, 0xba, 0x5c, 0x8e, 0x0c, 0x88, 0xa3, 0xeb, 0x07, + 0xe0, 0xbe, 0x34, 0xda, 0xdd, 0xfa, 0xbb, 0x7b, 0x65, 0x54, 0x3b, 0x5f, 0x39, + 0xcb, 0x20, 0x23, 0xd4, 0x67, 0x89, 0xeb, 0x7d, 0x98, 0x9a, 0xf7, 0x79, 0xe5, + 0xb8, 0xd2, 0x83, 0x85, 0xa8, 0x5b, 0x0d, 0xa2, 0xab, 0xe0, 0x7f, 0x0c, 0x2b, + 0xb4, 0x25, 0x5f, 0xd8, 0x17, 0x85, 0x60, 0xda, 0xf9, 0x75, 0x11, 0x19, 0x55, + 0xa2, 0xbc, 0xa3, 0x42, 0x3e, 0xee, 0xfc, 0x52, 0x7b, 0xe3, 0xa8, 0x54, 0x3e, + 0xb9, 0x0a, 0x5e, 0xc0, 0x2f, 0x35, 0xa7, 0xc6, 0x4b, 0x7d, 0xd5, 0x9a, 0x72, + 0xda, 0x00, 0x74, 0x63, 0x4e, 0x01, 0xd2, 0xab, 0xf3, 0x63, 0x7a, 0xdd, 0x77, + 0xc7, 0x35, 0x0f, 0x12, 0xb0, 0x11, 0xb2, 0x94, 0x16, 0x8e, 0xc7, 0x55, 0x76, + 0xe4, 0x7d, 0x16, 0x9e, 0x39, 0x38, 0xbf, 0x6a, 0xe2, 0xaa, 0x8f, 0xf7, 0xcf, + 0xba, 0x7c, 0xac, 0xb1, 0xf9, 0x2b, 0x6e, 0x4c, 0x24, 0x97, 0xbf, 0xfa, 0x9f, + 0x17, 0xca, 0xd2, 0x42, 0xfa, 0x9c, 0x31, 0x79, 0xc1, 0xa3, 0xaa, 0x81, 0xf7, + 0x36, 0x16, 0x49, 0x57, 0x2c, 0x71, 0x5c, 0x25, 0xa1, 0xf6, 0xcd, 0x5a, 0xce, + 0x82, 0xc0, 0x0a, 0xb2, 0x34, 0x2b, 0x9c, 0x3c, 0xb4, 0xff, 0xfd, 0xda, 0x16, + 0x0c, 0xa5, 0xab, 0x9e, 0x9b, 0xaf, 0x21, 0x39, 0xef, 0x9a, 0xfb, 0xe1, 0xb1, + 0xf3, 0x09, 0x46, 0x2a, 0xfc, 0xe4, 0x62, 0xa7, 0x9b, 0xb9, 0x69, 0x8e, 0x22, + 0xc9, 0x57, 0xc5, 0x90, 0xa7, 0x53, 0xa7, 0x6b, 0x87, 0xe0, 0x09, 0x12, 0x1e, + 0x06, 0xf6, 0xa1, 0xbf, 0x62, 0xa0, 0x8b, 0xf4, 0x35, 0xd9, 0x2e, 0x2f, 0xff, + 0xe8, 0x6e, 0x2a, 0x9c, 0xbb, 0xa9, 0x13, 0x3a, 0x68, 0xe4, 0xae, 0xbf, 0x33, + 0x7d, 0x85, 0xff, 0x6d, 0xcc, 0xe8, 0x80, 0x58, 0xd6, 0x5c, 0xd7, 0xde, 0x68, + 0x04, 0xd4, 0xaa, 0x07, 0xcc, 0x79, 0x39, 0xc7, 0x93, 0x20, 0x86, 0xfb, 0xc1, + 0x2e, 0x1a, 0x3b, 0x88, 0x12, 0x2b, 0xb6, 0x90, 0x8a, 0x88, 0x13, 0xc0, 0x21, + 0xde, 0x9f, 0xa9, 0xa4, 0x4e, 0x4c, 0x18, 0xdc, 0xb3, 0xd2, 0x1f, 0xaa, 0xbd, + 0xb4, 0x19, 0x31, 0xb2, 0xfd, 0x49, 0x76, 0x44, 0xdc, 0x3a, 0x15, 0x07, 0x04, + 0x20, 0xaf, 0x61, 0x5c, 0x04, 0x7b, 0xdc, 0xce, 0xc7, 0xb5, 0x03, 0x57, 0x3c, + 0x30, 0x7f, 0x3e, 0x2d, 0x3b, 0xbb, 0x64, 0x19, 0xc5, 0xa6, 0x23, 0xe1, 0x8a, + 0x64, 0x35, 0x16, 0xe9, 0x1d, 0x05, 0xac, 0xfe, 0xc1, 0x79, 0xf7, 0x67, 0x4c, + 0xec, 0x27, 0x21, 0xa1, 0x0f, 0xca, 0x69, 0x3d, 0x83, 0xcf, 0xe5, 0xb8, 0xcd, + 0xcc, 0x18, 0xf8, 0x1a, 0xd6, 0x17, 0xfa, 0x26, 0xf0, 0xdf, 0xb8, 0x36, 0xa5, + 0xa9, 0x06, 0xc6, 0xd8, 0xa1, 0x72, 0x67, 0xdc, 0x29, 0xc2, 0xa4, 0x86, 0xa3, + 0xd0, 0x45, 0x4c, 0x30, 0xe9, 0x3b, 0x5c, 0x54, 0x5d, 0x75, 0xb0, 0x86, 0x8d, + 0x6e, 0xa2, 0x7a, 0x37, 0x26, 0xd2, 0xe6, 0xd5, 0x5d, 0xcb, 0x90, 0xe2, 0x3f, + 0xf6, 0xb5, 0x08, 0x45, 0x9a, 0xa6, 0x99, 0xbf, 0xcb, 0xd5, 0x6f, 0x10, 0x99, + 0x77, 0x64, 0xd0, 0x87, 0x40, 0x89, 0x86, 0xe7, 0x3d, 0x6e, 0x28, 0x9b, 0xfa, + 0x3b, 0xce, 0x29, 0x26, 0x97, 0x93, 0xd2, 0x31, 0xe7, 0x8c, 0x66, 0x5f, 0xb6, + 0x1e, 0x30, 0x9c, 0x6b, 0x11, 0x5b, 0x9b, 0xca, 0x58, 0xa5, 0x1d, 0xb3, 0x04, + 0xc8, 0x74, 0xcd, 0xaf, 0x64, 0x34, 0x43, 0xbe, 0x0f, 0x88, 0x90, 0x32, 0xea, + 0x32, 0x5b, 0xf0, 0x71, 0x07, 0xfd, 0x41, 0xd6, 0x73, 0xee, 0xba, 0xe6, 0xfa, + 0x63, 0x7b, 0x70, 0xcc, 0x0e, 0xd3, 0xf0, 0x09, 0x58, 0xdf, 0xb8, 0xdc, 0xf0, + 0x0e, 0x85, 0xa1, 0xd0, 0xa6, 0xa8, 0x90, 0x81, 0x40, 0xc2, 0xf4, 0x34, 0xc2, + 0xe2, 0x60, 0xef, 0xb0, 0xbc, 0xa2, 0x00, 0x35, 0x04, 0xc9, 0x99, 0x93, 0xa9, + 0xe1, 0xc0, 0xff, 0x9c, 0xef, 0xe6, 0xa6, 0x65, 0xd7, 0x91, 0x42, 0x86, 0x90, + 0xe4, 0x7e, 0xf8, 0xc1, 0x31, 0xa8, 0xe9, 0xbf, 0xb4, 0xc3, 0x08, 0x02, 0x35, + 0x03, 0x2d, 0x73, 0x1b, 0x0d, 0x38, 0x41, 0x22, 0x5f, 0x1c, 0x11, 0xe2, 0xc2, + 0x8e, 0xe8, 0x4d, 0x35, 0xf9, 0x22, 0x61, 0x00, 0x56, 0x59, 0x72, 0xeb, 0x26, + 0x9d, 0x27, 0x8e, 0xf6, 0x49, 0x79, 0xbf, 0x65, 0x15, 0xed, 0x4a, 0x68, 0x40, + 0xb0, 0x88, 0x3a, 0x9e, 0x6e, 0xf6, 0x4a, 0x0e, 0xfc, 0xae, 0x1c, 0xf2, 0x1d, + 0xfe, 0x74, 0x85, 0x4e, 0x84, 0xc2, 0x74, 0x9f, 0xac, 0x03, 0x82, 0x52, 0x75, + 0xc9, 0xb6, 0x30, 0x21, 0x84, 0xc7, 0x2d, 0xf4, 0xc4, 0xbb, 0x28, 0x62, 0xe4, + 0xe8, 0xa7, 0xd9, 0xa4, 0xa2, 0x82, 0x86, 0x6f, 0x9a, 0x7b, 0x2c, 0xfc, 0x9a, + 0x56, 0x31, 0x3d, 0xa0, 0xc4, 0x7a, 0x34, 0xb7, 0xb9, 0xcd, 0xa3, 0xac, 0xe8, + 0x18, 0x5f, 0x07, 0xdf, 0x36, 0xe4, 0x48, 0xa7, 0x6a, 0xa4, 0x77, 0xf2, 0x24, + 0xd8, 0x7a, 0x07, 0x4f, 0x43, 0xaf, 0x5d, 0x5f, 0x79, 0xb3, 0xab, 0x11, 0x28, + 0xf0, 0x81, 0x91, 0x44, 0x7f, 0xa6, 0x46, 0xbf, 0xdd, 0xe5, 0xb5, 0x1e, 0x23, + 0x3c, 0xa6, 0x15, 0x5d, 0x10, 0x15, 0x85, 0xbc, 0x2c, 0x40, 0x15, 0x8a, 0xc2, + 0x10, 0x6e, 0x66, 0xa2, 0x6e, 0x46, 0x42, 0x33, 0x70, 0x63, 0x68, 0x76, 0xb4, + 0x34, 0xa7, 0x4f, 0x8c, 0xe8, 0x06, 0x00, 0x50, 0xb0, 0x82, 0xa7, 0x9b, 0x61, + 0xbb, 0x5d, 0x34, 0x4e, 0xb5, 0xa1, 0x15, 0x83, 0x26, 0xce, 0xd9, 0xa9, 0xd9, + 0xf5, 0x4f, 0xb2, 0xfe, 0x8f, 0x9f, 0x05, 0xcd, 0x11, 0x1e, 0xe4, 0x6c, 0x47, + 0x10, 0xf6, 0xf6, 0x3a, 0x62, 0x69, 0x45, 0x57, 0xef, 0x1b, 0x12, 0xc8, 0x80, + 0x06, 0xb6, 0x78, 0x72, 0x50, 0x5f, 0x4e, 0x88, 0x3b, 0x58, 0x59, 0x07, 0x92, + 0x9a, 0x2f, 0x3f, 0xdb, 0x0d, 0x8f, 0x79, 0x14, 0xc4, 0x2d, 0xde, 0x2d, 0x20, + 0x00, 0xf5, 0xae, 0x02, 0xd4, 0x18, 0x21, 0xc8, 0xe1, 0xee, 0x01, 0x38, 0xeb, + 0xcb, 0x72, 0x8d, 0x7c, 0x6c, 0x3c, 0x80, 0x02, 0x7e, 0x43, 0x75, 0x94, 0xc6, + 0x70, 0xfd, 0x6f, 0x39, 0x08, 0x22, 0x2e, 0xe7, 0xa1, 0xb9, 0x17, 0xf8, 0x27, + 0x1a, 0xbe, 0x66, 0x0e, 0x39, 0xe0, 0x51, 0xaa, 0xa6, 0xfc, 0xa1, 0x86, 0x22, + 0x76, 0xe2, 0xba, 0xa0, 0xfe, 0x0b, 0x16, 0x2a, 0xeb, 0xcf, 0xe3, 0xd9, 0x34, + 0x9c, 0x8d, 0x15, 0x4b, 0xb7, 0xee, 0x28, 0x21, 0x2c, 0x1b, 0xaa, 0x70, 0x5d, + 0x82, 0x07, 0x0d, 0x70, 0x32, 0xf2, 0x69, 0x5d, 0x17, 0x96, 0x80, 0x9f, 0xab, + 0x41, 0x24, 0x69, 0x26, 0xaf, 0x99, 0x2b, 0x6e, 0xee, 0x95, 0xa9, 0xa0, 0x6b, + 0xc4, 0x56, 0x2c, 0x5f, 0x2f, 0x1b, 0x19, 0x54, 0x95, 0x00, 0x37, 0x2e, 0x7a, + 0xd5, 0x79, 0xa6, 0xd6, 0xd7, 0x8b, 0x33, 0x15, 0x31, 0x30, 0xfb, 0x44, 0x8f, + 0xb7, 0x9e, 0x8a, 0x66, 0x9d, 0xb8, 0xa0, 0xf3, 0x5c, 0xdf, 0x9a, 0xe5, 0xd3, + 0x2d, 0x73, 0x2f, 0xc7, 0x94, 0x18, 0xe2, 0x3b, 0x45, 0x1d, 0xdc, 0x95, 0xa2, + 0x2a, 0xba, 0xbb, 0x05, 0x6e, 0xc6, 0xb5, 0xe8, 0xba, 0x4f, 0x52, 0x4d, 0xfa, + 0xfe, 0x87, 0x52, 0x62, 0xdd, 0x7b, 0xe4, 0x1c, 0xbb, 0xc6, 0x24, 0x20, 0xd4, + 0xad, 0x6d, 0xf5, 0xc9, 0xb7, 0x13, 0x60, 0x4f, 0x65, 0x60, 0x88, 0xa4, 0x48, + 0x5e, 0x93, 0xbe, 0x19, 0x07, 0xd2, 0x7a, 0xc6, 0xec, 0x3c, 0x57, 0x25, 0x9b, + 0xd6, 0x98, 0x1d, 0x42, 0xc1, 0xb7, 0x8a, 0x29, 0xad, 0x96, 0x85, 0xe6, 0x3c, + 0x49, 0x4d, 0x41, 0x29, 0x62, 0x3e, 0xa1, 0xa7, 0xff, 0xec, 0x85, 0xfa, 0x29, + 0x41, 0x10, 0x73, 0xed, 0xb2, 0x97, 0x8e, 0xf4, 0xe4, 0x69, 0xdd, 0xd5, 0xcd, + 0xa9, 0x86, 0x18, 0x99, 0x95, 0xf8, 0x8d, 0x6a, 0xb3, 0x66, 0xdb, 0x01, 0x90, + 0x01, 0xf5, 0xb2, 0x52, 0x88, 0xcf, 0x86, 0x0f, 0xd9, 0x98, 0xee, 0x57, 0x3c, + 0x8c, 0xc4, 0x8a, 0xa9, 0xef, 0xcf, 0x9b, 0x61, 0x7e, 0x04, 0x3c, 0x32, 0x9c, + 0xd1, 0xaa, 0x1a, 0x0e, 0xd3, 0xa4, 0x02, 0xfb, 0x96, 0xe3, 0x36, 0xc7, 0x19, + 0xe6, 0x25, 0x3c, 0xb6, 0x91, 0xaa, 0x0d, 0xb5, 0x27, 0x36, 0x62, 0x6e, 0xd1, + 0x97, 0x88, 0x75, 0x88, 0x8e, 0xc7, 0x6c, 0x84, 0x6b, 0xc2, 0x27, 0x27, 0x2a, + 0x58, 0x53, 0x17, 0xdf, 0xf0, 0xb1, 0x14, 0x8d, 0x92, 0xd6, 0xf5, 0xfb, 0x7d, + 0x95, 0x33, 0x67, 0x70, 0xa7, 0xd1, 0x6f, 0xac, 0x1a, 0xdd, 0x86, 0x07, 0x76, + 0xcb, 0x48, 0x02, 0x21, 0xf8, 0xfb, 0x33, 0xb6, 0x4c, 0xf6, 0xb9, 0xde, 0x90, + 0x07, 0x04, 0xa6, 0x0b, 0x2b, 0x9c, 0xe7, 0x9e, 0x3a, 0xe1, 0x4e, 0x5a, 0xb0, + 0xb4, 0xc7, 0x5a, 0x1b, 0x02, 0xc4, 0x97, 0x3c, 0x56, 0x4d, 0x74, 0x0e, 0x12, + 0x5c, 0x70, 0xc7, 0x8b, 0xa2, 0xbb, 0xe2, 0x8e, 0xeb, 0x57, 0x2b, 0xb1, 0x8e, + 0x3d, 0x3f, 0xc4, 0x83, 0x0f, 0x05, 0xc7, 0x14, 0x52, 0x3c, 0xa8, 0x19, 0x72, + 0x0a, 0xe2, 0x27, 0xfd, 0x1a, 0x0b, 0x20, 0x75, 0x29, 0x50, 0x20, 0xae, 0x84, + 0x69, 0xca, 0x01, 0x38, 0xf1, 0xf2, 0xce, 0x56, 0xc8, 0x11, 0x6f, 0x62, 0xad, + 0xf7, 0x70, 0x6b, 0xdb, 0x53, 0x88, 0x93, 0x77, 0x07, 0xa2, 0x90, 0x29, 0xb3, + 0x2d, 0x17, 0xc8, 0x1e, 0x2d, 0x8c, 0x0d, 0x21, 0x53, 0x1b, 0xca, 0xf7, 0x72, + 0x36, 0x03, 0x9b, 0xce, 0x9a, 0xca, 0xd1, 0x8b, 0x4a, 0xea, 0xe0, 0x3c, 0x0e, + 0xae, 0x22, 0x5d, 0x42, 0x04, 0xaa, 0x3f, 0x5e, 0x51, 0x6f, 0xc0, 0x07, 0xe6, + 0x1c, 0xfe, 0x3c, 0xd1, 0x16, 0xce, 0x00, 0x16, 0x92, 0x6c, 0x01, 0xa6, 0x97, + 0xc3, 0x68, 0xb5, 0x3f, 0x95, 0x85, 0xaf, 0x69, 0xfc, 0x14, 0x3d, 0xaa, 0xf6, + 0x1c, 0x5b, 0x72, 0x52, 0xf7, 0x3e, 0xc0, 0xa9, 0x46, 0x6a, 0x1b, 0x85, 0x76, + 0x4f, 0xb0, 0x83, 0x1b, 0x4a, 0x1a, 0x36, 0x89, 0x0e, 0x22, 0x4c, 0x01, 0xac, + 0xfc, 0xe4, 0x8e, 0xe3, 0xed, 0x93, 0x87, 0x73, 0x98, 0xe0, 0x72, 0x6d, 0x02, + 0x93, 0x6d, 0x0d, 0x03, 0x2e, 0x18, 0xe3, 0x28, 0x8b, 0x26, 0x70, 0xe1, 0x36, + 0x2c, 0x32, 0xd6, 0xe4, 0x73, 0x3b, 0x9d, 0xd2, 0xd5, 0xf2, 0x6e, 0x1f, 0xe3, + 0x06, 0xf7, 0x3c, 0x00, 0x7f, 0xdd, 0xca, 0xe9, 0xd9, 0xc0, 0xaa, 0xf1, 0x87, + 0xd7, 0x42, 0x8b, 0x1e, 0x9d, 0x47, 0x9c, 0x18, 0x23, 0x7b, 0x98, 0x28, 0xbc, + 0xa8, 0xb9, 0x8c, 0x9d, 0x9b, 0xec, 0x7d, 0x82, 0x70, 0xb5, 0xd8, 0xee, 0xc3, + 0xcc, 0x4f, 0x43, 0xfa, 0x01, 0x88, 0x52, 0x1b, 0xc6, 0x1b, 0x21, 0xdd, 0x04, + 0xe3, 0x7a, 0x83, 0xec, 0xe6, 0x8c, 0xa7, 0xa2, 0xfa, 0x6c, 0x8f, 0x9e, 0x34, + 0xa6, 0x29, 0x03, 0x35, 0xaa, 0x1f, 0xbd, 0x83, 0xd5, 0x4a, 0xaf, 0x44, 0x1e, + 0x31, 0x9e, 0xa4, 0x7a, 0x86, 0x2a, 0xd0, 0x29, 0x3c, 0xed, 0xf5, 0xdd, 0x9e, + 0xda, 0xde, 0xee, 0x33, 0xcb, 0x52, 0x2c, 0xd0, 0x11, 0x8b, 0xbd, 0x81, 0x1a, + 0xce, 0x9a, 0x23, 0xbd, 0xa3, 0x9a, 0xba, 0x72, 0xf1, 0x56, 0x6f, 0xc1, 0x68, + 0x84, 0x97, 0xd2, 0xa7, 0x92, 0x8c, 0x36, 0x70, 0x15, 0x25, 0x67, 0x8b, 0xc9, + 0x72, 0x14, 0xb3, 0x1b, 0x37, 0xba, 0xb4, 0x6b, 0x88, 0xf2, 0x7f, 0x04, 0x48, + 0xde, 0xcb, 0x31, 0x62, 0x2d, 0x0f, 0x0f, 0x87, 0xa8, 0x55, 0xba, 0x54, 0x00, + 0x03, 0x32, 0x03, 0x1f, 0x73, 0xab, 0xff, 0xd4, 0x65, 0x91, 0xda, 0x0b, 0x88, + 0x72, 0x35, 0x04, 0xed, 0xb2, 0x33, 0x72, 0x30, 0xda, 0xd2, 0xac, 0xc0, 0xd8, + 0xbb, 0x68, 0xbc, 0x83, 0x7a, 0x2f, 0xf9, 0x30, 0xbf, 0xf0, 0x6f, 0xde, 0x74, + 0xeb, 0x90, 0xaa, 0xe4, 0xf6, 0x0d, 0xbb, 0x6e, 0xb8, 0x27, 0xea, 0x99, 0x88, + 0x4a, 0xcd, 0x62, 0x85, 0xa9, 0x88, 0x92, 0x80, 0x2c, 0xf5, 0x9d, 0x5d, 0x60, + 0xd0, 0x16, 0x63, 0x38, 0x7b, 0x3e, 0xd2, 0x72, 0x3b, 0xd6, 0x48, 0x9e, 0x9c, + 0x2c, 0x10, 0x6d, 0x4a, 0xa2, 0xde, 0x23, 0xce, 0xd1, 0x6c, 0x72, 0x04, 0x29, + 0xc7, 0x75, 0x3a, 0x77, 0x38, 0xec, 0x7d, 0x9d, 0xb8, 0x62, 0x42, 0x29, 0xed, + 0xd2, 0x17, 0xb8, 0x0d, 0x74, 0x87, 0x5a, 0x14, 0xca, 0xe4, 0x86, 0x3f, 0x13, + 0x9e, 0x9c, 0x0b, 0x13, 0x1b, 0x2a, 0x4c, 0x28, 0x07, 0x1a, 0x38, 0xec, 0x61, + 0xf6, 0x68, 0x01, 0xaa, 0x59, 0x56, 0xfc, 0xb2, 0xa4, 0x6b, 0x95, 0x87, 0x66, + 0x5b, 0x75, 0x71, 0xaa, 0x03, 0x48, 0x1f, 0xd8, 0xd9, 0xd5, 0x69, 0x8f, 0x83, + 0x6f, 0xc8, 0x63, 0x5e, 0x69, 0xe3, 0xbd, 0xe4, 0x2f, 0x4a, 0xc0, 0x71, 0x32, + 0x8b, 0x54, 0x09, 0xf6, 0xe4, 0x2d, 0x79, 0x0a, 0xed, 0xd7, 0x3b, 0xc1, 0xa2, + 0x35, 0x47, 0x23, 0xb3, 0xb8, 0x19, 0xd0, 0x63, 0x7a, 0x6f, 0xa4, 0x66, 0x39, + 0x46, 0xa3, 0x0a, 0xc5, 0xaf, 0xdd, 0x30, 0xce, 0x83, 0x0f, 0x67, 0x91, 0xb4, + 0x57, 0x52, 0x70, 0xa1, 0x72, 0x0f, 0x91, 0x86, 0x6e, 0x2b, 0x86, 0xf4, 0x78, + 0x88, 0x94, 0xc8, 0xda, 0x62, 0xd8, 0xb9, 0x1f, 0xaf, 0x52, 0x0e, 0x3b, 0xed, + 0xbc, 0x12, 0x06, 0xa5, 0xa5, 0xe6, 0xef, 0xd3, 0xdf, 0xde, 0x08, 0x43, 0xc3, + 0xb0, 0x67, 0x57, 0x64, 0x3f, 0xc0, 0x06, 0x00, 0x88, 0x38, 0xca, 0x47, 0x30, + 0x87, 0xf8, 0x97, 0x79, 0x18, 0xcc, 0x1b, 0x81, 0xc9, 0xe6, 0x8e, 0x3b, 0x88, + 0x8f, 0xe6, 0xf7, 0xc6, 0x30, 0xf1, 0xbc, 0x7a, 0xe1, 0x88, 0xf5, 0x12, 0x84, + 0x20, 0x41, 0xca, 0xda, 0x1e, 0x05, 0xf8, 0x66, 0xd2, 0x56, 0x2d, 0xbe, 0x09, + 0xc4, 0xb4, 0x30, 0x68, 0xf7, 0x54, 0xda, 0xd3, 0x4d, 0xf0, 0xfc, 0xfc, 0x18, + 0x1f, 0x31, 0x80, 0x1a, 0x79, 0x92, 0xd2, 0xf1, 0x6b, 0xe0, 0x21, 0x1b, 0x4a, + 0x22, 0xf6, 0x2a, 0xab, 0x64, 0x70, 0x1b, 0xf4, 0xa4, 0xe6, 0xd6, 0x66, 0xfc, + 0x30, 0x4a, 0x5c, 0x79, 0xc6, 0x09, 0xac, 0xc4, 0x3b, 0x00, 0xb4, 0x86, 0x48, + 0x93, 0xd3, 0x7d, 0x50, 0x07, 0xf0, 0xc3, 0x29, 0xa4, 0x75, 0x50, 0x52, 0x57, + 0x75, 0x70, 0xdd, 0x38, 0xfa, 0xc0, 0x43, 0xcd, 0x91, 0xc1, 0x2e, 0xe3, 0x4e, + 0x9c, 0xfa, 0xe3, 0x92, 0xa7, 0x8b, 0xda, 0xbd, 0x4e, 0xe3, 0x1d, 0xc0, 0xde, + 0xb0, 0x2f, 0xe7, 0xb1, 0xd8, 0xb0, 0x17, 0x8a, 0xc9, 0x51, 0x31, 0x05, 0xfc, + 0xc7, 0xe3, 0x0b, 0xa8, 0xe0, 0x16, 0xaa, 0x36, 0xa6, 0xb5, 0xdf, 0x5e, 0x5a, + 0x19, 0x09, 0xf6, 0x3a, 0xba, 0x09, 0x5d, 0x98, 0x77, 0xa8, 0xf2, 0xdc, 0x53, + 0xf4, 0x6f, 0x6c, 0x9b, 0x07, 0xad, 0xdf, 0x14, 0x6f, 0x4f, 0xfa, 0x50, 0x1f, + 0x9d, 0xd3, 0xcf, 0xf9, 0x24, 0xe3, 0x01, 0x0f, 0xaf, 0x50, 0x4e, 0x2b, 0x8a, + 0xca, 0x73, 0x57, 0xac, 0xbf, 0xfe, 0xc7, 0x3a, 0xc3, 0x4c, 0x1a, 0x73, 0x16, + 0x0f, 0x82, 0x01, 0xc4, 0x9e, 0x7f, 0x8b, 0x55, 0x65, 0x9b, 0x5a, 0x29, 0x43, + 0x7d, 0xd3, 0xd1, 0x58, 0xc7, 0xd0, 0xd7, 0xb9, 0x6c, 0x9f, 0x20, 0x51, 0x49, + 0x7a, 0xcb, 0x80, 0xbb, 0x58, 0x77, 0x1f, 0xae, 0x06, 0xba, 0x86, 0x99, 0x33, + 0x83, 0xfc, 0x67, 0x73, 0xe7, 0x29, 0x6c, 0xa4, 0x30, 0x8c, 0x6a, 0x3a, 0x90, + 0xbb, 0x38, 0x38, 0xc4, 0x2a, 0xbf, 0x62, 0xdd, 0x2d, 0x84, 0xba, 0xbe, 0x33, + 0x86, 0xcf, 0x17, 0xe5, 0x75, 0x59, 0xb0, 0x36, 0x46, 0xf9, 0x64, 0xd9, 0x8a, + 0x2b, 0x6a, 0x0b, 0xe5, 0x87, 0x57, 0xff, 0x6e, 0x44, 0x6c, 0xff, 0x25, 0x51, + 0x07, 0x89, 0x71, 0x34, 0x4f, 0x2b, 0x12, 0xc4, 0x84, 0xdf, 0x0a, 0xcb, 0xc9, + 0xa2, 0x45, 0x48, 0x02, 0x2d, 0xf2, 0xe1, 0xe8, 0x88, 0xcb, 0x63, 0x42, 0x1c, + 0x31, 0x4a, 0x62, 0x2a, 0x9a, 0xef, 0x0b, 0xc0, 0x57, 0xcb, 0x11, 0x3c, 0x70, + 0x3a, 0xea, 0x39, 0x2e, 0x90, 0x7a, 0x26, 0x4f, 0x2f, 0xd9, 0xac, 0x3a, 0x9f, + 0x3a, 0x8a, 0xbb, 0xb1, 0xdc, 0x1b, 0xc4, 0x53, 0xab, 0xd5, 0x18, 0x1e, 0x54, + 0x57, 0xb8, 0xd3, 0x4e, 0xb7, 0xb1, 0x51, 0x3a, 0xb8, 0x1d, 0x3f, 0x0a, 0x3c, + 0x7f, 0x7f, 0xcf, 0x2f, 0xbb, 0x4e, 0x26, 0x32, 0x19, 0x93, 0xa5, 0x13, 0xad, + 0x3d, 0x7f, 0x4a, 0xfe, 0x6c, 0x1b, 0xbd, 0xc6, 0x57, 0x58, 0x50, 0x80, 0xbb, + 0x5a, 0x0f, 0x25, 0x97, 0x3d, 0x63, 0xeb, 0x20, 0xad, 0xa0, 0x16, 0x6b, 0xbd, + 0x8a, 0x39, 0xff, 0x93, 0x24, 0x6f, 0x27, 0x89, 0x73, 0x2a, 0xd0, 0x55, 0x87, + 0xf8, 0xdb, 0x7b, 0xc8, 0x7c, 0x24, 0x2c, 0xfd, 0x36, 0xce, 0x68, 0x5a, 0x4b, + 0x65, 0x69, 0x86, 0xc3, 0x9f, 0xd7, 0xfc, 0xb2, 0x3c, 0x91, 0x91, 0x3e, 0x46, + 0x11, 0x19, 0x1e, 0xdc, 0xc8, 0x8b, 0x78, 0xf1, 0x45, 0xea, 0x29, 0xd2, 0x71, + 0xb9, 0x40, 0xc6, 0x99, 0x41, 0xe4, 0xc3, 0xfd, 0x2d, 0x71, 0xf3, 0xb1, 0x90, + 0x69, 0x0e, 0xe1, 0x6f, 0x5d, 0x14, 0xac, 0x22, 0x24, 0xe6, 0xfc, 0x89, 0x59, + 0x76, 0x54, 0x52, 0x7d, 0xab, 0xe7, 0x2e, 0x75, 0xd2, 0xd2, 0xa1, 0x3a, 0x9f, + 0xba, 0xa6, 0x37, 0x8e, 0x8a, 0x26, 0x43, 0x21, 0x08, 0x7a, 0x19, 0x00, 0xef, + 0xe3, 0xca, 0xd1, 0x4a, 0x57, 0x96, 0x86, 0xaa, 0x36, 0x36, 0xbd, 0x37, 0x5b, + 0xd3, 0x13, 0x6b, 0xee, 0x0b, 0xda, 0xab, 0xcf, 0xac, 0x88, 0x1b, 0xc7, 0x01, + 0x81, 0x27, 0x21, 0xe6, 0xfb, 0x75, 0xaa, 0x07, 0x2d, 0x2d, 0x18, 0x7e, 0x62, + 0x25, 0x8d, 0x65, 0xa1, 0x92, 0x15, 0x7c, 0xdf, 0x2e, 0xc3, 0x21, 0x40, 0x7f, + 0x68, 0x2f, 0x5e, 0xec, 0x6a, 0x32, 0x97, 0xab, 0x20, 0xb7, 0x06, 0x1c, 0x62, + 0x24, 0x57, 0x16, 0xa4, 0x4f, 0x71, 0xfb, 0xfc, 0x34, 0xc7, 0x9b, 0x44, 0xe0, + 0x9e, 0x42, 0x12, 0xac, 0x26, 0x53, 0xf6, 0xc4, 0x03, 0x64, 0x3e, 0x1c, 0x5b, + 0x9a, 0xd1, 0x34, 0xd8, 0x9c, 0x68, 0x0b, 0x70, 0x72, 0x83, 0xaf, 0x54, 0x32, + 0x6f, 0xc4, 0xf8, 0x4d, 0x6a, 0x58, 0x29, 0xa0, 0xad, 0x48, 0x30, 0x80, 0x6c, + 0x05, 0x75, 0x84, 0x92, 0xcd, 0x6a, 0xc4, 0x6b, 0xa0, 0x1a, 0x2b, 0x37, 0x22, + 0xb5, 0xe4, 0xcd, 0xaf, 0xbb, 0x3f, 0x36, 0x78, 0x5f, 0x42, 0x4a, 0xf0, 0x44, + 0xda, 0xc5, 0xdb, 0x5f, 0x7d, 0xf8, 0x39, 0xeb, 0x63, 0xc0, 0xc1, 0x7d, 0x8b, + 0x0c, 0x79, 0xdb, 0x86, 0x30, 0x94, 0x20, 0x15, 0xbe, 0x13, 0xf7, 0x9a, 0xf6, + 0xf4, 0x3e, 0x5a, 0xb0, 0x77, 0x81, 0x14, 0x79, 0x8f, 0x44, 0x22, 0x58, 0xee, + 0xdc, 0x43, 0x6f, 0xcc, 0x38, 0x6b, 0x36, 0xb5, 0x7e, 0x19, 0x17, 0xd7, 0x20, + 0x17, 0x73, 0x66, 0xf4, 0x24, 0xb0, 0xa5, 0x4b, 0x0b, 0x60, 0xf4, 0xfb, 0x13, + 0x58, 0xc2, 0x0a, 0xa4, 0x1d, 0xc5, 0x02, 0xe1, 0xdd, 0x8a, 0x16, 0x33, 0xf3, + 0xd8, 0xe3, 0x27, 0x6b, 0x59, 0xe7, 0xd2, 0xc4, 0xe6, 0x24, 0xa6, 0xf5, 0x36, + 0x95, 0xbc, 0xaf, 0x24, 0x7e, 0x36, 0x48, 0x3f, 0x13, 0xb2, 0x04, 0x42, 0x22, + 0x37, 0xfc, 0x6a, 0xb3, 0xeb, 0xa0, 0x2f, 0xc4, 0x14, 0x2b, 0x42, 0x97, 0xeb, + 0xb5, 0x68, 0x3d, 0xb8, 0xd2, 0x43, 0x19, 0x70, 0x6a, 0xd2, 0x6a, 0xaf, 0xd8, + 0x1c, 0x53, 0xb7, 0x40, 0xf3, 0x45, 0x43, 0xa6, 0xb3, 0xe9, 0xf5, 0xbb, 0x7d, + 0x5c, 0x49, 0xe8, 0xc3, 0x7f, 0x61, 0x49, 0x21, 0x25, 0x4f, 0x32, 0x12, 0x39, + 0x4c, 0x79, 0x7d, 0x1c, 0xee, 0x78, 0x99, 0xb7, 0xb4, 0xb6, 0x5b, 0x59, 0xb7, + 0x34, 0x2f, 0x92, 0x53, 0x1c, 0x1d, 0x59, 0xe1, 0x79, 0x70, 0xb7, 0x31, 0x74, + 0x14, 0x43, 0x8c, 0xd8, 0x0b, 0xd0, 0xf9, 0xa6, 0x7c, 0x9b, 0x9e, 0x55, 0x2f, + 0x01, 0x3c, 0x11, 0x5a, 0x95, 0x4f, 0x35, 0xe0, 0x61, 0x6c, 0x68, 0xd4, 0x31, + 0x63, 0xd3, 0x34, 0xda, 0xc3, 0x82, 0x70, 0x33, 0xe5, 0xad, 0x84, 0x88, 0xbf, + 0xd9, 0xc4, 0xbb, 0xbe, 0x8f, 0x59, 0x35, 0xc6, 0xc5, 0xea, 0x04, 0xc3, 0xad, + 0x49, 0xc7, 0x47, 0xa9, 0xe7, 0x23, 0x1b, 0xcd, 0x7d, 0x16, 0x21, 0x5e, 0x6e, + 0x80, 0x73, 0x7d, 0x6b, 0x54, 0xfe, 0xc8, 0xb8, 0x84, 0x02, 0xf0, 0x47, 0x52, + 0x45, 0xe1, 0x74, 0xa7, 0x45, 0xb8, 0x31, 0xf8, 0xfe, 0x03, 0xa7, 0x6f, 0xb9, + 0xce, 0xca, 0x4d, 0x22, 0xb7, 0x83, 0xc3, 0x28, 0xc6, 0x91, 0x5c, 0x43, 0x40, + 0x50, 0x64, 0xae, 0x56, 0xbc, 0x89, 0xe6, 0x4d, 0x15, 0x78, 0xe4, 0xd3, 0xa3, + 0x4b, 0xb9, 0x55, 0x91, 0xea, 0xf1, 0xd3, 0xda, 0x02, 0xa4, 0x54, 0x9f, 0xa8, + 0x0d, 0xb0, 0xff, 0x7c, 0xb0, 0x39, 0x93, 0xb6, 0x8a, 0xe1, 0x5a, 0x30, 0xe8, + 0x79, 0x49, 0xaa, 0x08, 0x0e, 0x94, 0xab, 0xde, 0x68, 0x89, 0x8c, 0x33, 0x92, + 0xa2, 0x17, 0xd6, 0x49, 0x61, 0x6b, 0xbe, 0x73, 0x9b, 0x13, 0xd1, 0x4d, 0xf0, + 0x3f, 0xf2, 0x76, 0x71, 0x48, 0x9b, 0xe0, 0xb4, 0xbe, 0xba, 0xaf, 0xa7, 0xd1, + 0xe6, 0x39, 0xd5, 0xb3, 0xe9, 0x94, 0xff, 0xb6, 0xb7, 0xa2, 0x09, 0xf6, 0xad, + 0xfe, 0x8d, 0x1e, 0x5c, 0xcf, 0x01, 0x0c, 0x19, 0x16, 0x8a, 0xeb, 0x18, 0xaa, + 0x9d, 0x68, 0x7e, 0x24, 0xad, 0xc0, 0xb1, 0x13, 0x39, 0x07, 0xbd, 0x3a, 0xa0, + 0xe8, 0x22, 0x1e, 0xe0, 0x65, 0xa0, 0x69, 0xc7, 0x3c, 0xbc, 0xec, 0xe8, 0x2b, + 0x56, 0x9d, 0x65, 0x2c, 0xa3, 0x32, 0x9b, 0x8a, 0x7b, 0x99, 0x72, 0x10, 0x87, + 0x96, 0xb2, 0xcf, 0x4b, 0x3d, 0x10, 0xa9, 0xa7, 0xbb, 0x40, 0x3c, 0x65, 0xac, + 0xab, 0x43, 0xd1, 0x85, 0x36, 0xb1, 0x2b, 0x43, 0xbe, 0xfc, 0x0b, 0xe0, 0xa1, + 0xbd, 0x36, 0x97, 0x72, 0x33, 0x80, 0x38, 0xa9, 0xc0, 0x29, 0x5d, 0x3a, 0x78, + 0xb6, 0xf5, 0x5f, 0x30, 0xe0, 0x54, 0x3e, 0x9d, 0xee, 0x24, 0x0e, 0x50, 0x68, + 0x62, 0x9a, 0x85, 0xa2, 0x4c, 0x98, 0x36, 0x72, 0x95, 0xb1, 0xc2, 0x8b, 0x03, + 0xcb, 0xe3, 0x2a, 0x04, 0x53, 0xcf, 0xc6, 0xc3, 0x51, 0x25, 0x1c, 0x64, 0x28, + 0xc3, 0x76, 0x0f, 0x2b, 0xdc, 0x3a, 0x3a, 0x21, 0xc9, 0x92, 0xd0, 0xeb, 0xc8, + 0xcc, 0x8f, 0xa6, 0x30, 0x6d, 0x3e, 0x3a, 0x46, 0x21, 0x1c, 0xcc, 0x57, 0x0f, + 0xa9, 0xde, 0x86, 0x96, 0xe4, 0x4b, 0x2e, 0xbc, 0x13, 0xa1, 0xb8, 0x45, 0x57, + 0x17, 0xc9, 0x91, 0xa8, 0xeb, 0x18, 0x22, 0xff, 0x69, 0x1d, 0xc1, 0x04, 0x0d, + 0x2d, 0x39, 0xa0, 0x1e, 0xb4, 0x5e, 0xe8, 0xf7, 0xd0, 0x9b, 0x03, 0x8d, 0x83, + 0x83, 0xe1, 0x9b, 0xc3, 0x0e, 0x64, 0x03, 0x82, 0x8c, 0xdb, 0x65, 0x2a, 0x55, + 0x6b, 0x12, 0x04, 0x09, 0x31, 0x40, 0x2a, 0xa6, 0xac, 0x34, 0xfc, 0x19, 0xfd, + 0xc0, 0x6e, 0x2e, 0x77, 0x87, 0xf5, 0xb7, 0x7b, 0x04, 0x5f, 0xd0, 0x98, 0xc0, + 0x31, 0xbd, 0xbd, 0x46, 0x27, 0x76, 0x09, 0xd8, 0x42, 0xf4, 0x84, 0x24, 0xed, + 0xa3, 0x1e, 0x3c, 0xf2, 0xcd, 0xd6, 0x43, 0x85, 0xba, 0xd3, 0x11, 0x88, 0x58, + 0xd1, 0x42, 0xd9, 0x06, 0xea, 0xdb, 0x75, 0x90, 0xc9, 0x41, 0x36, 0xda, 0x6a, + 0x06, 0x35, 0x14, 0xd6, 0xa2, 0x5f, 0x7b, 0x37, 0xd7, 0x66, 0x4f, 0x9b, 0x97, + 0x09, 0x43, 0x3e, 0x6e, 0x70, 0x21, 0x18, 0xa4, 0xab, 0x9e, 0x7a, 0x7a, 0x3e, + 0x62, 0x59, 0x12, 0x99, 0x37, 0xd2, 0x9d, 0x0d, 0xb2, 0x60, 0x70, 0x52, 0x3e, + 0x8b, 0x06, 0x43, 0x13, 0x0a, 0xbe, 0xfe, 0x94, 0x3b, 0x40, 0x12, 0x98, 0xae, + 0x01, 0xa3, 0xab, 0x00, 0xab, 0xbc, 0x60, 0xd7, 0xdb, 0x93, 0x3c, 0x7f, 0x07, + 0xa8, 0xbf, 0x0f, 0x7c, 0xe1, 0x66, 0x0b, 0xcc, 0xb4, 0x5e, 0x04, 0x2b, 0x45, + 0x1b, 0x93, 0x50, 0x02, 0xce, 0xce, 0x27, 0xf3, 0x6a, 0xba, 0x56, 0x47, 0xac, + 0x28, 0xd8, 0x18, 0x6c, 0xdd, 0x1f, 0xb9, 0x5d, 0xc1, 0x35, 0xd4, 0x89, 0x92, + 0xf6, 0x8d, 0xa1, 0x2a, 0xd6, 0x1a, 0xc7, 0x56, 0x68, 0x0d, 0xd7, 0xf8, 0xd0, + 0x77, 0x4a, 0xbd, 0x6c, 0xfd, 0xa2, 0xf0, 0x32, 0xaf, 0x3b, 0xe1, 0x39, 0xa6, + 0x33, 0xd6, 0x73, 0x3c, 0x75, 0xd1, 0xab, 0xa8, 0x90, 0x18, 0xc8, 0x57, 0x2b, + 0x99, 0xcd, 0x30, 0xc5, 0x37, 0x06, 0x79, 0x41, 0xdf, 0x1c, 0x4b, 0xc1, 0xfd, + 0x57, 0x0f, 0x7b, 0x4d, 0xdc, 0x97, 0x51, 0x86, 0x23, 0xe3, 0xae, 0x4a, 0x87, + 0xbd, 0xb9, 0x66, 0xc9, 0x4d, 0x86, 0x1e, 0x80, 0xde, 0x88, 0xc2, 0x92, 0xae, + 0xe9, 0x38, 0x71, 0x94, 0xe2, 0x56, 0xc6, 0x70, 0x07, 0x52, 0x30, 0x1c, 0x73, + 0xfc, 0x95, 0x65, 0xa4, 0x04, 0x80, 0xd8, 0x12, 0x6e, 0x9d, 0x08, 0x58, 0x79, + 0xe2, 0x4b, 0x16, 0xe9, 0xc4, 0x85, 0xd8, 0xf0, 0xd6, 0x18, 0xca, 0x0d, 0xd1, + 0x21, 0xb5, 0x1a, 0x7c, 0xab, 0x23, 0x0c, 0x5b, 0x45, 0x67, 0x2b, 0xdb, 0x8e, + 0xa3, 0xa0, 0x40, 0xf7, 0xaa, 0xa0, 0x98, 0xba, 0x26, 0x02, 0x5d, 0x2e, 0xab, + 0x79, 0x48, 0x69, 0x3d, 0xd5, 0xf6, 0xd3, 0x09, 0x65, 0x01, 0xe9, 0xe0, 0x71, + 0x25, 0xd7, 0xeb, 0x29, 0x3b, 0x3a, 0xba, 0xd5, 0x7f, 0xd5, 0xf0, 0x11, 0x64, + 0x70, 0x2d, 0xae, 0x64, 0xbd, 0xba, 0x8c, 0x92, 0x4f, 0xb0, 0x79, 0x96, 0x79, + 0xd7, 0x7f, 0x98, 0xd3, 0x03, 0x91, 0x9f, 0xb4, 0xa7, 0xff, 0x26, 0xa9, 0x6f, + 0x13, 0x7a, 0x5e, 0x5c, 0xb9, 0x5b, 0xc4, 0xc6, 0xff, 0x99, 0x93, 0x52, 0x6b, + 0xda, 0x15, 0x03, 0x16, 0x8a, 0xb4, 0x8c, 0xbd, 0x45, 0x15, 0x39, 0x27, 0xd3, + 0x04, 0x30, 0x42, 0x3d, 0xbd, 0xf0, 0x66, 0x05, 0xf5, 0xb5, 0x4b, 0x80, 0x8f, + 0xeb, 0x22, 0xb2, 0x08, 0xb0, 0x64, 0x58, 0x18, 0x47, 0xb2, 0xf6, 0x4c, 0xa6, + 0x48, 0x37, 0x00, 0x72, 0x16, 0xde, 0x6e, 0xca, 0xff, 0xeb, 0x4b, 0x69, 0xe6, + 0x33, 0x47, 0xf8, 0x4a, 0xbc, 0xad, 0x8f, 0x2e, 0x75, 0x7d, 0x58, 0x61, 0xce, + 0x77, 0xee, 0x46, 0x51, 0x3d, 0xa7, 0x41, 0x68, 0x37, 0xdc, 0xb2, 0x3d, 0x33, + 0xea, 0x72, 0xaf, 0x23, 0xd0, 0xad, 0x8c, 0x93, 0x07, 0xd0, 0xb5, 0x85, 0x8d, + 0xa9, 0x5b, 0x77, 0xff, 0xf9, 0x02, 0x7b, 0x88, 0x59, 0xe1, 0x1d, 0xcb, 0xd5, + 0x98, 0x35, 0x0e, 0xee, 0x50, 0x93, 0x94, 0x81, 0x70, 0x8e, 0xa7, 0x08, 0xeb, + 0x9f, 0x66, 0x43, 0x88, 0xb9, 0xc6, 0x4d, 0x6a, 0xf0, 0xf9, 0x66, 0x90, 0x34, + 0x24, 0x00, 0x34, 0x8e, 0x92, 0x9e, 0x07, 0x46, 0x02, 0x53, 0xf3, 0x83, 0x90, + 0xf8, 0x7b, 0xd6, 0xc0, 0x53, 0x08, 0xc3, 0xbd, 0xe2, 0x52, 0x28, 0xe0, 0xfa, + 0x08, 0x80, 0xb0, 0x8e, 0xf3, 0x4a, 0x5a, 0x9c, 0xc0, 0xea, 0x0a, 0x67, 0xca, + 0x65, 0xb6, 0xff, 0xd0, 0x05, 0x57, 0x29, 0x09, 0xf1, 0xc4, 0x2d, 0xd7, 0x45, + 0xee, 0xee, 0x9d, 0xd6, 0xb4, 0x43, 0x9c, 0x9f, 0x3f, 0x98, 0xa1, 0x18, 0xfe, + 0x16, 0x69, 0x8e, 0x9c, 0xef, 0xf5, 0x58, 0xf1, 0x60, 0x66, 0x97, 0x5f, 0xe3, + 0x95, 0x83, 0xe9, 0xb5, 0x85, 0x3b, 0x13, 0x11, 0x39, 0x15, 0x80, 0x01, 0x9f, + 0xe5, 0x5d, 0x59, 0xd1, 0xc8, 0x28, 0xd3, 0xfe, 0xb6, 0xa3, 0xb9, 0xce, 0x92, + 0xd0, 0x89, 0xae, 0x4b, 0x40, 0x8e, 0x23, 0xd6, 0xa4, 0x37, 0xd4, 0x98, 0x9b, + 0x51, 0x9b, 0x7a, 0x9e, 0xb0, 0x8a, 0xe6, 0xd4, 0x48, 0xa7, 0xa1, 0x6e, 0x8a, + 0xed, 0x26, 0xa2, 0xec, 0xd0, 0xca, 0xd8, 0x08, 0x44, 0xfd, 0x06, 0x50, 0xd8, + 0xc4, 0xe4, 0xd2, 0xaf, 0x90, 0x65, 0x67, 0x48, 0xd8, 0x09, 0x9a, 0x0c, 0x75, + 0x6f, 0xc1, 0x07, 0x87, 0x7d, 0x45, 0x84, 0x40, 0xb9, 0x05, 0x00, 0xce, 0xd4, + 0x92, 0x99, 0xde, 0xc8, 0x4c, 0xce, 0xd4, 0xfd, 0xf0, 0xd8, 0x94, 0x83, 0x9a, + 0x6c, 0xfd, 0x5e, 0x4b, 0x7c, 0xb8, 0x35, 0xb8, 0x33, 0x08, 0x96, 0x4e, 0x3c, + 0x46, 0x87, 0x3f, 0x16, 0x33, 0x31, 0x7b, 0x91, 0xd2, 0x92, 0x36, 0xea, 0x90, + 0xe3, 0x65, 0xd1, 0x62, 0xcc, 0x05, 0x1c, 0x84, 0x6d, 0x24, 0x21, 0x76, 0xda, + 0xf6, 0xd2, 0x86, 0x18, 0xae, 0x31, 0xfb, 0xaa, 0xe9, 0x99, 0xa9, 0x3f, 0x17, + 0x5c, 0x69, 0x38, 0xe6, 0x31, 0xa0, 0x81, 0xf2, 0xc1, 0xf3, 0xfd, 0x78, 0x25, + 0x49, 0xd3, 0xf3, 0x24, 0x4f, 0xe0, 0x04, 0x0e, 0x25, 0x85, 0x72, 0x0d, 0x93, + 0x5f, 0x23, 0xc1, 0x0f, 0x2e, 0x01, 0xdc, 0xa8, 0xba, 0xed, 0xfd, 0xaa, 0x55, + 0xd2, 0x7a, 0x22, 0xeb, 0x52, 0x5d, 0xc6, 0xeb, 0xba, 0x06, 0xca, 0x2e, 0xa3, + 0xba, 0xfb, 0x95, 0x8c, 0x01, 0xd5, 0x35, 0x88, 0x06, 0xc2, 0xbc, 0x32, 0x62, + 0x2b, 0xc9, 0xf0, 0xec, 0x47, 0x9d, 0x99, 0xc1, 0xa3, 0xb1, 0x58, 0xb5, 0x14, + 0xd1, 0x62, 0x1d, 0x6a, 0x21, 0x8d, 0x2e, 0xcf, 0x81, 0x04, 0xb3, 0x14, 0x88, + 0x58, 0x5e, 0x41, 0x13, 0x28, 0x61, 0xb4, 0xbd, 0x4f, 0x28, 0xb3, 0xe2, 0xf4, + 0xb7, 0x62, 0x49, 0x2d, 0xd5, 0xf9, 0x1e, 0xd8, 0x82, 0x7b, 0x49, 0xd2, 0xde, + 0x8c, 0x09, 0x08, 0x43, 0x73, 0x0d, 0x24, 0x08, 0xa2, 0xa3, 0x04, 0xaa, 0x1e, + 0x2e, 0x13, 0x70, 0xa6, 0xbf, 0x6c, 0x2b, 0xc7, 0x3f, 0xf0, 0x0d, 0x89, 0x3b, + 0xc1, 0x28, 0xad, 0xdb, 0x76, 0xd1, 0xe1, 0xe5, 0x26, 0x84, 0x1e, 0xc0, 0x98, + 0xbc, 0x2f, 0x1f, 0xdb, 0x1b, 0x21, 0xff, 0xab, 0x41, 0xf9, 0x01, 0x50, 0xbf, + 0xe1, 0x9e, 0x39, 0x03, 0xfc, 0xee, 0xf5, 0x92, 0x90, 0x9f, 0x09, 0x80, 0xd6, + 0x89, 0xde, 0x7f, 0x8e, 0x6a, 0x5c, 0x62, 0xa7, 0x77, 0xd1, 0x75, 0x00, 0x2a, + 0x13, 0x7d, 0xe8, 0x5b, 0x88, 0x88, 0x92, 0x91, 0x98, 0x11, 0x7a, 0xa5, 0xd6, + 0x19, 0x5b, 0x0f, 0x68, 0xbb, 0xd6, 0x7c, 0x3c, 0x28, 0x63, 0x22, 0xc1, 0xf1, + 0xe6, 0x35, 0x58, 0x3c, 0x23, 0x9b, 0x61, 0x95, 0x49, 0x4d, 0x7f, 0xd4, 0x5f, + 0x7c, 0x55, 0xe3, 0x4a, 0x6c, 0xb7, 0x19, 0x4a, 0x3d, 0x63, 0x76, 0xe8, 0xa3, + 0xcd, 0xdc, 0xe4, 0xc1, 0xdf, 0x40, 0x18, 0x66, 0x90, 0x26, 0x6b, 0x16, 0xbc, + 0xd4, 0xc9, 0xfa, 0x68, 0xaf, 0x6e, 0x53, 0x65, 0xe9, 0x4e, 0xcb, 0xe7, 0x2b, + 0x00, 0x73, 0x67, 0x13, 0x71, 0xc6, 0xe2, 0xc6, 0x88, 0xad, 0xea, 0xd9, 0x9b, + 0x49, 0x4d, 0x02, 0x2f, 0x69, 0x29, 0xbd, 0xa6, 0x58, 0x2b, 0xdd, 0x2d, 0xb8, + 0x74, 0x17, 0xfe, 0x35, 0x23, 0x9e, 0x2b, 0x95, 0x52, 0x97, 0xe6, 0x9f, 0x00, + 0xfd, 0x29, 0x87, 0xf2, 0xda, 0x2b, 0x94, 0xb9, 0x95, 0xfe, 0xcb, 0xe6, 0x22, + 0xa7, 0x35, 0xef, 0x7f, 0x12, 0x07, 0xf6, 0x71, 0x62, 0x94, 0x89, 0x20, 0x2b, + 0x01, 0xaa, 0xc4, 0x92, 0xe1, 0x9b, 0xab, 0xc2, 0xb3, 0xc6, 0x8e, 0xc4, 0x8a, + 0xc4, 0xa9, 0xc8, 0x9e, 0xc6, 0xa8, 0xe1, 0x9b, 0x8a, 0xc4, 0xa9, 0xc7, 0x87, + 0xe2, 0xb1, 0xbb, 0xe2, 0xb1, 0xbc, 0xc4, 0xab, 0xe1, 0x9b, 0x8e, 0xe1, 0x9b, + 0x9d, 0xe1, 0x9a, 0xbf, 0xc8, 0xa3, 0xe1, 0x9b, 0xa4, 0xc7, 0xbf, 0xc3, 0x80, + 0x28, 0xe1, 0x9a, 0xb5, 0x6d, 0xc7, 0xbf, 0xc8, 0xa6, 0xe1, 0x9b, 0xb0, 0xc8, + 0x95, 0xc8, 0xb2, 0xc4, 0xad, 0xc4, 0xa7, 0xc3, 0x88, 0xc7, 0xb0, 0xc2, 0xb6, + 0xc6, 0xac, 0xc3, 0xac, 0x2e, 0xc7, 0x8d, 0xe1, 0x9a, 0xb9, 0xc3, 0x99, 0xc9, + 0x87, 0xe1, 0x9a, 0xa8, 0xc4, 0xb0, 0x4c, 0xc8, 0x9a, 0xc6, 0x9c, 0xc3, 0xa9, + 0x5d, 0xc5, 0x92, 0xc2, 0xb0, 0xc7, 0xaf, 0xc3, 0xa7, 0xc3, 0xb7, 0xc6, 0xb8, + 0xc7, 0xbc, 0xe1, 0x9a, 0xaf, 0xc3, 0xb1, 0xc5, 0x83, 0xc5, 0x83, 0xc6, 0xb8, + 0xc3, 0xba, 0xc5, 0xa1, 0xc3, 0x9c, 0xc8, 0xac, 0xc8, 0x93, 0xc2, 0xae, 0xc3, + 0xa7, 0x5d, 0xc5, 0x99, 0xc6, 0x88, 0xc4, 0x94, 0xc3, 0xbe, 0x37, 0xc6, 0xa8, + 0xc7, 0x8e, 0xe1, 0x9a, 0xb4, 0xe2, 0xb1, 0xbe, 0xc3, 0x92, 0xc3, 0xb9, 0xc3, + 0x88, 0xc3, 0x89, 0x03, 0xdd, 0x2f, 0xb4, 0xb8, 0xaf, 0xc4, 0x71, 0x25, 0xb2, + 0x46, 0x15, 0x9d, 0xd1, 0xed, 0xf5, 0xca, 0x9f, 0xee, 0x38, 0xc9, 0xbd, 0x89, + 0x46, 0x66, 0x3a, 0x10, 0x7c, 0x00, 0x84, 0xa3, 0x84, 0x7b, 0x27, 0xd2, 0x27, + 0x54, 0xab, 0x0e, 0x39, 0x6b, 0xba, 0xeb, 0xaf, 0xe8, 0x59, 0xc1, 0x31, 0xeb, + 0xc9, 0x3f, 0xf2, 0x95, 0x3b, 0x28, 0xf7, 0x22, 0x6b, 0x7a, 0x59, 0x13, 0xa4, + 0x67, 0xc9, 0x10, 0x4e, 0x17, 0xa5, 0x8a, 0xbf, 0x54, 0x29, 0x64, 0xed, 0x6f, + 0xb8, 0x7c, 0x77, 0xcf, 0x2e, 0x10, 0xe5, 0x31, 0x27, 0x74, 0x81, 0x2a, 0x30, + 0xdd, 0x5f, 0x5f, 0xe7, 0x4e, 0xff, 0x61, 0xe0, 0xcb, 0xab, 0x3c, 0xec, 0x75, + 0xd0, 0xae, 0xf9, 0x50, 0x83, 0x18, 0x94, 0x52, 0xdd, 0x3d, 0x9e, 0xdf, 0x44, + 0x87, 0x3c, 0x73, 0x4c, 0x8b, 0x24, 0xf2, 0x12, 0x96, 0xe4, 0xe9, 0xef, 0x11, + 0x7d, 0x7f, 0xb9, 0x77, 0xe3, 0xb0, 0xe6, 0x40, 0x6e, 0x63, 0x08, 0x59, 0x06, + 0x33, 0x1a, 0x93, 0x03, 0x3d, 0x1c, 0xb8, 0x36, 0x8b, 0xbf, 0x02, 0x69, 0x74, + 0xda, 0x89, 0x0a, 0x71, 0xc8, 0xf2, 0x5c, 0xd0, 0x89, 0x70, 0x5e, 0x43, 0x8d, + 0xb9, 0xc9, 0x81, 0xb5, 0x7a, 0x31, 0xca, 0xba, 0x64, 0xd9, 0x03, 0x86, 0xdf, + 0x3b, 0xb4, 0x05, 0x52, 0x31, 0xb3, 0x2d, 0x61, 0x32, 0xe1, 0x72, 0x99, 0x4a, + 0xd5, 0x28, 0x80, 0x34, 0xe1, 0x6d, 0x15, 0x95, 0x3b, 0x28, 0xf7, 0x22, 0x6b, + 0x7a, 0x59, 0x13, 0xa4, 0x67, 0xc9, 0x10, 0x4e, 0x17, 0xa5, 0x8a, 0xbf, 0x54, + 0x29, 0x64, 0xed, 0x6f, 0xb8, 0x7c, 0x77, 0xcf, 0x2e, 0x10, 0xe5, 0x31, 0x27, + 0xc3, 0xc2, 0xdd, 0x63, 0x12, 0x5e, 0x0f, 0xa5, 0x30, 0x86, 0x1a, 0x71, 0x0d, + 0xf8, 0xe4, 0x81, 0xf2, 0x71, 0x29, 0x20, 0xf8, 0x78, 0x7e, 0x0a, 0xed, 0xfe, + 0x61, 0x8a, 0xff, 0x50, 0xa3, 0x35, 0x62, 0x13, 0x88, 0x4d, 0x62, 0x62, 0xc1, + 0x1d, 0xeb, 0xf2, 0xba, 0x7e, 0x8a, 0xd6, 0x69, 0x2c, 0xb1, 0x70, 0x78, 0x33, + 0x14, 0x18, 0xda, 0x4b, 0xe0, 0x64, 0xff, 0x52, 0x70, 0x07, 0x39, 0x34, 0xf9, + 0x22, 0x1f, 0xd1, 0x8b, 0xa0, 0xac, 0x77, 0xc4, 0x03, 0x2b, 0x9c, 0xec, 0xc9, + 0x08, 0x14, 0xf8, 0x74, 0x8e, 0x74, 0xd3, 0x6a, 0x72, 0x2d, 0xf2, 0x3f, 0xf2, + 0x67, 0x19, 0x1b, 0x0f, 0xd2, 0xd7, 0x8c, 0x44, 0x3c, 0xe8, 0x16, 0x21, 0x14, + 0x1e, 0x1d, 0x34, 0x7c, 0x57, 0x1c, 0xe0, 0xb5, 0xd7, 0x21, 0x77, 0x95, 0x3b, + 0x28, 0xf7, 0x22, 0x6b, 0x7a, 0x59, 0x13, 0xa4, 0x67, 0xc9, 0x10, 0x4e, 0x17, + 0xa5, 0x8a, 0xbf, 0x54, 0x29, 0x64, 0xed, 0x6f, 0xb8, 0x7c, 0x77, 0xcf, 0x2e, + 0x10, 0xe5, 0x31, 0x27, 0xbd, 0xc5, 0x5e, 0x79, 0x9c, 0x01, 0xad, 0x86, 0x41, + 0x90, 0x4e, 0x3b, 0x1d, 0xd2, 0x9e, 0x1a, 0x96, 0x4c, 0x73, 0x7d, 0x3c, 0x15, + 0x5a, 0xfb, 0x30, 0x7b, 0x74, 0x8e, 0x41, 0x12, 0xb4, 0x0b, 0x77, 0xd5, 0xed, + 0x57, 0x00, 0xe6, 0x00, 0x2b, 0x18, 0xb0, 0xfe, 0xd2, 0xcf, 0xfd, 0xf6, 0x1f, + 0xd9, 0x93, 0x4b, 0x60, 0x73, 0x2f, 0x4d, 0x37, 0x81, 0x0a, 0x91, 0xac, 0xef, + 0x1e, 0x03, 0x8b, 0x01, 0x01, 0xca, 0xdd, 0xf0, 0xd9, 0x1b, 0xd3, 0xd7, 0x6c, + 0x19, 0x80, 0x1d, 0x81, 0x6e, 0xe0, 0x38, 0x97, 0xd0, 0x39, 0x34, 0x23, 0x96, + 0x0b, 0xe8, 0x4b, 0x5f, 0x68, 0x7f, 0x10, 0xda, 0x16, 0x20, 0x5f, 0x53, 0xd8, + 0xda, 0x60, 0xf1, 0x11, 0x92, 0x33, 0x4a, 0xae, 0xb8, 0x94, 0xa9, 0x0e, 0x0e, + 0x2e, 0xc5, 0x61, 0xd1, 0x1c, 0x75, 0x7d, 0x3c, 0x31, 0xad, 0x6d, 0xe1, 0xa9, + 0xbb, 0x2d, 0xc9, 0xd3, 0x51, 0x65, 0x47, 0xd2, 0x4b, 0xe6, 0x45, 0x6b, 0xc8, + 0x95, 0x75, 0x5c, 0xd7, 0x3d, 0x50, 0xd4, 0xdc, 0xa3, 0x16, 0x01, 0xa4, 0x6e, + 0xd2, 0xdf, 0xf3, 0x09, 0xbb, 0x7a, 0x37, 0xfa, 0xeb, + ], + txid: [ + 0x09, 0xbb, 0x1e, 0x43, 0x83, 0x0d, 0x69, 0xa2, 0xa2, 0xad, 0x87, 0x08, 0x3c, + 0xcb, 0x1a, 0xd6, 0x99, 0xab, 0x35, 0x06, 0xf1, 0x0d, 0xed, 0xa3, 0x11, 0xe2, + 0x00, 0xbd, 0xe2, 0x3d, 0xcf, 0x70, + ], + auth_digest: [ + 0x95, 0xf7, 0xc2, 0x3c, 0x3d, 0x3e, 0x5c, 0x76, 0x80, 0xc5, 0x75, 0xba, 0xc9, + 0xe9, 0xf6, 0xf5, 0xfb, 0xeb, 0x6e, 0x79, 0xc7, 0x45, 0x08, 0xae, 0xbe, 0xb2, + 0x32, 0xda, 0xa6, 0x48, 0x2e, 0xb2, + ], + amounts: vec![579546436167526, 887877936944436], + script_pubkeys: vec![ + vec![0x65, 0x51, 0x65, 0x63, 0x51, 0x63, 0x65, 0xac, 0x53], + vec![0x65, 0x6a, 0x6a, 0x6a], + ], + transparent_input: Some(0), + sighash_shielded: [ + 0xea, 0x5d, 0x93, 0xea, 0x37, 0x06, 0xef, 0x8b, 0xf9, 0x40, 0x87, 0x3b, 0x98, + 0x29, 0x34, 0x74, 0x5a, 0xdc, 0x32, 0x47, 0xad, 0x2b, 0x00, 0x0b, 0x23, 0xb7, + 0xc5, 0xcd, 0x36, 0xd5, 0x57, 0x43, + ], + sighash_all: Some([ + 0x8a, 0x5f, 0xcb, 0x0a, 0xa1, 0x91, 0x0d, 0x49, 0xda, 0x3b, 0x58, 0x9e, 0xb1, + 0x8f, 0x1f, 0x34, 0x1d, 0x68, 0x46, 0xe0, 0x24, 0x64, 0xdb, 0x17, 0xa4, 0x17, + 0x02, 0xb8, 0x75, 0x45, 0xc7, 0x9e, + ]), + sighash_none: Some([ + 0xf9, 0x9f, 0x21, 0xfc, 0xf4, 0x46, 0xad, 0x9b, 0x32, 0x25, 0x19, 0x82, 0xf2, + 0x68, 0xab, 0x73, 0xc8, 0xc0, 0x97, 0x43, 0x8b, 0x2c, 0xbb, 0x01, 0x92, 0x46, + 0x56, 0x9c, 0xa0, 0xcf, 0x59, 0xd6, + ]), + sighash_single: Some([ + 0x83, 0xcf, 0x4e, 0xa5, 0x65, 0x14, 0xd2, 0x83, 0x51, 0xa6, 0x67, 0x06, 0xaa, + 0xe7, 0x6a, 0xb8, 0xc4, 0x5d, 0x6e, 0x09, 0x2e, 0x88, 0xdf, 0x3f, 0x85, 0x42, + 0x0d, 0x58, 0xfb, 0x44, 0x97, 0x9b, + ]), + sighash_all_anyone: Some([ + 0xa1, 0x31, 0x7a, 0x3a, 0xc8, 0x5d, 0xa5, 0x45, 0x63, 0x52, 0xf9, 0xef, 0xa7, + 0x94, 0x32, 0x8b, 0x4b, 0x48, 0x5f, 0x5b, 0xbd, 0x34, 0xf0, 0x17, 0xde, 0xc6, + 0xb4, 0x4d, 0x3a, 0x6f, 0xe7, 0xbf, + ]), + sighash_none_anyone: Some([ + 0xc0, 0xba, 0x71, 0x5f, 0x98, 0x3a, 0xff, 0x1c, 0xde, 0x53, 0x70, 0xbf, 0x89, + 0x0f, 0x4f, 0x7a, 0x20, 0x67, 0xa3, 0x9f, 0xe3, 0x82, 0x0f, 0x43, 0xe4, 0x80, + 0x38, 0x08, 0xb8, 0x48, 0xae, 0x2e, + ]), + sighash_single_anyone: Some([ + 0xf9, 0x69, 0x1f, 0xba, 0x67, 0xe3, 0x31, 0x48, 0xd2, 0x01, 0x56, 0xc7, 0xc4, + 0x5d, 0xda, 0x7a, 0xdd, 0xee, 0xa9, 0xbb, 0x7c, 0x1b, 0x64, 0xd1, 0xcf, 0x4d, + 0xf0, 0x39, 0xc4, 0x96, 0xc9, 0x2d, + ]), + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xf5, + 0x7f, 0x1d, 0xe3, 0x76, 0xb5, 0x18, 0x0e, 0x00, 0x02, 0x3f, 0x20, 0xe2, 0x4c, + 0xed, 0xdb, 0x03, 0x00, 0x03, 0x00, 0x00, 0x6a, 0x71, 0x6e, 0x8a, 0x7c, 0xd6, + 0x0a, 0x04, 0x00, 0x04, 0x00, 0x00, 0x53, 0x52, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0xc3, 0x9a, 0xc8, 0xbb, 0xc9, 0x8b, 0xc5, 0xb1, 0xc3, 0xbd, 0xc3, 0xb0, 0xc5, + 0x90, 0x01, 0x20, 0x74, 0x0d, 0xe5, 0x97, 0x16, 0x42, 0xae, 0xa8, 0x2e, 0x70, + 0xd5, 0x93, 0xc2, 0xda, 0x81, 0xaf, 0xa6, 0x20, 0x9d, 0x1f, 0x81, 0x70, 0xf7, + 0x4b, 0x23, 0xeb, 0x4d, 0x0e, 0xc2, 0x6a, 0xd6, 0xbc, 0x9b, 0x13, 0xf3, 0xdc, + 0xde, 0xe5, 0x5d, 0x4b, 0xc2, 0xbc, 0xdd, 0xe1, 0xfd, 0xda, 0x5b, 0x47, 0x4d, + 0x5b, 0xf0, 0x21, 0x42, 0x05, 0xcb, 0x97, 0xd1, 0x2e, 0xdc, 0x58, 0x6e, 0x74, + 0xce, 0x17, 0xe9, 0x4e, 0xb6, 0xfa, 0x7c, 0xda, 0xe4, 0x22, 0xea, 0xb3, 0xd9, + 0x52, 0x5c, 0x0f, 0xf2, 0x25, 0xc6, 0x2d, 0x13, 0xf8, 0x40, 0xbd, 0x82, 0xac, + 0xa0, 0x1c, 0x83, 0x1c, 0x98, 0x3f, 0x19, 0x85, 0xee, 0x0a, 0xda, 0xe8, 0xdb, + 0x84, 0x47, 0xc0, 0xe5, 0x1c, 0x09, 0xdf, 0xe3, 0xde, 0xe3, 0x88, 0x0a, 0x17, + 0x13, 0xce, 0xb7, 0x45, 0xab, 0xfd, 0xd9, 0xf1, 0xc7, 0xea, 0xd7, 0x63, 0x08, + 0xcd, 0xee, 0xa2, 0x1c, 0x8b, 0x09, 0x57, 0x02, 0x7c, 0x5d, 0x00, 0xe5, 0x0a, + 0x43, 0x88, 0xc7, 0xaf, 0x2b, 0xd6, 0x01, 0xcc, 0xc4, 0x9c, 0xc5, 0x8f, 0xc7, + 0x90, 0x3d, 0xc4, 0x8d, 0xc4, 0xa7, 0xc7, 0x9b, 0xe1, 0x9a, 0xb6, 0x28, 0xc5, + 0x8a, 0xc6, 0xb2, 0xc3, 0xbc, 0x3e, 0xc5, 0xb3, 0x6e, 0xc6, 0xbd, 0x2b, 0xc2, + 0xb4, 0xc7, 0xb8, 0xc6, 0xaa, 0xc7, 0xb6, 0xc2, 0xa8, 0xc7, 0x97, 0xe2, 0xb1, + 0xa3, 0xe1, 0x9b, 0x88, 0xc5, 0xb8, 0xc5, 0x97, 0x67, 0xc8, 0x9d, 0xc7, 0xbf, + 0xc5, 0x8d, 0xe1, 0x9b, 0x85, 0xc6, 0x8e, 0xe1, 0x9a, 0xb8, 0x21, 0x51, 0xc4, + 0x86, 0xe1, 0x9b, 0xb0, 0xe1, 0x9b, 0xb0, 0xc8, 0xb2, 0xe1, 0x9b, 0xaf, 0xce, + 0x84, 0xc7, 0x8c, 0xc6, 0x86, 0xc5, 0xa7, 0xc7, 0x92, 0xc6, 0xad, 0xc8, 0xb0, + 0xc3, 0x91, 0xe2, 0xb1, 0xb5, 0xc8, 0x80, 0x6b, 0xc3, 0xb6, 0xc5, 0xb6, 0xc5, + 0xad, 0xc4, 0xb7, 0xc2, 0xaa, 0xc7, 0x9c, 0xc8, 0xa9, 0xe2, 0xb1, 0xa3, 0x7d, + 0xc7, 0xb1, 0x45, 0x33, 0xc7, 0xb2, 0x26, 0xe1, 0x9b, 0xa2, 0xe1, 0x9b, 0x84, + 0xe1, 0x9b, 0x92, 0xc7, 0x89, 0xc3, 0x87, 0xe1, 0x9a, 0xae, 0xcd, 0xb3, 0xc4, + 0xa8, 0xc2, 0xbe, 0xe1, 0x9a, 0xa0, 0xc8, 0x89, 0xc4, 0x95, 0xe2, 0xb1, 0xa7, + 0xc4, 0xae, 0xc4, 0xbd, 0xc3, 0x8c, 0xe1, 0x9a, 0xa1, 0x7e, 0xe1, 0x9b, 0xad, + 0xc8, 0xba, 0xc6, 0x98, 0xc9, 0x8f, 0xc5, 0xa5, 0xc4, 0xa4, 0xc9, 0x87, 0xc4, + 0x87, 0xe1, 0x9b, 0x8b, 0xc3, 0x97, 0xc3, 0xbd, 0xc3, 0xb5, 0xc6, 0xb8, 0xc6, + 0x8f, 0xc5, 0xaa, 0x5a, 0x02, 0x66, 0xb8, 0x72, 0x45, 0xf7, 0xb4, 0x2d, 0x6e, + 0x4b, 0x79, 0x6b, 0x64, 0xc9, 0x38, 0x51, 0x76, 0x5d, 0x42, 0x6c, 0xb8, 0x18, + 0x76, 0x63, 0xbc, 0x35, 0xdf, 0x3c, 0x04, 0xde, 0x21, 0xe6, 0x6c, 0x57, 0x9d, + 0xb6, 0x24, 0xea, 0x3a, 0x9b, 0x67, 0x08, 0x00, 0xbc, 0x87, 0xdf, 0x2c, 0x6c, + 0x86, 0xe6, 0x1c, 0xd1, 0x0d, 0xc4, 0x65, 0xda, 0x6f, 0x1c, 0x16, 0xb0, 0x11, + 0xdb, 0xe1, 0x15, 0x5e, 0xd0, 0x89, 0x11, 0xf3, 0x28, 0x76, 0x6c, 0xd4, 0x7f, + 0x21, 0x04, 0x00, 0xbc, 0x54, 0xaa, 0x5b, 0x98, 0xcd, 0x38, 0xb9, 0xbf, 0x21, + 0xc9, 0xa7, 0x8c, 0x59, 0x03, 0x8a, 0x98, 0xab, 0x64, 0xfd, 0x67, 0x10, 0x77, + 0xd4, 0x72, 0xc2, 0x09, 0xdd, 0x72, 0x9b, 0xd7, 0xf8, 0x48, 0x09, 0x45, 0xfb, + 0xa7, 0x52, 0x09, 0x8a, 0x94, 0xcc, 0xb2, 0x4c, 0xf3, 0xbc, 0x09, 0x2d, 0x42, + 0x36, 0x46, 0x11, 0xa2, 0x93, 0xaf, 0xf3, 0xc5, 0x79, 0x37, 0x2c, 0x12, 0xe1, + 0x50, 0x90, 0xaa, 0x27, 0x23, 0x20, 0x57, 0xf2, 0xed, 0xfa, 0x0e, 0x5c, 0x26, + 0xaa, 0x7b, 0x0a, 0x12, 0xdf, 0x89, 0x2f, 0x15, 0x01, 0xbe, 0x5f, 0x29, 0xaf, + 0x14, 0x74, 0x20, 0x39, 0x79, 0xa5, 0x75, 0xab, 0x9e, 0x0f, 0x5a, 0xf4, 0xb3, + 0x56, 0x39, 0xc1, 0x72, 0x92, 0x0b, 0x30, 0xf6, 0xdb, 0x01, 0x97, 0xed, 0x0b, + 0xd7, 0x85, 0x0c, 0xc2, 0xa0, 0x87, 0x2b, 0xf0, 0x0d, 0xc4, 0x65, 0xda, 0x6f, + 0x1c, 0x16, 0xb0, 0x11, 0xdb, 0xe1, 0x15, 0x5e, 0xd0, 0x89, 0x11, 0xf3, 0x28, + 0x76, 0x6c, 0xd4, 0x7f, 0x21, 0x04, 0x00, 0xbc, 0x54, 0xaa, 0x5b, 0x98, 0xcd, + 0x38, 0x0b, 0x7b, 0xc0, 0xac, 0x26, 0x4e, 0x2f, 0x97, 0x6a, 0xd3, 0x97, 0xf2, + 0x7f, 0x48, 0x37, 0x8f, 0x8a, 0x4e, 0xd9, 0x02, 0xc6, 0x6e, 0x49, 0x18, 0xfa, + 0xee, 0x8d, 0xc0, 0x06, 0x72, 0x46, 0x16, 0x0d, 0xb1, 0xf8, 0xcd, 0x07, 0xbf, + 0x90, 0xd7, 0x53, 0x7c, 0xc2, 0x7b, 0xbb, 0x8c, 0x9d, 0x5b, 0x29, 0x62, 0xc4, + 0x7e, 0xd1, 0x82, 0xa2, 0xfc, 0xe0, 0x5f, 0x8e, 0x03, 0xc4, 0xe2, 0x5e, 0x49, + 0x01, 0xfd, 0xd6, 0x01, 0x49, 0xc2, 0xa7, 0xc3, 0xb0, 0x67, 0xe1, 0x9b, 0xa1, + 0xc6, 0xa6, 0xc6, 0x95, 0xe1, 0x9a, 0xa8, 0xc7, 0xae, 0xc8, 0xa1, 0xc7, 0xbc, + 0xe1, 0x9a, 0xba, 0xc8, 0x86, 0xe2, 0xb1, 0xa9, 0xc6, 0x8e, 0xe1, 0x9a, 0xb3, + 0xe1, 0x9a, 0xa7, 0xc8, 0x88, 0xc3, 0x97, 0xc7, 0xac, 0xc7, 0x97, 0x64, 0xc7, + 0xae, 0xc5, 0xab, 0xc3, 0x9c, 0xc4, 0x8e, 0xc3, 0x97, 0xc6, 0x83, 0xc4, 0x9e, + 0xc9, 0x89, 0xc4, 0x9a, 0xc2, 0xaf, 0xc2, 0xaa, 0xc7, 0x92, 0xcd, 0xb1, 0x65, + 0xc5, 0x92, 0xe1, 0x9b, 0xa3, 0xc7, 0x83, 0x4c, 0x63, 0xc2, 0xa5, 0xc4, 0xa5, + 0x42, 0xc3, 0x9a, 0xc5, 0x85, 0xc5, 0x80, 0xc5, 0x9e, 0xc3, 0xa0, 0xc8, 0xb0, + 0xcd, 0xb6, 0x75, 0xc6, 0x96, 0xce, 0x84, 0xc5, 0x93, 0xe2, 0xb1, 0xb9, 0xe2, + 0xb1, 0xa8, 0xc7, 0xb0, 0x45, 0xc5, 0x8b, 0x7a, 0xc3, 0x84, 0xc6, 0x80, 0xc7, + 0x9b, 0xc5, 0x9c, 0xc3, 0xa3, 0xc8, 0xba, 0xcd, 0xbc, 0xcd, 0xbd, 0xc8, 0xa7, + 0xc4, 0x8a, 0xc5, 0xa2, 0xe2, 0xb1, 0xb7, 0xc4, 0x84, 0xcd, 0xbe, 0xc7, 0xa1, + 0xc4, 0xa3, 0xc5, 0x9d, 0xc7, 0xad, 0xc8, 0xb6, 0xc7, 0xb5, 0xc5, 0x8e, 0xe1, + 0x9a, 0xb6, 0x65, 0xe2, 0xb1, 0xb7, 0xc6, 0xaf, 0xc9, 0x8d, 0xe1, 0x9a, 0xbe, + 0xc7, 0x8b, 0x5c, 0x74, 0xc8, 0x8a, 0xc8, 0x83, 0xc3, 0x87, 0xc3, 0x83, 0xc6, + 0xba, 0xc8, 0xbf, 0xc4, 0x9b, 0x3e, 0xc7, 0x96, 0xc7, 0x8b, 0xc5, 0x81, 0xcd, + 0xb2, 0xc5, 0x8e, 0xc8, 0x8d, 0xc3, 0xa1, 0x5f, 0xc5, 0xa9, 0xc2, 0xbb, 0xe1, + 0x9a, 0xa6, 0xc9, 0x88, 0x5e, 0xc9, 0x85, 0xc8, 0x91, 0xe1, 0x9b, 0x8e, 0xc4, + 0x8f, 0xe1, 0x9b, 0xa4, 0xe1, 0x9a, 0xa8, 0xc6, 0xa5, 0x77, 0xc3, 0x85, 0xc7, + 0x97, 0xc3, 0xaf, 0xe1, 0x9a, 0xaf, 0x64, 0x6d, 0xc8, 0xa3, 0xc3, 0x92, 0xe2, + 0xb1, 0xbd, 0xc8, 0xb7, 0xe1, 0x9b, 0x86, 0xe2, 0xb1, 0xb9, 0xc6, 0xa1, 0xc3, + 0x82, 0xc7, 0x8b, 0xc7, 0x91, 0xc9, 0x86, 0xc5, 0x89, 0xe1, 0x9b, 0xae, 0xc8, + 0xb6, 0xc4, 0xbb, 0x57, 0xc3, 0xa6, 0xc2, 0xa3, 0xc5, 0xad, 0x2a, 0x6e, 0xc3, + 0x90, 0xc5, 0xa1, 0xc4, 0x87, 0xc2, 0xb7, 0xc5, 0xb1, 0xc4, 0x99, 0xc6, 0xbd, + 0xe1, 0x9b, 0x81, 0xe1, 0x9b, 0x8e, 0x28, 0xc8, 0xb6, 0xc2, 0xb5, 0xe1, 0x9a, + 0xa6, 0xc6, 0x83, 0xe1, 0x9a, 0xbe, 0xc6, 0xbf, 0x2f, 0xc3, 0x80, 0xe1, 0x9a, + 0xa2, 0xc7, 0xa2, 0xc5, 0xb1, 0xe1, 0x9b, 0x83, 0xe1, 0x9a, 0xa7, 0xc6, 0x85, + 0xc7, 0x93, 0xc5, 0x95, 0xc8, 0xaf, 0xc7, 0x97, 0x2e, 0xe2, 0xb1, 0xaf, 0xc8, + 0xbf, 0xe1, 0x9b, 0x81, 0xc3, 0xac, 0x4d, 0xc3, 0xa0, 0xc6, 0x97, 0xe1, 0x9b, + 0x92, 0xe1, 0x9b, 0x9f, 0xc4, 0x9d, 0xc8, 0x9b, 0xc6, 0xab, 0xc7, 0x92, 0xc6, + 0x95, 0xc5, 0xbf, 0x6b, 0xc7, 0xa0, 0x5a, 0xc3, 0x94, 0xc6, 0x96, 0xc4, 0x8e, + 0xc6, 0xac, 0xc6, 0xb9, 0xc3, 0xb1, 0xc8, 0xbd, 0xc8, 0x88, 0xc5, 0xb5, 0xc6, + 0x9f, 0xc3, 0x9b, 0xc7, 0xae, 0xc5, 0x9c, 0xc4, 0xb5, 0xc6, 0x9e, 0xc3, 0x99, + 0xc2, 0xa9, 0xc6, 0xba, 0xc8, 0x9f, 0xc7, 0x83, 0xc8, 0xbb, 0x34, 0xc3, 0xb5, + 0xc5, 0x8a, 0x3b, 0xc2, 0xaa, 0x7b, 0xc4, 0x8c, 0xc3, 0xbb, 0xc8, 0xb9, 0xc5, + 0xb5, 0xce, 0x87, 0xc2, 0xb8, 0xc3, 0x97, 0xe1, 0x9b, 0x84, 0xc8, 0x85, 0xc2, + 0xa8, 0xc2, 0xab, 0xc8, 0x9a, 0x5a, 0x03, 0x0b, 0x74, 0x8f, 0xe3, 0x57, 0xf4, + 0x05, 0x1a, 0x14, 0xfc, 0x53, 0x12, 0x4a, 0xb4, 0x04, 0xb8, 0xf0, 0x8d, 0x66, + 0x63, 0x3f, 0x29, 0xd8, 0x6c, 0x0a, 0x7b, 0xba, 0x1e, 0x0f, 0xa9, 0x0a, 0x39, + 0x18, 0x15, 0xe8, 0xdc, 0x5f, 0x54, 0x94, 0xcb, 0x9d, 0x6b, 0x2e, 0x5e, 0xc3, + 0x82, 0xe3, 0x59, 0x33, 0xe1, 0x7b, 0x79, 0x6f, 0x3a, 0x40, 0x1b, 0x0c, 0x4e, + 0x83, 0xcc, 0xe1, 0x95, 0x65, 0xc1, 0x9f, 0x0a, 0x3f, 0xff, 0x0e, 0x65, 0x62, + 0xfe, 0x25, 0x56, 0x16, 0x68, 0x9c, 0x17, 0x69, 0x05, 0x38, 0xaf, 0x23, 0x6d, + 0x84, 0x12, 0xca, 0xc8, 0x20, 0x86, 0xd6, 0x1b, 0x5d, 0x2c, 0x8c, 0xf0, 0xbb, + 0xeb, 0xac, 0x5b, 0x89, 0xbf, 0xe8, 0x2b, 0x58, 0x91, 0x76, 0x64, 0xba, 0xb9, + 0x1c, 0xe2, 0xec, 0xe2, 0x10, 0xb2, 0x7b, 0x60, 0x52, 0xd4, 0xbf, 0x99, 0x1a, + 0x33, 0xf4, 0x58, 0x1a, 0x63, 0x36, 0x25, 0x78, 0x79, 0x58, 0x89, 0x7f, 0xca, + 0x4b, 0x98, 0xb7, 0xe7, 0x27, 0x7c, 0x5e, 0x6a, 0x1d, 0x88, 0x59, 0xa1, 0x0d, + 0x64, 0x63, 0x79, 0xd0, 0x45, 0x31, 0x94, 0xb0, 0x15, 0x4c, 0xe0, 0xd8, 0x23, + 0xe1, 0x06, 0xaf, 0x2e, 0x86, 0xc9, 0xbe, 0x6a, 0xab, 0x39, 0x55, 0x9e, 0xdb, + 0xe3, 0x29, 0xae, 0x61, 0x52, 0xa5, 0x09, 0xbb, 0x5c, 0x81, 0x1f, 0x59, 0xe1, + 0x97, 0xae, 0x37, 0x9e, 0x62, 0x83, 0xa6, 0xaa, 0x8f, 0xc9, 0x79, 0x6f, 0x3a, + 0x40, 0x1b, 0x0c, 0x4e, 0x83, 0xcc, 0xe1, 0x95, 0x65, 0xc1, 0x9f, 0x0a, 0x3f, + 0xff, 0x0e, 0x65, 0x62, 0xfe, 0x25, 0x56, 0x16, 0x68, 0x9c, 0x17, 0x69, 0x05, + 0x38, 0xaf, 0x23, 0x91, 0xef, 0xc7, 0xd3, 0xb7, 0xef, 0x66, 0xb9, 0x2f, 0xe0, + 0x9d, 0x35, 0x16, 0x27, 0x0a, 0xe1, 0x9a, 0x99, 0x92, 0x16, 0xee, 0xae, 0x16, + 0x21, 0x44, 0xac, 0xea, 0x56, 0x0d, 0x17, 0x72, 0x05, 0xf2, 0x6c, 0x97, 0x03, + 0xb5, 0x4e, 0x80, 0xaf, 0x1a, 0x87, 0x94, 0xd6, 0xd3, 0xf1, 0xc5, 0xee, 0xad, + 0x22, 0x0b, 0x11, 0x9f, 0x06, 0xb2, 0x00, 0x98, 0x6c, 0x91, 0x21, 0x32, 0xcb, + 0x08, 0xa9, 0x17, 0xf2, 0x32, 0xe3, 0xf0, 0xb4, 0xa0, 0x25, 0xb5, 0x55, 0x56, + 0x05, 0x7f, 0xe4, 0x66, 0x7b, 0x92, 0x41, 0x35, 0xb1, 0x84, 0x8f, 0x9d, 0x41, + 0xeb, 0x55, 0xf9, 0x9d, 0x6f, 0xaa, 0x90, 0x3c, 0x95, 0x4c, 0x06, 0xec, 0xbe, + 0x22, 0x1f, 0xd4, 0x48, 0x43, 0x39, 0xf9, 0xd0, 0x77, 0x09, 0xa1, 0x68, 0xd0, + 0x10, 0x79, 0x6f, 0x3a, 0x40, 0x1b, 0x0c, 0x4e, 0x83, 0xcc, 0xe1, 0x95, 0x65, + 0xc1, 0x9f, 0x0a, 0x3f, 0xff, 0x0e, 0x65, 0x62, 0xfe, 0x25, 0x56, 0x16, 0x68, + 0x9c, 0x17, 0x69, 0x05, 0x38, 0xaf, 0x23, 0x12, 0xc2, 0xe4, 0xf3, 0x34, 0x30, + 0xf2, 0x99, 0x70, 0xc6, 0x0b, 0xe8, 0xc5, 0xe2, 0xc8, 0xcc, 0x8a, 0x86, 0xed, + 0xcd, 0x51, 0x2d, 0xa7, 0x0d, 0xd7, 0xbb, 0x40, 0xe2, 0x7b, 0x32, 0xdf, 0x3d, + 0x77, 0x6a, 0x4a, 0x7b, 0x00, 0xe3, 0xbd, 0x8f, 0x69, 0x7f, 0x1f, 0x4e, 0x5c, + 0x9f, 0xbe, 0xbe, 0xb4, 0x46, 0xb0, 0x25, 0xfd, 0x80, 0x65, 0xb1, 0x86, 0xae, + 0xdc, 0x75, 0xf5, 0x68, 0x87, 0x2c, 0x00, 0xfd, 0xfb, 0x01, 0xc6, 0x91, 0xc9, + 0x8e, 0xe1, 0x9b, 0xb0, 0x2b, 0xc5, 0x95, 0xc3, 0xa4, 0xc4, 0x92, 0xc5, 0x93, + 0x7b, 0xc4, 0x92, 0xe2, 0xb1, 0xa2, 0x5b, 0xe1, 0x9b, 0x96, 0xc4, 0x8c, 0xc9, + 0x8a, 0x3b, 0xe2, 0xb1, 0xb1, 0xc6, 0xbc, 0xc8, 0x9a, 0xc3, 0x8b, 0xc6, 0xab, + 0xc3, 0xb0, 0x48, 0xc6, 0xaa, 0xe1, 0x9b, 0xa3, 0x42, 0xc7, 0x93, 0xe1, 0x9b, + 0x8b, 0xc4, 0x88, 0xc3, 0x9e, 0xc6, 0x8f, 0xc8, 0x85, 0xc8, 0x8e, 0xc2, 0xa8, + 0x38, 0xc5, 0x85, 0xe1, 0x9b, 0xa0, 0xc3, 0x9d, 0xc3, 0xa5, 0xc5, 0x82, 0xe2, + 0xb1, 0xa2, 0xc6, 0xb1, 0xc5, 0xb7, 0xe1, 0x9b, 0x86, 0x34, 0xc5, 0x87, 0xc6, + 0xad, 0xc4, 0x9b, 0xc7, 0x98, 0x40, 0x69, 0xc2, 0xa8, 0xc5, 0x85, 0xc2, 0xa9, + 0xc5, 0xb4, 0xc3, 0x94, 0xc7, 0xaf, 0xc8, 0xaf, 0xc8, 0xbf, 0xe1, 0x9a, 0xb9, + 0xe1, 0x9b, 0x96, 0xc6, 0xb4, 0xc5, 0xb4, 0xc2, 0xa6, 0xc4, 0x97, 0xc5, 0xbc, + 0xcd, 0xb1, 0xc4, 0xa3, 0xc3, 0xaa, 0xe1, 0x9b, 0x83, 0xc8, 0x89, 0xc8, 0xad, + 0xe1, 0x9a, 0xa5, 0xc6, 0x8e, 0xc5, 0x90, 0xc2, 0xa6, 0xcd, 0xb3, 0xcd, 0xb3, + 0xc5, 0x8e, 0x3c, 0x46, 0xc4, 0x87, 0xc4, 0xa8, 0xc8, 0xa9, 0xc6, 0x93, 0xc9, + 0x8a, 0xc9, 0x8b, 0xc6, 0x80, 0xc4, 0xbf, 0xc5, 0x9a, 0xc3, 0x97, 0x59, 0xc9, + 0x85, 0xe2, 0xb1, 0xbc, 0xc8, 0xa4, 0xc4, 0xba, 0xc3, 0x89, 0xe1, 0x9b, 0x9d, + 0xc2, 0xa2, 0xc4, 0x9e, 0xcd, 0xb5, 0xc8, 0x89, 0xc5, 0xa3, 0xc8, 0xa4, 0xc7, + 0xb9, 0xc5, 0x8e, 0xc6, 0x85, 0xc7, 0x86, 0xe2, 0xb1, 0xb9, 0xc6, 0x8c, 0xcd, + 0xb3, 0xc8, 0xb7, 0xe1, 0x9a, 0xa9, 0xc8, 0xbe, 0x29, 0xc7, 0xa7, 0xc4, 0xa3, + 0xc8, 0x96, 0xc5, 0xbc, 0xe1, 0x9a, 0xbb, 0xc9, 0x87, 0xc5, 0xaf, 0x30, 0x56, + 0xc7, 0xb6, 0xc7, 0xb9, 0x64, 0xc6, 0x90, 0xc5, 0x84, 0xc6, 0xa3, 0xe1, 0x9b, + 0x9a, 0xc3, 0xa1, 0xc8, 0x8f, 0xe1, 0x9b, 0x82, 0xe1, 0x9a, 0xae, 0xc6, 0xa6, + 0xe1, 0x9b, 0x95, 0xc8, 0xae, 0x55, 0xc5, 0xad, 0xc7, 0x8c, 0xc2, 0xae, 0xe1, + 0x9a, 0xbb, 0xe2, 0xb1, 0xb9, 0xcd, 0xbd, 0xc5, 0xa8, 0xc6, 0x80, 0xe1, 0x9a, + 0xa9, 0xe2, 0xb1, 0xb4, 0xc6, 0x82, 0x39, 0xc5, 0x99, 0xc7, 0x88, 0xc6, 0x8e, + 0xc7, 0xa8, 0xc5, 0x88, 0xc6, 0xba, 0xe1, 0x9b, 0x83, 0xc2, 0xb1, 0xe1, 0x9a, + 0xb8, 0xc8, 0x92, 0xe1, 0x9b, 0xa2, 0xc8, 0xa6, 0x6f, 0xc5, 0x8a, 0xc9, 0x83, + 0xc3, 0xac, 0xc8, 0xb3, 0xe1, 0x9b, 0x83, 0xc8, 0x85, 0xc7, 0x9a, 0xc4, 0x81, + 0xc8, 0x91, 0xc9, 0x84, 0xc8, 0x93, 0xc3, 0x88, 0xe1, 0x9b, 0xab, 0xc3, 0x89, + 0x62, 0xe1, 0x9a, 0xbb, 0x72, 0xe2, 0xb1, 0xb9, 0xc8, 0x94, 0xc4, 0xb8, 0xc3, + 0x9b, 0xc3, 0xb3, 0xc4, 0x88, 0xc8, 0x96, 0x31, 0xc6, 0xb8, 0xc3, 0x98, 0x2e, + 0xc8, 0xb3, 0xc3, 0x95, 0xc3, 0x8a, 0xc3, 0xa4, 0x2c, 0xc8, 0xb1, 0xc9, 0x89, + 0x26, 0x3f, 0x5c, 0xc7, 0x81, 0xc7, 0x9e, 0xc2, 0xb4, 0xcd, 0xbb, 0xc5, 0x9d, + 0xc5, 0x92, 0xe1, 0x9a, 0xb2, 0xc6, 0x94, 0x35, 0xc5, 0x8d, 0xc6, 0xb9, 0xc5, + 0xa3, 0xc4, 0x86, 0xe1, 0x9b, 0x9e, 0xcd, 0xbe, 0xce, 0x84, 0xe2, 0xb1, 0xba, + 0xc8, 0x92, 0xc5, 0xb0, 0x64, 0x5f, 0xc5, 0xaa, 0xc7, 0x91, 0xe1, 0x9a, 0xb7, + 0xe1, 0x9b, 0x8f, 0xc5, 0xb2, 0xe1, 0x9b, 0x9d, 0x5a, 0xe1, 0x9a, 0xbd, 0xc5, + 0x8e, 0xc4, 0xb1, 0xc6, 0xa1, 0xc5, 0xa8, 0xc8, 0x80, 0xc6, 0x8e, 0xc5, 0xbf, + 0xc4, 0x99, 0xc6, 0x9a, 0xe1, 0x9b, 0x98, 0xc8, 0xbd, 0xce, 0x89, 0x68, 0xc5, + 0x94, 0xc4, 0xba, 0xe2, 0xb1, 0xad, 0xc8, 0x98, 0xc4, 0x9f, 0x02, 0x56, 0x8f, + 0xcd, 0xd6, 0x44, 0x90, 0x83, 0xe8, 0xb3, 0x96, 0xf6, 0x15, 0x4f, 0x08, 0x7a, + 0xe4, 0xdc, 0x52, 0x3d, 0xad, 0x13, 0x55, 0x72, 0x52, 0xfc, 0x29, 0x51, 0xf2, + 0xf7, 0xf2, 0xb4, 0x05, 0x5b, 0x47, 0xb1, 0x88, 0x60, 0x42, 0x36, 0xba, 0x7f, + 0x19, 0x0a, 0x24, 0x37, 0xdc, 0xf0, 0x5a, 0x63, 0x13, 0x45, 0xdb, 0xa1, 0x1e, + 0xd9, 0xec, 0x73, 0xa9, 0x93, 0xae, 0xc4, 0x01, 0xe7, 0xbc, 0x67, 0xb8, 0x1b, + 0x40, 0x33, 0x5f, 0x69, 0xed, 0x89, 0x36, 0x45, 0x6a, 0xb9, 0xe6, 0x33, 0xb6, + 0x02, 0x22, 0x8c, 0x19, 0x7a, 0x8f, 0x43, 0x30, 0xb2, 0x72, 0x27, 0xf0, 0xb7, + 0x71, 0xd0, 0xaf, 0x17, 0x5e, 0x9c, 0x3f, 0x6e, 0x1f, 0x68, 0x46, 0x2e, 0xe7, + 0xfe, 0x17, 0x97, 0xd9, 0x28, 0x40, 0x6f, 0x92, 0x38, 0xa3, 0xf3, 0xfd, 0x83, + 0x6a, 0x27, 0x56, 0xdd, 0x0a, 0x11, 0xe1, 0xab, 0x94, 0x9d, 0x5e, 0x30, 0x89, + 0x4f, 0x56, 0x29, 0x95, 0x25, 0xe6, 0x5d, 0x95, 0x0f, 0x2e, 0xb5, 0x0b, 0x3a, + 0x8e, 0xa7, 0x85, 0xd8, 0xfd, 0x06, 0xb3, 0x67, 0x65, 0xd6, 0xb4, 0x2e, 0xba, + 0x93, 0xff, 0x58, 0x0a, 0x1e, 0x39, 0x9f, 0xcf, 0xe4, 0xfc, 0x6a, 0x3a, 0x0c, + 0x19, 0x23, 0xce, 0xdf, 0x4e, 0x33, 0xc1, 0xa5, 0x75, 0x40, 0xa7, 0x89, 0x76, + 0xef, 0xa3, 0x7b, 0x46, 0x24, 0x09, 0xf9, 0xd9, 0x8d, 0xab, 0x1c, 0x86, 0x4c, + 0x00, 0xdb, 0xa1, 0x1e, 0xd9, 0xec, 0x73, 0xa9, 0x93, 0xae, 0xc4, 0x01, 0xe7, + 0xbc, 0x67, 0xb8, 0x1b, 0x40, 0x33, 0x5f, 0x69, 0xed, 0x89, 0x36, 0x45, 0x6a, + 0xb9, 0xe6, 0x33, 0xb6, 0x02, 0x22, 0x8c, 0x1d, 0x3c, 0x65, 0xa4, 0x28, 0x90, + 0x97, 0x5f, 0xa1, 0xed, 0xed, 0x70, 0x56, 0x20, 0xdf, 0xcd, 0x1d, 0x0c, 0xde, + 0xad, 0x2a, 0xbf, 0xa6, 0xdf, 0xe2, 0x6d, 0x79, 0xc9, 0x0c, 0x63, 0xff, 0x16, + 0xe5, 0x40, 0xb7, 0x61, 0x5d, 0x43, 0xa6, 0x26, 0x1d, 0x57, 0x73, 0x03, 0x06, + 0xb6, 0x63, 0x2c, 0x8e, 0xe6, 0x1b, 0xaa, 0x4a, 0xb4, 0xd3, 0x08, 0x4d, 0x65, + 0x9c, 0xab, 0xcf, 0xc4, 0x06, 0x4c, 0x01, 0x63, 0xfe, 0x65, 0x09, 0x0f, 0x33, + 0x14, 0x4a, 0x71, 0xbf, 0x84, 0x3a, 0xc3, 0xdd, 0x4c, 0x0b, 0x1f, 0x6c, 0x24, + 0xa4, 0x86, 0x49, 0x28, 0x1b, 0x2e, 0xd4, 0x0e, 0xe5, 0x22, 0x99, 0x6f, 0x38, + 0xd2, 0x3c, 0x68, 0x74, 0x99, 0xd3, 0xa4, 0x9a, 0x5b, 0xf5, 0x5c, 0x1e, 0xd9, + 0xb3, 0x41, 0x7f, 0x79, 0x5f, 0xd0, 0x34, 0xa7, 0x3f, 0x80, 0xff, 0x47, 0xbc, + 0x4e, 0x8d, 0xb8, 0xa8, 0x4e, 0x51, 0x65, 0x75, 0x1b, 0x38, 0x08, 0xfd, 0x6b, + 0x98, 0x20, 0x76, 0xfa, 0x7b, 0x7e, 0x43, 0x99, 0x32, 0x50, 0xc5, 0x45, 0xad, + 0xd6, 0xe0, 0x16, 0x62, 0x62, 0xe0, 0x04, 0x1f, 0x11, 0xa1, 0xbb, 0x3a, + ], + txid: [ + 0x2a, 0xf0, 0x14, 0x20, 0x07, 0x27, 0xfe, 0x9f, 0xba, 0x45, 0xe5, 0x33, 0xa6, + 0xf4, 0x86, 0x66, 0xb2, 0x16, 0x63, 0x3f, 0xd3, 0x22, 0x61, 0x7d, 0x46, 0xa2, + 0x9f, 0x30, 0xe7, 0xf4, 0x99, 0xff, + ], + auth_digest: [ + 0xf1, 0x67, 0x6e, 0xe9, 0x64, 0xa3, 0x15, 0x6d, 0xba, 0x98, 0x45, 0xbe, 0x63, + 0xab, 0xb9, 0xe8, 0xc9, 0x72, 0x14, 0xd4, 0x00, 0xc0, 0x51, 0x26, 0x7f, 0x8f, + 0xc7, 0xda, 0x2d, 0x34, 0x66, 0xea, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0x2a, 0xf0, 0x14, 0x20, 0x07, 0x27, 0xfe, 0x9f, 0xba, 0x45, 0xe5, 0x33, 0xa6, + 0xf4, 0x86, 0x66, 0xb2, 0x16, 0x63, 0x3f, 0xd3, 0x22, 0x61, 0x7d, 0x46, 0xa2, + 0x9f, 0x30, 0xe7, 0xf4, 0x99, 0xff, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x42, + 0x69, 0xb3, 0x03, 0x17, 0x7c, 0x80, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x06, 0x04, 0x17, 0x7c, 0x80, 0x06, 0x00, 0xff, + 0xff, 0xff, 0xff, 0x03, 0x4e, 0x1b, 0x55, 0x8e, 0x33, 0x6e, 0x03, 0x00, 0x04, + 0xac, 0x51, 0x6a, 0x00, 0xe6, 0x99, 0x0e, 0xc6, 0xbe, 0xb1, 0x00, 0x00, 0x04, + 0x52, 0x63, 0x53, 0xac, 0xd7, 0x71, 0xa7, 0x4a, 0x0f, 0xcb, 0x06, 0x00, 0x05, + 0x51, 0x51, 0x65, 0x65, 0x00, 0x00, 0x00, 0x04, 0x5e, 0xc2, 0x52, 0x02, 0x43, + 0x5e, 0x52, 0x03, 0x57, 0xc0, 0xcb, 0xaf, 0xce, 0x90, 0x32, 0x45, 0x0e, 0x06, + 0x95, 0xe6, 0x21, 0xe7, 0xfb, 0xb4, 0x42, 0xc9, 0x71, 0x08, 0x2e, 0xde, 0x47, + 0x20, 0x2a, 0x3d, 0xb4, 0x59, 0x06, 0x4c, 0x01, 0x2b, 0xc0, 0x58, 0x07, 0x69, + 0x4b, 0x12, 0xd8, 0xfd, 0xae, 0x17, 0x84, 0x40, 0x1e, 0xfe, 0xc9, 0xf1, 0x25, + 0x6d, 0xaf, 0x71, 0x91, 0x59, 0xd8, 0x21, 0xb6, 0xc9, 0x5c, 0x54, 0x5f, 0xf3, + 0x23, 0xc3, 0xaa, 0xee, 0x3d, 0x9a, 0xde, 0x77, 0x76, 0xe1, 0xb8, 0xd5, 0x80, + 0xe3, 0x4a, 0xfc, 0xe7, 0xa3, 0x2b, 0xc4, 0x96, 0x37, 0xc2, 0x4b, 0x2e, 0x26, + 0x0f, 0x48, 0x78, 0x20, 0xdb, 0x45, 0x1c, 0xb8, 0xcf, 0x4f, 0x55, 0x7c, 0xf9, + 0xb0, 0xfa, 0x3d, 0x76, 0x7d, 0x9d, 0xe5, 0x7d, 0xea, 0xde, 0xad, 0xcb, 0x4a, + 0xf5, 0x19, 0x3e, 0x09, 0xc9, 0x3b, 0x65, 0xa3, 0xac, 0x7c, 0xe6, 0x3d, 0x17, + 0x98, 0x7c, 0x12, 0x93, 0xe1, 0x24, 0xe6, 0x26, 0xc3, 0x5b, 0xec, 0x81, 0xb1, + 0x6a, 0x04, 0xe8, 0xff, 0xe9, 0x48, 0x38, 0x8e, 0x7b, 0x43, 0xb0, 0x96, 0x3e, + 0x8b, 0x99, 0xea, 0xe0, 0x28, 0x4f, 0x8b, 0x01, 0x15, 0xb4, 0x23, 0x7a, 0x7c, + 0x5d, 0x81, 0x97, 0x0f, 0xe8, 0x7c, 0x6f, 0x84, 0xb6, 0x68, 0x6c, 0x46, 0x25, + 0xdb, 0xdd, 0x9d, 0x79, 0xd2, 0xc5, 0x55, 0xdd, 0x4f, 0xce, 0xed, 0x2c, 0x5e, + 0x5e, 0x89, 0x6f, 0x63, 0x1a, 0xe4, 0x59, 0x7e, 0x9c, 0xc0, 0xbe, 0xe7, 0xb3, + 0x02, 0x5f, 0x95, 0x56, 0x10, 0x6a, 0x84, 0x3a, 0x18, 0x22, 0x7f, 0x5a, 0xb9, + 0x61, 0x7d, 0x7b, 0xcb, 0x1a, 0xf5, 0x28, 0xfa, 0xa7, 0xa0, 0x52, 0xea, 0x4f, + 0x52, 0xca, 0x59, 0x45, 0x57, 0xfd, 0xad, 0x33, 0x05, 0x2b, 0xc8, 0x2b, 0x39, + 0xc6, 0xa6, 0x09, 0xa0, 0x70, 0x75, 0x3d, 0x78, 0x8b, 0x2c, 0x4a, 0x2c, 0xae, + 0xbb, 0xe7, 0x9f, 0xf0, 0x12, 0x07, 0x1c, 0x07, 0x08, 0x10, 0x94, 0xad, 0x60, + 0x59, 0xc2, 0x8f, 0x48, 0xe5, 0x56, 0xc4, 0xe8, 0xd8, 0xc5, 0x37, 0x8b, 0xc2, + 0x93, 0x07, 0x6b, 0xb4, 0x97, 0x07, 0x5f, 0x9c, 0xa0, 0xba, 0x13, 0x11, 0x55, + 0x0f, 0xa2, 0x17, 0x3d, 0x0e, 0xb1, 0xf0, 0xbd, 0xdd, 0xf3, 0xb3, 0xd5, 0xc2, + 0x43, 0xff, 0xea, 0xbe, 0xe8, 0x23, 0xcd, 0x63, 0xb4, 0x39, 0x39, 0xce, 0x95, + 0x46, 0xed, 0x4c, 0x41, 0xe6, 0x0c, 0xcc, 0x7e, 0x1c, 0x54, 0x3c, 0xb3, 0xe2, + 0xd3, 0x50, 0xe2, 0xe2, 0xe9, 0x74, 0x21, 0x5c, 0xf7, 0xaa, 0x96, 0x9b, 0x66, + 0x81, 0x14, 0xac, 0xdb, 0x29, 0xf4, 0xcd, 0xcf, 0xdc, 0xec, 0x2a, 0x8c, 0xe4, + 0xf5, 0x95, 0xf4, 0xff, 0x5f, 0x70, 0x7e, 0x7f, 0xa4, 0xde, 0xe8, 0xbf, 0x8f, + 0x39, 0x52, 0xae, 0x32, 0xe7, 0x7f, 0x34, 0xf8, 0xb3, 0xab, 0xaa, 0xe9, 0x69, + 0x28, 0xba, 0x4a, 0x6c, 0x0f, 0xbf, 0x5b, 0x29, 0x19, 0x2d, 0xae, 0x80, 0x0d, + 0xfa, 0x79, 0x57, 0x0c, 0xaf, 0x0b, 0xb8, 0x33, 0xbd, 0x37, 0xa3, 0xd4, 0xbe, + 0xaf, 0x09, 0x1f, 0x6b, 0x3e, 0x55, 0xaa, 0xe5, 0x25, 0xf4, 0x13, 0xac, 0x80, + 0x4c, 0x34, 0x7d, 0x54, 0x1d, 0x2c, 0x09, 0xec, 0x6e, 0x54, 0x03, 0x5d, 0xf1, + 0xd8, 0x30, 0x28, 0x4d, 0x9b, 0x46, 0xff, 0xd2, 0xb2, 0xeb, 0x04, 0x0b, 0x61, + 0x77, 0xd0, 0xa0, 0x9c, 0x16, 0x60, 0x34, 0xa9, 0x57, 0xb1, 0x8f, 0xf6, 0x2e, + 0x43, 0x4a, 0x3e, 0xc7, 0x32, 0x62, 0xe4, 0xb2, 0x3f, 0xec, 0x9d, 0x29, 0x0a, + 0x81, 0xc5, 0xb1, 0xf7, 0x3c, 0xb4, 0xcd, 0x1c, 0x47, 0x2b, 0x86, 0xe5, 0x34, + 0xab, 0x9e, 0x65, 0x53, 0x29, 0x5d, 0xb0, 0xcf, 0x34, 0xe1, 0x39, 0x2a, 0xad, + 0x5a, 0xbc, 0xf3, 0x98, 0x64, 0x16, 0xa7, 0x0a, 0x9d, 0xbe, 0x59, 0xbb, 0x95, + 0x8e, 0xbc, 0x71, 0x1c, 0x3a, 0xe0, 0x8c, 0xaf, 0x52, 0xec, 0xa9, 0xcb, 0x54, + 0xc4, 0x58, 0xbe, 0x7f, 0x5e, 0x62, 0x14, 0xec, 0xa0, 0xf0, 0xa3, 0x81, 0x52, + 0x62, 0x20, 0x01, 0x32, 0xe6, 0x14, 0x54, 0x37, 0xec, 0xd2, 0x1f, 0xc8, 0x03, + 0x6c, 0xb0, 0x0a, 0x49, 0x13, 0x84, 0xc3, 0x41, 0xd8, 0x72, 0xdc, 0xda, 0x31, + 0xb1, 0x42, 0x96, 0x73, 0xd9, 0xc4, 0xf5, 0x7b, 0x81, 0xa0, 0x23, 0x6d, 0xa5, + 0xec, 0x55, 0x02, 0xee, 0x29, 0x63, 0x15, 0x0a, 0x00, 0x26, 0xbd, 0x63, 0xef, + 0x67, 0x9e, 0x8c, 0x25, 0xb8, 0xec, 0xee, 0x06, 0x56, 0x4a, 0xf3, 0xb0, 0x2d, + 0xea, 0xb1, 0x06, 0x97, 0xa2, 0x4d, 0xe6, 0x7d, 0x4f, 0x65, 0x04, 0xae, 0x27, + 0x37, 0xb8, 0xe1, 0x73, 0x25, 0xc2, 0xff, 0x15, 0x0c, 0x62, 0xe3, 0x79, 0x83, + 0x44, 0xa1, 0xad, 0x3c, 0xbb, 0x75, 0xb7, 0xf2, 0xa1, 0x57, 0x38, 0xf6, 0x01, + 0xcf, 0x00, 0xf7, 0xe8, 0xbc, 0x08, 0xb6, 0x89, 0x56, 0x7e, 0x4c, 0x7c, 0x01, + 0x05, 0x8b, 0xee, 0xc2, 0x90, 0x3c, 0x5c, 0xa6, 0xb4, 0xc4, 0xa5, 0x71, 0xf4, + 0x60, 0xd6, 0x05, 0x87, 0x36, 0x29, 0x96, 0xc6, 0xe1, 0x25, 0x54, 0xe8, 0xe3, + 0x4e, 0x68, 0x3a, 0x27, 0xf8, 0xa5, 0xff, 0x97, 0x1d, 0x5a, 0x0d, 0xc2, 0xf3, + 0xef, 0xd3, 0x88, 0x99, 0x87, 0xc1, 0xcc, 0x39, 0xce, 0x5d, 0x4b, 0x6b, 0x54, + 0x4c, 0xe0, 0x4c, 0x71, 0xee, 0x4b, 0xfa, 0xe5, 0x04, 0x0d, 0x61, 0xf0, 0x57, + 0xe4, 0xf7, 0x70, 0x17, 0x28, 0xf1, 0x20, 0x04, 0xa7, 0xf7, 0xed, 0xeb, 0x3a, + 0xb2, 0x26, 0x09, 0xed, 0x33, 0xb0, 0xab, 0x5d, 0x69, 0xb1, 0x2d, 0x45, 0x76, + 0x57, 0x77, 0x14, 0xdf, 0xc6, 0xdd, 0xa7, 0x1f, 0xf6, 0x01, 0x7b, 0x55, 0xb3, + 0x35, 0x4d, 0x11, 0xe9, 0x21, 0x67, 0x92, 0xe5, 0x60, 0x9f, 0xc0, 0x67, 0x88, + 0xec, 0x66, 0x8e, 0xef, 0x64, 0x5e, 0x63, 0xb3, 0x7e, 0x2d, 0x0c, 0xd2, 0x63, + 0x04, 0x08, 0x00, 0xbc, 0x8a, 0xa2, 0x80, 0x15, 0x6a, 0x79, 0x4f, 0x62, 0xa5, + 0xf6, 0x93, 0xeb, 0xd9, 0x07, 0x4b, 0x5d, 0x35, 0x4a, 0x71, 0xc8, 0xe3, 0x36, + 0xde, 0x04, 0x08, 0xac, 0x70, 0x80, 0xa2, 0xae, 0xee, 0x36, 0x6c, 0x58, 0x14, + 0x6f, 0x32, 0xe3, 0x49, 0xa9, 0xbc, 0x65, 0x7e, 0xc9, 0xe5, 0x7a, 0x89, 0xa0, + 0x4c, 0xce, 0xa1, 0x33, 0x8a, 0xaa, 0x9d, 0x2a, 0x85, 0x67, 0x7b, 0xc7, 0x80, + 0x45, 0xaa, 0xc3, 0x0d, 0x83, 0x8e, 0xe5, 0x21, 0xb2, 0x92, 0x65, 0x8f, 0x91, + 0xb6, 0x09, 0x5a, 0x96, 0x49, 0x2a, 0x4b, 0x18, 0xaf, 0xb7, 0x72, 0xa3, 0x08, + 0xa0, 0x23, 0x3f, 0x92, 0x86, 0x13, 0x76, 0x75, 0x2c, 0xf0, 0x1c, 0x7b, 0x7d, + 0x2c, 0x34, 0x38, 0xab, 0xe6, 0xb8, 0xcd, 0x3b, 0xb4, 0x21, 0x8b, 0x4d, 0x7f, + 0x15, 0x76, 0x17, 0xbc, 0x91, 0x95, 0x50, 0xd1, 0x6f, 0xb5, 0x13, 0xbf, 0x97, + 0x4b, 0x45, 0x23, 0xf3, 0xcd, 0x1c, 0xaa, 0x5e, 0x0f, 0xd4, 0x15, 0x14, 0xdc, + 0x82, 0xf2, 0x72, 0xb8, 0xea, 0x62, 0x17, 0x70, 0x71, 0xb5, 0x43, 0x98, 0xce, + 0xcf, 0xd6, 0x86, 0xa0, 0xbc, 0x9a, 0xd3, 0x7f, 0x44, 0xb5, 0x38, 0x87, 0x75, + 0x87, 0x51, 0x66, 0x00, 0x6d, 0x25, 0xdf, 0x4b, 0x5e, 0xd1, 0xc4, 0x1f, 0x12, + 0x8d, 0x39, 0xb0, 0x53, 0x46, 0xa8, 0x6f, 0x0c, 0x9b, 0x65, 0xc6, 0x8d, 0x20, + 0x08, 0xd1, 0x31, 0xb3, 0xe9, 0x5b, 0xd0, 0xfb, 0x77, 0xd8, 0xb9, 0x76, 0xb1, + 0x57, 0x04, 0x88, 0xd0, 0xb9, 0x83, 0x8b, 0x88, 0xb6, 0xfd, 0x38, 0xc0, 0x39, + 0xe0, 0x8b, 0x6f, 0xd9, 0x5d, 0xab, 0xcf, 0xb2, 0x5f, 0x23, 0x8b, 0x26, 0x62, + 0x06, 0xb0, 0xa2, 0xf9, 0xa2, 0xee, 0xa1, 0xc0, 0x83, 0xfa, 0xc8, 0x08, 0xaa, + 0xfa, 0x03, 0x65, 0x66, 0xcc, 0xd2, 0x02, 0xbc, 0xfa, 0x41, 0x4e, 0x71, 0xc8, + 0xb4, 0x89, 0x33, 0xc8, 0xed, 0x45, 0x28, 0x7e, 0x1b, 0x43, 0x9b, 0x61, 0x06, + 0xa5, 0x50, 0x94, 0x73, 0xf5, 0x7b, 0x87, 0x88, 0xaf, 0x52, 0x7c, 0xf9, 0xa7, + 0xab, 0xa5, 0x93, 0xdc, 0x9f, 0x5e, 0x5a, 0xca, 0x1a, 0x64, 0x8e, 0xe4, 0x88, + 0xf3, 0x6d, 0xeb, 0x4a, 0x3f, 0xdb, 0x0f, 0xf6, 0xf5, 0xa3, 0x04, 0x4a, 0x63, + 0xe1, 0x7f, 0x70, 0xa4, 0x30, 0x38, 0x24, 0x60, 0x3a, 0xb5, 0x0e, 0x9b, 0xf7, + 0x5b, 0xae, 0xb5, 0x7b, 0xfd, 0xc8, 0x9b, 0xfd, 0xbc, 0x27, 0x27, 0x9d, 0x10, + 0x73, 0xbf, 0x7f, 0x95, 0x05, 0xfb, 0x31, 0x68, 0xd2, 0x06, 0xe2, 0xbf, 0x41, + 0x02, 0xbf, 0x15, 0x9c, 0xff, 0x61, 0xe6, 0xd6, 0x6c, 0x80, 0x37, 0x50, 0xda, + 0x25, 0x4c, 0xd6, 0xb8, 0x1a, 0xed, 0x42, 0x09, 0x97, 0x94, 0xb8, 0x4e, 0xce, + 0x90, 0x42, 0x18, 0xe6, 0xf6, 0x6e, 0xc6, 0x34, 0xe9, 0x2e, 0xef, 0xf4, 0x5f, + 0x52, 0xe0, 0x4b, 0x4b, 0x79, 0x5a, 0x15, 0x25, 0xaa, 0xf9, 0xc5, 0x1d, 0x62, + 0x60, 0xfb, 0xd6, 0x4e, 0x8d, 0x8a, 0xc2, 0x66, 0xdc, 0x6e, 0x7d, 0xf6, 0x15, + 0x3a, 0xd9, 0x73, 0x55, 0x83, 0x79, 0x28, 0x40, 0x4c, 0xd5, 0x81, 0xbc, 0x9c, + 0xf9, 0xdc, 0xd6, 0x67, 0x47, 0xdc, 0x97, 0x0a, 0x9f, 0x00, 0xde, 0xb4, 0x4b, + 0xd6, 0x34, 0xab, 0x04, 0x2e, 0x01, 0x04, 0xc1, 0xce, 0x74, 0x7f, 0x53, 0x75, + 0x1b, 0xc3, 0x3e, 0x38, 0x4c, 0x6b, 0x55, 0x76, 0x39, 0x9e, 0x16, 0xf8, 0xf0, + 0xcb, 0x08, 0xde, 0x35, 0x08, 0x37, 0x33, 0x95, 0x45, 0x87, 0xc1, 0xc2, 0x4d, + 0xf2, 0xae, 0x66, 0x30, 0xff, 0xfe, 0x99, 0x62, 0x15, 0xef, 0xe4, 0xd2, 0x62, + 0x6d, 0xeb, 0x20, 0x56, 0x6a, 0x8f, 0x5e, 0xad, 0x2f, 0x04, 0xdb, 0x5d, 0x08, + 0x77, 0x9c, 0x9c, 0x65, 0x9e, 0xa3, 0x43, 0xcd, 0x78, 0x46, 0x34, 0xc9, 0x9d, + 0x8c, 0x8b, 0xad, 0xa9, 0x3b, 0xe8, 0xe6, 0xda, 0x84, 0x15, 0x94, 0xba, 0xcf, + 0x7c, 0xb3, 0xe6, 0x92, 0xc7, 0x4b, 0x5f, 0xfe, 0x95, 0x78, 0x73, 0x11, 0x3a, + 0x1a, 0xb0, 0x64, 0x02, 0x6f, 0x6d, 0xee, 0x8b, 0x48, 0xa3, 0x84, 0xa1, 0x33, + 0x83, 0x18, 0x36, 0x07, 0x86, 0x50, 0x27, 0x84, 0xd1, 0x7d, 0x40, 0x0c, 0xe3, + 0xd7, 0x21, 0x78, 0x7e, 0xdc, 0x4c, 0x6b, 0x39, 0x35, 0x66, 0x25, 0x10, 0x77, + 0x10, 0x00, 0x68, 0x0d, 0x78, 0xbb, 0x49, 0xc5, 0x66, 0xef, 0x27, 0xdf, 0x61, + 0xc9, 0xfe, 0xb9, 0x2c, 0x08, 0x97, 0x59, 0x44, 0x87, 0x27, 0xa9, 0x34, 0xe3, + 0x57, 0x95, 0x3d, 0xe1, 0xe9, 0xe9, 0x0f, 0xd8, 0xdf, 0xfe, 0x40, 0xb8, 0x73, + 0xbc, 0xd5, 0xb9, 0x82, 0x08, 0xdf, 0x4b, 0x2c, 0xa2, 0x89, 0x7a, 0xf9, 0x0d, + 0x8c, 0x8a, 0x23, 0x62, 0x30, 0x02, 0xa9, 0xd8, 0xbc, 0x02, 0xe8, 0x06, 0x25, + 0x4f, 0x41, 0x0e, 0x3b, 0x02, 0x40, 0x9c, 0xbe, 0xbf, 0xce, 0x8a, 0xcf, 0x65, + 0xcf, 0x39, 0x42, 0x6b, 0x64, 0xa6, 0xba, 0x93, 0x74, 0xa1, 0x3d, 0x72, 0x59, + 0x62, 0x3f, 0x65, 0xe9, 0x3e, 0x10, 0xbf, 0x1f, 0x16, 0xba, 0x7a, 0xe0, 0x7d, + 0xa9, 0x20, 0x58, 0x1c, 0x70, 0x40, 0x9e, 0xdc, 0x7b, 0x9e, 0x21, 0x4e, 0x95, + 0x91, 0x92, 0x82, 0x4c, 0x1d, 0xa6, 0x5d, 0x33, 0x7b, 0x73, 0x75, 0xf5, 0x03, + 0x2f, 0xea, 0xd3, 0xb4, 0xf3, 0x28, 0x48, 0x11, 0x95, 0x0c, 0x7a, 0x90, 0xae, + 0xc9, 0x75, 0xd4, 0xe3, 0x62, 0x9f, 0x52, 0xd1, 0x9a, 0x16, 0x4e, 0x51, 0x16, + 0xef, 0x3a, 0xd0, 0x22, 0x44, 0x2d, 0x1e, 0xec, 0x76, 0xb8, 0x88, 0x73, 0x8b, + 0x53, 0xe5, 0x05, 0x58, 0xa7, 0x0f, 0x20, 0xc8, 0xac, 0xb5, 0x8d, 0xee, 0x63, + 0x27, 0x15, 0xe4, 0x78, 0xe2, 0xbc, 0x21, 0xbc, 0xfb, 0xe3, 0x15, 0x59, 0x96, + 0xca, 0xe7, 0xbd, 0x97, 0xf0, 0x2b, 0x51, 0x6d, 0x32, 0x00, 0xfb, 0x3c, 0x17, + 0x39, 0x7c, 0xc1, 0x2b, 0xb7, 0xa1, 0x9f, 0xd4, 0x36, 0xe6, 0x7a, 0xbc, 0xe6, + 0x6d, 0x30, 0xfe, 0xc0, 0x47, 0xfb, 0x27, 0x70, 0x82, 0x0e, 0x47, 0x6f, 0x3e, + 0x32, 0xbc, 0x48, 0x3b, 0xf5, 0x31, 0x64, 0xae, 0x49, 0x70, 0xf1, 0x1b, 0x9c, + 0xae, 0xe4, 0xed, 0x6c, 0xb8, 0xd2, 0xd7, 0x0f, 0x69, 0x13, 0xd8, 0xe0, 0x2a, + 0xf8, 0xfb, 0xb1, 0xe4, 0x09, 0xb4, 0xef, 0x08, 0x04, 0x48, 0xe5, 0x3b, 0xe6, + 0xe5, 0xe6, 0x05, 0x75, 0xdf, 0xde, 0x94, 0x28, 0xb0, 0x06, 0x96, 0x61, 0x1a, + 0x2f, 0x72, 0x33, 0x2a, 0xe2, 0x90, 0x23, 0xdd, 0x88, 0xae, 0x77, 0xf1, 0x5b, + 0x8a, 0xe2, 0xc2, 0x4b, 0x86, 0xcf, 0x3d, 0x57, 0x43, 0x9c, 0xaf, 0x17, 0xf2, + 0x8e, 0xda, 0x94, 0x93, 0x2e, 0xef, 0x28, 0x53, 0x4e, 0x98, 0xac, 0x94, 0xcb, + 0x9b, 0x5b, 0x12, 0x17, 0x1a, 0xad, 0x3e, 0x3c, 0xc9, 0x6d, 0x28, 0x93, 0xb4, + 0x33, 0xb5, 0x4b, 0xbc, 0x9e, 0x1a, 0x51, 0x42, 0xc2, 0xe9, 0xcf, 0xed, 0xe2, + 0x95, 0x17, 0x28, 0xd6, 0xc8, 0x62, 0x74, 0x9e, 0x86, 0xeb, 0xc5, 0x11, 0x7e, + 0x21, 0xf4, 0x23, 0xe1, 0x8d, 0x09, 0x76, 0xa1, 0xf5, 0x1d, 0x45, 0x47, 0x6d, + 0xa5, 0x60, 0xff, 0x23, 0x15, 0x42, 0xbb, 0x21, 0xf0, 0x1b, 0x17, 0xd6, 0x63, + 0x90, 0x12, 0xd1, 0xe8, 0x43, 0xdb, 0xda, 0xb5, 0x17, 0xde, 0x53, 0x42, 0x97, + 0xf3, 0x42, 0xb2, 0x86, 0x0d, 0x61, 0x6f, 0xe2, 0x24, 0x67, 0x3e, 0xfc, 0xd0, + 0x90, 0x79, 0x73, 0x52, 0xf9, 0x6d, 0x22, 0x46, 0xa2, 0xee, 0x0a, 0xf8, 0x0a, + 0x2a, 0x2d, 0x89, 0xa5, 0x85, 0x30, 0xd6, 0xe3, 0x6b, 0xd3, 0x3a, 0x00, 0xc1, + 0xb8, 0x93, 0xd6, 0xff, 0x8f, 0x90, 0x01, 0x83, 0x9a, 0x8a, 0xb7, 0x2f, 0x98, + 0x20, 0x10, 0x66, 0xe9, 0x4b, 0x7f, 0xed, 0x47, 0x01, 0x19, 0xfe, 0xfa, 0x48, + 0x48, 0x92, 0xe7, 0xc8, 0x23, 0x5a, 0x4c, 0x77, 0x21, 0x66, 0x5e, 0xd2, 0x19, + 0xa9, 0xd9, 0xda, 0x6d, 0xe6, 0xdd, 0x48, 0x26, 0x39, 0x15, 0x3a, 0x81, 0x69, + 0xa4, 0xab, 0x46, 0x4e, 0x39, 0x0b, 0x7f, 0x0a, 0x96, 0xd1, 0x4a, 0x73, 0xf7, + 0x69, 0x7f, 0x7e, 0xce, 0x3c, 0xd7, 0x81, 0xd3, 0x5d, 0xd2, 0x2a, 0xdd, 0xdd, + 0x2f, 0x5d, 0x34, 0x52, 0x04, 0xe4, 0xbb, 0x55, 0x7e, 0x88, 0x45, 0x3f, 0x18, + 0x8c, 0xac, 0xbe, 0x92, 0x29, 0x87, 0xbb, 0xe3, 0xb3, 0xd9, 0x76, 0x82, 0x61, + 0x35, 0xc1, 0x03, 0xb6, 0xca, 0x18, 0x2b, 0x63, 0xe9, 0xe6, 0x7f, 0x83, 0xdc, + 0x9f, 0x48, 0x93, 0x33, 0xd5, 0x2a, 0x7f, 0xd7, 0x68, 0x8a, 0x58, 0xd6, 0x62, + 0x0b, 0x67, 0xe9, 0xc7, 0xb0, 0x91, 0x6f, 0xef, 0x90, 0xf1, 0x5d, 0x8e, 0x4e, + 0xb8, 0x0c, 0xf5, 0x99, 0x68, 0x2f, 0x95, 0x4f, 0xf4, 0xe0, 0xb3, 0x71, 0x83, + 0x13, 0x0c, 0xa2, 0xee, 0xd0, 0x91, 0x3f, 0x46, 0xa4, 0xdb, 0x99, 0x2a, 0x1c, + 0x3b, 0xf3, 0x19, 0xdc, 0x86, 0x75, 0x94, 0x01, 0x01, 0x53, 0x7c, 0xff, 0xc4, + 0xa8, 0x2d, 0x59, 0x9b, 0xbe, 0xa0, 0xd4, 0x7e, 0x7a, 0xbf, 0xa9, 0x92, 0xb4, + 0x99, 0x8c, 0xb2, 0x50, 0x09, 0x55, 0xe6, 0x1c, 0x0d, 0x46, 0xb3, 0x21, 0x17, + 0xfb, 0xb9, 0x7f, 0x7a, 0x76, 0x32, 0xd8, 0x72, 0x4b, 0x5d, 0xff, 0x67, 0xf7, + 0x5e, 0x2d, 0x31, 0x74, 0x06, 0xa0, 0xce, 0xc2, 0x89, 0xed, 0x08, 0x3b, 0x7c, + 0x58, 0x19, 0x81, 0x8c, 0x50, 0x47, 0x93, 0xde, 0x53, 0xb6, 0xbf, 0xdb, 0x51, + 0x0e, 0x7c, 0xa7, 0x29, 0xba, 0x74, 0x3d, 0x10, 0xb3, 0xe9, 0x95, 0x7e, 0xfa, + 0x84, 0x20, 0x13, 0x39, 0x47, 0x7c, 0xf3, 0x5f, 0xbb, 0x6a, 0x27, 0x9b, 0xad, + 0x9e, 0x8f, 0x42, 0xb9, 0xb3, 0xfd, 0x6f, 0x3b, 0xc7, 0x70, 0x67, 0x1d, 0x9c, + 0x19, 0x12, 0x2f, 0xa3, 0x25, 0x6d, 0x09, 0x07, 0x36, 0xb6, 0xd6, 0x4e, 0xb9, + 0xcc, 0x03, 0x20, 0xf1, 0xea, 0xaa, 0x27, 0x1b, 0xa2, 0x86, 0x1e, 0xc4, 0xb3, + 0xf3, 0xf6, 0xc8, 0x40, 0xb6, 0x19, 0xff, 0x38, 0x8d, 0x81, 0xfc, 0x40, 0x44, + 0xa0, 0xd5, 0x31, 0xa4, 0xbb, 0x44, 0xc9, 0x3d, 0x09, 0x9d, 0xb0, 0x8a, 0x9b, + 0xc3, 0x46, 0xa0, 0xb6, 0x2f, 0x16, 0x8f, 0xfb, 0xdb, 0x73, 0x93, 0x66, 0xbb, + 0x53, 0x5d, 0xde, 0x66, 0xc2, 0xc1, 0x28, 0x7b, 0x3b, 0x27, 0x85, 0xae, 0xd6, + 0x4c, 0xc4, 0x0c, 0xbc, 0x7d, 0x33, 0xcb, 0xa4, 0xa9, 0xf3, 0xfc, 0xf5, 0xf8, + 0x31, 0x36, 0xa4, 0x39, 0x2d, 0x21, 0xa7, 0xf9, 0xeb, 0x1c, 0xe4, 0xb6, 0xe1, + 0x7e, 0x6f, 0x4a, 0x85, 0xa5, 0x79, 0x66, 0x9e, 0xfd, 0x0f, 0xb0, 0x98, 0x78, + 0xe0, 0x88, 0xe3, 0x22, 0xe9, 0x06, 0xe8, 0x0d, 0x27, 0xf8, 0xd0, 0xca, 0x7e, + 0x79, 0x15, 0xab, 0x40, 0x96, 0x59, 0xa6, 0xd8, 0x0f, 0xde, 0xd1, 0x0a, 0xff, + 0x9f, 0xb7, 0x73, 0x74, 0x9d, 0x79, 0x28, 0x57, 0xf6, 0x8c, 0x7e, 0x8c, 0xf5, + 0x18, 0x26, 0x0a, 0x61, 0x08, 0x6d, 0xe3, 0x2f, 0xff, 0x82, 0x39, 0xf4, 0x53, + 0x61, 0x7a, 0x19, 0xf6, 0xfe, 0xc2, 0x20, 0x67, 0x60, 0x65, 0xeb, 0xe2, 0x75, + 0x7e, 0xfc, 0xac, 0xcb, 0x77, 0xfc, 0x61, 0xe5, 0x9b, 0x97, 0x63, 0x7e, 0x92, + 0x0d, 0xee, 0x5e, 0x7e, 0x7a, 0x12, 0xe9, 0xd6, 0xd2, 0x28, 0xb2, 0x6b, 0x2f, + 0xa8, 0x36, 0xf4, 0x72, 0x83, 0x69, 0xad, 0xcd, 0xfc, 0xd0, 0x04, 0xdc, 0xf1, + 0x9e, 0x27, 0xc0, 0xc0, 0x84, 0x44, 0xd2, 0x9a, 0x12, 0x2b, 0x23, 0x09, 0xf7, + 0x16, 0x3c, 0x99, 0x0e, 0xb9, 0x26, 0x1f, 0xd4, 0x15, 0xc0, 0x45, 0x4a, 0x56, + 0xaa, 0x3e, 0xaf, 0x9c, 0x1f, 0x9b, 0xff, 0xf6, 0x04, 0x77, 0x6a, 0x4d, 0x25, + 0xe7, 0xd3, 0xcd, 0xc5, 0xc5, 0xf1, 0x9c, 0xd2, 0xa8, 0x79, 0x4a, 0x4f, 0x57, + 0x16, 0x7f, 0xbc, 0x7e, 0xaa, 0x06, 0x16, 0x4d, 0x51, 0xc4, 0x53, 0x06, 0x14, + 0xbc, 0xf5, 0x20, 0xb2, 0x63, 0x82, 0x0a, 0xa1, 0x7b, 0x20, 0xb4, 0x8c, 0xbf, + 0x59, 0xd8, 0xe3, 0x09, 0x32, 0x2e, 0xbe, 0x56, 0x6f, 0xbe, 0x46, 0xe0, 0xaa, + 0x29, 0x76, 0x6a, 0xdf, 0xdf, 0x01, 0x7a, 0x71, 0x05, 0x10, 0x3c, 0x7f, 0xca, + 0xb7, 0xb0, 0x76, 0x48, 0xc7, 0xc1, 0x16, 0x04, 0x84, 0xf7, 0x7a, 0x6c, 0x70, + 0xa5, 0x38, 0x1b, 0x82, 0x56, 0x40, 0xa1, 0xbe, 0x48, 0xe4, 0x15, 0xa1, 0xe6, + 0xa2, 0x7d, 0x78, 0x02, 0x2a, 0x8a, 0x2f, 0xf0, 0x70, 0xab, 0xf1, 0x23, 0x94, + 0xe3, 0xae, 0x5a, 0x8c, 0x23, 0xe3, 0x73, 0x3e, 0xa4, 0x7a, 0x44, 0xcb, 0x2c, + 0x96, 0x8b, 0xca, 0x24, 0x98, 0x37, 0xde, 0x1d, 0x39, 0xa5, 0xa1, 0xdc, 0xae, + 0x71, 0x0c, 0xe0, 0x43, 0x01, 0x69, 0xbd, 0x6e, 0x9f, 0x64, 0xab, 0xf1, 0xe6, + 0x4e, 0xc4, 0x9e, 0xd0, 0x80, 0x4e, 0xb6, 0x47, 0x74, 0x3a, 0xce, 0xa9, 0x29, + 0xed, 0x0f, 0x7c, 0x90, 0x15, 0xb0, 0xe8, 0x1e, 0x21, 0x29, 0xdb, 0x05, 0x0d, + 0x5e, 0x78, 0xe6, 0x82, 0xc8, 0x19, 0x93, 0xea, 0x87, 0x53, 0xc9, 0x91, 0xb0, + 0x2e, 0x61, 0x81, 0xe0, 0x53, 0x73, 0xfb, 0x0c, 0x57, 0x65, 0xe6, 0xad, 0x28, + 0xca, 0x57, 0x1b, 0x85, 0x65, 0x33, 0x11, 0x90, 0xd2, 0xa1, 0x0d, 0x86, 0xe6, + 0xd7, 0x23, 0xa7, 0x3c, 0x1a, 0x03, 0xcc, 0xca, 0x8e, 0xaa, 0xf4, 0xcf, 0xf1, + 0xe4, 0x20, 0x32, 0xfb, 0xbb, 0x38, 0x9d, 0x3f, 0x66, 0xd5, 0x75, 0x55, 0xef, + 0x3f, 0x3e, 0x9e, 0x49, 0xc2, 0xac, 0x4e, 0x85, 0xbb, 0x75, 0x1d, 0x62, 0x66, + 0xc9, 0x03, 0xa6, 0x76, 0x6e, 0xa3, 0xd8, 0x4f, 0x3a, 0x37, 0xd8, 0xc7, 0xb3, + 0x06, 0xad, 0x8a, 0xb7, 0x1a, 0xd4, 0xb5, 0x4f, 0xe6, 0x5e, 0x83, 0xe0, 0x4e, + 0x9f, 0xb1, 0x6c, 0xef, 0x57, 0x67, 0xda, 0xa8, 0xde, 0x6c, 0x16, 0xe7, 0x60, + 0xdd, 0xf1, 0x6f, 0x2b, 0xb6, 0xe9, 0x54, 0xd0, 0x16, 0x49, 0x55, 0x20, 0xd8, + 0xff, 0x3b, 0xea, 0xd1, 0x0d, 0xb9, 0xc9, 0x4a, 0xe0, 0x48, 0x27, 0x21, 0xe1, + 0x32, 0xa0, 0xb8, 0x03, 0x9f, 0xea, 0xb2, 0xdb, 0xe1, 0x4c, 0x91, 0x2f, 0x56, + 0x7c, 0x8b, 0xe5, 0x84, 0xac, 0x9f, 0x96, 0x51, 0x58, 0xc6, 0x56, 0x0b, 0xba, + 0xf4, 0x23, 0xbd, 0x28, 0xf8, 0xf9, 0x89, 0xe4, 0x55, 0x1f, 0xdd, 0xe9, 0x2d, + 0xb1, 0x67, 0x27, 0x42, 0x04, 0x41, 0x70, 0x06, 0x58, 0xb5, 0x0e, 0xbb, 0x5a, + 0x16, 0x13, 0x26, 0x7e, 0xac, 0x51, 0xc8, 0x0b, 0x19, 0xec, 0xb7, 0x86, 0xab, + 0x3b, 0xb9, 0x37, 0xf0, 0xd9, 0x8e, 0x08, 0xb9, 0xc9, 0xcd, 0x4d, 0xf1, 0x53, + 0x4e, 0xfe, 0xe3, 0x8a, 0x8f, 0x87, 0x8c, 0x9f, 0x3b, 0xdc, 0x7e, 0xfb, 0x2d, + 0x53, 0xff, 0x84, 0xfb, 0x83, 0xea, 0xe7, 0xc9, 0x9e, 0xff, 0xa6, 0x3c, 0x96, + 0x49, 0xa1, 0xf1, 0x70, 0xd2, 0x9a, 0xf0, 0x3a, 0x3b, 0x45, 0x58, 0x9f, 0xae, + 0x81, 0xeb, 0x0b, 0x5d, 0x8e, 0x0d, 0x38, 0x02, 0x1d, 0x3b, 0x5f, 0x07, 0xe8, + 0x8c, 0x99, 0x04, 0x37, 0x6d, 0x27, 0xf1, 0x3e, 0x44, 0x41, 0xd5, 0x38, 0x74, + 0x42, 0xc5, 0xea, 0x0a, 0xf5, 0xa2, 0x0a, 0x38, 0x32, 0xbc, 0x3b, 0x9c, 0x59, + 0xb8, 0x4b, 0xca, 0x39, 0xb5, 0x2c, 0xd6, 0xb1, 0xfa, 0x29, 0x32, 0xba, 0x9d, + 0x66, 0xc4, 0x12, 0xf5, 0xcd, 0x39, 0x35, 0x1e, 0x13, 0x33, 0xef, 0x85, 0xd0, + 0xee, 0xe5, 0x45, 0xa7, 0xe4, 0x06, 0xf6, 0xeb, 0x3b, 0xf8, 0x93, 0xf3, 0xed, + 0xac, 0x94, 0x64, 0x33, 0x92, 0xa2, 0x8b, 0x0e, 0x49, 0x0c, 0x51, 0xe4, 0xb7, + 0x16, 0x3c, 0x1c, 0xf7, 0x57, 0xd2, 0x24, 0x18, 0xdd, 0x63, 0x38, 0x1b, 0xa2, + 0xf2, 0x98, 0x28, 0x83, 0x6f, 0xe9, 0x78, 0xda, 0xb5, 0x20, 0x1b, 0x2d, 0xb0, + 0x8c, 0x3b, 0x38, 0x9b, 0xa4, 0xb6, 0xac, 0xf7, 0x78, 0xc2, 0xbf, 0x91, 0x02, + 0xbe, 0x0c, 0x3e, 0x12, 0xd7, 0x7a, 0xea, 0x6d, 0xf7, 0x53, 0x8e, 0x8c, 0xf3, + 0x62, 0xba, 0xaa, 0xad, 0x1d, 0xc5, 0x60, 0x42, 0xc6, 0xf2, 0x4c, 0xaf, 0x46, + 0xbe, 0xd6, 0x6a, 0xbf, 0x4c, 0x40, 0x2a, 0x74, 0x92, 0x4e, 0xcf, 0xd0, 0xa0, + 0x8d, 0xed, 0xee, 0xa0, 0xef, 0xce, 0xcd, 0x35, 0x2c, 0x27, 0x5f, 0x13, 0xed, + 0x20, 0x76, 0x03, 0x82, 0x2b, 0x1e, 0xf9, 0x97, 0xb7, 0xed, 0x42, 0xf4, 0xa5, + 0x76, 0xb9, 0xe4, 0xc0, 0x07, 0x38, 0x56, 0x3f, 0x82, 0xa7, 0x62, 0x85, 0x46, + 0x7d, 0xa2, 0x95, 0xc2, 0x3b, 0xa1, 0xc5, 0x87, 0xeb, 0xef, 0xaf, 0x13, 0xcd, + 0x4d, 0x50, 0xf2, 0x3c, 0xa5, 0x74, 0x3c, 0x22, 0x5c, 0x38, 0x6d, 0x46, 0xd4, + 0xac, 0x70, 0x83, 0x79, 0xef, 0x99, 0x96, 0x74, 0x4b, 0x39, 0x12, 0x04, 0x4b, + 0x35, 0x5f, 0x92, 0x7a, 0x67, 0xaf, 0x1e, 0xf2, 0x6a, 0x71, 0x7f, 0xb5, 0xa8, + 0x46, 0xac, 0x9d, 0xa1, 0x5e, 0xa3, 0xf1, 0x8f, 0x8c, 0x36, 0x18, 0x3f, 0x87, + 0x9b, 0xb9, 0xa3, 0xb2, 0x98, 0xff, 0xf9, 0xa4, 0x89, 0x64, 0x6e, 0x77, 0x8e, + 0x6d, 0x67, 0x01, 0xf9, 0xad, 0xac, 0x7a, 0xe8, 0x82, 0x09, 0xa8, 0x43, 0xba, + 0x8a, 0x55, 0xd1, 0x19, 0x2b, 0xbe, 0xef, 0x31, 0xd0, 0x71, 0x45, 0x37, 0xf7, + 0xa0, 0x35, 0xb0, 0x79, 0xc6, 0xad, 0xd4, 0xab, 0x50, 0x61, 0x2d, 0x35, 0x89, + 0x7a, 0x93, 0x3d, 0x49, 0xe8, 0xef, 0x08, 0x6c, 0xdf, 0x96, 0xc8, 0x0d, 0x28, + 0x56, 0xcc, 0xc7, 0xe4, 0x5f, 0xc4, 0xef, 0xd4, 0xbf, 0x1b, 0x98, 0xab, 0x28, + 0x89, 0x1b, 0x4a, 0xea, 0x7e, 0xf8, 0x4c, 0xf7, 0x36, 0x93, 0x5c, 0x46, 0x6b, + 0x24, 0x97, 0x4d, 0xf8, 0xf5, 0x35, 0x5b, 0x8b, 0xa3, 0x20, 0xac, 0x5f, 0xbc, + 0x47, 0x5a, 0xa2, 0xcf, 0x5a, 0xd3, 0x77, 0x80, 0xbd, 0x9f, 0x9d, 0x46, 0x42, + 0xcf, 0x6c, 0x2d, 0xc6, 0xb8, 0x2f, 0x91, 0x7d, 0x09, 0xc4, 0xf7, 0x28, 0x88, + 0xf9, 0x15, 0x53, 0x44, 0x7f, 0xc5, 0x70, 0x26, 0x6d, 0xaa, 0xfd, 0x4b, 0x96, + 0xcf, 0xe2, 0xa0, 0xb0, 0x67, 0x92, 0x46, 0x9a, 0x72, 0x7d, 0xbe, 0xd0, 0x55, + 0x91, 0xea, 0x60, 0x57, 0x32, 0x20, 0x5e, 0x26, 0x05, 0x97, 0x8a, 0x3a, 0x90, + 0x2c, 0x3c, 0xd6, 0x5f, 0x94, 0x83, 0x00, 0xf7, 0x37, 0x51, 0x88, 0x15, 0xf4, + 0x63, 0xd3, 0xc6, 0x1a, 0x18, 0x9b, 0xc3, 0xbc, 0x84, 0xb0, 0x22, 0xf6, 0x3d, + 0x65, 0x4f, 0x52, 0x0e, 0x3a, 0x7a, 0xd8, 0x8e, 0x5d, 0x8d, 0xa1, 0x50, 0x14, + 0xbe, 0x4b, 0xb9, 0x67, 0x99, 0x27, 0xdc, 0x7e, 0x0f, 0xba, 0xf0, 0x58, 0xd9, + 0x3f, 0x37, 0xc7, 0x2b, 0x28, 0x6b, 0x02, 0xb7, 0x5f, 0x3c, 0xdb, 0xfb, 0x85, + 0x0e, 0xed, 0x90, 0xcb, 0x23, 0x39, 0x24, 0x32, 0xeb, 0xc3, 0x6b, 0xd2, 0x47, + 0x54, 0x46, 0x9c, 0x03, 0x73, 0x1a, 0x7e, 0xbb, 0xed, 0x28, 0x57, 0x78, 0x49, + 0x81, 0xa0, 0x71, 0x67, 0x05, 0xd9, 0xcb, 0x47, 0xd9, 0x87, 0xf8, 0x3d, 0x34, + 0x21, 0xb1, 0x07, 0xd1, 0x55, 0xdb, 0xb6, 0x61, 0xed, 0x08, 0xf2, 0xfc, 0x2e, + 0x6b, 0x4a, 0x5b, 0x09, 0x77, 0x64, 0x51, 0xd8, 0x73, 0xb2, 0xfc, 0x63, 0x68, + 0x1c, 0xe3, 0x08, 0xc8, 0x08, 0xf5, 0x38, 0x8c, 0xb1, 0xaa, 0x55, 0x89, 0xa1, + 0x87, 0x73, 0xdb, 0x39, 0x07, 0xa0, 0x6b, 0xef, 0x62, 0xd1, 0x29, 0x60, 0xaa, + 0xe7, 0x2a, 0x2b, 0x89, 0x7e, 0x26, 0xb5, 0x75, 0xfd, 0x04, 0x02, 0x91, 0x08, + 0x24, 0x55, 0x52, 0xaf, 0x05, 0x00, 0x99, 0x5a, 0xde, 0x55, 0x61, 0xfe, 0xd4, + 0x5c, 0xf8, 0xd1, 0x14, 0xd4, 0xcf, 0x02, 0x42, 0x0c, 0x4b, 0x96, 0x2d, 0xc2, + 0x02, 0xf8, 0xa5, 0x07, 0xf3, 0xd8, 0xe8, 0xa3, 0x44, 0xfb, 0xa1, 0x0a, 0x52, + 0x7f, 0xf2, 0x22, 0x54, 0xf6, 0xc3, 0xac, 0x8f, 0x3c, 0xf9, 0x70, 0x0b, 0x1f, + 0xd2, 0xec, 0xbe, 0x9f, 0x4e, 0x91, 0xe4, 0x3a, 0x65, 0x4f, 0xff, 0x02, 0x7c, + 0xd9, 0x17, 0x4b, 0x63, 0x8e, 0x6e, 0xfe, 0xc4, 0xab, 0xfb, 0xa1, 0x87, 0xf8, + 0xf3, 0xdb, 0xa0, 0x45, 0x9d, 0xa6, 0xc3, 0xf8, 0x00, 0xcb, 0x6b, 0x61, 0x33, + 0xa8, 0xb4, 0xac, 0x1e, 0xf6, 0x58, 0xd1, 0x11, 0xc0, 0x3f, 0x07, 0x22, 0x08, + 0xdc, 0xc2, 0x07, 0xa2, 0x22, 0x3a, 0x70, 0x22, 0x92, 0x43, 0x2e, 0x83, 0x06, + 0xfc, 0x03, 0x04, 0x63, 0xa4, 0x1b, 0xca, 0xfc, 0x07, 0x39, 0x3f, 0xad, 0x54, + 0xe5, 0x05, 0x2b, 0x1f, 0x10, 0x4b, 0xe5, 0x56, 0x7b, 0x15, 0x8f, 0x84, 0xf9, + 0x1a, 0xcc, 0xed, 0x1c, 0xff, 0xc0, 0x65, 0x96, 0xb5, 0x33, 0x69, 0xbd, 0x2b, + 0x78, 0x8f, 0x15, 0x00, 0xfe, 0x5e, 0xe5, 0x6c, 0x0c, 0xe7, 0x04, 0xeb, 0xa2, + 0xc1, 0xa3, 0xa3, 0x29, 0x0d, 0xe6, 0xec, 0x68, 0xcc, 0xb5, 0xef, 0x7c, 0xd0, + 0x21, 0x2a, 0x3f, 0x66, 0x3d, 0x08, 0x61, 0x49, 0x4e, 0x09, 0x74, 0x29, 0xa8, + 0x60, 0x7b, 0xca, 0xd1, 0x62, 0x46, 0x11, 0xef, 0xa2, 0xd5, 0xc4, 0x09, 0xd1, + 0x9f, 0xf5, 0x0d, 0xeb, 0x6a, 0x74, 0xc1, 0x7d, 0x17, 0x39, 0xbc, 0x6e, 0x95, + 0x93, 0x0c, 0x8b, 0xd9, 0x23, 0xb3, 0xfa, 0x7a, 0xd3, 0xb0, 0x76, 0x94, 0x36, + 0x7b, 0x95, 0x2d, 0xbb, 0x71, 0x7f, 0x75, 0x18, 0x90, 0xc8, 0xac, 0x30, 0x36, + 0xda, 0x0d, 0xb1, 0xa0, 0x67, 0x85, 0x26, 0x2f, 0xa0, 0xfa, 0xe8, 0x7f, 0xd8, + 0x8a, 0x1e, 0xa8, 0x33, 0x01, 0x11, 0x63, 0x45, 0x54, 0x09, 0xe0, 0x43, 0xb8, + 0x40, 0xbe, 0xa3, 0xae, 0xa6, 0x33, 0x24, 0x08, 0x79, 0x7f, 0x1c, 0x25, 0x41, + 0x92, 0x32, 0xd6, 0x6f, 0x03, 0x5a, 0x8e, 0x81, 0x06, 0x08, 0xf8, 0x34, 0xed, + 0x2e, 0xaa, 0xd3, 0xcb, 0x68, 0x25, 0x0a, 0xa9, 0xb3, 0xab, 0x1a, 0x83, 0x45, + 0x32, 0xf1, 0x06, 0x50, 0xa3, 0x40, 0x0e, 0x5f, 0x58, 0x3a, 0x19, 0xb3, 0x82, + 0x57, 0x59, 0xea, 0x6c, 0x0f, 0x6f, 0xe1, 0xf2, 0x3d, 0xe5, 0x40, 0x43, 0x14, + 0x32, 0x18, 0xb6, 0x26, 0xc2, 0x04, 0x9a, 0xde, 0x8f, 0x4c, 0x1f, 0xc0, 0x58, + 0x08, 0x1b, 0x6a, 0xad, 0xdb, 0x65, 0x87, 0x77, 0x19, 0x83, 0xb7, 0x03, 0xdf, + 0x9c, 0xd4, 0x2e, 0x24, 0x96, 0x0e, 0x50, 0x8a, 0x04, 0x36, 0x11, 0x8d, 0x0a, + 0x02, 0x78, 0x6f, 0xd5, 0xe3, 0x74, 0x85, 0xe8, 0xc2, 0x8f, 0x0c, 0xfa, 0x56, + 0x3a, 0x8c, 0x48, 0xd9, 0xf0, 0x76, 0x54, 0x45, 0xa4, 0x48, 0xc9, 0x0b, 0xbf, + 0x98, 0x7b, 0xe1, 0xda, 0x54, 0x46, 0x3d, 0xf8, 0x73, 0x3b, 0x03, 0x06, 0x49, + 0x64, 0xa4, 0xb3, 0xaf, 0x19, 0x89, 0xaa, 0x36, 0x23, 0x41, 0xb9, 0xd8, 0x31, + 0x14, 0x1f, 0xf6, 0xe9, 0x93, 0x26, 0xa1, 0x55, 0x50, 0x7a, 0x0a, 0x1f, 0x4e, + 0x18, 0xb6, 0x95, 0xa4, 0xb2, 0x55, 0x66, 0x19, 0x0b, 0xb1, 0x4e, 0xfc, 0x33, + 0x3d, 0x3d, 0x64, 0x4e, 0x76, 0x9c, 0x9c, 0x15, 0x8c, 0x90, 0x8a, 0x66, 0x35, + 0x5b, 0x0c, 0x91, 0xed, 0x4d, 0x95, 0x0b, 0x99, 0xdd, 0xe9, 0x59, 0xca, 0xa2, + 0x89, 0x5a, 0x8f, 0x9a, 0x1c, 0x57, 0x63, 0x41, 0x33, 0x30, 0xdc, 0xd9, 0x36, + 0xfd, 0xe2, 0x50, 0x9e, 0x4c, 0x3a, 0x64, 0x1c, 0x19, 0x9b, 0x87, 0x76, 0x30, + 0x24, 0x78, 0xb3, 0x3c, 0x8d, 0x57, 0x47, 0x92, 0x41, 0x4c, 0x5f, 0xe5, 0xb7, + 0x4f, 0x21, 0x00, + ], + txid: [ + 0xd0, 0x61, 0x03, 0x80, 0x10, 0x28, 0x68, 0x8b, 0x84, 0x86, 0x21, 0x81, 0xdd, + 0xfa, 0x55, 0x4e, 0x8c, 0x6e, 0x23, 0xca, 0x88, 0x2f, 0xc0, 0xbd, 0xc5, 0x82, + 0x9d, 0x0a, 0xb9, 0xe6, 0xb8, 0xc1, + ], + auth_digest: [ + 0x73, 0x93, 0xc5, 0x4e, 0x08, 0x00, 0xea, 0x1e, 0x67, 0x32, 0x52, 0x9d, 0xec, + 0x07, 0xcd, 0x74, 0xd2, 0x87, 0x76, 0x9f, 0x77, 0x23, 0x08, 0xf2, 0xad, 0x7b, + 0x61, 0x4a, 0x7e, 0x05, 0xf5, 0x45, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0xd0, 0x61, 0x03, 0x80, 0x10, 0x28, 0x68, 0x8b, 0x84, 0x86, 0x21, 0x81, 0xdd, + 0xfa, 0x55, 0x4e, 0x8c, 0x6e, 0x23, 0xca, 0x88, 0x2f, 0xc0, 0xbd, 0xc5, 0x82, + 0x9d, 0x0a, 0xb9, 0xe6, 0xb8, 0xc1, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x4a, + 0x2b, 0xfc, 0x0c, 0x08, 0xb2, 0x37, 0x01, 0x02, 0x29, 0x59, 0xb5, 0xcb, 0x96, + 0x49, 0x97, 0x9e, 0x3c, 0xcf, 0x75, 0xa8, 0xda, 0xd0, 0x54, 0x60, 0x26, 0x1f, + 0xcd, 0xcb, 0x00, 0x7a, 0xeb, 0xc1, 0x5e, 0x11, 0x67, 0x5c, 0x2d, 0xb4, 0xa6, + 0xcb, 0x79, 0x38, 0xe1, 0xfe, 0x05, 0x63, 0xac, 0x6a, 0x65, 0x00, 0x75, 0x44, + 0x1e, 0x16, 0xc7, 0x07, 0xf0, 0x97, 0x14, 0x47, 0x4c, 0x96, 0x16, 0x0a, 0xa6, + 0x8e, 0xaa, 0x12, 0x31, 0x79, 0x06, 0x9c, 0xd2, 0x20, 0x44, 0x06, 0x26, 0xcd, + 0xfe, 0xed, 0x65, 0xf9, 0xfa, 0xbd, 0xaa, 0x6d, 0xb1, 0x76, 0x0d, 0xa5, 0x00, + 0x4c, 0xfd, 0x60, 0x03, 0x00, 0x01, 0x46, 0xa8, 0x32, 0x69, 0x19, 0xfa, 0x97, + 0x2c, 0xea, 0x13, 0xa4, 0x77, 0xac, 0x3a, 0x3b, 0x9d, 0x75, 0xc9, 0xe8, 0xb3, + 0x9b, 0x7d, 0x9f, 0x06, 0xf8, 0x23, 0xf6, 0x7f, 0x54, 0x22, 0x1e, 0x17, 0xa5, + 0xdb, 0x69, 0x39, 0x39, 0xfa, 0x89, 0x76, 0x6f, 0xf0, 0x98, 0xad, 0x4b, 0xc6, + 0x40, 0x37, 0xa3, 0x4a, 0x73, 0x12, 0x86, 0x05, 0x72, 0x3a, 0x24, 0x1f, 0x0e, + 0xb1, 0x54, 0x0f, 0x5f, 0x5b, 0xd1, 0x82, 0x9e, 0x40, 0x11, 0x9a, 0xa7, 0x89, + 0x7d, 0x89, 0x40, 0x4d, 0xc4, 0x96, 0x60, 0x46, 0x68, 0xf5, 0x59, 0xca, 0x67, + 0x43, 0x7d, 0x2b, 0xfb, 0xb7, 0xf5, 0x1f, 0x36, 0xe0, 0xa5, 0xb7, 0x02, 0x2c, + 0xb9, 0xa2, 0x66, 0xc6, 0xae, 0xc6, 0xe2, 0xef, 0xfb, 0xbe, 0x9f, 0xa3, 0x95, + 0x8e, 0x85, 0x62, 0x51, 0x22, 0x94, 0x63, 0xce, 0x34, 0xb3, 0xbc, 0xb8, 0xda, + 0xd5, 0x26, 0x4e, 0x9f, 0x53, 0xf8, 0x3c, 0x04, 0xb7, 0x3b, 0x98, 0xb2, 0x73, + 0x44, 0x8f, 0x27, 0xa0, 0x69, 0xe3, 0x95, 0x0c, 0xd9, 0x42, 0x72, 0x2e, 0x7c, + 0x32, 0x96, 0x33, 0xd5, 0x6d, 0x3f, 0x72, 0x2f, 0xe3, 0xe2, 0x57, 0x04, 0x17, + 0xed, 0x82, 0x05, 0xd9, 0xed, 0xf2, 0x02, 0x32, 0xb7, 0xeb, 0x2a, 0xa5, 0xf2, + 0x55, 0xce, 0xa3, 0x9d, 0x59, 0x7d, 0xf3, 0x19, 0x3d, 0x9d, 0x65, 0x85, 0x03, + 0xfd, 0x1c, 0x74, 0xcf, 0xf8, 0xc7, 0x70, 0x5c, 0x89, 0xc0, 0xbb, 0xcc, 0xda, + 0x9e, 0x66, 0x5e, 0x3b, 0x06, 0xba, 0x87, 0x9f, 0xdd, 0xf3, 0x5e, 0x0b, 0x2f, + 0x60, 0xc2, 0xa7, 0x0c, 0xb8, 0xeb, 0x9d, 0xe2, 0xf5, 0xd7, 0x38, 0xc0, 0x5e, + 0x34, 0xe5, 0x0f, 0x1f, 0x26, 0x19, 0x25, 0x8b, 0x89, 0xe5, 0x73, 0xda, 0x55, + 0x75, 0x46, 0x3d, 0x2e, 0x3b, 0xce, 0x39, 0xf7, 0x0e, 0xb4, 0x55, 0x26, 0xcd, + 0x99, 0xfa, 0xd9, 0x0f, 0x97, 0x92, 0xd0, 0xcd, 0x59, 0x3b, 0xa8, 0x6a, 0xa1, + 0xae, 0xa5, 0x03, 0xdd, 0xca, 0x5e, 0x3e, 0x57, 0x37, 0xe6, 0xfc, 0x7b, 0xab, + 0x27, 0x85, 0x12, 0x69, 0x20, 0xc4, 0x47, 0xd5, 0xe5, 0x6a, 0x75, 0xdb, 0xe8, + 0x9d, 0x68, 0x8b, 0xc0, 0xda, 0xa7, 0x9a, 0xa6, 0x2d, 0xe9, 0xea, 0x29, 0x55, + 0xf7, 0x1e, 0x1a, 0x61, 0x68, 0x2a, 0x61, 0x78, 0xf8, 0x0b, 0xca, 0xda, 0x3b, + 0x97, 0xae, 0xec, 0x77, 0xd9, 0xc8, 0x56, 0x3b, 0x06, 0x9e, 0xa0, 0x13, 0x2f, + 0x72, 0x3f, 0xbe, 0x75, 0x60, 0x2d, 0xd6, 0x29, 0xac, 0x48, 0x09, 0x93, 0xd3, + 0x71, 0x4f, 0xf0, 0x2c, 0x97, 0x0e, 0xbd, 0x83, 0xe6, 0xd6, 0xcb, 0xbe, 0x39, + 0x08, 0x6b, 0x03, 0x54, 0x20, 0xe0, 0xc2, 0x75, 0x62, 0x86, 0x58, 0xa3, 0xba, + 0x92, 0x30, 0x5c, 0xc0, 0x76, 0x98, 0xf1, 0x2e, 0xe1, 0xe4, 0x17, 0x13, 0x70, + 0xac, 0x39, 0xdf, 0x0e, 0x46, 0x6d, 0xc8, 0xec, 0xc3, 0x9d, 0xa5, 0xee, 0x47, + 0xb6, 0x82, 0x9d, 0xbb, 0xa9, 0x97, 0x0f, 0x03, 0x58, 0xed, 0x68, 0x26, 0x49, + 0x60, 0x5c, 0x7b, 0xfe, 0xe6, 0x93, 0x1a, 0x29, 0x5b, 0x14, 0xa3, 0x40, 0x76, + 0x00, 0x07, 0x4e, 0xdc, 0x79, 0xfa, 0x61, 0xe6, 0x80, 0x6f, 0x11, 0x08, 0xd3, + 0x34, 0xb4, 0xa5, 0x90, 0xf7, 0xa0, 0x26, 0xb0, 0xeb, 0x02, 0x80, 0x4d, 0x39, + 0x17, 0x46, 0x6e, 0x99, 0x91, 0x20, 0x64, 0x1c, 0xe0, 0x7e, 0xbc, 0xdc, 0x99, + 0x42, 0x60, 0x82, 0xe0, 0x77, 0x1f, 0x15, 0x9c, 0x82, 0x6a, 0x9b, 0xe6, 0xce, + 0xd7, 0x2d, 0x0e, 0x9c, 0xfa, 0x5b, 0x4b, 0x8a, 0x86, 0x40, 0xca, 0x34, 0x88, + 0xa1, 0xeb, 0x2b, 0x6e, 0x37, 0x4e, 0x8c, 0x2e, 0x00, 0x3c, 0xdf, 0xa2, 0x32, + 0x10, 0x37, 0x48, 0xb5, 0xc9, 0xdc, 0x11, 0xbb, 0x30, 0xf6, 0x46, 0xb9, 0x73, + 0xd7, 0x83, 0xf5, 0x99, 0x14, 0x17, 0x4e, 0x48, 0xbd, 0x6a, 0x84, 0xfa, 0xd8, + 0x9d, 0xbc, 0xa5, 0xc7, 0x6d, 0x0a, 0xb4, 0x14, 0x5a, 0xbd, 0x08, 0xe4, 0xd0, + 0xf2, 0xc7, 0x60, 0x25, 0xfc, 0x85, 0xfc, 0x11, 0x6c, 0xca, 0x8d, 0x30, 0x2c, + 0x8a, 0x3b, 0xeb, 0x26, 0x60, 0x3a, 0x1a, 0xf1, 0xb5, 0x93, 0x91, 0xea, 0xf4, + 0x71, 0x75, 0x9a, 0xdf, 0x19, 0x4c, 0x40, 0xc2, 0x09, 0x29, 0x8c, 0xc0, 0x51, + 0xfc, 0x79, 0x03, 0xfe, 0x40, 0x90, 0x2c, 0x35, 0x6f, 0x28, 0x27, 0x9f, 0x27, + 0x94, 0xbb, 0xb9, 0xe0, 0x0b, 0x1e, 0x22, 0x0e, 0x55, 0xb6, 0x76, 0xa1, 0x8a, + 0x9c, 0xad, 0xb8, 0x8b, 0x5b, 0x14, 0x8d, 0x38, 0xf3, 0x80, 0x90, 0xed, 0xc4, + 0xf2, 0x6f, 0x14, 0x90, 0xb6, 0xa1, 0x7c, 0xf9, 0x9f, 0x9a, 0x7c, 0x45, 0x8c, + 0x3b, 0x31, 0x82, 0x3f, 0xdf, 0x69, 0x57, 0x8c, 0x47, 0xdb, 0x5b, 0x3d, 0xda, + 0x86, 0xaa, 0xb1, 0xec, 0x9f, 0x58, 0xd9, 0x62, 0x26, 0xc6, 0xb9, 0x1d, 0xc0, + 0xf0, 0x3f, 0xe8, 0xd7, 0xdf, 0x23, 0x0f, 0x07, 0xb2, 0xfb, 0x94, 0x87, 0x76, + 0x60, 0x1e, 0x9c, 0x83, 0xf6, 0xc1, 0xcf, 0x87, 0x6f, 0xc8, 0xed, 0x44, 0xad, + 0xa0, 0xe1, 0x60, 0x8f, 0x48, 0x5c, 0x6d, 0x75, 0x67, 0x8b, 0x3c, 0x00, 0xe9, + 0x67, 0xd3, 0x4a, 0x9c, 0xf1, 0x02, 0x8c, 0x17, 0x05, 0xfa, 0x37, 0x67, 0xf4, + 0x6d, 0x4b, 0xab, 0x70, 0x28, 0xb0, 0x9b, 0x20, 0x38, 0xfc, 0x1b, 0x72, 0x7f, + 0x61, 0x9e, 0x61, 0xc4, 0xfc, 0x16, 0xbf, 0xfe, 0x65, 0x7e, 0x99, 0x12, 0x6a, + 0xc5, 0x18, 0x4f, 0xc8, 0x7f, 0x5e, 0x53, 0x01, 0x88, 0x64, 0x23, 0xb3, 0x56, + 0x87, 0x59, 0x09, 0xec, 0x92, 0xb3, 0x2d, 0x33, 0x08, 0x42, 0x53, 0xa1, 0xb9, + 0x7c, 0x5d, 0x2e, 0xd6, 0x6c, 0x7e, 0x22, 0xd1, 0x85, 0x58, 0xfe, 0x82, 0xb5, + 0xec, 0x88, 0xc6, 0x07, 0x05, 0x82, 0xfa, 0xcf, 0x75, 0x6d, 0x70, 0x32, 0x38, + 0xd9, 0xaf, 0x94, 0x19, 0x96, 0x6b, 0xe4, 0x62, 0xdf, 0xbd, 0x31, 0x5c, 0x5b, + 0xfa, 0xf0, 0x44, 0xaa, 0x69, 0x5a, 0x05, 0xe6, 0x9d, 0x3d, 0x41, 0xe7, 0x73, + 0x78, 0x75, 0x1d, 0x4e, 0x02, 0xc2, 0x66, 0xdf, 0xb5, 0xcb, 0x6a, 0x7c, 0x40, + 0x08, 0xf9, 0x44, 0x88, 0x83, 0x11, 0xe6, 0xde, 0x37, 0xdc, 0x7b, 0xdf, 0x65, + 0xd7, 0x0c, 0xab, 0x3e, 0x07, 0x8a, 0xb4, 0x4e, 0x23, 0x2b, 0x41, 0x1c, 0xaf, + 0xb2, 0x43, 0x6c, 0x29, 0x7e, 0x6c, 0x01, 0xff, 0x68, 0x56, 0x99, 0x61, 0x18, + 0x75, 0xc5, 0xc9, 0x1d, 0x6a, 0x63, 0xe0, 0x85, 0x29, 0x5c, 0x2d, 0x4b, 0xcd, + 0x75, 0x06, 0x65, 0x15, 0x39, 0x8f, 0x48, 0x6c, 0x26, 0x3e, 0x4b, 0xfb, 0xe2, + 0x6a, 0x41, 0x8e, 0xd1, 0xcd, 0xe6, 0x18, 0x4b, 0x89, 0x50, 0xfe, 0x7a, 0xac, + 0x7f, 0x20, 0xa4, 0x7b, 0xa1, 0xbf, 0xf9, 0x80, 0x4f, 0x53, 0xf6, 0x93, 0x23, + 0x2b, 0x3d, 0x5c, 0xc5, 0x84, 0x42, 0xb5, 0x11, 0xe6, 0x88, 0xf9, 0xee, 0x85, + 0x53, 0x76, 0x8a, 0x21, 0x16, 0xc6, 0xda, 0xde, 0x90, 0x70, 0x1a, 0xad, 0xb0, + 0x78, 0x4b, 0xac, 0x3f, 0xe9, 0x48, 0x80, 0x79, 0xe5, 0x56, 0x09, 0x27, 0x2c, + 0x63, 0xb5, 0x49, 0xb0, 0xc8, 0x5f, 0x11, 0x0c, 0xc9, 0xc9, 0x58, 0x68, 0x01, + 0x14, 0xb3, 0x11, 0x74, 0x80, 0xaf, 0x57, 0xcb, 0x15, 0x9e, 0xdf, 0xbe, 0x5c, + 0xb9, 0xc6, 0x2b, 0xce, 0x2c, 0xf2, 0xab, 0x29, 0xb6, 0x67, 0x11, 0xac, 0x7a, + 0xa5, 0x3a, 0x74, 0x9f, 0xfa, 0x83, 0x90, 0x7e, 0xcb, 0x69, 0x12, 0xaa, 0x56, + 0x96, 0x38, 0xde, 0xa1, 0x9e, 0x54, 0x41, 0x61, 0x1e, 0xfc, 0xa3, 0x20, 0x99, + 0x65, 0x3e, 0x8a, 0x5c, 0xa1, 0xfb, 0xbd, 0xba, 0xb1, 0xd6, 0x44, 0x71, 0xec, + 0x32, 0x0e, 0xc3, 0x8e, 0xa4, 0x88, 0x40, 0x0c, 0x9b, 0x1f, 0x4e, 0x8c, 0xb5, + 0x48, 0x0c, 0x0e, 0x92, 0x42, 0xb0, 0x86, 0xa8, 0x0e, 0xee, 0xd4, 0x90, 0xae, + 0x32, 0x00, 0x0c, 0x80, 0x09, 0xec, 0xb7, 0x1f, 0xfa, 0x39, 0xf4, 0xf3, 0xb5, + 0x74, 0x9c, 0xfd, 0x1b, 0xef, 0xe0, 0xd9, 0x66, 0x7a, 0xb3, 0x02, 0x20, 0xc2, + 0xdc, 0x04, 0x39, 0x36, 0x98, 0xb2, 0xcf, 0xa2, 0x04, 0x92, 0xf2, 0x50, 0xce, + 0x14, 0x32, 0x35, 0x81, 0x58, 0x70, 0x3d, 0xf7, 0xb1, 0x39, 0xd7, 0x45, 0xce, + 0x1f, 0xc3, 0x40, 0x78, 0x77, 0x01, 0xfb, 0x51, 0xdd, 0x5e, 0x48, 0xb8, 0x95, + 0x09, 0x41, 0x7d, 0x88, 0x89, 0x00, 0x80, 0x63, 0xf9, 0xba, 0x01, 0x5a, 0x07, + 0xd8, 0xd3, 0x9b, 0xbd, 0x00, 0x76, 0x2f, 0x59, 0x5a, 0xfa, 0xd8, 0xd8, 0x59, + 0xea, 0xab, 0xf0, 0xd8, 0x2d, 0x46, 0x33, 0xcf, 0x82, 0x98, 0xb0, 0x9b, 0xea, + 0x3f, 0x22, 0x28, 0x55, 0xa9, 0x2a, 0x08, 0x43, 0xf5, 0x2f, 0xa5, 0x8d, 0xb3, + 0xa1, 0x75, 0xc3, 0x0d, 0x2a, 0xbe, 0x64, 0x82, 0x64, 0x90, 0xcb, 0xe6, 0xca, + 0x14, 0x88, 0xfe, 0x3a, 0x01, 0x5a, 0x94, 0x6d, 0xc9, 0xc4, 0x5a, 0xc3, 0x09, + 0x25, 0x72, 0x7a, 0x13, 0xe0, 0x89, 0x78, 0xf7, 0x24, 0x03, 0x47, 0x20, 0x8a, + 0x4d, 0x25, 0x38, 0xc2, 0xd5, 0x61, 0x24, 0x37, 0x8c, 0x22, 0xc0, 0x4e, 0x23, + 0xdc, 0x28, 0xb1, 0x50, 0x19, 0xbe, 0x77, 0x6d, 0x70, 0xbf, 0xc1, 0xd2, 0x64, + 0x5b, 0x5e, 0x80, 0xd1, 0xfd, 0x84, 0x19, 0xdf, 0x72, 0x90, 0x43, 0x80, 0xe2, + 0xe1, 0xfc, 0x4d, 0xd1, 0xdf, 0x1b, 0xa3, 0xdf, 0xe4, 0x80, 0xcc, 0x84, 0x6d, + 0x51, 0x51, 0x4a, 0x06, 0x5e, 0xd7, 0x62, 0x78, 0x7a, 0xfd, 0x6e, 0xb9, 0x0b, + 0xdf, 0x8f, 0xbb, 0xad, 0x5e, 0xb3, 0xd2, 0x3f, 0xdc, 0x8c, 0x54, 0xcc, 0xa1, + 0x0f, 0xa1, 0xfe, 0x54, 0x64, 0x82, 0xf5, 0xe1, 0x42, 0x4b, 0xfd, 0xa8, 0x7a, + 0xa7, 0xfb, 0x78, 0x6e, 0x26, 0x0f, 0x26, 0x14, 0xbe, 0x08, 0x11, 0xee, 0x16, + 0xb8, 0xd2, 0x9d, 0xf9, 0xa0, 0xf3, 0x30, 0xe9, 0x70, 0x9f, 0x63, 0xc9, 0x50, + 0xfb, 0xd9, 0x03, 0xff, 0x7d, 0x5b, 0x0c, 0xa2, 0x9f, 0xd6, 0x3b, 0x0f, 0x97, + 0x51, 0x77, 0x69, 0x02, 0x5c, 0xc3, 0x6a, 0x52, 0xe0, 0xc1, 0x15, 0x93, 0x4a, + 0x3c, 0xa2, 0x58, 0xb8, 0xba, 0xb9, 0x00, 0x16, 0xa4, 0x01, 0xd5, 0xd8, 0xd7, + 0xc3, 0xb9, 0x44, 0x92, 0x5b, 0x35, 0xa9, 0x34, 0x9a, 0x1a, 0xc7, 0xd9, 0x85, + 0x21, 0x61, 0x0c, 0x2f, 0xad, 0x8b, 0x5c, 0x8b, 0x31, 0x9c, 0xd6, 0xe0, 0x5f, + 0x9b, 0xbe, 0xd3, 0x53, 0xf1, 0xd0, 0xc8, 0x65, 0xa9, 0x4a, 0xa4, 0x56, 0xdc, + 0xd1, 0x8a, 0x39, 0xe2, 0xf5, 0x85, 0xd9, 0xbe, 0xa8, 0x4e, 0xb5, 0xf0, 0xaf, + 0x8b, 0x45, 0x77, 0x94, 0x98, 0xc9, 0xae, 0x1f, 0x75, 0x5d, 0x9f, 0x90, 0xa2, + 0xc3, 0x27, 0x3e, 0x52, 0xaa, 0xd3, 0xca, 0x34, 0xb4, 0x43, 0x79, 0x1b, 0x02, + 0x99, 0x94, 0xb1, 0xee, 0x4c, 0x40, 0xfc, 0xa0, 0x05, 0x35, 0x2b, 0x8d, 0x6d, + 0x28, 0x69, 0x83, 0x17, 0x7d, 0x65, 0x5b, 0x6f, 0x34, 0xc4, 0x99, 0x32, 0x2b, + 0x65, 0xda, 0x6e, 0xb6, 0xb9, 0xe1, 0xf4, 0xd5, 0x90, 0x21, 0x25, 0xb6, 0x4c, + 0x93, 0xda, 0x74, 0xcc, 0x1a, 0x35, 0x60, 0x18, 0xb0, 0x09, 0x3b, 0xb5, 0xcc, + 0x82, 0x05, 0xb2, 0x69, 0x2f, 0x6d, 0x3e, 0x9c, 0x1c, 0xc8, 0x85, 0x41, 0xb4, + 0xd9, 0x83, 0x84, 0x54, 0x85, 0xb4, 0x50, 0xcd, 0x4b, 0x98, 0x2a, 0xba, 0x8d, + 0x2e, 0x91, 0xf4, 0x1f, 0x22, 0xee, 0xe7, 0xf3, 0x6d, 0x79, 0xcc, 0xa9, 0xc0, + 0xe0, 0x1b, 0x26, 0xc4, 0x65, 0x11, 0x18, 0xea, 0x77, 0x15, 0x14, 0xc7, 0x7e, + 0xd6, 0x0c, 0xd5, 0x24, 0x51, 0x94, 0x2d, 0xc8, 0x5b, 0x3f, 0xba, 0x44, 0x8b, + 0x2d, 0x63, 0x10, 0xf2, 0x77, 0x79, 0x42, 0x83, 0x2e, 0x21, 0xcf, 0x3d, 0x44, + 0x87, 0x4f, 0x8d, 0x04, 0xa8, 0x05, 0x26, 0xc6, 0x9f, 0xd3, 0xb5, 0x10, 0x49, + 0xe6, 0x92, 0xba, 0x45, 0xa7, 0x02, 0xee, 0x12, 0x51, 0x4a, 0xc2, 0xe1, 0x89, + 0x4f, 0x9b, 0x83, 0x66, 0x4e, 0x11, 0x98, 0x19, 0x7f, 0x03, 0x00, 0xce, 0xfe, + 0x52, 0xfd, 0xd1, 0xd2, 0xa9, 0x80, 0x35, 0x33, 0x28, 0x9f, 0x57, 0x63, 0xa6, + 0xda, 0x83, 0xf6, 0x84, 0x1d, 0xb2, 0x36, 0x4d, 0xe0, 0x55, 0x45, 0x3e, 0x2e, + 0xda, 0x74, 0xfe, 0x0e, 0x22, 0x8f, 0x05, 0xb6, 0xec, 0x57, 0x89, 0xc1, 0x3f, + 0xc2, 0x71, 0x95, 0x56, 0x15, 0x52, 0x63, 0x96, 0x6e, 0x81, 0xf5, 0x21, 0x51, + 0xe2, 0xf6, 0xe3, 0x68, 0x69, 0xd8, 0xa3, 0xc4, 0xc4, 0x96, 0xa5, 0x13, 0x63, + 0x2c, 0xaa, 0x8a, 0xbe, 0x1f, 0x27, 0x35, 0xeb, 0x60, 0xfc, 0x12, 0x85, 0x82, + 0x8e, 0xad, 0xdc, 0x54, 0x41, 0xa4, 0x02, 0xa3, 0xbf, 0x5b, 0xcd, 0x22, 0x7c, + 0xd8, 0x04, 0xe3, 0xc8, 0xca, 0x21, 0x24, 0x3c, 0xdf, 0xcd, 0x53, 0xd8, 0x66, + 0x05, 0xf3, 0xf8, 0xaf, 0x1a, 0x9c, 0xc5, 0x69, 0x33, 0x15, 0x53, 0x28, 0x28, + 0x01, 0x43, 0xfa, 0xdb, 0x3a, 0x1f, 0xc3, 0x3d, 0x76, 0x9f, 0x07, 0xff, 0xc0, + 0x1e, 0x35, 0x79, 0xe1, 0x18, 0x1f, 0x19, 0x15, 0xdb, 0x89, 0xd8, 0x2e, 0x50, + 0xbd, 0x74, 0x24, 0x08, 0x7c, 0x79, 0x7d, 0x9b, 0x7b, 0x3b, 0x7d, 0x2a, 0x53, + 0xb8, 0xff, 0xf9, 0xf2, 0xd9, 0x28, 0xab, 0x99, 0x6d, 0xce, 0x5e, 0xd2, 0x71, + 0x58, 0x98, 0xe4, 0x85, 0x8e, 0xec, 0x60, 0x78, 0xa9, 0x48, 0x8d, 0x2d, 0xa6, + 0xd1, 0x73, 0x05, 0xd0, 0xa3, 0x47, 0x18, 0x62, 0xa2, 0x22, 0x38, 0xb9, 0xbe, + 0xc2, 0x3e, 0xf2, 0xe2, 0x04, 0x1d, 0x50, 0x08, 0x73, 0x3e, 0x9e, 0xa5, 0x66, + 0x2c, 0x9f, 0xea, 0x0e, 0x4a, 0xfd, 0xf3, 0x27, 0x0c, 0x11, 0x32, 0x3b, 0xa4, + 0x8b, 0x3f, 0xaa, 0x1f, 0x73, 0xea, 0xb9, 0xb9, 0x66, 0x96, 0x30, 0xcf, 0x46, + 0xbb, 0x23, 0x27, 0xac, 0x4f, 0x2f, 0x47, 0x55, 0x6e, 0x75, 0x4a, 0x8f, 0x25, + 0x4b, 0x98, 0x21, 0xe2, 0xbc, 0xe6, 0x63, 0x8b, 0x72, 0xdb, 0xaf, 0xe8, 0x87, + 0x68, 0xd8, 0xb6, 0xaf, 0xb4, 0x40, 0xdf, 0xe8, 0xd2, 0x36, 0x27, 0xe7, 0x9f, + 0x4e, 0x4e, 0x15, 0xea, 0x7a, 0x0a, 0x6b, 0x5a, 0x4a, 0x8e, 0xb6, 0x4c, 0x0c, + 0x88, 0x4e, 0x26, 0x45, 0x95, 0xbe, 0xed, 0xf9, 0xd4, 0x9a, 0x79, 0x36, 0xbb, + 0x28, 0x7f, 0xe2, 0x8e, 0x1c, 0x29, 0x63, 0x5e, 0xae, 0xca, 0x74, 0x7d, 0x06, + 0x87, 0xcf, 0x46, 0x59, 0x02, 0xd2, 0x5f, 0x5e, 0x51, 0x58, 0x48, 0x1d, 0xaa, + 0xcd, 0xd3, 0x00, 0xb4, 0x77, 0x40, 0xbc, 0x0c, 0x62, 0x77, 0xb4, 0x47, 0xcc, + 0x26, 0x64, 0x04, 0x42, 0x43, 0xdd, 0x48, 0x11, 0x40, 0x4e, 0xcb, 0xd7, 0xc7, + 0xa6, 0x3c, 0x9f, 0xb7, 0xd9, 0x37, 0xbc, 0xd8, 0x12, 0xc2, 0x34, 0x59, 0x23, + 0xb5, 0x90, 0x26, 0x83, 0xbd, 0x2e, 0xd5, 0x4c, 0x01, 0xae, 0x04, 0x19, 0xa7, + 0xf5, 0x4e, 0x8a, 0x3a, 0x59, 0xc6, 0xa6, 0xda, 0xcf, 0x89, 0xc7, 0x37, 0x0e, + 0x79, 0xb5, 0x60, 0x13, 0x6a, 0x2b, 0x00, 0xdd, 0xb6, 0x07, 0x4d, 0x74, 0xff, + 0xc5, 0xc5, 0xdf, 0xd0, 0x6b, 0x6c, 0x51, 0x9a, 0xbe, 0xc3, 0x59, 0x6a, 0x47, + 0x61, 0x13, 0xbe, 0x41, 0x38, 0xee, 0xad, 0x5f, 0xfd, 0xe8, 0x6b, 0x1e, 0x32, + 0x40, 0x1f, 0xa3, 0x84, 0x62, 0x32, 0xd0, 0xb3, 0xc9, 0xbd, 0x56, 0x88, 0xb6, + 0x4a, 0x33, 0x09, 0x38, 0x16, 0x2a, 0x8b, 0x89, 0x29, 0xd7, 0x0c, 0x1b, 0x67, + 0x53, 0x62, 0xf4, 0xc2, 0xa9, 0xbb, 0x6b, 0x7f, 0x91, 0xeb, 0xd4, 0x7d, 0x26, + 0x3c, 0xf0, 0xa4, 0x05, 0xa2, 0x8b, 0xa7, 0x41, 0x56, 0x44, 0xd7, 0x56, 0xd0, + 0x93, 0x96, 0x97, 0xca, 0x98, 0x2b, 0x68, 0x7c, 0x9e, 0xd7, 0xe0, 0xb2, 0x32, + 0x77, 0x07, 0x3c, 0x19, 0x30, 0xa4, 0x73, 0xd1, 0x66, 0x8e, 0xf2, 0xe9, 0xae, + 0x96, 0x63, 0xcf, 0xf0, 0x58, 0x16, 0x62, 0x6c, 0xd3, 0xc5, 0xbf, 0x77, 0x16, + 0x53, 0xd7, 0x78, 0x51, 0x81, 0x35, 0x5c, 0x05, 0xae, 0xd2, 0x4a, 0x99, 0xc4, + 0xb6, 0x74, 0xd2, 0x4a, 0x0f, 0x08, 0xf4, 0xb0, 0xcf, 0xbe, 0x90, 0xf2, 0xfd, + 0xba, 0xb4, 0x24, 0x82, 0xe9, 0x8f, 0x13, 0xff, 0xfc, 0xd1, 0xad, 0x33, 0xf4, + 0xf4, 0xc0, 0x4d, 0xeb, 0xc8, 0x9f, 0x40, 0xb5, 0xdb, 0xf6, 0x45, 0x46, 0xc5, + 0x20, 0xdc, 0xa5, 0xd0, 0xec, 0xf3, 0xf6, 0x5d, 0x3a, 0x77, 0xd0, 0x12, 0x9f, + 0x60, 0x03, 0x71, 0x10, 0x8a, 0xac, 0x30, 0xa9, 0xec, 0xa8, 0xbe, 0xe5, 0x52, + 0x4f, 0xab, 0x67, 0x1f, 0xc0, 0x86, 0x58, 0x76, 0x2c, 0x87, 0x38, 0xab, 0xc9, + 0xfa, 0x76, 0x93, 0xe3, 0x9d, 0x39, 0xd7, 0x03, 0xd5, 0xcd, 0x94, 0x2b, 0x5a, + 0x55, 0xfe, 0xda, 0xfe, 0xcc, 0xae, 0xf7, 0x02, 0x17, 0x69, 0xe9, 0x2c, 0xc9, + 0xd3, 0xac, 0x7b, 0x4c, 0x23, 0xb3, 0x3f, 0xc2, 0x23, 0x21, 0x85, 0x4b, 0xa3, + 0x3f, 0x49, 0xee, 0xba, 0xdd, 0xca, 0x29, 0xb3, 0x56, 0x40, 0xe4, 0xf0, 0xc2, + 0xfd, 0x8c, 0x12, 0xb9, 0x84, 0x52, 0x97, 0xd8, 0x5d, 0xf8, 0xc8, 0xe1, 0x20, + 0x42, 0x78, 0x8a, 0xc7, 0xe1, 0x69, 0xee, 0x9e, 0x8c, 0xc8, 0xa1, 0x0b, 0xa5, + 0xb1, 0x92, 0xa1, 0x5a, 0xe1, 0xe2, 0x14, 0x95, 0xad, 0xd4, 0x8e, 0x2d, 0x02, + 0x22, 0x57, 0x52, 0x87, 0x65, 0x41, 0xb2, 0x63, 0xa2, 0x0c, 0xa7, 0x48, 0x8a, + 0x32, 0x52, 0xe3, 0xba, 0x42, 0x6a, 0x6e, 0x16, 0x0e, 0x05, 0xda, 0x46, 0xc0, + 0x95, 0xe9, 0x3f, 0xa9, 0x17, 0x00, 0x01, 0x70, 0x70, 0xde, 0x7d, 0xa2, 0xec, + 0x49, 0xf5, 0x20, 0x2a, 0xa1, 0x72, 0xac, 0xe8, 0xfc, 0xed, 0x44, 0x49, 0xa9, + 0x0b, 0x19, 0xc1, 0x20, 0x22, 0xd9, 0xd6, 0x8c, 0xd2, 0x2e, 0xeb, 0x7d, 0x10, + 0x17, 0x8f, 0x7b, 0x13, 0xf0, 0x14, 0x0b, 0x0c, 0x42, 0x1f, 0x1d, 0xcd, 0x3a, + 0x91, 0x11, 0x78, 0x9f, 0x52, 0xb2, 0x5e, 0x61, 0x6f, 0xb2, 0xa3, 0x57, 0xac, + 0xca, 0xde, 0x63, 0x57, 0xfa, 0x1a, 0xe6, 0xc8, 0x83, 0x2e, 0xd5, 0x94, 0x13, + 0x85, 0x51, 0x2c, 0x26, 0xd5, 0xa5, 0xae, 0x51, 0x40, 0x9e, 0x7f, 0x26, 0x04, + 0x53, 0x3c, 0x0f, 0xdf, 0xc8, 0x0e, 0xe2, 0xb7, 0x61, 0x45, 0x40, 0x0e, 0x36, + 0x9d, 0xfd, 0x8a, 0xa1, 0x80, 0x49, 0x7c, 0xf4, 0xc7, 0x90, 0xe8, 0xd9, 0xb7, + 0x32, 0x4c, 0x05, 0xc8, 0xb3, 0x66, 0x35, 0x4f, 0x90, 0x9b, 0xe7, 0x1e, 0x52, + 0xc0, 0x90, 0x80, 0xfb, 0x27, 0x71, 0xcc, 0xe1, 0x83, 0x03, 0x18, 0xa2, 0x47, + 0x68, 0xc7, 0x3a, 0x65, 0x91, 0x1f, 0xda, 0xda, 0x91, 0x58, 0x40, 0xd8, 0x79, + 0x65, 0xca, 0x14, 0xdd, 0x18, 0xc7, 0x4f, 0xab, 0xe3, 0x9b, 0xa3, 0x54, 0xc1, + 0x9e, 0x8d, 0x58, 0xff, 0x42, 0x74, 0xeb, 0xa8, 0xc6, 0x3f, 0x0f, 0xa1, 0x70, + 0xa6, 0x3c, 0xbf, 0xce, 0x2c, 0xf8, 0x7b, 0xdc, 0xdf, 0x32, 0xb7, 0xe1, 0x98, + 0x04, 0x54, 0x1c, 0x2c, 0x58, 0x97, 0x24, 0xef, 0xc6, 0x9b, 0xc4, 0x65, 0xd0, + 0x90, 0x8e, 0x09, 0xb8, 0x4d, 0x1f, 0x50, 0x41, 0x2b, 0xb0, 0x7f, 0x47, 0xfb, + 0x9f, 0x0d, 0x47, 0x29, 0x28, 0x16, 0x14, 0xca, 0xca, 0xb6, 0x14, 0xef, 0x65, + 0xce, 0xba, 0x13, 0x96, 0xb5, 0x24, 0x9d, 0x2c, 0x61, 0x70, 0x4f, 0xb6, 0xf3, + 0x48, 0x44, 0x71, 0x83, 0xf9, 0x88, 0x2a, 0x98, 0xae, 0x9c, 0x71, 0xa7, 0x66, + 0x33, 0xe0, 0x5b, 0x33, 0x3a, 0x1b, 0xce, 0xee, 0xc9, 0xbd, 0x44, 0xb8, 0x87, + 0x6f, 0xab, 0x6c, 0xd7, 0x2a, 0x5e, 0x33, 0x5c, 0x97, 0x7a, 0x8c, 0x56, 0xca, + 0x16, 0x7b, 0x1a, 0x19, 0x8e, 0x93, 0x1b, 0xf2, 0x85, 0xf6, 0x86, 0x81, 0xfc, + 0x5a, 0xca, 0x84, 0x66, 0x76, 0xe8, 0x9b, 0x17, 0xee, 0x76, 0x9a, 0x08, 0xf9, + 0xb4, 0x60, 0xfe, 0x4e, 0x48, 0x81, 0xf9, 0xb2, 0x0f, 0xed, 0xb3, 0x9d, 0x1f, + 0xc6, 0x66, 0x5d, 0x10, 0x6b, 0xaa, 0x5a, 0x93, 0x14, 0x0d, 0x1d, 0xda, 0xca, + 0xe4, 0xa7, 0x59, 0x0f, 0x5a, 0xb0, 0x78, 0x52, 0xc1, 0x81, 0x1f, 0x1a, 0x03, + 0x5c, 0x3f, 0x1a, 0x60, 0xb1, 0x54, 0x22, 0x6c, 0x9d, 0xb0, 0x8f, 0xfd, 0xd0, + 0xb6, 0xde, 0xee, 0x72, 0x2a, 0x90, 0x07, 0x6c, 0xa7, 0xc6, 0xd6, 0x04, 0xfe, + 0x83, 0x32, 0x86, 0x8e, 0x1d, 0x59, 0x32, 0x2f, 0x26, 0x2b, 0xbf, 0xbe, 0x95, + 0xcc, 0x5b, 0x9b, 0x1e, 0x20, 0x31, 0x0b, 0x76, 0x35, 0x0b, 0x4d, 0x60, 0x4c, + 0xd1, 0xa4, 0x58, 0x66, 0x1d, 0xc4, 0x74, 0xfe, 0x4c, 0x58, 0x79, 0x04, 0xc0, + 0x53, 0x47, 0x5e, 0x17, 0x61, 0xb8, 0x0a, 0x60, 0xcc, 0x48, 0xed, 0xd9, 0x54, + 0x34, 0xdf, 0x02, 0x3b, 0x94, 0xa5, 0x8a, 0x99, 0xd6, 0x25, 0x66, 0xe0, 0x0f, + 0x67, 0x77, 0x90, 0xdc, 0xa0, 0x76, 0xa4, 0xf1, 0x67, 0x47, 0x0c, 0x43, 0xa8, + 0x1e, 0x6c, 0x32, 0xf0, 0xd0, 0x0d, 0x23, 0x65, 0x6b, 0xa7, 0x48, 0x28, 0xb8, + 0xe4, 0xd4, 0x75, 0x38, 0xe5, 0x0c, 0x0e, 0xce, 0xe2, 0xcd, 0xfe, 0x0d, 0x59, + 0x43, 0xe2, 0x3e, 0x3f, 0x17, 0x33, 0x82, 0x9d, 0x3e, 0x1b, 0x80, 0x53, 0x93, + 0x30, 0xe0, 0x6c, 0x6a, 0xe3, 0xd0, 0xec, 0xe7, 0x38, 0xc0, 0xdd, 0x74, 0x2a, + 0xa5, 0x86, 0x0f, 0x43, 0xb5, 0x30, 0xf0, 0x3d, 0xc5, 0x5d, 0xeb, 0xf7, 0x20, + 0x12, 0x3f, 0x8f, 0xba, 0xf2, 0xe5, 0x68, 0x59, 0xa5, 0x34, 0x3d, 0x46, 0x12, + 0xee, 0x21, 0x46, 0x4d, 0xb2, 0x50, 0x1d, 0x4f, 0x35, 0x31, 0x47, 0xf3, 0xe1, + 0xa5, 0xab, 0xb8, 0x93, 0x85, 0x08, 0x16, 0xc8, 0x0a, 0xf2, 0x9d, 0x88, 0x92, + 0x48, 0xc9, 0x2a, 0x72, 0x9a, 0x0e, 0x2b, 0xe2, 0xb6, 0x6c, 0xc1, 0x3a, 0xc5, + 0xd9, 0x96, 0xb2, 0x50, 0x14, 0x66, 0x6d, 0xdc, 0x63, 0x8a, 0x1f, 0xd2, 0xa0, + 0xaf, 0xee, 0x93, 0xd9, 0x8e, 0x31, 0xdc, 0x1e, 0xa8, 0x58, 0xd7, 0x2b, 0x84, + 0xbb, 0xd3, 0x2f, 0xc0, 0xc6, 0x16, 0xe7, 0xd4, 0xab, 0xda, 0xf3, 0xc1, 0x8f, + 0xf9, 0x60, 0x13, 0x24, 0x5d, 0x83, 0xb3, 0xbd, 0xf9, 0x21, 0xf4, 0x03, 0xf1, + 0xae, 0xcf, 0xdd, 0xd8, 0x85, 0xfd, 0xcf, 0xc7, 0x33, 0x87, 0x0f, 0x76, 0x0c, + 0xb8, 0x7e, 0xd4, 0xfc, 0xd9, 0xcc, 0xa9, 0x33, 0x2e, 0x8e, 0x1c, 0x85, 0x62, + 0x3b, 0x20, 0x66, 0x09, 0xf8, 0x87, 0xeb, 0xdb, 0xcf, 0x9d, 0xa1, 0x0f, 0x38, + 0x14, 0x19, 0x7a, 0x9f, 0x82, 0x07, 0x05, 0xea, 0xa1, 0x28, 0x3a, 0xc7, 0x93, + 0x16, 0x83, 0x08, 0x3f, 0x22, 0xfc, 0x4d, 0xc7, 0xff, 0x68, 0x1a, 0xb8, 0x46, + 0x18, 0x6f, 0x22, 0xd5, 0x73, 0x08, 0x43, 0xde, 0x71, 0x00, 0xf0, 0x31, 0x17, + 0xa3, 0xbb, 0xa0, 0x64, 0xca, 0x3c, 0xea, 0x93, 0xf3, 0xab, 0xd3, 0x0b, 0xe6, + 0xdb, 0x09, 0x35, 0x52, 0x9d, 0xed, 0x0b, 0x50, 0xec, 0xef, 0x9f, 0x59, 0x6d, + 0xb0, 0x1a, 0x87, 0xa8, 0xda, 0xdb, 0x82, 0x7a, 0x1b, 0xe8, 0xb5, 0x79, 0x9b, + 0x33, 0xc9, 0x9a, 0x82, 0x2b, 0x73, 0xf7, 0xe6, 0x62, 0xed, 0x6f, 0x86, 0x03, + 0x45, 0xa2, 0x62, 0x83, 0xc1, 0xb4, 0x08, 0x0e, 0xcd, 0xf5, 0x79, 0xd7, 0x0e, + 0x7b, 0x0c, 0x0a, 0xb7, 0x1e, 0x11, 0x6e, 0xe2, 0xd9, 0xda, 0x27, 0x46, 0x1e, + 0x28, 0x12, 0x2a, 0x09, 0xca, 0x04, 0xde, 0x38, 0x76, 0x50, 0x2f, 0xd2, 0x4d, + 0xff, 0x92, 0x09, 0x55, 0x2f, 0x91, 0x13, 0x87, 0x70, 0x78, 0xa0, 0x94, 0xe0, + 0xe5, 0xf8, 0xce, 0xbb, 0x41, 0x54, 0xe0, 0x3a, 0x6b, 0x56, 0xf6, 0x04, 0xdf, + 0x98, 0x4b, 0xd2, 0x9e, 0xfd, 0x4f, 0x88, 0xc3, 0xf6, 0x29, 0xea, 0x2b, 0xba, + 0x91, 0x27, 0xea, 0x5a, 0x6c, 0xc5, 0xa3, 0x9d, 0x74, 0x1e, 0xdd, 0x71, 0x1a, + 0x24, 0x44, 0x7f, 0xe0, 0x6c, 0xf8, 0x45, 0x5a, 0x44, 0x06, 0x5e, 0x24, 0x52, + 0x76, 0x07, 0x0b, 0x3d, 0xae, 0x51, 0x8d, 0x20, 0x00, 0x00, 0xe0, 0x8d, 0x42, + 0xb5, 0x13, 0x48, 0x97, 0xb4, 0x36, 0xbf, 0xf3, 0xa1, 0xbc, 0xef, 0xc5, 0x3a, + 0xec, 0x30, 0xed, 0x89, 0x11, 0x0f, 0x90, 0x10, 0x97, 0x8d, 0xf7, 0x0c, 0xe4, + 0xac, 0x6f, 0x1d, 0x80, 0x25, 0x50, 0xcf, 0x20, 0xe4, 0x44, 0x36, 0x06, 0x3e, + 0x3a, 0x15, 0xb5, 0x1e, 0xcb, 0xaa, 0x4a, 0x59, 0xdf, 0x2f, 0xe0, 0x15, 0xcb, + 0x36, 0x37, 0xf3, 0x72, 0x83, 0x04, 0xec, 0x3a, 0x72, 0x4f, 0x31, 0x49, 0x27, + 0x5e, 0x7b, 0x63, 0x4b, 0xd8, 0x82, 0x78, 0xd9, 0x3f, 0xab, 0x6b, 0x94, 0x16, + 0x68, 0xd9, 0x13, 0xdb, 0xcd, 0x89, 0x21, 0x3f, 0x3b, 0xac, 0xfc, 0xfd, 0x20, + 0x02, 0xea, 0x86, 0x6f, 0x3f, 0x17, 0x07, 0x35, 0x12, 0x64, 0xb6, 0x67, 0x88, + 0xf4, 0xeb, 0x7f, 0x68, 0xc5, 0xa5, 0x36, 0xfa, 0x9c, 0x13, 0x0d, 0x8f, 0x6d, + 0xa1, 0xbb, 0x03, 0x1d, 0xf9, 0xe2, 0x20, 0xd8, 0xca, 0x8b, 0xab, 0x46, 0xdd, + 0xcf, 0x9c, 0x35, 0xfa, 0x63, 0x48, 0x09, 0xa7, 0x3d, 0xcd, 0x91, 0xb7, 0x9f, + 0x5b, 0xcb, 0x98, 0x7b, 0x20, 0x54, 0x4b, 0xb5, 0x2a, 0xaf, 0x0d, 0x9e, 0x3a, + 0xea, 0x91, 0x93, 0xbc, 0xb7, 0x26, 0xcf, 0x9c, 0xb4, 0xa5, 0xda, 0xe1, 0x27, + 0x96, 0x9c, 0x5a, 0xb7, 0xc4, 0x0f, 0x2f, 0xc6, 0x66, 0x56, 0xe5, 0x01, 0xf2, + 0x51, 0x8d, 0x01, 0x25, 0x9d, 0x57, 0x76, 0x3d, 0xf2, 0x22, 0x7b, 0xe5, 0x12, + 0x04, 0xe9, 0xde, 0xca, 0x8d, 0x9e, 0xb6, 0x26, 0x6f, 0x65, 0x9b, 0x33, 0x55, + 0xc8, 0x97, 0x7e, 0xae, 0x7e, 0x9e, 0xd5, 0x39, 0xd1, 0x79, 0x39, 0xf0, 0xc6, + 0x16, 0x01, 0x1f, 0x53, 0xcc, 0x6a, 0xac, 0xd0, 0xf4, 0x82, 0x0b, 0xfd, 0x51, + 0x43, 0x52, 0x57, 0x5c, 0xda, 0xdb, 0x61, 0x90, 0x6d, 0x4e, 0xf6, 0x8d, 0x54, + 0xf7, 0xf4, 0xfb, 0x1f, 0x0c, 0xb7, 0x88, 0x31, 0x10, 0x10, 0x37, 0x89, 0x29, + 0x42, 0x90, 0x7c, 0x3e, 0xf6, 0xda, 0x52, 0xce, 0x31, 0xb0, 0x90, 0x51, 0x10, + 0x5b, 0x6e, 0x0a, 0xaf, 0x20, 0x84, 0xf9, 0xe3, 0x2d, 0x1f, 0xa2, 0x7c, 0xad, + 0x0c, 0xdd, 0x25, 0x62, 0xfa, 0xae, 0x49, 0x43, 0x0d, 0xf6, 0xf9, 0x4d, 0x05, + 0x10, 0x0b, 0x2d, 0xdd, 0x36, 0xb1, 0x3c, 0x4d, 0xf9, 0xd4, 0x56, 0xf6, 0x48, + 0x0b, 0xb1, 0xaf, 0xa6, 0x20, 0x26, 0xea, 0x80, 0x97, 0x94, 0xd3, 0xb7, 0x4d, + 0x78, 0x01, 0x00, + ], + txid: [ + 0x1b, 0xc3, 0x35, 0x69, 0x8d, 0xf8, 0x76, 0x82, 0x88, 0xe8, 0xa2, 0x7f, 0x5f, + 0x6b, 0x6e, 0x4a, 0x91, 0x49, 0x85, 0x9e, 0xe5, 0x6c, 0x11, 0xd8, 0x5f, 0x6c, + 0xc0, 0x37, 0xd9, 0x5c, 0x48, 0x8c, + ], + auth_digest: [ + 0x97, 0xf5, 0x01, 0x0d, 0x1f, 0xd8, 0xf9, 0xad, 0x70, 0x65, 0xd5, 0x73, 0x06, + 0xf0, 0xaf, 0xa1, 0x14, 0xf9, 0x2b, 0xb4, 0xb7, 0xae, 0x42, 0x5a, 0x9e, 0xc9, + 0x28, 0x92, 0xce, 0xcc, 0x02, 0xa9, + ], + amounts: vec![476324011816735, 1087109908722977], + script_pubkeys: vec![vec![], vec![0xac]], + transparent_input: Some(0), + sighash_shielded: [ + 0x86, 0x33, 0xf3, 0x5e, 0xdf, 0xab, 0xdf, 0x26, 0x58, 0xea, 0xf0, 0xb4, 0x32, + 0xe0, 0x9d, 0x8a, 0x77, 0xb1, 0x05, 0x22, 0xcf, 0x00, 0x6a, 0xf8, 0x97, 0x0b, + 0x6b, 0x29, 0xc7, 0x1a, 0xfc, 0x5e, + ], + sighash_all: Some([ + 0x7f, 0xb7, 0x7f, 0xab, 0x76, 0x42, 0x74, 0x3f, 0xbc, 0x80, 0x7a, 0x8f, 0xaf, + 0x34, 0xc2, 0x7d, 0x8e, 0xe2, 0xa1, 0x73, 0xb0, 0x50, 0x33, 0xd9, 0x8c, 0x28, + 0xa9, 0xdf, 0xc4, 0x73, 0x83, 0x2f, + ]), + sighash_none: Some([ + 0xe1, 0x90, 0xb2, 0xd7, 0x47, 0x25, 0x1b, 0x58, 0x54, 0xd6, 0xf3, 0xb0, 0xa2, + 0x37, 0x01, 0xb9, 0xaf, 0x90, 0x0f, 0xe1, 0x12, 0xd0, 0xa2, 0x85, 0xb8, 0x77, + 0xb8, 0x5a, 0xae, 0x36, 0x07, 0x7a, + ]), + sighash_single: None, + sighash_all_anyone: Some([ + 0xc7, 0x56, 0x1f, 0xc8, 0x03, 0x7d, 0x3c, 0x53, 0x89, 0xcd, 0x7a, 0x61, 0x95, + 0xf0, 0x54, 0x46, 0x61, 0xd7, 0x37, 0xcc, 0x38, 0x2f, 0x64, 0xf7, 0x4b, 0x2a, + 0xfb, 0x5e, 0xea, 0x4b, 0x91, 0xbb, + ]), + sighash_none_anyone: Some([ + 0x8a, 0x0b, 0xe1, 0xf3, 0x1e, 0x6d, 0x86, 0xfa, 0x0c, 0x2e, 0x49, 0xbe, 0x57, + 0x50, 0x3c, 0x81, 0x46, 0x67, 0x4c, 0x12, 0x1a, 0x5c, 0xa2, 0xed, 0xac, 0xab, + 0xeb, 0xbc, 0x89, 0x1c, 0xc4, 0xda, + ]), + sighash_single_anyone: None, + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0xd9, + 0x86, 0xb6, 0x37, 0x7f, 0x33, 0x67, 0x1c, 0x02, 0xa7, 0x42, 0x5d, 0xb2, 0x88, + 0x86, 0xb1, 0xa2, 0x61, 0x36, 0x6d, 0xa8, 0xa1, 0x39, 0x86, 0x65, 0xbe, 0xed, + 0x3b, 0xe9, 0xbc, 0x2e, 0x05, 0x5e, 0x71, 0x1b, 0x7d, 0x36, 0xdd, 0xbd, 0xd3, + 0x65, 0xcc, 0xdc, 0xd7, 0xfc, 0x00, 0xfe, 0x71, 0x29, 0x66, 0x95, 0x08, 0xda, + 0xc0, 0xad, 0x2d, 0x55, 0xee, 0x7f, 0xc6, 0x0b, 0xce, 0x22, 0x88, 0x50, 0xba, + 0x7b, 0x94, 0x3a, 0x8d, 0x50, 0xff, 0xcb, 0x2a, 0x67, 0x06, 0x51, 0xd3, 0x15, + 0xd8, 0x71, 0x9c, 0x7b, 0x57, 0xf6, 0x37, 0x07, 0x65, 0x63, 0x52, 0x52, 0xac, + 0x65, 0x00, 0xa7, 0x69, 0x0c, 0x23, 0x03, 0xcc, 0x09, 0xe8, 0x62, 0x8a, 0x83, + 0x02, 0x00, 0x01, 0x52, 0x37, 0x6d, 0x47, 0xf4, 0x5b, 0x3d, 0x06, 0x00, 0x08, + 0x51, 0x00, 0x6a, 0xac, 0x53, 0x63, 0x00, 0x52, 0xe8, 0xe3, 0x17, 0x16, 0x5c, + 0x3a, 0x06, 0x00, 0x01, 0x6a, 0x00, 0x00, 0x03, 0xf1, 0x24, 0x90, 0xec, 0x57, + 0xfd, 0x12, 0xc0, 0x43, 0x73, 0xd8, 0xf9, 0x43, 0x19, 0x52, 0x13, 0x0e, 0x97, + 0x55, 0x7f, 0xae, 0x15, 0x3e, 0x01, 0x12, 0xfc, 0x0a, 0x05, 0x42, 0xa9, 0x5c, + 0x12, 0xb2, 0x66, 0x75, 0x97, 0x76, 0x79, 0xb0, 0x28, 0x24, 0x45, 0x70, 0x2b, + 0x2f, 0x02, 0x6b, 0x5f, 0x6c, 0x8f, 0x3b, 0x12, 0x82, 0x21, 0xa7, 0x90, 0xd9, + 0x2c, 0x89, 0x5b, 0x94, 0x27, 0x0f, 0x29, 0x92, 0xd3, 0x3e, 0x05, 0x29, 0xa4, + 0x82, 0x85, 0xe1, 0x93, 0xb0, 0xb5, 0x34, 0xc1, 0xa4, 0x0e, 0x01, 0x88, 0xbb, + 0xcc, 0x72, 0x0e, 0x23, 0xe7, 0x4c, 0xb2, 0xa2, 0xd1, 0x84, 0xcd, 0xe2, 0x1e, + 0xfb, 0x84, 0x8f, 0xa1, 0xdf, 0x6b, 0xb1, 0xdc, 0x43, 0x95, 0x40, 0xf6, 0x3c, + 0x9c, 0x7a, 0x9d, 0x5f, 0x88, 0x13, 0x40, 0x29, 0x62, 0x65, 0x1e, 0xe9, 0x84, + 0x39, 0x02, 0xb6, 0xc3, 0x98, 0x2d, 0x9e, 0xc2, 0x1c, 0x6f, 0x1f, 0x1d, 0x94, + 0x51, 0x15, 0xa9, 0xac, 0xe8, 0x3c, 0x0d, 0xb3, 0x60, 0xb3, 0xa1, 0x55, 0x28, + 0x06, 0xc8, 0x3a, 0x2c, 0x63, 0x94, 0x1d, 0x06, 0x05, 0xc9, 0x0d, 0xa1, 0x7f, + 0xc0, 0xc3, 0x5d, 0x1c, 0xe3, 0x63, 0xce, 0xf1, 0x13, 0x28, 0xf3, 0x87, 0xc4, + 0x01, 0xfe, 0xf2, 0x7a, 0x67, 0xa6, 0x29, 0x2f, 0x6f, 0x72, 0xb0, 0xa1, 0xd6, + 0xc3, 0x89, 0x16, 0x2d, 0x16, 0x2e, 0xf0, 0x50, 0xae, 0x5f, 0x3d, 0xdb, 0xb5, + 0x5c, 0xaa, 0xbc, 0xa9, 0xa1, 0xbe, 0x89, 0xb4, 0x63, 0x49, 0x4d, 0x74, 0x39, + 0xfb, 0x56, 0x47, 0xa9, 0x18, 0x12, 0x8b, 0x96, 0x25, 0xd3, 0x3e, 0xac, 0xa6, + 0x19, 0xd5, 0x2f, 0x03, 0x5f, 0xe6, 0x08, 0x9c, 0xe8, 0xd8, 0xb9, 0x0f, 0xe3, + 0x67, 0x0d, 0x8c, 0x5a, 0x2e, 0x3e, 0x05, 0x49, 0x69, 0xa3, 0xd9, 0x7e, 0x61, + 0xb5, 0xe6, 0x30, 0x67, 0x4f, 0xc7, 0x08, 0x57, 0xf1, 0xbb, 0xf1, 0x0f, 0xdc, + 0x40, 0x49, 0xef, 0xf5, 0x60, 0xeb, 0xa5, 0xf2, 0x2a, 0xcc, 0x8d, 0x77, 0xdb, + 0xee, 0x0b, 0x20, 0x55, 0x7f, 0xa4, 0xd0, 0x33, 0x31, 0x72, 0xcb, 0xb5, 0xcb, + 0xcc, 0x2b, 0x13, 0x5f, 0x2c, 0xcd, 0xe0, 0x14, 0xe6, 0x3e, 0xbe, 0x4e, 0xdf, + 0x92, 0x5e, 0x61, 0xba, 0x2a, 0x32, 0x0c, 0xd3, 0x99, 0x91, 0x5a, 0xdd, 0xfc, + 0xeb, 0x1a, 0xd0, 0x69, 0xa9, 0xfd, 0x5b, 0x62, 0x10, 0xa4, 0xb6, 0xe5, 0x04, + 0x52, 0xb1, 0xf9, 0x06, 0xdd, 0x16, 0xf0, 0x16, 0x68, 0xf0, 0xaf, 0x56, 0x6a, + 0x28, 0x7c, 0xce, 0xfc, 0xd8, 0x94, 0x73, 0x41, 0x85, 0x9a, 0xe7, 0xdc, 0x3a, + 0x06, 0xf6, 0xbf, 0x15, 0x74, 0xfe, 0xb9, 0x31, 0xf9, 0x27, 0xe2, 0xd5, 0x05, + 0xf6, 0x08, 0x59, 0x9e, 0x23, 0xb0, 0x5a, 0xf7, 0xc3, 0x23, 0x69, 0x83, 0x97, + 0xa8, 0x01, 0xdc, 0x7f, 0x78, 0x82, 0x5c, 0xc7, 0xeb, 0x9f, 0xcc, 0xe6, 0xc6, + 0xc4, 0xf8, 0xf6, 0x88, 0x39, 0xd3, 0x0a, 0xc5, 0x67, 0x14, 0x8e, 0x70, 0x84, + 0xdb, 0x2b, 0x37, 0x58, 0x30, 0xa0, 0x7b, 0x30, 0x5f, 0xed, 0xd6, 0x07, 0xa3, + 0x47, 0xfa, 0x65, 0xde, 0xf0, 0x1d, 0x4e, 0x1f, 0xd6, 0xc1, 0x6b, 0x4b, 0x47, + 0xf5, 0xb0, 0x1b, 0x43, 0x65, 0xb7, 0x72, 0x26, 0xe6, 0x0f, 0xdd, 0x40, 0xf2, + 0x2a, 0x39, 0x5a, 0xa2, 0x35, 0xf0, 0xdf, 0xda, 0x8f, 0xb4, 0xd3, 0xde, 0x65, + 0xb0, 0xcf, 0x4f, 0x4c, 0x22, 0x0b, 0x3b, 0x4a, 0x9e, 0x32, 0xbc, 0x0d, 0xb6, + 0x4f, 0x16, 0x2c, 0x07, 0xdf, 0x42, 0xa1, 0x01, 0x99, 0x03, 0xa6, 0x7c, 0xda, + 0x69, 0x3d, 0xde, 0xb5, 0xca, 0x39, 0xa0, 0xfe, 0x50, 0x08, 0x50, 0xec, 0x7c, + 0x06, 0xbe, 0xe7, 0x18, 0x66, 0xb3, 0x55, 0xcc, 0xbc, 0x07, 0x8c, 0xd4, 0xdc, + 0x03, 0x6f, 0xda, 0xa8, 0x1c, 0xb2, 0xde, 0x99, 0xcc, 0x88, 0xf6, 0x0a, 0x49, + 0x46, 0x42, 0x87, 0xf5, 0x9f, 0xc7, 0x14, 0x8b, 0x1a, 0xfb, 0x4a, 0x2f, 0x9b, + 0xb8, 0x97, 0x14, 0xe1, 0xeb, 0x8c, 0x03, 0x61, 0xe5, 0x99, 0x2a, 0x5b, 0x79, + 0xcd, 0xbb, 0x91, 0xd9, 0xbf, 0x29, 0xeb, 0x59, 0x8c, 0xbb, 0x4b, 0xda, 0x92, + 0x3d, 0x26, 0x7f, 0xea, 0xcb, 0x91, 0xce, 0x72, 0xd6, 0x1a, 0xb1, 0xea, 0x00, + 0xf5, 0x6a, 0xa6, 0x76, 0x6e, 0xab, 0xc4, 0x7d, 0xca, 0xa6, 0x9a, 0x02, 0x4b, + 0xbf, 0xf2, 0xf2, 0x96, 0x91, 0x7f, 0x17, 0xa3, 0xf8, 0xc9, 0x3e, 0x1b, 0xf2, + 0x9c, 0x3c, 0xfc, 0x99, 0x1a, 0x2b, 0xe8, 0xcf, 0xa7, 0x0e, 0x5d, 0xe3, 0xf2, + 0xdd, 0x52, 0xa7, 0x55, 0x01, 0x38, 0x68, 0x7a, 0xec, 0x28, 0x92, 0x6f, 0xa1, + 0x68, 0xb1, 0x81, 0xdb, 0x72, 0x82, 0xbd, 0x60, 0xda, 0xd3, 0x31, 0x0d, 0xfe, + 0x54, 0x2c, 0xeb, 0xe6, 0x94, 0x74, 0x00, 0x25, 0xc7, 0xec, 0x2a, 0x20, 0x43, + 0xfe, 0xbb, 0x77, 0x9f, 0x7f, 0x37, 0x89, 0xa5, 0xe2, 0x42, 0xdb, 0x48, 0x03, + 0xee, 0x36, 0x72, 0x52, 0xc4, 0x63, 0xc9, 0xa8, 0x8b, 0x41, 0x7b, 0x70, 0x86, + 0x6d, 0x9a, 0xfb, 0x7a, 0x08, 0x27, 0x68, 0x01, 0xf9, 0x22, 0x7c, 0x63, 0x81, + 0xf1, 0x5c, 0xc0, 0x94, 0xac, 0x7b, 0xd1, 0x54, 0xa4, 0xce, 0xf9, 0x0b, 0x48, + 0x47, 0xdc, 0x16, 0x8a, 0x01, 0xf1, 0xe3, 0x1e, 0xec, 0x74, 0xa7, 0xef, 0xce, + 0xba, 0x11, 0xf5, 0x07, 0x69, 0xf5, 0xd8, 0xf5, 0x4d, 0x36, 0x20, 0xc2, 0x3e, + 0xc8, 0x99, 0x3f, 0x7a, 0xef, 0x27, 0xc1, 0xd3, 0x51, 0x96, 0xb1, 0x02, 0xb3, + 0xcf, 0x3f, 0xed, 0x8b, 0xf8, 0x5d, 0x8a, 0x45, 0xf6, 0x96, 0x83, 0xec, 0xdd, + 0x1a, 0x23, 0x44, 0xef, 0xb8, 0x48, 0x07, 0xd9, 0x0f, 0x18, 0x35, 0xb4, 0xf2, + 0xf2, 0x4d, 0x8f, 0xf8, 0x12, 0x30, 0x47, 0xeb, 0x9f, 0x7d, 0x30, 0x62, 0x3e, + 0x14, 0x29, 0x0d, 0x56, 0x17, 0x96, 0x3b, 0x42, 0x21, 0x40, 0x4a, 0xe7, 0x61, + 0xc8, 0x6b, 0xec, 0x7a, 0x07, 0xbf, 0x81, 0xa0, 0xb9, 0xa7, 0xf7, 0xd0, 0x87, + 0xac, 0x26, 0xce, 0x3d, 0xfa, 0x9c, 0x93, 0xfe, 0xea, 0xeb, 0xd1, 0x0d, 0xc1, + 0x88, 0xc6, 0x27, 0xd4, 0xb9, 0x1d, 0x2a, 0x79, 0x01, 0xdc, 0x39, 0x4e, 0x52, + 0x39, 0x05, 0x0a, 0x17, 0xec, 0xd5, 0x33, 0x20, 0xa5, 0xd7, 0x72, 0x4c, 0xd4, + 0xf9, 0x82, 0x53, 0x3e, 0x07, 0x44, 0xb3, 0x28, 0x96, 0xe1, 0xb2, 0x30, 0xc9, + 0xc3, 0x22, 0xbf, 0xed, 0x2b, 0x86, 0x10, 0x56, 0x33, 0x25, 0xd0, 0x31, 0x49, + 0x48, 0xd0, 0xae, 0xf3, 0xd4, 0x1a, 0xd3, 0x0c, 0x87, 0xf9, 0xb0, 0xf6, 0xdc, + 0x37, 0x97, 0x3b, 0x9c, 0x06, 0x72, 0xf5, 0x44, 0x51, 0x7f, 0x90, 0xe4, 0x3b, + 0x1b, 0x81, 0x16, 0xda, 0xdc, 0x01, 0x6d, 0x19, 0x26, 0xc8, 0x48, 0x0d, 0x4e, + 0x23, 0x9c, 0x2d, 0x0c, 0x08, 0x84, 0xfa, 0x47, 0x8f, 0x4c, 0xed, 0x9d, 0x8f, + 0x17, 0xa6, 0xeb, 0x76, 0xe7, 0x8a, 0x00, 0xeb, 0x44, 0x73, 0x76, 0x9a, 0xd9, + 0x9d, 0xb0, 0x69, 0xdc, 0x94, 0x28, 0x33, 0xcb, 0xf0, 0xf6, 0xf3, 0xeb, 0xc7, + 0x8d, 0x78, 0x01, 0x6b, 0xdf, 0x48, 0xd4, 0xb5, 0x76, 0x1a, 0xe1, 0x7c, 0x60, + 0xd9, 0x22, 0x57, 0xea, 0x58, 0x69, 0x09, 0x45, 0x01, 0xbb, 0x67, 0x12, 0x28, + 0xcd, 0xaf, 0x27, 0xa2, 0x9b, 0x48, 0xda, 0x02, 0x9d, 0x2f, 0x85, 0x79, 0x1d, + 0x26, 0x3d, 0x14, 0x09, 0x9e, 0xf9, 0x38, 0x46, 0xd4, 0x11, 0x19, 0x3d, 0xc9, + 0x84, 0x6f, 0xa5, 0x50, 0x45, 0x99, 0x71, 0xc6, 0x67, 0x09, 0x16, 0xb0, 0x70, + 0x6b, 0x04, 0x4f, 0xc5, 0xc2, 0xbd, 0x93, 0xad, 0xe3, 0x96, 0x79, 0x57, 0xcd, + 0xb9, 0x41, 0x27, 0x4c, 0xc6, 0xbd, 0xb4, 0xe0, 0x36, 0xb7, 0x67, 0xb9, 0x50, + 0xc0, 0x9e, 0x46, 0x26, 0xa1, 0xd0, 0x05, 0xbc, 0xf4, 0x83, 0x6e, 0xf6, 0xa1, + 0xde, 0x48, 0x09, 0x5d, 0xcb, 0x46, 0x12, 0x78, 0xb1, 0x6c, 0x45, 0x68, 0x90, + 0xb2, 0x3d, 0x40, 0xbd, 0x36, 0x04, 0x10, 0xf0, 0x01, 0x0a, 0x55, 0xf5, 0x05, + 0xfe, 0x5e, 0x2d, 0xb2, 0x01, 0xc7, 0x52, 0xe9, 0xb5, 0xb1, 0x5b, 0xf8, 0xaa, + 0x9e, 0x82, 0xd6, 0x49, 0xab, 0x11, 0x73, 0xba, 0x2a, 0x51, 0x32, 0xe0, 0xcc, + 0x50, 0x51, 0xcc, 0xf7, 0x4c, 0x7a, 0x6a, 0x37, 0x07, 0xab, 0x59, 0x83, 0xf7, + 0xcc, 0x27, 0x5c, 0x99, 0x1a, 0xbe, 0x4d, 0x7c, 0xee, 0x5f, 0x28, 0x9e, 0xfe, + 0x72, 0x7e, 0xb3, 0xda, 0x86, 0xfa, 0x21, 0xa2, 0x8d, 0x6b, 0x8a, 0x2a, 0xff, + 0xd4, 0x2d, 0xb9, 0x8b, 0xb2, 0xa4, 0x6c, 0xd8, 0xa3, 0x29, 0x31, 0x2f, 0xa9, + 0x45, 0x39, 0xd9, 0xcb, 0x35, 0xdc, 0xb6, 0x04, 0x67, 0x8b, 0x63, 0x90, 0x64, + 0xd9, 0x20, 0x05, 0xdf, 0x2d, 0x10, 0x68, 0x1c, 0x64, 0xb9, 0xed, 0x8c, 0xe4, + 0x7d, 0x7e, 0xba, 0x0f, 0x2b, 0x50, 0x2b, 0x20, 0x6a, 0xd4, 0xb2, 0xe9, 0x2b, + 0xbe, 0x45, 0x86, 0xf6, 0xd7, 0x50, 0x9e, 0x57, 0xa6, 0x37, 0x7f, 0xea, 0xbe, + 0x38, 0xb3, 0xcc, 0x6c, 0x95, 0x5d, 0x5e, 0x7b, 0xdf, 0x7e, 0xb1, 0x32, 0xd8, + 0x6b, 0xc0, 0x7a, 0x30, 0x98, 0xb4, 0x13, 0xe4, 0x40, 0x5d, 0xaa, 0xa2, 0x55, + 0x29, 0x1d, 0x55, 0x2b, 0x2c, 0x80, 0x07, 0xbe, 0xd4, 0x1e, 0x22, 0xf1, 0xcf, + 0x79, 0x11, 0x82, 0x12, 0x00, 0x55, 0x5e, 0x9c, 0x4f, 0xfb, 0x09, 0xef, 0xc1, + 0x22, 0x38, 0x11, 0x75, 0x03, 0x1c, 0x38, 0x28, 0x0b, 0x53, 0x26, 0xeb, 0xbe, + 0xaf, 0x33, 0x4f, 0xdc, 0xf0, 0xdc, 0x44, 0x4e, 0x62, 0x9f, 0x93, 0x95, 0x51, + 0x54, 0x0b, 0xcb, 0xbb, 0xb1, 0xab, 0x9c, 0x23, 0x1a, 0x86, 0x6b, 0x32, 0x9e, + 0x85, 0x24, 0xab, 0x25, 0xf9, 0x3e, 0x5e, 0x33, 0x4a, 0x05, 0x27, 0x2a, 0x3f, + 0x82, 0x6f, 0x9d, 0x05, 0xa4, 0x50, 0x58, 0xdf, 0xcd, 0xf6, 0x88, 0x43, 0xa8, + 0xb9, 0x36, 0xa0, 0xcf, 0x5e, 0x6a, 0xa8, 0xae, 0x1b, 0x80, 0xf6, 0x01, 0x61, + 0xbf, 0x41, 0x4f, 0x28, 0x02, 0x11, 0x11, 0x09, 0x21, 0xa9, 0xc8, 0x5f, 0x51, + 0x04, 0xa0, 0x16, 0x8e, 0x8e, 0x72, 0xde, 0x4f, 0x8a, 0xa0, 0x41, 0x32, 0xeb, + 0x25, 0x88, 0x76, 0xf1, 0x9d, 0x7b, 0xe5, 0xf2, 0xdd, 0x2b, 0x0b, 0x30, 0x4b, + 0x92, 0x3b, 0x29, 0x52, 0xd9, 0x1f, 0xde, 0xe7, 0xe5, 0x52, 0x05, 0xdb, 0xb1, + 0x94, 0xeb, 0xba, 0x32, 0x2f, 0xdc, 0x67, 0xb2, 0x52, 0x2c, 0x92, 0x61, 0x21, + 0xc7, 0xfa, 0x1a, 0xf1, 0x7e, 0xd0, 0x6c, 0x47, 0x27, 0x8f, 0x96, 0x08, 0x92, + 0x96, 0x08, 0x7a, 0x70, 0x4b, 0x7d, 0x0f, 0x84, 0x7d, 0x51, 0xd6, 0xcc, 0x68, + 0xac, 0xc5, 0x22, 0x07, 0x74, 0x73, 0x41, 0xf6, 0xb9, 0x8c, 0xb1, 0xcd, 0x4f, + 0xaf, 0xcd, 0x2b, 0xb0, 0xd0, 0x5b, 0xc7, 0x9b, 0xb8, 0x0d, 0x7c, 0x4b, 0x8a, + 0x1a, 0x11, 0xbc, 0x0a, 0x3b, 0xde, 0xca, 0x45, 0x41, 0x86, 0x9b, 0x4d, 0xc9, + 0xd6, 0xb4, 0x8c, 0xd7, 0x86, 0x9b, 0xf7, 0x63, 0xb9, 0xdc, 0x42, 0x45, 0x27, + 0x3c, 0x70, 0x4b, 0x0d, 0x8d, 0xec, 0x4b, 0x85, 0xd1, 0x6d, 0xd4, 0x38, 0xce, + 0xd6, 0x22, 0x0f, 0xa6, 0x69, 0x26, 0x66, 0x3f, 0xcc, 0x22, 0x8f, 0xc6, 0xc4, + 0xd2, 0x7e, 0x17, 0xe3, 0x27, 0x83, 0x4b, 0x67, 0x57, 0x91, 0x4d, 0x1b, 0xcb, + 0xf3, 0x4b, 0x65, 0xd8, 0x58, 0xab, 0x8b, 0x5c, 0x12, 0x0c, 0xb0, 0x85, 0x05, + 0x22, 0xf5, 0x42, 0x89, 0x3f, 0xdd, 0xb1, 0x79, 0xe8, 0x7f, 0x83, 0x2d, 0xaa, + 0xa1, 0x52, 0xc8, 0x31, 0xf1, 0x35, 0x64, 0x00, 0x9c, 0x41, 0x81, 0x23, 0x53, + 0x3d, 0xe2, 0xc6, 0x79, 0x49, 0xe3, 0xaf, 0x2d, 0xcb, 0x60, 0xd6, 0xbd, 0xbd, + 0xda, 0xda, 0x63, 0xa3, 0x0b, 0x4b, 0x54, 0xcd, 0x1c, 0xe5, 0xa5, 0xa0, 0x0f, + 0x8e, 0x85, 0x57, 0xeb, 0xa9, 0x23, 0x4e, 0x81, 0x17, 0x8d, 0x0f, 0xca, 0xb5, + 0x61, 0x0f, 0xba, 0x96, 0x69, 0xcf, 0xeb, 0x1b, 0xd0, 0x8c, 0xd9, 0x65, 0x33, + 0x49, 0x8b, 0x27, 0x2c, 0x57, 0x79, 0xa9, 0xf9, 0x39, 0x69, 0x1d, 0xe1, 0xad, + 0x88, 0x1c, 0x80, 0x87, 0x8d, 0x6c, 0x29, 0x42, 0x15, 0x23, 0x0b, 0xbb, 0x61, + 0x90, 0x69, 0xb4, 0xdc, 0x17, 0xb3, 0xe5, 0x9d, 0xbd, 0x24, 0x2c, 0xd8, 0x8e, + 0xcc, 0x3b, 0xe3, 0xa2, 0x69, 0x6b, 0xf7, 0xf2, 0xd9, 0xe5, 0xb8, 0xc1, 0x52, + 0xcc, 0x0d, 0x99, 0xa0, 0xa5, 0xe9, 0xa3, 0x8b, 0x1b, 0x8e, 0xb1, 0xa0, 0x13, + 0xeb, 0x76, 0x51, 0x33, 0x37, 0xa7, 0xb0, 0xda, 0xdb, 0x4e, 0x81, 0x7b, 0x6f, + 0x49, 0x78, 0x02, 0xbd, 0x47, 0xe9, 0x3a, 0x82, 0x0c, 0x1c, 0xc3, 0x32, 0xcd, + 0xcc, 0xbd, 0xc8, 0x18, 0x8a, 0xd3, 0x33, 0xc9, 0x57, 0x23, 0xa2, 0xfa, 0x3f, + 0xf9, 0x89, 0x9b, 0x87, 0x8d, 0xfa, 0xaf, 0x2e, 0x4b, 0x9f, 0x77, 0x90, 0x5e, + 0xb8, 0xab, 0x7f, 0x3f, 0x86, 0xda, 0x8e, 0x7c, 0x03, 0x4f, 0x4b, 0x6d, 0x79, + 0x43, 0xce, 0xf1, 0x20, 0x30, 0xc4, 0x00, 0x99, 0xd8, 0x77, 0xca, 0xbe, 0x81, + 0xb0, 0x87, 0x50, 0xe3, 0xfb, 0xfe, 0x63, 0x12, 0x80, 0x34, 0x81, 0xc3, 0x7b, + 0xa5, 0x1a, 0x7d, 0x76, 0x68, 0x31, 0x75, 0xd3, 0x6b, 0x51, 0xf2, 0x9f, 0x9a, + 0x6b, 0xba, 0x33, 0x35, 0x91, 0xe1, 0x62, 0xda, 0xa6, 0xa3, 0x28, 0x6d, 0xcc, + 0x96, 0x64, 0x12, 0x7b, 0xc0, 0xa3, 0x01, 0xb4, 0x80, 0x04, 0xa9, 0xc5, 0x27, + 0x6b, 0xcf, 0x08, 0xe7, 0xfe, 0x4a, 0xe5, 0x2d, 0x76, 0xe4, 0x31, 0x48, 0x8a, + 0x5b, 0x9d, 0x43, 0x1f, 0xa1, 0x36, 0x34, 0x99, 0x1c, 0xbd, 0x4c, 0x23, 0x21, + 0xe4, 0x1d, 0x48, 0xc7, 0x38, 0xa9, 0xdd, 0xb3, 0xf7, 0x6f, 0x46, 0x1a, 0x53, + 0xbe, 0xc9, 0x59, 0xe0, 0x2f, 0xc8, 0x77, 0x1b, 0x67, 0xec, 0x86, 0xbf, 0x9c, + 0xcf, 0x25, 0x97, 0xeb, 0x34, 0xec, 0x3d, 0x29, 0x2e, 0x6b, 0x5d, 0x84, 0xeb, + 0xac, 0x4d, 0x92, 0xde, 0x52, 0xe1, 0xf8, 0xbf, 0x6b, 0xfd, 0xba, 0xda, 0x63, + 0x44, 0x09, 0xf2, 0x0e, 0xf2, 0xcc, 0x6e, 0x3c, 0x39, 0x0e, 0x43, 0x5f, 0x47, + 0xe3, 0x47, 0x23, 0x8d, 0xb4, 0x86, 0x90, 0x84, 0x04, 0x73, 0xb0, 0xa0, 0x83, + 0x1a, 0x5a, 0x8a, 0x58, 0xc4, 0xdc, 0xfc, 0x4e, 0xab, 0x7b, 0x41, 0x8c, 0xba, + 0x2a, 0x41, 0x4f, 0x95, 0x57, 0x71, 0x90, 0xff, 0x88, 0xd7, 0x27, 0xf7, 0x3e, + 0x2f, 0xff, 0x97, 0xaa, 0xbd, 0x11, 0x14, 0xb7, 0x64, 0xe3, 0xed, 0xbc, 0x18, + 0x3e, 0x60, 0x3a, 0xcf, 0xb7, 0xc0, 0x9b, 0xf1, 0x32, 0xbb, 0x01, 0xef, 0xc7, + 0x17, 0x8d, 0x4f, 0x9a, 0x2d, 0xba, 0xf4, 0x92, 0x4f, 0xd8, 0x0f, 0xbe, 0x0e, + 0x60, 0x4f, 0x60, 0x39, 0x08, 0x32, 0xeb, 0x98, 0x04, 0x79, 0xe0, 0x4e, 0x9c, + 0x9a, 0x2b, 0xb2, 0xfb, 0x36, 0x84, 0xd8, 0xf8, 0x06, 0x48, 0xd5, 0x80, 0x78, + 0x38, 0x54, 0x58, 0x4f, 0x62, 0xbe, 0x0c, 0xc9, 0x21, 0x88, 0x32, 0x38, 0x56, + 0x10, 0xd9, 0x62, 0x36, 0x5f, 0x50, 0x71, 0xfa, 0x3d, 0x36, 0x8f, 0xfb, 0x67, + 0x1b, 0xa2, 0xc2, 0xf9, 0xa0, 0xfc, 0x68, 0xd8, 0x07, 0x22, 0x19, 0xa7, 0x7b, + 0xef, 0x2d, 0x6b, 0x4a, 0x19, 0xf1, 0x6d, 0xd5, 0x30, 0x74, 0x22, 0x47, 0x46, + 0xbb, 0xa5, 0xf1, 0x72, 0x82, 0x20, 0xb1, 0x96, 0xe4, 0x0f, 0x93, 0x7c, 0x47, + 0x05, 0x42, 0x9d, 0x04, 0xaa, 0x3c, 0x50, 0x5c, 0x95, 0x60, 0x3e, 0x05, 0xff, + 0x55, 0x2e, 0xc1, 0x86, 0x42, 0xd5, 0x67, 0x05, 0x02, 0x67, 0xb9, 0xf9, 0x92, + 0x9c, 0x2e, 0x13, 0x80, 0x14, 0xb5, 0xef, 0x1b, 0xa7, 0x1d, 0x9a, 0x71, 0x86, + 0xe3, 0xd1, 0x3c, 0x8a, 0x8e, 0x40, 0x8c, 0x2a, 0x9d, 0x12, 0x01, 0xa7, 0xfe, + 0xbb, 0x83, 0x34, 0x51, 0x2b, 0x44, 0xb8, 0x2b, 0xb2, 0x01, 0x78, 0x9f, 0x63, + 0x58, 0x04, 0x89, 0x6e, 0x3e, 0xb2, 0x1b, 0x5b, 0xd8, 0xc4, 0x21, 0xf0, 0xb4, + 0xcf, 0xba, 0x04, 0xde, 0x92, 0x52, 0x8f, 0x04, 0xfb, 0x4b, 0x52, 0x6b, 0x73, + 0x7e, 0xe3, 0x2d, 0xa8, 0x63, 0xf5, 0x98, 0x45, 0x61, 0x31, 0x98, 0x3a, 0x01, + 0x35, 0x8f, 0xb0, 0x7d, 0xe6, 0x75, 0x21, 0x11, 0x58, 0x5a, 0x86, 0x25, 0x6c, + 0xe0, 0x34, 0xc0, 0xd8, 0x57, 0x5a, 0x42, 0x76, 0x13, 0x61, 0xb1, 0x18, 0x77, + 0x05, 0x0b, 0xc6, 0xaf, 0xc3, 0x16, 0x15, 0x64, 0xe9, 0x6f, 0xd8, 0xcf, 0x04, + 0x8f, 0xeb, 0xeb, 0x2a, 0x92, 0x20, 0x07, 0x1c, 0xff, 0x18, 0x2d, 0x6c, 0xa0, + 0x37, 0xce, 0x2c, 0x2d, 0xed, 0x91, 0x6b, 0xd7, 0xb8, 0x4d, 0xe2, 0x8a, 0xc0, + 0x17, 0x1d, 0x97, 0xfc, 0x24, 0x95, 0x6c, 0x26, 0x66, 0x69, 0xc1, 0x03, 0x6b, + 0x2b, 0x1a, 0x23, 0xda, 0xbc, 0xf3, 0x4e, 0x38, 0xf3, 0x51, 0x45, 0x12, 0xae, + 0x8a, 0x47, 0xb3, 0x53, 0xb4, 0x16, 0x69, 0x96, 0x75, 0xe4, 0xd3, 0x1a, 0x2f, + 0xe0, 0x34, 0x08, 0xe4, 0x24, 0xa7, 0x82, 0x9a, 0x06, 0xad, 0xe6, 0x36, 0x53, + 0x61, 0xd8, 0xa9, 0x61, 0x25, 0x7c, 0xbe, 0x25, 0xb0, 0xcd, 0xe3, 0x3e, 0x96, + 0x48, 0x77, 0xdf, 0x5e, 0x57, 0xc5, 0x3d, 0xb2, 0x83, 0x51, 0x77, 0x34, 0x3e, + 0x2d, 0x87, 0x6d, 0x51, 0x4c, 0x62, 0xfb, 0xb3, 0xb4, 0xa7, 0x08, 0xce, 0x62, + 0x62, 0x05, 0xcc, 0xf9, 0x2f, 0x24, 0x0d, 0x60, 0x2c, 0xdb, 0x5d, 0x68, 0x41, + 0xfd, 0x29, 0xda, 0x63, 0x08, 0xb6, 0xca, 0x40, 0x97, 0xd8, 0x52, 0x54, 0x10, + 0x46, 0x54, 0x52, 0x23, 0x9b, 0x04, 0x51, 0xa8, 0xdb, 0xed, 0xac, 0x1e, 0x41, + 0xed, 0xdd, 0x0f, 0x6b, 0xe0, 0xe3, 0xd8, 0x89, 0x69, 0x07, 0x03, 0xa3, 0x14, + 0x57, 0x07, 0xe0, 0xb3, 0xf5, 0xdb, 0x91, 0xb8, 0x19, 0x37, 0x56, 0xe0, 0xe3, + 0x47, 0xb6, 0x64, 0xa1, 0xcc, 0xcb, 0xd7, 0x86, 0x9a, 0x40, 0x22, 0xea, 0xdf, + 0x3f, 0x87, 0x3c, 0x10, 0xec, 0xab, 0x9a, 0x93, 0xf2, 0xca, 0xdc, 0xa7, 0xa3, + 0x33, 0xb8, 0x1b, 0xb6, 0x10, 0x4e, 0x82, 0xea, 0x14, 0xfe, 0x74, 0x1e, 0xb0, + 0x62, 0x08, 0x0d, 0xc8, 0x5a, 0xcb, 0xc8, 0xcc, 0x3a, 0x9b, 0xc8, 0x0c, 0x03, + 0xd9, 0x1f, 0xfb, 0x3c, 0x25, 0xf9, 0xe4, 0x2b, 0xc2, 0x5c, 0xf7, 0x7d, 0x73, + 0x90, 0xc3, 0xab, 0xaf, 0x26, 0x10, 0xf4, 0xec, 0xdb, 0x01, 0x9b, 0x15, 0x8d, + 0xa2, 0x15, 0x5b, 0xef, 0xec, 0xb9, 0xc2, 0x29, 0x6d, 0x03, 0xf8, 0x23, 0xea, + 0xac, 0x0c, 0x74, 0x0d, 0x2a, 0x44, 0x89, 0xb8, 0x28, 0x4c, 0x7e, 0x7b, 0x3a, + 0x72, 0x9a, 0xfb, 0x69, 0xbd, 0x5b, 0xfa, 0x5f, 0x62, 0xf9, 0xb5, 0x27, 0x37, + 0x97, 0xdd, 0x24, 0xa0, 0x18, 0x30, 0x7f, 0xc6, 0x20, 0xe6, 0x42, 0xaa, 0x27, + 0xe7, 0x50, 0x6e, 0x17, 0xb1, 0x98, 0xdc, 0xa4, 0x79, 0x0e, 0x8d, 0xe1, 0xbf, + 0xb6, 0x71, 0xd8, 0xdc, 0x75, 0x13, 0x91, 0x0e, 0x95, 0x43, 0x10, 0x72, 0x1b, + 0x4f, 0xb5, 0x37, 0x05, 0xcd, 0xf0, 0x6e, 0xa6, 0xbb, 0xdf, 0x00, 0x00, 0x0a, + 0xf5, 0xb7, 0x01, 0xa8, 0x77, 0xa1, 0x8d, 0xf9, 0xa5, 0x96, 0x4d, 0x19, 0x43, + 0x10, 0xc9, 0x63, 0xa8, 0x84, 0x14, 0x1e, 0xa0, 0x21, 0xcd, 0xd9, 0x5e, 0xfa, + 0x32, 0x63, 0xa5, 0x05, 0x38, 0x72, 0x29, 0xd1, 0x54, 0xec, 0xaa, 0x23, 0x5e, + 0x8f, 0xa1, 0x07, 0x95, 0xc9, 0xda, 0x27, 0x41, 0xcd, 0x98, 0x71, 0x90, 0x16, + 0xa9, 0x01, 0x17, 0xa7, 0x6f, 0x84, 0xf0, 0x0b, 0x5c, 0x3d, 0x4b, 0xce, 0xd7, + 0x9a, 0x73, 0xbf, 0xb3, 0xa1, 0xc7, 0x8a, 0xd1, 0xad, 0xea, 0x50, 0x78, 0xf2, + 0xf1, 0xb0, 0x0f, 0x81, 0x5b, 0xc7, 0xa3, 0x0e, 0xf8, 0x58, 0x40, 0x07, 0x77, + 0x32, 0xdc, 0xb1, 0xa6, 0x1e, 0x9f, 0x31, 0x76, 0x3d, 0x52, 0x2d, 0x04, 0xc4, + 0x90, 0x37, 0x1a, 0xea, 0xbc, 0xa9, 0x49, 0x9b, 0x05, 0x13, 0x17, 0x8d, 0x54, + 0x31, 0x14, 0x8a, 0x72, 0x80, 0x5d, 0x09, 0x32, 0x9e, 0xa5, 0xd9, 0x41, 0xf3, + 0x32, 0xd5, 0xc6, 0xd3, 0x2b, 0xa2, 0xef, 0x9f, 0x87, 0x23, 0xb6, 0xae, 0xa4, + 0x5f, 0x94, 0xb6, 0xb8, 0xe0, 0x9a, 0xc1, 0xe0, 0xbb, 0xc5, 0xa8, 0xc6, 0xd9, + 0xa0, 0x0a, 0x9d, 0x93, 0xf9, 0x90, 0x7e, 0x52, 0xed, 0xc4, 0xe9, 0xc3, 0x44, + 0x29, 0x26, 0x54, 0xda, 0xae, 0xcd, 0x89, 0xd5, 0x94, 0x3a, 0x07, 0x2a, 0xe1, + 0x4a, 0x36, 0x38, 0xff, 0x67, 0x7f, 0x7f, 0xea, 0x0a, 0x2b, 0x19, 0x1c, 0xe6, + 0x64, 0x71, 0x01, 0x0c, 0xf9, 0x8a, 0x3a, 0x2a, 0x5b, 0xe1, 0x6b, 0x86, 0x2d, + 0x29, 0x07, 0x59, 0xd4, 0xa8, 0x33, 0x45, 0xd0, 0x78, 0x07, 0xda, 0x25, 0x74, + 0x3f, 0x02, 0xdd, 0x89, 0x5a, 0x3e, 0xad, 0xc0, 0x45, 0x98, 0xda, 0x54, 0xd1, + 0x5d, 0xa8, 0x91, 0xb5, 0x71, 0x6d, 0xe9, 0x85, 0xee, 0xe6, 0xdd, 0xc5, 0xcc, + 0xc9, 0x6f, 0xef, 0x4c, 0x4c, 0x89, 0x07, 0xbb, 0xff, 0xe3, 0x2c, 0xb6, 0x12, + 0x92, 0x05, 0x3d, 0xb8, 0x6d, 0x36, 0x6b, 0x7e, 0x6b, 0x30, 0x13, 0xd1, 0x4b, + 0x20, 0xa5, 0x80, 0x57, 0xe5, 0x6a, 0xe3, 0x09, 0x02, 0x4d, 0x28, 0x15, 0xe0, + 0x43, 0xf4, 0x58, 0xa8, 0xf9, 0xe9, 0x77, 0x2e, 0xf7, 0x15, 0x7e, 0x16, 0x37, + 0xd6, 0x50, 0xa3, 0x8f, 0x97, 0x4a, 0x88, 0x18, 0xc2, 0x4a, 0xb3, 0x99, 0xe0, + 0x82, 0xa7, 0x79, 0xce, 0x73, 0xca, 0xb6, 0x73, 0xff, 0x5f, 0x49, 0x66, 0xc0, + 0x6b, 0x62, 0x2d, 0x23, 0xc8, 0x8d, 0xb2, 0xfd, 0x4b, 0x8f, 0xa5, 0x0b, 0x23, + 0x03, 0xff, 0x6a, 0x03, 0xf5, 0xe9, 0x23, 0x7c, 0xe4, 0x73, 0xff, 0x3c, 0x6e, + 0x5c, 0x52, 0x0f, 0xc1, 0x08, 0x8e, 0xc9, 0x04, 0xc4, 0xda, 0x47, 0xf7, 0x81, + 0xff, 0xac, 0x2e, 0xdb, 0x02, 0x7a, 0x2b, 0x78, 0x64, 0x19, 0x83, 0x89, 0x2f, + 0xfb, 0x5c, 0x1d, 0xbc, 0x52, 0x38, 0x36, 0x75, 0xca, 0x69, 0x8e, 0xaa, 0x22, + 0x08, 0x38, 0x5e, 0xfc, 0x43, 0xa0, 0x4e, 0x54, 0xe3, 0x8d, 0x87, 0x37, 0x62, + 0xa4, 0xf1, 0xca, 0x2f, 0x5e, 0x87, 0xad, 0x98, 0x9e, 0x97, 0x2d, 0xa3, 0x71, + 0x6f, 0x41, 0x91, 0xd0, 0x02, 0x41, 0x25, 0x03, 0xd3, 0x36, 0xff, 0xd5, 0x41, + 0x8f, 0xb1, 0x2d, 0x34, 0x1b, 0xc2, 0x98, 0x93, 0x37, 0xc5, 0x90, 0x3c, 0xe6, + 0xe6, 0x7d, 0x1b, 0x40, 0x3d, 0xad, 0xd4, 0xf5, 0x04, 0x71, 0xb4, 0x14, 0x9b, + 0xb3, 0xe5, 0xaa, 0x03, 0xd2, 0xf3, 0x2e, 0x97, 0x8f, 0xfc, 0x59, 0x64, 0xe0, + 0x18, 0x07, 0x78, 0xe3, 0x8f, 0xfd, 0x98, 0xb6, 0xc3, 0xab, 0xaa, 0xf7, 0xe2, + 0xea, 0x79, 0xe3, 0x32, 0x90, 0x57, 0x0e, 0xb4, 0x83, 0x26, 0xfa, 0x0e, 0xcb, + 0xf1, 0xcc, 0xe8, 0x66, 0x62, 0xe7, 0x47, 0x34, 0x44, 0x65, 0x9f, 0xc8, 0xcb, + 0xc9, 0xf3, 0x61, 0x7e, 0xe8, 0x19, 0x5f, 0xe1, 0xbc, 0xf5, 0xbb, 0x1b, 0x63, + 0x4c, 0xd4, 0x3f, 0x04, 0x6f, 0xe2, 0xb1, 0xb8, 0xc2, 0xb0, 0xc6, 0xb0, 0x64, + 0xc4, 0xb7, 0xe1, 0x9b, 0x98, 0xe1, 0x9a, 0xa4, 0xc3, 0xae, 0xcd, 0xbb, 0xc5, + 0x8f, 0xc5, 0x97, 0xc6, 0xae, 0xc3, 0x93, 0x31, 0xc3, 0xb2, 0xe1, 0x9b, 0xae, + 0xc4, 0xb5, 0xe2, 0xb1, 0xa1, 0xc9, 0x86, 0xe1, 0x9b, 0x80, 0xc4, 0xac, 0xe2, + 0xb1, 0xba, 0xc6, 0xb3, 0xc3, 0xab, 0x5a, 0xe1, 0x9b, 0x9c, 0xc2, 0xa8, 0xc3, + 0xa2, 0xc3, 0x8e, 0xc3, 0xa0, 0xc6, 0xb1, 0xc3, 0xb8, 0xc6, 0xa4, 0xc4, 0xb8, + 0xe1, 0x9b, 0xa9, 0x44, 0x54, 0xc7, 0x8e, 0x54, 0x7d, 0x29, 0xc9, 0x89, 0xc5, + 0xb6, 0xe1, 0x9a, 0xb1, 0xe1, 0x9b, 0x97, 0xc6, 0xa9, 0xe2, 0xb1, 0xaf, 0xc3, + 0xbd, 0xc8, 0x86, 0xc4, 0xb1, 0xe1, 0x9b, 0x80, 0xc8, 0xb2, 0x23, 0x5a, 0x00, + 0x00, 0xfd, 0x9e, 0x01, 0xc4, 0xa7, 0xe1, 0x9b, 0x81, 0xc4, 0xad, 0xc4, 0xa6, + 0xc8, 0xa4, 0xe1, 0x9a, 0xba, 0xe1, 0x9b, 0x9f, 0xc8, 0x98, 0xc3, 0x9c, 0x72, + 0xe1, 0x9b, 0x8c, 0xc3, 0x8b, 0xc5, 0xbf, 0xc7, 0xa8, 0xc6, 0x84, 0xc6, 0xb9, + 0xe1, 0x9b, 0x9b, 0xc7, 0xa2, 0xe1, 0x9a, 0xb8, 0xc4, 0x92, 0xe1, 0x9a, 0xbd, + 0xcd, 0xbd, 0x7d, 0xe1, 0x9a, 0xb9, 0xe1, 0x9b, 0x82, 0xe2, 0xb1, 0xaf, 0xce, + 0x85, 0xc8, 0x84, 0xc8, 0xbf, 0x71, 0xe1, 0x9b, 0xae, 0xe1, 0x9b, 0xa3, 0xc6, + 0xa3, 0xc5, 0x8a, 0xe1, 0x9b, 0x94, 0xc7, 0xab, 0xc4, 0xbf, 0xc7, 0x9e, 0xc6, + 0xa5, 0xc8, 0x95, 0xc5, 0x99, 0xc6, 0x9d, 0x67, 0xc4, 0x9a, 0x7d, 0xc5, 0xaa, + 0xc5, 0x9a, 0xc3, 0x91, 0xe2, 0xb1, 0xb2, 0xc5, 0xb7, 0xc7, 0x81, 0xc7, 0x83, + 0xc3, 0xab, 0x26, 0x7b, 0xc8, 0xb1, 0x38, 0xc2, 0xb3, 0xe1, 0x9b, 0x9e, 0xc7, + 0x96, 0xc5, 0x85, 0x78, 0xc5, 0xae, 0xc6, 0x84, 0xc2, 0xba, 0xc5, 0x93, 0xc2, + 0xae, 0xc3, 0x91, 0xe2, 0xb1, 0xa7, 0xc5, 0x88, 0xc5, 0x8c, 0xc5, 0xaf, 0xc3, + 0xbf, 0xc6, 0x82, 0xc2, 0xbd, 0xc8, 0xb2, 0xc7, 0x93, 0xc2, 0xa5, 0xcd, 0xb4, + 0xc6, 0xb7, 0xc5, 0x89, 0xc6, 0x93, 0x69, 0xc5, 0x9a, 0xc6, 0x93, 0xc4, 0x8f, + 0xe2, 0xb1, 0xac, 0xe1, 0x9a, 0xa3, 0xc5, 0x9e, 0xc3, 0x92, 0xe1, 0x9b, 0xa2, + 0xc9, 0x8c, 0xc8, 0xbd, 0xc4, 0xbb, 0xc4, 0x92, 0xc9, 0x85, 0xe1, 0x9b, 0x88, + 0xc9, 0x85, 0xc3, 0xab, 0x77, 0xc3, 0xae, 0xe1, 0x9a, 0xb3, 0xc4, 0xb1, 0x50, + 0xc8, 0x97, 0xc7, 0xb4, 0xc8, 0x8a, 0xc7, 0xba, 0xc3, 0x88, 0xc6, 0xbf, 0xc8, + 0xab, 0x3c, 0xc6, 0x9d, 0xc4, 0xa4, 0xc3, 0x8d, 0xce, 0x87, 0xc2, 0xa1, 0xc4, + 0xb4, 0x59, 0xc4, 0x9a, 0xc8, 0x93, 0xc5, 0xb4, 0xce, 0x89, 0xc6, 0xba, 0xc3, + 0x9e, 0xc6, 0x81, 0xc8, 0x84, 0xc6, 0x85, 0xe1, 0x9b, 0x98, 0xc7, 0xa7, 0xc6, + 0xbd, 0xc5, 0xb0, 0xe1, 0x9b, 0x9f, 0xe1, 0x9b, 0xac, 0xc2, 0xb5, 0xe1, 0x9b, + 0x95, 0xc4, 0x9a, 0xc4, 0xa2, 0xc5, 0xb8, 0xc7, 0x93, 0x44, 0x5d, 0xc3, 0xa4, + 0xc8, 0xbb, 0xc8, 0xa3, 0xe1, 0x9b, 0xa8, 0xc7, 0x95, 0xc6, 0x97, 0xc7, 0x94, + 0xc9, 0x85, 0xc8, 0xae, 0xc9, 0x8f, 0xc3, 0xa3, 0xc8, 0xa9, 0xce, 0x8c, 0xc6, + 0xa9, 0x4e, 0xcd, 0xb5, 0xc8, 0xbc, 0xe1, 0x9b, 0x84, 0x3e, 0xc8, 0xb4, 0xc5, + 0xbe, 0xc6, 0x96, 0x2f, 0x7c, 0xe1, 0x9b, 0x99, 0xc4, 0x94, 0xc7, 0x8d, 0x6c, + 0xc8, 0xb6, 0xc3, 0xad, 0xc7, 0x81, 0xc8, 0x97, 0xc7, 0xb3, 0xc6, 0x9d, 0xe1, + 0x9b, 0x97, 0x21, 0x49, 0xc5, 0x86, 0xc7, 0xa5, 0xc6, 0x9a, 0xc4, 0x83, 0x38, + 0xc6, 0x8d, 0xc5, 0x83, 0xc4, 0x97, 0xc4, 0x96, 0x73, 0xe1, 0x9b, 0x8b, 0xc4, + 0x97, 0xc6, 0xad, 0x2c, 0xc5, 0x84, 0x5d, 0x65, 0xe1, 0x9a, 0xba, 0xc9, 0x8e, + 0xe1, 0x9a, 0xa9, 0x76, 0xc7, 0x93, 0xe1, 0x9b, 0x83, 0xc7, 0x82, 0xc7, 0xba, + 0xc6, 0x88, 0x03, 0xc3, 0x12, 0x6c, 0x4a, 0xc0, 0xa5, 0xd9, 0x47, 0x41, 0x24, + 0xee, 0x17, 0x42, 0xa7, 0xb1, 0x37, 0x84, 0xc6, 0xd2, 0xbb, 0xc4, 0xee, 0x2e, + 0xf8, 0x94, 0x2d, 0xfd, 0x99, 0x91, 0xad, 0x85, 0xa0, 0x40, 0x97, 0x45, 0x0f, + 0xe4, 0xe7, 0x61, 0xb6, 0x94, 0xe6, 0x09, 0x7e, 0x66, 0x83, 0x8d, 0x1c, 0x42, + 0x9d, 0xec, 0x80, 0x4b, 0x8e, 0xf8, 0xa6, 0xf0, 0xd3, 0x12, 0xf6, 0xb8, 0xa0, + 0x2f, 0x2a, 0x2e, 0x26, 0xfb, 0x60, 0xb6, 0x3a, 0xd7, 0x0e, 0x1b, 0x25, 0x41, + 0x31, 0x4a, 0xa8, 0xad, 0x3e, 0x21, 0x51, 0x1b, 0x79, 0x9b, 0x8e, 0xc4, 0xc9, + 0x8b, 0x8d, 0x16, 0x83, 0x6c, 0x18, 0x22, 0xb2, 0x45, 0x62, 0x66, 0x46, 0x59, + 0x86, 0x85, 0x0d, 0x23, 0x31, 0xc7, 0x29, 0x34, 0xbd, 0xb6, 0x71, 0x54, 0xab, + 0x20, 0xad, 0x49, 0xbe, 0x0e, 0x52, 0xd8, 0xb0, 0x78, 0x41, 0x11, 0x7c, 0x0e, + 0xb7, 0x6a, 0x39, 0x54, 0x96, 0x39, 0xf7, 0xad, 0xe7, 0x6a, 0x90, 0x71, 0x0e, + 0x79, 0x83, 0x97, 0x8e, 0x9b, 0x23, 0x34, 0x5e, 0xce, 0x3b, 0xe2, 0x7a, 0xac, + 0x48, 0xc4, 0xe9, 0x08, 0x0b, 0xb5, 0xf9, 0x4f, 0x55, 0xe3, 0x71, 0xb7, 0xe0, + 0xe8, 0x8e, 0x14, 0xfc, 0x77, 0x5c, 0xac, 0x15, 0xec, 0x2a, 0x52, 0xab, 0xe9, + 0x39, 0x3e, 0xc3, 0x7a, 0x40, 0x35, 0x9a, 0x13, 0x07, 0x63, 0x91, 0x3f, 0xe2, + 0x66, 0x55, 0x03, 0xe7, 0x8b, 0x30, 0x80, 0x4b, 0x8e, 0xf8, 0xa6, 0xf0, 0xd3, + 0x12, 0xf6, 0xb8, 0xa0, 0x2f, 0x2a, 0x2e, 0x26, 0xfb, 0x60, 0xb6, 0x3a, 0xd7, + 0x0e, 0x1b, 0x25, 0x41, 0x31, 0x4a, 0xa8, 0xad, 0x3e, 0x21, 0x51, 0x1b, 0xc5, + 0x3c, 0xae, 0x18, 0x9e, 0xc9, 0xdb, 0x6f, 0x14, 0x53, 0xb3, 0xc6, 0xad, 0x4f, + 0x3b, 0x93, 0xdd, 0x10, 0x6a, 0x3a, 0x39, 0x0d, 0xb2, 0x7a, 0x1a, 0x75, 0x0e, + 0x7e, 0xd0, 0x89, 0x7e, 0x3b, 0x61, 0x98, 0x48, 0x4d, 0xcc, 0xdf, 0xa7, 0xa7, + 0xe1, 0xd8, 0xeb, 0x2f, 0x23, 0x66, 0x8d, 0x54, 0xe9, 0x8f, 0x9e, 0xd3, 0xae, + 0x90, 0xfe, 0x0c, 0x27, 0x5f, 0x17, 0x7e, 0xcf, 0x70, 0x1f, 0xd3, 0x8c, 0xfb, + 0x8b, 0x97, 0xae, 0x22, 0xd6, 0xb4, 0xa3, 0x6c, 0xfa, 0x52, 0xcc, 0x48, 0x4e, + 0x3c, 0xff, 0xb8, 0x97, 0x7a, 0x41, 0xaa, 0x82, 0x8e, 0xd1, 0x26, 0xa8, 0x01, + 0x04, 0x8b, 0x1e, 0xc4, 0xa1, 0x5c, 0xf2, 0x93, 0x5b, 0x2a, 0x6b, 0x60, 0x9f, + 0x5c, 0xa6, 0x71, 0x9c, 0x08, 0x6a, 0xc2, 0xf5, 0x8c, 0x1c, 0x80, 0x4b, 0x8e, + 0xf8, 0xa6, 0xf0, 0xd3, 0x12, 0xf6, 0xb8, 0xa0, 0x2f, 0x2a, 0x2e, 0x26, 0xfb, + 0x60, 0xb6, 0x3a, 0xd7, 0x0e, 0x1b, 0x25, 0x41, 0x31, 0x4a, 0xa8, 0xad, 0x3e, + 0x21, 0x51, 0x1b, 0xe8, 0x5c, 0xd3, 0x35, 0x66, 0xb0, 0x60, 0xe4, 0x48, 0xb4, + 0xa2, 0xa0, 0x52, 0xa8, 0xb7, 0x9e, 0x27, 0x57, 0x8d, 0xce, 0x6e, 0x09, 0x88, + 0x6e, 0xf0, 0x92, 0xef, 0x09, 0x67, 0x97, 0x47, 0x0b, 0xb5, 0x4b, 0x9a, 0xbb, + 0xa5, 0xae, 0x26, 0x79, 0x9b, 0x07, 0xcd, 0xc8, 0x8c, 0x80, 0x2e, 0x6a, 0xf5, + 0xcb, 0xfd, 0x41, 0x24, 0x29, 0x57, 0x00, 0xac, 0x12, 0xd9, 0x10, 0xa0, 0x2a, + 0x74, 0xc8, 0x01, 0xfd, 0xd3, 0x01, 0xc4, 0xbc, 0xe1, 0x9a, 0xb6, 0xc2, 0xa9, + 0xc6, 0x9e, 0xc4, 0xbf, 0xcd, 0xb6, 0xcd, 0xb4, 0x53, 0xc3, 0xa3, 0xe2, 0xb1, + 0xa9, 0xe2, 0xb1, 0xb5, 0xe2, 0xb1, 0xa7, 0xc5, 0xb3, 0xe1, 0x9b, 0x89, 0x64, + 0xe2, 0xb1, 0xbc, 0xc7, 0x83, 0xc6, 0x9f, 0xc2, 0xb2, 0xc2, 0xa4, 0xc8, 0x9f, + 0xc7, 0x9a, 0xc2, 0xb7, 0xe1, 0x9b, 0x9b, 0xe2, 0xb1, 0xb2, 0xc5, 0xba, 0xc7, + 0x80, 0xe2, 0xb1, 0xb0, 0xc8, 0x83, 0xcd, 0xb1, 0xc8, 0x9d, 0xc4, 0xb2, 0xc8, + 0xb0, 0xcd, 0xbe, 0xc4, 0xab, 0xc6, 0x9c, 0xe1, 0x9a, 0xb6, 0xc5, 0xbc, 0xc2, + 0xaa, 0x74, 0xc3, 0x8e, 0xe1, 0x9b, 0x83, 0xc5, 0x86, 0xc6, 0xa7, 0xc3, 0xb1, + 0xe2, 0xb1, 0xa9, 0xc4, 0x8b, 0xc8, 0xb0, 0xc6, 0xa5, 0x77, 0xe2, 0xb1, 0xb3, + 0xc3, 0x94, 0xc2, 0xab, 0xc5, 0xb8, 0xc6, 0x9b, 0x61, 0xc4, 0x9c, 0xc8, 0x82, + 0x77, 0xc5, 0x9c, 0xc6, 0xa2, 0x7c, 0xc4, 0xa5, 0xc4, 0xb7, 0xc4, 0x99, 0xc8, + 0x89, 0x79, 0xc3, 0x9b, 0xe1, 0x9a, 0xba, 0xc8, 0xaa, 0xc7, 0xae, 0xc6, 0xae, + 0xc6, 0xb7, 0xc2, 0xb5, 0xc6, 0xa8, 0xc7, 0xb7, 0xe1, 0x9a, 0xbd, 0x6f, 0xc3, + 0x8f, 0x23, 0xc5, 0x92, 0xc9, 0x88, 0xe1, 0x9a, 0xa0, 0x5c, 0xcd, 0xb1, 0xc8, + 0xb8, 0x49, 0x31, 0xc6, 0x8d, 0xc6, 0xb1, 0xc5, 0x99, 0x49, 0xc8, 0xa6, 0xc3, + 0x95, 0xc5, 0x94, 0xc5, 0x93, 0xc9, 0x8e, 0xe1, 0x9a, 0xa2, 0xc8, 0x90, 0xc8, + 0x87, 0xc5, 0x94, 0xc6, 0xa0, 0x46, 0xc2, 0xbd, 0xc3, 0xa3, 0xc9, 0x8d, 0xc5, + 0x9c, 0xc7, 0xa0, 0xc2, 0xbc, 0xc8, 0x86, 0xe2, 0xb1, 0xa3, 0x6a, 0xc8, 0x91, + 0xc7, 0xbd, 0xe2, 0xb1, 0xbb, 0xc7, 0xad, 0xc4, 0xa0, 0xc8, 0x9e, 0xe1, 0x9b, + 0xa0, 0xe2, 0xb1, 0xa0, 0xc3, 0xbd, 0xc3, 0xbd, 0xe1, 0x9b, 0x88, 0xc7, 0xa5, + 0xc2, 0xb7, 0x62, 0xc6, 0x9e, 0xc8, 0x88, 0xe1, 0x9b, 0xad, 0xe1, 0x9b, 0xa1, + 0xe1, 0x9b, 0xa1, 0xc8, 0x8b, 0xc7, 0xaf, 0xce, 0x8c, 0xc3, 0x81, 0xc6, 0x93, + 0xc6, 0x9e, 0xc6, 0xab, 0xc6, 0xb2, 0xc2, 0xb3, 0x4f, 0x7a, 0xc3, 0xb9, 0x34, + 0xc7, 0x8a, 0xe2, 0xb1, 0xa7, 0xc6, 0xaf, 0xc4, 0x87, 0xc3, 0x96, 0x53, 0xc5, + 0xbb, 0x21, 0xc8, 0xa4, 0xce, 0x8c, 0xc6, 0x97, 0xc8, 0x94, 0xc6, 0xae, 0xc5, + 0x8d, 0x65, 0xc3, 0x95, 0xc4, 0x91, 0xcd, 0xba, 0xc9, 0x86, 0xe1, 0x9b, 0xa6, + 0xc7, 0x8a, 0xc3, 0x8c, 0xc8, 0x86, 0xc8, 0x96, 0xe1, 0x9b, 0x84, 0x78, 0xc5, + 0xb6, 0xe2, 0xb1, 0xb1, 0xc5, 0xb6, 0xc8, 0x92, 0xc5, 0xb6, 0xc7, 0xab, 0xe1, + 0x9b, 0x92, 0x4c, 0xc6, 0x9b, 0xc4, 0x91, 0xcd, 0xbd, 0xc8, 0x85, 0xe1, 0x9b, + 0xa4, 0xc4, 0x93, 0x2e, 0x74, 0xc2, 0xb4, 0xc3, 0xbc, 0xc6, 0x90, 0xc4, 0x96, + 0xc9, 0x88, 0xc5, 0x8e, 0xce, 0x87, 0xe2, 0xb1, 0xbc, 0xc5, 0x8e, 0xc2, 0xa9, + 0xe1, 0x9b, 0x87, 0xc8, 0xb0, 0x7e, 0xc4, 0xbb, 0xc8, 0x86, 0xc8, 0xab, 0xc8, + 0x97, 0xc7, 0x86, 0x5a, 0xc4, 0x93, 0xc8, 0x94, 0xc7, 0x83, 0x52, 0xc7, 0xb4, + 0xc5, 0xab, 0xc2, 0xb8, 0xe2, 0xb1, 0xbb, 0x25, 0xc7, 0xb3, 0xc8, 0xa0, 0xc8, + 0xbf, 0xc8, 0xbd, 0xc2, 0xa5, 0xc4, 0x83, 0xe2, 0xb1, 0xb8, 0x26, 0xc2, 0xb0, + 0xc5, 0xa5, 0xc4, 0xb9, 0xe1, 0x9a, 0xac, 0xe1, 0x9b, 0xa8, 0x73, 0xc8, 0x8e, + 0xc4, 0xbc, 0xe1, 0x9b, 0x87, 0x01, 0x49, 0x48, 0x70, 0x04, 0x60, 0xc4, 0x2f, + 0x1f, 0x1c, 0xc8, 0xcf, 0x17, 0x96, 0xbd, 0x0c, 0x92, 0x23, 0x1e, 0xf2, 0xa3, + 0x83, 0xce, 0xc2, 0xb3, 0xde, 0xaa, 0x9c, 0x03, 0xa1, 0xbd, 0xb6, 0x9e, 0x60, + 0x0d, 0x45, 0xbb, 0xe2, 0x43, 0xb1, 0xae, 0xad, 0x96, 0x15, 0xdc, 0x00, 0xad, + 0x96, 0xc3, 0x82, 0xfe, 0xcf, 0xb8, 0x6a, 0x13, 0x98, 0x1e, 0x2a, 0xc5, 0x6a, + 0xe2, 0xf6, 0x50, 0x3b, 0x2e, 0x42, 0x25, 0x3f, 0x11, 0x21, 0x02, 0x7a, 0xd5, + 0xf5, 0xed, 0xdd, 0x1a, 0xdc, 0x44, 0xa2, 0x87, 0x5c, 0x39, 0x1f, 0x01, 0xcf, + 0x88, 0x87, 0xa3, 0xe2, 0x6e, 0x14, 0x40, 0x6f, 0xfe, 0xec, 0x4b, 0xfd, 0x7a, + 0x9f, 0xd8, 0x77, 0xce, 0x52, 0x03, 0xfe, 0x6b, 0x05, 0x8d, 0x23, 0x1e, 0xc7, + 0x1a, 0xf9, 0xca, 0x18, 0xed, 0x5c, 0x73, 0x55, 0x06, 0xd7, 0xba, 0x28, 0xee, + 0x68, 0xee, 0x66, 0x58, 0x7c, 0x99, 0x8c, 0x8f, 0xec, 0xa7, 0xae, 0x06, 0x8c, + 0x8e, 0xd0, 0x79, 0xe5, 0xa9, 0xa4, 0x36, 0x72, 0x8c, 0xce, 0x01, 0xfd, 0x0d, + 0x01, 0x58, 0xc5, 0x98, 0x7c, 0xc7, 0xa7, 0xc5, 0x96, 0xc2, 0xb4, 0x4a, 0xc7, + 0x8a, 0xe2, 0xb1, 0xbb, 0xe1, 0x9a, 0xb5, 0xc6, 0x9a, 0xc6, 0xa2, 0x58, 0xc3, + 0xa9, 0xc3, 0x90, 0xc6, 0x9f, 0xe1, 0x9a, 0xb4, 0xc6, 0x9b, 0xc5, 0x81, 0xc3, + 0xad, 0x23, 0xc8, 0x84, 0x7c, 0xe1, 0x9b, 0x99, 0xc7, 0x88, 0x6a, 0x29, 0xc6, + 0x89, 0xc8, 0x91, 0xc2, 0xae, 0x4f, 0xc2, 0xa3, 0xc3, 0x97, 0xc3, 0x87, 0x38, + 0xc5, 0xb0, 0xc7, 0xbe, 0xe1, 0x9b, 0x81, 0xc8, 0xae, 0xc5, 0x95, 0xc8, 0xa6, + 0x48, 0xc5, 0xbe, 0xc6, 0xa5, 0xe2, 0xb1, 0xac, 0xc8, 0xb4, 0xc4, 0x99, 0xe1, + 0x9b, 0xa5, 0xce, 0x8a, 0xe2, 0xb1, 0xb1, 0xe1, 0x9a, 0xb8, 0xc6, 0x88, 0x2f, + 0xc7, 0x9d, 0xe2, 0xb1, 0xa3, 0xc8, 0x82, 0xe2, 0xb1, 0xbd, 0xce, 0x89, 0xe1, + 0x9b, 0x98, 0xc8, 0xb7, 0xe2, 0xb1, 0xab, 0xc7, 0xb3, 0xc7, 0x85, 0xe2, 0xb1, + 0xa0, 0x43, 0xc3, 0xbf, 0x77, 0xc8, 0xb8, 0xc5, 0x92, 0xc3, 0xb4, 0xc6, 0x9c, + 0xc6, 0x9f, 0xe1, 0x9a, 0xad, 0xc7, 0x96, 0x6e, 0xc8, 0x99, 0xc7, 0x92, 0xe1, + 0x9b, 0x80, 0xc6, 0x9e, 0x33, 0xc4, 0x87, 0xe1, 0x9b, 0x8e, 0x7d, 0xcd, 0xba, + 0xc6, 0xba, 0x30, 0xc6, 0xae, 0xc4, 0xb0, 0xc7, 0xa5, 0xe2, 0xb1, 0xb6, 0xc9, + 0x87, 0x60, 0xce, 0x8a, 0xc5, 0xac, 0xc9, 0x80, 0xcd, 0xbc, 0xc4, 0xb4, 0xe1, + 0x9a, 0xa3, 0xc8, 0xb5, 0xc3, 0xbb, 0xc3, 0xa3, 0xe2, 0xb1, 0xbb, 0xc8, 0x8d, + 0xc7, 0x89, 0xc8, 0x9e, 0x50, 0x2d, 0xc3, 0x8f, 0xc8, 0x99, 0xc4, 0x8b, 0x38, + 0xc5, 0x8c, 0xc6, 0xae, 0xc5, 0x9c, 0xc8, 0x82, 0xce, 0x85, 0xc7, 0xb4, 0x21, + 0xc2, 0xb5, 0xe1, 0x9b, 0xae, 0x63, 0xe2, 0xb1, 0xa0, 0xc6, 0xb1, 0x7d, 0x77, + 0xc8, 0x81, 0x2b, 0xe2, 0xb1, 0xba, 0xc7, 0x88, 0x6e, 0xe1, 0x9a, 0xa5, 0xce, + 0x86, 0xc7, 0xa3, 0x40, 0xc6, 0x90, 0xc5, 0x92, 0xc8, 0xa9, 0x02, 0xe1, 0x6e, + 0x95, 0xe4, 0x52, 0xf5, 0x40, 0x49, 0xc5, 0x4e, 0xf3, 0x67, 0x7e, 0x6b, 0x14, + 0x3f, 0x63, 0xe8, 0x33, 0xc5, 0x23, 0xba, 0x00, 0x8d, 0x7a, 0x83, 0x98, 0xd4, + 0x1a, 0x33, 0x11, 0x25, 0xbb, 0xd8, 0x94, 0x23, 0x6f, 0x5b, 0x59, 0x19, 0x32, + 0x26, 0x95, 0xc1, 0x96, 0xed, 0x05, 0x2d, 0xff, 0x00, 0x83, 0x27, 0x90, 0x5b, + 0xe1, 0xfb, 0x05, 0x49, 0x98, 0x39, 0x0c, 0xa7, 0x19, 0xfd, 0x70, 0x1c, 0x4d, + 0x80, 0x97, 0x8d, 0xcf, 0x26, 0xe8, 0x4f, 0x0b, 0x1f, 0xc5, 0x77, 0x37, 0xe9, + 0x46, 0xd6, 0x27, 0x61, 0xfc, 0x59, 0xfd, 0x9c, 0x48, 0xd2, 0x62, 0xb9, 0x3a, + 0xee, 0x45, 0x65, 0x2c, 0x78, 0x78, 0x05, 0xdf, 0xac, 0xe8, 0x3d, 0x04, 0xe5, + 0x24, 0x40, 0x3a, 0x25, 0xa1, 0x66, 0xa1, 0xf4, 0x0e, 0xcc, 0x8f, 0xff, 0x84, + 0x4f, 0x09, 0xde, 0x67, 0x48, 0x04, 0x52, 0xa6, 0x78, 0x9d, 0x48, 0xb7, 0xbd, + 0xbd, 0x81, 0x1f, 0x0e, 0xda, 0xda, 0xa8, 0xee, 0x8e, 0xb9, 0x16, 0x17, 0x99, + 0x2e, 0xad, 0xf3, 0x91, 0xf4, 0xc0, 0x45, 0xb8, 0xe9, 0xc2, 0xdb, 0x16, 0x1a, + 0x26, 0xfe, 0xbb, 0x6a, 0x94, 0xea, 0xcc, 0xa3, 0x06, 0x0c, 0xf6, 0x78, 0xbb, + 0xf6, 0xcf, 0xef, 0x4a, 0x7c, 0xf3, 0x82, 0xab, 0x9a, 0xd8, 0x3d, 0xe0, 0x34, + 0xcf, 0x78, 0x82, 0x25, 0xe3, 0x18, 0x49, 0xcb, 0xf1, 0x47, 0xf9, 0x4a, 0x84, + 0xad, 0x27, 0x90, 0x5b, 0xe1, 0xfb, 0x05, 0x49, 0x98, 0x39, 0x0c, 0xa7, 0x19, + 0xfd, 0x70, 0x1c, 0x4d, 0x80, 0x97, 0x8d, 0xcf, 0x26, 0xe8, 0x4f, 0x0b, 0x1f, + 0xc5, 0x77, 0x37, 0xe9, 0x46, 0xd6, 0x27, 0x61, 0xff, 0x1d, 0x80, 0xfe, 0xee, + 0xa1, 0xb6, 0xd5, 0xa1, 0x63, 0xd0, 0xc9, 0x62, 0x43, 0x16, 0x36, 0xe1, 0xed, + 0x62, 0x19, 0x66, 0xfe, 0x28, 0x5b, 0xc9, 0x70, 0xa2, 0x66, 0xbb, 0x40, 0x0d, + 0x4d, 0x48, 0xd5, 0x5e, 0xf7, 0x17, 0x04, 0xf5, 0xb7, 0x98, 0x62, 0xbd, 0x80, + 0x6a, 0x6a, 0x33, 0xe1, 0x13, 0xb1, 0x88, 0x32, 0xb3, 0xd5, 0x9e, 0x3a, 0x69, + 0x84, 0xe1, 0x4f, 0xd5, 0x2a, 0xc9, 0x00, 0x7a, 0xba, 0xe5, 0x98, 0x42, 0xec, + 0x80, 0x0b, 0xda, 0xa2, 0x69, 0xf5, 0xd4, 0xfe, 0xb1, 0xec, 0xcb, 0xe0, 0xef, + 0xc8, 0x93, 0x6a, 0x3a, 0xc7, 0x28, 0xa0, 0xc9, 0x83, 0x78, 0x37, 0x2d, 0x76, + 0xac, 0x52, 0xa5, 0x2e, 0x8e, 0x5c, 0xac, 0x28, 0xaf, 0x37, 0x96, 0xec, 0xb6, + 0x68, 0x34, 0xa4, 0xbe, 0x9b, 0xfb, 0x92, 0xfe, 0x45, 0x64, 0x57, 0x8a, 0x19, + 0x07, 0xcd, 0xe3, 0xa2, 0xc2, 0xa7, 0xf2, 0xa9, 0x17, 0xfa, 0xd8, 0x59, 0x5b, + 0x88, 0x6e, 0x04, 0x0d, 0xa5, 0x68, 0xc2, 0x01, 0x8d, 0x02, 0x49, 0xa0, 0x64, + 0x15, 0x7d, 0xe8, 0x80, 0x92, 0x23, 0x80, 0xd6, 0xb7, 0x1f, 0xfd, 0xaa, + ], + txid: [ + 0x0c, 0xd4, 0x56, 0xee, 0x3d, 0x30, 0x02, 0xe1, 0x4c, 0x06, 0x47, 0x3e, 0x5a, + 0xea, 0x4c, 0x30, 0x00, 0xfe, 0x6d, 0xe4, 0xf2, 0x5d, 0x58, 0x0c, 0x99, 0xbd, + 0x5e, 0x3b, 0x53, 0x7d, 0xca, 0x2c, + ], + auth_digest: [ + 0xee, 0xb9, 0x7a, 0xe7, 0x5f, 0x60, 0x9e, 0xf5, 0x6a, 0x98, 0x6c, 0x7f, 0x4e, + 0xa5, 0x27, 0x9c, 0xce, 0x9c, 0x57, 0xe0, 0x1c, 0x63, 0x82, 0x90, 0x38, 0x3f, + 0xfe, 0x06, 0xf3, 0x5e, 0xd8, 0xc3, + ], + amounts: vec![2069242925164740, 994250683432957], + script_pubkeys: vec![ + vec![0x52, 0x52, 0x52, 0x6a], + vec![0x63, 0x6a, 0xac, 0x63, 0x52, 0xac, 0x6a, 0x65, 0x53], + ], + transparent_input: Some(0), + sighash_shielded: [ + 0x02, 0xfb, 0xc9, 0x55, 0xf5, 0xca, 0x66, 0x7c, 0x14, 0x09, 0x14, 0x91, 0x00, + 0x66, 0xa2, 0x47, 0xdd, 0x40, 0x43, 0xeb, 0x67, 0x63, 0x6c, 0xab, 0xfc, 0x5f, + 0x4d, 0xa4, 0xf4, 0x1b, 0xfa, 0x50, + ], + sighash_all: Some([ + 0x5f, 0x0b, 0xf4, 0xf0, 0x01, 0xde, 0xf7, 0x0c, 0xbd, 0x71, 0xd8, 0x4d, 0xad, + 0x9b, 0xd0, 0xc3, 0x98, 0x9c, 0x0b, 0x47, 0xfa, 0x08, 0x21, 0x59, 0x6e, 0xa2, + 0x5c, 0xc0, 0x39, 0x4f, 0xe7, 0xe5, + ]), + sighash_none: Some([ + 0x78, 0xdc, 0x28, 0xc9, 0x22, 0xa9, 0x11, 0x36, 0x78, 0xa1, 0xbe, 0x9c, 0x09, + 0xe5, 0x89, 0x16, 0x87, 0x14, 0xc2, 0x02, 0x6b, 0x47, 0xc2, 0x62, 0x42, 0xe3, + 0xbc, 0x9e, 0x11, 0x85, 0x8e, 0x1b, + ]), + sighash_single: Some([ + 0x5e, 0x39, 0xb8, 0x67, 0x18, 0x07, 0x67, 0x47, 0xa5, 0x48, 0x62, 0x56, 0x1a, + 0x2a, 0xd0, 0x07, 0xa9, 0xda, 0x41, 0x8f, 0xc0, 0x6d, 0x55, 0x78, 0xc4, 0x32, + 0xac, 0x91, 0x8f, 0xba, 0x30, 0x4f, + ]), + sighash_all_anyone: Some([ + 0xe1, 0x9b, 0x94, 0x17, 0xee, 0x17, 0xba, 0x57, 0x18, 0xb4, 0xf2, 0x1a, 0x72, + 0x80, 0xdd, 0x4a, 0xe5, 0x5b, 0x22, 0x0b, 0xee, 0x30, 0x90, 0xef, 0xce, 0x24, + 0xc3, 0x4a, 0x92, 0x44, 0x9b, 0x30, + ]), + sighash_none_anyone: Some([ + 0x70, 0x06, 0xa4, 0xe8, 0x43, 0x3c, 0x02, 0x66, 0x23, 0xf8, 0xdd, 0x26, 0x0a, + 0xfb, 0xf7, 0xf4, 0x5a, 0xf7, 0x30, 0x2c, 0x0b, 0x25, 0x2c, 0x21, 0xb1, 0x79, + 0x38, 0x49, 0x8e, 0xa8, 0xbd, 0xe4, + ]), + sighash_single_anyone: Some([ + 0xb9, 0x3f, 0xf6, 0xd6, 0x24, 0x9f, 0x75, 0x82, 0x5b, 0x16, 0x53, 0x6b, 0x13, + 0x0d, 0x06, 0xd0, 0x87, 0xb2, 0x96, 0xa0, 0x62, 0x06, 0xd1, 0xea, 0x23, 0x5a, + 0xbd, 0x2f, 0xae, 0x5c, 0x24, 0x78, + ]), + }, + TestVector { + tx: vec![ + 0x06, 0x00, 0x00, 0x80, 0xf8, 0x69, 0x4a, 0x12, 0x77, 0x77, 0x77, 0x77, 0x46, + 0x24, 0xa0, 0x79, 0x65, 0xc0, 0xfa, 0x0c, 0x00, 0x02, 0x57, 0xfa, 0xba, 0x21, + 0xfe, 0xa1, 0x00, 0x00, 0x03, 0x6a, 0x53, 0x51, 0xcf, 0x68, 0x94, 0x72, 0x1f, + 0xee, 0x00, 0x00, 0x05, 0x00, 0x51, 0xac, 0x53, 0x63, 0x00, 0x00, 0x02, 0xe6, + 0x5c, 0x16, 0x5d, 0x08, 0xab, 0x23, 0x4c, 0xdf, 0x24, 0x81, 0x50, 0xf9, 0xc8, + 0x6f, 0x60, 0xec, 0x73, 0xab, 0xdf, 0x75, 0xc5, 0x59, 0xf0, 0x67, 0x2b, 0xae, + 0x0a, 0x39, 0x09, 0x4a, 0x3c, 0xc5, 0x23, 0xd4, 0xc7, 0x46, 0xcb, 0x4c, 0x91, + 0x5d, 0x21, 0x57, 0xe8, 0x10, 0xbe, 0x58, 0x21, 0x83, 0x74, 0x53, 0xfe, 0xf2, + 0xef, 0xb7, 0x51, 0x37, 0xf3, 0xc2, 0xab, 0xbc, 0x35, 0x47, 0x1f, 0x69, 0xf5, + 0x08, 0x54, 0xfb, 0x68, 0x81, 0x0f, 0x94, 0xf7, 0x63, 0x63, 0x3e, 0xeb, 0x14, + 0x3f, 0x72, 0xa5, 0xef, 0xd6, 0xc2, 0xa4, 0x7e, 0x61, 0x54, 0xc4, 0xf0, 0xf1, + 0x20, 0xf3, 0x7f, 0x0e, 0x44, 0xdf, 0x8a, 0xc5, 0x84, 0x9b, 0x65, 0x5a, 0xcf, + 0x9f, 0xa7, 0xb2, 0xea, 0x84, 0x62, 0x1d, 0x8e, 0x4d, 0xd8, 0x57, 0x6d, 0xa7, + 0x5e, 0xd1, 0xb4, 0x8a, 0xcb, 0x91, 0x08, 0x03, 0x27, 0x3e, 0xee, 0x8e, 0xbb, + 0x63, 0x47, 0x8a, 0xd6, 0x9d, 0xb3, 0xd1, 0xb7, 0x74, 0xc1, 0x21, 0xb2, 0xcf, + 0x95, 0x8e, 0xdc, 0xcb, 0xc4, 0x66, 0x9d, 0x31, 0x11, 0xb4, 0xfd, 0xde, 0x38, + 0xb6, 0x2d, 0x27, 0xd3, 0x21, 0x6e, 0x7f, 0x0f, 0x42, 0xa9, 0xaa, 0xe0, 0x0f, + 0xc3, 0x79, 0x12, 0x20, 0xdb, 0xb1, 0x03, 0x15, 0x19, 0xbc, 0x1e, 0xcc, 0xf8, + 0x29, 0x8a, 0x22, 0xab, 0x20, 0x92, 0x71, 0x65, 0xaa, 0x95, 0xd5, 0x46, 0x88, + 0x83, 0x48, 0x17, 0x58, 0x3c, 0x64, 0x90, 0x28, 0x77, 0x34, 0xea, 0x30, 0x0c, + 0x38, 0x94, 0xf9, 0x9b, 0xaa, 0x29, 0xee, 0x97, 0x50, 0x9d, 0x1c, 0x10, 0x71, + 0xf2, 0x17, 0x42, 0xba, 0x67, 0x13, 0xed, 0xa0, 0x20, 0x38, 0x1e, 0x60, 0x98, + 0xb0, 0x5a, 0xde, 0x28, 0x09, 0x63, 0xb3, 0x98, 0xc0, 0x3b, 0xf4, 0xc4, 0xe1, + 0xf1, 0x9a, 0xd1, 0xad, 0xf1, 0xf0, 0xd6, 0x1f, 0xac, 0xbf, 0x99, 0x66, 0xbd, + 0xb0, 0x1f, 0xd1, 0x84, 0xb2, 0x00, 0xf8, 0x66, 0xc5, 0xd1, 0x2e, 0x3d, 0xc5, + 0x7e, 0xcf, 0x4f, 0xcd, 0x60, 0xc4, 0xa7, 0x56, 0x19, 0x1d, 0xcf, 0x50, 0xbb, + 0x0f, 0x97, 0x6f, 0x00, 0xe4, 0x36, 0x36, 0xa6, 0x83, 0x08, 0x69, 0x2f, 0x40, + 0x24, 0x4c, 0x39, 0x15, 0x34, 0x4b, 0x6f, 0x1f, 0x5e, 0xe7, 0x0e, 0x51, 0xe1, + 0x2b, 0x28, 0x53, 0x85, 0x53, 0x40, 0x3b, 0xe1, 0x49, 0x8e, 0x00, 0x75, 0xdb, + 0xda, 0x3e, 0x66, 0x6d, 0x9e, 0xbd, 0x18, 0xa1, 0x27, 0x21, 0xc9, 0x73, 0x49, + 0xac, 0x10, 0xe8, 0xfa, 0x2d, 0x6a, 0x59, 0xb2, 0x23, 0x56, 0xa7, 0x71, 0x96, + 0x18, 0xaa, 0xb5, 0xc7, 0x57, 0xf8, 0x82, 0x1e, 0xfc, 0x3e, 0x07, 0x1b, 0x75, + 0xf2, 0x15, 0xb2, 0x00, 0xb7, 0xd2, 0x99, 0x98, 0xed, 0x7a, 0xe0, 0x05, 0x7f, + 0xb2, 0x32, 0x9c, 0xa9, 0x13, 0x6d, 0xd2, 0xbc, 0x51, 0xa6, 0x59, 0x01, 0x71, + 0xdf, 0xca, 0x3b, 0xcb, 0x93, 0x6b, 0x11, 0xc6, 0x3c, 0x03, 0xbb, 0x7f, 0xce, + 0x30, 0xa0, 0x5f, 0x9b, 0x6f, 0x8f, 0xf3, 0x54, 0x06, 0x04, 0x50, 0xa3, 0x45, + 0x2d, 0xa1, 0x86, 0xe9, 0x3d, 0x6c, 0x32, 0xda, 0x62, 0x72, 0xb8, 0x9b, 0xc4, + 0xd6, 0xd5, 0xe8, 0x47, 0x8f, 0x29, 0x91, 0x01, 0x98, 0x97, 0x11, 0xa9, 0xd2, + 0x20, 0x97, 0xcd, 0xb7, 0x0c, 0x15, 0x0e, 0xd2, 0x6d, 0xf4, 0x7b, 0x0c, 0xdd, + 0xee, 0x52, 0x1b, 0x4f, 0x1e, 0x98, 0x96, 0xa1, 0xb6, 0x97, 0x86, 0x53, 0xa4, + 0xe3, 0x8b, 0x0d, 0x28, 0x52, 0x6e, 0x1e, 0x3a, 0x87, 0x43, 0x5a, 0xc4, 0xfd, + 0x30, 0x97, 0xaf, 0xe3, 0x21, 0xe7, 0x2d, 0x40, 0xc4, 0x70, 0xf3, 0xb5, 0x3f, + 0x5c, 0x35, 0x8d, 0x2e, 0x53, 0x69, 0x7c, 0xaf, 0x66, 0x9d, 0xea, 0xa1, 0x1d, + 0xe7, 0x7c, 0x98, 0x4a, 0x73, 0x0e, 0x5b, 0xf7, 0xb3, 0x8e, 0xf6, 0x58, 0x9a, + 0x5a, 0xa7, 0x55, 0x81, 0xbf, 0xd3, 0xc0, 0x07, 0x8a, 0x63, 0xa3, 0x92, 0x96, + 0x0e, 0xc3, 0xf2, 0xa0, 0x5c, 0x08, 0x1a, 0x48, 0x4e, 0xb4, 0xf4, 0x25, 0xb7, + 0x08, 0x36, 0x0f, 0x82, 0x85, 0x3c, 0xfd, 0x50, 0xa0, 0x27, 0xfa, 0x92, 0x51, + 0x76, 0x86, 0x96, 0xf3, 0x73, 0x5c, 0xd9, 0xed, 0xf7, 0x9e, 0xcd, 0x4b, 0xe0, + 0x8c, 0x57, 0x85, 0xc8, 0xae, 0xe7, 0x9a, 0x13, 0x23, 0x87, 0x09, 0x94, 0x2f, + 0x2c, 0xfd, 0x0f, 0x80, 0x7d, 0xaa, 0xb5, 0x0c, 0xc6, 0x13, 0x1b, 0xab, 0x91, + 0x25, 0x67, 0x36, 0x27, 0xf5, 0xe9, 0xa3, 0xd5, 0x3d, 0x99, 0xfa, 0x02, 0x5c, + 0x39, 0xfa, 0xb0, 0x9e, 0x2a, 0x21, 0x34, 0x6d, 0xc7, 0xf8, 0x60, 0xa6, 0x2d, + 0xd2, 0x10, 0x8e, 0x04, 0x41, 0x17, 0x8e, 0xf9, 0x76, 0x21, 0xae, 0xfc, 0xe8, + 0x97, 0x28, 0x10, 0xa4, 0xc7, 0xfc, 0x1b, 0x3c, 0x7e, 0xaa, 0x83, 0xd4, 0xa6, + 0x2b, 0xd7, 0x10, 0x98, 0x96, 0x11, 0xdd, 0x7e, 0x2f, 0x4b, 0xdf, 0x15, 0xd8, + 0x31, 0x00, 0x60, 0x11, 0xb4, 0x4e, 0xd9, 0x59, 0xdc, 0x61, 0xd8, 0xde, 0x52, + 0x74, 0x5e, 0x30, 0x67, 0x9c, 0xef, 0x04, 0x01, 0x3a, 0xc6, 0x15, 0x4e, 0xf0, + 0x64, 0x69, 0x82, 0x38, 0x74, 0x25, 0x21, 0x62, 0x26, 0x3f, 0x3a, 0x4b, 0xa5, + 0x65, 0x7b, 0x8d, 0x0e, 0xcf, 0x03, 0x86, 0x44, 0x1f, 0x87, 0x30, 0xd0, 0xf1, + 0x4e, 0x86, 0x8a, 0x32, 0x46, 0x37, 0xb0, 0xd3, 0x4a, 0x9d, 0x1d, 0xd6, 0xc3, + 0x9f, 0x28, 0xfd, 0x9a, 0xf3, 0x50, 0xdc, 0x23, 0x93, 0x79, 0x29, 0xe3, 0x79, + 0x70, 0xf8, 0x87, 0x37, 0x01, 0xd3, 0xfa, 0x47, 0x10, 0x10, 0xa7, 0x21, 0x40, + 0x68, 0xad, 0x1b, 0x89, 0x02, 0x52, 0x26, 0x1d, 0xd9, 0x0d, 0x89, 0xc5, 0xa6, + 0xf2, 0x90, 0x4b, 0xc6, 0x16, 0xb0, 0x27, 0xd7, 0xbe, 0xc8, 0x79, 0xb7, 0xa1, + 0x78, 0x25, 0x4f, 0xdc, 0xaa, 0x99, 0x1b, 0x42, 0x2b, 0x7a, 0x96, 0x93, 0xe7, + 0x64, 0xa1, 0x27, 0xb1, 0x72, 0xa0, 0xdc, 0xca, 0xc4, 0x4f, 0x15, 0x27, 0x08, + 0x6c, 0x48, 0x89, 0x85, 0xf9, 0x23, 0x5e, 0x28, 0x82, 0xb4, 0x78, 0x16, 0x44, + 0xeb, 0xa9, 0xed, 0x09, 0x61, 0xca, 0x7a, 0x68, 0x45, 0xb5, 0x73, 0x65, 0xd8, + 0x75, 0x4b, 0xdc, 0x79, 0x1f, 0x81, 0xc8, 0x09, 0xd0, 0x12, 0xbd, 0x32, 0x9b, + 0x6a, 0x44, 0xbd, 0x3d, 0xfa, 0x34, 0xbc, 0xe1, 0xa3, 0x7b, 0x70, 0x55, 0x34, + 0x8c, 0x37, 0xf6, 0x19, 0x80, 0x25, 0x50, 0xb5, 0x70, 0xc6, 0xa0, 0xf7, 0x87, + 0x74, 0x63, 0x98, 0x3a, 0x16, 0x3e, 0x18, 0xf2, 0x22, 0xa7, 0x8b, 0xb4, 0x80, + 0xdd, 0x76, 0x8f, 0xd7, 0x6b, 0xc6, 0x89, 0x6f, 0xe0, 0x2a, 0xa4, 0x82, 0xf7, + 0x6c, 0x72, 0x52, 0xe6, 0x65, 0x04, 0xe8, 0x80, 0xd2, 0x76, 0xbf, 0x7d, 0x55, + 0x7b, 0x39, 0x6a, 0xde, 0x3b, 0xf0, 0xad, 0xba, 0x84, 0xa2, 0x7f, 0x88, 0xbd, + 0xa8, 0xad, 0xbf, 0xc8, 0x9a, 0xc8, 0x6a, 0xd0, 0x01, 0x02, 0xee, 0x58, 0x45, + 0x68, 0x8d, 0x4f, 0x0f, 0x89, 0x2b, 0xe6, 0x79, 0x79, 0xb1, 0x81, 0x7b, 0xc4, + 0xd4, 0xef, 0x72, 0x80, 0x92, 0x4c, 0x67, 0x8f, 0xd5, 0x4f, 0xcb, 0xde, 0xa8, + 0xa2, 0xeb, 0x8f, 0x5d, 0x75, 0x53, 0x1c, 0x1b, 0x80, 0x1b, 0x72, 0x12, 0xc6, + 0xf1, 0x45, 0x09, 0x38, 0xb9, 0x26, 0x77, 0x1e, 0x1d, 0xcd, 0xd3, 0xa4, 0x78, + 0x2f, 0x9a, 0x75, 0xc0, 0xb9, 0xfc, 0x88, 0x95, 0x72, 0xc4, 0x0d, 0x53, 0x19, + 0x65, 0x17, 0x5a, 0x45, 0xb1, 0x88, 0x21, 0x8d, 0x1d, 0x87, 0x99, 0x50, 0xcf, + 0x78, 0x08, 0x49, 0x32, 0x6c, 0x3f, 0x28, 0xdd, 0x53, 0xd6, 0x81, 0x19, 0xd2, + 0x96, 0x95, 0x50, 0x12, 0xa2, 0x6f, 0x83, 0x3c, 0xdd, 0x29, 0xc6, 0xf4, 0xc7, + 0x16, 0xf1, 0xd3, 0x37, 0xd3, 0xf4, 0xd2, 0x1c, 0x7a, 0x63, 0xf8, 0x54, 0xc9, + 0xf4, 0xc1, 0xc4, 0xcc, 0xf1, 0x81, 0xad, 0x43, 0x16, 0xca, 0xb1, 0x36, 0x46, + 0x7c, 0x01, 0xd9, 0x6d, 0x36, 0xe2, 0x98, 0x1c, 0x86, 0xc4, 0x76, 0x56, 0x7d, + 0x83, 0x77, 0x6b, 0x73, 0x37, 0x35, 0xd5, 0x65, 0x8a, 0x48, 0xf9, 0x89, 0x7c, + 0xf1, 0xe5, 0x05, 0x2b, 0x37, 0xec, 0x1c, 0x88, 0x91, 0x47, 0x36, 0xd9, 0xf9, + 0x7c, 0x54, 0x99, 0xd7, 0x3d, 0x92, 0x3b, 0x45, 0x00, 0x69, 0x4f, 0xfa, 0x57, + 0x35, 0xc9, 0x3c, 0xdb, 0x87, 0xb3, 0x5d, 0x82, 0x95, 0x49, 0xb1, 0xc6, 0x38, + 0x3e, 0x95, 0xfd, 0x19, 0x02, 0xad, 0x29, 0x80, 0xf2, 0xa3, 0xa2, 0x48, 0x3a, + 0xce, 0x74, 0xb7, 0x64, 0x3d, 0x8e, 0xae, 0x8d, 0x07, 0x9a, 0xa0, 0x06, 0x75, + 0x41, 0x00, 0x6b, 0x94, 0xa6, 0xf9, 0x13, 0xdc, 0xff, 0x13, 0xd6, 0x7c, 0xd9, + 0xa8, 0xcf, 0xdf, 0x30, 0xb0, 0xc3, 0xd1, 0x5a, 0xaa, 0x47, 0x0b, 0x3f, 0x89, + 0x56, 0x10, 0x51, 0x42, 0xfa, 0x26, 0x11, 0xfe, 0xda, 0xa4, 0x3f, 0xac, 0xbb, + 0x3f, 0x05, 0x96, 0xf6, 0x78, 0x87, 0xcd, 0xee, 0x91, 0x42, 0xc5, 0x09, 0x0a, + 0x84, 0xe6, 0x25, 0x29, 0x31, 0xff, 0xcf, 0x61, 0xa5, 0x0a, 0x4b, 0x92, 0x85, + 0x30, 0x60, 0xe8, 0xb8, 0x7e, 0x10, 0xce, 0xa8, 0xce, 0x00, 0xe4, 0x66, 0x5e, + 0x5f, 0x93, 0x1f, 0x0e, 0x08, 0xdc, 0x52, 0x47, 0xbe, 0x1a, 0xed, 0xc7, 0x9e, + 0xbb, 0x7c, 0x20, 0x16, 0x2f, 0xca, 0x7b, 0xf9, 0x0e, 0x58, 0x83, 0x02, 0x5f, + 0xc9, 0x24, 0x36, 0x8d, 0x42, 0x45, 0x0b, 0x4f, 0xb7, 0xa7, 0xe1, 0x91, 0x0e, + 0xdd, 0x8d, 0x29, 0x5f, 0x03, 0xd4, 0xde, 0x03, 0xde, 0x60, 0x51, 0xd1, 0xfc, + 0xf2, 0x87, 0xf5, 0x4f, 0x38, 0x24, 0x41, 0xdd, 0xe0, 0x0c, 0xb6, 0x83, 0xa4, + 0x04, 0x8c, 0xe5, 0x4d, 0x42, 0x20, 0x90, 0x57, 0x24, 0xb3, 0x09, 0xc7, 0x99, + 0x92, 0x4b, 0x85, 0x4a, 0xfa, 0x37, 0x7b, 0x80, 0x1a, 0x03, 0x52, 0xfc, 0x44, + 0x50, 0xb3, 0x35, 0x27, 0x7a, 0xda, 0xd7, 0x61, 0xe4, 0x8a, 0x1d, 0x1d, 0xd3, + 0x78, 0x93, 0x6a, 0x49, 0x1e, 0x28, 0x6c, 0xaf, 0xc7, 0x00, 0xb4, 0x8e, 0xdf, + 0x15, 0xf1, 0xc2, 0xd6, 0xed, 0xf1, 0xa2, 0x4e, 0x0e, 0x51, 0xb3, 0x98, 0x55, + 0x64, 0xeb, 0xa9, 0x69, 0xcd, 0x6e, 0xe6, 0x59, 0xba, 0xae, 0xf7, 0x46, 0xe1, + 0x3a, 0xba, 0x64, 0xaf, 0xad, 0x58, 0xaf, 0x52, 0xf4, 0x28, 0x17, 0x36, 0x45, + 0x75, 0x7a, 0x40, 0x7e, 0x1f, 0xdf, 0xd9, 0x89, 0x38, 0x0c, 0x02, 0xbc, 0xc3, + 0xc3, 0x7f, 0x48, 0x90, 0xc0, 0x8e, 0xb9, 0x31, 0x62, 0xcf, 0x78, 0xbc, 0x3c, + 0x74, 0x53, 0xf3, 0xf9, 0x92, 0xa7, 0x94, 0x53, 0x4c, 0x07, 0xe3, 0x96, 0x8d, + 0x82, 0x70, 0xaa, 0x19, 0x1f, 0x67, 0x80, 0x0a, 0x0b, 0xb3, 0xe7, 0xbf, 0xa5, + 0x4b, 0x0f, 0x6f, 0xa5, 0x3e, 0xe8, 0xfb, 0x13, 0x69, 0x82, 0xce, 0x71, 0xf4, + 0x08, 0x64, 0xb5, 0x4d, 0x00, 0x45, 0x1a, 0xf3, 0xf5, 0x32, 0x74, 0x22, 0x42, + 0x16, 0x06, 0xea, 0x10, 0xc0, 0xd6, 0x12, 0x7c, 0x02, 0xf9, 0x1a, 0xd3, 0xae, + 0xb9, 0xff, 0xd6, 0x11, 0x12, 0x25, 0x14, 0x14, 0x48, 0xbe, 0x82, 0x40, 0xc4, + 0x29, 0x73, 0xac, 0x52, 0xd7, 0x1b, 0x01, 0x2f, 0xe8, 0xef, 0x41, 0xf0, 0x0e, + 0xc1, 0x96, 0xc7, 0x57, 0x89, 0x9e, 0xf8, 0xc0, 0x0e, 0xf8, 0xdf, 0x44, 0x5c, + 0x56, 0x54, 0x69, 0xd8, 0x4b, 0xd0, 0x2c, 0x7f, 0xc4, 0x1b, 0xfc, 0xdf, 0x98, + 0x95, 0x1f, 0x50, 0xe8, 0x3f, 0x19, 0xa0, 0x00, 0xa9, 0xe4, 0x53, 0xf6, 0x21, + 0x67, 0xe7, 0x35, 0x0f, 0x92, 0x36, 0x08, 0x31, 0xbd, 0x7c, 0x52, 0x22, 0xb6, + 0x70, 0x61, 0x6e, 0x4b, 0x6c, 0xa8, 0xa2, 0x35, 0x50, 0xca, 0xd8, 0xac, 0x0d, + 0xdb, 0x76, 0x45, 0xe2, 0xb9, 0x71, 0x3b, 0xe7, 0xe1, 0xd7, 0x68, 0xf8, 0x8e, + 0xeb, 0x74, 0xc5, 0xd3, 0x2d, 0x8a, 0x2f, 0x42, 0x7f, 0x72, 0x16, 0xc7, 0x67, + 0xa6, 0x6b, 0xa0, 0x1e, 0x64, 0x49, 0xae, 0x43, 0x5c, 0x24, 0xbe, 0x7b, 0x9d, + 0x28, 0x8a, 0xd7, 0x57, 0x12, 0xc9, 0x2a, 0xa5, 0x06, 0x18, 0xdf, 0xba, 0x18, + 0xe8, 0x4e, 0x88, 0xd4, 0x60, 0x68, 0xdf, 0x0b, 0x42, 0xaf, 0x89, 0x29, 0x25, + 0xc8, 0x67, 0xea, 0xf4, 0xc6, 0x39, 0x05, 0x6e, 0x99, 0x51, 0xd0, 0x09, 0xa9, + 0x39, 0xf7, 0x59, 0xa8, 0xa2, 0xc0, 0x49, 0xde, 0xf0, 0x97, 0x7f, 0x61, 0xea, + 0x11, 0x23, 0x14, 0x06, 0xcd, 0x10, 0x95, 0x6d, 0x16, 0x55, 0x78, 0xbb, 0x29, + 0xe4, 0x76, 0x96, 0x76, 0x9a, 0x58, 0x0e, 0x07, 0x01, 0xe8, 0x15, 0xaf, 0x3b, + 0x50, 0x4e, 0x13, 0x58, 0xd0, 0x37, 0xe5, 0x9f, 0x66, 0x65, 0x06, 0x9e, 0xc9, + 0x06, 0xe3, 0xe0, 0x34, 0xc6, 0xb1, 0x7f, 0x04, 0x00, 0x34, 0x0d, 0x27, 0x16, + 0x20, 0x1e, 0x07, 0x1e, 0x47, 0x1a, 0x85, 0x5e, 0x9c, 0xc3, 0x6d, 0x39, 0x49, + 0x97, 0x15, 0x74, 0xbf, 0x3a, 0x06, 0x0f, 0xc0, 0xd8, 0x82, 0xd0, 0xa9, 0x86, + 0x5c, 0x24, 0xfd, 0x00, 0x01, 0x94, 0x03, 0x17, 0x30, 0xcb, 0xe1, 0x88, 0xe6, + 0xfd, 0xaf, 0xcb, 0xba, 0xf7, 0x51, 0xbe, 0x87, 0xaf, 0x96, 0x5c, 0xd9, 0x8d, + 0x99, 0x31, 0x04, 0xca, 0x6e, 0xdd, 0x29, 0x28, 0x0c, 0xda, 0x86, 0x55, 0x67, + 0xbd, 0xd4, 0xb4, 0xba, 0x47, 0x37, 0xe6, 0x1c, 0x3f, 0x0a, 0xd8, 0x75, 0xa8, + 0xde, 0xe6, 0xe6, 0xcd, 0xff, 0x26, 0x81, 0x88, 0x08, 0xff, 0x9b, 0x2d, 0x55, + 0x87, 0x95, 0xd6, 0x5d, 0x2a, 0x95, 0xb4, 0x56, 0x56, 0x19, 0xf7, 0xb2, 0x41, + 0x62, 0xcc, 0x47, 0x59, 0x9a, 0x33, 0x13, 0x06, 0xe3, 0x65, 0x2f, 0xfb, 0xc3, + 0xb3, 0xfd, 0x06, 0xc1, 0x46, 0x0c, 0x80, 0x6f, 0x4e, 0x61, 0xbe, 0xc2, 0xa2, + 0xa7, 0xb6, 0xc7, 0x96, 0xf6, 0x5d, 0xcf, 0x36, 0xa4, 0xaf, 0xc6, 0xd8, 0x10, + 0x09, 0x35, 0x21, 0x0a, 0x86, 0x38, 0x9f, 0x24, 0x9e, 0x2f, 0x82, 0x32, 0x73, + 0x7b, 0x8b, 0x33, 0x6b, 0x5f, 0x55, 0x40, 0x0b, 0x06, 0x79, 0xba, 0x0c, 0x1e, + 0xf0, 0x20, 0xc9, 0x26, 0x85, 0xa4, 0x24, 0x91, 0x79, 0x95, 0xea, 0x63, 0xad, + 0x1d, 0x5e, 0x28, 0xdd, 0x63, 0x99, 0x83, 0x82, 0xc7, 0xb3, 0x9d, 0x26, 0xdb, + 0x80, 0xb4, 0x3e, 0x32, 0x4f, 0xaf, 0x5d, 0x63, 0x60, 0x4a, 0x84, 0xf2, 0x13, + 0x5c, 0xbf, 0xf5, 0x98, 0xeb, 0x50, 0xe1, 0xd3, 0xa4, 0xb9, 0x9c, 0xd6, 0x6c, + 0x7a, 0xfd, 0xe6, 0x7f, 0xac, 0x47, 0xf0, 0x35, 0x8e, 0xc7, 0x83, 0xbe, 0x35, + 0x95, 0x47, 0x96, 0xe5, 0x97, 0x3a, 0xcf, 0xf6, 0x31, 0x98, 0xa3, 0x55, 0x94, + 0x18, 0x7e, 0xf8, 0x17, 0x00, 0x0b, 0x08, 0x88, 0x1e, 0x70, 0xe0, 0xb2, 0xcd, + 0xe2, 0x31, 0x51, 0x79, 0xc0, 0x84, 0x15, 0x51, 0xe8, 0xbd, 0x92, 0x8e, 0xb6, + 0x24, 0x87, 0x6e, 0x86, 0xb0, 0xb3, 0x3a, 0xab, 0x0c, 0xde, 0x87, 0xeb, 0x8f, + 0xd4, 0x92, 0x5d, 0x8c, 0xf1, 0x8a, 0x75, 0x68, 0xf6, 0xa2, 0x69, 0xac, 0x50, + 0x0f, 0x4f, 0x6c, 0x56, 0xbd, 0x5e, 0xa2, 0x22, 0x60, 0x2c, 0xcb, 0x13, 0xec, + 0x07, 0x7d, 0x22, 0xc6, 0x8a, 0x59, 0xa6, 0x7d, 0x0e, 0xa3, 0xb4, 0x55, 0xee, + 0x4c, 0x4a, 0xb9, 0x32, 0x76, 0xd3, 0xd9, 0xaa, 0xf8, 0x7b, 0x7a, 0x0f, 0xfb, + 0xe0, 0x24, 0x26, 0x1e, 0x79, 0x8d, 0xad, 0x05, 0x8e, 0xc8, 0xde, 0x26, 0x3c, + 0xb6, 0x76, 0xd8, 0x1b, 0x7a, 0x60, 0x79, 0x97, 0x77, 0xa8, 0xcf, 0x06, 0xce, + 0x21, 0x6d, 0x9c, 0x24, 0xf0, 0xdb, 0xb7, 0x6b, 0xc6, 0x2c, 0xb0, 0xd7, 0x79, + 0xaa, 0x49, 0xe9, 0x20, 0xc7, 0x88, 0x76, 0xc7, 0xea, 0xe2, 0x13, 0xa6, 0x38, + 0xd0, 0x31, 0x16, 0x7a, 0x52, 0x86, 0x4e, 0x14, 0xb2, 0x77, 0x6f, 0x3c, 0x06, + 0x6c, 0x60, 0xbe, 0x9f, 0x28, 0x8c, 0xbb, 0xcc, 0x33, 0x62, 0xa2, 0x1b, 0x04, + 0xd5, 0x00, 0x57, 0x46, 0xfe, 0x5e, 0x61, 0x8f, 0x95, 0x34, 0x88, 0x7b, 0xaf, + 0x44, 0xe6, 0x21, 0xf8, 0x99, 0x8c, 0x04, 0x46, 0x26, 0x6f, 0x1a, 0xa2, 0xba, + 0x42, 0xc6, 0x09, 0x88, 0x61, 0x16, 0xa3, 0x60, 0xec, 0xad, 0xc3, 0x7b, 0x86, + 0x2c, 0xca, 0xc6, 0x35, 0xb4, 0x0a, 0x93, 0xa6, 0x2e, 0x04, 0x1e, 0xcc, 0x42, + 0x01, 0x11, 0x31, 0xde, 0x25, 0xbe, 0x5c, 0x16, 0x89, 0xd4, 0x0d, 0x65, 0xb5, + 0x52, 0xdd, 0x03, 0xc6, 0xd2, 0x71, 0x2d, 0x62, 0xd2, 0xc9, 0x25, 0x2c, 0x34, + 0xa9, 0x84, 0x47, 0x4f, 0x67, 0xc1, 0x0e, 0x9e, 0x43, 0x47, 0x60, 0xba, 0x7c, + 0xad, 0x2a, 0xc7, 0x2b, 0xb2, 0x63, 0x59, 0xea, 0x58, 0x73, 0xd1, 0x9c, 0xc1, + 0x1d, 0xa7, 0xff, 0x8e, 0xb9, 0x34, 0xf5, 0x22, 0xd7, 0x2f, 0x1d, 0xf4, 0xbf, + 0x69, 0x7f, 0x71, 0x76, 0xf4, 0x56, 0x28, 0x85, 0x3e, 0x54, 0x14, 0x1f, 0xa9, + 0xf9, 0x1a, 0x55, 0x55, 0x49, 0xec, 0x76, 0x98, 0x27, 0xf7, 0x8e, 0xf8, 0xc5, + 0x32, 0x79, 0x5f, 0x3c, 0xdd, 0x86, 0xab, 0xa0, 0x14, 0x71, 0xba, 0x89, 0xe8, + 0xf2, 0x0c, 0xde, 0xa6, 0x8e, 0xf4, 0x23, 0xe6, 0x9f, 0x5c, 0x5e, 0xa1, 0x5f, + 0xf4, 0xd8, 0xea, 0x86, 0x44, 0xf0, 0xcc, 0x2c, 0x9f, 0x41, 0x7f, 0xb7, 0x16, + 0xa5, 0x7f, 0xc7, 0xe0, 0x51, 0xf5, 0x20, 0x04, 0x9f, 0xab, 0x98, 0x68, 0xf5, + 0x21, 0x59, 0xe8, 0xfe, 0xa0, 0xcf, 0x5b, 0xe3, 0x2f, 0x0b, 0xab, 0xa2, 0xaf, + 0x67, 0x85, 0xcd, 0x54, 0xa5, 0x03, 0x98, 0xb0, 0x14, 0xa0, 0x7b, 0x78, 0x45, + 0x99, 0x7a, 0x1b, 0x04, 0x1b, 0xcd, 0xbe, 0xc4, 0x80, 0xc6, 0x85, 0xc2, 0xaa, + 0xc6, 0xb8, 0xc5, 0xb2, 0x35, 0xc5, 0xbd, 0xc6, 0x99, 0x3d, 0xe1, 0x9b, 0xa4, + 0xc8, 0xbf, 0xc9, 0x8e, 0x5a, 0x5a, 0x00, 0x01, 0xfd, 0x7e, 0x01, 0xc5, 0x8b, + 0xe2, 0xb1, 0xaa, 0xcd, 0xb4, 0xc3, 0xb9, 0xe1, 0x9a, 0xae, 0xe2, 0xb1, 0xa0, + 0xc3, 0x83, 0xe2, 0xb1, 0xb5, 0xc6, 0xa7, 0xe2, 0xb1, 0xb8, 0xc5, 0x99, 0xc8, + 0xa8, 0xe1, 0x9a, 0xb9, 0xc4, 0x9c, 0x6d, 0xe1, 0x9b, 0x9f, 0x23, 0xc3, 0x89, + 0xc8, 0xad, 0x51, 0xc4, 0xb0, 0xc8, 0x87, 0xc3, 0x96, 0x53, 0xc9, 0x8c, 0xc4, + 0x99, 0xc6, 0x86, 0xc5, 0xba, 0xe1, 0x9a, 0xb5, 0x51, 0xc7, 0xbf, 0xc3, 0xb5, + 0xe1, 0x9b, 0x81, 0xc4, 0x89, 0xc7, 0x8e, 0x5e, 0xc8, 0x9b, 0xe2, 0xb1, 0xae, + 0xc8, 0xbf, 0xc7, 0x84, 0xc5, 0xa2, 0xc7, 0xb4, 0xc4, 0x98, 0xc7, 0xaa, 0xe1, + 0x9b, 0xa1, 0xc4, 0x81, 0xc6, 0xbf, 0xc4, 0x8b, 0xc3, 0x85, 0xc3, 0x9b, 0x53, + 0xc2, 0xa3, 0xc5, 0xba, 0xc5, 0xbe, 0xc7, 0x86, 0xc5, 0xa3, 0xe1, 0x9a, 0xa5, + 0xe1, 0x9b, 0x9e, 0xc7, 0xb3, 0xc2, 0xb0, 0xc8, 0xb2, 0xc7, 0xb3, 0xc2, 0xb3, + 0xe1, 0x9a, 0xbd, 0xc4, 0x83, 0xc4, 0xa4, 0xc7, 0xaa, 0xc8, 0xa4, 0xc8, 0xb3, + 0xc4, 0x80, 0xc9, 0x87, 0xc9, 0x8d, 0x47, 0xc8, 0x96, 0xe1, 0x9b, 0x8c, 0xc6, + 0xb7, 0xe2, 0xb1, 0xaa, 0xc4, 0x8b, 0xc2, 0xaa, 0x44, 0xe2, 0xb1, 0xbb, 0xe1, + 0x9a, 0xab, 0xc3, 0x98, 0xe2, 0xb1, 0xaa, 0xc7, 0x85, 0xc6, 0xb9, 0xe2, 0xb1, + 0xad, 0xc5, 0x9e, 0xc5, 0xae, 0xc6, 0xa7, 0xc8, 0x87, 0xc4, 0xb8, 0x63, 0x2c, + 0x62, 0xc5, 0x8d, 0xc8, 0xa4, 0x50, 0x3a, 0xc6, 0xb3, 0x72, 0xe1, 0x9b, 0x8e, + 0xe1, 0x9a, 0xa4, 0xc5, 0x9a, 0xc8, 0xae, 0xc4, 0xa2, 0xc3, 0x88, 0xc6, 0x9d, + 0xc3, 0x93, 0xe1, 0x9a, 0xba, 0xc5, 0xb2, 0xc5, 0xb5, 0xc4, 0x95, 0xc2, 0xb8, + 0xc2, 0xae, 0xc6, 0x97, 0xc5, 0x94, 0xc7, 0x9e, 0xc2, 0xac, 0xc3, 0xb4, 0xe2, + 0xb1, 0xa9, 0xc8, 0x99, 0x5a, 0xc6, 0x82, 0x66, 0xe1, 0x9a, 0xb4, 0xc8, 0x87, + 0xe1, 0x9a, 0xb1, 0xc8, 0x82, 0xc3, 0xb7, 0xc3, 0x84, 0xc2, 0xb3, 0xc7, 0xbd, + 0xc8, 0x88, 0xc7, 0xbc, 0x79, 0xc7, 0x9b, 0x7a, 0xc5, 0x94, 0xc5, 0xb1, 0xc8, + 0xb7, 0xc3, 0x80, 0xc7, 0xbd, 0xc6, 0xa2, 0xc6, 0xa4, 0xc4, 0xad, 0xc7, 0x85, + 0xc9, 0x88, 0xc6, 0xbb, 0xe1, 0x9b, 0x99, 0xc6, 0xb9, 0xc9, 0x8c, 0xc7, 0xb6, + 0xc6, 0xb8, 0x7a, 0xc8, 0x82, 0xe2, 0xb1, 0xa9, 0xc3, 0x80, 0xe2, 0xb1, 0xb3, + 0xe1, 0x9b, 0x83, 0xe1, 0x9a, 0xaf, 0xc5, 0x9a, 0xe2, 0xb1, 0xa2, 0xc7, 0x8e, + 0x68, 0xe1, 0x9b, 0x8c, 0xc4, 0xaa, 0xc7, 0xb5, 0xc3, 0xa6, 0xc7, 0xb9, 0xc5, + 0x87, 0xc8, 0x92, 0xc7, 0x90, 0xc8, 0x98, 0xc5, 0xba, 0xc3, 0xb9, 0xc2, 0xac, + 0xc9, 0x89, 0xc3, 0x81, 0xc7, 0x95, 0xc4, 0xbc, 0xe2, 0xb1, 0xba, 0xe2, 0xb1, + 0xb6, 0xc7, 0x83, 0x02, 0xfd, 0xb5, 0x2f, 0x06, 0x23, 0x69, 0xde, 0x65, 0x89, + 0x00, 0xe6, 0xd7, 0xa3, 0xd6, 0xef, 0x40, 0x89, 0xb0, 0x24, 0xe2, 0xdf, 0x0e, + 0x02, 0xa3, 0xe8, 0x12, 0x27, 0x35, 0xac, 0xb6, 0x46, 0x2e, 0x98, 0x38, 0x89, + 0x7a, 0x84, 0x02, 0x5b, 0x7e, 0xb3, 0x2e, 0x0a, 0x35, 0xe0, 0x6a, 0x80, 0x1c, + 0x6e, 0x7c, 0x73, 0xfb, 0xce, 0x7d, 0x5d, 0x43, 0x37, 0x1c, 0xac, 0x7a, 0xc5, + 0x98, 0xdb, 0x0a, 0xce, 0xcb, 0x0e, 0x34, 0x66, 0xc3, 0xd1, 0x40, 0xcf, 0xca, + 0x1e, 0xd0, 0xdf, 0x1c, 0xdf, 0x40, 0x67, 0xd4, 0x2d, 0x29, 0x7d, 0xfe, 0x0b, + 0x32, 0xfc, 0xb8, 0x75, 0x33, 0x81, 0x71, 0xdd, 0x1e, 0xeb, 0xeb, 0x12, 0x3f, + 0xea, 0xfa, 0x32, 0xa5, 0xd8, 0xc7, 0xce, 0x58, 0x39, 0x0e, 0xa2, 0xdf, 0x26, + 0xc6, 0x08, 0x88, 0xda, 0xf3, 0x81, 0x6b, 0x7d, 0x02, 0x97, 0xa1, 0x7b, 0x5f, + 0x5d, 0x20, 0x8d, 0xe9, 0x22, 0xe7, 0x73, 0x97, 0x2b, 0x95, 0xe6, 0x96, 0x5e, + 0x58, 0xfb, 0xf6, 0x4f, 0xae, 0x06, 0xf0, 0xc3, 0xf3, 0x78, 0x6f, 0x3d, 0x52, + 0xb3, 0x1b, 0x50, 0x6b, 0x6e, 0xaf, 0xc4, 0x77, 0x07, 0x78, 0x8e, 0x5b, 0x83, + 0x6d, 0x8a, 0xb5, 0x99, 0x42, 0xc2, 0x4f, 0x84, 0xac, 0xbd, 0xf6, 0x7a, 0x58, + 0x72, 0x7f, 0x6f, 0x3d, 0xf3, 0xcf, 0x5e, 0x6c, 0xe3, 0xa4, 0x27, 0x29, 0x90, + 0x3e, 0x7c, 0x53, 0xd1, 0x15, 0x54, 0x5f, 0xfb, 0xce, 0x7d, 0x5d, 0x43, 0x37, + 0x1c, 0xac, 0x7a, 0xc5, 0x98, 0xdb, 0x0a, 0xce, 0xcb, 0x0e, 0x34, 0x66, 0xc3, + 0xd1, 0x40, 0xcf, 0xca, 0x1e, 0xd0, 0xdf, 0x1c, 0xdf, 0x40, 0x67, 0xd4, 0x2d, + 0xbc, 0x39, 0x9d, 0x19, 0x77, 0xb8, 0xf6, 0x58, 0x8c, 0x0e, 0x08, 0x72, 0x10, + 0xf0, 0x51, 0xcf, 0x6e, 0x36, 0xe1, 0x4e, 0x32, 0xaa, 0x23, 0xba, 0x6a, 0xe4, + 0x33, 0x1f, 0x22, 0x39, 0xe7, 0x05, 0xf6, 0x79, 0x54, 0x2f, 0xbd, 0x4e, 0xd2, + 0xbf, 0x31, 0x91, 0x24, 0x36, 0x81, 0xf8, 0x27, 0x89, 0x6b, 0x1b, 0xb1, 0xc4, + 0xb7, 0x8b, 0x34, 0xc4, 0x87, 0xa4, 0xed, 0xfa, 0x97, 0xd3, 0x6d, 0x62, 0x00, + 0xfd, 0x33, 0x01, 0xc7, 0xa3, 0xce, 0x87, 0x4a, 0xc7, 0xa5, 0xc6, 0xac, 0xc5, + 0xa8, 0xc5, 0x9d, 0xc2, 0xb2, 0xc4, 0x8c, 0xc9, 0x83, 0xcd, 0xbe, 0x72, 0xc5, + 0x88, 0xe2, 0xb1, 0xb8, 0xe1, 0x9b, 0x84, 0xc4, 0xa8, 0xc7, 0xae, 0xc6, 0x8d, + 0xc7, 0xa9, 0xe1, 0x9b, 0xa6, 0x2f, 0xc7, 0x88, 0xc6, 0x9f, 0xc5, 0xb9, 0x40, + 0xc5, 0x8f, 0x42, 0xc6, 0x98, 0xe1, 0x9b, 0x95, 0xcd, 0xbb, 0xe1, 0x9a, 0xb7, + 0xc4, 0x82, 0xc9, 0x8e, 0x6c, 0xc5, 0x97, 0xc5, 0x85, 0xc8, 0x82, 0xc7, 0xbd, + 0xcd, 0xbb, 0xce, 0x89, 0xc8, 0xa1, 0xc3, 0x88, 0xc7, 0x89, 0xe2, 0xb1, 0xab, + 0xc6, 0xbd, 0xe1, 0x9a, 0xa0, 0xc6, 0x90, 0x25, 0xc7, 0xb4, 0xe1, 0x9a, 0xb6, + 0xc8, 0xa8, 0xc4, 0xbf, 0x48, 0xc3, 0xa3, 0xc3, 0x99, 0xc8, 0xb2, 0xc5, 0xa2, + 0xc8, 0x9d, 0xc4, 0xbc, 0xc7, 0xa3, 0xc5, 0x9b, 0xc8, 0x9b, 0xc7, 0xbd, 0xc4, + 0x8a, 0xe1, 0x9a, 0xa2, 0xe2, 0xb1, 0xae, 0xc5, 0xa7, 0xc6, 0x8f, 0xc5, 0x90, + 0x2e, 0x55, 0xc8, 0xb0, 0xc4, 0xa6, 0xe1, 0x9a, 0xa4, 0xe1, 0x9a, 0xae, 0xe1, + 0x9b, 0xae, 0xc7, 0x8c, 0xc4, 0x8b, 0xc7, 0x9f, 0xc7, 0xb9, 0xc8, 0x90, 0xc5, + 0xa4, 0xc5, 0xbe, 0xc8, 0xb6, 0xe2, 0xb1, 0xa2, 0xc4, 0xa3, 0x40, 0xc6, 0x97, + 0x2d, 0xc6, 0x94, 0xc7, 0xb7, 0xc8, 0xad, 0xe1, 0x9a, 0xa7, 0x54, 0xc8, 0x9e, + 0xe1, 0x9b, 0x9b, 0xc2, 0xa2, 0xc5, 0xbd, 0xc4, 0xbf, 0xc7, 0x80, 0x7b, 0xc2, + 0xaa, 0x30, 0xc5, 0xb6, 0xc8, 0x89, 0xce, 0x84, 0xc3, 0xa1, 0xc5, 0xb8, 0x40, + 0xe1, 0x9a, 0xbb, 0x60, 0xc6, 0x87, 0xe1, 0x9b, 0x87, 0xcd, 0xb7, 0xc5, 0xa1, + 0xc3, 0x98, 0xc3, 0x83, 0xe1, 0x9b, 0xab, 0xc3, 0xad, 0xc3, 0x87, 0xc7, 0xb1, + 0xc7, 0xa1, 0xe1, 0x9b, 0x87, 0xe2, 0xb1, 0xbc, 0xe2, 0xb1, 0xa9, 0x76, 0xc6, + 0x86, 0x76, 0xc4, 0x8c, 0xc7, 0xb6, 0xc7, 0x8c, 0xc4, 0x94, 0xc2, 0xbb, 0x75, + 0xe1, 0x9b, 0x81, 0xc4, 0xba, 0xe1, 0x9a, 0xb1, 0xc6, 0x92, 0xc6, 0xa6, 0x45, + 0xc4, 0xb7, 0xc6, 0x83, 0xce, 0x88, 0xc3, 0xad, 0xcd, 0xb6, 0xc3, 0x97, 0x43, + 0xe2, 0xb1, 0xb9, 0xc8, 0xad, 0xc8, 0xb8, 0x63, 0xc7, 0x9d, 0x5a, 0x00, 0x01, + 0x8b, 0x4a, 0xc5, 0xaa, 0xc3, 0x99, 0xc8, 0x9f, 0xc7, 0x80, 0xc2, 0xa7, 0xc8, + 0x96, 0xe1, 0x9b, 0x9b, 0xc9, 0x84, 0xe1, 0x9b, 0xa5, 0x36, 0xe2, 0xb1, 0xa4, + 0xc8, 0x80, 0xe1, 0x9b, 0x84, 0xc7, 0x83, 0xcd, 0xb4, 0xe1, 0x9a, 0xa6, 0xc8, + 0x82, 0xc7, 0x99, 0xc3, 0xba, 0x5e, 0xc2, 0xb3, 0xc3, 0x85, 0xc7, 0x86, 0xc3, + 0xa3, 0xc2, 0xa7, 0xc3, 0xaa, 0xe2, 0xb1, 0xa2, 0xc9, 0x81, 0xc3, 0x89, 0xc7, + 0x92, 0xe1, 0x9b, 0x99, 0xc9, 0x8c, 0xc5, 0x9c, 0xe1, 0x9b, 0x82, 0xc4, 0x80, + 0xc7, 0x87, 0x64, 0x55, 0xe1, 0x9b, 0x87, 0x61, 0xc4, 0x85, 0x61, 0xc3, 0xaf, + 0xc5, 0xb5, 0xc5, 0x9f, 0x71, 0xe2, 0xb1, 0xac, 0xcd, 0xb3, 0xc2, 0xaf, 0xe1, + 0x9b, 0x8c, 0x61, 0xc2, 0xa5, 0xcd, 0xb2, 0xc8, 0x9a, 0xc6, 0x99, 0xc6, 0x98, + 0xe2, 0xb1, 0xb3, 0xc8, 0x87, 0xc3, 0xb0, 0xc3, 0x87, 0x75, 0xc6, 0x8d, 0x56, + 0xe1, 0x9b, 0x93, 0xc5, 0x98, 0xc6, 0xbe, 0xc4, 0x84, 0x5a, 0x03, 0x50, 0x55, + 0xe0, 0x23, 0x89, 0x37, 0xb6, 0x6e, 0x2e, 0x93, 0x95, 0xf6, 0xcd, 0xe9, 0x1b, + 0x60, 0x4b, 0x07, 0xea, 0xe9, 0x87, 0x17, 0x8a, 0x88, 0x7e, 0xf2, 0xdd, 0x4e, + 0x84, 0x2a, 0xc4, 0x1e, 0x7c, 0x68, 0x2b, 0xb7, 0xcb, 0x01, 0xa2, 0x21, 0xa4, + 0x4c, 0x24, 0x2a, 0x56, 0x07, 0x98, 0x05, 0xa5, 0xdd, 0x69, 0x3e, 0x8d, 0xdf, + 0x18, 0x0d, 0x3c, 0x8e, 0xb4, 0xba, 0x97, 0x7b, 0xc1, 0xb8, 0xbe, 0xb3, 0xdb, + 0x95, 0xf3, 0x82, 0xc3, 0xe4, 0x02, 0xfa, 0xf3, 0xb6, 0x7b, 0xf8, 0xd4, 0x04, + 0x4d, 0x9d, 0xb6, 0x18, 0x42, 0xa3, 0xaf, 0x93, 0x33, 0x16, 0x83, 0x0d, 0x53, + 0xa7, 0xcb, 0x88, 0xd2, 0xa9, 0x82, 0x3b, 0xcd, 0xfb, 0xec, 0x8f, 0x18, 0xc8, + 0x6a, 0xc3, 0xdf, 0x89, 0x42, 0x38, 0x00, 0x1b, 0x28, 0xfa, 0x31, 0x3f, 0x80, + 0xcf, 0xe7, 0x5f, 0x7c, 0xb5, 0xd9, 0x73, 0xcc, 0x77, 0xf3, 0x21, 0xf1, 0x95, + 0x2f, 0x30, 0x50, 0x18, 0xc0, 0xbf, 0x23, 0x8b, 0x80, 0xe3, 0x21, 0x19, 0x90, + 0x60, 0x66, 0x6f, 0x38, 0xbb, 0x3e, 0xdf, 0x2d, 0x84, 0x15, 0xd5, 0x5a, 0x3f, + 0x1c, 0x48, 0xad, 0xaf, 0xe8, 0x90, 0x1c, 0x96, 0xfc, 0x7a, 0xc0, 0xd3, 0xf7, + 0xf8, 0x37, 0x17, 0xab, 0x11, 0xce, 0xb5, 0x8f, 0xaf, 0xb4, 0xbb, 0x84, 0xc7, + 0xb2, 0x54, 0x37, 0x9c, 0x61, 0x2c, 0x87, 0x5a, 0xc1, 0x4a, 0x6c, 0xb3, 0x55, + 0xa3, 0x3e, 0x8d, 0xdf, 0x18, 0x0d, 0x3c, 0x8e, 0xb4, 0xba, 0x97, 0x7b, 0xc1, + 0xb8, 0xbe, 0xb3, 0xdb, 0x95, 0xf3, 0x82, 0xc3, 0xe4, 0x02, 0xfa, 0xf3, 0xb6, + 0x7b, 0xf8, 0xd4, 0x04, 0x4d, 0x9d, 0xb6, 0xd4, 0x32, 0x91, 0x45, 0x80, 0x3c, + 0x6b, 0xfb, 0x82, 0xe2, 0x9a, 0xb0, 0x29, 0x9f, 0x91, 0x7a, 0x74, 0x02, 0x81, + 0x57, 0x35, 0x87, 0x28, 0xdb, 0x49, 0x92, 0xe9, 0x04, 0x20, 0xd2, 0x33, 0x0d, + 0x69, 0xe9, 0x57, 0x52, 0x7f, 0x5e, 0xa7, 0x41, 0x17, 0x56, 0xea, 0x6d, 0xd8, + 0x1e, 0xdb, 0x0e, 0x0e, 0x6f, 0x1b, 0xd7, 0x68, 0x8f, 0x54, 0x93, 0x44, 0x10, + 0xbf, 0x30, 0x90, 0x22, 0x01, 0xe1, 0x86, 0xbd, 0x82, 0x9f, 0x32, 0x34, 0x17, + 0x41, 0x08, 0xdc, 0x2a, 0xff, 0xd5, 0x1b, 0xdd, 0x7b, 0x32, 0xc5, 0x37, 0x6f, + 0xeb, 0x3b, 0x3e, 0x15, 0x96, 0x3d, 0xf6, 0x74, 0x74, 0x4c, 0xda, 0x70, 0xff, + 0x9b, 0x17, 0x7c, 0x5d, 0x13, 0x01, 0x89, 0x1d, 0x85, 0x1f, 0xd5, 0xbb, 0xad, + 0x3b, 0xa1, 0xa3, 0xd6, 0xb0, 0x3e, 0x8d, 0xdf, 0x18, 0x0d, 0x3c, 0x8e, 0xb4, + 0xba, 0x97, 0x7b, 0xc1, 0xb8, 0xbe, 0xb3, 0xdb, 0x95, 0xf3, 0x82, 0xc3, 0xe4, + 0x02, 0xfa, 0xf3, 0xb6, 0x7b, 0xf8, 0xd4, 0x04, 0x4d, 0x9d, 0xb6, 0x79, 0xef, + 0x02, 0xa1, 0x63, 0xa4, 0xd5, 0x2f, 0xe8, 0xe2, 0x69, 0x1c, 0xd1, 0xce, 0x9f, + 0x84, 0xf7, 0x36, 0x9d, 0xa3, 0x64, 0x35, 0x79, 0x12, 0xc0, 0xa6, 0xfc, 0xe6, + 0x73, 0x77, 0xaf, 0x3b, 0xd7, 0x8f, 0x24, 0x15, 0xaa, 0x9d, 0x7e, 0x80, 0x54, + 0x1b, 0x11, 0xf7, 0x99, 0x35, 0x28, 0x5b, 0xfa, 0x5e, 0x79, 0x08, 0xea, 0x28, + 0x13, 0x4a, 0xf6, 0x12, 0x5d, 0x36, 0x84, 0xa8, 0x95, 0x3f, 0x01, 0x7f, 0x7e, + 0xc0, 0xd0, 0xb8, 0xf1, 0xde, 0xfd, 0xa8, 0x15, 0xf7, 0x81, 0x2d, 0xba, 0xfe, + 0x2e, 0xfa, 0xc7, 0xb7, 0x3c, 0xe6, 0xcf, 0x88, 0x6a, 0x5f, 0x15, 0xed, 0x8a, + 0x50, 0x78, 0x53, 0xed, 0x73, 0x1b, 0x81, 0x35, 0x92, 0x3e, 0x00, 0xae, 0xb6, + 0x74, 0xc0, 0x67, 0xc8, 0x2b, 0x14, 0x01, 0x38, 0x77, 0x8c, 0xa6, 0x91, 0x06, + 0xcf, 0xce, 0x4d, 0x18, 0xc5, 0x4d, 0x43, 0x52, 0x4c, 0xa6, 0x7e, 0x8c, 0x46, + 0x62, 0xb4, 0xa4, 0x01, 0xbb, 0x7f, 0xf2, 0x4c, 0xaa, 0xa8, 0x85, 0x1a, 0x70, + 0xe8, 0xd4, 0xa6, 0x37, 0xda, 0xa7, 0x5d, 0xdf, 0x21, 0x9a, 0xce, 0x46, 0x41, + 0x35, 0xbc, 0x18, + ], + txid: [ + 0xe6, 0xdc, 0x1a, 0xac, 0x7f, 0x20, 0x51, 0x71, 0xdc, 0xf3, 0xec, 0x07, 0x0a, + 0xb5, 0x72, 0xb7, 0x8b, 0x61, 0xcc, 0xac, 0x35, 0x80, 0x23, 0x9b, 0x99, 0xa0, + 0xea, 0x7e, 0x3d, 0x94, 0x75, 0x71, + ], + auth_digest: [ + 0x1b, 0x58, 0x9c, 0x77, 0x0a, 0x39, 0x8f, 0xf1, 0x88, 0x47, 0xcf, 0x9a, 0xf9, + 0x1d, 0x36, 0x78, 0x57, 0x03, 0xc9, 0xf3, 0x8a, 0xd5, 0x21, 0xa0, 0x33, 0x80, + 0x8d, 0x37, 0x09, 0xbe, 0x62, 0x88, + ], + amounts: vec![], + script_pubkeys: vec![], + transparent_input: None, + sighash_shielded: [ + 0xe6, 0xdc, 0x1a, 0xac, 0x7f, 0x20, 0x51, 0x71, 0xdc, 0xf3, 0xec, 0x07, 0x0a, + 0xb5, 0x72, 0xb7, 0x8b, 0x61, 0xcc, 0xac, 0x35, 0x80, 0x23, 0x9b, 0x99, 0xa0, + 0xea, 0x7e, 0x3d, 0x94, 0x75, 0x71, + ], + sighash_all: None, + sighash_none: None, + sighash_single: None, + sighash_all_anyone: None, + sighash_none_anyone: None, + sighash_single_anyone: None, + }, + ] + } +} From f79962bc61d52cf1cba740fd07319fbd6fe06ae4 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 4 Sep 2024 23:21:21 +0200 Subject: [PATCH 72/85] PR fixes --- zcash_primitives/src/transaction/builder.rs | 46 ++++++++++----------- zcash_primitives/src/transaction/mod.rs | 3 +- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index f8a4116310..9bf424db62 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -112,9 +112,13 @@ pub enum Error { /// The builder was constructed without support for the Sapling pool, but a Sapling /// spend or output was added. SaplingBuilderNotAvailable, + /// The Orchard support is disabled. + OrchardIsDisabled, /// The builder was constructed with a target height before NU5 activation, but an Orchard /// spend or output was added. OrchardBuilderNotAvailable, + /// The builder was constructed without support for the Orchard + OrchardBuilderConfigNotAvailable, /// The issuance bundle not initialized. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] IssuanceBuilderNotAvailable, @@ -157,6 +161,11 @@ impl fmt::Display for Error { f, "Cannot create Orchard transactions without an Orchard anchor, or before NU5 activation" ), + Error::OrchardIsDisabled => write!(f, "Orchard support is disabled"), + Error::OrchardBuilderConfigNotAvailable => write!( + f, + "Orchard builder configuration not available" + ), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] Error::IssuanceBuilderNotAvailable => write!( f, @@ -282,6 +291,13 @@ impl BuildConfig { BuildConfig::Coinbase => Some((BundleType::Coinbase, orchard::Anchor::empty_tree())), } } + + pub fn orchard_bundle_type(&self) -> Result> { + let (bundle_type, _) = self + .orchard_builder_config() + .ok_or(Error::OrchardBuilderNotAvailable)?; + Ok(bundle_type) + } } /// The result of a transaction build operation, which includes the resulting transaction along @@ -465,7 +481,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// Creates IssuanceBundle and adds an Issuance action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - fn init_issuance_bundle( + pub fn init_issuance_bundle( &mut self, ik: IssuanceAuthorizingKey, asset_desc: String, @@ -545,10 +561,7 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< note: orchard::Note, merkle_path: orchard::tree::MerklePath, ) -> Result<(), Error> { - let (bundle_type, _) = self - .build_config - .orchard_builder_config() - .ok_or(Error::OrchardBuilderNotAvailable)?; + let bundle_type = self.build_config.orchard_bundle_type()?; if bundle_type == BundleType::DEFAULT_VANILLA { assert_eq!(note.asset().is_native().unwrap_u8(), 1); } @@ -573,12 +586,9 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< asset: AssetBase, memo: MemoBytes, ) -> Result<(), Error> { - let (bundle_type, _) = self - .build_config - .orchard_builder_config() - .ok_or(Error::OrchardBuilderNotAvailable)?; + let bundle_type = self.build_config.orchard_bundle_type()?; if bundle_type == BundleType::DEFAULT_VANILLA { - assert_eq!(asset.is_native().unwrap_u8(), 1); + assert_eq!(asset, AssetBase::native()); } self.orchard_builder .as_mut() @@ -869,23 +879,11 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< let mut unproven_orchard_bundle = None; #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - let mut unproven_orchard_zsa_bundle: Option< - orchard::Bundle< - orchard::builder::InProgress< - orchard::builder::Unproven, - orchard::builder::Unauthorized, - >, - Amount, - OrchardZSA, - >, - > = None; + let mut unproven_orchard_zsa_bundle = None; let mut orchard_meta = orchard::builder::BundleMetadata::empty(); if let Some(builder) = self.orchard_builder { - let (bundle_type, _) = self - .build_config - .orchard_builder_config() - .ok_or(Error::OrchardBuilderNotAvailable)?; + let bundle_type = self.build_config.orchard_bundle_type()?; if bundle_type == BundleType::DEFAULT_ZSA { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] { diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 227a834483..0c926ab38c 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -627,8 +627,7 @@ impl TransactionData { f_transparent: impl transparent::MapAuth, mut f_sapling: impl sapling_serialization::MapAuth, mut f_orchard: impl orchard_serialization::MapAuth, - #[cfg(zcash_unstable = "nu6")] - /* TODO nu7 */ + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] mut f_orchard_zsa: impl orchard_serialization::MapAuth< A::OrchardZsaAuth, B::OrchardZsaAuth, From 738ed173813e0f80a908891038c730fa9c8eb2a5 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 4 Sep 2024 23:24:07 +0200 Subject: [PATCH 73/85] PR fixes --- zcash_primitives/src/transaction/builder.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 9bf424db62..90f19a19a6 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -19,7 +19,8 @@ use crate::{ }, transaction::{ components::{ - amount::{Amount, BalanceError}, + amount::{Amount, BalanceError, NonNegativeAmount}, + sapling::zip212_enforcement, transparent::{self, builder::TransparentBuilder, TxOut}, }, fees::FeeRule, @@ -30,6 +31,8 @@ use crate::{ }; use orchard::builder::BundleType; +use orchard::note::AssetBase; +use orchard::orchard_flavor::OrchardVanilla; use orchard::Address; #[cfg(feature = "transparent-inputs")] @@ -38,9 +41,6 @@ use crate::transaction::components::transparent::builder::TransparentInputInfo; #[cfg(not(feature = "transparent-inputs"))] use std::convert::Infallible; -use crate::transaction::components::amount::NonNegativeAmount; -use crate::transaction::components::sapling::zip212_enforcement; - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] use orchard::{ issuance, @@ -63,9 +63,6 @@ use crate::{ }, }; -use orchard::note::AssetBase; -use orchard::orchard_flavor::OrchardVanilla; - /// Since Blossom activation, the default transaction expiry delta should be 40 blocks. /// const DEFAULT_TX_EXPIRY_DELTA: u32 = 40; From 25c6cd1bde6dc6b03a3f28ae95aeb79305911ef0 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 25 Sep 2024 13:30:19 +0200 Subject: [PATCH 74/85] Uncomment CI --- .github/workflows/ci.yml | 66 ++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a81631326e..ef0d54b436 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -168,42 +168,42 @@ jobs: - name: Verify working directory is clean (excluding lockfile) run: git diff --exit-code ':!Cargo.lock' -# build-nodefault: -# name: Build target ${{ matrix.target }} -# runs-on: ubuntu-latest -# strategy: -# matrix: -# target: -# - wasm32-wasi -# -# steps: -# - uses: actions/checkout@v4 -# with: -# path: crates -# # We use a synthetic crate to ensure no dev-dependencies are enabled, which can -# # be incompatible with some of these targets. -# - name: Create synthetic crate for testing -# run: cargo init --lib ci-build -# - name: Copy Rust version into synthetic crate -# run: cp crates/rust-toolchain.toml ci-build/ -# - name: Copy patch directives into synthetic crate -# run: | -# echo "[patch.crates-io]" >> ./ci-build/Cargo.toml -# cat ./crates/Cargo.toml | sed "0,/.\+\(patch.crates.\+\)/d" >> ./ci-build/Cargo.toml -# - name: Add zcash_proofs as a dependency of the synthetic crate -# working-directory: ./ci-build -# run: cargo add --no-default-features --path ../crates/zcash_proofs + build-nodefault: + name: Build target ${{ matrix.target }} + runs-on: ubuntu-latest + strategy: + matrix: + target: + - wasm32-wasi + + steps: + - uses: actions/checkout@v4 + with: + path: crates + # We use a synthetic crate to ensure no dev-dependencies are enabled, which can + # be incompatible with some of these targets. + - name: Create synthetic crate for testing + run: cargo init --lib ci-build + - name: Copy Rust version into synthetic crate + run: cp crates/rust-toolchain.toml ci-build/ + - name: Copy patch directives into synthetic crate + run: | + echo "[patch.crates-io]" >> ./ci-build/Cargo.toml + cat ./crates/Cargo.toml | sed "0,/.\+\(patch.crates.\+\)/d" >> ./ci-build/Cargo.toml + - name: Add zcash_proofs as a dependency of the synthetic crate + working-directory: ./ci-build + run: cargo add --no-default-features --path ../crates/zcash_proofs # - name: Add zcash_client_backend as a dependency of the synthetic crate # working-directory: ./ci-build # run: cargo add --features lightwalletd-tonic --path ../crates/zcash_client_backend -# - name: Copy pinned dependencies into synthetic crate -# run: cp crates/Cargo.lock ci-build/ -# - name: Add target -# working-directory: ./ci-build -# run: rustup target add ${{ matrix.target }} -# - name: Build for target -# working-directory: ./ci-build -# run: cargo build --verbose --target ${{ matrix.target }} + - name: Copy pinned dependencies into synthetic crate + run: cp crates/Cargo.lock ci-build/ + - name: Add target + working-directory: ./ci-build + run: rustup target add ${{ matrix.target }} + - name: Build for target + working-directory: ./ci-build + run: cargo build --verbose --target ${{ matrix.target }} bitrot: name: Bitrot check From 655d9619df47b496e34aa273fa4fc98747dc477a Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:22:01 +0200 Subject: [PATCH 75/85] Add PR fixes --- zcash_primitives/src/transaction/builder.rs | 51 +++++++------------ .../src/transaction/components/issuance.rs | 17 +++---- .../src/transaction/components/orchard.rs | 13 +++-- zcash_primitives/src/transaction/mod.rs | 36 ++++++------- zcash_primitives/src/transaction/tests.rs | 3 +- zcash_primitives/src/transaction/txid.rs | 12 +++-- 6 files changed, 60 insertions(+), 72 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 90f19a19a6..f7b67b6ccf 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -109,22 +109,18 @@ pub enum Error { /// The builder was constructed without support for the Sapling pool, but a Sapling /// spend or output was added. SaplingBuilderNotAvailable, - /// The Orchard support is disabled. - OrchardIsDisabled, /// The builder was constructed with a target height before NU5 activation, but an Orchard /// spend or output was added. - OrchardBuilderNotAvailable, - /// The builder was constructed without support for the Orchard - OrchardBuilderConfigNotAvailable, + OrchardBundleNotAvailable, /// The issuance bundle not initialized. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] IssuanceBuilderNotAvailable, /// An error occurred in constructing the Issuance bundle. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] IssuanceBundle(issuance::Error), - /// An error occurred in constructing the Issuance builder. + /// Issuance bundle already initialized. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - IssuanceBuilder(&'static str), + IssuanceBundleAlreadyInitialized, /// An error occurred in constructing the TZE parts of a transaction. #[cfg(zcash_unstable = "zfuture")] TzeBuild(tze::builder::Error), @@ -154,14 +150,9 @@ impl fmt::Display for Error { f, "Cannot create Sapling transactions without a Sapling anchor" ), - Error::OrchardBuilderNotAvailable => write!( + Error::OrchardBundleNotAvailable => write!( f, - "Cannot create Orchard transactions without an Orchard anchor, or before NU5 activation" - ), - Error::OrchardIsDisabled => write!(f, "Orchard support is disabled"), - Error::OrchardBuilderConfigNotAvailable => write!( - f, - "Orchard builder configuration not available" + "The builder was constructed with a target height before NU5 activation, but an Orchard spend or output was added" ), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] Error::IssuanceBuilderNotAvailable => write!( @@ -171,7 +162,10 @@ impl fmt::Display for Error { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] Error::IssuanceBundle(err) => write!(f, "{:?}", err), #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] - Error::IssuanceBuilder(err) => write!(f, "{:?}", err), + Error::IssuanceBundleAlreadyInitialized => write!( + f, + "Issuance bundle already initialized" + ), #[cfg(zcash_unstable = "zfuture")] Error::TzeBuild(err) => err.fmt(f), } @@ -204,13 +198,6 @@ impl From for Error { } } -#[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] -impl From for Error { - fn from(e: issuance::Error) -> Self { - Error::IssuanceBundle(e) - } -} - /// Reports on the progress made by the builder towards building a transaction. pub struct Progress { /// The number of steps completed. @@ -248,11 +235,11 @@ impl Progress { /// Rules for how the builder should be configured for each shielded pool. #[derive(Clone, Copy)] pub enum BuildConfig { - Zsa { + Standard { sapling_anchor: Option, orchard_anchor: Option, }, - Standard { + Zsa { sapling_anchor: Option, orchard_anchor: Option, }, @@ -292,7 +279,7 @@ impl BuildConfig { pub fn orchard_bundle_type(&self) -> Result> { let (bundle_type, _) = self .orchard_builder_config() - .ok_or(Error::OrchardBuilderNotAvailable)?; + .ok_or(Error::OrchardBundleNotAvailable)?; Ok(bundle_type) } } @@ -485,9 +472,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { issue_info: Option, ) -> Result<(), Error> { if self.issuance_builder.is_some() { - return Err(Error::IssuanceBuilder( - "Issuance bundle already initialized", - )); + return Err(Error::IssuanceBundleAlreadyInitialized); } self.issuance_builder = Some( @@ -539,7 +524,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { self.orchard_builder .as_mut() - .ok_or(Error::OrchardBuilderNotAvailable)? + .ok_or(Error::OrchardBundleNotAvailable)? .add_burn(asset, orchard::value::NoteValue::from_raw(value)) .map_err(Error::OrchardBuild)?; @@ -560,11 +545,11 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< ) -> Result<(), Error> { let bundle_type = self.build_config.orchard_bundle_type()?; if bundle_type == BundleType::DEFAULT_VANILLA { - assert_eq!(note.asset().is_native().unwrap_u8(), 1); + assert!(bool::from(note.asset().is_native())); } self.orchard_builder .as_mut() - .ok_or(Error::OrchardBuilderNotAvailable)? + .ok_or(Error::OrchardBundleNotAvailable)? .add_spend(orchard::keys::FullViewingKey::from(sk), note, merkle_path) .map_err(Error::OrchardSpend)?; @@ -585,11 +570,11 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder< ) -> Result<(), Error> { let bundle_type = self.build_config.orchard_bundle_type()?; if bundle_type == BundleType::DEFAULT_VANILLA { - assert_eq!(asset, AssetBase::native()); + assert!(bool::from(asset.is_native())); } self.orchard_builder .as_mut() - .ok_or(Error::OrchardBuilderNotAvailable)? + .ok_or(Error::OrchardBundleNotAvailable)? .add_output( ovk, recipient, diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index 1c8d500baf..14cbfb58bd 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -77,15 +77,10 @@ pub fn read_note(mut reader: R) -> io::Result { fn read_rho(mut reader: R) -> io::Result { let mut bytes = [0u8; 32]; reader.read_exact(&mut bytes)?; - let rho_ctopt = Rho::from_bytes(&bytes); - if rho_ctopt.is_some().into() { - Ok(rho_ctopt.unwrap()) - } else { - Err(Error::new( - ErrorKind::InvalidData, - "invalid Pallas point for rho", - )) - } + Option::from(Rho::from_bytes(&bytes)).ok_or(Error::new( + ErrorKind::InvalidData, + "invalid Pallas point for rho", + )) } fn read_recipient(mut reader: R) -> io::Result
{ @@ -111,12 +106,12 @@ fn read_rseed(mut reader: R, nullifier: &Rho) -> io::Result .ok_or(Error::new(ErrorKind::InvalidData, "Invalid rseed")) } -/// Writes an [`IssueBundle`] in the v5 transaction format. +/// Writes an [`IssueBundle`] in the v6 transaction format. pub fn write_v6_bundle( bundle: Option<&IssueBundle>, mut writer: W, ) -> io::Result<()> { - if let Some(bundle) = &bundle { + if let Some(bundle) = bundle { Vector::write_nonempty(&mut writer, bundle.actions(), |w, action| { write_action(action, w) })?; diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index fc9a3a4e13..c4152ccc8e 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -5,12 +5,11 @@ use std::io::{self, Read, Write}; use crate::transaction::components::issuance::read_asset; use byteorder::{ReadBytesExt, WriteBytesExt}; use nonempty::NonEmpty; -use orchard::note::AssetBase; -use orchard::note_encryption::OrchardDomainCommon; -use orchard::orchard_flavor::{OrchardVanilla, OrchardZSA}; use orchard::{ bundle::{Authorization, Authorized, Flags}, - note::{ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, + note::{AssetBase, ExtractedNoteCommitment, Nullifier, TransmittedNoteCiphertext}, + note_encryption::OrchardDomainCommon, + orchard_flavor::{OrchardVanilla, OrchardZSA}, primitives::redpallas::{self, SigType, Signature, SpendAuth, VerificationKey}, value::{NoteValue, ValueCommitment}, Action, Anchor, @@ -248,9 +247,9 @@ pub fn read_signature(mut reader: R) -> io::Result(mut reader: R) -> io::Result { - let mut tmp = [0; 8]; - reader.read_exact(&mut tmp)?; - Ok(NoteValue::from_bytes(tmp)) + let mut bytes = [0; 8]; + reader.read_exact(&mut bytes)?; + Ok(NoteValue::from_bytes(bytes)) } /// Writes an [`orchard::Bundle`] in the v5 transaction format. diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 0c926ab38c..5711d1b3dd 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -404,12 +404,12 @@ impl TransactionData { sprout_bundle: Option, sapling_bundle: Option>, orchard_bundle: Option>, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] orchard_zsa_bundle: Option< - orchard::Bundle, - >, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_bundle: Option< - IssueBundle, - >, + #[rustfmt::skip] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + orchard_zsa_bundle: Option>, + #[rustfmt::skip] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issue_bundle: Option>, ) -> Self { TransactionData { version, @@ -558,7 +558,7 @@ impl TransactionData { ) } - #[cfg(not(zcash_unstable = "nu6"))] /* TODO nu7 */ + #[cfg(not(zcash_unstable = "nu6" /* TODO nu7 */ ))] fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { digester.digest_orchard(self.orchard_bundle.as_ref()) } @@ -589,16 +589,18 @@ impl TransactionData { ) -> Option< orchard::bundle::Bundle, >, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] f_zsa_orchard: impl FnOnce( + #[rustfmt::skip] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + f_zsa_orchard: impl FnOnce( Option>, ) -> Option< orchard::bundle::Bundle, >, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] f_issue: impl FnOnce( + #[rustfmt::skip] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + f_issue: impl FnOnce( Option>, - ) -> Option< - orchard::issuance::IssueBundle, - >, + ) -> Option>, #[cfg(zcash_unstable = "zfuture")] f_tze: impl FnOnce( Option>, ) @@ -632,10 +634,9 @@ impl TransactionData { A::OrchardZsaAuth, B::OrchardZsaAuth, >, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] f_issue: impl issuance::MapIssueAuth< - A::IssueAuth, - B::IssueAuth, - >, + #[rustfmt::skip] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + f_issue: impl issuance::MapIssueAuth, #[cfg(zcash_unstable = "zfuture")] f_tze: impl tze::MapAuth, ) -> TransactionData { TransactionData { @@ -732,6 +733,7 @@ impl Transaction { #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn from_data_v6(data: TransactionData) -> Self { + // We use the same type TransactionData for both v5 and V6 Self::from_data_v5(data) } @@ -1250,7 +1252,7 @@ pub mod testing { _issue_bundle in issuance::testing::arb_bundle_for_version(version), version in Just(version) ) -> TransactionData { - TransactionData:: { + TransactionData { version, consensus_branch_id, lock_time, diff --git a/zcash_primitives/src/transaction/tests.rs b/zcash_primitives/src/transaction/tests.rs index 92b22569b7..14fd491b94 100644 --- a/zcash_primitives/src/transaction/tests.rs +++ b/zcash_primitives/src/transaction/tests.rs @@ -239,7 +239,8 @@ fn zip_0244() { ) -> (TransactionData, TxDigests) { let tx = Transaction::read( &tv.tx[..], - #[cfg(not(zcash_unstable = "nu6"))] /* TODO nu7 */ BranchId::Nu5, + #[cfg(not(zcash_unstable = "nu6" /* TODO nu7 */ ))] + BranchId::Nu5, #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] BranchId::Nu7, ) diff --git a/zcash_primitives/src/transaction/txid.rs b/zcash_primitives/src/transaction/txid.rs index 08bbc6c205..a89537c1fd 100644 --- a/zcash_primitives/src/transaction/txid.rs +++ b/zcash_primitives/src/transaction/txid.rs @@ -376,7 +376,9 @@ impl TransactionDigest for TxIdDigester { transparent_digests: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_digest: Self::IssueDigest, + #[rustfmt::skip] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digests: Self::TzeDigest, ) -> Self::Digest { TxDigests { @@ -400,7 +402,9 @@ pub(crate) fn to_hash( transparent_digest: Blake2bHash, sapling_digest: Option, orchard_digest: Option, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_digest: Option, + #[rustfmt::skip] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issue_digest: Option, #[cfg(zcash_unstable = "zfuture")] tze_digests: Option<&TzeDigests>, ) -> Blake2bHash { let mut personal = [0; 16]; @@ -578,7 +582,9 @@ impl TransactionDigest for BlockTxCommitmentDigester { transparent_digest: Self::TransparentDigest, sapling_digest: Self::SaplingDigest, orchard_digest: Self::OrchardDigest, - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] issue_digest: Self::IssueDigest, + #[rustfmt::skip] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + issue_digest: Self::IssueDigest, #[cfg(zcash_unstable = "zfuture")] tze_digest: Self::TzeDigest, ) -> Self::Digest { let digests = [transparent_digest, sapling_digest, orchard_digest]; From fc1223738c3a83ac6d91d1661e81222963ee81e9 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 30 Sep 2024 16:56:12 +0200 Subject: [PATCH 76/85] PR Fixes --- .../src/transaction/components/orchard.rs | 110 +++++++----------- zcash_primitives/src/transaction/mod.rs | 14 +-- .../src/transaction/sighash_v6.rs | 19 --- 3 files changed, 43 insertions(+), 100 deletions(-) delete mode 100644 zcash_primitives/src/transaction/sighash_v6.rs diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index c4152ccc8e..9c2f7b1e55 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -48,48 +48,30 @@ impl MapAuth for () { } } -/// Reads an [`orchard::Bundle`] from a v5 transaction format. -pub fn read_v5_bundle( - mut reader: R, -) -> io::Result>> { - #[allow(clippy::redundant_closure)] - let actions_without_auth = Vector::read(&mut reader, |r| read_action_without_auth(r))?; - if actions_without_auth.is_empty() { - Ok(None) - } else { - let flags = read_flags(&mut reader)?; - let value_balance = Transaction::read_amount(&mut reader)?; - let anchor = read_anchor(&mut reader)?; - let proof_bytes = Vector::read(&mut reader, |r| r.read_u8())?; - let actions = NonEmpty::from_vec( - actions_without_auth - .into_iter() - .map(|act| act.try_map(|_| read_signature::<_, redpallas::SpendAuth>(&mut reader))) - .collect::, _>>()?, - ) - .expect("A nonzero number of actions was read from the transaction data."); - let binding_signature = read_signature::<_, redpallas::Binding>(&mut reader)?; - let authorization = orchard::bundle::Authorized::from_parts( - orchard::Proof::new(proof_bytes), - binding_signature, - ); +pub trait ReadBurn { + fn read_burn(reader: &mut R) -> io::Result>; +} - Ok(Some(orchard::Bundle::from_parts( - actions, - flags, - value_balance, - Default::default(), - anchor, - authorization, - ))) +// OrchardVanilla has no burn to read +impl ReadBurn for OrchardVanilla { + fn read_burn(_reader: &mut R) -> io::Result> { + Ok(Vec::new()) + } +} + +// Read burn for OrchardZSA +impl ReadBurn for OrchardZSA { + fn read_burn(reader: &mut R) -> io::Result> { + Ok(Vector::read(reader, |r| read_burn(r))?) } } + /// Reads an [`orchard::Bundle`] from a v6 transaction format. -pub fn read_v6_bundle( +pub fn read_orchard_bundle>( mut reader: R, -) -> io::Result>> { +) -> io::Result>> { #[allow(clippy::redundant_closure)] let actions_without_auth = Vector::read(&mut reader, |r| read_action_without_auth(r))?; if actions_without_auth.is_empty() { @@ -107,7 +89,7 @@ pub fn read_v6_bundle( ) .expect("A nonzero number of actions was read from the transaction data."); - let burn = Vector::read(&mut reader, |r| read_burn(r))?; + let burn = D::read_burn(&mut reader)?; let binding_signature = read_signature::<_, redpallas::Binding>(&mut reader)?; @@ -252,42 +234,32 @@ fn read_note_value(mut reader: R) -> io::Result { Ok(NoteValue::from_bytes(bytes)) } -/// Writes an [`orchard::Bundle`] in the v5 transaction format. -pub fn write_v5_bundle( - bundle: Option<&orchard::Bundle>, - mut writer: W, -) -> io::Result<()> { - if let Some(bundle) = &bundle { - Vector::write_nonempty(&mut writer, bundle.actions(), |w, a| { - write_action_without_auth(w, a) - })?; +pub trait WriteBurn { + fn write_burn(writer: &mut W, burn: &Vec<(AssetBase, NoteValue)>) -> io::Result<()>; +} - writer.write_all(&[bundle.flags().to_byte()])?; - writer.write_all(&bundle.value_balance().to_i64_le_bytes())?; - writer.write_all(&bundle.anchor().to_bytes())?; - Vector::write( - &mut writer, - bundle.authorization().proof().as_ref(), - |w, b| w.write_u8(*b), - )?; - Array::write( - &mut writer, - bundle.actions().iter().map(|a| a.authorization()), - |w, auth| w.write_all(&<[u8; 64]>::from(*auth)), - )?; - writer.write_all(&<[u8; 64]>::from( - bundle.authorization().binding_signature(), - ))?; - } else { - CompactSize::write(&mut writer, 0)?; +// OrchardVanilla has no burn to write +impl WriteBurn for OrchardVanilla { + fn write_burn(_writer: &mut W, _burn: &Vec<(AssetBase, NoteValue)>) -> io::Result<()> { + Ok(()) } +} - Ok(()) +// Write burn for OrchardZSA +impl WriteBurn for OrchardZSA { + fn write_burn(writer: &mut W, burn: &Vec<(AssetBase, NoteValue)>) -> io::Result<()> { + Vector::write(writer, burn, |w, (asset, amount)| { + w.write_all(&asset.to_bytes())?; + w.write_all(&amount.to_bytes())?; + Ok(()) + })?; + Ok(()) + } } /// Writes an [`orchard::Bundle`] in the v6 transaction format. -pub fn write_v6_bundle( - bundle: Option<&orchard::Bundle>, +pub fn write_orchard_bundle>( + bundle: Option<&orchard::Bundle>, mut writer: W, ) -> io::Result<()> { if let Some(bundle) = &bundle { @@ -309,11 +281,7 @@ pub fn write_v6_bundle( |w, auth| w.write_all(&<[u8; 64]>::from(*auth)), )?; - Vector::write(&mut writer, bundle.burn(), |w, (asset, amount)| { - w.write_all(&asset.to_bytes())?; - w.write_all(&amount.to_bytes())?; - Ok(()) - })?; + D::write_burn(&mut writer, bundle.burn())?; writer.write_all(&<[u8; 64]>::from( bundle.authorization().binding_signature(), diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 5711d1b3dd..73c3423648 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -558,12 +558,6 @@ impl TransactionData { ) } - #[cfg(not(zcash_unstable = "nu6" /* TODO nu7 */ ))] - fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { - digester.digest_orchard(self.orchard_bundle.as_ref()) - } - - #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { if self.version.has_orchard_zsa() { digester.digest_orchard_zsa(self.orchard_zsa_bundle.as_ref()) @@ -870,7 +864,7 @@ impl Transaction { Self::read_v5_header_fragment(&mut reader)?; let transparent_bundle = Self::read_transparent(&mut reader)?; let sapling_bundle = sapling_serialization::read_v5_bundle(&mut reader)?; - let orchard_bundle = orchard_serialization::read_v5_bundle(&mut reader)?; + let orchard_bundle = orchard_serialization::read_orchard_bundle(&mut reader)?; #[cfg(zcash_unstable = "zfuture")] let tze_bundle = if version.has_tze() { @@ -926,7 +920,7 @@ impl Transaction { Self::read_v5_header_fragment(&mut reader)?; let transparent_bundle = Self::read_transparent(&mut reader)?; let sapling_bundle = sapling_serialization::read_v5_bundle(&mut reader)?; - let orchard_zsa_bundle = orchard_serialization::read_v6_bundle(&mut reader)?; + let orchard_zsa_bundle = orchard_serialization::read_orchard_bundle(&mut reader)?; let issue_bundle = issuance::read_v6_bundle(&mut reader)?; #[cfg(zcash_unstable = "zfuture")] @@ -1045,7 +1039,7 @@ impl Transaction { self.write_header(&mut writer)?; self.write_transparent(&mut writer)?; self.write_sapling(&mut writer)?; - orchard_serialization::write_v5_bundle(self.orchard_bundle.as_ref(), &mut writer)?; + orchard_serialization::write_orchard_bundle(self.orchard_bundle.as_ref(), &mut writer)?; #[cfg(zcash_unstable = "zfuture")] self.write_tze(&mut writer)?; Ok(()) @@ -1082,7 +1076,7 @@ impl Transaction { self.write_header(&mut writer)?; self.write_transparent(&mut writer)?; self.write_sapling(&mut writer)?; - orchard_serialization::write_v6_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; + orchard_serialization::write_orchard_bundle(self.orchard_zsa_bundle.as_ref(), &mut writer)?; issuance::write_v6_bundle(self.issue_bundle.as_ref(), &mut writer)?; #[cfg(zcash_unstable = "zfuture")] self.write_tze(&mut writer)?; diff --git a/zcash_primitives/src/transaction/sighash_v6.rs b/zcash_primitives/src/transaction/sighash_v6.rs deleted file mode 100644 index a72920db67..0000000000 --- a/zcash_primitives/src/transaction/sighash_v6.rs +++ /dev/null @@ -1,19 +0,0 @@ -use blake2b_simd::Hash as Blake2bHash; - -use crate::transaction::sighash_v5::v5_v6_signature_hash; -use crate::transaction::{ - sighash::{SignableInput, TransparentAuthorizingContext}, - Authorization, TransactionData, TxDigests, -}; - -pub fn v6_signature_hash< - TA: TransparentAuthorizingContext, - A: Authorization, ->( - tx: &TransactionData, - signable_input: &SignableInput<'_>, - txid_parts: &TxDigests, -) -> Blake2bHash { - // Currently to_hash is designed in a way that it supports both v5 and v6 signature hash - v5_v6_signature_hash(tx, signable_input, txid_parts) -} From 8a409228c3ad0563020ecbcc007bf817bb9ab8b7 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 30 Sep 2024 17:29:11 +0200 Subject: [PATCH 77/85] Check build config in issuance --- zcash_primitives/src/transaction/builder.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index f7b67b6ccf..b28f1c5672 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -471,6 +471,8 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { asset_desc: String, issue_info: Option, ) -> Result<(), Error> { + assert!(self.build_config.orchard_bundle_type()? == BundleType::DEFAULT_ZSA); + if self.issuance_builder.is_some() { return Err(Error::IssuanceBundleAlreadyInitialized); } @@ -498,6 +500,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { recipient: Address, value: orchard::value::NoteValue, ) -> Result<(), Error> { + assert!(self.build_config.orchard_bundle_type()? == BundleType::DEFAULT_ZSA); self.issuance_builder .as_mut() .ok_or(Error::IssuanceBuilderNotAvailable)? @@ -510,6 +513,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// Finalizes a given asset #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn finalize_asset(&mut self, asset_desc: String) -> Result<(), Error> { + assert!(self.build_config.orchard_bundle_type()? == BundleType::DEFAULT_ZSA); self.issuance_builder .as_mut() .ok_or(Error::IssuanceBuilderNotAvailable)? @@ -522,6 +526,7 @@ impl<'a, P: consensus::Parameters> Builder<'a, P, ()> { /// Adds a Burn action to the transaction. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] pub fn add_burn(&mut self, value: u64, asset: AssetBase) -> Result<(), Error> { + assert!(self.build_config.orchard_bundle_type()? == BundleType::DEFAULT_ZSA); self.orchard_builder .as_mut() .ok_or(Error::OrchardBundleNotAvailable)? @@ -1604,7 +1609,7 @@ mod tests { let iak = IssuanceAuthorizingKey::from_zip32_seed(seed, COIN_TYPE, 0).unwrap(); let tx_height = TEST_NETWORK.activation_height(NetworkUpgrade::Nu7).unwrap(); - let build_config = BuildConfig::Standard { + let build_config = BuildConfig::Zsa { sapling_anchor: None, orchard_anchor: Some(orchard::Anchor::empty_tree()), }; From 12a39c28f02180531bb7c86fd72f0eb6c81f5419 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Mon, 30 Sep 2024 18:33:31 +0200 Subject: [PATCH 78/85] Add tx building to tests --- zcash_primitives/src/transaction/builder.rs | 53 ++++++++++++++------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index b28f1c5672..886f96292a 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1061,7 +1061,7 @@ mod testing { use rand::RngCore; use rand_core::CryptoRng; use std::convert::Infallible; - + use zcash_protocol::value::Zatoshis; use super::{BuildResult, Builder, Error}; use crate::{ consensus, @@ -1069,13 +1069,25 @@ mod testing { self, prover::mock::{MockOutputProver, MockSpendProver}, }, - transaction::fees::fixed, + transaction::fees::fixed::FeeRule, }; impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder<'a, P, U> { /// Build the transaction using mocked randomness and proving capabilities. /// DO NOT USE EXCEPT FOR UNIT TESTING. pub fn mock_build(self, rng: R) -> Result> { + #[allow(deprecated)] + self.mock_build_internal(rng, &FeeRule::standard()) + } + + /// Build the transaction using mocked randomness and proving capabilities. + /// DO NOT USE EXCEPT FOR UNIT TESTING. + pub fn mock_build_no_fee(self, rng: R) -> Result> { + #[allow(deprecated)] + self.mock_build_internal(rng, &FeeRule::non_standard(Zatoshis::from_u64(0)?)) + } + + fn mock_build_internal(self, rng: R, fee_rule: &FeeRule) -> Result> { struct FakeCryptoRng(R); impl CryptoRng for FakeCryptoRng {} impl RngCore for FakeCryptoRng { @@ -1096,12 +1108,11 @@ mod testing { } } - #[allow(deprecated)] self.build( FakeCryptoRng(rng), &MockSpendProver, &MockOutputProver, - &fixed::FeeRule::standard(), + fee_rule, ) } } @@ -1440,13 +1451,15 @@ mod tests { .init_issuance_bundle::(iak, asset.clone(), None) .unwrap(); - let issuance_builder = builder.issuance_builder.clone().unwrap(); + let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); + let bundle = binding.issue_bundle().unwrap(); + assert_eq!( - issuance_builder.actions().len(), + bundle.actions().len(), 1, "There should be only one action" ); - let action = issuance_builder.get_action(asset).unwrap(); + let action = bundle.get_action(asset).unwrap(); assert!(action.is_finalized(), "Action should be finalized"); assert_eq!(action.notes().len(), 0, "Action should have zero notes"); } @@ -1469,13 +1482,15 @@ mod tests { ) .unwrap(); - let issuance_builder = builder.issuance_builder.unwrap(); + let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); + let bundle = binding.issue_bundle().unwrap(); + assert_eq!( - issuance_builder.actions().len(), + bundle.actions().len(), 1, "There should be only one action" ); - let action = issuance_builder.get_action(asset).unwrap(); + let action = bundle.get_action(asset).unwrap(); assert_eq!( action.is_finalized(), false, @@ -1510,13 +1525,15 @@ mod tests { .add_recipient::(asset.clone(), address, NoteValue::from_raw(21)) .unwrap(); - let issuance_builder = builder.issuance_builder.unwrap(); + let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); + let bundle = binding.issue_bundle().unwrap(); + assert_eq!( - issuance_builder.actions().len(), + bundle.actions().len(), 1, "There should be only one action" ); - let action = issuance_builder.get_action(asset).unwrap(); + let action = bundle.get_action(asset).unwrap(); assert_eq!( action.is_finalized(), false, @@ -1556,14 +1573,16 @@ mod tests { .add_recipient::(asset2.clone(), address, NoteValue::from_raw(21)) .unwrap(); - let issuance_builder = builder.issuance_builder.unwrap(); + let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); + let bundle = binding.issue_bundle().unwrap(); + assert_eq!( - issuance_builder.actions().len(), + bundle.actions().len(), 2, "There should be 2 actions" ); - let action = issuance_builder.get_action(asset1).unwrap(); + let action = bundle.get_action(asset1).unwrap(); assert_eq!( action.is_finalized(), false, @@ -1580,7 +1599,7 @@ mod tests { "Incorrect notes sum" ); - let action2 = issuance_builder.get_action(asset2).unwrap(); + let action2 = bundle.get_action(asset2).unwrap(); assert_eq!( action2.is_finalized(), false, From 9c51a46b11a257b9c122a8062d17b6b9fb719434 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:38:14 +0200 Subject: [PATCH 79/85] Add test for burn --- zcash_primitives/src/transaction/builder.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 886f96292a..7757d8bd2f 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1144,8 +1144,9 @@ mod tests { use { crate::transaction::fees::zip317::FeeError, orchard::issuance::IssueInfo, - orchard::keys::{FullViewingKey, IssuanceAuthorizingKey, SpendingKey}, + orchard::keys::{FullViewingKey, IssuanceAuthorizingKey, IssuanceValidatingKey, SpendingKey}, orchard::value::NoteValue, + orchard::note::AssetBase, orchard::Address, zcash_protocol::consensus::TestNetwork, zcash_protocol::constants::testnet::COIN_TYPE, @@ -1617,6 +1618,22 @@ mod tests { ); } + #[test] + #[should_panic] + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] + fn fails_on_add_burn_without_input() { + let (mut builder, iak, address) = prepare_zsa_test(); + + let asset = "asset_desc".to_string(); + let asset_base = AssetBase::derive(&IssuanceValidatingKey::from(&iak), &asset); + + builder + .add_burn::(42, asset_base) + .unwrap(); + + builder.mock_build_no_fee(OsRng).unwrap(); + } + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn prepare_zsa_test() -> ( Builder<'static, TestNetwork, ()>, From 6283d336048eb5097c2d7a8d1d72d70cbb2258b6 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:42:03 +0200 Subject: [PATCH 80/85] Fmt --- zcash_primitives/src/transaction/builder.rs | 53 ++++++++----------- .../src/transaction/components/orchard.rs | 2 - 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 7757d8bd2f..ce6fef887e 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1058,10 +1058,6 @@ impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Extensio #[cfg(any(test, feature = "test-dependencies"))] mod testing { - use rand::RngCore; - use rand_core::CryptoRng; - use std::convert::Infallible; - use zcash_protocol::value::Zatoshis; use super::{BuildResult, Builder, Error}; use crate::{ consensus, @@ -1071,6 +1067,10 @@ mod testing { }, transaction::fees::fixed::FeeRule, }; + use rand::RngCore; + use rand_core::CryptoRng; + use std::convert::Infallible; + use zcash_protocol::value::Zatoshis; impl<'a, P: consensus::Parameters, U: sapling::builder::ProverProgress> Builder<'a, P, U> { /// Build the transaction using mocked randomness and proving capabilities. @@ -1082,12 +1082,19 @@ mod testing { /// Build the transaction using mocked randomness and proving capabilities. /// DO NOT USE EXCEPT FOR UNIT TESTING. - pub fn mock_build_no_fee(self, rng: R) -> Result> { + pub fn mock_build_no_fee( + self, + rng: R, + ) -> Result> { #[allow(deprecated)] self.mock_build_internal(rng, &FeeRule::non_standard(Zatoshis::from_u64(0)?)) } - fn mock_build_internal(self, rng: R, fee_rule: &FeeRule) -> Result> { + fn mock_build_internal( + self, + rng: R, + fee_rule: &FeeRule, + ) -> Result> { struct FakeCryptoRng(R); impl CryptoRng for FakeCryptoRng {} impl RngCore for FakeCryptoRng { @@ -1144,9 +1151,11 @@ mod tests { use { crate::transaction::fees::zip317::FeeError, orchard::issuance::IssueInfo, - orchard::keys::{FullViewingKey, IssuanceAuthorizingKey, IssuanceValidatingKey, SpendingKey}, - orchard::value::NoteValue, + orchard::keys::{ + FullViewingKey, IssuanceAuthorizingKey, IssuanceValidatingKey, SpendingKey, + }, orchard::note::AssetBase, + orchard::value::NoteValue, orchard::Address, zcash_protocol::consensus::TestNetwork, zcash_protocol::constants::testnet::COIN_TYPE, @@ -1455,11 +1464,7 @@ mod tests { let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); let bundle = binding.issue_bundle().unwrap(); - assert_eq!( - bundle.actions().len(), - 1, - "There should be only one action" - ); + assert_eq!(bundle.actions().len(), 1, "There should be only one action"); let action = bundle.get_action(asset).unwrap(); assert!(action.is_finalized(), "Action should be finalized"); assert_eq!(action.notes().len(), 0, "Action should have zero notes"); @@ -1486,11 +1491,7 @@ mod tests { let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); let bundle = binding.issue_bundle().unwrap(); - assert_eq!( - bundle.actions().len(), - 1, - "There should be only one action" - ); + assert_eq!(bundle.actions().len(), 1, "There should be only one action"); let action = bundle.get_action(asset).unwrap(); assert_eq!( action.is_finalized(), @@ -1529,11 +1530,7 @@ mod tests { let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); let bundle = binding.issue_bundle().unwrap(); - assert_eq!( - bundle.actions().len(), - 1, - "There should be only one action" - ); + assert_eq!(bundle.actions().len(), 1, "There should be only one action"); let action = bundle.get_action(asset).unwrap(); assert_eq!( action.is_finalized(), @@ -1577,11 +1574,7 @@ mod tests { let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); let bundle = binding.issue_bundle().unwrap(); - assert_eq!( - bundle.actions().len(), - 2, - "There should be 2 actions" - ); + assert_eq!(bundle.actions().len(), 2, "There should be 2 actions"); let action = bundle.get_action(asset1).unwrap(); assert_eq!( @@ -1627,9 +1620,7 @@ mod tests { let asset = "asset_desc".to_string(); let asset_base = AssetBase::derive(&IssuanceValidatingKey::from(&iak), &asset); - builder - .add_burn::(42, asset_base) - .unwrap(); + builder.add_burn::(42, asset_base).unwrap(); builder.mock_build_no_fee(OsRng).unwrap(); } diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 9c2f7b1e55..3b67dc831f 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -48,7 +48,6 @@ impl MapAuth for () { } } - pub trait ReadBurn { fn read_burn(reader: &mut R) -> io::Result>; } @@ -67,7 +66,6 @@ impl ReadBurn for OrchardZSA { } } - /// Reads an [`orchard::Bundle`] from a v6 transaction format. pub fn read_orchard_bundle>( mut reader: R, From 75e3b46dee7ec72a8bfeec880d63559169ae7d4f Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 1 Oct 2024 16:52:22 +0200 Subject: [PATCH 81/85] Simplify upper_bound calculation --- components/zcash_protocol/src/consensus.rs | 30 +++++++++------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/components/zcash_protocol/src/consensus.rs b/components/zcash_protocol/src/consensus.rs index 6f1a23a739..56e41fb738 100644 --- a/components/zcash_protocol/src/consensus.rs +++ b/components/zcash_protocol/src/consensus.rs @@ -703,34 +703,28 @@ impl BranchId { } #[allow(unused_variables)] fn upper_bound(target_height: BlockHeight, params: &P) -> Option { - #[allow(dead_code)] - fn check_bound( - target_height: BlockHeight, - current_upper: Option, - nu: NetworkUpgrade, - params: &P, - ) -> Option { - let nu_height = params.activation_height(nu); - if nu_height.is_some() && nu_height.unwrap() > target_height { - nu_height - } else { - current_upper - } - } - #[allow(unused_mut)] let mut upper = None; #[cfg(zcash_unstable = "nu6")] { - upper = check_bound(target_height, upper, NetworkUpgrade::Nu6, params); + upper = params + .activation_height(NetworkUpgrade::Nu6) + .filter(|&nu_height| nu_height > target_height) + .or(upper); } #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] { - upper = check_bound(target_height, upper, NetworkUpgrade::Nu7, params); + upper = params + .activation_height(NetworkUpgrade::Nu7) + .filter(|&nu_height| nu_height > target_height) + .or(upper); } #[cfg(zcash_unstable = "zfuture")] { - upper = check_bound(target_height, upper, NetworkUpgrade::ZFuture, params); + upper = params + .activation_height(NetworkUpgrade::ZFuture) + .filter(|&nu_height| nu_height > target_height) + .or(upper); } upper } From 4101a961ee38797fe336f7a94e03cc51ef664cae Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 1 Oct 2024 17:11:08 +0200 Subject: [PATCH 82/85] Fix clippy and missing lines --- zcash_primitives/src/transaction/builder.rs | 2 +- zcash_primitives/src/transaction/components/orchard.rs | 8 ++++---- zcash_primitives/src/transaction/mod.rs | 6 ++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index ce6fef887e..1363ed74f8 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -1615,7 +1615,7 @@ mod tests { #[should_panic] #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn fails_on_add_burn_without_input() { - let (mut builder, iak, address) = prepare_zsa_test(); + let (mut builder, iak, _) = prepare_zsa_test(); let asset = "asset_desc".to_string(); let asset_base = AssetBase::derive(&IssuanceValidatingKey::from(&iak), &asset); diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 3b67dc831f..90f967de75 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -62,7 +62,7 @@ impl ReadBurn for OrchardVanilla { // Read burn for OrchardZSA impl ReadBurn for OrchardZSA { fn read_burn(reader: &mut R) -> io::Result> { - Ok(Vector::read(reader, |r| read_burn(r))?) + Vector::read(reader, |r| read_burn(r)) } } @@ -233,19 +233,19 @@ fn read_note_value(mut reader: R) -> io::Result { } pub trait WriteBurn { - fn write_burn(writer: &mut W, burn: &Vec<(AssetBase, NoteValue)>) -> io::Result<()>; + fn write_burn(writer: &mut W, burn: &[(AssetBase, NoteValue)]) -> io::Result<()>; } // OrchardVanilla has no burn to write impl WriteBurn for OrchardVanilla { - fn write_burn(_writer: &mut W, _burn: &Vec<(AssetBase, NoteValue)>) -> io::Result<()> { + fn write_burn(_writer: &mut W, _burn: &[(AssetBase, NoteValue)]) -> io::Result<()> { Ok(()) } } // Write burn for OrchardZSA impl WriteBurn for OrchardZSA { - fn write_burn(writer: &mut W, burn: &Vec<(AssetBase, NoteValue)>) -> io::Result<()> { + fn write_burn(writer: &mut W, burn: &[(AssetBase, NoteValue)]) -> io::Result<()> { Vector::write(writer, burn, |w, (asset, amount)| { w.write_all(&asset.to_bytes())?; w.write_all(&amount.to_bytes())?; diff --git a/zcash_primitives/src/transaction/mod.rs b/zcash_primitives/src/transaction/mod.rs index 73c3423648..6f0bc1c002 100644 --- a/zcash_primitives/src/transaction/mod.rs +++ b/zcash_primitives/src/transaction/mod.rs @@ -558,6 +558,12 @@ impl TransactionData { ) } + #[cfg(not(zcash_unstable = "nu6" /* TODO nu7 */ ))] + fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { + digester.digest_orchard(self.orchard_bundle.as_ref()) + } + + #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] fn digest_orchard>(&self, digester: &D) -> D::OrchardDigest { if self.version.has_orchard_zsa() { digester.digest_orchard_zsa(self.orchard_zsa_bundle.as_ref()) From a0a7d38fa43bd35c48b1822be5612ee92c78883f Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 1 Oct 2024 17:16:17 +0200 Subject: [PATCH 83/85] Simplify imports --- zcash_primitives/src/transaction/sighash_v5.rs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/zcash_primitives/src/transaction/sighash_v5.rs b/zcash_primitives/src/transaction/sighash_v5.rs index 9667db8c23..5cb7eab2c3 100644 --- a/zcash_primitives/src/transaction/sighash_v5.rs +++ b/zcash_primitives/src/transaction/sighash_v5.rs @@ -17,13 +17,11 @@ use crate::transaction::{ }; #[cfg(zcash_unstable = "zfuture")] -use byteorder::WriteBytesExt; - -#[cfg(zcash_unstable = "zfuture")] -use zcash_encoding::{CompactSize, Vector}; - -#[cfg(zcash_unstable = "zfuture")] -use crate::transaction::{components::tze, TzeDigests}; +use { + crate::transaction::{components::tze, TzeDigests}, + byteorder::WriteBytesExt, + zcash_encoding::{CompactSize, Vector}, +}; const ZCASH_TRANSPARENT_INPUT_HASH_PERSONALIZATION: &[u8; 16] = b"Zcash___TxInHash"; const ZCASH_TRANSPARENT_AMOUNTS_HASH_PERSONALIZATION: &[u8; 16] = b"ZTxTrAmountsHash"; From b2d7b183fc6453e84afa5d010f11e603a5737e77 Mon Sep 17 00:00:00 2001 From: alexeykoren <2365507+alexeykoren@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:24:11 +0200 Subject: [PATCH 84/85] PR fixes --- zcash_primitives/src/transaction/builder.rs | 6 +++--- .../src/transaction/components/issuance.rs | 19 ++++++++++++++----- .../src/transaction/components/orchard.rs | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index 1363ed74f8..aff04785e6 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -112,7 +112,7 @@ pub enum Error { /// The builder was constructed with a target height before NU5 activation, but an Orchard /// spend or output was added. OrchardBundleNotAvailable, - /// The issuance bundle not initialized. + /// The issuance bundle not initialized. #[cfg(zcash_unstable = "nu6" /* TODO nu7 */ )] IssuanceBuilderNotAvailable, /// An error occurred in constructing the Issuance bundle. @@ -1461,8 +1461,8 @@ mod tests { .init_issuance_bundle::(iak, asset.clone(), None) .unwrap(); - let binding = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); - let bundle = binding.issue_bundle().unwrap(); + let tx = builder.mock_build_no_fee(OsRng).unwrap().into_transaction(); + let bundle = tx.issue_bundle().unwrap(); assert_eq!(bundle.actions().len(), 1, "There should be only one action"); let action = bundle.get_action(asset).unwrap(); diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index 14cbfb58bd..a55e7f70ba 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -54,7 +54,16 @@ fn read_action(mut reader: R) -> io::Result { let asset_descr: String = String::from_utf8(asset_descr_bytes) .map_err(|_| Error::new(ErrorKind::InvalidData, "Asset Description not valid UTF-8"))?; let notes = Vector::read(&mut reader, |r| read_note(r))?; - let finalize = reader.read_u8()? != 0; + let finalize = match reader.read_u8()? { + 0 => false, + 1 => true, + _ => { + return Err(Error::new( + ErrorKind::InvalidData, + "Invalid value for finalize", + )) + } + }; Ok(IssueAction::from_parts(asset_descr, notes, finalize)) } @@ -113,7 +122,7 @@ pub fn write_v6_bundle( ) -> io::Result<()> { if let Some(bundle) = bundle { Vector::write_nonempty(&mut writer, bundle.actions(), |w, action| { - write_action(action, w) + write_action(w, action) })?; writer.write_all(&bundle.ik().to_bytes())?; writer.write_all(&<[u8; 64]>::from(bundle.authorization().signature()))?; @@ -123,16 +132,16 @@ pub fn write_v6_bundle( Ok(()) } -fn write_action(action: &IssueAction, mut writer: W) -> io::Result<()> { +fn write_action(mut writer: &mut W, action: &IssueAction) -> io::Result<()> { Vector::write(&mut writer, action.asset_desc().as_bytes(), |w, b| { w.write_u8(*b) })?; - Vector::write(&mut writer, action.notes(), |w, note| write_note(note, w))?; + Vector::write(&mut writer, action.notes(), write_note)?; writer.write_u8(action.is_finalized() as u8)?; Ok(()) } -pub fn write_note(note: &Note, writer: &mut W) -> io::Result<()> { +pub fn write_note(writer: &mut W, note: &Note) -> io::Result<()> { writer.write_all(¬e.recipient().to_raw_address_bytes())?; writer.write_u64::(note.value().inner())?; writer.write_all(¬e.asset().to_bytes())?; diff --git a/zcash_primitives/src/transaction/components/orchard.rs b/zcash_primitives/src/transaction/components/orchard.rs index 90f967de75..e9623e68c1 100644 --- a/zcash_primitives/src/transaction/components/orchard.rs +++ b/zcash_primitives/src/transaction/components/orchard.rs @@ -255,7 +255,7 @@ impl WriteBurn for OrchardZSA { } } -/// Writes an [`orchard::Bundle`] in the v6 transaction format. +/// Writes an [`orchard::Bundle`] in the appropriate transaction format. pub fn write_orchard_bundle>( bundle: Option<&orchard::Bundle>, mut writer: W, From 798630ac5fda0a2425bf21dd30784d0adaf52d54 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 10 Oct 2024 11:25:16 +0300 Subject: [PATCH 85/85] updated syntax --- zcash_primitives/src/transaction/components/issuance.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/zcash_primitives/src/transaction/components/issuance.rs b/zcash_primitives/src/transaction/components/issuance.rs index a55e7f70ba..d227be7bb6 100644 --- a/zcash_primitives/src/transaction/components/issuance.rs +++ b/zcash_primitives/src/transaction/components/issuance.rs @@ -121,9 +121,7 @@ pub fn write_v6_bundle( mut writer: W, ) -> io::Result<()> { if let Some(bundle) = bundle { - Vector::write_nonempty(&mut writer, bundle.actions(), |w, action| { - write_action(w, action) - })?; + Vector::write_nonempty(&mut writer, bundle.actions(), write_action)?; writer.write_all(&bundle.ik().to_bytes())?; writer.write_all(&<[u8; 64]>::from(bundle.authorization().signature()))?; } else {