diff --git a/data/src/components/vector.rs b/data/src/components/vector.rs index 0826131a99c..70414574402 100644 --- a/data/src/components/vector.rs +++ b/data/src/components/vector.rs @@ -127,12 +127,14 @@ impl Vector { impl Index for Vector { type Output = T; + #[inline(always)] fn index(&self, idx: usize) -> &T { M::index(self, idx) } } impl IndexMut for Vector { + #[inline(always)] fn index_mut(&mut self, idx: usize) -> &mut T { M::index_mut(self, idx) } @@ -434,6 +436,7 @@ impl VectorMode for Normal { Vector { vector } } + #[inline(always)] fn index(this: &Vector, idx: usize) -> &T { &this.vector[idx] } @@ -448,6 +451,7 @@ impl VectorMode for Normal { unsafe { this.vector.get_unchecked_mut(idx) } } + #[inline(always)] fn index_mut(this: &mut Vector, idx: usize) -> &mut T { &mut this.vector[idx] } diff --git a/pvm/src/instruction_context.rs b/pvm/src/instruction_context.rs index ee31119589f..a6a4d4ca829 100644 --- a/pvm/src/instruction_context.rs +++ b/pvm/src/instruction_context.rs @@ -15,6 +15,7 @@ use arithmetic::Arithmetic; use comparable::Comparable; use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use rustc_apfloat::Float; use rustc_apfloat::Status; use rustc_apfloat::StatusAnd; @@ -248,7 +249,7 @@ where fn csr_write(&mut self, reg: CSRegister, value: Self::XValue); } -impl ICB for MachineCoreState { +impl ICB for MachineCoreState { type XValue = XValue; type FValue = FValue; diff --git a/pvm/src/interpreter/common_memory.rs b/pvm/src/interpreter/common_memory.rs index 2da600bda90..e0b04d186db 100644 --- a/pvm/src/interpreter/common_memory.rs +++ b/pvm/src/interpreter/common_memory.rs @@ -5,6 +5,7 @@ use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::serialisation::elem::Elem; use crate::exceptions::Exception; @@ -17,7 +18,7 @@ use crate::machine_state::registers::XRegister; impl MachineCoreState where MC: memory::MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { /// Generic read function for loading `T::STORED_SIZE` bytes from `address` pub(super) fn read_from_address(&mut self, address: u64) -> Result { diff --git a/pvm/src/interpreter/rv64d.rs b/pvm/src/interpreter/rv64d.rs index 7c45642f30b..ed3606cca2d 100644 --- a/pvm/src/interpreter/rv64d.rs +++ b/pvm/src/interpreter/rv64d.rs @@ -8,6 +8,7 @@ use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use rustc_apfloat::Float; use rustc_apfloat::Status; use rustc_apfloat::StatusAnd; @@ -343,7 +344,7 @@ where impl MachineCoreState where MC: memory::MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { /// `FLD` I-type instruction. /// diff --git a/pvm/src/interpreter/rv64f.rs b/pvm/src/interpreter/rv64f.rs index 8baabbaf29b..5d62b888020 100644 --- a/pvm/src/interpreter/rv64f.rs +++ b/pvm/src/interpreter/rv64f.rs @@ -8,6 +8,7 @@ use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use rustc_apfloat::Float; use rustc_apfloat::Status; use rustc_apfloat::StatusAnd; @@ -352,7 +353,7 @@ where impl MachineCoreState where MC: memory::MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { /// `FLW` I-type instruction. /// diff --git a/pvm/src/machine_state.rs b/pvm/src/machine_state.rs index 420ab7911ba..778a02761d6 100644 --- a/pvm/src/machine_state.rs +++ b/pvm/src/machine_state.rs @@ -38,6 +38,9 @@ use octez_riscv_data::components::atom::EncodeAtomMode; use octez_riscv_data::components::data_space::CloneDataSpaceMode; use octez_riscv_data::components::data_space::DataSpaceMode; use octez_riscv_data::components::data_space::EncodeDataSpaceMode; +use octez_riscv_data::components::vector::CloneVectorMode; +use octez_riscv_data::components::vector::EncodeVectorMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::foldable::Fold; use octez_riscv_data::foldable::Foldable; use octez_riscv_data::foldable::NodeFold; @@ -105,7 +108,7 @@ impl MachineCoreState { /// Reset the machine state. pub fn reset(&mut self, listener: impl MemoryGovernanceListener) where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { self.hart.reset(memory::FIRST_ADDRESS); self.main_memory.reset(listener); @@ -119,7 +122,7 @@ impl MachineCoreState { phys_addr: Address, ) -> Result, Exception> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { self.main_memory .read_exec(phys_addr) @@ -132,7 +135,7 @@ impl MachineCoreState { #[inline] fn fetch_instr(&self, addr: Address) -> Result, Exception> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let lower = self.fetch_instr_halfword(addr)?; @@ -229,7 +232,9 @@ where pub const RISCV_ABI_SP_ALIGNMENT: NonZeroU64 = NonZeroU64::new(16).expect("Alignment must be non-zero"); -impl Default for MachineCoreState { +impl Default + for MachineCoreState +{ fn default() -> Self { Self { hart: HartState::default(), @@ -251,7 +256,7 @@ impl<'normal, MC: memory::MemoryConfig> Provable<'normal> for MachineCoreState Clone +impl Clone for MachineCoreState { fn clone(&self) -> Self { @@ -263,7 +268,7 @@ impl Clone } } -impl CloneState +impl CloneState for MachineCoreState { fn clone_state(&self) -> Self { @@ -275,7 +280,7 @@ impl CloneState } } -impl Encode +impl Encode for MachineCoreState { fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { @@ -307,8 +312,11 @@ pub struct MachineState { pub page_cache: PC, } -impl, M: CloneAtomMode + CloneDataSpaceMode> Clone - for MachineState +impl< + MC: memory::MemoryConfig, + PC: PageCache, + M: CloneAtomMode + CloneVectorMode + CloneDataSpaceMode, +> Clone for MachineState { // TODO: RV-806: implement Clone on PageCache fn clone(&self) -> Self { @@ -332,8 +340,11 @@ impl<'normal, MC: memory::MemoryConfig, PC: PageCache> Provable<'nor } } -impl, M: CloneAtomMode + CloneDataSpaceMode> - CloneState for MachineState +impl< + MC: memory::MemoryConfig, + PC: PageCache, + M: CloneAtomMode + CloneVectorMode + CloneDataSpaceMode, +> CloneState for MachineState { fn clone_state(&self) -> Self { Self { @@ -378,7 +389,7 @@ impl Encode for MachineState where MC: MemoryConfig, PC: PageCache, - M: EncodeAtomMode + EncodeDataSpaceMode, + M: EncodeAtomMode + EncodeDataSpaceMode + EncodeVectorMode, { fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { self.core.encode(encoder) @@ -468,8 +479,8 @@ impl Default for StepManyResult { } } -impl, M: AtomMode + DataSpaceMode> Default - for MachineState +impl, M: AtomMode + DataSpaceMode + VectorMode> + Default for MachineState { fn default() -> Self { Self { @@ -483,7 +494,7 @@ impl, M: Mode> MachineState, M: Mode> MachineState Result, Exception> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let memory::InstructionData { data: instr, @@ -531,7 +542,7 @@ impl, M: Mode> MachineState Result<(), Exception> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { match self.step_max_inner(1).error { Some(error) => Err(error), @@ -541,7 +552,7 @@ impl, M: Mode> MachineState StepManyResult where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let mut result = StepManyResult::ZERO; @@ -583,7 +594,7 @@ impl, M: Mode> MachineState) -> StepManyResult where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let mut result = StepManyResult::ZERO; @@ -614,7 +625,7 @@ impl, M: Mode> MachineState ControlFlow, ) -> StepManyResult where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let mut steps = 0usize; @@ -652,7 +663,7 @@ impl, M: Mode> MachineState ControlFlow, ) -> ControlFlow where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { match cause { Exception::EnvCall => return handle(self), @@ -701,7 +712,7 @@ impl, M: Mode> MachineState ControlFlow, ) -> ControlFlow where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let instr_pc = self.core.hart.pc.read(); let result = self @@ -740,7 +751,7 @@ impl, M: Mode> MachineState, ) -> Result<(Address, Address), MachineError> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let program_start = program.segments.keys().min().copied().unwrap_or(0); let program_end = program @@ -797,7 +808,7 @@ impl, M: Mode> MachineState, M: Mode> MachineState, MC: MemoryConfig = memory::state::MemoryImpl>, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let (main_memory, listener) = self.memory_with_listener(); main_memory.set_all_readable_writeable(listener); diff --git a/pvm/src/machine_state/instruction.rs b/pvm/src/machine_state/instruction.rs index e839512024a..e84301cb440 100644 --- a/pvm/src/machine_state/instruction.rs +++ b/pvm/src/machine_state/instruction.rs @@ -20,6 +20,7 @@ use bincode::Decode; use bincode::Encode; use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use super::MachineCoreState; use super::ProgramCounterUpdate; @@ -339,7 +340,7 @@ impl OpCode { pub(super) fn to_run(self) -> RunInstr where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { match self { Self::X64Add => Args::run_x64_add, @@ -678,7 +679,7 @@ impl Instruction { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { (self.opcode.to_run())(&self.args, core) } @@ -852,7 +853,7 @@ macro_rules! impl_fload_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + VectorMode + DataSpaceMode, { core.$fn(self.imm, self.rs1.x, self.rd.f) .map(|_| Next(self.width)) @@ -893,7 +894,7 @@ macro_rules! impl_fstore_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + VectorMode + DataSpaceMode, { core.$fn(self.imm, self.rs1.x, self.rs2.f) .map(|_| Next(self.width)) @@ -995,7 +996,7 @@ macro_rules! impl_f_x_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + VectorMode + DataSpaceMode, { core.hart.$fn(self.rs1.x, self.rd.f); Ok(Next(self.width)) @@ -1009,7 +1010,7 @@ macro_rules! impl_f_x_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + VectorMode + DataSpaceMode, { core.hart.$fn(self.rs1.x, self.rm, self.rd.f); Ok(Next(self.width)) @@ -1033,7 +1034,7 @@ macro_rules! impl_x_f_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + VectorMode + DataSpaceMode, { core.hart.$fn(self.rs1.f, self.rd.x); Ok(Next(self.width)) @@ -1047,7 +1048,7 @@ macro_rules! impl_x_f_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + VectorMode + DataSpaceMode, { core.hart.$fn(self.rs1.f, self.rm, self.rd.x); Ok(Next(self.width)) @@ -1063,7 +1064,7 @@ macro_rules! impl_f_r_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode + M: AtomMode + VectorMode + DataSpaceMode { core.hart.$fn(self.rs1.f, self.rs2.f, self.rd.f); Ok(Next(self.width)) @@ -1077,7 +1078,7 @@ macro_rules! impl_f_r_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode + M: AtomMode + VectorMode + DataSpaceMode { core.hart.$fn(self.rs1.f, self.rs2.f, self.rd.x); Ok(Next(self.width)) @@ -1091,7 +1092,7 @@ macro_rules! impl_f_r_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode + M: AtomMode + VectorMode + DataSpaceMode { core.hart.$fn(self.rs1.f, self.rm, self.rd.f); Ok(Next(self.width)) @@ -1105,7 +1106,7 @@ macro_rules! impl_f_r_type { ) -> Result, Exception> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode + M: AtomMode + VectorMode + DataSpaceMode { core.hart.$fn(self.rs1.f, self.rs2.f, $(self.$field,)* self.rd.f); Ok(Next(self.width)) diff --git a/pvm/src/machine_state/memory.rs b/pvm/src/machine_state/memory.rs index daf7b6d3ff3..319e8cb32a0 100644 --- a/pvm/src/machine_state/memory.rs +++ b/pvm/src/machine_state/memory.rs @@ -20,6 +20,9 @@ use octez_riscv_data::components::atom::EncodeAtomMode; use octez_riscv_data::components::data_space::CloneDataSpaceMode; use octez_riscv_data::components::data_space::DataSpaceMode; use octez_riscv_data::components::data_space::EncodeDataSpaceMode; +use octez_riscv_data::components::vector::CloneVectorMode; +use octez_riscv_data::components::vector::EncodeVectorMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::merkle_proof; use octez_riscv_data::mode::Mode; use octez_riscv_data::mode::Normal; @@ -218,47 +221,47 @@ pub trait Memory: Sized { /// Create a new memory instance. fn default() -> Self where - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Read an element in the region. `address` is in bytes. fn read(&self, address: Address) -> Result where E: Elem, - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Read an element in the region that will be used in execution. `address` is in bytes. fn read_exec(&self, address: Address) -> Result, BadMemoryAccess> where E: Elem, - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Read elements from the region. `address` is in bytes. fn read_all(&self, address: Address, values: &mut [E]) -> Result<(), BadMemoryAccess> where E: Elem, - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Update an element in the region. `address` is in bytes. fn write(&mut self, address: Address, value: E) -> Result<(), BadMemoryAccess> where E: Elem, - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Update multiple elements in the region. `address` is in bytes. fn write_all(&mut self, address: Address, values: &[E]) -> Result<(), BadMemoryAccess> where E: Elem + Copy, - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Clone the persistent memory state. fn clone_state(&self) -> Self where - M: CloneAtomMode + CloneDataSpaceMode; + M: CloneAtomMode + CloneVectorMode + CloneDataSpaceMode; /// Zero-out all memory. fn reset(&mut self, listener: impl MemoryGovernanceListener) where - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Protect the pages that belong to the given address range. fn protect_pages( @@ -269,7 +272,7 @@ pub trait Memory: Sized { listener: impl MemoryGovernanceListener, ) -> Result<(), MemoryGovernanceError> where - M: AtomMode; + M: AtomMode + VectorMode; /// Allocate pages for the given address range. fn allocate_pages( @@ -300,7 +303,7 @@ pub trait Memory: Sized { listener: impl MemoryGovernanceListener, ) -> Result where - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Free the pages in that address range and make sure the range is no longer accessible. fn deallocate_and_protect_pages( @@ -310,7 +313,7 @@ pub trait Memory: Sized { listener: impl MemoryGovernanceListener, ) -> Result<(), MemoryGovernanceError> where - M: AtomMode, + M: AtomMode + VectorMode, { self.deallocate_pages(address, length)?; self.protect_pages(address, length, Permissions::NONE, listener) @@ -319,7 +322,7 @@ pub trait Memory: Sized { /// Serialise the memory state. fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> where - M: EncodeAtomMode + EncodeDataSpaceMode; + M: EncodeAtomMode + EncodeDataSpaceMode + EncodeVectorMode; } /// Memory configuration diff --git a/pvm/src/machine_state/memory/protection.rs b/pvm/src/machine_state/memory/protection.rs index ab384ba1464..6d0e0fff182 100644 --- a/pvm/src/machine_state/memory/protection.rs +++ b/pvm/src/machine_state/memory/protection.rs @@ -2,7 +2,6 @@ // // SPDX-License-Identifier: MIT -use std::ops::Index; use std::ops::RangeInclusive; use bincode::Decode; @@ -16,10 +15,12 @@ use octez_riscv_data::components::atom::Atom; use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::atom::CloneAtomMode; use octez_riscv_data::components::atom::EncodeAtomMode; +use octez_riscv_data::components::vector::CloneVectorMode; +use octez_riscv_data::components::vector::EncodeVectorMode; +use octez_riscv_data::components::vector::Vector; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::foldable::Fold; use octez_riscv_data::foldable::Foldable; -use octez_riscv_data::foldable::seq_tree::IndexableSeqAsTree; -use octez_riscv_data::foldable::seq_tree::Many; use octez_riscv_data::merkle_proof::Deserialiser; use octez_riscv_data::merkle_proof::FromProof; use octez_riscv_data::merkle_proof::Suspended; @@ -33,30 +34,38 @@ use perfect_derive::perfect_derive; use super::Address; use super::address_to_page_index; -use crate::array_utils::boxed_from_fn; use crate::state_backend::NarrowlySized; -use crate::state_backend::proof_backend::merkle::MERKLE_ARITY; /// Tracks access permissions for each page #[perfect_derive(Clone, PartialEq, Eq)] -pub struct PagePermissions { - pages: Box<[Atom; PAGES]>, +pub struct PagePermissions { + pages: Vector, M>, } -impl PagePermissions { +impl PagePermissions { + /// Create a new [`PagePermissions`] with `pages` as the number of pages. + pub fn new(pages: usize) -> Self + where + M: AtomMode + VectorMode, + { + let values = (0..pages).map(|_| Atom::new(false)).collect(); + let pages = Vector::new(values); + Self { pages } + } + /// Check if the memory at `address..address+length` can be accessed. /// /// # Safety /// - /// The address and length must be valid for an address space consisting of a number of `PAGES`. + /// The address and length must be valid for an address space consisting of a number of `pages`. /// This function is not defined for address and length combinations which are out of bounds. #[inline] pub unsafe fn can_access(&self, pages: RangeInclusive) -> bool where - M: AtomMode, + M: AtomMode + VectorMode, { for page in pages { - if unsafe { !self.pages.get_unchecked(page as usize).read() } { + if unsafe { !self.pages.index_unchecked(page as usize).read() } { return false; } } @@ -76,10 +85,10 @@ impl PagePermissions { pub unsafe fn can_access_narrow(&self, address: Address) -> bool where E: NarrowlySized, - M: AtomMode, + M: AtomMode + VectorMode, { let start_page = address_to_page_index(address); - if unsafe { !self.pages.get_unchecked(start_page).read() } { + if unsafe { !self.pages.index_unchecked(start_page).read() } { return false; } @@ -88,53 +97,46 @@ impl PagePermissions { .wrapping_sub(1); let end_page = address_to_page_index(end_address); - unsafe { self.pages.get_unchecked(end_page).read() } + unsafe { self.pages.index_unchecked(end_page).read() } } /// Change the access permissions for the given range. pub fn modify_access(&mut self, pages: RangeInclusive, accessible: bool) where - M: AtomMode, + M: AtomMode + VectorMode, { - pages.filter(|&page| page < PAGES as u64).for_each(|page| { + let len_pages = self.pages.len() as u64; + + for page in pages { + if page >= len_pages { + break; + } + self.pages[page as usize].write(accessible); - }) + } } /// Reset access permissions on all pages. pub fn reset(&mut self) where - M: AtomMode, + M: AtomMode + VectorMode, { - self.pages.iter_mut().for_each(|page| page.write(false)); + for page in 0..self.pages.len() { + self.pages[page].write(false); + } } } -impl<'normal, const PAGES: usize> Provable<'normal> for PagePermissions { - type Prover = PagePermissions>; +impl<'normal> Provable<'normal> for PagePermissions { + type Prover = PagePermissions>; fn start_proof(&'normal self) -> Self::Prover { - let pages = self - .pages - .iter() - .map(Atom::start_proof) - .collect::>() - .try_into() - .expect("Collecting into an array of the same length should always succeed"); - + let pages = self.pages.start_proof(); PagePermissions { pages } } } -impl Default for PagePermissions { - fn default() -> Self { - PagePermissions { - pages: boxed_from_fn(Atom::default), - } - } -} - -impl CloneState for PagePermissions { +impl CloneState for PagePermissions { fn clone_state(&self) -> Self { Self { pages: self.pages.clone_state(), @@ -142,36 +144,32 @@ impl CloneState for PagePermissions Decode for PagePermissions { +impl Decode for PagePermissions { fn decode>(decoder: &mut D) -> Result { let pages = Decode::decode(decoder)?; Ok(Self { pages }) } } -impl Encode for PagePermissions { +impl Encode for PagePermissions { fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { self.pages.encode(encoder) } } -impl Foldable for PagePermissions +impl Foldable for PagePermissions where M: Mode, F: Fold, - Atom: Foldable, + Vector, M>: Foldable, { fn fold(&self, builder: F) -> F::Folded { - let page_generator = |idx| self.pages.index(idx); - IndexableSeqAsTree::new(PAGES, MERKLE_ARITY, &page_generator).fold(builder) + self.pages.fold(builder) } } -impl FromProof for PagePermissions { + +impl FromProof for PagePermissions { fn from_proof(proof: D) -> SuspendedResult { - let result = Many::<_, MERKLE_ARITY, PAGES>::from_proof(proof)?; - let result = result.map(|pages| Self { - pages: pages.into_boxed_array(), - }); - Ok(result) + Vector::from_proof(proof).map(|result| result.map(|pages| Self { pages })) } } diff --git a/pvm/src/machine_state/memory/state.rs b/pvm/src/machine_state/memory/state.rs index fc7f8e46347..4c74220938c 100644 --- a/pvm/src/machine_state/memory/state.rs +++ b/pvm/src/machine_state/memory/state.rs @@ -19,6 +19,9 @@ use octez_riscv_data::components::data_space::CloneDataSpaceMode; use octez_riscv_data::components::data_space::DataSpace; use octez_riscv_data::components::data_space::DataSpaceMode; use octez_riscv_data::components::data_space::EncodeDataSpaceMode; +use octez_riscv_data::components::vector::CloneVectorMode; +use octez_riscv_data::components::vector::EncodeVectorMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::foldable::Fold; use octez_riscv_data::foldable::Foldable; use octez_riscv_data::foldable::NodeFold; @@ -47,13 +50,13 @@ pub struct MemoryImpl pub(super) data: DataSpace, /// Read permissions per page - pub(super) readable_pages: PagePermissions, + pub(super) readable_pages: PagePermissions, /// Write permissions per page - pub(super) writable_pages: PagePermissions, + pub(super) writable_pages: PagePermissions, /// Execute permissions per page - pub(super) executable_pages: PagePermissions, + pub(super) executable_pages: PagePermissions, /// Allocation tracker pub(super) allocated_pages: B, @@ -77,7 +80,7 @@ impl pub(crate) fn set_all_readable_writeable(&mut self, listener: impl MemoryGovernanceListener) where B: Buddy, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let length = NonZeroUsize::new(TOTAL_BYTES).expect("`TOTAL_BYTES` must be greater than zero"); @@ -98,7 +101,7 @@ impl ) -> Result<(), BadMemoryAccess> where E: Elem, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let length = E::STORED_SIZE; @@ -125,13 +128,13 @@ where { fn default() -> Self where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { MemoryImpl { data: DataSpace::new(TOTAL_BYTES), - readable_pages: PagePermissions::default(), - writable_pages: PagePermissions::default(), - executable_pages: PagePermissions::default(), + readable_pages: PagePermissions::new(PAGES), + writable_pages: PagePermissions::new(PAGES), + executable_pages: PagePermissions::new(PAGES), allocated_pages: B::default(), } } @@ -140,7 +143,7 @@ where fn read(&self, address: Address) -> Result where E: Elem, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { Self::check_bounds(address, E::STORED_SIZE, BadMemoryAccess)?; @@ -159,7 +162,7 @@ where fn read_exec(&self, address: Address) -> Result, BadMemoryAccess> where E: Elem, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { Self::check_bounds(address, E::STORED_SIZE, BadMemoryAccess)?; @@ -183,7 +186,7 @@ where fn read_all(&self, address: Address, values: &mut [E]) -> Result<(), BadMemoryAccess> where E: Elem, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let Some(values_len) = NonZeroUsize::new(values.len()) else { // zero-sized reads always valid @@ -211,7 +214,7 @@ where fn write(&mut self, address: Address, value: E) -> Result<(), BadMemoryAccess> where E: Elem, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { Self::check_bounds(address, E::STORED_SIZE, BadMemoryAccess)?; @@ -233,7 +236,7 @@ where fn write_all(&mut self, address: Address, values: &[E]) -> Result<(), BadMemoryAccess> where E: Elem + Copy, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let Some(values_len) = NonZeroUsize::new(values.len()) else { // zero-sized writes always valid @@ -258,7 +261,7 @@ where fn clone_state(&self) -> Self where - M: CloneAtomMode + CloneDataSpaceMode, + M: CloneAtomMode + CloneVectorMode + CloneDataSpaceMode, { Self { data: self.data.clone_state(), @@ -271,7 +274,7 @@ where fn reset(&mut self, mut listener: impl MemoryGovernanceListener) where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { const SIZE_OF_U64: usize = u64::STORED_SIZE.get(); @@ -315,7 +318,7 @@ where mut listener: impl MemoryGovernanceListener, ) -> Result<(), super::MemoryGovernanceError> where - M: AtomMode, + M: AtomMode + VectorMode, { Self::check_bounds(address, length, super::MemoryGovernanceError)?; @@ -397,7 +400,7 @@ where listener: impl MemoryGovernanceListener, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // Mark the page range as occupied let address = self.allocate_pages(address_hint, length, allow_replace)?; @@ -444,7 +447,7 @@ where fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> where - M: EncodeAtomMode + EncodeDataSpaceMode, + M: EncodeAtomMode + EncodeDataSpaceMode + EncodeVectorMode, { Encode::encode(self, encoder) } @@ -457,7 +460,7 @@ where F: Fold, DataSpace: Foldable, B: Foldable, - PagePermissions: Foldable, + PagePermissions: Foldable, { fn fold(&self, builder: F) -> F::Folded { let mut builder = builder.into_node_fold(); @@ -476,7 +479,7 @@ where M: Mode, B: Unfoldable, DataSpace: Unfoldable, - PagePermissions: Unfoldable, + PagePermissions: Unfoldable, { fn unfold(source: U) -> Result { let mut source = source.into_node()?; @@ -501,7 +504,7 @@ impl< const PAGES: usize, const TOTAL_BYTES: usize, B: Buddy, - M: EncodeAtomMode + EncodeDataSpaceMode, + M: EncodeAtomMode + EncodeDataSpaceMode + EncodeVectorMode, > Encode for MemoryImpl { fn encode(&self, encoder: &mut E) -> Result<(), EncodeError> { diff --git a/pvm/src/machine_state/page_cache.rs b/pvm/src/machine_state/page_cache.rs index 056d57296f4..983505c31b9 100644 --- a/pvm/src/machine_state/page_cache.rs +++ b/pvm/src/machine_state/page_cache.rs @@ -32,6 +32,7 @@ pub use entrypoint::Entrypoint; pub use interpreted::InterpretedCompiler; use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::mode::Mode; use state::PageCacheImpl; @@ -110,7 +111,7 @@ pub trait PageCache: MemoryGovernanceListener { /// page will contain the code for `addr`. fn get_code_page(&mut self, addr: Address) -> Option> where - M: AtomMode + DataSpaceMode; + M: AtomMode + DataSpaceMode + VectorMode; /// Populate a page with instruction and dispatch information, if the page has R+X permissions only. fn populate_page(&mut self, address: Address, core: &MachineCoreState) @@ -150,7 +151,7 @@ pub(crate) fn run_code_page_interpreted( where I: AsRef, MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let mut result = StepManyResult::ZERO; diff --git a/pvm/src/pvm/common.rs b/pvm/src/pvm/common.rs index f33e61f46ba..258927039e2 100644 --- a/pvm/src/pvm/common.rs +++ b/pvm/src/pvm/common.rs @@ -211,7 +211,7 @@ impl, DS: DurableStorage, M: Mode> Pvm /// Provide input. Returns `false` if the machine state is not expecting input. pub(crate) fn provide_input(&mut self, input: PvmInput) -> bool where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // TODO RV-615: Remove `as u32` conversion match input { @@ -228,7 +228,7 @@ impl, DS: DurableStorage, M: Mode> Pvm /// expecting a message. pub(crate) fn provide_inbox_message(&mut self, level: u32, counter: u32, payload: &[u8]) -> bool where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { if !tezos::provide_input( &mut self.status, @@ -252,7 +252,7 @@ impl, DS: DurableStorage, M: Mode> Pvm /// Returns `false` if the machine is not expecting a reveal. pub(crate) fn provide_reveal_response(&mut self, reveal_data: &[u8]) -> bool where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { if !tezos::provide_reveal_response( &mut self.status, @@ -279,7 +279,7 @@ impl, DS: DurableStorage, M: Mode> Pvm /// Provide a reveal error response to the PVM pub fn provide_reveal_error_response(&mut self) where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { self.machine_state .core diff --git a/pvm/src/pvm/linux.rs b/pvm/src/pvm/linux.rs index 58bfcfe56c2..517c984dc2c 100644 --- a/pvm/src/pvm/linux.rs +++ b/pvm/src/pvm/linux.rs @@ -29,6 +29,7 @@ use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::atom::CloneAtomMode; use octez_riscv_data::components::atom::EncodeAtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::foldable::Fold; use octez_riscv_data::foldable::Foldable; use octez_riscv_data::foldable::NodeFold; @@ -191,7 +192,7 @@ impl, M: Mode> MachineState { /// Add data to the stack, returning the updated stack pointer. fn push_stack(&mut self, align: u64, data: impl AsRef<[u8]>) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let data = data.as_ref(); @@ -217,7 +218,7 @@ impl, M: Mode> MachineState { auxv: &[(AuxVectorKey, u64)], ) -> Result<(), MachineError> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // First we push all constants so that they are at the top of the stack let arg_ptrs = args @@ -271,7 +272,7 @@ where /// Load the program into memory and set the PC to its entrypoint. fn load_program(&mut self, program: &Program) -> Result<(), MachineError> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // Reset hart state & set pc to entrypoint self.machine_state.core.hart.reset(program.entrypoint); @@ -292,7 +293,7 @@ where /// Configure the stack for a new process. fn prepare_stack(&mut self) -> Result<(), MachineError> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let stack_top = VirtAddr::new(MC::TOTAL_BYTES.get() as u64); @@ -356,7 +357,7 @@ where /// Install a Linux program and configure the Hart to start it. pub fn setup_linux_process(&mut self, program: &Program) -> Result<(), MachineError> where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { self.load_program(program)?; @@ -470,7 +471,7 @@ impl SupervisorState { where MC: MemoryConfig, PC: PageCache, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let pc = machine.core.hart.pc.read(); @@ -841,7 +842,7 @@ impl SupervisorState { tp: u64, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // Size of struct timespec (8 bytes for tv_sec + 8 bytes for tv_nsec) const TIMESPEC_SIZE: usize = 16; @@ -868,7 +869,7 @@ impl SupervisorState { mask: VirtAddr, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { const SINGLE_PROCESS_PID_AFFINITY: u8 = 0b1_u8; @@ -898,7 +899,7 @@ impl SupervisorState { tz: u64, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // Size of struct timeval (8 bytes for tv_sec + 8 bytes for tv_usec) const TIMEVAL_SIZE: usize = 16; @@ -932,7 +933,7 @@ impl SupervisorState { old_limit: VirtAddr, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // In jstz this is only used to set the maximum size of the process stack to infinity. In // other programs, it can be used to set limits for system resources. Allowing programs to @@ -1137,7 +1138,7 @@ mod tests { fn default_on_tezos_handler(core: &mut MachineCoreState) -> ControlFlow<()> where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { core.hart .xregisters diff --git a/pvm/src/pvm/linux/fds.rs b/pvm/src/pvm/linux/fds.rs index 337b2052785..be683d28938 100644 --- a/pvm/src/pvm/linux/fds.rs +++ b/pvm/src/pvm/linux/fds.rs @@ -6,6 +6,7 @@ use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::mode::Mode; use super::SupervisorState; @@ -47,7 +48,7 @@ impl SupervisorState { length: u64, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // Limit how much data we can write to prevent proof-size explosion let length = length.min(PAGE_SIZE.get()); @@ -79,7 +80,7 @@ impl SupervisorState { length: u64, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // `write` takes an unsigned int as the first parameter, which is then converted to a FileDescriptorWriteable self.write_to_fd(core, hooks, fd, addr, length) @@ -98,7 +99,7 @@ impl SupervisorState { len: u64, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // `writev` takes an unsigned long as the first parameter @@ -166,7 +167,7 @@ impl SupervisorState { num_fds: parameters::FileDescriptorCount, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // The file descriptors are passed as `struct pollfd[]`. // diff --git a/pvm/src/pvm/linux/fs.rs b/pvm/src/pvm/linux/fs.rs index f6b68455090..bedc8575ca3 100644 --- a/pvm/src/pvm/linux/fs.rs +++ b/pvm/src/pvm/linux/fs.rs @@ -6,6 +6,7 @@ use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::mode::Mode; use super::SupervisorState; @@ -82,7 +83,7 @@ impl SupervisorState { length: u64, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { const CWD: &[u8] = c"/".to_bytes_with_nul(); diff --git a/pvm/src/pvm/linux/memory.rs b/pvm/src/pvm/linux/memory.rs index 88e0d6564c7..de014d55b62 100644 --- a/pvm/src/pvm/linux/memory.rs +++ b/pvm/src/pvm/linux/memory.rs @@ -20,6 +20,7 @@ use std::num::NonZeroUsize; use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::mode::Mode; use super::SupervisorState; @@ -87,7 +88,7 @@ impl SupervisorState { where MC: MemoryConfig, PC: PageCache, - M: AtomMode, + M: AtomMode + VectorMode, { if let Some(length) = NonZeroUsize::new(length as usize) { let (main_memory, listener) = state.memory_with_listener(); @@ -119,7 +120,7 @@ impl SupervisorState { where MC: MemoryConfig, PC: PageCache, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // We don't allow shared mappings match flags.visibility { @@ -177,7 +178,7 @@ impl SupervisorState { where MC: MemoryConfig, PC: PageCache, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // TODO: RV-561: use u64 everywhere in the PVM let length: NonZeroUsize = length.try_into().expect("expect length to fit into usize"); diff --git a/pvm/src/pvm/linux/rng.rs b/pvm/src/pvm/linux/rng.rs index b7bead7ba13..629e54cecb0 100644 --- a/pvm/src/pvm/linux/rng.rs +++ b/pvm/src/pvm/linux/rng.rs @@ -4,6 +4,7 @@ use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::mode::Mode; use super::SupervisorState; @@ -26,7 +27,7 @@ impl SupervisorState { length: u64, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let actual_length = length.min(RANDOM.len() as u64); let data = &RANDOM[..actual_length as usize]; diff --git a/pvm/src/pvm/linux/signals.rs b/pvm/src/pvm/linux/signals.rs index f9f68544108..465fb836e0e 100644 --- a/pvm/src/pvm/linux/signals.rs +++ b/pvm/src/pvm/linux/signals.rs @@ -21,6 +21,7 @@ use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::atom::CloneAtomMode; use octez_riscv_data::components::atom::EncodeAtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use octez_riscv_data::foldable::Fold; use octez_riscv_data::foldable::Foldable; use octez_riscv_data::foldable::NodeFold; @@ -298,7 +299,7 @@ impl Decode for SignalActions { } } -impl MachineCoreState { +impl MachineCoreState { /// Set the hart state to a signal handler pub fn dispatch_signal(&mut self, signal: Signal) -> Result<(), SignalError> { let handler = self.signal_actions.read_action(signal); @@ -688,7 +689,7 @@ impl SupervisorState { old: SignalActionPtr, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { /// `sizeof(struct sigaltstack)` on the Kernel side const SIZE_SIGALTSTACK: usize = 24; @@ -713,7 +714,7 @@ impl SupervisorState { _: SigsetTSizeEightBytes, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { if let Some(old) = old.address() { let old_action = core.signal_action(signal); @@ -742,7 +743,7 @@ impl SupervisorState { _: SigsetTSizeEightBytes, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let old_mask = core.signal_actions.thread_mask.read(); @@ -775,7 +776,7 @@ impl SupervisorState { core: &mut MachineCoreState, ) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let pc = core.pop_signal_context().map_err(|_| Error::Fault)?; Ok(SystemCallResultExecution { @@ -802,7 +803,7 @@ where /// functions that are dynamically written to memory by the kernel when a process is loaded. pub fn write_restorer(&mut self, address: VirtAddr) -> Result where - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // Encoding to write RT_SIGRETURN to a7 // ADDI imm=RT_SIGRETURN, rs1=x0, funct3=0, rd=a7 diff --git a/pvm/src/pvm/tezos.rs b/pvm/src/pvm/tezos.rs index e5ef00da76c..ce5a555dbcf 100644 --- a/pvm/src/pvm/tezos.rs +++ b/pvm/src/pvm/tezos.rs @@ -96,7 +96,7 @@ pub fn provide_input( ) -> bool where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // This method should only do something when we're waiting for input. match status.read() { @@ -145,7 +145,7 @@ pub fn provide_reveal_response( ) -> bool where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { // This method should only do something when we're waiting for reveal. if status.read() != PvmStatus::WaitingForReveal { @@ -219,7 +219,7 @@ fn handle_tezos_write_output( fn handle_tezos_ed25519_sign(machine: &mut MachineCoreState) -> Result where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let arg_sk_addr = machine.hart.xregisters.read(a0); let arg_msg_addr = machine.hart.xregisters.read(a1); @@ -248,7 +248,7 @@ fn handle_tezos_ed25519_verify( ) -> Result where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let arg_pk_addr = machine.hart.xregisters.read(a0); let arg_sig_addr = machine.hart.xregisters.read(a1); @@ -278,7 +278,7 @@ fn handle_tezos_blake2b_hash256( ) -> Result where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let arg_out_addr = machine.hart.xregisters.read(a0); let arg_msg_addr = machine.hart.xregisters.read(a1); @@ -302,7 +302,7 @@ fn handle_tezos_secp256k1_verify( ) -> Result where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let arg_pk_addr = machine.hart.xregisters.read(a0); let arg_sig_addr = machine.hart.xregisters.read(a1); @@ -327,7 +327,7 @@ fn handle_tezos_keccak256_hash( ) -> Result where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let arg_out_addr = machine.hart.xregisters.read(a0); let arg_msg_addr = machine.hart.xregisters.read(a1); @@ -353,7 +353,7 @@ fn handle_tezos_reveal( status: &mut Atom, ) where MC: MemoryConfig, - M: AtomMode + DataSpaceMode, + M: AtomMode + DataSpaceMode + VectorMode, { let request_address = machine.hart.xregisters.read(a0); let request_size = machine.hart.xregisters.read(a1) as usize; diff --git a/pvm/src/stepper.rs b/pvm/src/stepper.rs index e7a0d6a3bbe..ee565bdafc4 100644 --- a/pvm/src/stepper.rs +++ b/pvm/src/stepper.rs @@ -7,6 +7,7 @@ use std::ops::Bound; use octez_riscv_data::components::atom::AtomMode; use octez_riscv_data::components::data_space::DataSpaceMode; +use octez_riscv_data::components::vector::VectorMode; use crate::machine_state::MachineCoreState; use crate::machine_state::memory::MemoryConfig; @@ -90,7 +91,7 @@ pub trait Stepper { type MemoryConfig: MemoryConfig; /// State backend with which the stepper was instantiated - type Mode: AtomMode + DataSpaceMode; + type Mode: AtomMode + DataSpaceMode + VectorMode; /// Obtain a reference to the underlying machine state. fn machine_state(&self) -> &MachineCoreState; diff --git a/pvm/tests/expected/dummy-no-std/state_hash_final b/pvm/tests/expected/dummy-no-std/state_hash_final index 8288a0112de..f7ee55ceb5f 100644 --- a/pvm/tests/expected/dummy-no-std/state_hash_final +++ b/pvm/tests/expected/dummy-no-std/state_hash_final @@ -1 +1 @@ -4cf953c0da380f4253278366c9a7ed46ebf0301fda42839b7f3a845719a75609 +6c8b085fa59c0fd1d46ef6c22a711e7d46ca840eaa3bd9b2789898ba606a94d3 diff --git a/pvm/tests/expected/dummy-no-std/state_hash_initial b/pvm/tests/expected/dummy-no-std/state_hash_initial index 8fb2a89a50e..78860f54393 100644 --- a/pvm/tests/expected/dummy-no-std/state_hash_initial +++ b/pvm/tests/expected/dummy-no-std/state_hash_initial @@ -1 +1 @@ -6053a386fadd4eb5a43a6808c775aed2bf5be6a5b2a6e50bf99b59cc40ed7226 +71819d6164fa2a558dfbc5598b7c00d5002bbe27314fd5e3aed5f081ef5a6fe1 diff --git a/pvm/tests/expected/dummy/outbox_proof b/pvm/tests/expected/dummy/outbox_proof index 72296634b58..57a6e5ce13f 100644 --- a/pvm/tests/expected/dummy/outbox_proof +++ b/pvm/tests/expected/dummy/outbox_proof @@ -1 +1 @@ -120000000000000000028c117e23b5bf5c6c204cbeebb2ec5bbd1856c01f085b5e92c0c79d025d7e3b2902af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262000000022f5938466a9b8d1a89e2a34fa9bba9318549e195aa31900c814c92e533f93ae60000000364000000000000000000000003001000000000000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b54026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b54026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b5402c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c02e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c02e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c0235ef1c93c880148d5bb88b4eeb96cdddb7526acd07fec30660eec91e64b7b8af031200000002aacb3b28397d9a56765ef051b2caf639bdb600019c5c215b3b985a3bc9a880a70256bafedf4002254d49177060583d6d8dadd67a2f9243011ad3749fed341de32c021b195b3e52d1400d7a4fd76b447bf0b51ad2fe30afa4bffa1ea73a6f6db3adfb02ce88c99cc00efc09f817ec7232a94d51686b9b40a0fe8dd6dd2cb0f8ea9deb7c021816c416b9fc35a7f23c144e65284d334cfc49a88e9e7f22caaf124d81833db40271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb02d701df1869ad5b18463400ba35cc7649e110010bbc75576b8946031793591cb402ea21c7b3c885cf2fb547bb51016c8bbbaca21db264cc9f332769ad8dd895f0a303011200000002c610e85212d0697cb161d4ba431ba603f273feee7dcb7927c9ff5d74ae6cbfa3 +12000000000000000002c8ba90a905a832581193b371397f9ecb4727534613be52751d0136bda84e644c02af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262000000022f5938466a9b8d1a89e2a34fa9bba9318549e195aa31900c814c92e533f93ae60000000364000000000000000000000003001000000000000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b54026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b54026c3812f50acc5d9f5273abcfeb969230b961e955512ecf4881166b3f4e3d6b5402c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602c9f895d634d4993ed7d6d0e00f59b301f206e6ec71b0a123a204afa60c5209c602e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c02e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c02e099a652c72569e6b9c1c41e3dfba46775b55ae6caac1e890ad18fe0329b7d1c0235ef1c93c880148d5bb88b4eeb96cdddb7526acd07fec30660eec91e64b7b8af031200000002aacb3b28397d9a56765ef051b2caf639bdb600019c5c215b3b985a3bc9a880a70256bafedf4002254d49177060583d6d8dadd67a2f9243011ad3749fed341de32c021b195b3e52d1400d7a4fd76b447bf0b51ad2fe30afa4bffa1ea73a6f6db3adfb02ce88c99cc00efc09f817ec7232a94d51686b9b40a0fe8dd6dd2cb0f8ea9deb7c021816c416b9fc35a7f23c144e65284d334cfc49a88e9e7f22caaf124d81833db40271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb02d701df1869ad5b18463400ba35cc7649e110010bbc75576b8946031793591cb402ea21c7b3c885cf2fb547bb51016c8bbbaca21db264cc9f332769ad8dd895f0a303011200000002c610e85212d0697cb161d4ba431ba603f273feee7dcb7927c9ff5d74ae6cbfa3 diff --git a/pvm/tests/expected/dummy/state_hash_final b/pvm/tests/expected/dummy/state_hash_final index 185eddb2e00..4a4bb3ff1ed 100644 --- a/pvm/tests/expected/dummy/state_hash_final +++ b/pvm/tests/expected/dummy/state_hash_final @@ -1 +1 @@ -4ba3e6a6953f32303f1e2c193c328b18156a77f4a153ffc456e50da986668d3c +773b8ecb48fe53f89161ddf5484b2ea377a1980fdfead32839074a96dbe25568 diff --git a/pvm/tests/expected/dummy/state_hash_initial b/pvm/tests/expected/dummy/state_hash_initial index f1f5c0ee80b..21daa0cf5ca 100644 --- a/pvm/tests/expected/dummy/state_hash_initial +++ b/pvm/tests/expected/dummy/state_hash_initial @@ -1 +1 @@ -8d68447f68641e90db3f41d6c4058d019b570fa45fa31753eec648dfe730e0e3 +4f5758900509759b6dfb620074d255f2059d9cd7eff5c48fddf381edeb59281c diff --git a/pvm/tests/expected/etherlink/proof_initial b/pvm/tests/expected/etherlink/proof_initial index f5f9d01f0f3..429e81af640 100644 --- a/pvm/tests/expected/etherlink/proof_initial +++ b/pvm/tests/expected/etherlink/proof_initial @@ -1 +1 @@ -df32f6fbc97c9d23a4f4fefc81ffbbca049a192a052f22abdf0b8145b8276fb2000000030000000000000000d8fdff03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdc73c75432532814ec2d008761b965a6d8e4193f4e2a3cf4ff2d9701c6c607c02b6a51568f98781dc5dcba462353babe8afe52c41a8d0360217e3a8f41cd910b303b8d30200000000000273919af90e1fee9f2c6585e4534a6fa9e04931c0090b9c7ab9e631b16d8c8da00000030000000400000000000000000002042efafbc3f9688dc15b23117f10541c9ed31eaf464f88efcebb845c09cf566f02f3dee3ad11168f2439d85ff80920e2ca11bf750509436c64cae88214f7168765000208635de52136e424e01db919bbf578ed2d9ba2d58bbb53cd058690837a4e5f29025057c96a32f62d5824556bc2c92956999af61aaa5640a8efe0da04d565b0461f021a0d6f7f58660df42ef0682482f44483ce86213f570d4cebcc39907240298e55000295b5d148d8a212d4012a37d0574b20019dca69259db51fb68e426d488889e43d030010000000000000a2f800012330a4f82334b4f82338c4f8233cd4f8130804f897d53600930804f997d6360097d761000945233004fc130604fd9385e5e8938606e793874762233804fd233cb4fc233014ff2334d4fe2330f4fa2334a4fa2338c4fa233ca4fa130504faba8597000000e780c0c5397106fc22f8800017d561008545233004fe2146130545762330a4fc2334b4fc2338c4fc233c04fc17d5610093054575130504fc97000000e78000c2411106e422e0000897000000e780c015411106e422e0000897000000e780c01a411106e422e0000897000000e780c01f397106fc22f88000aa8517d561000546233004fea1461305e5712330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e780a0bb397106fc22f88000aa8517d561000546233004fea1461305856f2330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78040b8411106e422e00008aa862e85b68597000000e780a01d411106e422e0000897c03600e780e090397106fc22f88000aa8517d561000546233004fea146130545372330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78080b2397106fc22f88000aa8517e561000546233004fea146130565862330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78020af397106fc22f88000aa8517e561000546233004fea146130505842330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e780c0ab597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917e7610083b585aa8947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd930587802330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c0a5597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917d7610083b585a48947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd9305877c2330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c09f597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917d7610083b5859e8947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd930587782330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c099597186f4a2f080182338a4f8233cb4f8130804f997e56100930684f917d761008d4783b58598233004fc130504fd233804fd233cb4fc2330d4fe2334b4fe8945930687742330d4fa2334f4fa2338a4fa233cb4fa130504fab28597000000e780a09301112ae406ec97103600e780a00597103600e780400517e361000333c3a40293226597603600e780a0b497f161009381c1150a8593050000137101ff09a00c4113068500814717e761000337c79197e6610083b6c69f17e5610003354586171336006700a3e997f761009387479203c7070029eb05472380e70097e7610083b7078985c7411106e417e561000335a5be829797e7610083b787a895c3a26017f555001305c5fb4101828797e7610083b707a789cb17f55500130565fa8287a26041018280828097f761009387578c03c7070005e305472380e70097e7610083b7078581cb9385c18017f55500130525f782878280757106e522e1a6fccaf8cef4d2f08346860105476390e602946198659c69846d0c6214e118e51ce904ed638c052c08668e05bda003ca850163000a080547631aea0e0948033306000466006a83489601bb06d8400348a6018342b6010347c6018347d6012330650004e500e9230cd5008346e6010346f601a30c1501230d0501a30d5500230ee500a30ef500230fd500a30fc5009061630606268865931536002146aa600a64e6744679a679067a496117530f006700a3dfb5ce2a89846188659469006218661c6a26ec2af036f422f83afcbee063f0840a08620c66106a93090102aae4aee8b2ec0a85ac00300897003100e780c00c91c803b5090093953400214697500f00e78080da05456314aa10826502e81145054a63e1a51022658e052146214497500f00e78060d802e022e4eda0c1d69469186a6390e60618669c6593943600b3069040e1142697a6976388061084630063a1066117e117e38984feb3b6840033379400b306d7407d57639de602e5a8886190658c6993098103aae4b2e8aeec0a85ac00101897003100e7800003a28435f095bfb3b7e600b336d7009d8e7d576383e60c93f6f60f05476392e608aa84886194658c6918621c66106a2af836fcaee0bae4bee8b2ec28080c18b00097003100e780001fa66581c946658e05214697500f00e78060cc0545631faa0ce26502f41145054a63eca50c02758e052146214497500f00e78040ca02ec22f0c1a0426511e1054a0265a26542662330a9002334b9002338c900230c4901c9a80547a1471462233005001ce52338050018ede38806e408668e0621462e84b68597500f00e78080c5a28525bd93b61600fd167d57e391e6f4aa8408621466106a98619c658c692af836fcb2e0bae4bee8aeec28080c18b00097003100e7808013a66581c946658e05214697500f00e780e0c013751a0015cde26502f41145054463e0a50402758e052146214997500f00e780c0be02ec4af025a0227511e1054a62658275227688e08ce490e8238c440105a0227519e1054421a009453304454162658275227688e08ce490e8238c8400aa600a64e6744679a679067a4961828026642a8909e42da026642a8915c0466509a82a8909e429a82a89268491c803b5090093153400214697500f00e78000b74a8597503500e780c0b9597186f4a2f0a6eccae8cee4d2e056fc03c685012a8421ca83ba050003ba8500054513098102631da604214502f02af402f817f55b009305054e081097803100e78000be227585450ce10275227608e010e40ce8230c040063810a2493953a00214652853da490619465886932f036f42af859c9a2759061050690e15dca09aa8469214502f02af402f817f55b0093058548081097803100e78080b8227585450ce12279639db40003350a0083350900631cb51201458279631e000035aa13b5140093b5240093c515003385a5408279630405121375f50f85456314b50e56f052f426f80810854597003100e780a03f4276827522756304061289460ce008e410e8230cd40041a2027511e917f55b0093056547081097803100e78060b022752330050005452af8a2759061050690e125e20546630cc500a1050e0561159061050690e131e66115a10575f90275c274639ba40017f55b0093056544081097803100e780e0ab2275939534002e9585450ce185048275227585e0054981c98e05214697500f00e780c09d8145214531a0c27482752275f5d001490ce008e404e8230c2401a30c0400230d0400a30d0400230e0400a30e0400230f0400a30f0400e9a856f052f426f828000c1097100000e780a0d1626525c581442265c26562662af02ef432f895a83336b50033b5a500118d8279e31005ee0545a145233004000ce42338040008ece38809e49395390021464a8597500f00e780a09435bd0546a1462330040014e42338040010eca1cd8e05214697500f00e780a092a9a02145a26502f02af402f8854481c942658e05214697500f00e780c0900275a2754276a30c0400230d0400a30d0400230e040008e00ce410e8230c9400a30e0400230f0400a30f0400638a09009395390021464a8597500f00e780c08ca6700674e6644669a669066ae27a6561828082792a84638e0904227999a02a8421a082752a8481e5639d090299a022758e05214697500f00e7800089639309020da809a082752a8489c9033509008e05214697500f00e7802087d6895289638a0a009395390021464a8597500f00e780a085228597503500e7806088397106fc22f826f44af083c6850185442a8463889600034586010dc90547631fe504280097100000e780e0cea265114502ec63e7a50242658e052146214997500f00e780a08002e44ae819a88dca8144280097100000e78000cc626511e185442265c265626608e00ce410e8230c9400e2704274a274027921618280e9da8944280097100000e78000c9626571f9c1bf797106f422f026ec4ae84ee4b289ae842a842e85b28597003100e7804039886090649468986c83b5090008e010e414e818ec99cd03b589008e052146a2700274e2644269a269456117430f0067000377a2700274e2644269a269456182808c602a8989e983b5090085e14a8597403500e780207888648e05214697400f00e780e07383b50900f5d103b589008e05214697400f00e78080724a8597403500e78040751d7186eca2e8a6e4cae04efcae898c692a898dcd08102146ce8597403100e780e07ac27513d6150029c62275aa95fd152a9683c60500034705002300d5002380e5000505fd15e316c5fe25a017d561000335e51f0340050005458545054497400f00e780006b79c52300050022f02af422f80275a27542742ae42ee822ec25c4c26403850400635d0504930500f86310b502138514009305f4ff99c5034605000505fd157dda21a003c5890115c92265631ca40017f55b00930565fb280097603600e7804008c26413851400a685228697403600e780403323800400050422ec03c589010dc12265c26562662330a9002334b9002338c900e6604664a6640669e27925618280426522957d15854521a07d147d1569d8034605009346f6ff85892300d500f5d5bb05c0402300b50093351600f9bf0545854597f0ffffe780e0d8a2652a8499c54265054697400f00e780c05c228597403500e780805f5d7186e4a2e026fc4af84ef452f056ecaa894dc23284ae8403850500634f050a634b041a17d561000335a50c034005008545054a228597400f00e780c057630d05182a89a685228697403600e78000e11305f4ff15c1935514004a95ca954a8683460500034706002300d6002300e50005067d15e316b6fe0a85a146ca85228697403100e780c04905464a85a28597400f00e780c052426582652266b336a000850623b0b90023b4c90023b8a900238cd90019a80545a14523b0090023b4b90023b8090023bca900a6600664e2744279a279027ae26a616182806349041017d56100833a050103c00a008545054a228597400f00e780204c7dc92a89a685228697403600e78080d5330524017d150546a28521a0fd157d1585c18346050013c7f6ff058a2300e50075d63b06d0402300c50013b61600f9bf03c00a008545228597400f00e78020474dcdaa84ca85228697403600e78080d01305f4ff15c1935514002695a695268683460500034706002300d6002300e50005067d15e316b6fe0a85a146a685228697403100e780403905462685a28597400f00e780404242658265a26605461337150023b0b90023b4d90023b8a900238ce9004a85a285a6600664e2744279a279027ae26a616117430f006700c33e014a17155c00130665b55285a28597f0ffffe780a0b6014a17155c00130605b45285a28597f0ffffe78040b517155c001306c5b20545a28597f0ffffe78000b40000aa8905462685a28597400f00e780a03905464a85a28597400f00e780c0384e8597403500e780803b09a0aa8905464a85a28597400f00e78000374e8597403500e780c039797106f422f026ec2a84240063c00504b5c9214502e02ae402e817f55b00930585cf0a8597703100e780803f226585450ce1023b747d26e91280a6a7b40b1e7793d1b4213b99c793f9e856ac19f253592f0db5023053fb90ca2f391b0944dcf6851dd516f479b804f48bcafdc7c2448a64dd808102f61e3ee5de196089479d9c32a0bf564f4c31d67ae3d182221cf025b71dd21c9302cd6b3dd021a40662d86db64357c6c90c3154b7ce3124e4f4218f102be47b6aab0244980c1d43301b4cc9117e16ceb0056b17f25448d0976f6fd31286523d39b06702d37f1bb4dc4acca6a95d8d5d1f7a4573378f0c0901cb7a30ffcff187aa1af845022c9d2e47ff6d8d5ab7490b3a00f9f983dd4d90213eeacd2deb62081eee25d73602e42028f7e0570e5c74e1f756eb93269e6a95ba9b856887a4d6862bf23f0c1db402c0aed19a514df5213cda479149873fece82415c994e3ec973a85f7ba058d20ae024bab8aef63433d98649bcd969d4ed89c3ea8a5a01afabf7d27f93521320cf4de0263b4749ed36920fb4bf883b37c226f079adf08a097c631ad5f7457b061716abd0263b4749ed36920fb4bf883b37c226f079adf08a097c631ad5f7457b061716abd020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020fbbf77d868a1f64900e25de5a4ac42737cf0daaf9972a41f0f693fffd467c52022961448264537c3ddc7219ba1c860c4860f30956d0bce307ee8d83b23cd99483000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b700026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f111100022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e21302c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b70245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380245dd9031b56dab226d90e7db1535dac5ec818f43abbf60d5809633da4b8add9c02337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec0094502337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e59602740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387002740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf760313870000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d9338000297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b28000248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b03010248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b02f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d933802b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db0225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a5102df9e79c5bc6e42e2e94fa50032cba37c15a1c2304ec8f3b47e25a348125aadf702337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec0094502337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e5960256411da161dfbcbcb503b5c5275b312d01d4646192e27edb571db36c3270ae81023270b212802a14bfaa964c19e4da70aa359dc6ed0d09613b15a37a6ec5805bab02af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f32620292ed4ba1e13304db845f73a90e83d63ef65d9d88c0141d7fa5a991ad2aff5003026878c573f5a8c2ebfc3bf3a7420fbfbd9dd7ba98be3be785b7441152b0f3ccc2029d561bc91b02315d61a6c10fdcb9cb3fefb4fb5d414b717ad14b34a8e8fc9a180271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb0300000000000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300000000 +2412b9f2a19f696f8de44ed4c40e688cc72341c764a2e6f27908b0385639eaca000000030000000000000000d8fdff03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdc73c75432532814ec2d008761b965a6d8e4193f4e2a3cf4ff2d9701c6c607c02b6a51568f98781dc5dcba462353babe8afe52c41a8d0360217e3a8f41cd910b303b8d30200000000000273919af90e1fee9f2c6585e4534a6fa9e04931c0090b9c7ab9e631b16d8c8da00000030000000400000000000000000002042efafbc3f9688dc15b23117f10541c9ed31eaf464f88efcebb845c09cf566f02f3dee3ad11168f2439d85ff80920e2ca11bf750509436c64cae88214f7168765000208635de52136e424e01db919bbf578ed2d9ba2d58bbb53cd058690837a4e5f29025057c96a32f62d5824556bc2c92956999af61aaa5640a8efe0da04d565b0461f021a0d6f7f58660df42ef0682482f44483ce86213f570d4cebcc39907240298e55000295b5d148d8a212d4012a37d0574b20019dca69259db51fb68e426d488889e43d030010000000000000a2f800012330a4f82334b4f82338c4f8233cd4f8130804f897d53600930804f997d6360097d761000945233004fc130604fd9385e5e8938606e793874762233804fd233cb4fc233014ff2334d4fe2330f4fa2334a4fa2338c4fa233ca4fa130504faba8597000000e780c0c5397106fc22f8800017d561008545233004fe2146130545762330a4fc2334b4fc2338c4fc233c04fc17d5610093054575130504fc97000000e78000c2411106e422e0000897000000e780c015411106e422e0000897000000e780c01a411106e422e0000897000000e780c01f397106fc22f88000aa8517d561000546233004fea1461305e5712330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e780a0bb397106fc22f88000aa8517d561000546233004fea1461305856f2330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78040b8411106e422e00008aa862e85b68597000000e780a01d411106e422e0000897c03600e780e090397106fc22f88000aa8517d561000546233004fea146130545372330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78080b2397106fc22f88000aa8517e561000546233004fea146130565862330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e78020af397106fc22f88000aa8517e561000546233004fea146130505842330a4fc2334c4fc2338d4fc233c04fc130504fc97000000e780c0ab597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917e7610083b585aa8947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd930587802330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c0a5597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917d7610083b585a48947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd9305877c2330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c09f597186f4a2f080182338a4f8233cb4f8130504f997e56100930684f917d7610083b5859e8947233004fc2338a4fc233cb4fc2330d4fe2334b4fe130504fd930587782330b4fa2334f4fa2338a4fa233cf4fa130504fab28597000000e780c099597186f4a2f080182338a4f8233cb4f8130804f997e56100930684f917d761008d4783b58598233004fc130504fd233804fd233cb4fc2330d4fe2334b4fe8945930687742330d4fa2334f4fa2338a4fa233cb4fa130504fab28597000000e780a09301112ae406ec97103600e780a00597103600e780400517e361000333c3a40293226597603600e780a0b497f161009381c1150a8593050000137101ff09a00c4113068500814717e761000337c79197e6610083b6c69f17e5610003354586171336006700a3e997f761009387479203c7070029eb05472380e70097e7610083b7078985c7411106e417e561000335a5be829797e7610083b787a895c3a26017f555001305c5fb4101828797e7610083b707a789cb17f55500130565fa8287a26041018280828097f761009387578c03c7070005e305472380e70097e7610083b7078581cb9385c18017f55500130525f782878280757106e522e1a6fccaf8cef4d2f08346860105476390e602946198659c69846d0c6214e118e51ce904ed638c052c08668e05bda003ca850163000a080547631aea0e0948033306000466006a83489601bb06d8400348a6018342b6010347c6018347d6012330650004e500e9230cd5008346e6010346f601a30c1501230d0501a30d5500230ee500a30ef500230fd500a30fc5009061630606268865931536002146aa600a64e6744679a679067a496117530f006700a3dfb5ce2a89846188659469006218661c6a26ec2af036f422f83afcbee063f0840a08620c66106a93090102aae4aee8b2ec0a85ac00300897003100e780c00c91c803b5090093953400214697500f00e78080da05456314aa10826502e81145054a63e1a51022658e052146214497500f00e78060d802e022e4eda0c1d69469186a6390e60618669c6593943600b3069040e1142697a6976388061084630063a1066117e117e38984feb3b6840033379400b306d7407d57639de602e5a8886190658c6993098103aae4b2e8aeec0a85ac00101897003100e7800003a28435f095bfb3b7e600b336d7009d8e7d576383e60c93f6f60f05476392e608aa84886194658c6918621c66106a2af836fcaee0bae4bee8b2ec28080c18b00097003100e780001fa66581c946658e05214697500f00e78060cc0545631faa0ce26502f41145054a63eca50c02758e052146214497500f00e78040ca02ec22f0c1a0426511e1054a0265a26542662330a9002334b9002338c900230c4901c9a80547a1471462233005001ce52338050018ede38806e408668e0621462e84b68597500f00e78080c5a28525bd93b61600fd167d57e391e6f4aa8408621466106a98619c658c692af836fcb2e0bae4bee8aeec28080c18b00097003100e7808013a66581c946658e05214697500f00e780e0c013751a0015cde26502f41145054463e0a50402758e052146214997500f00e780c0be02ec4af025a0227511e1054a62658275227688e08ce490e8238c440105a0227519e1054421a009453304454162658275227688e08ce490e8238c8400aa600a64e6744679a679067a4961828026642a8909e42da026642a8915c0466509a82a8909e429a82a89268491c803b5090093153400214697500f00e78000b74a8597503500e780c0b9597186f4a2f0a6eccae8cee4d2e056fc03c685012a8421ca83ba050003ba8500054513098102631da604214502f02af402f817f55b009305054e081097803100e78000be227585450ce10275227608e010e40ce8230c040063810a2493953a00214652853da490619465886932f036f42af859c9a2759061050690e15dca09aa8469214502f02af402f817f55b0093058548081097803100e78080b8227585450ce12279639db40003350a0083350900631cb51201458279631e000035aa13b5140093b5240093c515003385a5408279630405121375f50f85456314b50e56f052f426f80810854597003100e780a03f4276827522756304061289460ce008e410e8230cd40041a2027511e917f55b0093056547081097803100e78060b022752330050005452af8a2759061050690e125e20546630cc500a1050e0561159061050690e131e66115a10575f90275c274639ba40017f55b0093056544081097803100e780e0ab2275939534002e9585450ce185048275227585e0054981c98e05214697500f00e780c09d8145214531a0c27482752275f5d001490ce008e404e8230c2401a30c0400230d0400a30d0400230e0400a30e0400230f0400a30f0400e9a856f052f426f828000c1097100000e780a0d1626525c581442265c26562662af02ef432f895a83336b50033b5a500118d8279e31005ee0545a145233004000ce42338040008ece38809e49395390021464a8597500f00e780a09435bd0546a1462330040014e42338040010eca1cd8e05214697500f00e780a092a9a02145a26502f02af402f8854481c942658e05214697500f00e780c0900275a2754276a30c0400230d0400a30d0400230e040008e00ce410e8230c9400a30e0400230f0400a30f0400638a09009395390021464a8597500f00e780c08ca6700674e6644669a669066ae27a6561828082792a84638e0904227999a02a8421a082752a8481e5639d090299a022758e05214697500f00e7800089639309020da809a082752a8489c9033509008e05214697500f00e7802087d6895289638a0a009395390021464a8597500f00e780a085228597503500e7806088397106fc22f826f44af083c6850185442a8463889600034586010dc90547631fe504280097100000e780e0cea265114502ec63e7a50242658e052146214997500f00e780a08002e44ae819a88dca8144280097100000e78000cc626511e185442265c265626608e00ce410e8230c9400e2704274a274027921618280e9da8944280097100000e78000c9626571f9c1bf797106f422f026ec4ae84ee4b289ae842a842e85b28597003100e7804039886090649468986c83b5090008e010e414e818ec99cd03b589008e052146a2700274e2644269a269456117430f0067000377a2700274e2644269a269456182808c602a8989e983b5090085e14a8597403500e780207888648e05214697400f00e780e07383b50900f5d103b589008e05214697400f00e78080724a8597403500e78040751d7186eca2e8a6e4cae04efcae898c692a898dcd08102146ce8597403100e780e07ac27513d6150029c62275aa95fd152a9683c60500034705002300d5002380e5000505fd15e316c5fe25a017d561000335e51f0340050005458545054497400f00e780006b79c52300050022f02af422f80275a27542742ae42ee822ec25c4c26403850400635d0504930500f86310b502138514009305f4ff99c5034605000505fd157dda21a003c5890115c92265631ca40017f55b00930565fb280097603600e7804008c26413851400a685228697403600e780403323800400050422ec03c589010dc12265c26562662330a9002334b9002338c900e6604664a6640669e27925618280426522957d15854521a07d147d1569d8034605009346f6ff85892300d500f5d5bb05c0402300b50093351600f9bf0545854597f0ffffe780e0d8a2652a8499c54265054697400f00e780c05c228597403500e780805f5d7186e4a2e026fc4af84ef452f056ecaa894dc23284ae8403850500634f050a634b041a17d561000335a50c034005008545054a228597400f00e780c057630d05182a89a685228697403600e78000e11305f4ff15c1935514004a95ca954a8683460500034706002300d6002300e50005067d15e316b6fe0a85a146ca85228697403100e780c04905464a85a28597400f00e780c052426582652266b336a000850623b0b90023b4c90023b8a900238cd90019a80545a14523b0090023b4b90023b8090023bca900a6600664e2744279a279027ae26a616182806349041017d56100833a050103c00a008545054a228597400f00e780204c7dc92a89a685228697403600e78080d5330524017d150546a28521a0fd157d1585c18346050013c7f6ff058a2300e50075d63b06d0402300c50013b61600f9bf03c00a008545228597400f00e78020474dcdaa84ca85228697403600e78080d01305f4ff15c1935514002695a695268683460500034706002300d6002300e50005067d15e316b6fe0a85a146a685228697403100e780403905462685a28597400f00e780404242658265a26605461337150023b0b90023b4d90023b8a900238ce9004a85a285a6600664e2744279a279027ae26a616117430f006700c33e014a17155c00130665b55285a28597f0ffffe780a0b6014a17155c00130605b45285a28597f0ffffe78040b517155c001306c5b20545a28597f0ffffe78000b40000aa8905462685a28597400f00e780a03905464a85a28597400f00e780c0384e8597403500e780803b09a0aa8905464a85a28597400f00e78000374e8597403500e780c039797106f422f026ec2a84240063c00504b5c9214502e02ae402e817f55b00930585cf0a8597703100e780803f226585450ce1023b747d26e91280a6a7b40b1e7793d1b4213b99c793f9e856ac19f253592f0db5023053fb90ca2f391b0944dcf6851dd516f479b804f48bcafdc7c2448a64dd808102f61e3ee5de196089479d9c32a0bf564f4c31d67ae3d182221cf025b71dd21c9302cd6b3dd021a40662d86db64357c6c90c3154b7ce3124e4f4218f102be47b6aab0244980c1d43301b4cc9117e16ceb0056b17f25448d0976f6fd31286523d39b06702d37f1bb4dc4acca6a95d8d5d1f7a4573378f0c0901cb7a30ffcff187aa1af845022c9d2e47ff6d8d5ab7490b3a00f9f983dd4d90213eeacd2deb62081eee25d73602e42028f7e0570e5c74e1f756eb93269e6a95ba9b856887a4d6862bf23f0c1db402c0aed19a514df5213cda479149873fece82415c994e3ec973a85f7ba058d20ae024bab8aef63433d98649bcd969d4ed89c3ea8a5a01afabf7d27f93521320cf4de0263b4749ed36920fb4bf883b37c226f079adf08a097c631ad5f7457b061716abd0263b4749ed36920fb4bf883b37c226f079adf08a097c631ad5f7457b061716abd020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020fbbf77d868a1f64900e25de5a4ac42737cf0daaf9972a41f0f693fffd467c520280654ad60c28e2055f609c34347e275515ffedbf92de7739d4315e4a3d2d434900030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b700026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f111100022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e21302c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b70245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380245dd9031b56dab226d90e7db1535dac5ec818f43abbf60d5809633da4b8add9c02337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec0094502337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e59602740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387002740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387000030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d9338000297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b28000248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b03010248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b02f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d933802b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db0225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a5102df9e79c5bc6e42e2e94fa50032cba37c15a1c2304ec8f3b47e25a348125aadf702337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec0094502337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e5960256411da161dfbcbcb503b5c5275b312d01d4646192e27edb571db36c3270ae81023270b212802a14bfaa964c19e4da70aa359dc6ed0d09613b15a37a6ec5805bab02af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f32620292ed4ba1e13304db845f73a90e83d63ef65d9d88c0141d7fa5a991ad2aff5003026878c573f5a8c2ebfc3bf3a7420fbfbd9dd7ba98be3be785b7441152b0f3ccc2029d561bc91b02315d61a6c10fdcb9cb3fefb4fb5d414b717ad14b34a8e8fc9a180271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb0300000000000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300000000 diff --git a/pvm/tests/expected/etherlink/state_hash_final b/pvm/tests/expected/etherlink/state_hash_final index 911d07cc6d7..67e3c709f05 100644 --- a/pvm/tests/expected/etherlink/state_hash_final +++ b/pvm/tests/expected/etherlink/state_hash_final @@ -1 +1 @@ -62136105ba52fff2873018adaaba4caed58790c350ead0e5273dcfca41e1e5d0 +782a4559cf4b6dfdd46f388029c886f17e6536c358641217d1e536d4fd085917 diff --git a/pvm/tests/expected/etherlink/state_hash_initial b/pvm/tests/expected/etherlink/state_hash_initial index 41b22402768..c9f5dcb17f2 100644 --- a/pvm/tests/expected/etherlink/state_hash_initial +++ b/pvm/tests/expected/etherlink/state_hash_initial @@ -1 +1 @@ -9f33b506da94840e45e65143450c537940b08a505ae838a8d3cc89f930b4a808 +7d22f2e2d158c5dba4475c65b7c6ac6630ac5c60a51d187780fb9ab3a972a773 diff --git a/pvm/tests/expected/jstz/proof_initial b/pvm/tests/expected/jstz/proof_initial index 7e318e6763c..69aa0be97b8 100644 --- a/pvm/tests/expected/jstz/proof_initial +++ b/pvm/tests/expected/jstz/proof_initial @@ -1 +1 @@ -e2a28392e393b1c48449460fa8b54ba2a59efbb180e5aac5251d96aa40b9e68a000000030000000000000000d8fdff03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdc73c75432532814ec2d008761b965a6d8e4193f4e2a3cf4ff2d9701c6c607c02b6a51568f98781dc5dcba462353babe8afe52c41a8d0360217e3a8f41cd910b303569a0300000000000273919af90e1fee9f2c6585e4534a6fa9e04931c0090b9c7ab9e631b16d8c8da00000030000000400000000000000000002042efafbc3f9688dc15b23117f10541c9ed31eaf464f88efcebb845c09cf566f02bb58c3bf498a76411e653a8d3a38fcb3841d3f2648d85a58fdb202f51b3e3fb9028a75a3d8f89ffcaae3052a6dd270c3ff5cd834de076ba37896a7ff7e9a8cc71900027f44821963d2d6d95cd8004ec306c4639ba4f7ed470478701973a9793167df74023ea8ab3d9aa896591dd325312955e3675cedf6b85f0a94b7539c254c1ef2c0a200027a036f53837575ab1b51117294ee446c2858eb3a084cf8ea60dcb50d9e4910960300100000000000002388b7050040af2605106398c6022f27b51875fb9305450005462fa0c502aa841305200613061008854697406b00e7802085aa852685e35db0f8e2604264a2640561828017c593001305a56e97d5bf00138645339305400297000000e7800045397106fc22f826f4800019c90c6110652330050013b515007d15b374c50011a0814417f5bf001305654197606b00e780001c10610c652334c4fc2338b4fc854614e104e51dc6233cc4fc2330b4fe6312d604a1c17d552fb5a5028545631bb502130504fe0f00300297706700e78020460da017f5bf001305653c97606b00e780001797f56800938505ef97f06800e780c0f2e2704274a27421618280aa84130584fc97f06600e780800a268597406a00e780609d411106e422e0000897a06900e780802e7d567e1605066316c500a26002644101828017d6bf001306267a97000000e780e00c011106ec22e800103a88b6872330b4fe2334c4fe97d5bf0013866579930504fe930684fe328797000000e780e04e5d7186e4a2e026fc4af880082e966367b6062a89086193141500637a9604a14563fb950463cc040401c9833589002334b4fc233ca4fc05452338a4fc130504fb8545930684fc268697a06b00e78040b6033504fb0ded033584fb2334a90023309900a6600664e274427961618280b284a145e3e9c5faa144e3d804fa014517e6bf001306663797000000e7802001033584fb833504fce5b7411106e422e0000811e5328597a06b00e78020a397000000e7808000411106e422e000082a862e85b28597400300e7800036597186f4a2f08018930604f0c8ea17f5bf000335453497c26b00e782620217e5bf001305c54597c26b00e782a2ff97000000e780401c597186f4a2f08018930604f0c8ea17f5bf000335e53097c26b00e78202ff17e5bf001305654597c26b00e78242fc97000000e780e018597186f4a2f08018930604f0c8ea17f5bf000335852d97c26b00e782a2fb17e5bf001305054597c26b00e782e2f897000000e7808015597186f4a2f08018930604f0c8ea17f5bf000335252a97c26b00e78242f817e5bf001305a54497c26b00e78282f597000000e7802012411106e422e0000897406c00e78080561d7186eca2e880109705c00003b6a5a1aa851305f4fe233ca4fc2330c4fe17f5bf001305c5932334a4fa05452338a4fa233404fc130684fd233cc4fa2330a4fc130584fa97000000e780600c1d7186eca2e880109705c00003b665beaa851305f4fe233ca4fc2330c4fe17f5bf00130505902334a4fa05452338a4fa233404fc130684fd233cc4fa2330a4fc130584fa97000000e780a007411106e422e000082a8617559400130525fe9305b00297000000e780400d1d7186eca2e880102330a4fa2334b4fa130504fa2330a4fe17556c001305254e2334a4fe17956c00130585982338a4fa0545233ca4fa233804fc930504fe2330b4fc2334a4fc130504fbb28597000000e7808000797106f422f00018233ca4fc2330b4fe05452314a4fe130584fd97b06800e780601e1d7186eca2e88010147518712338d4fc2334e4fc146d18691c6508612330d4fc233ce4fa2338f4fa2334a4fa130584fa233ca4fc2330c4fe230404fea304b4fe130584fd97b06800e780a019000097000000e78060115d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc130504fbb28597000000e78060f55d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc17f5bf0013062580130504fb814597000000e78060f35d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc17e5bf001306857d130504fb854597000000e78040ef597186f4a2f08018930604f0c8ea1705c0000335c593ccee930584f9eceae8ee930504f9ecf2e8f617e5bf001305257bc8f20945c8f6233004fc930504fdccfac8fe130504fab28597000000e78020e8411106e422e00008175594001305e5e39305600297000000e78080f1411106e422e0000817559400130585e49305400297000000e780e0f3011106ec22e80010b2872330a4fe2334b4fe17e5bf001306057617e5bf0013088518930504fe930684fe0145328797000000e780e003011106ec22e80010b2872330a4fe2334b4fe17e5bf001306a57417f5bf001308a58e930504fe930684fe0145328797000000e7808000517186f5a2f1a6edcae98019c2842338b4f0930504f090ed94f198f509c98545631fb500175594001305a5dc29a0175594001305e5db2338a4f2094501a817559400130525db2338a4f21d458c63233ca4f295ed130504f3130604f028fa17556c001305e52128fe130504f148e217556c001305c50748e6930504f24cea48ee17e5bf001305656c48fa0d45b9a8130504f413060003130904f4be8597506b00e780400d130504f3130604f028fa17556c009705c00083b5c5811305e51c28fe233024f94ce6130504f148ea17556c001305e50148ee930504f24cf248f617e5bf001305856948fa1145130604f048fe233804fc930504f76ce268e6130504fba68597000000e78040cd197186fca2f800012330a4f82334b4f82338c4f8233cd4f8130504f82338a4fc17556c0013052515233ca4fc130504f92330a4fe17556c001305c5fa2334a4fe17e5bf001305c5682330a4fa09452334a4fa233004fc930504fd2338b4fa233ca4fa130504faba8597000000e78040c6397106fc22f8800017e5bf001305457e2330a4fc05452334a4fc233004fe21452338a4fc233c04fc17e5bf009305457d130504fc97000000e78080c2411106e422e0000897506c00e780c00d411106e422e0000897506c00e780c012411106e422e0000897506c00e780c017397106fc22f88000aa8517e5bf001305e5792330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78020bc597186f4a2f080182338a4f817f5bf000335e562233cb4f8930584f92338b4fc233ca4fc930504f92330b4fe2334a4fe17e5bf00130525752330a4fa0d452334a4fa233004fc130504fd2338a4fa0945233ca4fa130504fab28597000000e78000b6397106fc22f88000aa8517e5bf00130565772330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780a0b2411106e422e0000897306c00e78060cb397106fc22f88000aa8517e5bf00130585312330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78040ae397106fc22f88000aa8517f5bf001305a5992330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780e0aa397106fc22f88000aa8517f5bf00130545972330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78080a7397106fc22f88000aa8517f5bf001305e5942330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78020a4397106fc22f88000aa8517f5bf00130585922330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780c0a001112ae406ec97f06a00e780404c97f06a00e780e04b17f3bf00033363140293226597706b00e78020359701c000938121000a8593050000137101ff09a00c4113068500814717f7bf000337e7e597f6bf0083b6e60817f5bf000335e5c617f36a00670003309717c0009387678203c7070029eb05472380e70097f7bf0083b7a7cd85c7411106e417f5bf000335c554829797f7bf0083b7272695c3a2601705a600130565ad4101828797f7bf0083b7a72489cb1705a600130505ac8287a2604101828082809707c0009387777c03c7070015e305472380e70097f7bf0083b7a7cf91cb9705c0009385057b1705a600130585a882878280411106e4086197700000e780200d0145a26041018280411106e4086197700000e780c00b0145a26041018280797106f422f026ec2a840a8597106c00e780004022e81795ae009304a5530a850c08268697f06b00e780001b130514002ae80a850c08268697f06b00e780c019130524002ae80a850c08268697f06b00e7808018130534002ae80a850c08268697f06b00e7804017130544002ae80a850c08268697f06b00e7800016130554002ae80a850c08268697f06b00e780c014130564002ae80a850c08268697f06b00e7808013130574002ae80a850c08268697f06b00e7804012130584002ae80a850c08268697f06b00e7800011130594002ae80a850c08268697f06b00e780c00f1305a4002ae80a850c08268697f06b00e780800e1305b4002ae80a850c08268697f06b00e780400d1305c4002ae80a850c08268697f06b00e780000c1305d4002ae80a850c08268697f06b00e780c00a1305e4002ae80a850c08268697f06b00e78080091305f4002ae80a850c08268697f06b00e7804008130504012ae80a850c08268697f06b00e7800007130514012ae80a850c08268697f06b00e780c005130524012ae80a850c08268697f06b00e7808004130534012ae80a850c08268697f06b00e7804003130544012ae80a850c08268697f06b00e7800002130554012ae80a850c08268697f06b00e780c000130564012ae80a850c08268697f06b00e78080ff130574012ae80a850c08268697f06b00e78040fe130584012ae80a850c08268697f06b00e78000fd130594012ae80a850c08268697f06b00e780c0fb1305a4012ae80a850c08268697f06b00e78080fa1305b4012ae80a850c08268697f06b00e78040f91305c4012ae80a850c08268697f06b00e78000f81305d4012ae80a850c08268697f06b00e780c0f61305e4012ae80a850c08268697f06b00e78080f57d0422e80a850c08268697f06b00e78060f40a8597f06b00e780c00aa2700274e26445618280130101d52334112a2330812a233c9128233821292334312923304129233c5127233861272334712723308127be8b03c487073a89b68ab2892e8a2a8b19c405456316a40003c59b0789a881a817f5bf00033525e483b40b080340050013050002a14597300300e780a0716301055a2a8c886018619064946893858401a813029703350120fe755e76be76233cac002338bc002334cc002330dc0083b58b0823008110a300a11062e6986103b60b0983b68b0993850b0aa813029703350120aaea7e75de753e7683b68b0aaae6aee232fe986203b60b0b83b68b0b93850b0ca813029703350120fe755e76aae83e75aee4b2e092652afc326503968b0c2ee4b6652ae8727596662ef45667a2752aec36f03af8231cc1048dcd027597801900e780800811466396c50283451500034605008346250003053500a205d18dc2066205558d4d8db775747a9b85a536630cb5047d557e155d0505052334ab000d452330ab00280097c00000e78040c65e8597d00000e780a0c58330812a0334012a833481290339012983398128033a0128833a8127033b0127833b8126033c01261301012b8280a66581e50345810041cd83568105066541667d366385c60289ce63feb6003306d500030606001307f0fb6357c744b68539a03de591a163010544639fd54213b61500b1462e966384d504a546639ad50497756c009385e52b97406b00e780007221e10280b6f75a2bea0c33112f87a6eb58db6ff85a8f29041b631be53bd83c4afe2cb602dcd1c5cec6edd3cfcef01afddbe24a07cb2d45eea5942fba7a424fd42ca63fbb020a2b75bfd79a0016b5606691dcf2c6593fe2507955137092f760ea80c69cdee302b77df55b263c71b71d7d22e20b8d01364cffbb97eaef56b999b9166d6713c8bb02e7192ed2ac673c11a3ddd28c1911d13e2589f00822d98613e7370bf12d22650d02e3507100d8b1fe8329c0d8af3353bfa724bd3c02571136542544d4ea89f2b35202ec6b0f562b8dd5d5b418aff56b34cc793be8876dd074766a98f2c25749234bfc024bfa7fbceb10218cc72660233af7a233ecefa92b67649a66f238ccd45b6ab84f023e8010f256959082421270b8bac54c87c7e9f9597ebd51070bedc7bbfbdd2782023d6d44419d67fb3624a9e3dfc8e738f7ee52f343e51e1a091e74b8c1b86362ef025411c1ca2b3e4297db8cb49ce13522de8e1429863a9580c1ec8277ab01f0a7cd02ac3e38f9cc37a9fa7bd4e2cb4d35d74b476cd6ca05cad0d204e69e663e350340020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f3402991bb6a78e28ed74c7049d50afbb554cf9869919aa44b25824e8a9ef74e2113c0257de2611707c771f171cc9acf1abd3d9230bc1d96a4a321802b1aaeb23be4295000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b700026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f111100022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f11110245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a689163802337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945027e858d3bdbef0f9f0431f8fcb9637d6224101f9a920669d0c42106d6313e67790247157db0bbc6b8055627a14dddd6e7fd1e8c35aeae7e5f6085aa3cacce88bf2c021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e59602740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387002740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf760313870000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d933802f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d9338000297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b28000248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b03010248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b2802b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db0225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510251d8722f7637aa28fd105a527910526c1a4d25d1a484d26b8c79efb134250e9a02e0c5e67e68e3e4c91e3ee720d5895f3a03c240082a52cc05c15ecbe124d18fdb02100ea89b87d6ec8eeef59f75f6b991a17b92c3bc64e5f63117e115be72f958c8021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596025481f202be2719721790ba5b00514ded7e07d53f4f23253c490e98e79fa385be0230c85028d866289ef5653373849167731e618b456b9e2a369443e3e828733f9702af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f32620292ed4ba1e13304db845f73a90e83d63ef65d9d88c0141d7fa5a991ad2aff5003026878c573f5a8c2ebfc3bf3a7420fbfbd9dd7ba98be3be785b7441152b0f3ccc202216a07ab92c06d198e67a62f51eea1be4f1106127387935bec6b6ae4acaa6cde0271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb0300000000000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300000000 +7e6766b6596e9852fa17cbd6f98432fcf4ee0cc68e9a2e12651474c40e3209df000000030000000000000000d8fdff03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bdc73c75432532814ec2d008761b965a6d8e4193f4e2a3cf4ff2d9701c6c607c02b6a51568f98781dc5dcba462353babe8afe52c41a8d0360217e3a8f41cd910b303569a0300000000000273919af90e1fee9f2c6585e4534a6fa9e04931c0090b9c7ab9e631b16d8c8da00000030000000400000000000000000002042efafbc3f9688dc15b23117f10541c9ed31eaf464f88efcebb845c09cf566f02bb58c3bf498a76411e653a8d3a38fcb3841d3f2648d85a58fdb202f51b3e3fb9028a75a3d8f89ffcaae3052a6dd270c3ff5cd834de076ba37896a7ff7e9a8cc71900027f44821963d2d6d95cd8004ec306c4639ba4f7ed470478701973a9793167df74023ea8ab3d9aa896591dd325312955e3675cedf6b85f0a94b7539c254c1ef2c0a200027a036f53837575ab1b51117294ee446c2858eb3a084cf8ea60dcb50d9e4910960300100000000000002388b7050040af2605106398c6022f27b51875fb9305450005462fa0c502aa841305200613061008854697406b00e7802085aa852685e35db0f8e2604264a2640561828017c593001305a56e97d5bf00138645339305400297000000e7800045397106fc22f826f4800019c90c6110652330050013b515007d15b374c50011a0814417f5bf001305654197606b00e780001c10610c652334c4fc2338b4fc854614e104e51dc6233cc4fc2330b4fe6312d604a1c17d552fb5a5028545631bb502130504fe0f00300297706700e78020460da017f5bf001305653c97606b00e780001797f56800938505ef97f06800e780c0f2e2704274a27421618280aa84130584fc97f06600e780800a268597406a00e780609d411106e422e0000897a06900e780802e7d567e1605066316c500a26002644101828017d6bf001306267a97000000e780e00c011106ec22e800103a88b6872330b4fe2334c4fe97d5bf0013866579930504fe930684fe328797000000e780e04e5d7186e4a2e026fc4af880082e966367b6062a89086193141500637a9604a14563fb950463cc040401c9833589002334b4fc233ca4fc05452338a4fc130504fb8545930684fc268697a06b00e78040b6033504fb0ded033584fb2334a90023309900a6600664e274427961618280b284a145e3e9c5faa144e3d804fa014517e6bf001306663797000000e7802001033584fb833504fce5b7411106e422e0000811e5328597a06b00e78020a397000000e7808000411106e422e000082a862e85b28597400300e7800036597186f4a2f08018930604f0c8ea17f5bf000335453497c26b00e782620217e5bf001305c54597c26b00e782a2ff97000000e780401c597186f4a2f08018930604f0c8ea17f5bf000335e53097c26b00e78202ff17e5bf001305654597c26b00e78242fc97000000e780e018597186f4a2f08018930604f0c8ea17f5bf000335852d97c26b00e782a2fb17e5bf001305054597c26b00e782e2f897000000e7808015597186f4a2f08018930604f0c8ea17f5bf000335252a97c26b00e78242f817e5bf001305a54497c26b00e78282f597000000e7802012411106e422e0000897406c00e78080561d7186eca2e880109705c00003b6a5a1aa851305f4fe233ca4fc2330c4fe17f5bf001305c5932334a4fa05452338a4fa233404fc130684fd233cc4fa2330a4fc130584fa97000000e780600c1d7186eca2e880109705c00003b665beaa851305f4fe233ca4fc2330c4fe17f5bf00130505902334a4fa05452338a4fa233404fc130684fd233cc4fa2330a4fc130584fa97000000e780a007411106e422e000082a8617559400130525fe9305b00297000000e780400d1d7186eca2e880102330a4fa2334b4fa130504fa2330a4fe17556c001305254e2334a4fe17956c00130585982338a4fa0545233ca4fa233804fc930504fe2330b4fc2334a4fc130504fbb28597000000e7808000797106f422f00018233ca4fc2330b4fe05452314a4fe130584fd97b06800e780601e1d7186eca2e88010147518712338d4fc2334e4fc146d18691c6508612330d4fc233ce4fa2338f4fa2334a4fa130584fa233ca4fc2330c4fe230404fea304b4fe130584fd97b06800e780a019000097000000e78060115d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc130504fbb28597000000e78060f55d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc17f5bf0013062580130504fb814597000000e78060f35d7186e4a2e080082330a4fe2334b4fe130504fe2338a4fa0545233ca4fa233804fc21452330a4fc233404fc17e5bf001306857d130504fb854597000000e78040ef597186f4a2f08018930604f0c8ea1705c0000335c593ccee930584f9eceae8ee930504f9ecf2e8f617e5bf001305257bc8f20945c8f6233004fc930504fdccfac8fe130504fab28597000000e78020e8411106e422e00008175594001305e5e39305600297000000e78080f1411106e422e0000817559400130585e49305400297000000e780e0f3011106ec22e80010b2872330a4fe2334b4fe17e5bf001306057617e5bf0013088518930504fe930684fe0145328797000000e780e003011106ec22e80010b2872330a4fe2334b4fe17e5bf001306a57417f5bf001308a58e930504fe930684fe0145328797000000e7808000517186f5a2f1a6edcae98019c2842338b4f0930504f090ed94f198f509c98545631fb500175594001305a5dc29a0175594001305e5db2338a4f2094501a817559400130525db2338a4f21d458c63233ca4f295ed130504f3130604f028fa17556c001305e52128fe130504f148e217556c001305c50748e6930504f24cea48ee17e5bf001305656c48fa0d45b9a8130504f413060003130904f4be8597506b00e780400d130504f3130604f028fa17556c009705c00083b5c5811305e51c28fe233024f94ce6130504f148ea17556c001305e50148ee930504f24cf248f617e5bf001305856948fa1145130604f048fe233804fc930504f76ce268e6130504fba68597000000e78040cd197186fca2f800012330a4f82334b4f82338c4f8233cd4f8130504f82338a4fc17556c0013052515233ca4fc130504f92330a4fe17556c001305c5fa2334a4fe17e5bf001305c5682330a4fa09452334a4fa233004fc930504fd2338b4fa233ca4fa130504faba8597000000e78040c6397106fc22f8800017e5bf001305457e2330a4fc05452334a4fc233004fe21452338a4fc233c04fc17e5bf009305457d130504fc97000000e78080c2411106e422e0000897506c00e780c00d411106e422e0000897506c00e780c012411106e422e0000897506c00e780c017397106fc22f88000aa8517e5bf001305e5792330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78020bc597186f4a2f080182338a4f817f5bf000335e562233cb4f8930584f92338b4fc233ca4fc930504f92330b4fe2334a4fe17e5bf00130525752330a4fa0d452334a4fa233004fc130504fd2338a4fa0945233ca4fa130504fab28597000000e78000b6397106fc22f88000aa8517e5bf00130565772330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780a0b2411106e422e0000897306c00e78060cb397106fc22f88000aa8517e5bf00130585312330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78040ae397106fc22f88000aa8517f5bf001305a5992330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780e0aa397106fc22f88000aa8517f5bf00130545972330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78080a7397106fc22f88000aa8517f5bf001305e5942330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e78020a4397106fc22f88000aa8517f5bf00130585922330a4fc05452334a4fc233004fe21452338a4fc233c04fc130504fc97000000e780c0a001112ae406ec97f06a00e780404c97f06a00e780e04b17f3bf00033363140293226597706b00e78020359701c000938121000a8593050000137101ff09a00c4113068500814717f7bf000337e7e597f6bf0083b6e60817f5bf000335e5c617f36a00670003309717c0009387678203c7070029eb05472380e70097f7bf0083b7a7cd85c7411106e417f5bf000335c554829797f7bf0083b7272695c3a2601705a600130565ad4101828797f7bf0083b7a72489cb1705a600130505ac8287a2604101828082809707c0009387777c03c7070015e305472380e70097f7bf0083b7a7cf91cb9705c0009385057b1705a600130585a882878280411106e4086197700000e780200d0145a26041018280411106e4086197700000e780c00b0145a26041018280797106f422f026ec2a840a8597106c00e780004022e81795ae009304a5530a850c08268697f06b00e780001b130514002ae80a850c08268697f06b00e780c019130524002ae80a850c08268697f06b00e7808018130534002ae80a850c08268697f06b00e7804017130544002ae80a850c08268697f06b00e7800016130554002ae80a850c08268697f06b00e780c014130564002ae80a850c08268697f06b00e7808013130574002ae80a850c08268697f06b00e7804012130584002ae80a850c08268697f06b00e7800011130594002ae80a850c08268697f06b00e780c00f1305a4002ae80a850c08268697f06b00e780800e1305b4002ae80a850c08268697f06b00e780400d1305c4002ae80a850c08268697f06b00e780000c1305d4002ae80a850c08268697f06b00e780c00a1305e4002ae80a850c08268697f06b00e78080091305f4002ae80a850c08268697f06b00e7804008130504012ae80a850c08268697f06b00e7800007130514012ae80a850c08268697f06b00e780c005130524012ae80a850c08268697f06b00e7808004130534012ae80a850c08268697f06b00e7804003130544012ae80a850c08268697f06b00e7800002130554012ae80a850c08268697f06b00e780c000130564012ae80a850c08268697f06b00e78080ff130574012ae80a850c08268697f06b00e78040fe130584012ae80a850c08268697f06b00e78000fd130594012ae80a850c08268697f06b00e780c0fb1305a4012ae80a850c08268697f06b00e78080fa1305b4012ae80a850c08268697f06b00e78040f91305c4012ae80a850c08268697f06b00e78000f81305d4012ae80a850c08268697f06b00e780c0f61305e4012ae80a850c08268697f06b00e78080f57d0422e80a850c08268697f06b00e78060f40a8597f06b00e780c00aa2700274e26445618280130101d52334112a2330812a233c9128233821292334312923304129233c5127233861272334712723308127be8b03c487073a89b68ab2892e8a2a8b19c405456316a40003c59b0789a881a817f5bf00033525e483b40b080340050013050002a14597300300e780a0716301055a2a8c886018619064946893858401a813029703350120fe755e76be76233cac002338bc002334cc002330dc0083b58b0823008110a300a11062e6986103b60b0983b68b0993850b0aa813029703350120aaea7e75de753e7683b68b0aaae6aee232fe986203b60b0b83b68b0b93850b0ca813029703350120fe755e76aae83e75aee4b2e092652afc326503968b0c2ee4b6652ae8727596662ef45667a2752aec36f03af8231cc1048dcd027597801900e780800811466396c50283451500034605008346250003053500a205d18dc2066205558d4d8db775747a9b85a536630cb5047d557e155d0505052334ab000d452330ab00280097c00000e78040c65e8597d00000e780a0c58330812a0334012a833481290339012983398128033a0128833a8127033b0127833b8126033c01261301012b8280a66581e50345810041cd83568105066541667d366385c60289ce63feb6003306d500030606001307f0fb6357c744b68539a03de591a163010544639fd54213b61500b1462e966384d504a546639ad50497756c009385e52b97406b00e780007221e10280b6f75a2bea0c33112f87a6eb58db6ff85a8f29041b631be53bd83c4afe2cb602dcd1c5cec6edd3cfcef01afddbe24a07cb2d45eea5942fba7a424fd42ca63fbb020a2b75bfd79a0016b5606691dcf2c6593fe2507955137092f760ea80c69cdee302b77df55b263c71b71d7d22e20b8d01364cffbb97eaef56b999b9166d6713c8bb02e7192ed2ac673c11a3ddd28c1911d13e2589f00822d98613e7370bf12d22650d02e3507100d8b1fe8329c0d8af3353bfa724bd3c02571136542544d4ea89f2b35202ec6b0f562b8dd5d5b418aff56b34cc793be8876dd074766a98f2c25749234bfc024bfa7fbceb10218cc72660233af7a233ecefa92b67649a66f238ccd45b6ab84f023e8010f256959082421270b8bac54c87c7e9f9597ebd51070bedc7bbfbdd2782023d6d44419d67fb3624a9e3dfc8e738f7ee52f343e51e1a091e74b8c1b86362ef025411c1ca2b3e4297db8cb49ce13522de8e1429863a9580c1ec8277ab01f0a7cd02ac3e38f9cc37a9fa7bd4e2cb4d35d74b476cd6ca05cad0d204e69e663e350340020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f34020f9f279211af86568756a1c86f1082001544f2ddfc11619bd90772d1814c2f3402991bb6a78e28ed74c7049d50afbb554cf9869919aa44b25824e8a9ef74e2113c02f82d1b66a75f40984a61e730fb75ce8c19eaaa067a8dd0eb4d451de4bce2481900030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b700026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f1111026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f111100022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213026e101f66449a43839079abd936b3bf4a37be98d69c04f0f338b0620afb0f11110245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250245f77f2db5732370e6832188d45c127a37e0f3b8557eb6fecef6080cf27743250273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a68916380273298f204dbd649acea7caddd9d81b02781e500f403b696ff6160da9a689163802337bf1607964d76140de57e0f2cc4d800789764d72c049d9a9c42a9adec00945027e858d3bdbef0f9f0431f8fcb9637d6224101f9a920669d0c42106d6313e67790247157db0bbc6b8055627a14dddd6e7fd1e8c35aeae7e5f6085aa3cacce88bf2c021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e59602740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387002740d82632f6a94268cea42f4126b2c89df51fdf8d6256a4b21d4ddf76031387000030040000000000000000000000002c4d7e47651be1eb1bf52f6b9375180e419854012265e461abb67151a8eabc6b702f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d933802f52a690920af7bc0203a3c426b5a15d6f62f4e05ba9056d5d951b667928d9338000297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b280297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b28000248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b03010248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0248fc721fbbc172e0925fa27af1671de225ba927134802998b10a1568a188652b0297df87bb79dd3f9ac79ddfd0f92ef0118ff3013ec89958bf597a7ca8c5230b2802b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db02b81529f22e8f918c3db6ac500c41203c3934716402cf40096b691314171856db0225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510225d41ebf97e6ac801fffd66cf1ebdb373526ac19a914f5dacf7954e74a316a510251d8722f7637aa28fd105a527910526c1a4d25d1a484d26b8c79efb134250e9a02e0c5e67e68e3e4c91e3ee720d5895f3a03c240082a52cc05c15ecbe124d18fdb02100ea89b87d6ec8eeef59f75f6b991a17b92c3bc64e5f63117e115be72f958c8021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596021e094ab952b704f0588102528572afc9b067a0bd442d17d2c2fe770357c4e596025481f202be2719721790ba5b00514ded7e07d53f4f23253c490e98e79fa385be0230c85028d866289ef5653373849167731e618b456b9e2a369443e3e828733f9702af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f32620292ed4ba1e13304db845f73a90e83d63ef65d9d88c0141d7fa5a991ad2aff5003026878c573f5a8c2ebfc3bf3a7420fbfbd9dd7ba98be3be785b7441152b0f3ccc202216a07ab92c06d198e67a62f51eea1be4f1106127387935bec6b6ae4acaa6cde0271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb0300000000000000000271e0a99173564931c0b8acc52d2685a8e39c64dc52e3d02390fdac2a12b155cb022d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e2130300000000 diff --git a/pvm/tests/expected/jstz/state_hash_final b/pvm/tests/expected/jstz/state_hash_final index 7062b017d15..4e0847b6db4 100644 --- a/pvm/tests/expected/jstz/state_hash_final +++ b/pvm/tests/expected/jstz/state_hash_final @@ -1 +1 @@ -a6e2770ce8b9c24f578aa082bba819a8ca56e074c8f80b3500166fa85489f1a5 +e3c584a852f8f1d1be329f6343d50a989d94294753a09806204d08eef52d0fc5 diff --git a/pvm/tests/expected/jstz/state_hash_initial b/pvm/tests/expected/jstz/state_hash_initial index e3db2fb2fb0..fe42a63ceb3 100644 --- a/pvm/tests/expected/jstz/state_hash_initial +++ b/pvm/tests/expected/jstz/state_hash_initial @@ -1 +1 @@ -78861331ab05e402ffae6266d84109f1e0672f15695e1afbccbc7eda969de5bf +80e59d1ef9a93866d6fd00623b4e8e2971c566ea6ce3c0853fa9b4d8667becfa diff --git a/tools/sandbox/src/commands/bench/commands/run.rs b/tools/sandbox/src/commands/bench/commands/run.rs index c1b24741168..ebb39b15a90 100644 --- a/tools/sandbox/src/commands/bench/commands/run.rs +++ b/tools/sandbox/src/commands/bench/commands/run.rs @@ -18,8 +18,6 @@ use octez_riscv::parser::parse; use octez_riscv::stepper::StepResult; use octez_riscv::stepper::Stepper; use octez_riscv::stepper::StepperStatus; -use octez_riscv_data::components::atom::AtomMode; -use octez_riscv_data::components::data_space::DataSpaceMode; use crate::cli::BenchMode; use crate::cli::BenchRunOptions; @@ -37,10 +35,7 @@ use crate::format_status; /// Helper function to look in the [`Stepper`] to peek for the current [`Instr`] /// Assumes the program counter will be a multiple of 2. -fn get_current_instr(stepper: &S) -> Result -where - S::Mode: AtomMode + DataSpaceMode, -{ +fn get_current_instr(stepper: &S) -> Result { let machine_state = stepper.machine_state(); let get_half_instr = |raw_pc: Address| -> Result { machine_state