From 429a030521e7c9bc8709d0d91707fbc08074ed39 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Tue, 20 Nov 2018 16:48:10 +0100 Subject: [PATCH 001/108] Move prepare under code. --- srml/contract/src/code/mod.rs | 49 +++++++++++++ srml/contract/src/{vm => code}/prepare.rs | 83 +++++++++++------------ srml/contract/src/exec.rs | 4 +- srml/contract/src/lib.rs | 20 +++++- srml/contract/src/vm/mod.rs | 14 ++-- 5 files changed, 116 insertions(+), 54 deletions(-) create mode 100644 srml/contract/src/code/mod.rs rename srml/contract/src/{vm => code}/prepare.rs (79%) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs new file mode 100644 index 0000000000000..4598389189565 --- /dev/null +++ b/srml/contract/src/code/mod.rs @@ -0,0 +1,49 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use codec::Compact; +use ::Trait; + +mod prepare; + +#[derive(Encode, Decode)] +pub struct CodeHash(Hash); + +#[derive(Encode, Decode)] +pub struct MemoryDefinition { + #[codec(compact)] + initial: u32, + #[codec(compact)] + maximum: u32, +} + +#[derive(Encode, Decode)] +pub struct InstrumentedWasmModule { + memory_def: MemoryDefinition, + /// Code instrumented with the latest schedule. + code: Vec, +} + +pub fn save(original_code: Vec) { + panic!() + +} + +pub fn load(hash: CodeHash) -> InstrumentedWasmModule { + // TODO: Load the version of schedule for the code. Reinstrument if it doesn't match. + panic!() +} + diff --git a/srml/contract/src/vm/prepare.rs b/srml/contract/src/code/prepare.rs similarity index 79% rename from srml/contract/src/vm/prepare.rs rename to srml/contract/src/code/prepare.rs index 8ec056dfc71b5..701faa0551690 100644 --- a/srml/contract/src/vm/prepare.rs +++ b/srml/contract/src/code/prepare.rs @@ -17,16 +17,20 @@ //! Module that takes care of loading, checking and preprocessing of a //! wasm module before execution. -use super::env_def::HostFunctionSet; -use super::{Error, Ext}; +use super::{InstrumentedWasmModule, MemoryDefinition}; + use rstd::prelude::*; -use parity_wasm::elements::{self, External, MemoryType, Type}; +use parity_wasm::elements::{self, External, MemoryType, Type, FunctionType}; use pwasm_utils; use pwasm_utils::rules; use runtime_primitives::traits::As; use sandbox; use {Trait, Schedule}; +pub trait EnvironmentCheck { + fn check_func(&self, name: &[u8], func_ty: &FunctionType) -> bool; +} + struct ContractModule<'a, Gas: 'a> { // An `Option` is used here for loaning (`take()`-ing) the module. // Invariant: Can't be `None` (i.e. on enter and on exit from the function @@ -36,9 +40,9 @@ struct ContractModule<'a, Gas: 'a> { } impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { - fn new(original_code: &[u8], schedule: &'a Schedule) -> Result, Error> { + fn new(original_code: &[u8], schedule: &'a Schedule) -> Result, &'static str> { let module = - elements::deserialize_buffer(original_code).map_err(|_| Error::Deserialization)?; + elements::deserialize_buffer(original_code).map_err(|_| "can't decode wasm code")?; Ok(ContractModule { module: Some(module), schedule, @@ -50,7 +54,7 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { /// In this runtime we only allow wasm module to import memory from the environment. /// Memory section contains declarations of internal linear memories, so if we find one /// we reject such a module. - fn ensure_no_internal_memory(&self) -> Result<(), Error> { + fn ensure_no_internal_memory(&self) -> Result<(), &'static str> { let module = self .module .as_ref() @@ -59,12 +63,12 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { .memory_section() .map_or(false, |ms| ms.entries().len() > 0) { - return Err(Error::InternalMemoryDeclared); + return Err("module declares internal memory"); } Ok(()) } - fn inject_gas_metering(&mut self) -> Result<(), Error> { + fn inject_gas_metering(&mut self) -> Result<(), &'static str> { let gas_rules = rules::Set::new(self.schedule.regular_op_cost.clone().as_(), Default::default()) .with_grow_cost(self.schedule.grow_mem_cost.clone().as_()) .with_forbidden_floats(); @@ -75,13 +79,13 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { .expect("On entry to the function `module` can't be `None`; qed"); let contract_module = pwasm_utils::inject_gas_counter(module, &gas_rules) - .map_err(|_| Error::GasInstrumentation)?; + .map_err(|_| "gas instrumentation failed")?; self.module = Some(contract_module); Ok(()) } - fn inject_stack_height_metering(&mut self) -> Result<(), Error> { + fn inject_stack_height_metering(&mut self) -> Result<(), &'static str> { let module = self .module .take() @@ -89,7 +93,7 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { let contract_module = pwasm_utils::stack_height::inject_limiter(module, self.schedule.max_stack_height) - .map_err(|_| Error::StackHeightInstrumentation)?; + .map_err(|_| "stack height instrumentation failed")?; self.module = Some(contract_module); Ok(()) @@ -102,7 +106,7 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { /// - checks any imported function against defined host functions set, incl. /// their signatures. /// - if there is a memory import, returns it's descriptor - fn scan_imports(&self, env: &HostFunctionSet) -> Result, Error> { + fn scan_imports(&self, check: &C) -> Result, &'static str> { let module = self .module .as_ref() @@ -120,7 +124,7 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { if import.module() != "env" { // This import tries to import something from non-"env" module, // but all imports are located in "env" at the moment. - return Err(Error::Instantiate); + return Err("module has imports from a non-'env' namespace"); } let type_idx = match import.external() { @@ -134,33 +138,24 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { let Type::Function(ref func_ty) = types .get(*type_idx as usize) - .ok_or_else(|| Error::Instantiate)?; - - let ext_func = env - .funcs - .get(import.field().as_bytes()) - .ok_or_else(|| Error::Instantiate)?; - if !ext_func.func_type_matches(func_ty) { - return Err(Error::Instantiate); + .ok_or_else(|| "validation: import entry points to a non-existent type")?; + + if !check.check_func(import.field().as_bytes(), func_ty) { + return Err("module imports a non-existent function"); } } Ok(imported_mem_type) } - fn into_wasm_code(mut self) -> Result, Error> { + fn into_wasm_code(mut self) -> Result, &'static str> { elements::serialize( self.module .take() .expect("On entry to the function `module` can't be `None`; qed"), - ).map_err(|_| Error::Serialization) + ).map_err(|_| "error serializing instrumented module") } } -pub(super) struct PreparedContract { - pub instrumented_code: Vec, - pub memory: sandbox::Memory, -} - /// Loads the given module given in `original_code`, performs some checks on it and /// does some preprocessing. /// @@ -171,46 +166,46 @@ pub(super) struct PreparedContract { /// - all imported functions from the external environment matches defined by `env` module, /// /// The preprocessing includes injecting code for gas metering and metering the height of stack. -pub(super) fn prepare_contract( +pub fn prepare_contract( original_code: &[u8], - schedule: &Schedule<::Gas>, - env: &HostFunctionSet, -) -> Result { + schedule: &Schedule, + check: &C, +) -> Result { let mut contract_module = ContractModule::new(original_code, schedule)?; contract_module.ensure_no_internal_memory()?; contract_module.inject_gas_metering()?; contract_module.inject_stack_height_metering()?; - let memory = if let Some(memory_type) = contract_module.scan_imports(env)? { + let memory_def = if let Some(memory_type) = contract_module.scan_imports(check)? { // Inspect the module to extract the initial and maximum page count. let limits = memory_type.limits(); match (limits.initial(), limits.maximum()) { (initial, Some(maximum)) if initial > maximum => { - // Requested initial number of pages should not exceed the requested maximum. - return Err(Error::Memory); + return Err("Requested initial number of pages should not exceed the requested maximum"); } (_, Some(maximum)) if maximum > schedule.max_memory_pages => { - // Maximum number of pages should not exceed the configured maximum. - return Err(Error::Memory); + return Err("Maximum number of pages should not exceed the configured maximum."); } + (initial, Some(maximum)) => MemoryDefinition { initial, maximum }, (_, None) => { // Maximum number of pages should be always declared. // This isn't a hard requirement and can be treated as a maxiumum set // to configured maximum. - return Err(Error::Memory); + return Err("Maximum number of pages should be always declared."); } - (initial, maximum) => sandbox::Memory::new(initial, maximum), } } else { // If none memory imported then just crate an empty placeholder. // Any access to it will lead to out of bounds trap. - sandbox::Memory::new(0, Some(0)) + MemoryDefinition { + initial: 0, + maximum: 0, + } }; - let memory = memory.map_err(|_| Error::Memory)?; - Ok(PreparedContract { - instrumented_code: contract_module.into_wasm_code()?, - memory, + Ok(InstrumentedWasmModule { + code: contract_module.into_wasm_code()?, + memory_def, }) } diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 25dfe2e8fe0c4..a13458e309069 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -59,6 +59,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { return Err("not enough gas to pay base call fee"); } + // TODO: Load code from the storage or cache. let dest_code = self.overlay.get_code(&dest); let (change_set, events) = { @@ -106,12 +107,13 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { Ok(CallReceipt) } + // TODO: rename it to instantiate. pub fn create( &mut self, caller: T::AccountId, endowment: T::Balance, gas_meter: &mut GasMeter, - init_code: &[u8], + init_code: &[u8], // TODO: Take code hash. data: &[u8], ) -> Result, &'static str> { if self.depth == self.config.max_depth as usize { diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index e87c289ed82fa..ea4e5f43b0232 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -88,6 +88,7 @@ mod double_map; mod exec; mod vm; mod gas; +mod code; #[cfg(test)] mod tests; @@ -148,8 +149,19 @@ decl_module! { /// Contracts module. pub struct Module for enum Call where origin: T::Origin { fn deposit_event() = default; - // TODO: Change AccountId to staking::Address - /// Make a call to a specified account, optionally transferring some balance. + + fn put_code(origin, code: Vec) -> Result { + let origin = ensure_signed(origin)?; + + // TODO: deduct some freebalance according to price per byte according to + // the schedule. + // TODO: get the hash of the code + // TODO: validate the code. If the code is not valid, then don't store it. + // TODO: put code directly into the storage under a key equal to hash, without involving `AccountDb`. + + Ok(()) + } + /// Make a call to a specified account, optionally transferring some balance. fn call( origin, @@ -210,7 +222,7 @@ decl_module! { origin, endowment: ::Type, gas_limit: ::Type, - ctor_code: Vec, + ctor_code: Vec, // TODO: take code hash data: Vec ) -> Result { let origin = ensure_signed(origin)?; @@ -292,6 +304,8 @@ decl_storage! { CurrentSchedule get(current_schedule) config(): Schedule = Schedule::default(); /// The code associated with an account. pub CodeOf: map T::AccountId => Vec; // TODO Vec values should be optimised to not do a length prefix. + + // pub CodeStorage: map code::CodeHash => code::InstrumentedWasmModule; } } diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index b46264bbd6fc2..6aac52c643864 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -26,12 +26,10 @@ use {balances, sandbox, system}; type BalanceOf = ::Balance; type AccountIdOf = ::AccountId; -mod prepare; #[macro_use] mod env_def; mod runtime; -use self::prepare::{prepare_contract, PreparedContract}; use self::runtime::{to_execution_result, Runtime}; /// An interface that provides an access to the external environment in which the @@ -114,6 +112,10 @@ pub enum Error { Memory, } +// TODO: Take a name of a function to execute. +// TODO: Instead of taking the code explicitly can we take the code hash? +// TODO: Extract code injection stuff and expect the code to be already prepared? + /// Execute the given code as a contract. pub fn execute<'a, E: Ext>( code: &[u8], @@ -125,10 +127,10 @@ pub fn execute<'a, E: Ext>( ) -> Result<(), Error> { let env = runtime::init_env(); - let PreparedContract { - instrumented_code, - memory, - } = prepare_contract(code, &schedule, &env)?; + // TODO: Instantiate memory from the provided memory definition. + // TODO: take code + let memory = sandbox::Memory::new(0, Some(0)).unwrap(); + let instrumented_code = Vec::new(); let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); for (func_name, ext_func) in &env.funcs { From 169c5e82e2acd4c2cd869c7bdf878b25ad78a430 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 21 Nov 2018 13:31:00 +0100 Subject: [PATCH 002/108] Schedule update --- srml/contract/src/code/mod.rs | 28 ++++++++++++++++---- srml/contract/src/code/prepare.rs | 44 ++++++++++++++++++------------- srml/contract/src/lib.rs | 31 +++++++++++++++++++--- 3 files changed, 76 insertions(+), 27 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 4598389189565..7dd8a8508f5b4 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -15,7 +15,8 @@ // along with Substrate. If not, see . use codec::Compact; -use ::Trait; +use runtime_primitives::traits::Hash; +use {Schedule, Trait}; mod prepare; @@ -32,18 +33,35 @@ pub struct MemoryDefinition { #[derive(Encode, Decode)] pub struct InstrumentedWasmModule { + /// Version of the schedule with which the code was instrumented. + #[codec(compact)] + schedule_version: u32, memory_def: MemoryDefinition, /// Code instrumented with the latest schedule. code: Vec, } -pub fn save(original_code: Vec) { - panic!() +pub fn save( + original_code: &[u8], + schedule: &Schedule, +) -> Result<(), &'static str> { + let code_hash = T::Hashing::hash(&original_code); + + // The first time instrumentation is on the user. However, consequent reinstrumentation + // due to the schedule changes is on governance system. + let instrumented_module = prepare::prepare_contract::( + &original_code, + schedule, + |_, _| true, // TODO: Use real validation function. + )?; + // TODO: validate the code. If the code is not valid, then don't store it. + // TODO: put code directly into the storage under a key equal to hash, without involving `AccountDb`. + + panic!() } -pub fn load(hash: CodeHash) -> InstrumentedWasmModule { +pub fn load(hash: CodeHash) -> Result { // TODO: Load the version of schedule for the code. Reinstrument if it doesn't match. panic!() } - diff --git a/srml/contract/src/code/prepare.rs b/srml/contract/src/code/prepare.rs index 701faa0551690..35315de923b20 100644 --- a/srml/contract/src/code/prepare.rs +++ b/srml/contract/src/code/prepare.rs @@ -19,17 +19,12 @@ use super::{InstrumentedWasmModule, MemoryDefinition}; -use rstd::prelude::*; -use parity_wasm::elements::{self, External, MemoryType, Type, FunctionType}; +use parity_wasm::elements::{self, External, FunctionType, MemoryType, Type}; use pwasm_utils; use pwasm_utils::rules; +use rstd::prelude::*; use runtime_primitives::traits::As; -use sandbox; -use {Trait, Schedule}; - -pub trait EnvironmentCheck { - fn check_func(&self, name: &[u8], func_ty: &FunctionType) -> bool; -} +use {Schedule, Trait}; struct ContractModule<'a, Gas: 'a> { // An `Option` is used here for loaning (`take()`-ing) the module. @@ -40,7 +35,10 @@ struct ContractModule<'a, Gas: 'a> { } impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { - fn new(original_code: &[u8], schedule: &'a Schedule) -> Result, &'static str> { + fn new( + original_code: &[u8], + schedule: &'a Schedule, + ) -> Result, &'static str> { let module = elements::deserialize_buffer(original_code).map_err(|_| "can't decode wasm code")?; Ok(ContractModule { @@ -69,9 +67,12 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { } fn inject_gas_metering(&mut self) -> Result<(), &'static str> { - let gas_rules = rules::Set::new(self.schedule.regular_op_cost.clone().as_(), Default::default()) - .with_grow_cost(self.schedule.grow_mem_cost.clone().as_()) - .with_forbidden_floats(); + let gas_rules = rules::Set::new( + self.schedule.regular_op_cost.clone().as_(), + Default::default(), + ) + .with_grow_cost(self.schedule.grow_mem_cost.clone().as_()) + .with_forbidden_floats(); let module = self .module @@ -106,7 +107,10 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { /// - checks any imported function against defined host functions set, incl. /// their signatures. /// - if there is a memory import, returns it's descriptor - fn scan_imports(&self, check: &C) -> Result, &'static str> { + fn scan_imports bool>( + &self, + check: C, + ) -> Result, &'static str> { let module = self .module .as_ref() @@ -140,7 +144,7 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { .get(*type_idx as usize) .ok_or_else(|| "validation: import entry points to a non-existent type")?; - if !check.check_func(import.field().as_bytes(), func_ty) { + if !check(import.field().as_bytes(), func_ty) { return Err("module imports a non-existent function"); } } @@ -152,7 +156,8 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { self.module .take() .expect("On entry to the function `module` can't be `None`; qed"), - ).map_err(|_| "error serializing instrumented module") + ) + .map_err(|_| "error serializing instrumented module") } } @@ -166,10 +171,10 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { /// - all imported functions from the external environment matches defined by `env` module, /// /// The preprocessing includes injecting code for gas metering and metering the height of stack. -pub fn prepare_contract( +pub fn prepare_contract bool>( original_code: &[u8], schedule: &Schedule, - check: &C, + check: C, ) -> Result { let mut contract_module = ContractModule::new(original_code, schedule)?; contract_module.ensure_no_internal_memory()?; @@ -181,7 +186,9 @@ pub fn prepare_contract( let limits = memory_type.limits(); match (limits.initial(), limits.maximum()) { (initial, Some(maximum)) if initial > maximum => { - return Err("Requested initial number of pages should not exceed the requested maximum"); + return Err( + "Requested initial number of pages should not exceed the requested maximum", + ); } (_, Some(maximum)) if maximum > schedule.max_memory_pages => { return Err("Maximum number of pages should not exceed the configured maximum."); @@ -204,6 +211,7 @@ pub fn prepare_contract( }; Ok(InstrumentedWasmModule { + schedule_version: schedule.version, code: contract_module.into_wasm_code()?, memory_def, }) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index ea4e5f43b0232..21fa776e12237 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -150,14 +150,30 @@ decl_module! { pub struct Module for enum Call where origin: T::Origin { fn deposit_event() = default; + /// Updates the schedule for metering contracts. + /// + /// The schedule should have a greater version than the stored schedule. + fn update_schedule(schedule: Schedule) -> Result { + if >::current_schedule().version >= schedule.version { + return Err("Schedule should have a greater version"); + } + + Self::deposit_event(RawEvent::ScheduleUpdated(schedule.version)); + >::put(schedule); + + Ok(()) + } + fn put_code(origin, code: Vec) -> Result { let origin = ensure_signed(origin)?; + let schedule = >::current_schedule(); // TODO: deduct some freebalance according to price per byte according to // the schedule. - // TODO: get the hash of the code - // TODO: validate the code. If the code is not valid, then don't store it. - // TODO: put code directly into the storage under a key equal to hash, without involving `AccountDb`. + + // TODO: Return code hash and deposit an event? + + code::save::(&code, &schedule)?; Ok(()) } @@ -281,6 +297,9 @@ decl_event! { /// Contract deployed by address at the specified address. Created(AccountId, AccountId), + + /// Triggered when the current schedule is updated. + ScheduleUpdated(u32), } } @@ -362,8 +381,11 @@ impl Config { /// Definition of the cost schedule and other parameterizations for wasm vm. #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] -#[derive(Clone, Encode, Decode)] +#[derive(Clone, Encode, Decode, PartialEq, Eq)] pub struct Schedule { + /// Version of the schedule. + pub version: u32, + /// Gas cost of a growing memory by single page. pub grow_mem_cost: Gas, @@ -393,6 +415,7 @@ pub struct Schedule { impl> Default for Schedule { fn default() -> Schedule { Schedule { + version: 0, grow_mem_cost: Gas::sa(1), regular_op_cost: Gas::sa(1), return_data_per_byte_cost: Gas::sa(1), From eb64e5e488ba94825a9719630a7368058799cb77 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 21 Nov 2018 16:04:03 +0100 Subject: [PATCH 003/108] CodeHash --- node/executor/src/lib.rs | 2 +- srml/contract/src/account_db.rs | 23 ++++++++++++++--------- srml/contract/src/code/mod.rs | 11 +++++------ srml/contract/src/exec.rs | 13 ++++++++----- srml/contract/src/lib.rs | 8 +++++--- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/node/executor/src/lib.rs b/node/executor/src/lib.rs index 632230133a3d4..778ae75f9b0fe 100644 --- a/node/executor/src/lib.rs +++ b/node/executor/src/lib.rs @@ -684,7 +684,7 @@ mod tests { runtime_io::with_externalities(&mut t, || { // Verify that the contract constructor worked well and code of TRANSFER contract is actually deployed. - assert_eq!(&contract::CodeOf::::get(addr), &code_transfer); + assert_eq!(&contract::CodeHashOf::::get(addr), &code_transfer); }); } diff --git a/srml/contract/src/account_db.rs b/srml/contract/src/account_db.rs index d7ff094003c97..694efb33d7a17 100644 --- a/srml/contract/src/account_db.rs +++ b/srml/contract/src/account_db.rs @@ -16,7 +16,7 @@ //! Auxilliaries to help with managing partial changes to accounts state. -use super::{CodeOf, StorageOf, Trait}; +use super::{CodeHashOf, StorageOf, Trait}; use double_map::StorageDoubleMap; use rstd::cell::RefCell; use rstd::collections::btree_map::{BTreeMap, Entry}; @@ -26,7 +26,8 @@ use {balances, system}; pub struct ChangeEntry { balance: Option, - code: Option>, + /// In the case the outer option is None, the code_hash will be untouched. + code: Option>, storage: BTreeMap, Option>>, } @@ -45,7 +46,7 @@ pub type ChangeSet = BTreeMap<::AccountId, ChangeEntry pub trait AccountDb { fn get_storage(&self, account: &T::AccountId, location: &[u8]) -> Option>; - fn get_code(&self, account: &T::AccountId) -> Vec; + fn get_code(&self, account: &T::AccountId) -> Option; fn get_balance(&self, account: &T::AccountId) -> T::Balance; fn commit(&mut self, change_set: ChangeSet); @@ -56,8 +57,8 @@ impl AccountDb for DirectAccountDb { fn get_storage(&self, account: &T::AccountId, location: &[u8]) -> Option> { >::get(account.clone(), location.to_vec()) } - fn get_code(&self, account: &T::AccountId) -> Vec { - >::get(account) + fn get_code(&self, account: &T::AccountId) -> Option { + >::get(account) } fn get_balance(&self, account: &T::AccountId) -> T::Balance { balances::Module::::free_balance(account) @@ -69,13 +70,17 @@ impl AccountDb for DirectAccountDb { balances::Module::::set_free_balance_creating(&address, balance) { // Account killed. This will ultimately lead to calling `OnFreeBalanceZero` callback - // which will make removal of CodeOf and StorageOf for this account. + // which will make removal of CodeHashOf and StorageOf for this account. // In order to avoid writing over the deleted properties we `continue` here. continue; } } if let Some(code) = changed.code { - >::insert(&address, &code); + if let Some(code) = code { + >::insert(&address, code); + } else { + >::remove(&address); + } } for (k, v) in changed.storage.into_iter() { if let Some(value) = v { @@ -117,7 +122,7 @@ impl<'a, T: Trait> OverlayAccountDb<'a, T> { .storage .insert(location, value); } - pub fn set_code(&mut self, account: &T::AccountId, code: Vec) { + pub fn set_code(&mut self, account: &T::AccountId, code: Option) { self.local .borrow_mut() .entry(account.clone()) @@ -142,7 +147,7 @@ impl<'a, T: Trait> AccountDb for OverlayAccountDb<'a, T> { .cloned() .unwrap_or_else(|| self.underlying.get_storage(account, location)) } - fn get_code(&self, account: &T::AccountId) -> Vec { + fn get_code(&self, account: &T::AccountId) -> Option { self.local .borrow() .get(account) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 7dd8a8508f5b4..e30682d725d61 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -20,9 +20,6 @@ use {Schedule, Trait}; mod prepare; -#[derive(Encode, Decode)] -pub struct CodeHash(Hash); - #[derive(Encode, Decode)] pub struct MemoryDefinition { #[codec(compact)] @@ -38,14 +35,16 @@ pub struct InstrumentedWasmModule { schedule_version: u32, memory_def: MemoryDefinition, /// Code instrumented with the latest schedule. - code: Vec, + pub code: Vec, } pub fn save( original_code: &[u8], schedule: &Schedule, ) -> Result<(), &'static str> { - let code_hash = T::Hashing::hash(&original_code); + // TODO: panic + // let code_hash = T::Hashing::hash(&original_code); + let code_hash = T::CodeHash::default(); // The first time instrumentation is on the user. However, consequent reinstrumentation // due to the schedule changes is on governance system. @@ -61,7 +60,7 @@ pub fn save( panic!() } -pub fn load(hash: CodeHash) -> Result { +pub fn load(hash: T::CodeHash) -> Result { // TODO: Load the version of schedule for the code. Reinstrument if it doesn't match. panic!() } diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index a13458e309069..d1681afccaba8 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -18,6 +18,7 @@ use super::{ContractAddressFor, Trait, Event, RawEvent, Config}; use account_db::{AccountDb, OverlayAccountDb}; use gas::GasMeter; use vm; +use code; use rstd::prelude::*; use runtime_primitives::traits::{Zero, CheckedAdd, CheckedSub}; @@ -60,7 +61,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { } // TODO: Load code from the storage or cache. - let dest_code = self.overlay.get_code(&dest); + let dest_code_hash = self.overlay.get_code(&dest); let (change_set, events) = { let mut overlay = OverlayAccountDb::new(&self.overlay); @@ -84,9 +85,11 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { )?; } - if !dest_code.is_empty() { + if let Some(dest_code_hash) = dest_code_hash { + let dest_code = code::load::(dest_code_hash)?; + vm::execute( - &dest_code, + &dest_code.code, data, output_data, &mut CallContext { @@ -126,13 +129,14 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { let dest = T::DetermineContractAddress::contract_address_for(init_code, data, &self.self_account); - if !self.overlay.get_code(&dest).is_empty() { + if self.overlay.get_code(&dest).is_some() { // It should be enough to check only the code. return Err("contract already exists"); } let (change_set, events) = { let mut overlay = OverlayAccountDb::new(&self.overlay); + // TODO: save the code hash in the overlay. let mut nested = ExecutionContext { overlay: overlay, @@ -166,7 +170,6 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { gas_meter, ).map_err(|_| "vm execute returned error while create")?; - nested.overlay.set_code(&dest, contract_code); (nested.overlay.into_change_set(), nested.events) }; diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 21fa776e12237..3c288c8434a3b 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -100,7 +100,7 @@ use double_map::StorageDoubleMap; use rstd::prelude::*; use rstd::marker::PhantomData; use codec::{Codec, HasCompact}; -use runtime_primitives::traits::{Hash, As, SimpleArithmetic}; +use runtime_primitives::traits::{Member, Hash, As, SimpleArithmetic}; use runtime_support::dispatch::Result; use runtime_support::{Parameter, StorageMap, StorageValue}; use system::ensure_signed; @@ -114,6 +114,8 @@ pub trait Trait: balances::Trait { /// The overarching event type. type Event: From> + Into<::Event>; + + type CodeHash: Parameter + Member + Default + Copy + Clone + rstd::hash::Hash + AsRef<[u8]> + AsMut<[u8]>; } pub trait ContractAddressFor { @@ -322,7 +324,7 @@ decl_storage! { /// Current cost schedule for contracts. CurrentSchedule get(current_schedule) config(): Schedule = Schedule::default(); /// The code associated with an account. - pub CodeOf: map T::AccountId => Vec; // TODO Vec values should be optimised to not do a length prefix. + pub CodeHashOf: map T::AccountId => Option; // TODO Vec values should be optimised to not do a length prefix. // pub CodeStorage: map code::CodeHash => code::InstrumentedWasmModule; } @@ -344,7 +346,7 @@ impl double_map::StorageDoubleMap for StorageOf { impl balances::OnFreeBalanceZero for Module { fn on_free_balance_zero(who: &T::AccountId) { - >::remove(who); + >::remove(who); >::remove_prefix(who.clone()); } } From f79aa1402f7eed61f20de27b436a87806442dd2a Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 21 Nov 2018 17:44:05 +0100 Subject: [PATCH 004/108] create takes code_hash --- srml/contract/src/code/mod.rs | 2 +- srml/contract/src/exec.rs | 34 +++++++++++++++++++-------------- srml/contract/src/lib.rs | 15 +++++++-------- srml/contract/src/vm/mod.rs | 2 +- srml/contract/src/vm/runtime.rs | 7 +++++-- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index e30682d725d61..d7e1ad2f379f5 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -60,7 +60,7 @@ pub fn save( panic!() } -pub fn load(hash: T::CodeHash) -> Result { +pub fn load(hash: &T::CodeHash) -> Result { // TODO: Load the version of schedule for the code. Reinstrument if it doesn't match. panic!() } diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index d1681afccaba8..197125d372229 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -49,7 +49,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { dest: T::AccountId, value: T::Balance, gas_meter: &mut GasMeter, - data: &[u8], + input_data: &[u8], output_data: &mut Vec, ) -> Result { if self.depth == self.config.max_depth as usize { @@ -60,7 +60,6 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { return Err("not enough gas to pay base call fee"); } - // TODO: Load code from the storage or cache. let dest_code_hash = self.overlay.get_code(&dest); let (change_set, events) = { @@ -86,11 +85,11 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { } if let Some(dest_code_hash) = dest_code_hash { - let dest_code = code::load::(dest_code_hash)?; + let dest_code = code::load::(&dest_code_hash)?; vm::execute( &dest_code.code, - data, + input_data, output_data, &mut CallContext { ctx: &mut nested, @@ -116,8 +115,8 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { caller: T::AccountId, endowment: T::Balance, gas_meter: &mut GasMeter, - init_code: &[u8], // TODO: Take code hash. - data: &[u8], + code_hash: &T::CodeHash, + input_data: &[u8], ) -> Result, &'static str> { if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot create"); @@ -127,7 +126,11 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { return Err("not enough gas to pay base create fee"); } - let dest = T::DetermineContractAddress::contract_address_for(init_code, data, &self.self_account); + let dest = T::DetermineContractAddress::contract_address_for( + code_hash, + input_data, + &self.self_account + ); if self.overlay.get_code(&dest).is_some() { // It should be enough to check only the code. @@ -136,7 +139,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { let (change_set, events) = { let mut overlay = OverlayAccountDb::new(&self.overlay); - // TODO: save the code hash in the overlay. + overlay.set_code(&dest, Some(code_hash.clone())); let mut nested = ExecutionContext { overlay: overlay, @@ -157,11 +160,14 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { )?; } - let mut contract_code = Vec::new(); + let dest_code = code::load::(code_hash)?; + + // TODO: Do something with the output data. + let mut output_data = Vec::new(); vm::execute( - init_code, - data, - &mut contract_code, + &dest_code.code, + input_data, + &mut output_data, &mut CallContext { ctx: &mut nested, caller: caller, @@ -278,14 +284,14 @@ impl<'a, 'b: 'a, T: Trait + 'b> vm::Ext for CallContext<'a, 'b, T> { fn create( &mut self, - code: &[u8], + code_hash: &T::CodeHash, endowment: T::Balance, gas_meter: &mut GasMeter, data: &[u8], ) -> Result, ()> { let caller = self.ctx.self_account.clone(); self.ctx - .create(caller, endowment, gas_meter, code, &data) + .create(caller, endowment, gas_meter, code_hash, &data) .map_err(|_| ()) } diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 3c288c8434a3b..d8f2f3c3d615a 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -107,7 +107,7 @@ use system::ensure_signed; pub trait Trait: balances::Trait { /// Function type to get the contract address given the creator. - type DetermineContractAddress: ContractAddressFor; + type DetermineContractAddress: ContractAddressFor; // As is needed for wasm-utils type Gas: Parameter + Default + Codec + SimpleArithmetic + Copy + As + As + As; @@ -118,8 +118,8 @@ pub trait Trait: balances::Trait { type CodeHash: Parameter + Member + Default + Copy + Clone + rstd::hash::Hash + AsRef<[u8]> + AsMut<[u8]>; } -pub trait ContractAddressFor { - fn contract_address_for(code: &[u8], data: &[u8], origin: &AccountId) -> AccountId; +pub trait ContractAddressFor { + fn contract_address_for(code_hash: &CodeHash, data: &[u8], origin: &AccountId) -> AccountId; } /// Simple contract address determintator. @@ -130,12 +130,11 @@ pub trait ContractAddressFor { /// Formula: `blake2_256(blake2_256(code) + blake2_256(data) + origin)` pub struct SimpleAddressDeterminator(PhantomData); -impl ContractAddressFor for SimpleAddressDeterminator +impl ContractAddressFor for SimpleAddressDeterminator where T::AccountId: From + AsRef<[u8]> { - fn contract_address_for(code: &[u8], data: &[u8], origin: &T::AccountId) -> T::AccountId { - let code_hash = T::Hashing::hash(code); + fn contract_address_for(code_hash: &T::CodeHash, data: &[u8], origin: &T::AccountId) -> T::AccountId { let data_hash = T::Hashing::hash(data); let mut buf = Vec::new(); @@ -240,7 +239,7 @@ decl_module! { origin, endowment: ::Type, gas_limit: ::Type, - ctor_code: Vec, // TODO: take code hash + code_hash: T::CodeHash, data: Vec ) -> Result { let origin = ensure_signed(origin)?; @@ -261,7 +260,7 @@ decl_module! { events: Vec::new(), config: &cfg, }; - let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &ctor_code, &data); + let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &code_hash, &data); if let Ok(ref r) = result { // Commit all changes that made it thus far into the persistant storage. diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 6aac52c643864..2763a92a2edcd 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -52,7 +52,7 @@ pub trait Ext { /// transfered from this to the newly created account. fn create( &mut self, - code: &[u8], + code: &::CodeHash, value: BalanceOf, gas_meter: &mut GasMeter, data: &[u8], diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/vm/runtime.rs index d32808635957b..2546c9fb93831 100644 --- a/srml/contract/src/vm/runtime.rs +++ b/srml/contract/src/vm/runtime.rs @@ -302,7 +302,10 @@ define_env!(init_env, , input_data_ptr: u32, input_data_len: u32 ) -> u32 => { - let init_code = read_sandbox_memory(ctx, init_code_ptr, init_code_len)?; + let code_hash = { + let code_hash_buf = read_sandbox_memory(ctx, init_code_ptr, init_code_len)?; + <::T as Trait>::CodeHash::decode(&mut &code_hash_buf[..]).ok_or_else(|| sandbox::HostError)? + }; let value = { let value_buf = read_sandbox_memory(ctx, value_ptr, value_len)?; BalanceOf::<::T>::decode(&mut &value_buf[..]) @@ -321,7 +324,7 @@ define_env!(init_env, , let ext = &mut ctx.ext; let create_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { match nested_meter { - Some(nested_meter) => ext.create(&init_code, value, nested_meter, &input_data), + Some(nested_meter) => ext.create(&code_hash, value, nested_meter, &input_data), // there is not enough gas to allocate for the nested call. None => Err(()), } From 32bbbbd91e0b27a874a612a7a978b7376c902610 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 21 Nov 2018 17:59:05 +0100 Subject: [PATCH 005/108] pass mem def and use code in vm::execute --- srml/contract/src/code/mod.rs | 7 +++---- srml/contract/src/exec.rs | 2 ++ srml/contract/src/vm/mod.rs | 17 +++++++++++++---- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index d7e1ad2f379f5..51fc5697e49ad 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -15,7 +15,6 @@ // along with Substrate. If not, see . use codec::Compact; -use runtime_primitives::traits::Hash; use {Schedule, Trait}; mod prepare; @@ -23,9 +22,9 @@ mod prepare; #[derive(Encode, Decode)] pub struct MemoryDefinition { #[codec(compact)] - initial: u32, + pub initial: u32, #[codec(compact)] - maximum: u32, + pub maximum: u32, } #[derive(Encode, Decode)] @@ -33,7 +32,7 @@ pub struct InstrumentedWasmModule { /// Version of the schedule with which the code was instrumented. #[codec(compact)] schedule_version: u32, - memory_def: MemoryDefinition, + pub memory_def: MemoryDefinition, /// Code instrumented with the latest schedule. pub code: Vec, } diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 197125d372229..5b449f9e76189 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -89,6 +89,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { vm::execute( &dest_code.code, + &dest_code.memory_def, input_data, output_data, &mut CallContext { @@ -166,6 +167,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { let mut output_data = Vec::new(); vm::execute( &dest_code.code, + &dest_code.memory_def, input_data, &mut output_data, &mut CallContext { diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 2763a92a2edcd..473b2dd384c5d 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -19,6 +19,7 @@ use exec::CreateReceipt; use gas::GasMeter; +use code::MemoryDefinition; use rstd::prelude::*; use {Trait, Schedule}; use {balances, sandbox, system}; @@ -119,6 +120,7 @@ pub enum Error { /// Execute the given code as a contract. pub fn execute<'a, E: Ext>( code: &[u8], + memory_def: &MemoryDefinition, input_data: &[u8], output_data: &mut Vec, ext: &'a mut E, @@ -128,9 +130,16 @@ pub fn execute<'a, E: Ext>( let env = runtime::init_env(); // TODO: Instantiate memory from the provided memory definition. - // TODO: take code - let memory = sandbox::Memory::new(0, Some(0)).unwrap(); - let instrumented_code = Vec::new(); + let memory = + sandbox::Memory::new( + memory_def.initial, + Some(memory_def.maximum) + ) + .expect( + "memory_def.initial can't be greater than memory_def.maximum; + thus Memory::new must not fail; + qed + "); let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); for (func_name, ext_func) in &env.funcs { @@ -141,7 +150,7 @@ pub fn execute<'a, E: Ext>( let mut runtime = Runtime::new(ext, input_data, output_data, &schedule, memory, gas_meter); // Instantiate the instance from the instrumented module code. - match sandbox::Instance::new(&instrumented_code, &imports, &mut runtime) { + match sandbox::Instance::new(code, &imports, &mut runtime) { // No errors or traps were generated on instantiation! That // means we can now invoke the contract entrypoint. Ok(mut instance) => { From 7f5df273fd2ac4823ed6409e5ce833f6519044b9 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 21 Nov 2018 18:22:34 +0100 Subject: [PATCH 006/108] Actually save and load code --- srml/contract/src/code/mod.rs | 37 +++++++++++++++++++++++++---------- srml/contract/src/exec.rs | 4 ++-- srml/contract/src/lib.rs | 5 +++-- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 51fc5697e49ad..9d51de8678b82 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -15,11 +15,12 @@ // along with Substrate. If not, see . use codec::Compact; -use {Schedule, Trait}; +use runtime_support::StorageMap; +use {Schedule, Trait, CodeStorage, PrestineCode}; mod prepare; -#[derive(Encode, Decode)] +#[derive(Clone, Encode, Decode)] pub struct MemoryDefinition { #[codec(compact)] pub initial: u32, @@ -27,7 +28,7 @@ pub struct MemoryDefinition { pub maximum: u32, } -#[derive(Encode, Decode)] +#[derive(Clone, Encode, Decode)] pub struct InstrumentedWasmModule { /// Version of the schedule with which the code was instrumented. #[codec(compact)] @@ -38,11 +39,10 @@ pub struct InstrumentedWasmModule { } pub fn save( - original_code: &[u8], + original_code: Vec, schedule: &Schedule, ) -> Result<(), &'static str> { - // TODO: panic - // let code_hash = T::Hashing::hash(&original_code); + // TODO: let code_hash = T::Hashing::hash(&original_code); let code_hash = T::CodeHash::default(); // The first time instrumentation is on the user. However, consequent reinstrumentation @@ -54,12 +54,29 @@ pub fn save( )?; // TODO: validate the code. If the code is not valid, then don't store it. - // TODO: put code directly into the storage under a key equal to hash, without involving `AccountDb`. + + >::insert(code_hash, instrumented_module); + >::insert(code_hash, original_code); panic!() } -pub fn load(hash: &T::CodeHash) -> Result { - // TODO: Load the version of schedule for the code. Reinstrument if it doesn't match. - panic!() +pub fn load(code_hash: &T::CodeHash, schedule: &Schedule,) -> Result { + let instrumented_module = >::get(code_hash).ok_or_else(|| "code is not found")?; + + if instrumented_module.schedule_version < schedule.version { + let original_code = >::get(code_hash).ok_or_else(|| "prestine code is not found")?; + + let instrumented_module = prepare::prepare_contract::( + &original_code, + schedule, + |_, _| true, // TODO: Use real validation function. + )?; + + >::insert(code_hash, instrumented_module.clone()); + + Ok(instrumented_module) + } else { + Ok(instrumented_module) + } } diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 5b449f9e76189..d672ec3f4a7f3 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -85,7 +85,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { } if let Some(dest_code_hash) = dest_code_hash { - let dest_code = code::load::(&dest_code_hash)?; + let dest_code = code::load::(&dest_code_hash, &self.config.schedule)?; vm::execute( &dest_code.code, @@ -161,7 +161,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { )?; } - let dest_code = code::load::(code_hash)?; + let dest_code = code::load::(code_hash, &self.config.schedule)?; // TODO: Do something with the output data. let mut output_data = Vec::new(); diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index d8f2f3c3d615a..bfd92d06c0ba8 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -174,7 +174,7 @@ decl_module! { // TODO: Return code hash and deposit an event? - code::save::(&code, &schedule)?; + code::save::(code, &schedule)?; Ok(()) } @@ -325,7 +325,8 @@ decl_storage! { /// The code associated with an account. pub CodeHashOf: map T::AccountId => Option; // TODO Vec values should be optimised to not do a length prefix. - // pub CodeStorage: map code::CodeHash => code::InstrumentedWasmModule; + pub PrestineCode: map T::CodeHash => Option>; + pub CodeStorage: map T::CodeHash => Option; } } From ee53c8c9156e260121649642f6d100764b04e66e Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 21 Nov 2018 18:50:43 +0100 Subject: [PATCH 007/108] Use T::Hash as CodeHash --- srml/contract/src/account_db.rs | 12 ++++++------ srml/contract/src/code/mod.rs | 8 ++++---- srml/contract/src/exec.rs | 6 +++--- srml/contract/src/lib.rs | 20 ++++++++++---------- srml/contract/src/vm/mod.rs | 5 ++--- srml/contract/src/vm/runtime.rs | 4 ++-- 6 files changed, 27 insertions(+), 28 deletions(-) diff --git a/srml/contract/src/account_db.rs b/srml/contract/src/account_db.rs index 694efb33d7a17..cb8fe66d99f0e 100644 --- a/srml/contract/src/account_db.rs +++ b/srml/contract/src/account_db.rs @@ -16,7 +16,7 @@ //! Auxilliaries to help with managing partial changes to accounts state. -use super::{CodeHashOf, StorageOf, Trait}; +use super::{CodeHash, CodeHashOf, StorageOf, Trait}; use double_map::StorageDoubleMap; use rstd::cell::RefCell; use rstd::collections::btree_map::{BTreeMap, Entry}; @@ -27,7 +27,7 @@ use {balances, system}; pub struct ChangeEntry { balance: Option, /// In the case the outer option is None, the code_hash will be untouched. - code: Option>, + code: Option>>, storage: BTreeMap, Option>>, } @@ -46,7 +46,7 @@ pub type ChangeSet = BTreeMap<::AccountId, ChangeEntry pub trait AccountDb { fn get_storage(&self, account: &T::AccountId, location: &[u8]) -> Option>; - fn get_code(&self, account: &T::AccountId) -> Option; + fn get_code(&self, account: &T::AccountId) -> Option>; fn get_balance(&self, account: &T::AccountId) -> T::Balance; fn commit(&mut self, change_set: ChangeSet); @@ -57,7 +57,7 @@ impl AccountDb for DirectAccountDb { fn get_storage(&self, account: &T::AccountId, location: &[u8]) -> Option> { >::get(account.clone(), location.to_vec()) } - fn get_code(&self, account: &T::AccountId) -> Option { + fn get_code(&self, account: &T::AccountId) -> Option> { >::get(account) } fn get_balance(&self, account: &T::AccountId) -> T::Balance { @@ -122,7 +122,7 @@ impl<'a, T: Trait> OverlayAccountDb<'a, T> { .storage .insert(location, value); } - pub fn set_code(&mut self, account: &T::AccountId, code: Option) { + pub fn set_code(&mut self, account: &T::AccountId, code: Option>) { self.local .borrow_mut() .entry(account.clone()) @@ -147,7 +147,7 @@ impl<'a, T: Trait> AccountDb for OverlayAccountDb<'a, T> { .cloned() .unwrap_or_else(|| self.underlying.get_storage(account, location)) } - fn get_code(&self, account: &T::AccountId) -> Option { + fn get_code(&self, account: &T::AccountId) -> Option> { self.local .borrow() .get(account) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 9d51de8678b82..e4a82b830e40a 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -16,7 +16,8 @@ use codec::Compact; use runtime_support::StorageMap; -use {Schedule, Trait, CodeStorage, PrestineCode}; +use runtime_primitives::traits::Hash; +use {Schedule, Trait, CodeHash, CodeStorage, PrestineCode}; mod prepare; @@ -42,8 +43,7 @@ pub fn save( original_code: Vec, schedule: &Schedule, ) -> Result<(), &'static str> { - // TODO: let code_hash = T::Hashing::hash(&original_code); - let code_hash = T::CodeHash::default(); + let code_hash = T::Hashing::hash(&original_code); // The first time instrumentation is on the user. However, consequent reinstrumentation // due to the schedule changes is on governance system. @@ -61,7 +61,7 @@ pub fn save( panic!() } -pub fn load(code_hash: &T::CodeHash, schedule: &Schedule,) -> Result { +pub fn load(code_hash: &CodeHash, schedule: &Schedule,) -> Result { let instrumented_module = >::get(code_hash).ok_or_else(|| "code is not found")?; if instrumented_module.schedule_version < schedule.version { diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index d672ec3f4a7f3..d3661617f54d7 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use super::{ContractAddressFor, Trait, Event, RawEvent, Config}; +use super::{CodeHash, ContractAddressFor, Trait, Event, RawEvent, Config}; use account_db::{AccountDb, OverlayAccountDb}; use gas::GasMeter; use vm; @@ -116,7 +116,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { caller: T::AccountId, endowment: T::Balance, gas_meter: &mut GasMeter, - code_hash: &T::CodeHash, + code_hash: &CodeHash, input_data: &[u8], ) -> Result, &'static str> { if self.depth == self.config.max_depth as usize { @@ -286,7 +286,7 @@ impl<'a, 'b: 'a, T: Trait + 'b> vm::Ext for CallContext<'a, 'b, T> { fn create( &mut self, - code_hash: &T::CodeHash, + code_hash: &CodeHash, endowment: T::Balance, gas_meter: &mut GasMeter, data: &[u8], diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index bfd92d06c0ba8..622c2bc9ad1f0 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -100,22 +100,22 @@ use double_map::StorageDoubleMap; use rstd::prelude::*; use rstd::marker::PhantomData; use codec::{Codec, HasCompact}; -use runtime_primitives::traits::{Member, Hash, As, SimpleArithmetic}; +use runtime_primitives::traits::{Hash, As, SimpleArithmetic}; use runtime_support::dispatch::Result; use runtime_support::{Parameter, StorageMap, StorageValue}; use system::ensure_signed; +pub type CodeHash = ::Hash; + pub trait Trait: balances::Trait { /// Function type to get the contract address given the creator. - type DetermineContractAddress: ContractAddressFor; + type DetermineContractAddress: ContractAddressFor, Self::AccountId>; // As is needed for wasm-utils type Gas: Parameter + Default + Codec + SimpleArithmetic + Copy + As + As + As; /// The overarching event type. type Event: From> + Into<::Event>; - - type CodeHash: Parameter + Member + Default + Copy + Clone + rstd::hash::Hash + AsRef<[u8]> + AsMut<[u8]>; } pub trait ContractAddressFor { @@ -130,11 +130,11 @@ pub trait ContractAddressFor { /// Formula: `blake2_256(blake2_256(code) + blake2_256(data) + origin)` pub struct SimpleAddressDeterminator(PhantomData); -impl ContractAddressFor for SimpleAddressDeterminator +impl ContractAddressFor, T::AccountId> for SimpleAddressDeterminator where T::AccountId: From + AsRef<[u8]> { - fn contract_address_for(code_hash: &T::CodeHash, data: &[u8], origin: &T::AccountId) -> T::AccountId { + fn contract_address_for(code_hash: &CodeHash, data: &[u8], origin: &T::AccountId) -> T::AccountId { let data_hash = T::Hashing::hash(data); let mut buf = Vec::new(); @@ -239,7 +239,7 @@ decl_module! { origin, endowment: ::Type, gas_limit: ::Type, - code_hash: T::CodeHash, + code_hash: CodeHash, data: Vec ) -> Result { let origin = ensure_signed(origin)?; @@ -323,10 +323,10 @@ decl_storage! { /// Current cost schedule for contracts. CurrentSchedule get(current_schedule) config(): Schedule = Schedule::default(); /// The code associated with an account. - pub CodeHashOf: map T::AccountId => Option; // TODO Vec values should be optimised to not do a length prefix. + pub CodeHashOf: map T::AccountId => Option>; // TODO Vec values should be optimised to not do a length prefix. - pub PrestineCode: map T::CodeHash => Option>; - pub CodeStorage: map T::CodeHash => Option; + pub PrestineCode: map CodeHash => Option>; + pub CodeStorage: map CodeHash => Option; } } diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 473b2dd384c5d..2ac2721260fb5 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -21,7 +21,7 @@ use exec::CreateReceipt; use gas::GasMeter; use code::MemoryDefinition; use rstd::prelude::*; -use {Trait, Schedule}; +use {Trait, Schedule, CodeHash}; use {balances, sandbox, system}; type BalanceOf = ::Balance; @@ -53,7 +53,7 @@ pub trait Ext { /// transfered from this to the newly created account. fn create( &mut self, - code: &::CodeHash, + code: &CodeHash, value: BalanceOf, gas_meter: &mut GasMeter, data: &[u8], @@ -129,7 +129,6 @@ pub fn execute<'a, E: Ext>( ) -> Result<(), Error> { let env = runtime::init_env(); - // TODO: Instantiate memory from the provided memory definition. let memory = sandbox::Memory::new( memory_def.initial, diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/vm/runtime.rs index 2546c9fb93831..20c0da58fd71b 100644 --- a/srml/contract/src/vm/runtime.rs +++ b/srml/contract/src/vm/runtime.rs @@ -23,7 +23,7 @@ use gas::{GasMeter, GasMeterResult}; use runtime_primitives::traits::{As, CheckedMul}; use sandbox; use system; -use Trait; +use {Trait, CodeHash}; type GasOf = <::T as Trait>::Gas; @@ -304,7 +304,7 @@ define_env!(init_env, , ) -> u32 => { let code_hash = { let code_hash_buf = read_sandbox_memory(ctx, init_code_ptr, init_code_len)?; - <::T as Trait>::CodeHash::decode(&mut &code_hash_buf[..]).ok_or_else(|| sandbox::HostError)? + ::T>>::decode(&mut &code_hash_buf[..]).ok_or_else(|| sandbox::HostError)? }; let value = { let value_buf = read_sandbox_memory(ctx, value_ptr, value_len)?; From 045b1d8253063fa77f173b4cac8c125a96507bd4 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 21 Nov 2018 19:09:34 +0100 Subject: [PATCH 008/108] Explicit entrypoint name --- srml/contract/src/exec.rs | 2 ++ srml/contract/src/vm/mod.rs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index d3661617f54d7..aa41a76dc6040 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -88,6 +88,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { let dest_code = code::load::(&dest_code_hash, &self.config.schedule)?; vm::execute( + b"call", &dest_code.code, &dest_code.memory_def, input_data, @@ -166,6 +167,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { // TODO: Do something with the output data. let mut output_data = Vec::new(); vm::execute( + b"deploy", &dest_code.code, &dest_code.memory_def, input_data, diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 2ac2721260fb5..9bbb613b76e28 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -113,12 +113,12 @@ pub enum Error { Memory, } -// TODO: Take a name of a function to execute. // TODO: Instead of taking the code explicitly can we take the code hash? // TODO: Extract code injection stuff and expect the code to be already prepared? /// Execute the given code as a contract. pub fn execute<'a, E: Ext>( + entrypoint: &[u8], code: &[u8], memory_def: &MemoryDefinition, input_data: &[u8], @@ -153,7 +153,7 @@ pub fn execute<'a, E: Ext>( // No errors or traps were generated on instantiation! That // means we can now invoke the contract entrypoint. Ok(mut instance) => { - let err = instance.invoke(b"call", &[], &mut runtime).err(); + let err = instance.invoke(entrypoint, &[], &mut runtime).err(); to_execution_result(runtime, err) } // `start` function trapped. Treat it in the same manner as an execution error. From 1c846b747b18ab1bf897940b1c31bff9ca58424a Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 23 Nov 2018 17:02:58 +0100 Subject: [PATCH 009/108] Return code_hash and deposit an Event --- srml/contract/src/code/mod.rs | 4 ++-- srml/contract/src/lib.rs | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index e4a82b830e40a..5db1c6c5e5d69 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -42,7 +42,7 @@ pub struct InstrumentedWasmModule { pub fn save( original_code: Vec, schedule: &Schedule, -) -> Result<(), &'static str> { +) -> Result, &'static str> { let code_hash = T::Hashing::hash(&original_code); // The first time instrumentation is on the user. However, consequent reinstrumentation @@ -58,7 +58,7 @@ pub fn save( >::insert(code_hash, instrumented_module); >::insert(code_hash, original_code); - panic!() + Ok(code_hash) } pub fn load(code_hash: &CodeHash, schedule: &Schedule,) -> Result { diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 622c2bc9ad1f0..353d3baa32ef7 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -172,9 +172,8 @@ decl_module! { // TODO: deduct some freebalance according to price per byte according to // the schedule. - // TODO: Return code hash and deposit an event? - - code::save::(code, &schedule)?; + let code_hash = code::save::(code, &schedule)?; + Self::deposit_event(RawEvent::CodeStored(code_hash)); Ok(()) } @@ -291,7 +290,8 @@ decl_event! { pub enum Event where ::Balance, - ::AccountId + ::AccountId, + ::Hash { /// Transfer happened `from` -> `to` with given `value` as part of a `message-call` or `create`. Transfer(AccountId, AccountId, Balance), @@ -299,6 +299,9 @@ decl_event! { /// Contract deployed by address at the specified address. Created(AccountId, AccountId), + /// Code with the specified hash has been stored. + CodeStored(Hash), + /// Triggered when the current schedule is updated. ScheduleUpdated(u32), } From 29fd7b20124318db7ea6cd0a5e92285487b5040a Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 28 Nov 2018 17:06:07 +0100 Subject: [PATCH 010/108] Charge for deployed code with gas. --- srml/contract/src/code/mod.rs | 12 +++++++++++- srml/contract/src/lib.rs | 24 ++++++++++++++++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 5db1c6c5e5d69..31d209f83f83c 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -16,7 +16,8 @@ use codec::Compact; use runtime_support::StorageMap; -use runtime_primitives::traits::Hash; +use runtime_primitives::traits::{As, Hash, CheckedMul}; +use gas::GasMeter; use {Schedule, Trait, CodeHash, CodeStorage, PrestineCode}; mod prepare; @@ -41,8 +42,17 @@ pub struct InstrumentedWasmModule { pub fn save( original_code: Vec, + gas_meter: &mut GasMeter, schedule: &Schedule, ) -> Result, &'static str> { + let code_len_in_gas = >::sa(original_code.len() as u64); + let cost = schedule.put_code_per_byte_cost + .checked_mul(&code_len_in_gas) + .ok_or_else(|| "overflow occured when calculating put_code price")?; + if gas_meter.charge(cost).is_out_of_gas() { + return Err("there is not enough gas"); + } + let code_hash = T::Hashing::hash(&original_code); // The first time instrumentation is on the user. However, consequent reinstrumentation diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 353d3baa32ef7..f6310dc8b419f 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -165,17 +165,25 @@ decl_module! { Ok(()) } - fn put_code(origin, code: Vec) -> Result { + fn put_code( + origin, + gas_limit: ::Type, + code: Vec + ) -> Result { let origin = ensure_signed(origin)?; + let gas_limit = gas_limit.into(); let schedule = >::current_schedule(); - // TODO: deduct some freebalance according to price per byte according to - // the schedule. + let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; - let code_hash = code::save::(code, &schedule)?; - Self::deposit_event(RawEvent::CodeStored(code_hash)); + let result = code::save::(code, &mut gas_meter, &schedule); + if let Ok(code_hash) = result { + Self::deposit_event(RawEvent::CodeStored(code_hash)); + } - Ok(()) + gas::refund_unused_gas::(&origin, gas_meter); + + result.map(|_| ()) } /// Make a call to a specified account, optionally transferring some balance. @@ -391,6 +399,9 @@ pub struct Schedule { /// Version of the schedule. pub version: u32, + /// Cost of putting a byte of code into the storage. + pub put_code_per_byte_cost: Gas, + /// Gas cost of a growing memory by single page. pub grow_mem_cost: Gas, @@ -421,6 +432,7 @@ impl> Default for Schedule { fn default() -> Schedule { Schedule { version: 0, + put_code_per_byte_cost: Gas::sa(1), grow_mem_cost: Gas::sa(1), regular_op_cost: Gas::sa(1), return_data_per_byte_cost: Gas::sa(1), From 40163e4a9904f369e14051b4689c7c994ce78f2a Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 29 Nov 2018 12:11:19 +0100 Subject: [PATCH 011/108] ImportSatisfyCheck and FunctionImplProvider --- srml/contract/src/vm/env_def/macros.rs | 51 ++++++++++++++++++++++++++ srml/contract/src/vm/env_def/mod.rs | 22 +++++++++++ 2 files changed, 73 insertions(+) diff --git a/srml/contract/src/vm/env_def/macros.rs b/srml/contract/src/vm/env_def/macros.rs index c751bd0c12728..e5d91624068ec 100644 --- a/srml/contract/src/vm/env_def/macros.rs +++ b/srml/contract/src/vm/env_def/macros.rs @@ -42,6 +42,22 @@ macro_rules! gen_signature { ); } +#[macro_export] +macro_rules! gen_signature_dispatch { + ( $needle_name:ident, $needle_sig:ident ; $name:ident ( $ctx:ident $( , $names:ident : $params:ty )* ) $( -> $returns:ty )* , $($rest:tt)* ) => { + if stringify!($name).as_bytes() == $needle_name { + let signature = gen_signature!( ( $( $params ),* ) $( -> $returns )* ); + if $needle_sig == &signature { + return true; + } + } else { + gen_signature_dispatch!($needle_name, $needle_sig ; $($rest)*); + } + }; + ( $needle_name:ident, $needle_sig:ident ; ) => { + }; +} + /// Unmarshall arguments and then execute `body` expression and return its result. macro_rules! unmarshall_then_body { ( $body:tt, $ctx:ident, $args_iter:ident, $( $names:ident : $params:ty ),* ) => ({ @@ -120,6 +136,24 @@ macro_rules! define_func { }; } +#[macro_export] +macro_rules! register_func { + ( $reg_cb:ident, < E: $ext_ty:tt > ; ) => {}; + + ( $reg_cb:ident, < E: $ext_ty:tt > ; $name:ident ( $ctx:ident $( , $names:ident : $params:ty )* ) $( -> $returns:ty )* => $body:tt $($rest:tt)* ) => { + $reg_cb( + stringify!($name).as_bytes(), + { + define_func!( + < E: $ext_ty > $name ( $ctx $(, $names : $params )* ) $( -> $returns )* => $body + ); + $name:: + } + ); + register_func!( $reg_cb, < E: $ext_ty > ; $($rest)* ); + }; +} + /// Define a function set that can be imported by executing wasm code. /// /// **NB**: Be advised that all functions defined by this macro @@ -132,6 +166,23 @@ macro_rules! define_env { $( $name:ident ( $ctx:ident $( , $names:ident : $params:ty )* ) $( -> $returns:ty )* => $body:tt , )* ) => { + // pub struct $init_name; + pub struct derp; + + impl $crate::vm::env_def::ImportSatisfyCheck for derp { + fn can_satisfy(&self, name: &[u8], func_type: &$crate::parity_wasm::elements::FunctionType) -> bool { + gen_signature_dispatch!( name, func_type ; $( $name ( $ctx $(, $names : $params )* ) $( -> $returns )* , )* ); + + return false; + } + } + + impl $crate::vm::env_def::FunctionImplProvider for derp { + fn impls)>(&self, f: &mut F) { + register_func!(f, < E: $ext_ty > ; $( $name ( $ctx $( , $names : $params )* ) $( -> $returns)* => $body )* ); + } + } + pub(crate) fn $init_name() -> $crate::vm::env_def::HostFunctionSet { let mut env = $crate::vm::env_def::HostFunctionSet::new(); diff --git a/srml/contract/src/vm/env_def/mod.rs b/srml/contract/src/vm/env_def/mod.rs index d66e1b8961ac8..78243ab64f47f 100644 --- a/srml/contract/src/vm/env_def/mod.rs +++ b/srml/contract/src/vm/env_def/mod.rs @@ -108,3 +108,25 @@ impl HostFunction { &self.func_type == func_type } } + +// TODO: Can we abstract the macro generation over different State objects (i.e. different from Runtime) +// TODO: Move env def to the root ? + +pub(crate) type HostFunc = + fn( + &mut Runtime, + &[sandbox::TypedValue] + ) -> Result; + +pub(crate) trait FunctionImplProvider { + fn impls)>(&self, f: &mut F); +} + +/// This trait can be used to check whether the host environment can satisfy +/// a requested function import. +pub trait ImportSatisfyCheck { + /// Returns `true` if the host environment contains a function with + /// the specified name and its type matches to the given type, or `false` + /// otherwise. + fn can_satisfy(&self, name: &[u8], func_type: &FunctionType) -> bool; +} From f7b28b306215a3a7e7e0f357d037c9584844aa1b Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 29 Nov 2018 15:33:58 +0100 Subject: [PATCH 012/108] Progress. --- srml/contract/src/vm/env_def/macros.rs | 32 ++++---------------------- srml/contract/src/vm/env_def/mod.rs | 4 ++-- srml/contract/src/vm/mod.rs | 9 ++++---- srml/contract/src/vm/runtime.rs | 2 +- 4 files changed, 12 insertions(+), 35 deletions(-) diff --git a/srml/contract/src/vm/env_def/macros.rs b/srml/contract/src/vm/env_def/macros.rs index e5d91624068ec..c5a33e59144cb 100644 --- a/srml/contract/src/vm/env_def/macros.rs +++ b/srml/contract/src/vm/env_def/macros.rs @@ -166,43 +166,21 @@ macro_rules! define_env { $( $name:ident ( $ctx:ident $( , $names:ident : $params:ty )* ) $( -> $returns:ty )* => $body:tt , )* ) => { - // pub struct $init_name; - pub struct derp; + pub struct $init_name; - impl $crate::vm::env_def::ImportSatisfyCheck for derp { - fn can_satisfy(&self, name: &[u8], func_type: &$crate::parity_wasm::elements::FunctionType) -> bool { + impl $crate::vm::env_def::ImportSatisfyCheck for $init_name { + fn can_satisfy(name: &[u8], func_type: &$crate::parity_wasm::elements::FunctionType) -> bool { gen_signature_dispatch!( name, func_type ; $( $name ( $ctx $(, $names : $params )* ) $( -> $returns )* , )* ); return false; } } - impl $crate::vm::env_def::FunctionImplProvider for derp { - fn impls)>(&self, f: &mut F) { + impl $crate::vm::env_def::FunctionImplProvider for $init_name { + fn impls)>(f: &mut F) { register_func!(f, < E: $ext_ty > ; $( $name ( $ctx $( , $names : $params )* ) $( -> $returns)* => $body )* ); } } - - pub(crate) fn $init_name() -> $crate::vm::env_def::HostFunctionSet { - let mut env = $crate::vm::env_def::HostFunctionSet::new(); - - $( - env.funcs.insert( - stringify!( $name ).into(), - $crate::vm::env_def::HostFunction::new( - gen_signature!( ( $( $params ),* ) $( -> $returns )* ), - { - define_func!( - < E: $ext_ty > $name ( $ctx $(, $names : $params )* ) $( -> $returns )* => $body - ); - $name:: - }, - ), - ); - )* - - env - } }; } diff --git a/srml/contract/src/vm/env_def/mod.rs b/srml/contract/src/vm/env_def/mod.rs index 78243ab64f47f..f3f5739c0336b 100644 --- a/srml/contract/src/vm/env_def/mod.rs +++ b/srml/contract/src/vm/env_def/mod.rs @@ -119,7 +119,7 @@ pub(crate) type HostFunc = ) -> Result; pub(crate) trait FunctionImplProvider { - fn impls)>(&self, f: &mut F); + fn impls)>(f: &mut F); } /// This trait can be used to check whether the host environment can satisfy @@ -128,5 +128,5 @@ pub trait ImportSatisfyCheck { /// Returns `true` if the host environment contains a function with /// the specified name and its type matches to the given type, or `false` /// otherwise. - fn can_satisfy(&self, name: &[u8], func_type: &FunctionType) -> bool; + fn can_satisfy(name: &[u8], func_type: &FunctionType) -> bool; } diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 9bbb613b76e28..d5593c049032b 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -18,6 +18,7 @@ //! represented in wasm. use exec::CreateReceipt; +use vm::env_def::FunctionImplProvider; use gas::GasMeter; use code::MemoryDefinition; use rstd::prelude::*; @@ -127,8 +128,6 @@ pub fn execute<'a, E: Ext>( schedule: &Schedule<::Gas>, gas_meter: &mut GasMeter, ) -> Result<(), Error> { - let env = runtime::init_env(); - let memory = sandbox::Memory::new( memory_def.initial, @@ -141,9 +140,9 @@ pub fn execute<'a, E: Ext>( "); let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); - for (func_name, ext_func) in &env.funcs { - imports.add_host_func("env", &func_name[..], ext_func.raw_fn_ptr()); - } + runtime::Env::impls(&mut |name, func_ptr| { + imports.add_host_func("env", name, func_ptr); + }); imports.add_memory("env", "memory", memory.clone()); let mut runtime = Runtime::new(ext, input_data, output_data, &schedule, memory, gas_meter); diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/vm/runtime.rs index 20c0da58fd71b..230d35e39cfa0 100644 --- a/srml/contract/src/vm/runtime.rs +++ b/srml/contract/src/vm/runtime.rs @@ -163,7 +163,7 @@ fn write_sandbox_memory( // Define a function `fn init_env() -> HostFunctionSet` that returns // a function set which can be imported by an executed contract. -define_env!(init_env, , +define_env!(Env, , // Account for used gas. Traps if gas used is greater than gas limit. // From 0a08178417c57472d077d5364466166efdb4df0b Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 29 Nov 2018 15:53:24 +0100 Subject: [PATCH 013/108] Use new infrastructure for checking imports --- srml/contract/src/code/mod.rs | 7 ++-- srml/contract/src/code/prepare.rs | 13 +++----- srml/contract/src/vm/env_def/macros.rs | 2 +- srml/contract/src/vm/env_def/mod.rs | 46 -------------------------- srml/contract/src/vm/mod.rs | 6 ++-- 5 files changed, 12 insertions(+), 62 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 31d209f83f83c..9688b4af5edad 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -18,6 +18,7 @@ use codec::Compact; use runtime_support::StorageMap; use runtime_primitives::traits::{As, Hash, CheckedMul}; use gas::GasMeter; +use vm::runtime::Env; use {Schedule, Trait, CodeHash, CodeStorage, PrestineCode}; mod prepare; @@ -57,10 +58,9 @@ pub fn save( // The first time instrumentation is on the user. However, consequent reinstrumentation // due to the schedule changes is on governance system. - let instrumented_module = prepare::prepare_contract::( + let instrumented_module = prepare::prepare_contract::( &original_code, schedule, - |_, _| true, // TODO: Use real validation function. )?; // TODO: validate the code. If the code is not valid, then don't store it. @@ -77,10 +77,9 @@ pub fn load(code_hash: &CodeHash, schedule: &Schedule,) -> if instrumented_module.schedule_version < schedule.version { let original_code = >::get(code_hash).ok_or_else(|| "prestine code is not found")?; - let instrumented_module = prepare::prepare_contract::( + let instrumented_module = prepare::prepare_contract::( &original_code, schedule, - |_, _| true, // TODO: Use real validation function. )?; >::insert(code_hash, instrumented_module.clone()); diff --git a/srml/contract/src/code/prepare.rs b/srml/contract/src/code/prepare.rs index 35315de923b20..3af3974068f48 100644 --- a/srml/contract/src/code/prepare.rs +++ b/srml/contract/src/code/prepare.rs @@ -24,6 +24,7 @@ use pwasm_utils; use pwasm_utils::rules; use rstd::prelude::*; use runtime_primitives::traits::As; +use vm::env_def::ImportSatisfyCheck; use {Schedule, Trait}; struct ContractModule<'a, Gas: 'a> { @@ -107,10 +108,7 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { /// - checks any imported function against defined host functions set, incl. /// their signatures. /// - if there is a memory import, returns it's descriptor - fn scan_imports bool>( - &self, - check: C, - ) -> Result, &'static str> { + fn scan_imports(&self) -> Result, &'static str> { let module = self .module .as_ref() @@ -144,7 +142,7 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { .get(*type_idx as usize) .ok_or_else(|| "validation: import entry points to a non-existent type")?; - if !check(import.field().as_bytes(), func_ty) { + if !C::can_satisfy(import.field().as_bytes(), func_ty) { return Err("module imports a non-existent function"); } } @@ -171,17 +169,16 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { /// - all imported functions from the external environment matches defined by `env` module, /// /// The preprocessing includes injecting code for gas metering and metering the height of stack. -pub fn prepare_contract bool>( +pub fn prepare_contract( original_code: &[u8], schedule: &Schedule, - check: C, ) -> Result { let mut contract_module = ContractModule::new(original_code, schedule)?; contract_module.ensure_no_internal_memory()?; contract_module.inject_gas_metering()?; contract_module.inject_stack_height_metering()?; - let memory_def = if let Some(memory_type) = contract_module.scan_imports(check)? { + let memory_def = if let Some(memory_type) = contract_module.scan_imports::()? { // Inspect the module to extract the initial and maximum page count. let limits = memory_type.limits(); match (limits.initial(), limits.maximum()) { diff --git a/srml/contract/src/vm/env_def/macros.rs b/srml/contract/src/vm/env_def/macros.rs index c5a33e59144cb..3550382f4c594 100644 --- a/srml/contract/src/vm/env_def/macros.rs +++ b/srml/contract/src/vm/env_def/macros.rs @@ -17,7 +17,7 @@ //! Definition of macros that hides boilerplate of defining external environment //! for a wasm module. //! -//! Typically you should use `define_env` macro. +//! Most likely you should use `define_env` macro. #[macro_export] macro_rules! convert_args { diff --git a/srml/contract/src/vm/env_def/mod.rs b/srml/contract/src/vm/env_def/mod.rs index f3f5739c0336b..0fbb05088b426 100644 --- a/srml/contract/src/vm/env_def/mod.rs +++ b/srml/contract/src/vm/env_def/mod.rs @@ -66,52 +66,6 @@ impl ConvertibleToWasm for u64 { } } -/// Represents a set of function that defined in this particular environment and -/// which can be imported and called by the module. -pub(crate) struct HostFunctionSet { - /// Functions which defined in the environment. - pub funcs: BTreeMap, HostFunction>, -} -impl HostFunctionSet { - pub fn new() -> Self { - HostFunctionSet { - funcs: BTreeMap::new(), - } - } -} - -pub(crate) struct HostFunction { - pub(crate) f: fn(&mut Runtime, &[sandbox::TypedValue]) - -> Result, - func_type: FunctionType, -} -impl HostFunction { - /// Create a new instance of a host function. - pub fn new( - func_type: FunctionType, - f: fn(&mut Runtime, &[sandbox::TypedValue]) - -> Result, - ) -> Self { - HostFunction { func_type, f } - } - - /// Returns a function pointer of this host function. - pub fn raw_fn_ptr( - &self, - ) -> fn(&mut Runtime, &[sandbox::TypedValue]) - -> Result { - self.f - } - - /// Check if the this function could be invoked with the given function signature. - pub fn func_type_matches(&self, func_type: &FunctionType) -> bool { - &self.func_type == func_type - } -} - -// TODO: Can we abstract the macro generation over different State objects (i.e. different from Runtime) -// TODO: Move env def to the root ? - pub(crate) type HostFunc = fn( &mut Runtime, diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index d5593c049032b..175728e59a678 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -29,8 +29,8 @@ type BalanceOf = ::Balance; type AccountIdOf = ::AccountId; #[macro_use] -mod env_def; -mod runtime; +pub mod env_def; +pub mod runtime; use self::runtime::{to_execution_result, Runtime}; @@ -140,10 +140,10 @@ pub fn execute<'a, E: Ext>( "); let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); + imports.add_memory("env", "memory", memory.clone()); runtime::Env::impls(&mut |name, func_ptr| { imports.add_host_func("env", name, func_ptr); }); - imports.add_memory("env", "memory", memory.clone()); let mut runtime = Runtime::new(ext, input_data, output_data, &schedule, memory, gas_meter); From 487c6304b23e5e627c318784ce8aac2f32126d0c Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 1 Dec 2018 13:19:22 +0000 Subject: [PATCH 014/108] Rename entrypoint to entrypoint_name --- srml/contract/src/vm/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 175728e59a678..add8b5d3ad1d9 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -119,7 +119,7 @@ pub enum Error { /// Execute the given code as a contract. pub fn execute<'a, E: Ext>( - entrypoint: &[u8], + entrypoint_name: &[u8], code: &[u8], memory_def: &MemoryDefinition, input_data: &[u8], @@ -152,7 +152,7 @@ pub fn execute<'a, E: Ext>( // No errors or traps were generated on instantiation! That // means we can now invoke the contract entrypoint. Ok(mut instance) => { - let err = instance.invoke(entrypoint, &[], &mut runtime).err(); + let err = instance.invoke(entrypoint_name, &[], &mut runtime).err(); to_execution_result(runtime, err) } // `start` function trapped. Treat it in the same manner as an execution error. From 62e7b5d9d7a01dfd572f2fddc391f7ac3b578c05 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 3 Dec 2018 17:17:08 +0100 Subject: [PATCH 015/108] Use strings instead of a Error enum --- srml/contract/src/exec.rs | 4 +-- srml/contract/src/vm/mod.rs | 44 ++------------------------------- srml/contract/src/vm/runtime.rs | 6 ++--- 3 files changed, 7 insertions(+), 47 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index aa41a76dc6040..2a40c20025b1c 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -99,7 +99,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { }, &self.config.schedule, gas_meter, - ).map_err(|_| "vm execute returned error while call")?; + )?; } (nested.overlay.into_change_set(), nested.events) @@ -178,7 +178,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { }, &self.config.schedule, gas_meter, - ).map_err(|_| "vm execute returned error while create")?; + )?; (nested.overlay.into_change_set(), nested.events) }; diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index add8b5d3ad1d9..97635d7b2cf6c 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -74,46 +74,6 @@ pub trait Ext { fn caller(&self) -> &AccountIdOf; } -/// Error that can occur while preparing or executing wasm smart-contract. -#[derive(Debug, PartialEq, Eq)] -pub enum Error { - /// Error happened while serializing the module. - Serialization, - - /// Error happened while deserializing the module. - Deserialization, - - /// Internal memory declaration has been found in the module. - InternalMemoryDeclared, - - /// Gas instrumentation failed. - /// - /// This most likely indicates the module isn't valid. - GasInstrumentation, - - /// Stack instrumentation failed. - /// - /// This most likely indicates the module isn't valid. - StackHeightInstrumentation, - - /// Error happened during invocation of the contract's entrypoint. - /// - /// Most likely because of trap. - Invoke, - - /// Error happened during instantiation. - /// - /// This might indicate that `start` function trapped, or module isn't - /// instantiable and/or unlinkable. - Instantiate, - - /// Memory creation error. - /// - /// This might happen when the memory import has invalid descriptor or - /// requested too much resources. - Memory, -} - // TODO: Instead of taking the code explicitly can we take the code hash? // TODO: Extract code injection stuff and expect the code to be already prepared? @@ -127,7 +87,7 @@ pub fn execute<'a, E: Ext>( ext: &'a mut E, schedule: &Schedule<::Gas>, gas_meter: &mut GasMeter, -) -> Result<(), Error> { +) -> Result<(), &'static str> { let memory = sandbox::Memory::new( memory_def.initial, @@ -159,7 +119,7 @@ pub fn execute<'a, E: Ext>( Err(err @ sandbox::Error::Execution) => to_execution_result(runtime, Some(err)), // Other instantiation errors. // Return without executing anything. - Err(_) => return Err(Error::Instantiate), + Err(_) => return Err("failed to instantiate the contract"), } } diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/vm/runtime.rs index 230d35e39cfa0..1bae52e61dc05 100644 --- a/srml/contract/src/vm/runtime.rs +++ b/srml/contract/src/vm/runtime.rs @@ -16,7 +16,7 @@ //! Environment definition of the wasm smart-contract runtime. -use super::{BalanceOf, Schedule, CreateReceipt, Error, Ext}; +use super::{BalanceOf, Schedule, CreateReceipt, Ext}; use rstd::prelude::*; use codec::{Decode, Encode}; use gas::{GasMeter, GasMeterResult}; @@ -75,7 +75,7 @@ impl<'a, 'data, E: Ext + 'a> Runtime<'a, 'data, E> { pub(crate) fn to_execution_result( runtime: Runtime, sandbox_err: Option, -) -> Result<(), Error> { +) -> Result<(), &'static str> { // Check the exact type of the error. It could be plain trap or // special runtime trap the we must recognize. match (sandbox_err, runtime.special_trap) { @@ -84,7 +84,7 @@ pub(crate) fn to_execution_result( // Special case. The trap was the result of the execution `return` host function. (Some(sandbox::Error::Execution), Some(SpecialTrap::Return)) => Ok(()), // Any other kind of a trap should result in a failure. - (Some(_), _) => Err(Error::Invoke), + (Some(_), _) => Err("execution has lead to a trap"), // Any other case (such as special trap flag without actual trap) signifies // a logic error. _ => unreachable!(), From 09d9a2bd703e78df035d944bd8a8602b30c4edc8 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 3 Dec 2018 17:52:35 +0100 Subject: [PATCH 016/108] Clean --- srml/contract/src/code/prepare.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srml/contract/src/code/prepare.rs b/srml/contract/src/code/prepare.rs index 3af3974068f48..dd35997bdcc1c 100644 --- a/srml/contract/src/code/prepare.rs +++ b/srml/contract/src/code/prepare.rs @@ -19,7 +19,7 @@ use super::{InstrumentedWasmModule, MemoryDefinition}; -use parity_wasm::elements::{self, External, FunctionType, MemoryType, Type}; +use parity_wasm::elements::{self, External, MemoryType, Type}; use pwasm_utils; use pwasm_utils::rules; use rstd::prelude::*; From e520a2d597ecddd86d2a267b404c455b0e1557df Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 7 Dec 2018 13:00:20 +0100 Subject: [PATCH 017/108] WIP --- srml/contract/src/code/prepare.rs | 122 ++- srml/contract/src/tests.rs | 1676 ++++++++++++++--------------- srml/contract/src/vm/mod.rs | 19 +- 3 files changed, 871 insertions(+), 946 deletions(-) diff --git a/srml/contract/src/code/prepare.rs b/srml/contract/src/code/prepare.rs index dd35997bdcc1c..51d8776d60cc1 100644 --- a/srml/contract/src/code/prepare.rs +++ b/srml/contract/src/code/prepare.rs @@ -218,68 +218,66 @@ pub fn prepare_contract( mod tests { use super::*; use std::fmt; - use vm::tests::MockExt; use wabt; - impl fmt::Debug for PreparedContract { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "PreparedContract {{ .. }}") - } - } - - fn parse_and_prepare_wat(wat: &str) -> Result { - let wasm = wabt::Wat2Wasm::new().validate(false).convert(wat).unwrap(); - let schedule = Schedule::::default(); - let env = ::vm::runtime::init_env(); - prepare_contract::(wasm.as_ref(), &schedule, &env) - } - - #[test] - fn internal_memory_declaration() { - let r = parse_and_prepare_wat(r#"(module (memory 1 1))"#); - assert_matches!(r, Err(Error::InternalMemoryDeclared)); - } - - #[test] - fn memory() { - // This test assumes that maximum page number is configured to a certain number. - assert_eq!(Schedule::::default().max_memory_pages, 16); - - let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 1)))"#); - assert_matches!(r, Ok(_)); - - // No memory import - let r = parse_and_prepare_wat(r#"(module)"#); - assert_matches!(r, Ok(_)); - - // initial exceed maximum - let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 16 1)))"#); - assert_matches!(r, Err(Error::Memory)); - - // no maximum - let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1)))"#); - assert_matches!(r, Err(Error::Memory)); - - // requested maximum exceed configured maximum - let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 17)))"#); - assert_matches!(r, Err(Error::Memory)); - } - - #[test] - fn imports() { - // nothing can be imported from non-"env" module for now. - let r = parse_and_prepare_wat(r#"(module (import "another_module" "memory" (memory 1 1)))"#); - assert_matches!(r, Err(Error::Instantiate)); - - let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i32))))"#); - assert_matches!(r, Ok(_)); - - // wrong signature - let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i64))))"#); - assert_matches!(r, Err(Error::Instantiate)); - - // unknown function name - let r = parse_and_prepare_wat(r#"(module (import "env" "unknown_func" (func)))"#); - assert_matches!(r, Err(Error::Instantiate)); - } + // impl fmt::Debug for PreparedContract { + // fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + // write!(f, "PreparedContract {{ .. }}") + // } + // } + + // fn parse_and_prepare_wat(wat: &str) -> Result { + // let wasm = wabt::Wat2Wasm::new().validate(false).convert(wat).unwrap(); + // let schedule = Schedule::::default(); + // prepare_contract::(wasm.as_ref(), &schedule) + // } + + // #[test] + // fn internal_memory_declaration() { + // let r = parse_and_prepare_wat(r#"(module (memory 1 1))"#); + // assert_matches!(r, Err("")); + // } + + // #[test] + // fn memory() { + // // This test assumes that maximum page number is configured to a certain number. + // assert_eq!(Schedule::::default().max_memory_pages, 16); + + // let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 1)))"#); + // assert_matches!(r, Ok(_)); + + // // No memory import + // let r = parse_and_prepare_wat(r#"(module)"#); + // assert_matches!(r, Ok(_)); + + // // initial exceed maximum + // let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 16 1)))"#); + // assert_matches!(r, Err(Error::Memory)); + + // // no maximum + // let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1)))"#); + // assert_matches!(r, Err(Error::Memory)); + + // // requested maximum exceed configured maximum + // let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 17)))"#); + // assert_matches!(r, Err(Error::Memory)); + // } + + // #[test] + // fn imports() { + // // nothing can be imported from non-"env" module for now. + // let r = parse_and_prepare_wat(r#"(module (import "another_module" "memory" (memory 1 1)))"#); + // assert_matches!(r, Err(Error::Instantiate)); + + // let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i32))))"#); + // assert_matches!(r, Ok(_)); + + // // wrong signature + // let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i64))))"#); + // assert_matches!(r, Err(Error::Instantiate)); + + // // unknown function name + // let r = parse_and_prepare_wat(r#"(module (import "env" "unknown_func" (func)))"#); + // assert_matches!(r, Err(Error::Instantiate)); + // } } diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index 330f11a3b2687..75a18b0b8b472 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -24,7 +24,7 @@ use substrate_primitives::{Blake2Hasher}; use system::{Phase, EventRecord}; use wabt; use { - runtime_io, balances, system, CodeOf, ContractAddressFor, + runtime_io, balances, system, ContractAddressFor, GenesisConfig, Module, StorageOf, Trait, RawEvent, }; @@ -73,885 +73,801 @@ type Contract = Module; type System = system::Module; pub struct DummyContractAddressFor; -impl ContractAddressFor for DummyContractAddressFor { - fn contract_address_for(_code: &[u8], _data: &[u8], origin: &u64) -> u64 { - origin + 1 +impl ContractAddressFor for DummyContractAddressFor { + fn contract_address_for(code_hash: &H256, data: &[u8], origin: &u64) -> u64 { + panic!() } } -struct ExtBuilder { - existential_deposit: u64, - gas_price: u64, - block_gas_limit: u64, - transfer_fee: u64, - creation_fee: u64, -} -impl Default for ExtBuilder { - fn default() -> Self { - Self { - existential_deposit: 0, - gas_price: 2, - block_gas_limit: 100_000_000, - transfer_fee: 0, - creation_fee: 0, - } - } -} -impl ExtBuilder { - fn existential_deposit(mut self, existential_deposit: u64) -> Self { - self.existential_deposit = existential_deposit; - self - } - fn gas_price(mut self, gas_price: u64) -> Self { - self.gas_price = gas_price; - self - } - fn block_gas_limit(mut self, block_gas_limit: u64) -> Self { - self.block_gas_limit = block_gas_limit; - self - } - fn transfer_fee(mut self, transfer_fee: u64) -> Self { - self.transfer_fee = transfer_fee; - self - } - fn creation_fee(mut self, creation_fee: u64) -> Self { - self.creation_fee = creation_fee; - self - } - fn build(self) -> runtime_io::TestExternalities { - let mut t = system::GenesisConfig::::default() - .build_storage() - .unwrap().0; - t.extend( - balances::GenesisConfig:: { - balances: vec![], - transaction_base_fee: 0, - transaction_byte_fee: 0, - existential_deposit: self.existential_deposit, - transfer_fee: self.transfer_fee, - creation_fee: self.creation_fee, - reclaim_rebate: 0, - }.build_storage() - .unwrap().0, - ); - t.extend( - GenesisConfig:: { - contract_fee: 21, - call_base_fee: 135, - create_base_fee: 175, - gas_price: self.gas_price, - max_depth: 100, - block_gas_limit: self.block_gas_limit, - current_schedule: Default::default(), - }.build_storage() - .unwrap().0, - ); - runtime_io::TestExternalities::new(t) - } -} - -const CODE_TRANSFER: &str = r#" -(module - ;; ext_call( - ;; callee_ptr: u32, - ;; callee_len: u32, - ;; gas: u64, - ;; value_ptr: u32, - ;; value_len: u32, - ;; input_data_ptr: u32, - ;; input_data_len: u32 - ;; ) -> u32 - (import "env" "ext_call" (func $ext_call (param i32 i32 i64 i32 i32 i32 i32) (result i32))) - (import "env" "memory" (memory 1 1)) - (func (export "call") - (drop - (call $ext_call - (i32.const 4) ;; Pointer to "callee" address. - (i32.const 8) ;; Length of "callee" address. - (i64.const 0) ;; How much gas to devote for the execution. 0 = all. - (i32.const 12) ;; Pointer to the buffer with value to transfer - (i32.const 8) ;; Length of the buffer with value to transfer. - (i32.const 0) ;; Pointer to input data buffer address - (i32.const 0) ;; Length of input data buffer - ) - ) - ) - ;; Destination AccountId to transfer the funds. - ;; Represented by u64 (8 bytes long) in little endian. - (data (i32.const 4) "\09\00\00\00\00\00\00\00") - ;; Amount of value to transfer. - ;; Represented by u64 (8 bytes long) in little endian. - (data (i32.const 12) "\06\00\00\00\00\00\00\00") -) -"#; - -#[test] -fn contract_transfer() { - const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; - const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - - with_externalities(&mut ExtBuilder::default().build(), || { - >::insert(1, code_transfer.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - Balances::set_free_balance(&1, 11); - Balances::increase_total_stake_by(11); - - assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); - - assert_eq!( - Balances::free_balance(&0), - // 3 - value sent with the transaction - // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) - // 2 * 135 - base gas fee for call (by transaction) - // 2 * 135 - base gas fee for call (by the contract) - 100_000_000 - 3 - (2 * 26) - (2 * 135) - (2 * 135), - ); - assert_eq!( - Balances::free_balance(&1), - 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, - ); - assert_eq!( - Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), - CONTRACT_SHOULD_TRANSFER_VALUE, - ); - - assert_eq!(System::events(), vec![ - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::balances( - balances::RawEvent::NewAccount( - CONTRACT_SHOULD_TRANSFER_TO, - 0, - balances::NewAccountOutcome::NoHint - ) - ), - }, - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::contract(RawEvent::Transfer(0, 1, 3)), - }, - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::contract(RawEvent::Transfer(1, CONTRACT_SHOULD_TRANSFER_TO, 6)), - }, - ]); - }); -} - -#[test] -fn contract_transfer_to_death() { - const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; - - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - - with_externalities(&mut ExtBuilder::default().existential_deposit(5).build(), || { - >::insert(1, code_transfer.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - - Balances::set_free_balance(&1, 6); - Balances::increase_total_stake_by(6); - >::insert(1, b"foo".to_vec(), b"1".to_vec()); - - assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); - - assert_eq!( - Balances::free_balance(&0), - // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) - // 2 * 135 - base gas fee for call (by transaction) - // 2 * 135 - base gas fee for call (by the contract) - 100_000_000 - (2 * 26) - (2 * 135) - (2 * 135), - ); - - assert!(!>::exists(1)); - assert!(!>::exists(1, b"foo".to_vec())); - assert_eq!(Balances::free_balance(&1), 0); - - assert_eq!(Balances::free_balance(&9), CONTRACT_SHOULD_TRANSFER_VALUE); - }); -} - -#[test] -fn contract_transfer_takes_creation_fee() { - const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; - const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - - with_externalities(&mut ExtBuilder::default().creation_fee(105).build(), || { - >::insert(1, code_transfer.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - Balances::set_free_balance(&1, 11); - Balances::increase_total_stake_by(11); - - assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); - - assert_eq!( - Balances::free_balance(&0), - // 3 - value sent with the transaction - // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) - // 2 * 135 - base gas fee for call (by transaction) - // 2 * 135 - base gas fee for call (by the contract) - // 104 - (rounded) fee per creation (by the contract) - 100_000_000 - 3 - (2 * 26) - (2 * 135) - (2 * 135) - 104, - ); - assert_eq!( - Balances::free_balance(&1), - 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, - ); - assert_eq!( - Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), - CONTRACT_SHOULD_TRANSFER_VALUE, - ); - }); -} - -#[test] -fn contract_transfer_takes_transfer_fee() { - const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; - const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - - with_externalities(&mut ExtBuilder::default().creation_fee(105).transfer_fee(45).build(), || { - >::insert(1, code_transfer.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - Balances::set_free_balance(&1, 11); - Balances::increase_total_stake_by(11); - - // Create destination account here so we can check that transfer fee - // is charged (and creation fee is not). - Balances::set_free_balance(&CONTRACT_SHOULD_TRANSFER_TO, 25); - - assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); - - assert_eq!( - Balances::free_balance(&0), - // 3 - value sent with the transaction - // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) - // 2 * 135 - base gas fee for call (by transaction) - // 44 - (rounded from 45) fee per transfer (by transaction) - // 2 * 135 - base gas fee for call (by the contract) - // 44 - (rounded from 45) fee per transfer (by the contract) - 100_000_000 - 3 - (2 * 26) - (2 * 135) - 44 - (2 * 135) - 44, - ); - assert_eq!( - Balances::free_balance(&1), - 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, - ); - assert_eq!( - Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), - 25 + CONTRACT_SHOULD_TRANSFER_VALUE, - ); - }); -} - -#[test] -fn contract_transfer_oog() { - const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - - with_externalities(&mut ExtBuilder::default().build(), || { - >::insert(1, code_transfer.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - Balances::set_free_balance(&1, 11); - Balances::increase_total_stake_by(11); - - assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), (135 + 135 + 7).into(), Vec::new())); - - assert_eq!( - Balances::free_balance(&0), - // 3 - value sent with the transaction - // 2 * 7 - gas used by the contract (7) multiplied by gas price (2) - // 2 * 135 - base gas fee for call (by transaction) - // 2 * 135 - base gas fee for call (by contract) - 100_000_000 - 3 - (2 * 7) - (2 * 135) - (2 * 135), - ); - - // Transaction level transfer should succeed. - assert_eq!(Balances::free_balance(&1), 14); - // But `ext_call` should not. - assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 0); - - assert_eq!(System::events(), vec![ - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::contract(RawEvent::Transfer(0, 1, 3)), - }, - ]); - }); -} - -#[test] -fn contract_transfer_max_depth() { - const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - - with_externalities(&mut ExtBuilder::default().build(), || { - >::insert(CONTRACT_SHOULD_TRANSFER_TO, code_transfer.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - Balances::set_free_balance(&CONTRACT_SHOULD_TRANSFER_TO, 11); - Balances::increase_total_stake_by(11); - - assert_ok!(Contract::call(Origin::signed(0), CONTRACT_SHOULD_TRANSFER_TO, 3.into(), 100_000.into(), Vec::new())); - - assert_eq!( - Balances::free_balance(&0), - // 3 - value sent with the transaction - // 2 * 26 * 100 - gas used by the contract (26) multiplied by gas price (2) - // multiplied by max depth (100). - // 2 * 135 * 100 - base gas fee for call (by transaction) multiplied by max depth (100). - 100_000_000 - 3 - (2 * 26 * 100) - (2 * 135 * 100), - ); - assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 14); - }); -} - -/// Convert a byte slice to a string with hex values. -/// -/// Each value is preceeded with a `\` character. -fn escaped_bytestring(bytes: &[u8]) -> String { - use std::fmt::Write; - let mut result = String::new(); - for b in bytes { - write!(result, "\\{:02x}", b).unwrap(); - } - result -} - -/// Create a constructor for the specified code. -/// -/// When constructor is executed, it will call `ext_return` with code that -/// specified in `child_bytecode`. -fn code_ctor(child_bytecode: &[u8]) -> String { - format!( - r#" -(module - ;; ext_return(data_ptr: u32, data_len: u32) -> ! - (import "env" "ext_return" (func $ext_return (param i32 i32))) - (import "env" "memory" (memory 1 1)) - (func (export "call") - (call $ext_return - (i32.const 4) - (i32.const {code_len}) - ) - ;; ext_return is diverging, i.e. doesn't return. - unreachable - ) - (data (i32.const 4) "{escaped_bytecode}") -) -"#, - escaped_bytecode = escaped_bytestring(child_bytecode), - code_len = child_bytecode.len(), - ) -} - -/// Returns code that uses `ext_create` runtime call. -/// -/// Takes bytecode of the contract that needs to be deployed. -fn code_create(constructor: &[u8]) -> String { - format!( - r#" -(module - ;; ext_create( - ;; code_ptr: u32, - ;; code_len: u32, - ;; gas: u64, - ;; value_ptr: u32, - ;; value_len: u32, - ;; input_data_ptr: u32, - ;; input_data_len: u32, - ;; ) -> u32 - (import "env" "ext_create" (func $ext_create (param i32 i32 i64 i32 i32 i32 i32) (result i32))) - (import "env" "memory" (memory 1 1)) - (func (export "call") - (drop - (call $ext_create - (i32.const 12) ;; Pointer to `code` - (i32.const {code_len}) ;; Length of `code` - (i64.const 0) ;; How much gas to devote for the execution. 0 = all. - (i32.const 4) ;; Pointer to the buffer with value to transfer - (i32.const 8) ;; Length of the buffer with value to transfer - (i32.const 0) ;; Pointer to input data buffer address - (i32.const 0) ;; Length of input data buffer - ) - ) - ) - ;; Amount of value to transfer. - ;; Represented by u64 (8 bytes long) in little endian. - (data (i32.const 4) "\03\00\00\00\00\00\00\00") - ;; Embedded wasm code. - (data (i32.const 12) "{escaped_constructor}") -) -"#, - escaped_constructor = escaped_bytestring(constructor), - code_len = constructor.len(), - ) -} - -#[test] -fn contract_create() { - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - let code_ctor_transfer = wabt::wat2wasm(&code_ctor(&code_transfer)).unwrap(); - let code_create = wabt::wat2wasm(&code_create(&code_ctor_transfer)).unwrap(); - - with_externalities(&mut ExtBuilder::default().build(), || { - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - Balances::set_free_balance(&1, 0); - Balances::set_free_balance(&9, 30); - Balances::increase_total_stake_by(30); - - >::insert(1, code_create.to_vec()); - - // When invoked, the contract at address `1` must create a contract with 'transfer' code. - assert_ok!(Contract::call(Origin::signed(0), 1, 11.into(), 100_000.into(), Vec::new())); - - let derived_address = ::DetermineContractAddress::contract_address_for( - &code_ctor_transfer, - &[], - &1, - ); - - // 11 - value sent with the transaction - // 2 * 362 - gas spent by the deployer contract (362) multiplied by gas price (2) - // 2 * 135 - base gas fee for call (top level) - // 2 * 175 - base gas fee for create (by contract) - // ((21 / 2) * 2) - price per account creation - let expected_gas_after_create = - 100_000_000 - 11 - (2 * 362) - (2 * 135) - (2 * 175) - ((21 / 2) * 2); - assert_eq!(Balances::free_balance(&0), expected_gas_after_create); - assert_eq!(Balances::free_balance(&1), 8); - assert_eq!(Balances::free_balance(&derived_address), 3); - - assert_eq!(System::events(), vec![ - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::balances( - balances::RawEvent::NewAccount( - derived_address, - 0, - balances::NewAccountOutcome::NoHint - ) - ), - }, - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::contract(RawEvent::Transfer(0, 1, 11)), - }, - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::contract(RawEvent::Transfer(1, 2, 3)), - }, - ]); - - // Initiate transfer to the newly created contract. - assert_ok!(Contract::call(Origin::signed(0), derived_address, 22.into(), 100_000.into(), Vec::new())); - - assert_eq!( - Balances::free_balance(&0), - // 22 - value sent with the transaction - // (2 * 26) - gas used by the contract - // (2 * 135) - base gas fee for call (top level) - // (2 * 135) - base gas fee for call (by transfer contract) - expected_gas_after_create - 22 - (2 * 26) - (2 * 135) - (2 * 135), - ); - assert_eq!(Balances::free_balance(&derived_address), 22 - 3); - assert_eq!(Balances::free_balance(&9), 36); - }); -} - -#[test] -fn top_level_create() { - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - let code_ctor_transfer = wabt::wat2wasm(&code_ctor(&code_transfer)).unwrap(); - - with_externalities(&mut ExtBuilder::default().gas_price(3).build(), || { - let derived_address = ::DetermineContractAddress::contract_address_for( - &code_ctor_transfer, - &[], - &0, - ); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - Balances::set_free_balance(&derived_address, 30); - Balances::increase_total_stake_by(30); - - assert_ok!(Contract::create( - Origin::signed(0), - 11.into(), - 100_000.into(), - code_ctor_transfer.clone(), - Vec::new(), - )); - - // 11 - value sent with the transaction - // (3 * 129) - gas spent by the init_code. - // (3 * 175) - base gas fee for create (175) (top level) multipled by gas price (3) - // ((21 / 3) * 3) - price for contract creation - assert_eq!( - Balances::free_balance(&0), - 100_000_000 - 11 - (3 * 129) - (3 * 175) - ((21 / 3) * 3) - ); - assert_eq!(Balances::free_balance(&derived_address), 30 + 11); - - assert_eq!(>::get(&derived_address), code_transfer); - - assert_eq!(System::events(), vec![ - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::contract(RawEvent::Transfer(0, derived_address, 11)), - }, - EventRecord { - phase: Phase::ApplyExtrinsic(0), - event: MetaEvent::contract(RawEvent::Created(0, 1)), - }, - ]); - }); -} - -const CODE_NOP: &'static str = r#" -(module - (func (export "call") - nop - ) -) -"#; - -#[test] -fn refunds_unused_gas() { - let code_nop = wabt::wat2wasm(CODE_NOP).unwrap(); - - with_externalities(&mut ExtBuilder::default().build(), || { - >::insert(1, code_nop.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - - assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); - - assert_eq!(Balances::free_balance(&0), 100_000_000 - 4 - (2 * 135)); - }); -} - -#[test] -fn call_with_zero_value() { - with_externalities(&mut ExtBuilder::default().build(), || { - >::insert(1, vec![]); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - - assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); - - assert_eq!(Balances::free_balance(&0), 100_000_000 - (2 * 135)); - }); -} - -#[test] -fn create_with_zero_endowment() { - let code_nop = wabt::wat2wasm(CODE_NOP).unwrap(); - - with_externalities(&mut ExtBuilder::default().build(), || { - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - - assert_ok!(Contract::create(Origin::signed(0), 0.into(), 100_000.into(), code_nop, Vec::new())); - - assert_eq!( - Balances::free_balance(&0), - // 4 - for the gas spent by the constructor - // 2 * 175 - base gas fee for create (175) multiplied by gas price (2) (top level) - 100_000_000 - 4 - (2 * 175), - ); - }); -} - -#[test] -fn account_removal_removes_storage() { - with_externalities( - &mut ExtBuilder::default().existential_deposit(100).build(), - || { - // Setup two accounts with free balance above than exsistential threshold. - { - Balances::set_free_balance(&1, 110); - Balances::increase_total_stake_by(110); - >::insert(1, b"foo".to_vec(), b"1".to_vec()); - >::insert(1, b"bar".to_vec(), b"2".to_vec()); - - Balances::set_free_balance(&2, 110); - Balances::increase_total_stake_by(110); - >::insert(2, b"hello".to_vec(), b"3".to_vec()); - >::insert(2, b"world".to_vec(), b"4".to_vec()); - } - - // Transfer funds from account 1 of such amount that after this transfer - // the balance of account 1 is will be below than exsistential threshold. - // - // This should lead to the removal of all storage associated with this account. - assert_ok!(Balances::transfer(Origin::signed(1), 2.into(), 20.into())); - - // Verify that all entries from account 1 is removed, while - // entries from account 2 is in place. - { - assert_eq!(>::get(1, b"foo".to_vec()), None); - assert_eq!(>::get(1, b"bar".to_vec()), None); - - assert_eq!( - >::get(2, b"hello".to_vec()), - Some(b"3".to_vec()) - ); - assert_eq!( - >::get(2, b"world".to_vec()), - Some(b"4".to_vec()) - ); - } - }, - ); -} - -const CODE_UNREACHABLE: &'static str = r#" -(module - (func (export "call") - nop - unreachable - ) -) -"#; - -#[test] -fn top_level_call_refunds_even_if_fails() { - let code_unreachable = wabt::wat2wasm(CODE_UNREACHABLE).unwrap(); - with_externalities(&mut ExtBuilder::default().gas_price(4).build(), || { - >::insert(1, code_unreachable.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - - assert_err!( - Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new()), - "vm execute returned error while call" - ); - - assert_eq!(Balances::free_balance(&0), 100_000_000 - (4 * 3) - (4 * 135)); - - assert_eq!(System::events(), vec![]); - }); -} - -const CODE_LOOP: &'static str = r#" -(module - (func (export "call") - (loop - (br 0) - ) - ) -) -"#; - -#[test] -fn block_gas_limit() { - let code_loop = wabt::wat2wasm(CODE_LOOP).unwrap(); - with_externalities( - &mut ExtBuilder::default().block_gas_limit(100_000).build(), - || { - >::insert(1, code_loop.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - - // Spend 50_000 units of gas (OOG). - assert_err!( - Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), Vec::new()), - "vm execute returned error while call" - ); - - // Ensure we can't spend more gas than available in block gas limit. - assert_err!( - Contract::call(Origin::signed(0), 1, 0.into(), 50_001.into(), Vec::new()), - "block gas limit is reached" - ); - - // However, we can spend another 50_000 - assert_err!( - Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), Vec::new()), - "vm execute returned error while call" - ); - }, - ); -} - -const CODE_INPUT_DATA: &'static str = r#" -(module - (import "env" "ext_input_size" (func $ext_input_size (result i32))) - (import "env" "ext_input_copy" (func $ext_input_copy (param i32 i32 i32))) - (import "env" "memory" (memory 1 1)) - - (func (export "call") - (block $fail - ;; fail if ext_input_size != 4 - (br_if $fail - (i32.ne - (i32.const 4) - (call $ext_input_size) - ) - ) - - (call $ext_input_copy - (i32.const 0) - (i32.const 0) - (i32.const 4) - ) - - - (br_if $fail - (i32.ne - (i32.load8_u (i32.const 0)) - (i32.const 0) - ) - ) - (br_if $fail - (i32.ne - (i32.load8_u (i32.const 1)) - (i32.const 1) - ) - ) - (br_if $fail - (i32.ne - (i32.load8_u (i32.const 2)) - (i32.const 2) - ) - ) - (br_if $fail - (i32.ne - (i32.load8_u (i32.const 3)) - (i32.const 3) - ) - ) - - (return) - ) - unreachable - ) -) -"#; - -#[test] -fn input_data() { - let code_input_data = wabt::wat2wasm(CODE_INPUT_DATA).unwrap(); - with_externalities( - &mut ExtBuilder::default().build(), - || { - >::insert(1, code_input_data.to_vec()); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - - assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), vec![0, 1, 2, 3])); - - // all asserts are made within contract code itself. - }, - ); -} - -/// Stores the caller into the storage under the [0x00; 32] key in the contract's storage. -const CODE_CALLER_LOGGER: &'static str = r#" -(module - (import "env" "ext_caller" (func $ext_caller)) - (import "env" "ext_scratch_size" (func $ext_scratch_size (result i32))) - (import "env" "ext_scratch_copy" (func $ext_scratch_copy (param i32 i32 i32))) - (import "env" "ext_set_storage" (func $ext_set_storage (param i32 i32 i32 i32))) - (import "env" "memory" (memory 1 1)) - - ;; Memory layout - ;; [0..32]: the storage key (passed as the key for ext_set_storage) - ;; [32..40]: contents of the scratch buffer (which is expected to be 8 bytes long) - - (func (export "call") - ;; Fill the scratch buffer with the caller. - (call $ext_caller) - - ;; Copy contents of the scratch buffer into the contract's memory. - (call $ext_scratch_copy - (i32.const 32) ;; Store scratch's buffer contents at this address. - (i32.const 0) ;; Offset from the start of the scratch buffer. - (i32.const 8) ;; Count of bytes to copy. - ) - - (call $ext_set_storage - (i32.const 0) ;; The storage key to save the value at. 32 bytes long. - (i32.const 1) ;; value_not_null=1, i.e. we are not removing the value - (i32.const 32) ;; the pointer to the value to store - (i32.const 8) ;; the length of the value - ) - ) -) -"#; - -#[test] -fn caller_top_level() { - let code_caller_logger = wabt::wat2wasm(CODE_CALLER_LOGGER).unwrap(); - with_externalities( - &mut ExtBuilder::default().build(), - || { - >::insert(1, code_caller_logger.to_vec()); - - Balances::set_free_balance(&2, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - - assert_ok!(Contract::call(Origin::signed(2), 1, 0.into(), 50_000.into(), vec![])); - - // Load the zero-th slot of the storage of the caller logger contract. - // We verify here that the caller logger contract has witnessed the call coming from - // the account with address 0x02 (see the origin above) - the origin of the tx. - assert_eq!( - >::get(1, vec![0; 32]), - Some(vec![0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]), - ); - }, - ); -} - -#[test] -fn caller_contract() { - const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - - let code_caller_logger = wabt::wat2wasm(CODE_CALLER_LOGGER).unwrap(); - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - - with_externalities(&mut ExtBuilder::default().build(), || { - >::insert(1, code_transfer.to_vec()); - >::insert(CONTRACT_SHOULD_TRANSFER_TO, code_caller_logger); - - Balances::set_free_balance(&0, 100_000_000); - Balances::increase_total_stake_by(100_000_000); - Balances::set_free_balance(&1, 11); - Balances::increase_total_stake_by(11); - - assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); - - // Load the zero-th slot of the storage of the caller logger contract. - // We verify here that the caller logger contract has witnessed the call coming from - // the caller contract - 0x01. - assert_eq!( - >::get(CONTRACT_SHOULD_TRANSFER_TO, vec![0; 32]), - Some(vec![0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]), - ); - }); -} +// struct ExtBuilder { +// existential_deposit: u64, +// gas_price: u64, +// block_gas_limit: u64, +// transfer_fee: u64, +// creation_fee: u64, +// } +// impl Default for ExtBuilder { +// fn default() -> Self { +// Self { +// existential_deposit: 0, +// gas_price: 2, +// block_gas_limit: 100_000_000, +// transfer_fee: 0, +// creation_fee: 0, +// } +// } +// } +// impl ExtBuilder { +// fn existential_deposit(mut self, existential_deposit: u64) -> Self { +// self.existential_deposit = existential_deposit; +// self +// } +// fn gas_price(mut self, gas_price: u64) -> Self { +// self.gas_price = gas_price; +// self +// } +// fn block_gas_limit(mut self, block_gas_limit: u64) -> Self { +// self.block_gas_limit = block_gas_limit; +// self +// } +// fn transfer_fee(mut self, transfer_fee: u64) -> Self { +// self.transfer_fee = transfer_fee; +// self +// } +// fn creation_fee(mut self, creation_fee: u64) -> Self { +// self.creation_fee = creation_fee; +// self +// } +// fn build(self) -> runtime_io::TestExternalities { +// let mut t = system::GenesisConfig::::default() +// .build_storage() +// .unwrap().0; +// t.extend( +// balances::GenesisConfig:: { +// balances: vec![], +// transaction_base_fee: 0, +// transaction_byte_fee: 0, +// existential_deposit: self.existential_deposit, +// transfer_fee: self.transfer_fee, +// creation_fee: self.creation_fee, +// reclaim_rebate: 0, +// _genesis_phantom_data: Default::default(), +// }.build_storage() +// .unwrap().0, +// ); +// t.extend( +// GenesisConfig:: { +// contract_fee: 21, +// call_base_fee: 135, +// create_base_fee: 175, +// gas_price: self.gas_price, +// max_depth: 100, +// block_gas_limit: self.block_gas_limit, +// current_schedule: Default::default(), +// _genesis_phantom_data: Default::default(), +// }.build_storage() +// .unwrap().0, +// ); +// runtime_io::TestExternalities::new(t) +// } +// } + +// const CODE_TRANSFER: &str = r#" +// (module +// ;; ext_call( +// ;; callee_ptr: u32, +// ;; callee_len: u32, +// ;; gas: u64, +// ;; value_ptr: u32, +// ;; value_len: u32, +// ;; input_data_ptr: u32, +// ;; input_data_len: u32 +// ;; ) -> u32 +// (import "env" "ext_call" (func $ext_call (param i32 i32 i64 i32 i32 i32 i32) (result i32))) +// (import "env" "memory" (memory 1 1)) +// (func (export "call") +// (drop +// (call $ext_call +// (i32.const 4) ;; Pointer to "callee" address. +// (i32.const 8) ;; Length of "callee" address. +// (i64.const 0) ;; How much gas to devote for the execution. 0 = all. +// (i32.const 12) ;; Pointer to the buffer with value to transfer +// (i32.const 8) ;; Length of the buffer with value to transfer. +// (i32.const 0) ;; Pointer to input data buffer address +// (i32.const 0) ;; Length of input data buffer +// ) +// ) +// ) +// ;; Destination AccountId to transfer the funds. +// ;; Represented by u64 (8 bytes long) in little endian. +// (data (i32.const 4) "\09\00\00\00\00\00\00\00") +// ;; Amount of value to transfer. +// ;; Represented by u64 (8 bytes long) in little endian. +// (data (i32.const 12) "\06\00\00\00\00\00\00\00") +// ) +// "#; + +// #[test] +// fn contract_transfer() { +// const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; +// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; + +// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + +// with_externalities(&mut ExtBuilder::default().build(), || { +// >::insert(1, code_transfer.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); +// Balances::set_free_balance(&1, 11); +// Balances::increase_total_stake_by(11); + +// assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); + +// assert_eq!( +// Balances::free_balance(&0), +// // 3 - value sent with the transaction +// // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) +// // 2 * 135 - base gas fee for call (by transaction) +// // 2 * 135 - base gas fee for call (by the contract) +// 100_000_000 - 3 - (2 * 26) - (2 * 135) - (2 * 135), +// ); +// assert_eq!( +// Balances::free_balance(&1), +// 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, +// ); +// assert_eq!( +// Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), +// CONTRACT_SHOULD_TRANSFER_VALUE, +// ); + +// assert_eq!(System::events(), vec![ +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::balances( +// balances::RawEvent::NewAccount( +// CONTRACT_SHOULD_TRANSFER_TO, +// 0, +// balances::NewAccountOutcome::NoHint +// ) +// ), +// }, +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::contract(RawEvent::Transfer(0, 1, 3)), +// }, +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::contract(RawEvent::Transfer(1, CONTRACT_SHOULD_TRANSFER_TO, 6)), +// }, +// ]); +// }); +// } + +// #[test] +// fn contract_transfer_to_death() { +// const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; + +// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + +// with_externalities(&mut ExtBuilder::default().existential_deposit(5).build(), || { +// >::insert(1, code_transfer.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); + +// Balances::set_free_balance(&1, 6); +// Balances::increase_total_stake_by(6); +// >::insert(1, b"foo".to_vec(), b"1".to_vec()); + +// assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); + +// assert_eq!( +// Balances::free_balance(&0), +// // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) +// // 2 * 135 - base gas fee for call (by transaction) +// // 2 * 135 - base gas fee for call (by the contract) +// 100_000_000 - (2 * 26) - (2 * 135) - (2 * 135), +// ); + +// assert!(!>::exists(1)); +// assert!(!>::exists(1, b"foo".to_vec())); +// assert_eq!(Balances::free_balance(&1), 0); + +// assert_eq!(Balances::free_balance(&9), CONTRACT_SHOULD_TRANSFER_VALUE); +// }); +// } + +// #[test] +// fn contract_transfer_takes_creation_fee() { +// const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; +// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; + +// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + +// with_externalities(&mut ExtBuilder::default().creation_fee(105).build(), || { +// >::insert(1, code_transfer.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); +// Balances::set_free_balance(&1, 11); +// Balances::increase_total_stake_by(11); + +// assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); + +// assert_eq!( +// Balances::free_balance(&0), +// // 3 - value sent with the transaction +// // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) +// // 2 * 135 - base gas fee for call (by transaction) +// // 2 * 135 - base gas fee for call (by the contract) +// // 104 - (rounded) fee per creation (by the contract) +// 100_000_000 - 3 - (2 * 26) - (2 * 135) - (2 * 135) - 104, +// ); +// assert_eq!( +// Balances::free_balance(&1), +// 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, +// ); +// assert_eq!( +// Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), +// CONTRACT_SHOULD_TRANSFER_VALUE, +// ); +// }); +// } + +// #[test] +// fn contract_transfer_takes_transfer_fee() { +// const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; +// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; + +// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + +// with_externalities(&mut ExtBuilder::default().creation_fee(105).transfer_fee(45).build(), || { +// >::insert(1, code_transfer.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); +// Balances::set_free_balance(&1, 11); +// Balances::increase_total_stake_by(11); + +// // Create destination account here so we can check that transfer fee +// // is charged (and creation fee is not). +// Balances::set_free_balance(&CONTRACT_SHOULD_TRANSFER_TO, 25); + +// assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); + +// assert_eq!( +// Balances::free_balance(&0), +// // 3 - value sent with the transaction +// // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) +// // 2 * 135 - base gas fee for call (by transaction) +// // 44 - (rounded from 45) fee per transfer (by transaction) +// // 2 * 135 - base gas fee for call (by the contract) +// // 44 - (rounded from 45) fee per transfer (by the contract) +// 100_000_000 - 3 - (2 * 26) - (2 * 135) - 44 - (2 * 135) - 44, +// ); +// assert_eq!( +// Balances::free_balance(&1), +// 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, +// ); +// assert_eq!( +// Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), +// 25 + CONTRACT_SHOULD_TRANSFER_VALUE, +// ); +// }); +// } + +// #[test] +// fn contract_transfer_oog() { +// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; + +// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + +// with_externalities(&mut ExtBuilder::default().build(), || { +// >::insert(1, code_transfer.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); +// Balances::set_free_balance(&1, 11); +// Balances::increase_total_stake_by(11); + +// assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), (135 + 135 + 7).into(), Vec::new())); + +// assert_eq!( +// Balances::free_balance(&0), +// // 3 - value sent with the transaction +// // 2 * 7 - gas used by the contract (7) multiplied by gas price (2) +// // 2 * 135 - base gas fee for call (by transaction) +// // 2 * 135 - base gas fee for call (by contract) +// 100_000_000 - 3 - (2 * 7) - (2 * 135) - (2 * 135), +// ); + +// // Transaction level transfer should succeed. +// assert_eq!(Balances::free_balance(&1), 14); +// // But `ext_call` should not. +// assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 0); + +// assert_eq!(System::events(), vec![ +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::contract(RawEvent::Transfer(0, 1, 3)), +// }, +// ]); +// }); +// } + +// #[test] +// fn contract_transfer_max_depth() { +// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; + +// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + +// with_externalities(&mut ExtBuilder::default().build(), || { +// >::insert(CONTRACT_SHOULD_TRANSFER_TO, code_transfer.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); +// Balances::set_free_balance(&CONTRACT_SHOULD_TRANSFER_TO, 11); +// Balances::increase_total_stake_by(11); + +// assert_ok!(Contract::call(Origin::signed(0), CONTRACT_SHOULD_TRANSFER_TO, 3.into(), 100_000.into(), Vec::new())); + +// assert_eq!( +// Balances::free_balance(&0), +// // 3 - value sent with the transaction +// // 2 * 26 * 100 - gas used by the contract (26) multiplied by gas price (2) +// // multiplied by max depth (100). +// // 2 * 135 * 100 - base gas fee for call (by transaction) multiplied by max depth (100). +// 100_000_000 - 3 - (2 * 26 * 100) - (2 * 135 * 100), +// ); +// assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 14); +// }); +// } + +// /// Convert a byte slice to a string with hex values. +// /// +// /// Each value is preceeded with a `\` character. +// fn escaped_bytestring(bytes: &[u8]) -> String { +// use std::fmt::Write; +// let mut result = String::new(); +// for b in bytes { +// write!(result, "\\{:02x}", b).unwrap(); +// } +// result +// } + +// /// Create a constructor for the specified code. +// /// +// /// When constructor is executed, it will call `ext_return` with code that +// /// specified in `child_bytecode`. +// fn code_ctor(child_bytecode: &[u8]) -> String { +// format!( +// r#" +// (module +// ;; ext_return(data_ptr: u32, data_len: u32) -> ! +// (import "env" "ext_return" (func $ext_return (param i32 i32))) +// (import "env" "memory" (memory 1 1)) +// (func (export "call") +// (call $ext_return +// (i32.const 4) +// (i32.const {code_len}) +// ) +// ;; ext_return is diverging, i.e. doesn't return. +// unreachable +// ) +// (data (i32.const 4) "{escaped_bytecode}") +// ) +// "#, +// escaped_bytecode = escaped_bytestring(child_bytecode), +// code_len = child_bytecode.len(), +// ) +// } + +// /// Returns code that uses `ext_create` runtime call. +// /// +// /// Takes bytecode of the contract that needs to be deployed. +// fn code_create(constructor: &[u8]) -> String { +// format!( +// r#" +// (module +// ;; ext_create( +// ;; code_ptr: u32, +// ;; code_len: u32, +// ;; gas: u64, +// ;; value_ptr: u32, +// ;; value_len: u32, +// ;; input_data_ptr: u32, +// ;; input_data_len: u32, +// ;; ) -> u32 +// (import "env" "ext_create" (func $ext_create (param i32 i32 i64 i32 i32 i32 i32) (result i32))) +// (import "env" "memory" (memory 1 1)) +// (func (export "call") +// (drop +// (call $ext_create +// (i32.const 12) ;; Pointer to `code` +// (i32.const {code_len}) ;; Length of `code` +// (i64.const 0) ;; How much gas to devote for the execution. 0 = all. +// (i32.const 4) ;; Pointer to the buffer with value to transfer +// (i32.const 8) ;; Length of the buffer with value to transfer +// (i32.const 0) ;; Pointer to input data buffer address +// (i32.const 0) ;; Length of input data buffer +// ) +// ) +// ) +// ;; Amount of value to transfer. +// ;; Represented by u64 (8 bytes long) in little endian. +// (data (i32.const 4) "\03\00\00\00\00\00\00\00") +// ;; Embedded wasm code. +// (data (i32.const 12) "{escaped_constructor}") +// ) +// "#, +// escaped_constructor = escaped_bytestring(constructor), +// code_len = constructor.len(), +// ) +// } + +// #[test] +// fn contract_create() { +// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); +// let code_ctor_transfer = wabt::wat2wasm(&code_ctor(&code_transfer)).unwrap(); +// let code_create = wabt::wat2wasm(&code_create(&code_ctor_transfer)).unwrap(); + +// with_externalities(&mut ExtBuilder::default().build(), || { +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); +// Balances::set_free_balance(&1, 0); +// Balances::set_free_balance(&9, 30); +// Balances::increase_total_stake_by(30); + +// >::insert(1, code_create.to_vec()); + +// // When invoked, the contract at address `1` must create a contract with 'transfer' code. +// assert_ok!(Contract::call(Origin::signed(0), 1, 11.into(), 100_000.into(), Vec::new())); + +// let derived_address = ::DetermineContractAddress::contract_address_for( +// &code_ctor_transfer, +// &[], +// &1, +// ); + +// // 11 - value sent with the transaction +// // 2 * 362 - gas spent by the deployer contract (362) multiplied by gas price (2) +// // 2 * 135 - base gas fee for call (top level) +// // 2 * 175 - base gas fee for create (by contract) +// // ((21 / 2) * 2) - price per account creation +// let expected_gas_after_create = +// 100_000_000 - 11 - (2 * 362) - (2 * 135) - (2 * 175) - ((21 / 2) * 2); +// assert_eq!(Balances::free_balance(&0), expected_gas_after_create); +// assert_eq!(Balances::free_balance(&1), 8); +// assert_eq!(Balances::free_balance(&derived_address), 3); + +// assert_eq!(System::events(), vec![ +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::balances( +// balances::RawEvent::NewAccount( +// derived_address, +// 0, +// balances::NewAccountOutcome::NoHint +// ) +// ), +// }, +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::contract(RawEvent::Transfer(0, 1, 11)), +// }, +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::contract(RawEvent::Transfer(1, 2, 3)), +// }, +// ]); + +// // Initiate transfer to the newly created contract. +// assert_ok!(Contract::call(Origin::signed(0), derived_address, 22.into(), 100_000.into(), Vec::new())); + +// assert_eq!( +// Balances::free_balance(&0), +// // 22 - value sent with the transaction +// // (2 * 26) - gas used by the contract +// // (2 * 135) - base gas fee for call (top level) +// // (2 * 135) - base gas fee for call (by transfer contract) +// expected_gas_after_create - 22 - (2 * 26) - (2 * 135) - (2 * 135), +// ); +// assert_eq!(Balances::free_balance(&derived_address), 22 - 3); +// assert_eq!(Balances::free_balance(&9), 36); +// }); +// } + +// #[test] +// fn top_level_create() { +// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); +// let code_ctor_transfer = wabt::wat2wasm(&code_ctor(&code_transfer)).unwrap(); + +// with_externalities(&mut ExtBuilder::default().gas_price(3).build(), || { +// let derived_address = ::DetermineContractAddress::contract_address_for( +// &code_ctor_transfer, +// &[], +// &0, +// ); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); +// Balances::set_free_balance(&derived_address, 30); +// Balances::increase_total_stake_by(30); + +// assert_ok!(Contract::create( +// Origin::signed(0), +// 11.into(), +// 100_000.into(), +// code_ctor_transfer.clone(), +// Vec::new(), +// )); + +// // 11 - value sent with the transaction +// // (3 * 129) - gas spent by the init_code. +// // (3 * 175) - base gas fee for create (175) (top level) multipled by gas price (3) +// // ((21 / 3) * 3) - price for contract creation +// assert_eq!( +// Balances::free_balance(&0), +// 100_000_000 - 11 - (3 * 129) - (3 * 175) - ((21 / 3) * 3) +// ); +// assert_eq!(Balances::free_balance(&derived_address), 30 + 11); + +// assert_eq!(>::get(&derived_address), code_transfer); + +// assert_eq!(System::events(), vec![ +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::contract(RawEvent::Transfer(0, derived_address, 11)), +// }, +// EventRecord { +// phase: Phase::ApplyExtrinsic(0), +// event: MetaEvent::contract(RawEvent::Created(0, 1)), +// }, +// ]); +// }); +// } + +// const CODE_NOP: &'static str = r#" +// (module +// (func (export "call") +// nop +// ) +// ) +// "#; + +// #[test] +// fn refunds_unused_gas() { +// let code_nop = wabt::wat2wasm(CODE_NOP).unwrap(); + +// with_externalities(&mut ExtBuilder::default().build(), || { +// >::insert(1, code_nop.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); + +// assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); + +// assert_eq!(Balances::free_balance(&0), 100_000_000 - 4 - (2 * 135)); +// }); +// } + +// #[test] +// fn call_with_zero_value() { +// with_externalities(&mut ExtBuilder::default().build(), || { +// >::insert(1, vec![]); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); + +// assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); + +// assert_eq!(Balances::free_balance(&0), 100_000_000 - (2 * 135)); +// }); +// } + +// #[test] +// fn create_with_zero_endowment() { +// let code_nop = wabt::wat2wasm(CODE_NOP).unwrap(); + +// with_externalities(&mut ExtBuilder::default().build(), || { +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); + +// assert_ok!(Contract::create(Origin::signed(0), 0.into(), 100_000.into(), code_nop, Vec::new())); + +// assert_eq!( +// Balances::free_balance(&0), +// // 4 - for the gas spent by the constructor +// // 2 * 175 - base gas fee for create (175) multiplied by gas price (2) (top level) +// 100_000_000 - 4 - (2 * 175), +// ); +// }); +// } + +// #[test] +// fn account_removal_removes_storage() { +// with_externalities( +// &mut ExtBuilder::default().existential_deposit(100).build(), +// || { +// // Setup two accounts with free balance above than exsistential threshold. +// { +// Balances::set_free_balance(&1, 110); +// Balances::increase_total_stake_by(110); +// >::insert(1, b"foo".to_vec(), b"1".to_vec()); +// >::insert(1, b"bar".to_vec(), b"2".to_vec()); + +// Balances::set_free_balance(&2, 110); +// Balances::increase_total_stake_by(110); +// >::insert(2, b"hello".to_vec(), b"3".to_vec()); +// >::insert(2, b"world".to_vec(), b"4".to_vec()); +// } + +// // Transfer funds from account 1 of such amount that after this transfer +// // the balance of account 1 is will be below than exsistential threshold. +// // +// // This should lead to the removal of all storage associated with this account. +// assert_ok!(Balances::transfer(Origin::signed(1), 2.into(), 20.into())); + +// // Verify that all entries from account 1 is removed, while +// // entries from account 2 is in place. +// { +// assert_eq!(>::get(1, b"foo".to_vec()), None); +// assert_eq!(>::get(1, b"bar".to_vec()), None); + +// assert_eq!( +// >::get(2, b"hello".to_vec()), +// Some(b"3".to_vec()) +// ); +// assert_eq!( +// >::get(2, b"world".to_vec()), +// Some(b"4".to_vec()) +// ); +// } +// }, +// ); +// } + +// const CODE_UNREACHABLE: &'static str = r#" +// (module +// (func (export "call") +// nop +// unreachable +// ) +// ) +// "#; + +// #[test] +// fn top_level_call_refunds_even_if_fails() { +// let code_unreachable = wabt::wat2wasm(CODE_UNREACHABLE).unwrap(); +// with_externalities(&mut ExtBuilder::default().gas_price(4).build(), || { +// >::insert(1, code_unreachable.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); + +// assert_err!( +// Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new()), +// "vm execute returned error while call" +// ); + +// assert_eq!(Balances::free_balance(&0), 100_000_000 - (4 * 3) - (4 * 135)); + +// assert_eq!(System::events(), vec![]); +// }); +// } + +// const CODE_LOOP: &'static str = r#" +// (module +// (func (export "call") +// (loop +// (br 0) +// ) +// ) +// ) +// "#; + +// #[test] +// fn block_gas_limit() { +// let code_loop = wabt::wat2wasm(CODE_LOOP).unwrap(); +// with_externalities( +// &mut ExtBuilder::default().block_gas_limit(100_000).build(), +// || { +// >::insert(1, code_loop.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); + +// // Spend 50_000 units of gas (OOG). +// assert_err!( +// Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), Vec::new()), +// "vm execute returned error while call" +// ); + +// // Ensure we can't spend more gas than available in block gas limit. +// assert_err!( +// Contract::call(Origin::signed(0), 1, 0.into(), 50_001.into(), Vec::new()), +// "block gas limit is reached" +// ); + +// // However, we can spend another 50_000 +// assert_err!( +// Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), Vec::new()), +// "vm execute returned error while call" +// ); +// }, +// ); +// } + +// const CODE_INPUT_DATA: &'static str = r#" +// (module +// (import "env" "ext_input_size" (func $ext_input_size (result i32))) +// (import "env" "ext_input_copy" (func $ext_input_copy (param i32 i32 i32))) +// (import "env" "memory" (memory 1 1)) + +// (func (export "call") +// (block $fail +// ;; fail if ext_input_size != 4 +// (br_if $fail +// (i32.ne +// (i32.const 4) +// (call $ext_input_size) +// ) +// ) + +// (call $ext_input_copy +// (i32.const 0) +// (i32.const 0) +// (i32.const 4) +// ) + + +// (br_if $fail +// (i32.ne +// (i32.load8_u (i32.const 0)) +// (i32.const 0) +// ) +// ) +// (br_if $fail +// (i32.ne +// (i32.load8_u (i32.const 1)) +// (i32.const 1) +// ) +// ) +// (br_if $fail +// (i32.ne +// (i32.load8_u (i32.const 2)) +// (i32.const 2) +// ) +// ) +// (br_if $fail +// (i32.ne +// (i32.load8_u (i32.const 3)) +// (i32.const 3) +// ) +// ) + +// (return) +// ) +// unreachable +// ) +// ) +// "#; + +// #[test] +// fn input_data() { +// let code_input_data = wabt::wat2wasm(CODE_INPUT_DATA).unwrap(); +// with_externalities( +// &mut ExtBuilder::default().build(), +// || { +// >::insert(1, code_input_data.to_vec()); + +// Balances::set_free_balance(&0, 100_000_000); +// Balances::increase_total_stake_by(100_000_000); + +// assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), vec![0, 1, 2, 3])); + +// // all asserts are made within contract code itself. +// }, +// ); +// } diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 97635d7b2cf6c..17fa698b948e9 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -130,10 +130,11 @@ mod tests { use std::collections::HashMap; use tests::Test; use wabt; + use runtime_primitives::testing::H256; #[derive(Debug, PartialEq, Eq)] struct CreateEntry { - code: Vec, + // TODO: code_hash: H256, endowment: u64, data: Vec, gas_left: u64, @@ -163,13 +164,13 @@ mod tests { } fn create( &mut self, - code: &[u8], + _code_hash: &CodeHash, endowment: u64, gas_meter: &mut GasMeter, data: &[u8], ) -> Result, ()> { self.creates.push(CreateEntry { - code: code.to_vec(), + // code_hash: code_hash.clone(), endowment, data: data.to_vec(), gas_left: gas_meter.gas_left(), @@ -202,6 +203,11 @@ mod tests { } } + fn prepare_code(wat: &str) -> (Vec, MemoryDefinition) { + let wasm = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + + } + const CODE_TRANSFER: &str = r#" (module ;; ext_call( @@ -245,6 +251,7 @@ mod tests { let mut mock_ext = MockExt::default(); execute( + "call", &code_transfer, &[], &mut Vec::new(), @@ -308,6 +315,7 @@ mod tests { let mut mock_ext = MockExt::default(); execute( + "call", &code_create, &[], &mut Vec::new(), @@ -319,7 +327,7 @@ mod tests { assert_eq!( &mock_ext.creates, &[CreateEntry { - code: vec![0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00], + // code: vec![0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00], endowment: 3, data: vec![ 1, 2, 3, 4, @@ -348,6 +356,7 @@ mod tests { assert_matches!( execute( + "call", &code_mem, &[], &mut Vec::new(), @@ -402,6 +411,7 @@ mod tests { let mut mock_ext = MockExt::default(); execute( + "call", &code_transfer, &[], &mut Vec::new(), @@ -495,6 +505,7 @@ mod tests { let mut return_buf = Vec::new(); execute( + "call", &code_get_storage, &[], &mut return_buf, From c1e0018034e2fd60bc128e68535644ba4e1b5dac Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 14 Dec 2018 17:01:34 +0100 Subject: [PATCH 018/108] Fix macro_define_env test. --- srml/contract/src/vm/env_def/macros.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/srml/contract/src/vm/env_def/macros.rs b/srml/contract/src/vm/env_def/macros.rs index 3550382f4c594..c09ab16bba40f 100644 --- a/srml/contract/src/vm/env_def/macros.rs +++ b/srml/contract/src/vm/env_def/macros.rs @@ -296,7 +296,9 @@ mod tests { #[test] fn macro_define_env() { - define_env!(init_env, , + use vm::env_def::ImportSatisfyCheck; + + define_env!(Env, , ext_gas( _ctx, amount: u32 ) => { let amount = <::Gas as As>::sa(amount); if !amount.is_zero() { @@ -307,7 +309,6 @@ mod tests { }, ); - let env = init_env::(); - assert!(env.funcs.get(&b"ext_gas"[..]).is_some()); + assert!(Env::can_satisfy(b"ext_gas", &FunctionType::new(vec![ValueType::I32], None))); } } From 9738d8147efbe2e559886854772a9370b09ebb15 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 14:24:50 +0300 Subject: [PATCH 019/108] Fix vm code tests. --- srml/contract/src/code/mod.rs | 2 +- srml/contract/src/vm/mod.rs | 106 +++++++++++++++++++--------------- 2 files changed, 60 insertions(+), 48 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 9688b4af5edad..39fa8397f2563 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -21,7 +21,7 @@ use gas::GasMeter; use vm::runtime::Env; use {Schedule, Trait, CodeHash, CodeStorage, PrestineCode}; -mod prepare; +pub mod prepare; #[derive(Clone, Encode, Decode)] pub struct MemoryDefinition { diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 17fa698b948e9..5688ae573e2aa 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -204,8 +204,13 @@ mod tests { } fn prepare_code(wat: &str) -> (Vec, MemoryDefinition) { - let wasm = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - + use ::code::prepare::prepare_contract; + + let wasm = wabt::wat2wasm(wat).unwrap(); + let schedule = ::Schedule::::default(); + let ::code::InstrumentedWasmModule { memory_def, code, .. } = prepare_contract::(&wasm, &schedule).unwrap(); + + (code, memory_def) } const CODE_TRANSFER: &str = r#" @@ -247,12 +252,13 @@ mod tests { #[test] fn contract_transfer() { - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + let (code_transfer, mem_def) = prepare_code(CODE_TRANSFER); let mut mock_ext = MockExt::default(); execute( - "call", + b"call", &code_transfer, + &mem_def, &[], &mut Vec::new(), &mut mock_ext, @@ -289,12 +295,12 @@ mod tests { (func (export "call") (drop (call $ext_create - (i32.const 12) ;; Pointer to `code` - (i32.const 8) ;; Length of `code` + (i32.const 16) ;; Pointer to `code_hash` + (i32.const 32) ;; Length of `code_hash` (i64.const 0) ;; How much gas to devote for the execution. 0 = all. (i32.const 4) ;; Pointer to the buffer with value to transfer (i32.const 8) ;; Length of the buffer with value to transfer - (i32.const 20) ;; Pointer to input data buffer address + (i32.const 12) ;; Pointer to input data buffer address (i32.const 4) ;; Length of input data buffer ) ) @@ -302,21 +308,22 @@ mod tests { ;; Amount of value to transfer. ;; Represented by u64 (8 bytes long) in little endian. (data (i32.const 4) "\03\00\00\00\00\00\00\00") - ;; Embedded wasm code. - (data (i32.const 12) "\00\61\73\6d\01\00\00\00") ;; Input data to pass to the contract being created. - (data (i32.const 20) "\01\02\03\04") + (data (i32.const 12) "\01\02\03\04") + ;; Hash of code. + (data (i32.const 16) "\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11") ) "#; #[test] fn contract_create() { - let code_create = wabt::wat2wasm(CODE_CREATE).unwrap(); + let (code_create, mem_def) = prepare_code(CODE_CREATE); let mut mock_ext = MockExt::default(); execute( - "call", + b"call", &code_create, + &mem_def, &[], &mut Vec::new(), &mut mock_ext, @@ -332,41 +339,44 @@ mod tests { data: vec![ 1, 2, 3, 4, ], - gas_left: 49970, + gas_left: 49946, }] ); } - const CODE_MEM: &str = r#" -(module - ;; Internal memory is not allowed. - (memory 1 1) - - (func (export "call") - nop - ) -) -"#; - - #[test] - fn contract_internal_mem() { - let code_mem = wabt::wat2wasm(CODE_MEM).unwrap(); - - let mut mock_ext = MockExt::default(); - - assert_matches!( - execute( - "call", - &code_mem, - &[], - &mut Vec::new(), - &mut mock_ext, - &Schedule::default(), - &mut GasMeter::with_limit(100_000, 1) - ), - Err(_) - ); - } + // TODO: This shouldn't be possible. There is an invariant that + // code should be already prepared. + +// const CODE_MEM: &str = r#" +// (module +// ;; Internal memory is not allowed. +// (memory 1 1) + +// (func (export "call") +// nop +// ) +// ) +// "#; + +// #[test] +// fn contract_internal_mem() { +// let code_mem = wabt::wat2wasm(CODE_MEM).unwrap(); + +// let mut mock_ext = MockExt::default(); + +// assert_matches!( +// execute( +// "call", +// &code_mem, +// &[], +// &mut Vec::new(), +// &mut mock_ext, +// &Schedule::default(), +// &mut GasMeter::with_limit(100_000, 1) +// ), +// Err(_) +// ); +// } const CODE_TRANSFER_LIMITED_GAS: &str = r#" (module @@ -407,12 +417,13 @@ mod tests { #[test] fn contract_call_limited_gas() { - let code_transfer = wabt::wat2wasm(CODE_TRANSFER_LIMITED_GAS).unwrap(); + let (code_transfer, mem_def) = prepare_code(CODE_TRANSFER_LIMITED_GAS); let mut mock_ext = MockExt::default(); execute( - "call", + b"call", &code_transfer, + &mem_def, &[], &mut Vec::new(), &mut mock_ext, @@ -498,15 +509,16 @@ mod tests { #[test] fn get_storage_puts_data_into_scratch_buf() { - let code_get_storage = wabt::wat2wasm(CODE_GET_STORAGE).unwrap(); + let (code_get_storage, mem_def) = prepare_code(CODE_GET_STORAGE); let mut mock_ext = MockExt::default(); mock_ext.storage.insert([0x11; 32].to_vec(), [0x22; 32].to_vec()); let mut return_buf = Vec::new(); execute( - "call", + b"call", &code_get_storage, + &mem_def, &[], &mut return_buf, &mut mock_ext, From 56f0c4f4957b3ed823bbb8e43b2ee00773439a7e Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 14:44:34 +0300 Subject: [PATCH 020/108] Remove tests for now. --- srml/contract/src/lib.rs | 2 +- srml/contract/src/tests.rs | 793 ------------------------------------- 2 files changed, 1 insertion(+), 794 deletions(-) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index f6310dc8b419f..e9c7e2a8447d2 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -334,7 +334,7 @@ decl_storage! { /// Current cost schedule for contracts. CurrentSchedule get(current_schedule) config(): Schedule = Schedule::default(); /// The code associated with an account. - pub CodeHashOf: map T::AccountId => Option>; // TODO Vec values should be optimised to not do a length prefix. + pub CodeHashOf: map T::AccountId => Option>; pub PrestineCode: map CodeHash => Option>; pub CodeStorage: map CodeHash => Option; diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index 75a18b0b8b472..669ccc4f48451 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -78,796 +78,3 @@ impl ContractAddressFor for DummyContractAddressFor { panic!() } } - -// struct ExtBuilder { -// existential_deposit: u64, -// gas_price: u64, -// block_gas_limit: u64, -// transfer_fee: u64, -// creation_fee: u64, -// } -// impl Default for ExtBuilder { -// fn default() -> Self { -// Self { -// existential_deposit: 0, -// gas_price: 2, -// block_gas_limit: 100_000_000, -// transfer_fee: 0, -// creation_fee: 0, -// } -// } -// } -// impl ExtBuilder { -// fn existential_deposit(mut self, existential_deposit: u64) -> Self { -// self.existential_deposit = existential_deposit; -// self -// } -// fn gas_price(mut self, gas_price: u64) -> Self { -// self.gas_price = gas_price; -// self -// } -// fn block_gas_limit(mut self, block_gas_limit: u64) -> Self { -// self.block_gas_limit = block_gas_limit; -// self -// } -// fn transfer_fee(mut self, transfer_fee: u64) -> Self { -// self.transfer_fee = transfer_fee; -// self -// } -// fn creation_fee(mut self, creation_fee: u64) -> Self { -// self.creation_fee = creation_fee; -// self -// } -// fn build(self) -> runtime_io::TestExternalities { -// let mut t = system::GenesisConfig::::default() -// .build_storage() -// .unwrap().0; -// t.extend( -// balances::GenesisConfig:: { -// balances: vec![], -// transaction_base_fee: 0, -// transaction_byte_fee: 0, -// existential_deposit: self.existential_deposit, -// transfer_fee: self.transfer_fee, -// creation_fee: self.creation_fee, -// reclaim_rebate: 0, -// _genesis_phantom_data: Default::default(), -// }.build_storage() -// .unwrap().0, -// ); -// t.extend( -// GenesisConfig:: { -// contract_fee: 21, -// call_base_fee: 135, -// create_base_fee: 175, -// gas_price: self.gas_price, -// max_depth: 100, -// block_gas_limit: self.block_gas_limit, -// current_schedule: Default::default(), -// _genesis_phantom_data: Default::default(), -// }.build_storage() -// .unwrap().0, -// ); -// runtime_io::TestExternalities::new(t) -// } -// } - -// const CODE_TRANSFER: &str = r#" -// (module -// ;; ext_call( -// ;; callee_ptr: u32, -// ;; callee_len: u32, -// ;; gas: u64, -// ;; value_ptr: u32, -// ;; value_len: u32, -// ;; input_data_ptr: u32, -// ;; input_data_len: u32 -// ;; ) -> u32 -// (import "env" "ext_call" (func $ext_call (param i32 i32 i64 i32 i32 i32 i32) (result i32))) -// (import "env" "memory" (memory 1 1)) -// (func (export "call") -// (drop -// (call $ext_call -// (i32.const 4) ;; Pointer to "callee" address. -// (i32.const 8) ;; Length of "callee" address. -// (i64.const 0) ;; How much gas to devote for the execution. 0 = all. -// (i32.const 12) ;; Pointer to the buffer with value to transfer -// (i32.const 8) ;; Length of the buffer with value to transfer. -// (i32.const 0) ;; Pointer to input data buffer address -// (i32.const 0) ;; Length of input data buffer -// ) -// ) -// ) -// ;; Destination AccountId to transfer the funds. -// ;; Represented by u64 (8 bytes long) in little endian. -// (data (i32.const 4) "\09\00\00\00\00\00\00\00") -// ;; Amount of value to transfer. -// ;; Represented by u64 (8 bytes long) in little endian. -// (data (i32.const 12) "\06\00\00\00\00\00\00\00") -// ) -// "#; - -// #[test] -// fn contract_transfer() { -// const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; -// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - -// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - -// with_externalities(&mut ExtBuilder::default().build(), || { -// >::insert(1, code_transfer.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); -// Balances::set_free_balance(&1, 11); -// Balances::increase_total_stake_by(11); - -// assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); - -// assert_eq!( -// Balances::free_balance(&0), -// // 3 - value sent with the transaction -// // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) -// // 2 * 135 - base gas fee for call (by transaction) -// // 2 * 135 - base gas fee for call (by the contract) -// 100_000_000 - 3 - (2 * 26) - (2 * 135) - (2 * 135), -// ); -// assert_eq!( -// Balances::free_balance(&1), -// 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, -// ); -// assert_eq!( -// Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), -// CONTRACT_SHOULD_TRANSFER_VALUE, -// ); - -// assert_eq!(System::events(), vec![ -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::balances( -// balances::RawEvent::NewAccount( -// CONTRACT_SHOULD_TRANSFER_TO, -// 0, -// balances::NewAccountOutcome::NoHint -// ) -// ), -// }, -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::contract(RawEvent::Transfer(0, 1, 3)), -// }, -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::contract(RawEvent::Transfer(1, CONTRACT_SHOULD_TRANSFER_TO, 6)), -// }, -// ]); -// }); -// } - -// #[test] -// fn contract_transfer_to_death() { -// const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; - -// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - -// with_externalities(&mut ExtBuilder::default().existential_deposit(5).build(), || { -// >::insert(1, code_transfer.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); - -// Balances::set_free_balance(&1, 6); -// Balances::increase_total_stake_by(6); -// >::insert(1, b"foo".to_vec(), b"1".to_vec()); - -// assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); - -// assert_eq!( -// Balances::free_balance(&0), -// // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) -// // 2 * 135 - base gas fee for call (by transaction) -// // 2 * 135 - base gas fee for call (by the contract) -// 100_000_000 - (2 * 26) - (2 * 135) - (2 * 135), -// ); - -// assert!(!>::exists(1)); -// assert!(!>::exists(1, b"foo".to_vec())); -// assert_eq!(Balances::free_balance(&1), 0); - -// assert_eq!(Balances::free_balance(&9), CONTRACT_SHOULD_TRANSFER_VALUE); -// }); -// } - -// #[test] -// fn contract_transfer_takes_creation_fee() { -// const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; -// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - -// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - -// with_externalities(&mut ExtBuilder::default().creation_fee(105).build(), || { -// >::insert(1, code_transfer.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); -// Balances::set_free_balance(&1, 11); -// Balances::increase_total_stake_by(11); - -// assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); - -// assert_eq!( -// Balances::free_balance(&0), -// // 3 - value sent with the transaction -// // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) -// // 2 * 135 - base gas fee for call (by transaction) -// // 2 * 135 - base gas fee for call (by the contract) -// // 104 - (rounded) fee per creation (by the contract) -// 100_000_000 - 3 - (2 * 26) - (2 * 135) - (2 * 135) - 104, -// ); -// assert_eq!( -// Balances::free_balance(&1), -// 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, -// ); -// assert_eq!( -// Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), -// CONTRACT_SHOULD_TRANSFER_VALUE, -// ); -// }); -// } - -// #[test] -// fn contract_transfer_takes_transfer_fee() { -// const CONTRACT_SHOULD_TRANSFER_VALUE: u64 = 6; -// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - -// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - -// with_externalities(&mut ExtBuilder::default().creation_fee(105).transfer_fee(45).build(), || { -// >::insert(1, code_transfer.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); -// Balances::set_free_balance(&1, 11); -// Balances::increase_total_stake_by(11); - -// // Create destination account here so we can check that transfer fee -// // is charged (and creation fee is not). -// Balances::set_free_balance(&CONTRACT_SHOULD_TRANSFER_TO, 25); - -// assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), 100_000.into(), Vec::new())); - -// assert_eq!( -// Balances::free_balance(&0), -// // 3 - value sent with the transaction -// // 2 * 26 - gas used by the contract (26) multiplied by gas price (2) -// // 2 * 135 - base gas fee for call (by transaction) -// // 44 - (rounded from 45) fee per transfer (by transaction) -// // 2 * 135 - base gas fee for call (by the contract) -// // 44 - (rounded from 45) fee per transfer (by the contract) -// 100_000_000 - 3 - (2 * 26) - (2 * 135) - 44 - (2 * 135) - 44, -// ); -// assert_eq!( -// Balances::free_balance(&1), -// 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, -// ); -// assert_eq!( -// Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), -// 25 + CONTRACT_SHOULD_TRANSFER_VALUE, -// ); -// }); -// } - -// #[test] -// fn contract_transfer_oog() { -// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - -// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - -// with_externalities(&mut ExtBuilder::default().build(), || { -// >::insert(1, code_transfer.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); -// Balances::set_free_balance(&1, 11); -// Balances::increase_total_stake_by(11); - -// assert_ok!(Contract::call(Origin::signed(0), 1, 3.into(), (135 + 135 + 7).into(), Vec::new())); - -// assert_eq!( -// Balances::free_balance(&0), -// // 3 - value sent with the transaction -// // 2 * 7 - gas used by the contract (7) multiplied by gas price (2) -// // 2 * 135 - base gas fee for call (by transaction) -// // 2 * 135 - base gas fee for call (by contract) -// 100_000_000 - 3 - (2 * 7) - (2 * 135) - (2 * 135), -// ); - -// // Transaction level transfer should succeed. -// assert_eq!(Balances::free_balance(&1), 14); -// // But `ext_call` should not. -// assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 0); - -// assert_eq!(System::events(), vec![ -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::contract(RawEvent::Transfer(0, 1, 3)), -// }, -// ]); -// }); -// } - -// #[test] -// fn contract_transfer_max_depth() { -// const CONTRACT_SHOULD_TRANSFER_TO: u64 = 9; - -// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - -// with_externalities(&mut ExtBuilder::default().build(), || { -// >::insert(CONTRACT_SHOULD_TRANSFER_TO, code_transfer.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); -// Balances::set_free_balance(&CONTRACT_SHOULD_TRANSFER_TO, 11); -// Balances::increase_total_stake_by(11); - -// assert_ok!(Contract::call(Origin::signed(0), CONTRACT_SHOULD_TRANSFER_TO, 3.into(), 100_000.into(), Vec::new())); - -// assert_eq!( -// Balances::free_balance(&0), -// // 3 - value sent with the transaction -// // 2 * 26 * 100 - gas used by the contract (26) multiplied by gas price (2) -// // multiplied by max depth (100). -// // 2 * 135 * 100 - base gas fee for call (by transaction) multiplied by max depth (100). -// 100_000_000 - 3 - (2 * 26 * 100) - (2 * 135 * 100), -// ); -// assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 14); -// }); -// } - -// /// Convert a byte slice to a string with hex values. -// /// -// /// Each value is preceeded with a `\` character. -// fn escaped_bytestring(bytes: &[u8]) -> String { -// use std::fmt::Write; -// let mut result = String::new(); -// for b in bytes { -// write!(result, "\\{:02x}", b).unwrap(); -// } -// result -// } - -// /// Create a constructor for the specified code. -// /// -// /// When constructor is executed, it will call `ext_return` with code that -// /// specified in `child_bytecode`. -// fn code_ctor(child_bytecode: &[u8]) -> String { -// format!( -// r#" -// (module -// ;; ext_return(data_ptr: u32, data_len: u32) -> ! -// (import "env" "ext_return" (func $ext_return (param i32 i32))) -// (import "env" "memory" (memory 1 1)) -// (func (export "call") -// (call $ext_return -// (i32.const 4) -// (i32.const {code_len}) -// ) -// ;; ext_return is diverging, i.e. doesn't return. -// unreachable -// ) -// (data (i32.const 4) "{escaped_bytecode}") -// ) -// "#, -// escaped_bytecode = escaped_bytestring(child_bytecode), -// code_len = child_bytecode.len(), -// ) -// } - -// /// Returns code that uses `ext_create` runtime call. -// /// -// /// Takes bytecode of the contract that needs to be deployed. -// fn code_create(constructor: &[u8]) -> String { -// format!( -// r#" -// (module -// ;; ext_create( -// ;; code_ptr: u32, -// ;; code_len: u32, -// ;; gas: u64, -// ;; value_ptr: u32, -// ;; value_len: u32, -// ;; input_data_ptr: u32, -// ;; input_data_len: u32, -// ;; ) -> u32 -// (import "env" "ext_create" (func $ext_create (param i32 i32 i64 i32 i32 i32 i32) (result i32))) -// (import "env" "memory" (memory 1 1)) -// (func (export "call") -// (drop -// (call $ext_create -// (i32.const 12) ;; Pointer to `code` -// (i32.const {code_len}) ;; Length of `code` -// (i64.const 0) ;; How much gas to devote for the execution. 0 = all. -// (i32.const 4) ;; Pointer to the buffer with value to transfer -// (i32.const 8) ;; Length of the buffer with value to transfer -// (i32.const 0) ;; Pointer to input data buffer address -// (i32.const 0) ;; Length of input data buffer -// ) -// ) -// ) -// ;; Amount of value to transfer. -// ;; Represented by u64 (8 bytes long) in little endian. -// (data (i32.const 4) "\03\00\00\00\00\00\00\00") -// ;; Embedded wasm code. -// (data (i32.const 12) "{escaped_constructor}") -// ) -// "#, -// escaped_constructor = escaped_bytestring(constructor), -// code_len = constructor.len(), -// ) -// } - -// #[test] -// fn contract_create() { -// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); -// let code_ctor_transfer = wabt::wat2wasm(&code_ctor(&code_transfer)).unwrap(); -// let code_create = wabt::wat2wasm(&code_create(&code_ctor_transfer)).unwrap(); - -// with_externalities(&mut ExtBuilder::default().build(), || { -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); -// Balances::set_free_balance(&1, 0); -// Balances::set_free_balance(&9, 30); -// Balances::increase_total_stake_by(30); - -// >::insert(1, code_create.to_vec()); - -// // When invoked, the contract at address `1` must create a contract with 'transfer' code. -// assert_ok!(Contract::call(Origin::signed(0), 1, 11.into(), 100_000.into(), Vec::new())); - -// let derived_address = ::DetermineContractAddress::contract_address_for( -// &code_ctor_transfer, -// &[], -// &1, -// ); - -// // 11 - value sent with the transaction -// // 2 * 362 - gas spent by the deployer contract (362) multiplied by gas price (2) -// // 2 * 135 - base gas fee for call (top level) -// // 2 * 175 - base gas fee for create (by contract) -// // ((21 / 2) * 2) - price per account creation -// let expected_gas_after_create = -// 100_000_000 - 11 - (2 * 362) - (2 * 135) - (2 * 175) - ((21 / 2) * 2); -// assert_eq!(Balances::free_balance(&0), expected_gas_after_create); -// assert_eq!(Balances::free_balance(&1), 8); -// assert_eq!(Balances::free_balance(&derived_address), 3); - -// assert_eq!(System::events(), vec![ -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::balances( -// balances::RawEvent::NewAccount( -// derived_address, -// 0, -// balances::NewAccountOutcome::NoHint -// ) -// ), -// }, -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::contract(RawEvent::Transfer(0, 1, 11)), -// }, -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::contract(RawEvent::Transfer(1, 2, 3)), -// }, -// ]); - -// // Initiate transfer to the newly created contract. -// assert_ok!(Contract::call(Origin::signed(0), derived_address, 22.into(), 100_000.into(), Vec::new())); - -// assert_eq!( -// Balances::free_balance(&0), -// // 22 - value sent with the transaction -// // (2 * 26) - gas used by the contract -// // (2 * 135) - base gas fee for call (top level) -// // (2 * 135) - base gas fee for call (by transfer contract) -// expected_gas_after_create - 22 - (2 * 26) - (2 * 135) - (2 * 135), -// ); -// assert_eq!(Balances::free_balance(&derived_address), 22 - 3); -// assert_eq!(Balances::free_balance(&9), 36); -// }); -// } - -// #[test] -// fn top_level_create() { -// let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); -// let code_ctor_transfer = wabt::wat2wasm(&code_ctor(&code_transfer)).unwrap(); - -// with_externalities(&mut ExtBuilder::default().gas_price(3).build(), || { -// let derived_address = ::DetermineContractAddress::contract_address_for( -// &code_ctor_transfer, -// &[], -// &0, -// ); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); -// Balances::set_free_balance(&derived_address, 30); -// Balances::increase_total_stake_by(30); - -// assert_ok!(Contract::create( -// Origin::signed(0), -// 11.into(), -// 100_000.into(), -// code_ctor_transfer.clone(), -// Vec::new(), -// )); - -// // 11 - value sent with the transaction -// // (3 * 129) - gas spent by the init_code. -// // (3 * 175) - base gas fee for create (175) (top level) multipled by gas price (3) -// // ((21 / 3) * 3) - price for contract creation -// assert_eq!( -// Balances::free_balance(&0), -// 100_000_000 - 11 - (3 * 129) - (3 * 175) - ((21 / 3) * 3) -// ); -// assert_eq!(Balances::free_balance(&derived_address), 30 + 11); - -// assert_eq!(>::get(&derived_address), code_transfer); - -// assert_eq!(System::events(), vec![ -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::contract(RawEvent::Transfer(0, derived_address, 11)), -// }, -// EventRecord { -// phase: Phase::ApplyExtrinsic(0), -// event: MetaEvent::contract(RawEvent::Created(0, 1)), -// }, -// ]); -// }); -// } - -// const CODE_NOP: &'static str = r#" -// (module -// (func (export "call") -// nop -// ) -// ) -// "#; - -// #[test] -// fn refunds_unused_gas() { -// let code_nop = wabt::wat2wasm(CODE_NOP).unwrap(); - -// with_externalities(&mut ExtBuilder::default().build(), || { -// >::insert(1, code_nop.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); - -// assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); - -// assert_eq!(Balances::free_balance(&0), 100_000_000 - 4 - (2 * 135)); -// }); -// } - -// #[test] -// fn call_with_zero_value() { -// with_externalities(&mut ExtBuilder::default().build(), || { -// >::insert(1, vec![]); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); - -// assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new())); - -// assert_eq!(Balances::free_balance(&0), 100_000_000 - (2 * 135)); -// }); -// } - -// #[test] -// fn create_with_zero_endowment() { -// let code_nop = wabt::wat2wasm(CODE_NOP).unwrap(); - -// with_externalities(&mut ExtBuilder::default().build(), || { -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); - -// assert_ok!(Contract::create(Origin::signed(0), 0.into(), 100_000.into(), code_nop, Vec::new())); - -// assert_eq!( -// Balances::free_balance(&0), -// // 4 - for the gas spent by the constructor -// // 2 * 175 - base gas fee for create (175) multiplied by gas price (2) (top level) -// 100_000_000 - 4 - (2 * 175), -// ); -// }); -// } - -// #[test] -// fn account_removal_removes_storage() { -// with_externalities( -// &mut ExtBuilder::default().existential_deposit(100).build(), -// || { -// // Setup two accounts with free balance above than exsistential threshold. -// { -// Balances::set_free_balance(&1, 110); -// Balances::increase_total_stake_by(110); -// >::insert(1, b"foo".to_vec(), b"1".to_vec()); -// >::insert(1, b"bar".to_vec(), b"2".to_vec()); - -// Balances::set_free_balance(&2, 110); -// Balances::increase_total_stake_by(110); -// >::insert(2, b"hello".to_vec(), b"3".to_vec()); -// >::insert(2, b"world".to_vec(), b"4".to_vec()); -// } - -// // Transfer funds from account 1 of such amount that after this transfer -// // the balance of account 1 is will be below than exsistential threshold. -// // -// // This should lead to the removal of all storage associated with this account. -// assert_ok!(Balances::transfer(Origin::signed(1), 2.into(), 20.into())); - -// // Verify that all entries from account 1 is removed, while -// // entries from account 2 is in place. -// { -// assert_eq!(>::get(1, b"foo".to_vec()), None); -// assert_eq!(>::get(1, b"bar".to_vec()), None); - -// assert_eq!( -// >::get(2, b"hello".to_vec()), -// Some(b"3".to_vec()) -// ); -// assert_eq!( -// >::get(2, b"world".to_vec()), -// Some(b"4".to_vec()) -// ); -// } -// }, -// ); -// } - -// const CODE_UNREACHABLE: &'static str = r#" -// (module -// (func (export "call") -// nop -// unreachable -// ) -// ) -// "#; - -// #[test] -// fn top_level_call_refunds_even_if_fails() { -// let code_unreachable = wabt::wat2wasm(CODE_UNREACHABLE).unwrap(); -// with_externalities(&mut ExtBuilder::default().gas_price(4).build(), || { -// >::insert(1, code_unreachable.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); - -// assert_err!( -// Contract::call(Origin::signed(0), 1, 0.into(), 100_000.into(), Vec::new()), -// "vm execute returned error while call" -// ); - -// assert_eq!(Balances::free_balance(&0), 100_000_000 - (4 * 3) - (4 * 135)); - -// assert_eq!(System::events(), vec![]); -// }); -// } - -// const CODE_LOOP: &'static str = r#" -// (module -// (func (export "call") -// (loop -// (br 0) -// ) -// ) -// ) -// "#; - -// #[test] -// fn block_gas_limit() { -// let code_loop = wabt::wat2wasm(CODE_LOOP).unwrap(); -// with_externalities( -// &mut ExtBuilder::default().block_gas_limit(100_000).build(), -// || { -// >::insert(1, code_loop.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); - -// // Spend 50_000 units of gas (OOG). -// assert_err!( -// Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), Vec::new()), -// "vm execute returned error while call" -// ); - -// // Ensure we can't spend more gas than available in block gas limit. -// assert_err!( -// Contract::call(Origin::signed(0), 1, 0.into(), 50_001.into(), Vec::new()), -// "block gas limit is reached" -// ); - -// // However, we can spend another 50_000 -// assert_err!( -// Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), Vec::new()), -// "vm execute returned error while call" -// ); -// }, -// ); -// } - -// const CODE_INPUT_DATA: &'static str = r#" -// (module -// (import "env" "ext_input_size" (func $ext_input_size (result i32))) -// (import "env" "ext_input_copy" (func $ext_input_copy (param i32 i32 i32))) -// (import "env" "memory" (memory 1 1)) - -// (func (export "call") -// (block $fail -// ;; fail if ext_input_size != 4 -// (br_if $fail -// (i32.ne -// (i32.const 4) -// (call $ext_input_size) -// ) -// ) - -// (call $ext_input_copy -// (i32.const 0) -// (i32.const 0) -// (i32.const 4) -// ) - - -// (br_if $fail -// (i32.ne -// (i32.load8_u (i32.const 0)) -// (i32.const 0) -// ) -// ) -// (br_if $fail -// (i32.ne -// (i32.load8_u (i32.const 1)) -// (i32.const 1) -// ) -// ) -// (br_if $fail -// (i32.ne -// (i32.load8_u (i32.const 2)) -// (i32.const 2) -// ) -// ) -// (br_if $fail -// (i32.ne -// (i32.load8_u (i32.const 3)) -// (i32.const 3) -// ) -// ) - -// (return) -// ) -// unreachable -// ) -// ) -// "#; - -// #[test] -// fn input_data() { -// let code_input_data = wabt::wat2wasm(CODE_INPUT_DATA).unwrap(); -// with_externalities( -// &mut ExtBuilder::default().build(), -// || { -// >::insert(1, code_input_data.to_vec()); - -// Balances::set_free_balance(&0, 100_000_000); -// Balances::increase_total_stake_by(100_000_000); - -// assert_ok!(Contract::call(Origin::signed(0), 1, 0.into(), 50_000.into(), vec![0, 1, 2, 3])); - -// // all asserts are made within contract code itself. -// }, -// ); -// } From 2d8dd9ca43861b4f01e881c21080f484fa56a4c1 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 14:54:13 +0300 Subject: [PATCH 021/108] Fix borked merge --- srml/contract/src/vm/mod.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 5688ae573e2aa..0c1e2d0ca8756 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -586,11 +586,13 @@ r#" #[test] fn caller() { - let code_caller = wabt::wat2wasm(CODE_CALLER).unwrap(); + let (code_caller, mem_def) = prepare_code(CODE_CALLER); let mut mock_ext = MockExt::default(); execute( + b"call", &code_caller, + &mem_def, &[], &mut Vec::new(), &mut mock_ext, From 601359d075f5d95fb505cc25fcf8cb268e02b118 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 15:02:25 +0300 Subject: [PATCH 022/108] Fix build for wasm --- srml/contract/src/code/mod.rs | 1 + srml/contract/src/vm/env_def/mod.rs | 2 -- srml/contract/src/vm/mod.rs | 16 +++++++--------- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 39fa8397f2563..14ea4241e20b6 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -17,6 +17,7 @@ use codec::Compact; use runtime_support::StorageMap; use runtime_primitives::traits::{As, Hash, CheckedMul}; +use rstd::prelude::*; use gas::GasMeter; use vm::runtime::Env; use {Schedule, Trait, CodeHash, CodeStorage, PrestineCode}; diff --git a/srml/contract/src/vm/env_def/mod.rs b/srml/contract/src/vm/env_def/mod.rs index 0fbb05088b426..baf5d79118e00 100644 --- a/srml/contract/src/vm/env_def/mod.rs +++ b/srml/contract/src/vm/env_def/mod.rs @@ -16,8 +16,6 @@ use super::{Ext, Runtime}; use parity_wasm::elements::{FunctionType, ValueType}; -use rstd::prelude::*; -use rstd::collections::btree_map::BTreeMap; use sandbox::{self, TypedValue}; #[macro_use] diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 0c1e2d0ca8756..ad76b13dac75e 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -89,15 +89,13 @@ pub fn execute<'a, E: Ext>( gas_meter: &mut GasMeter, ) -> Result<(), &'static str> { let memory = - sandbox::Memory::new( - memory_def.initial, - Some(memory_def.maximum) - ) - .expect( - "memory_def.initial can't be greater than memory_def.maximum; - thus Memory::new must not fail; - qed - "); + sandbox::Memory::new(memory_def.initial, Some(memory_def.maximum)).unwrap_or_else(|_| { + panic!( + "memory_def.initial can't be greater than memory_def.maximum; + thus Memory::new must not fail; + qed" + ) + }); let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); imports.add_memory("env", "memory", memory.clone()); From 4271c48370a159741c4ca46c3cae42085c43b2af Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 15:07:38 +0300 Subject: [PATCH 023/108] fmt --- srml/contract/src/code/mod.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/code/mod.rs index 14ea4241e20b6..e0b97d9569580 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/code/mod.rs @@ -15,12 +15,12 @@ // along with Substrate. If not, see . use codec::Compact; -use runtime_support::StorageMap; -use runtime_primitives::traits::{As, Hash, CheckedMul}; -use rstd::prelude::*; use gas::GasMeter; +use rstd::prelude::*; +use runtime_primitives::traits::{As, CheckedMul, Hash}; +use runtime_support::StorageMap; use vm::runtime::Env; -use {Schedule, Trait, CodeHash, CodeStorage, PrestineCode}; +use {CodeHash, CodeStorage, PrestineCode, Schedule, Trait}; pub mod prepare; @@ -48,7 +48,8 @@ pub fn save( schedule: &Schedule, ) -> Result, &'static str> { let code_len_in_gas = >::sa(original_code.len() as u64); - let cost = schedule.put_code_per_byte_cost + let cost = schedule + .put_code_per_byte_cost .checked_mul(&code_len_in_gas) .ok_or_else(|| "overflow occured when calculating put_code price")?; if gas_meter.charge(cost).is_out_of_gas() { @@ -59,10 +60,7 @@ pub fn save( // The first time instrumentation is on the user. However, consequent reinstrumentation // due to the schedule changes is on governance system. - let instrumented_module = prepare::prepare_contract::( - &original_code, - schedule, - )?; + let instrumented_module = prepare::prepare_contract::(&original_code, schedule)?; // TODO: validate the code. If the code is not valid, then don't store it. @@ -72,16 +70,18 @@ pub fn save( Ok(code_hash) } -pub fn load(code_hash: &CodeHash, schedule: &Schedule,) -> Result { - let instrumented_module = >::get(code_hash).ok_or_else(|| "code is not found")?; +pub fn load( + code_hash: &CodeHash, + schedule: &Schedule, +) -> Result { + let instrumented_module = + >::get(code_hash).ok_or_else(|| "code is not found")?; if instrumented_module.schedule_version < schedule.version { - let original_code = >::get(code_hash).ok_or_else(|| "prestine code is not found")?; + let original_code = + >::get(code_hash).ok_or_else(|| "prestine code is not found")?; - let instrumented_module = prepare::prepare_contract::( - &original_code, - schedule, - )?; + let instrumented_module = prepare::prepare_contract::(&original_code, schedule)?; >::insert(code_hash, instrumented_module.clone()); From 56280a035fd0f35be5f028b9b8de18bc842759e3 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 18:08:45 +0300 Subject: [PATCH 024/108] Scaffolding for abstracting vm. --- srml/contract/src/exec.rs | 171 +++++++++++++++++++------ srml/contract/src/lib.rs | 4 + srml/contract/src/vm/env_def/macros.rs | 3 +- srml/contract/src/vm/env_def/mod.rs | 3 +- srml/contract/src/vm/mod.rs | 132 ++++++++----------- srml/contract/src/vm/runtime.rs | 3 +- 6 files changed, 195 insertions(+), 121 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 2a40c20025b1c..536d52d868431 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -24,6 +24,9 @@ use rstd::prelude::*; use runtime_primitives::traits::{Zero, CheckedAdd, CheckedSub}; use balances::{self, EnsureAccountLiquid}; +pub type BalanceOf = ::Balance; +pub type AccountIdOf = ::AccountId; + // TODO: Add logs pub struct CreateReceipt { pub address: T::AccountId, @@ -32,16 +35,108 @@ pub struct CreateReceipt { // TODO: Add logs. pub struct CallReceipt; -pub struct ExecutionContext<'a, T: Trait + 'a> { +/// An interface that provides an access to the external environment in which the +/// smart-contract is executed. +/// +/// This interface is specialised to an account of the executing code, so all +/// operations are implicitly performed on that account. +pub trait Ext { + type T: Trait; + + /// Returns the storage entry of the executing account by the given key. + fn get_storage(&self, key: &[u8]) -> Option>; + + /// Sets the storage entry by the given key to the specified value. + fn set_storage(&mut self, key: &[u8], value: Option>); + + /// Create a new account for a contract. + /// + /// The newly created account will be associated with the `code`. `value` specifies the amount of value + /// transfered from this to the newly created account. + fn create( + &mut self, + code: &CodeHash, + value: BalanceOf, + gas_meter: &mut GasMeter, + data: &[u8], + ) -> Result, ()>; + + /// Call (possibly transfering some amount of funds) into the specified account. + fn call( + &mut self, + to: &AccountIdOf, + value: BalanceOf, + gas_meter: &mut GasMeter, + data: &[u8], + output_data: &mut Vec, + ) -> Result<(), ()>; + + /// Returns a reference to the account id of the caller. + fn caller(&self) -> &AccountIdOf; +} + +pub trait Loader { + type Executable; + + fn load_init(&self, code_hash: &CodeHash) -> Result; + fn load_main(&self, code_hash: &CodeHash) -> Result; +} + +pub trait Vm { + type Executable; + + fn execute>( + &self, + exec: &Self::Executable, + ext: &mut E, + input_data: &[u8], + output_data: &mut Vec, + gas_meter: &mut GasMeter, + ) -> Result<(), &'static str>; +} + +pub struct WasmExecutable { + pub entrypoint_name: &'static [u8], + pub memory_def: ::code::MemoryDefinition, + pub instrumented_code: Vec, +} + +pub struct WasmLoader<'a, T: Trait> { + config: &'a Config, +} + +impl<'a, T: Trait> Loader for WasmLoader<'a, T> { + type Executable = WasmExecutable; + + fn load_init(&self, code_hash: &CodeHash) -> Result { + let dest_code = code::load::(code_hash, &self.config.schedule)?; + Ok(WasmExecutable { + entrypoint_name: b"deploy", + memory_def: dest_code.memory_def, + instrumented_code: dest_code.code, + }) + } + fn load_main(&self, code_hash: &CodeHash) -> Result { + let dest_code = code::load::(code_hash, &self.config.schedule)?; + Ok(WasmExecutable { + entrypoint_name: b"call", + memory_def: dest_code.memory_def, + instrumented_code: dest_code.code, + }) + } +} + +pub struct ExecutionContext<'a, T: Trait + 'a, V: Vm + 'a> { // typically should be dest pub self_account: T::AccountId, pub overlay: OverlayAccountDb<'a, T>, pub depth: usize, pub events: Vec>, pub config: &'a Config, + pub vm: &'a V, } -impl<'a, T: Trait> ExecutionContext<'a, T> { +impl<'a, T: Trait, V: Vm> ExecutionContext<'a, T, V> { /// Make a call to the specified address. pub fn call( &mut self, @@ -71,6 +166,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { depth: self.depth + 1, events: Vec::new(), config: self.config, + vm: self.vm, }; if value > T::Balance::zero() { @@ -85,21 +181,21 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { } if let Some(dest_code_hash) = dest_code_hash { - let dest_code = code::load::(&dest_code_hash, &self.config.schedule)?; - - vm::execute( - b"call", - &dest_code.code, - &dest_code.memory_def, - input_data, - output_data, - &mut CallContext { - ctx: &mut nested, - caller: caller, - }, - &self.config.schedule, - gas_meter, - )?; + // let dest_code = code::load::(&dest_code_hash, &self.config.schedule)?; + + // vm::execute( + // b"call", + // &dest_code.code, + // &dest_code.memory_def, + // input_data, + // output_data, + // &mut CallContext { + // ctx: &mut nested, + // caller: caller, + // }, + // &self.config.schedule, + // gas_meter, + // )?; } (nested.overlay.into_change_set(), nested.events) @@ -149,6 +245,7 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { depth: self.depth + 1, events: Vec::new(), config: self.config, + vm: self.vm, }; if endowment > T::Balance::zero() { @@ -162,23 +259,23 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { )?; } - let dest_code = code::load::(code_hash, &self.config.schedule)?; + // let dest_code = code::load::(code_hash, &self.config.schedule)?; // TODO: Do something with the output data. - let mut output_data = Vec::new(); - vm::execute( - b"deploy", - &dest_code.code, - &dest_code.memory_def, - input_data, - &mut output_data, - &mut CallContext { - ctx: &mut nested, - caller: caller, - }, - &self.config.schedule, - gas_meter, - )?; + let mut output_data = Vec::::new(); + // vm::execute( + // b"deploy", + // &dest_code.code, + // &dest_code.memory_def, + // input_data, + // &mut output_data, + // &mut CallContext { + // ctx: &mut nested, + // caller: caller, + // }, + // &self.config.schedule, + // gas_meter, + // )?; (nested.overlay.into_change_set(), nested.events) }; @@ -208,13 +305,13 @@ impl<'a, T: Trait> ExecutionContext<'a, T> { /// NOTE: that we allow for draining all funds of the contract so it /// can go below existential deposit, essentially giving a contract /// the chance to give up it's life. -fn transfer<'a, T: Trait>( +fn transfer<'a, T: Trait, V: Vm>( gas_meter: &mut GasMeter, contract_create: bool, transactor: &T::AccountId, dest: &T::AccountId, value: T::Balance, - ctx: &mut ExecutionContext<'a, T>, + ctx: &mut ExecutionContext<'a, T, V>, ) -> Result<(), &'static str> { let to_balance = ctx.overlay.get_balance(dest); @@ -268,12 +365,12 @@ fn transfer<'a, T: Trait>( Ok(()) } -struct CallContext<'a, 'b: 'a, T: Trait + 'b> { - ctx: &'a mut ExecutionContext<'b, T>, +struct CallContext<'a, 'b: 'a, T: Trait + 'b, V: Vm + 'b> { + ctx: &'a mut ExecutionContext<'b, T, V>, caller: T::AccountId, } -impl<'a, 'b: 'a, T: Trait + 'b> vm::Ext for CallContext<'a, 'b, T> { +impl<'a, 'b: 'a, T: Trait + 'b, V: Vm + 'b> Ext for CallContext<'a, 'b, T, V> { type T = T; fn get_storage(&self, key: &[u8]) -> Option> { diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index e9c7e2a8447d2..3d6190dfa1109 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -205,12 +205,14 @@ decl_module! { let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; let cfg = Config::preload(); + let vm = ::vm::WasmVm::new(&cfg); let mut ctx = ExecutionContext { self_account: origin.clone(), depth: 0, overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), events: Vec::new(), config: &cfg, + vm: &vm, }; let mut output_data = Vec::new(); @@ -260,12 +262,14 @@ decl_module! { let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; let cfg = Config::preload(); + let vm = ::vm::WasmVm::new(&cfg); let mut ctx = ExecutionContext { self_account: origin.clone(), depth: 0, overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), events: Vec::new(), config: &cfg, + vm: &vm, }; let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &code_hash, &data); diff --git a/srml/contract/src/vm/env_def/macros.rs b/srml/contract/src/vm/env_def/macros.rs index c09ab16bba40f..0c6e1bfb3c0a2 100644 --- a/srml/contract/src/vm/env_def/macros.rs +++ b/srml/contract/src/vm/env_def/macros.rs @@ -191,7 +191,8 @@ mod tests { use runtime_primitives::traits::{As, Zero}; use sandbox::{self, ReturnValue, TypedValue}; use vm::tests::MockExt; - use vm::{Ext, Runtime}; + use exec::Ext; + use vm::Runtime; use Trait; #[test] diff --git a/srml/contract/src/vm/env_def/mod.rs b/srml/contract/src/vm/env_def/mod.rs index baf5d79118e00..0f4de9186036d 100644 --- a/srml/contract/src/vm/env_def/mod.rs +++ b/srml/contract/src/vm/env_def/mod.rs @@ -14,7 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use super::{Ext, Runtime}; +use super::Runtime; +use exec::Ext; use parity_wasm::elements::{FunctionType, ValueType}; use sandbox::{self, TypedValue}; diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index ad76b13dac75e..449d4206e227c 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -25,99 +25,68 @@ use rstd::prelude::*; use {Trait, Schedule, CodeHash}; use {balances, sandbox, system}; -type BalanceOf = ::Balance; -type AccountIdOf = ::AccountId; - #[macro_use] pub mod env_def; pub mod runtime; use self::runtime::{to_execution_result, Runtime}; -/// An interface that provides an access to the external environment in which the -/// smart-contract is executed. -/// -/// This interface is specialised to an account of the executing code, so all -/// operations are implicitly performed on that account. -pub trait Ext { - type T: Trait; - - /// Returns the storage entry of the executing account by the given key. - fn get_storage(&self, key: &[u8]) -> Option>; - - /// Sets the storage entry by the given key to the specified value. - fn set_storage(&mut self, key: &[u8], value: Option>); - - /// Create a new account for a contract. - /// - /// The newly created account will be associated with the `code`. `value` specifies the amount of value - /// transfered from this to the newly created account. - fn create( - &mut self, - code: &CodeHash, - value: BalanceOf, - gas_meter: &mut GasMeter, - data: &[u8], - ) -> Result, ()>; - - /// Call (possibly transfering some amount of funds) into the specified account. - fn call( - &mut self, - to: &AccountIdOf, - value: BalanceOf, - gas_meter: &mut GasMeter, - data: &[u8], - output_data: &mut Vec, - ) -> Result<(), ()>; +// TODO: Instead of taking the code explicitly can we take the code hash? +// TODO: Extract code injection stuff and expect the code to be already prepared? - /// Returns a reference to the account id of the caller. - fn caller(&self) -> &AccountIdOf; +pub struct WasmVm<'a, T: Trait> { + // TODO: Change to schedule. + config: &'a ::Config, } -// TODO: Instead of taking the code explicitly can we take the code hash? -// TODO: Extract code injection stuff and expect the code to be already prepared? +impl<'a, T: Trait> WasmVm<'a, T> { + pub fn new(config: &'a ::Config) -> Self { + WasmVm { config } + } +} -/// Execute the given code as a contract. -pub fn execute<'a, E: Ext>( - entrypoint_name: &[u8], - code: &[u8], - memory_def: &MemoryDefinition, - input_data: &[u8], - output_data: &mut Vec, - ext: &'a mut E, - schedule: &Schedule<::Gas>, - gas_meter: &mut GasMeter, -) -> Result<(), &'static str> { - let memory = - sandbox::Memory::new(memory_def.initial, Some(memory_def.maximum)).unwrap_or_else(|_| { - panic!( - "memory_def.initial can't be greater than memory_def.maximum; - thus Memory::new must not fail; - qed" - ) +impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { + type Executable = ::exec::WasmExecutable; + + fn execute>( + &self, + exec: &::exec::WasmExecutable, + ext: &mut E, + input_data: &[u8], + output_data: &mut Vec, + gas_meter: &mut GasMeter, + ) -> Result<(), &'static str> { + let memory = + sandbox::Memory::new(exec.memory_def.initial, Some(exec.memory_def.maximum)).unwrap_or_else(|_| { + panic!( + "memory_def.initial can't be greater than memory_def.maximum; + thus Memory::new must not fail; + qed" + ) + }); + + let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); + imports.add_memory("env", "memory", memory.clone()); + runtime::Env::impls(&mut |name, func_ptr| { + imports.add_host_func("env", name, func_ptr); }); - let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); - imports.add_memory("env", "memory", memory.clone()); - runtime::Env::impls(&mut |name, func_ptr| { - imports.add_host_func("env", name, func_ptr); - }); - - let mut runtime = Runtime::new(ext, input_data, output_data, &schedule, memory, gas_meter); - - // Instantiate the instance from the instrumented module code. - match sandbox::Instance::new(code, &imports, &mut runtime) { - // No errors or traps were generated on instantiation! That - // means we can now invoke the contract entrypoint. - Ok(mut instance) => { - let err = instance.invoke(entrypoint_name, &[], &mut runtime).err(); - to_execution_result(runtime, err) + let mut runtime = Runtime::new(ext, input_data, output_data, &self.config.schedule, memory, gas_meter); + + // Instantiate the instance from the instrumented module code. + match sandbox::Instance::new(&exec.instrumented_code, &imports, &mut runtime) { + // No errors or traps were generated on instantiation! That + // means we can now invoke the contract entrypoint. + Ok(mut instance) => { + let err = instance.invoke(exec.entrypoint_name, &[], &mut runtime).err(); + to_execution_result(runtime, err) + } + // `start` function trapped. Treat it in the same manner as an execution error. + Err(err @ sandbox::Error::Execution) => to_execution_result(runtime, Some(err)), + // Other instantiation errors. + // Return without executing anything. + Err(_) => return Err("failed to instantiate the contract"), } - // `start` function trapped. Treat it in the same manner as an execution error. - Err(err @ sandbox::Error::Execution) => to_execution_result(runtime, Some(err)), - // Other instantiation errors. - // Return without executing anything. - Err(_) => return Err("failed to instantiate the contract"), } } @@ -127,6 +96,7 @@ mod tests { use gas::GasMeter; use std::collections::HashMap; use tests::Test; + use exec; use wabt; use runtime_primitives::testing::H256; @@ -151,7 +121,7 @@ mod tests { transfers: Vec, next_account_id: u64, } - impl Ext for MockExt { + impl ::exec::Ext for MockExt { type T = Test; fn get_storage(&self, key: &[u8]) -> Option> { diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/vm/runtime.rs index 1bae52e61dc05..5baf55ba72bed 100644 --- a/srml/contract/src/vm/runtime.rs +++ b/srml/contract/src/vm/runtime.rs @@ -16,7 +16,8 @@ //! Environment definition of the wasm smart-contract runtime. -use super::{BalanceOf, Schedule, CreateReceipt, Ext}; +use super::{Schedule, CreateReceipt}; +use exec::{Ext, BalanceOf}; use rstd::prelude::*; use codec::{Decode, Encode}; use gas::{GasMeter, GasMeterResult}; From 7053d297c15077b4149900e4ed68084e225ae69d Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 19:45:05 +0300 Subject: [PATCH 025/108] Hook up execution to exec layer. --- srml/contract/src/exec.rs | 88 +++++++++++++++++++++---------------- srml/contract/src/lib.rs | 4 ++ srml/contract/src/vm/mod.rs | 5 +-- 3 files changed, 56 insertions(+), 41 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 536d52d868431..fa5da2f8ca4eb 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -17,7 +17,6 @@ use super::{CodeHash, ContractAddressFor, Trait, Event, RawEvent, Config}; use account_db::{AccountDb, OverlayAccountDb}; use gas::GasMeter; -use vm; use code; use rstd::prelude::*; @@ -96,6 +95,7 @@ pub trait Vm { } pub struct WasmExecutable { + // TODO: Remove these pubs pub entrypoint_name: &'static [u8], pub memory_def: ::code::MemoryDefinition, pub instrumented_code: Vec, @@ -105,6 +105,12 @@ pub struct WasmLoader<'a, T: Trait> { config: &'a Config, } +impl<'a, T: Trait> WasmLoader<'a, T> { + pub fn new(config: &'a Config) -> Self { + WasmLoader { config } + } +} + impl<'a, T: Trait> Loader for WasmLoader<'a, T> { type Executable = WasmExecutable; @@ -126,7 +132,7 @@ impl<'a, T: Trait> Loader for WasmLoader<'a, T> { } } -pub struct ExecutionContext<'a, T: Trait + 'a, V: Vm + 'a> { +pub struct ExecutionContext<'a, T: Trait + 'a, V, L> { // typically should be dest pub self_account: T::AccountId, pub overlay: OverlayAccountDb<'a, T>, @@ -134,9 +140,15 @@ pub struct ExecutionContext<'a, T: Trait + 'a, V: Vm + 'a> { pub events: Vec>, pub config: &'a Config, pub vm: &'a V, + pub loader: &'a L, } -impl<'a, T: Trait, V: Vm> ExecutionContext<'a, T, V> { +impl<'a, T, E, V, L> ExecutionContext<'a, T, V, L> +where + T: Trait, + L: Loader, + V: Vm, +{ /// Make a call to the specified address. pub fn call( &mut self, @@ -167,6 +179,7 @@ impl<'a, T: Trait, V: Vm> ExecutionContext<'a, T, V> { events: Vec::new(), config: self.config, vm: self.vm, + loader: self.loader, }; if value > T::Balance::zero() { @@ -181,21 +194,17 @@ impl<'a, T: Trait, V: Vm> ExecutionContext<'a, T, V> { } if let Some(dest_code_hash) = dest_code_hash { - // let dest_code = code::load::(&dest_code_hash, &self.config.schedule)?; - - // vm::execute( - // b"call", - // &dest_code.code, - // &dest_code.memory_def, - // input_data, - // output_data, - // &mut CallContext { - // ctx: &mut nested, - // caller: caller, - // }, - // &self.config.schedule, - // gas_meter, - // )?; + let executable = self.loader.load_main(&dest_code_hash)?; + self.vm.execute( + &executable, + &mut CallContext { + ctx: &mut nested, + caller: caller, + }, + input_data, + output_data, + gas_meter, + )?; } (nested.overlay.into_change_set(), nested.events) @@ -246,6 +255,7 @@ impl<'a, T: Trait, V: Vm> ExecutionContext<'a, T, V> { events: Vec::new(), config: self.config, vm: self.vm, + loader: self.loader, }; if endowment > T::Balance::zero() { @@ -259,23 +269,20 @@ impl<'a, T: Trait, V: Vm> ExecutionContext<'a, T, V> { )?; } - // let dest_code = code::load::(code_hash, &self.config.schedule)?; - // TODO: Do something with the output data. let mut output_data = Vec::::new(); - // vm::execute( - // b"deploy", - // &dest_code.code, - // &dest_code.memory_def, - // input_data, - // &mut output_data, - // &mut CallContext { - // ctx: &mut nested, - // caller: caller, - // }, - // &self.config.schedule, - // gas_meter, - // )?; + + let executable = self.loader.load_init(&code_hash)?; + self.vm.execute( + &executable, + &mut CallContext { + ctx: &mut nested, + caller: caller, + }, + input_data, + &mut output_data, + gas_meter, + )?; (nested.overlay.into_change_set(), nested.events) }; @@ -305,13 +312,13 @@ impl<'a, T: Trait, V: Vm> ExecutionContext<'a, T, V> { /// NOTE: that we allow for draining all funds of the contract so it /// can go below existential deposit, essentially giving a contract /// the chance to give up it's life. -fn transfer<'a, T: Trait, V: Vm>( +fn transfer<'a, T: Trait, V: Vm, L: Loader>( gas_meter: &mut GasMeter, contract_create: bool, transactor: &T::AccountId, dest: &T::AccountId, value: T::Balance, - ctx: &mut ExecutionContext<'a, T, V>, + ctx: &mut ExecutionContext<'a, T, V, L>, ) -> Result<(), &'static str> { let to_balance = ctx.overlay.get_balance(dest); @@ -365,12 +372,17 @@ fn transfer<'a, T: Trait, V: Vm>( Ok(()) } -struct CallContext<'a, 'b: 'a, T: Trait + 'b, V: Vm + 'b> { - ctx: &'a mut ExecutionContext<'b, T, V>, +struct CallContext<'a, 'b: 'a, T: Trait + 'b, V: Vm + 'b, L: Loader> { + ctx: &'a mut ExecutionContext<'b, T, V, L>, caller: T::AccountId, } -impl<'a, 'b: 'a, T: Trait + 'b, V: Vm + 'b> Ext for CallContext<'a, 'b, T, V> { +impl<'a, 'b: 'a, T, E, V, L> Ext for CallContext<'a, 'b, T, V, L> +where + T: Trait + 'b, + V: Vm, + L: Loader, +{ type T = T; fn get_storage(&self, key: &[u8]) -> Option> { diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 3d6190dfa1109..ad51fc8932b07 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -206,6 +206,7 @@ decl_module! { let cfg = Config::preload(); let vm = ::vm::WasmVm::new(&cfg); + let loader = ::exec::WasmLoader::new(&cfg); let mut ctx = ExecutionContext { self_account: origin.clone(), depth: 0, @@ -213,6 +214,7 @@ decl_module! { events: Vec::new(), config: &cfg, vm: &vm, + loader: &loader, }; let mut output_data = Vec::new(); @@ -263,6 +265,7 @@ decl_module! { let cfg = Config::preload(); let vm = ::vm::WasmVm::new(&cfg); + let loader = ::exec::WasmLoader::new(&cfg); let mut ctx = ExecutionContext { self_account: origin.clone(), depth: 0, @@ -270,6 +273,7 @@ decl_module! { events: Vec::new(), config: &cfg, vm: &vm, + loader: &loader, }; let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &code_hash, &data); diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 449d4206e227c..7f96f1a136f99 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -20,10 +20,9 @@ use exec::CreateReceipt; use vm::env_def::FunctionImplProvider; use gas::GasMeter; -use code::MemoryDefinition; use rstd::prelude::*; -use {Trait, Schedule, CodeHash}; -use {balances, sandbox, system}; +use {Trait, Schedule}; +use sandbox; #[macro_use] pub mod env_def; From e629768c83d59ddf022f7dbab6d5f8ea0f141d7d Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 21:42:42 +0300 Subject: [PATCH 026/108] Fix vm tests. --- srml/contract/src/lib.rs | 4 +- srml/contract/src/vm/mod.rs | 81 ++++++++++++++++++------------------- 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index ad51fc8932b07..63818439ceb09 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -205,7 +205,7 @@ decl_module! { let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; let cfg = Config::preload(); - let vm = ::vm::WasmVm::new(&cfg); + let vm = ::vm::WasmVm::new(&cfg.schedule); let loader = ::exec::WasmLoader::new(&cfg); let mut ctx = ExecutionContext { self_account: origin.clone(), @@ -264,7 +264,7 @@ decl_module! { let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; let cfg = Config::preload(); - let vm = ::vm::WasmVm::new(&cfg); + let vm = ::vm::WasmVm::new(&cfg.schedule); let loader = ::exec::WasmLoader::new(&cfg); let mut ctx = ExecutionContext { self_account: origin.clone(), diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 7f96f1a136f99..9756dae9252f5 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -34,13 +34,12 @@ use self::runtime::{to_execution_result, Runtime}; // TODO: Extract code injection stuff and expect the code to be already prepared? pub struct WasmVm<'a, T: Trait> { - // TODO: Change to schedule. - config: &'a ::Config, + schedule: &'a Schedule, } impl<'a, T: Trait> WasmVm<'a, T> { - pub fn new(config: &'a ::Config) -> Self { - WasmVm { config } + pub fn new(schedule: &'a Schedule) -> Self { + WasmVm { schedule } } } @@ -70,7 +69,7 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { imports.add_host_func("env", name, func_ptr); }); - let mut runtime = Runtime::new(ext, input_data, output_data, &self.config.schedule, memory, gas_meter); + let mut runtime = Runtime::new(ext, input_data, output_data, &self.schedule, memory, gas_meter); // Instantiate the instance from the instrumented module code. match sandbox::Instance::new(&exec.instrumented_code, &imports, &mut runtime) { @@ -95,7 +94,8 @@ mod tests { use gas::GasMeter; use std::collections::HashMap; use tests::Test; - use exec; + use exec::{self, Ext}; + use {CodeHash}; use wabt; use runtime_primitives::testing::H256; @@ -120,7 +120,7 @@ mod tests { transfers: Vec, next_account_id: u64, } - impl ::exec::Ext for MockExt { + impl Ext for MockExt { type T = Test; fn get_storage(&self, key: &[u8]) -> Option> { @@ -170,14 +170,38 @@ mod tests { } } - fn prepare_code(wat: &str) -> (Vec, MemoryDefinition) { + fn execute( + wat: &str, + input_data: &[u8], + output_data: &mut Vec, + ext: &mut E, + gas_meter: &mut GasMeter, + ) -> Result<(), &'static str> { use ::code::prepare::prepare_contract; + use ::exec::{Vm, WasmExecutable}; let wasm = wabt::wat2wasm(wat).unwrap(); let schedule = ::Schedule::::default(); - let ::code::InstrumentedWasmModule { memory_def, code, .. } = prepare_contract::(&wasm, &schedule).unwrap(); - - (code, memory_def) + let ::code::InstrumentedWasmModule { memory_def, code, .. } = + prepare_contract::(&wasm, &schedule).unwrap(); + + let exec = ::exec::WasmExecutable { + // Use a "call" convention. + entrypoint_name: b"call", + memory_def, + instrumented_code: code, + }; + + let cfg = Default::default(); + let vm = WasmVm::new(&cfg); + + vm.execute( + &exec, + ext, + input_data, + output_data, + gas_meter, + ) } const CODE_TRANSFER: &str = r#" @@ -219,17 +243,12 @@ mod tests { #[test] fn contract_transfer() { - let (code_transfer, mem_def) = prepare_code(CODE_TRANSFER); - let mut mock_ext = MockExt::default(); execute( - b"call", - &code_transfer, - &mem_def, + CODE_TRANSFER, &[], &mut Vec::new(), &mut mock_ext, - &Schedule::::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); @@ -284,17 +303,12 @@ mod tests { #[test] fn contract_create() { - let (code_create, mem_def) = prepare_code(CODE_CREATE); - let mut mock_ext = MockExt::default(); execute( - b"call", - &code_create, - &mem_def, + CODE_CREATE, &[], &mut Vec::new(), &mut mock_ext, - &Schedule::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); @@ -384,17 +398,12 @@ mod tests { #[test] fn contract_call_limited_gas() { - let (code_transfer, mem_def) = prepare_code(CODE_TRANSFER_LIMITED_GAS); - let mut mock_ext = MockExt::default(); execute( - b"call", - &code_transfer, - &mem_def, + &CODE_TRANSFER_LIMITED_GAS, &[], &mut Vec::new(), &mut mock_ext, - &Schedule::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); @@ -476,20 +485,15 @@ mod tests { #[test] fn get_storage_puts_data_into_scratch_buf() { - let (code_get_storage, mem_def) = prepare_code(CODE_GET_STORAGE); - let mut mock_ext = MockExt::default(); mock_ext.storage.insert([0x11; 32].to_vec(), [0x22; 32].to_vec()); let mut return_buf = Vec::new(); execute( - b"call", - &code_get_storage, - &mem_def, + CODE_GET_STORAGE, &[], &mut return_buf, &mut mock_ext, - &Schedule::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); @@ -553,17 +557,12 @@ r#" #[test] fn caller() { - let (code_caller, mem_def) = prepare_code(CODE_CALLER); - let mut mock_ext = MockExt::default(); execute( - b"call", - &code_caller, - &mem_def, + CODE_CALLER, &[], &mut Vec::new(), &mut mock_ext, - &Schedule::::default(), &mut GasMeter::with_limit(50_000, 1), ).unwrap(); } From cef469fe64be99177fe8830feeb7cebda81d8afd Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 21:50:58 +0300 Subject: [PATCH 027/108] Use schedule directly in WasmLoader --- srml/contract/src/exec.rs | 20 ++++++++++++++------ srml/contract/src/lib.rs | 4 ++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index fa5da2f8ca4eb..5e799772df2b0 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use super::{CodeHash, ContractAddressFor, Trait, Event, RawEvent, Config}; +use super::{CodeHash, ContractAddressFor, Trait, Event, RawEvent, Config, Schedule}; use account_db::{AccountDb, OverlayAccountDb}; use gas::GasMeter; use code; @@ -102,12 +102,12 @@ pub struct WasmExecutable { } pub struct WasmLoader<'a, T: Trait> { - config: &'a Config, + schedule: &'a Schedule, } impl<'a, T: Trait> WasmLoader<'a, T> { - pub fn new(config: &'a Config) -> Self { - WasmLoader { config } + pub fn new(schedule: &'a Schedule) -> Self { + WasmLoader { schedule } } } @@ -115,7 +115,7 @@ impl<'a, T: Trait> Loader for WasmLoader<'a, T> { type Executable = WasmExecutable; fn load_init(&self, code_hash: &CodeHash) -> Result { - let dest_code = code::load::(code_hash, &self.config.schedule)?; + let dest_code = code::load::(code_hash, self.schedule)?; Ok(WasmExecutable { entrypoint_name: b"deploy", memory_def: dest_code.memory_def, @@ -123,7 +123,7 @@ impl<'a, T: Trait> Loader for WasmLoader<'a, T> { }) } fn load_main(&self, code_hash: &CodeHash) -> Result { - let dest_code = code::load::(code_hash, &self.config.schedule)?; + let dest_code = code::load::(code_hash, self.schedule)?; Ok(WasmExecutable { entrypoint_name: b"call", memory_def: dest_code.memory_def, @@ -427,3 +427,11 @@ where &self.caller } } + +#[cfg(test)] +mod tests { + use super::*; + + + +} diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 63818439ceb09..cb855cd2ddfff 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -206,7 +206,7 @@ decl_module! { let cfg = Config::preload(); let vm = ::vm::WasmVm::new(&cfg.schedule); - let loader = ::exec::WasmLoader::new(&cfg); + let loader = ::exec::WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext { self_account: origin.clone(), depth: 0, @@ -265,7 +265,7 @@ decl_module! { let cfg = Config::preload(); let vm = ::vm::WasmVm::new(&cfg.schedule); - let loader = ::exec::WasmLoader::new(&cfg); + let loader = ::exec::WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext { self_account: origin.clone(), depth: 0, From e1969aec16d28f100d9cbe168c51a818c21610e3 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 23:17:07 +0300 Subject: [PATCH 028/108] Implement test language. --- srml/contract/src/code/prepare.rs | 3 + srml/contract/src/exec.rs | 130 +++++++++++++++++++++++++++++- srml/contract/src/tests.rs | 74 +++++++++++++++++ srml/contract/src/vm/mod.rs | 2 +- 4 files changed, 207 insertions(+), 2 deletions(-) diff --git a/srml/contract/src/code/prepare.rs b/srml/contract/src/code/prepare.rs index 51d8776d60cc1..9d9eba602f941 100644 --- a/srml/contract/src/code/prepare.rs +++ b/srml/contract/src/code/prepare.rs @@ -216,6 +216,9 @@ pub fn prepare_contract( #[cfg(test)] mod tests { + // TODO: Remove + #![allow(unused)] + use super::*; use std::fmt; use wabt; diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 5e799772df2b0..1f6402ea8e004 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -32,6 +32,7 @@ pub struct CreateReceipt { } // TODO: Add logs. +#[cfg_attr(test, derive(Debug))] pub struct CallReceipt; /// An interface that provides an access to the external environment in which the @@ -430,8 +431,135 @@ where #[cfg(test)] mod tests { - use super::*; + use super::{CallContext, ExecutionContext, Ext, Loader, Vm}; + use account_db::{DirectAccountDb, OverlayAccountDb}; + use gas::GasMeter; + use runtime_io::with_externalities; + use std::cell::RefCell; + use std::collections::HashMap; + use std::marker::PhantomData; + use std::rc::Rc; + use substrate_primitives::H256; + use tests::{ExtBuilder, Test}; + use {CodeHash, Config, Trait}; + + struct MockCtx<'a> { + ext: &'a dyn Ext, + input_data: &'a [u8], + output_data: &'a mut Vec, + gas_meter: &'a mut GasMeter, + } + + #[derive(Clone)] + struct MockExecutable<'a>(Rc Result<(), &'static str> + 'a>>>); + + impl<'a> MockExecutable<'a> { + fn new(f: impl FnMut(MockCtx) -> Result<(), &'static str> + 'a) -> Self { + MockExecutable(Rc::new(RefCell::new(Box::new(f)))) + } + } + + struct MockLoader<'a> { + map: HashMap, MockExecutable<'a>>, + } + struct MockVm<'a> { + _data: PhantomData<&'a ()>, + } + + impl<'a> Loader for MockLoader<'a> { + type Executable = MockExecutable<'a>; + + fn load_init(&self, code_hash: &CodeHash) -> Result { + self.map + .get(code_hash) + .cloned() + .ok_or_else(|| "code not found") + } + fn load_main(&self, code_hash: &CodeHash) -> Result { + self.map + .get(code_hash) + .cloned() + .ok_or_else(|| "code not found") + } + } + + impl<'a> Vm for MockVm<'a> { + type Executable = MockExecutable<'a>; + + fn execute>( + &self, + exec: &MockExecutable, + ext: &mut E, + input_data: &[u8], + output_data: &mut Vec, + gas_meter: &mut GasMeter, + ) -> Result<(), &'static str> { + (&mut *exec.0.borrow_mut())(MockCtx { + ext, + input_data, + output_data, + gas_meter, + }) + } + } + #[test] + fn it_works() { + let origin = 0; + let dest = 1; + let value = Default::default(); + let mut gas_meter = GasMeter::::with_limit(10000, 1); + let data = vec![]; + let mut output_data = Vec::new(); + + let vm = MockVm { _data: PhantomData }; + + let mut test_data = vec![0usize]; + + { + let loader = MockLoader { + map: { + let mut contracts = HashMap::new(); + contracts.insert( + 1.into(), + MockExecutable::new(|ctx| { + test_data.push(1); + Ok(()) + }), + ); + contracts + }, + }; + + with_externalities(&mut ExtBuilder::default().build(), || { + let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); + overlay.set_code(&1, Some(1.into())); + + let mut cfg = Config::preload(); + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, + }; + + let result = ctx.call( + origin.clone(), + dest, + value, + &mut gas_meter, + &data, + &mut output_data, + ); + assert_matches!(result, Ok(_)); + }); + } + assert_eq!(test_data, vec![0, 1]); + } } diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index 669ccc4f48451..a5d74a3e4a4c6 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -14,6 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +// TODO: Remove +#![allow(unused)] + use double_map::StorageDoubleMap; use runtime_io::with_externalities; use runtime_primitives::testing::{Digest, DigestItem, H256, Header}; @@ -78,3 +81,74 @@ impl ContractAddressFor for DummyContractAddressFor { panic!() } } + +pub struct ExtBuilder { + existential_deposit: u64, + gas_price: u64, + block_gas_limit: u64, + transfer_fee: u64, + creation_fee: u64, +} +impl Default for ExtBuilder { + fn default() -> Self { + Self { + existential_deposit: 0, + gas_price: 2, + block_gas_limit: 100_000_000, + transfer_fee: 0, + creation_fee: 0, + } + } +} +impl ExtBuilder { + pub fn existential_deposit(mut self, existential_deposit: u64) -> Self { + self.existential_deposit = existential_deposit; + self + } + pub fn gas_price(mut self, gas_price: u64) -> Self { + self.gas_price = gas_price; + self + } + pub fn block_gas_limit(mut self, block_gas_limit: u64) -> Self { + self.block_gas_limit = block_gas_limit; + self + } + pub fn transfer_fee(mut self, transfer_fee: u64) -> Self { + self.transfer_fee = transfer_fee; + self + } + pub fn creation_fee(mut self, creation_fee: u64) -> Self { + self.creation_fee = creation_fee; + self + } + pub fn build(self) -> runtime_io::TestExternalities { + let mut t = system::GenesisConfig::::default() + .build_storage() + .unwrap().0; + t.extend( + balances::GenesisConfig:: { + balances: vec![], + transaction_base_fee: 0, + transaction_byte_fee: 0, + existential_deposit: self.existential_deposit, + transfer_fee: self.transfer_fee, + creation_fee: self.creation_fee, + reclaim_rebate: 0, + }.build_storage() + .unwrap().0, + ); + t.extend( + GenesisConfig:: { + contract_fee: 21, + call_base_fee: 135, + create_base_fee: 175, + gas_price: self.gas_price, + max_depth: 100, + block_gas_limit: self.block_gas_limit, + current_schedule: Default::default(), + }.build_storage() + .unwrap().0, + ); + runtime_io::TestExternalities::new(t) + } +} diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 9756dae9252f5..b37310c5c9a4e 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -185,7 +185,7 @@ mod tests { let ::code::InstrumentedWasmModule { memory_def, code, .. } = prepare_contract::(&wasm, &schedule).unwrap(); - let exec = ::exec::WasmExecutable { + let exec = WasmExecutable { // Use a "call" convention. entrypoint_name: b"call", memory_def, From bbb50cd5b7fbd6bdbfda505608d0a77c98c46786 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 20 Dec 2018 23:35:48 +0300 Subject: [PATCH 029/108] Add input_data test. --- srml/contract/src/exec.rs | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 1f6402ea8e004..082198aacd606 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -443,6 +443,10 @@ mod tests { use tests::{ExtBuilder, Test}; use {CodeHash, Config, Trait}; + const ALICE: u64 = 1; + const BOB: u64 = 2; + const CHARLIE: u64 = 3; + struct MockCtx<'a> { ext: &'a dyn Ext, input_data: &'a [u8], @@ -562,4 +566,55 @@ mod tests { assert_eq!(test_data, vec![0, 1]); } + + #[test] + fn input_data() { + let origin = ALICE; + let dest = BOB; + let value = Default::default(); + + let vm = MockVm { _data: PhantomData }; + + let loader = MockLoader { + map: { + let mut contracts = HashMap::new(); + contracts.insert( + 1.into(), + MockExecutable::new(|ctx| { + assert_eq!(ctx.input_data, &[1, 2, 3, 4]); + Ok(()) + }), + ); + contracts + }, + }; + + with_externalities(&mut ExtBuilder::default().build(), || { + let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); + overlay.set_code(&dest, Some(1.into())); + + let mut cfg = Config::preload(); + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, + }; + + let result = ctx.call( + origin.clone(), + dest, + value, + &mut GasMeter::::with_limit(10000, 1), + &[1, 2, 3, 4], + &mut vec![], + ); + + assert_matches!(result, Ok(_)); + }); + } } From 53ca6beeb01f362f81d05f08c7674834d112db20 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 21 Dec 2018 00:14:14 +0300 Subject: [PATCH 030/108] Max depth test --- srml/contract/src/exec.rs | 98 ++++++++++++++++++++++++++++----- srml/contract/src/vm/mod.rs | 4 +- srml/contract/src/vm/runtime.rs | 4 +- 3 files changed, 88 insertions(+), 18 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 082198aacd606..fd9edaabbcd6e 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -59,7 +59,7 @@ pub trait Ext { value: BalanceOf, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result, ()>; + ) -> Result, &'static str>; /// Call (possibly transfering some amount of funds) into the specified account. fn call( @@ -69,7 +69,7 @@ pub trait Ext { gas_meter: &mut GasMeter, data: &[u8], output_data: &mut Vec, - ) -> Result<(), ()>; + ) -> Result<(), &'static str>; /// Returns a reference to the account id of the caller. fn caller(&self) -> &AccountIdOf; @@ -402,11 +402,10 @@ where endowment: T::Balance, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result, ()> { + ) -> Result, &'static str> { let caller = self.ctx.self_account.clone(); self.ctx .create(caller, endowment, gas_meter, code_hash, &data) - .map_err(|_| ()) } fn call( @@ -416,11 +415,10 @@ where gas_meter: &mut GasMeter, data: &[u8], output_data: &mut Vec, - ) -> Result<(), ()> { + ) -> Result<(), &'static str> { let caller = self.ctx.self_account.clone(); self.ctx .call(caller, to.clone(), value, gas_meter, data, output_data) - .map_err(|_| ()) .map(|_| ()) } @@ -448,18 +446,18 @@ mod tests { const CHARLIE: u64 = 3; struct MockCtx<'a> { - ext: &'a dyn Ext, + ext: &'a mut dyn Ext, input_data: &'a [u8], output_data: &'a mut Vec, gas_meter: &'a mut GasMeter, } #[derive(Clone)] - struct MockExecutable<'a>(Rc Result<(), &'static str> + 'a>>>); + struct MockExecutable<'a>(Rc Result<(), &'static str> + 'a>); impl<'a> MockExecutable<'a> { - fn new(f: impl FnMut(MockCtx) -> Result<(), &'static str> + 'a) -> Self { - MockExecutable(Rc::new(RefCell::new(Box::new(f)))) + fn new(f: impl Fn(MockCtx) -> Result<(), &'static str> + 'a) -> Self { + MockExecutable(Rc::new(f)) } } @@ -498,7 +496,7 @@ mod tests { output_data: &mut Vec, gas_meter: &mut GasMeter, ) -> Result<(), &'static str> { - (&mut *exec.0.borrow_mut())(MockCtx { + (exec.0)(MockCtx { ext, input_data, output_data, @@ -518,7 +516,7 @@ mod tests { let vm = MockVm { _data: PhantomData }; - let mut test_data = vec![0usize]; + let mut test_data = Rc::new(RefCell::new(vec![0usize])); { let loader = MockLoader { @@ -527,7 +525,7 @@ mod tests { contracts.insert( 1.into(), MockExecutable::new(|ctx| { - test_data.push(1); + test_data.borrow_mut().push(1); Ok(()) }), ); @@ -564,7 +562,7 @@ mod tests { }); } - assert_eq!(test_data, vec![0, 1]); + assert_eq!(&*test_data.borrow(), &vec![0, 1]); } #[test] @@ -617,4 +615,76 @@ mod tests { assert_matches!(result, Ok(_)); }); } + + #[test] + fn max_depth() { + let origin = ALICE; + let dest = BOB; + let value = Default::default(); + + let vm = MockVm { _data: PhantomData }; + + let reached_bottom = RefCell::new(false); + + let loader = MockLoader { + map: { + let mut contracts = HashMap::new(); + contracts.insert( + 1.into(), + MockExecutable::new(|ctx| { + // Try to call into yourself. + let r = ctx.ext.call( + &BOB, + 0, + ctx.gas_meter, + &[], + &mut vec![], + ); + + let mut reached_bottom = reached_bottom.borrow_mut(); + if !*reached_bottom { + // We are first time here, it means we just reached bottom. + // Verify that we've got proper error and set `reached_bottom`. + assert_matches!(r, Err("reached maximum depth, cannot make a call")); + *reached_bottom = true; + } else { + // We just unwinding stack here. + assert_matches!(r, Ok(_)); + } + + Ok(()) + }), + ); + contracts + }, + }; + + with_externalities(&mut ExtBuilder::default().build(), || { + let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); + overlay.set_code(&dest, Some(1.into())); + + let mut cfg = Config::preload(); + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, + }; + + let result = ctx.call( + origin.clone(), + dest, + value, + &mut GasMeter::::with_limit(100000, 1), + &[], + &mut vec![], + ); + + assert_matches!(result, Ok(_)); + }); + } } diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index b37310c5c9a4e..4481807c527b1 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -135,7 +135,7 @@ mod tests { endowment: u64, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result, ()> { + ) -> Result, &'static str> { self.creates.push(CreateEntry { // code_hash: code_hash.clone(), endowment, @@ -154,7 +154,7 @@ mod tests { gas_meter: &mut GasMeter, data: &[u8], _output_data: &mut Vec, - ) -> Result<(), ()> { + ) -> Result<(), &'static str> { self.transfers.push(TransferEntry { to: *to, value, diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/vm/runtime.rs index 5baf55ba72bed..89cecdb0d5928 100644 --- a/srml/contract/src/vm/runtime.rs +++ b/srml/contract/src/vm/runtime.rs @@ -264,7 +264,7 @@ define_env!(Env, , let scratch_buf = &mut ctx.scratch_buf; let call_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { match nested_meter { - Some(nested_meter) => ext.call(&callee, value, nested_meter, &input_data, scratch_buf), + Some(nested_meter) => ext.call(&callee, value, nested_meter, &input_data, scratch_buf).map_err(|_| ()), // there is not enough gas to allocate for the nested call. None => Err(()), } @@ -325,7 +325,7 @@ define_env!(Env, , let ext = &mut ctx.ext; let create_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { match nested_meter { - Some(nested_meter) => ext.create(&code_hash, value, nested_meter, &input_data), + Some(nested_meter) => ext.create(&code_hash, value, nested_meter, &input_data).map_err(|_| ()), // there is not enough gas to allocate for the nested call. None => Err(()), } From 3324b8ea8de08efb016bb2d891c1706449d37a83 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 21 Dec 2018 00:28:03 +0300 Subject: [PATCH 031/108] ext_caller --- srml/contract/src/exec.rs | 116 ++++++++++++++++++++++++++++-------- srml/contract/src/vm/mod.rs | 3 +- 2 files changed, 92 insertions(+), 27 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index fd9edaabbcd6e..9e6216dea6f9d 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -14,14 +14,14 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use super::{CodeHash, ContractAddressFor, Trait, Event, RawEvent, Config, Schedule}; +use super::{CodeHash, Config, ContractAddressFor, Event, RawEvent, Schedule, Trait}; use account_db::{AccountDb, OverlayAccountDb}; -use gas::GasMeter; use code; +use gas::GasMeter; -use rstd::prelude::*; -use runtime_primitives::traits::{Zero, CheckedAdd, CheckedSub}; use balances::{self, EnsureAccountLiquid}; +use rstd::prelude::*; +use runtime_primitives::traits::{CheckedAdd, CheckedSub, Zero}; pub type BalanceOf = ::Balance; pub type AccountIdOf = ::AccountId; @@ -230,14 +230,17 @@ where return Err("reached maximum depth, cannot create"); } - if gas_meter.charge(self.config.create_base_fee).is_out_of_gas() { + if gas_meter + .charge(self.config.create_base_fee) + .is_out_of_gas() + { return Err("not enough gas to pay base create fee"); } let dest = T::DetermineContractAddress::contract_address_for( code_hash, input_data, - &self.self_account + &self.self_account, ); if self.overlay.get_code(&dest).is_some() { @@ -291,9 +294,7 @@ where self.overlay.commit(change_set); self.events.extend(events); - Ok(CreateReceipt { - address: dest, - }) + Ok(CreateReceipt { address: dest }) } } @@ -367,7 +368,8 @@ fn transfer<'a, T: Trait, V: Vm, L: Loader>( if transactor != dest { ctx.overlay.set_balance(transactor, new_from_balance); ctx.overlay.set_balance(dest, new_to_balance); - ctx.events.push(RawEvent::Transfer(transactor.clone(), dest.clone(), value)); + ctx.events + .push(RawEvent::Transfer(transactor.clone(), dest.clone(), value)); } Ok(()) @@ -429,7 +431,7 @@ where #[cfg(test)] mod tests { - use super::{CallContext, ExecutionContext, Ext, Loader, Vm}; + use super::{ExecutionContext, Ext, Loader, Vm}; use account_db::{DirectAccountDb, OverlayAccountDb}; use gas::GasMeter; use runtime_io::with_externalities; @@ -437,9 +439,8 @@ mod tests { use std::collections::HashMap; use std::marker::PhantomData; use std::rc::Rc; - use substrate_primitives::H256; use tests::{ExtBuilder, Test}; - use {CodeHash, Config, Trait}; + use {CodeHash, Config}; const ALICE: u64 = 1; const BOB: u64 = 2; @@ -516,7 +517,7 @@ mod tests { let vm = MockVm { _data: PhantomData }; - let mut test_data = Rc::new(RefCell::new(vec![0usize])); + let test_data = Rc::new(RefCell::new(vec![0usize])); { let loader = MockLoader { @@ -524,7 +525,7 @@ mod tests { let mut contracts = HashMap::new(); contracts.insert( 1.into(), - MockExecutable::new(|ctx| { + MockExecutable::new(|_ctx| { test_data.borrow_mut().push(1); Ok(()) }), @@ -537,7 +538,7 @@ mod tests { let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); overlay.set_code(&1, Some(1.into())); - let mut cfg = Config::preload(); + let cfg = Config::preload(); let mut ctx = ExecutionContext { self_account: origin.clone(), @@ -591,7 +592,7 @@ mod tests { let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); overlay.set_code(&dest, Some(1.into())); - let mut cfg = Config::preload(); + let cfg = Config::preload(); let mut ctx = ExecutionContext { self_account: origin.clone(), @@ -633,13 +634,7 @@ mod tests { 1.into(), MockExecutable::new(|ctx| { // Try to call into yourself. - let r = ctx.ext.call( - &BOB, - 0, - ctx.gas_meter, - &[], - &mut vec![], - ); + let r = ctx.ext.call(&BOB, 0, ctx.gas_meter, &[], &mut vec![]); let mut reached_bottom = reached_bottom.borrow_mut(); if !*reached_bottom { @@ -663,7 +658,7 @@ mod tests { let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); overlay.set_code(&dest, Some(1.into())); - let mut cfg = Config::preload(); + let cfg = Config::preload(); let mut ctx = ExecutionContext { self_account: origin.clone(), @@ -687,4 +682,75 @@ mod tests { assert_matches!(result, Ok(_)); }); } + + #[test] + fn caller_returns_proper_values() { + let origin = ALICE; + let dest = BOB; + let value = Default::default(); + + let vm = MockVm { _data: PhantomData }; + + let witnessed_caller_bob = RefCell::new(None::); + let witnessed_caller_charlie = RefCell::new(None::); + + let loader = MockLoader { + map: { + let mut contracts = HashMap::new(); + contracts.insert( + 1.into(), + MockExecutable::new(|ctx| { + // Witness caller for bob. + *witnessed_caller_bob.borrow_mut() = Some(*ctx.ext.caller()); + + // Call into CHARLIE contract. + let r = ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], &mut vec![]); + assert_matches!(r, Ok(_)); + Ok(()) + }), + ); + contracts.insert( + 2.into(), + MockExecutable::new(|ctx| { + // Witness caller for charlie. + *witnessed_caller_charlie.borrow_mut() = Some(*ctx.ext.caller()); + Ok(()) + }), + ); + contracts + }, + }; + + with_externalities(&mut ExtBuilder::default().build(), || { + let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); + overlay.set_code(&dest, Some(1.into())); + overlay.set_code(&CHARLIE, Some(2.into())); + + let cfg = Config::preload(); + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, + }; + + let result = ctx.call( + origin.clone(), + dest, + value, + &mut GasMeter::::with_limit(10000, 1), + &[], + &mut vec![], + ); + + assert_matches!(result, Ok(_)); + }); + + assert_eq!(&*witnessed_caller_bob.borrow(), &Some(origin)); + assert_eq!(&*witnessed_caller_charlie.borrow(), &Some(dest)); + } } diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 4481807c527b1..0fe3719d172e2 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -94,10 +94,9 @@ mod tests { use gas::GasMeter; use std::collections::HashMap; use tests::Test; - use exec::{self, Ext}; + use exec::Ext; use {CodeHash}; use wabt; - use runtime_primitives::testing::H256; #[derive(Debug, PartialEq, Eq)] struct CreateEntry { From c851fd6b41419aee7490ba6e466c87d857d0c57f Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 21 Dec 2018 17:18:42 +0300 Subject: [PATCH 032/108] Simplify test. --- srml/contract/src/exec.rs | 78 +++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 9e6216dea6f9d..ba12592a7504b 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -519,49 +519,47 @@ mod tests { let test_data = Rc::new(RefCell::new(vec![0usize])); - { - let loader = MockLoader { - map: { - let mut contracts = HashMap::new(); - contracts.insert( - 1.into(), - MockExecutable::new(|_ctx| { - test_data.borrow_mut().push(1); - Ok(()) - }), - ); - contracts - }, + let loader = MockLoader { + map: { + let mut contracts = HashMap::new(); + contracts.insert( + 1.into(), + MockExecutable::new(|_ctx| { + test_data.borrow_mut().push(1); + Ok(()) + }), + ); + contracts + }, + }; + + with_externalities(&mut ExtBuilder::default().build(), || { + let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); + overlay.set_code(&1, Some(1.into())); + + let cfg = Config::preload(); + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, }; - with_externalities(&mut ExtBuilder::default().build(), || { - let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); - overlay.set_code(&1, Some(1.into())); - - let cfg = Config::preload(); - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay, - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; - - let result = ctx.call( - origin.clone(), - dest, - value, - &mut gas_meter, - &data, - &mut output_data, - ); + let result = ctx.call( + origin.clone(), + dest, + value, + &mut gas_meter, + &data, + &mut output_data, + ); - assert_matches!(result, Ok(_)); - }); - } + assert_matches!(result, Ok(_)); + }); assert_eq!(&*test_data.borrow(), &vec![0, 1]); } From 2c025f7401dd8c22fbbb2185eee8228cb8b28178 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 21 Dec 2018 18:03:32 +0300 Subject: [PATCH 033/108] Add TODO --- srml/contract/src/exec.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index ba12592a7504b..d9b4fc20e192a 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -78,6 +78,9 @@ pub trait Ext { pub trait Loader { type Executable; + // TODO: We need to support the case with empty constructor. + // I think we don't want to require every binary to contain a `deploy` function. + // Anyway, we will have to have validation of this. fn load_init(&self, code_hash: &CodeHash) -> Result; fn load_main(&self, code_hash: &CodeHash) -> Result; } From d43d5e3b0291133ed740716b9a6e197334d269d9 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 21 Dec 2018 18:44:43 +0300 Subject: [PATCH 034/108] Some tests and todos. --- srml/contract/src/exec.rs | 150 +++++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 1 deletion(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index d9b4fc20e192a..685715d93f25f 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -435,7 +435,7 @@ where #[cfg(test)] mod tests { use super::{ExecutionContext, Ext, Loader, Vm}; - use account_db::{DirectAccountDb, OverlayAccountDb}; + use account_db::{AccountDb, DirectAccountDb, OverlayAccountDb}; use gas::GasMeter; use runtime_io::with_externalities; use std::cell::RefCell; @@ -567,6 +567,154 @@ mod tests { assert_eq!(&*test_data.borrow(), &vec![0, 1]); } + // These will probably require introducing gas meter breakdown. + // TODO: Verify that transfer charges creation or transfer fee. + // TODO: Verify that transfer charges correct fee for INSTANTIATE. + + // TODO: Won't create an account with value below exsistential deposit. + // TODO: Verify that instantiate properly creates a contract. + + #[test] + fn transfer_works() { + // This test verifies that a contract is able to transfer + // some funds to another account. + let origin = ALICE; + let dest = BOB; + + let vm = MockVm { _data: PhantomData }; + let loader = MockLoader { + map: HashMap::new(), + }; + + with_externalities(&mut ExtBuilder::default().build(), || { + let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); + overlay.set_balance(&origin, 100); + overlay.set_balance(&dest, 0); + + let cfg = Config::preload(); + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, + }; + + let result = ctx.call( + origin.clone(), + dest, + 55, + &mut GasMeter::::with_limit(1000, 1), + &[], + &mut vec![], + ); + assert_matches!(result, Ok(_)); + assert_eq!(ctx.overlay.get_balance(&origin), 45); + assert_eq!(ctx.overlay.get_balance(&dest), 55); + }); + } + + #[test] + fn balance_too_low() { + // This test verifies that a contract can't send value if it's + // balance is too low. + let origin = ALICE; + let dest = BOB; + + let vm = MockVm { _data: PhantomData }; + let loader = MockLoader { + map: HashMap::new(), + }; + + with_externalities(&mut ExtBuilder::default().build(), || { + let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); + overlay.set_balance(&origin, 0); + + let cfg = Config::preload(); + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, + }; + + let result = ctx.call( + origin.clone(), + dest, + 100, + &mut GasMeter::::with_limit(1000, 1), + &[], + &mut vec![], + ); + + assert_matches!(result, Err("balance too low to send value")); + assert_eq!(ctx.overlay.get_balance(&origin), 0); + assert_eq!(ctx.overlay.get_balance(&dest), 0); + }); + } + + #[test] + fn output_is_returned() { + // Verifies that if a contract returns data, this data + // is returned from the execution context. + let origin = ALICE; + let dest = BOB; + + let vm = MockVm { _data: PhantomData }; + let loader = MockLoader { + map: { + let mut contracts = HashMap::new(); + contracts.insert( + 1.into(), + MockExecutable::new(|ctx| { + // Return some data and terminate execution without an error. + *ctx.output_data = vec![1, 2, 3, 4]; + Ok(()) + }), + ); + contracts + }, + }; + + with_externalities(&mut ExtBuilder::default().build(), || { + let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); + overlay.set_code(&BOB, Some(1.into())); + overlay.set_code(&CHARLIE, Some(2.into())); + + let cfg = Config::preload(); + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, + }; + + let mut output_data = vec![]; + let result = ctx.call( + origin.clone(), + dest, + 0, + &mut GasMeter::::with_limit(1000, 1), + &[], + &mut output_data, + ); + + assert_matches!(result, Ok(_)); + assert_eq!(&output_data, &[1, 2, 3, 4]); + }); + } + #[test] fn input_data() { let origin = ALICE; From 09ca3b543e9237d67bc1fac678c04f1f8c26cc01 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 22 Dec 2018 00:48:42 +0300 Subject: [PATCH 035/108] top_level --- srml/contract/src/exec.rs | 166 ++++++++++++-------------------------- srml/contract/src/lib.rs | 20 +---- 2 files changed, 54 insertions(+), 132 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 685715d93f25f..2b745f16cad22 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . use super::{CodeHash, Config, ContractAddressFor, Event, RawEvent, Schedule, Trait}; -use account_db::{AccountDb, OverlayAccountDb}; +use account_db::{AccountDb, OverlayAccountDb, DirectAccountDb}; use code; use gas::GasMeter; @@ -137,6 +137,7 @@ impl<'a, T: Trait> Loader for WasmLoader<'a, T> { } pub struct ExecutionContext<'a, T: Trait + 'a, V, L> { + // TODO: Should be removed and replaced by the `caller`? // typically should be dest pub self_account: T::AccountId, pub overlay: OverlayAccountDb<'a, T>, @@ -153,6 +154,34 @@ where L: Loader, V: Vm, { + /// Create the top level execution context. + /// + /// The specified `origin` address will be used as `sender` for + pub fn top_level(origin: T::AccountId, cfg: &'a Config, vm: &'a V, loader: &'a L) -> Self { + let overlay = OverlayAccountDb::::new(&DirectAccountDb); + ExecutionContext { + self_account: origin, + depth: 0, + overlay, + events: Vec::new(), + config: &cfg, + vm: &vm, + loader: &loader, + } + } + + fn nested(&self, overlay: OverlayAccountDb<'a, T>, dest: T::AccountId) -> Self { + ExecutionContext { + overlay: overlay, + self_account: dest, + depth: self.depth + 1, + events: Vec::new(), + config: self.config, + vm: self.vm, + loader: self.loader, + } + } + /// Make a call to the specified address. pub fn call( &mut self, @@ -163,6 +192,8 @@ where input_data: &[u8], output_data: &mut Vec, ) -> Result { + assert_eq!(caller, self.self_account); + if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot make a call"); } @@ -175,16 +206,7 @@ where let (change_set, events) = { let mut overlay = OverlayAccountDb::new(&self.overlay); - - let mut nested = ExecutionContext { - overlay: overlay, - self_account: dest.clone(), - depth: self.depth + 1, - events: Vec::new(), - config: self.config, - vm: self.vm, - loader: self.loader, - }; + let mut nested = self.nested(overlay, dest.clone()); if value > T::Balance::zero() { transfer( @@ -254,16 +276,7 @@ where let (change_set, events) = { let mut overlay = OverlayAccountDb::new(&self.overlay); overlay.set_code(&dest, Some(code_hash.clone())); - - let mut nested = ExecutionContext { - overlay: overlay, - self_account: dest.clone(), - depth: self.depth + 1, - events: Vec::new(), - config: self.config, - vm: self.vm, - loader: self.loader, - }; + let mut nested = self.nested(overlay, dest.clone()); if endowment > T::Balance::zero() { transfer( @@ -537,20 +550,9 @@ mod tests { }; with_externalities(&mut ExtBuilder::default().build(), || { - let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); - overlay.set_code(&1, Some(1.into())); - let cfg = Config::preload(); - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay, - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_code(&1, Some(1.into())); let result = ctx.call( origin.clone(), @@ -573,6 +575,7 @@ mod tests { // TODO: Won't create an account with value below exsistential deposit. // TODO: Verify that instantiate properly creates a contract. + // TODO: Instantiate accounts in a proper way (i.e. via `instantiate`) #[test] fn transfer_works() { @@ -587,21 +590,10 @@ mod tests { }; with_externalities(&mut ExtBuilder::default().build(), || { - let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); - overlay.set_balance(&origin, 100); - overlay.set_balance(&dest, 0); - let cfg = Config::preload(); - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay, - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_balance(&origin, 100); + ctx.overlay.set_balance(&dest, 0); let result = ctx.call( origin.clone(), @@ -630,20 +622,9 @@ mod tests { }; with_externalities(&mut ExtBuilder::default().build(), || { - let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); - overlay.set_balance(&origin, 0); - let cfg = Config::preload(); - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay, - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_balance(&origin, 0); let result = ctx.call( origin.clone(), @@ -684,21 +665,10 @@ mod tests { }; with_externalities(&mut ExtBuilder::default().build(), || { - let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); - overlay.set_code(&BOB, Some(1.into())); - overlay.set_code(&CHARLIE, Some(2.into())); - let cfg = Config::preload(); - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay, - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_code(&BOB, Some(1.into())); + ctx.overlay.set_code(&CHARLIE, Some(2.into())); let mut output_data = vec![]; let result = ctx.call( @@ -738,20 +708,9 @@ mod tests { }; with_externalities(&mut ExtBuilder::default().build(), || { - let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); - overlay.set_code(&dest, Some(1.into())); - let cfg = Config::preload(); - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay, - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_code(&dest, Some(1.into())); let result = ctx.call( origin.clone(), @@ -804,20 +763,9 @@ mod tests { }; with_externalities(&mut ExtBuilder::default().build(), || { - let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); - overlay.set_code(&dest, Some(1.into())); - let cfg = Config::preload(); - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay, - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_code(&dest, Some(1.into())); let result = ctx.call( origin.clone(), @@ -871,21 +819,11 @@ mod tests { }; with_externalities(&mut ExtBuilder::default().build(), || { - let mut overlay = OverlayAccountDb::::new(&DirectAccountDb); - overlay.set_code(&dest, Some(1.into())); - overlay.set_code(&CHARLIE, Some(2.into())); - let cfg = Config::preload(); - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay, - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_code(&dest, Some(1.into())); + ctx.overlay.set_code(&CHARLIE, Some(2.into())); let result = ctx.call( origin.clone(), diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index cb855cd2ddfff..bf5e99e9b91a1 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -207,15 +207,7 @@ decl_module! { let cfg = Config::preload(); let vm = ::vm::WasmVm::new(&cfg.schedule); let loader = ::exec::WasmLoader::new(&cfg.schedule); - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); let mut output_data = Vec::new(); let result = ctx.call(origin.clone(), dest, value, &mut gas_meter, &data, &mut output_data); @@ -266,15 +258,7 @@ decl_module! { let cfg = Config::preload(); let vm = ::vm::WasmVm::new(&cfg.schedule); let loader = ::exec::WasmLoader::new(&cfg.schedule); - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), - events: Vec::new(), - config: &cfg, - vm: &vm, - loader: &loader, - }; + let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &code_hash, &data); if let Ok(ref r) = result { From 4a12044b7a497677817f7910723038208884149a Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 22 Dec 2018 14:42:18 +0300 Subject: [PATCH 036/108] Clean. --- srml/contract/src/exec.rs | 209 +++++++++++++++++--------------------- 1 file changed, 94 insertions(+), 115 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 2b745f16cad22..eeeca4d25f1ac 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . use super::{CodeHash, Config, ContractAddressFor, Event, RawEvent, Schedule, Trait}; -use account_db::{AccountDb, OverlayAccountDb, DirectAccountDb}; +use account_db::{AccountDb, DirectAccountDb, OverlayAccountDb}; use code; use gas::GasMeter; @@ -480,11 +480,40 @@ mod tests { struct MockLoader<'a> { map: HashMap, MockExecutable<'a>>, + counter: u64, } + + impl<'a> MockLoader<'a> { + fn empty() -> Self { + MockLoader { + map: HashMap::new(), + counter: 0, + } + } + + fn insert( + &mut self, + f: impl Fn(MockCtx) -> Result<(), &'static str> + 'a, + ) -> CodeHash { + // Generate code hashes as monotonically increasing values. + let code_hash = self.counter.into(); + + self.counter += 1; + self.map.insert(code_hash, MockExecutable::new(f)); + code_hash + } + } + struct MockVm<'a> { _data: PhantomData<&'a ()>, } + impl<'a> MockVm<'a> { + fn new() -> Self { + MockVm { _data: PhantomData } + } + } + impl<'a> Loader for MockLoader<'a> { type Executable = MockExecutable<'a>; @@ -531,28 +560,20 @@ mod tests { let data = vec![]; let mut output_data = Vec::new(); - let vm = MockVm { _data: PhantomData }; + let vm = MockVm::new(); let test_data = Rc::new(RefCell::new(vec![0usize])); - let loader = MockLoader { - map: { - let mut contracts = HashMap::new(); - contracts.insert( - 1.into(), - MockExecutable::new(|_ctx| { - test_data.borrow_mut().push(1); - Ok(()) - }), - ); - contracts - }, - }; + let mut loader = MockLoader::empty(); + let exec_ch = loader.insert(|_ctx| { + test_data.borrow_mut().push(1); + Ok(()) + }); with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_code(&1, Some(1.into())); + ctx.overlay.set_code(&1, Some(exec_ch)); let result = ctx.call( origin.clone(), @@ -584,10 +605,8 @@ mod tests { let origin = ALICE; let dest = BOB; - let vm = MockVm { _data: PhantomData }; - let loader = MockLoader { - map: HashMap::new(), - }; + let vm = MockVm::new(); + let loader = MockLoader::empty(); with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); @@ -616,10 +635,8 @@ mod tests { let origin = ALICE; let dest = BOB; - let vm = MockVm { _data: PhantomData }; - let loader = MockLoader { - map: HashMap::new(), - }; + let vm = MockVm::new(); + let loader = MockLoader::empty(); with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); @@ -648,27 +665,18 @@ mod tests { let origin = ALICE; let dest = BOB; - let vm = MockVm { _data: PhantomData }; - let loader = MockLoader { - map: { - let mut contracts = HashMap::new(); - contracts.insert( - 1.into(), - MockExecutable::new(|ctx| { - // Return some data and terminate execution without an error. - *ctx.output_data = vec![1, 2, 3, 4]; - Ok(()) - }), - ); - contracts - }, - }; + let vm = MockVm::new(); + let mut loader = MockLoader::empty(); + let return_ch = loader.insert(|ctx| { + // Return some data and terminate execution without an error. + *ctx.output_data = vec![1, 2, 3, 4]; + Ok(()) + }); with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_code(&BOB, Some(1.into())); - ctx.overlay.set_code(&CHARLIE, Some(2.into())); + ctx.overlay.set_code(&BOB, Some(return_ch)); let mut output_data = vec![]; let result = ctx.call( @@ -691,26 +699,17 @@ mod tests { let dest = BOB; let value = Default::default(); - let vm = MockVm { _data: PhantomData }; - - let loader = MockLoader { - map: { - let mut contracts = HashMap::new(); - contracts.insert( - 1.into(), - MockExecutable::new(|ctx| { - assert_eq!(ctx.input_data, &[1, 2, 3, 4]); - Ok(()) - }), - ); - contracts - }, - }; + let vm = MockVm::new(); + let mut loader = MockLoader::empty(); + let input_data_ch = loader.insert(|ctx| { + assert_eq!(ctx.input_data, &[1, 2, 3, 4]); + Ok(()) + }); with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_code(&dest, Some(1.into())); + ctx.overlay.set_code(&dest, Some(input_data_ch)); let result = ctx.call( origin.clone(), @@ -731,41 +730,32 @@ mod tests { let dest = BOB; let value = Default::default(); - let vm = MockVm { _data: PhantomData }; - let reached_bottom = RefCell::new(false); - let loader = MockLoader { - map: { - let mut contracts = HashMap::new(); - contracts.insert( - 1.into(), - MockExecutable::new(|ctx| { - // Try to call into yourself. - let r = ctx.ext.call(&BOB, 0, ctx.gas_meter, &[], &mut vec![]); - - let mut reached_bottom = reached_bottom.borrow_mut(); - if !*reached_bottom { - // We are first time here, it means we just reached bottom. - // Verify that we've got proper error and set `reached_bottom`. - assert_matches!(r, Err("reached maximum depth, cannot make a call")); - *reached_bottom = true; - } else { - // We just unwinding stack here. - assert_matches!(r, Ok(_)); - } - - Ok(()) - }), - ); - contracts - }, - }; + let vm = MockVm::new(); + let mut loader = MockLoader::empty(); + let recurse_ch = loader.insert(|ctx| { + // Try to call into yourself. + let r = ctx.ext.call(&BOB, 0, ctx.gas_meter, &[], &mut vec![]); + + let mut reached_bottom = reached_bottom.borrow_mut(); + if !*reached_bottom { + // We are first time here, it means we just reached bottom. + // Verify that we've got proper error and set `reached_bottom`. + assert_matches!(r, Err("reached maximum depth, cannot make a call")); + *reached_bottom = true; + } else { + // We just unwinding stack here. + assert_matches!(r, Ok(_)); + } + + Ok(()) + }); with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_code(&dest, Some(1.into())); + ctx.overlay.set_code(&dest, Some(recurse_ch)); let result = ctx.call( origin.clone(), @@ -786,44 +776,33 @@ mod tests { let dest = BOB; let value = Default::default(); - let vm = MockVm { _data: PhantomData }; + let vm = MockVm::new(); let witnessed_caller_bob = RefCell::new(None::); let witnessed_caller_charlie = RefCell::new(None::); - let loader = MockLoader { - map: { - let mut contracts = HashMap::new(); - contracts.insert( - 1.into(), - MockExecutable::new(|ctx| { - // Witness caller for bob. - *witnessed_caller_bob.borrow_mut() = Some(*ctx.ext.caller()); - - // Call into CHARLIE contract. - let r = ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], &mut vec![]); - assert_matches!(r, Ok(_)); - Ok(()) - }), - ); - contracts.insert( - 2.into(), - MockExecutable::new(|ctx| { - // Witness caller for charlie. - *witnessed_caller_charlie.borrow_mut() = Some(*ctx.ext.caller()); - Ok(()) - }), - ); - contracts - }, - }; + let mut loader = MockLoader::empty(); + let bob_ch = loader.insert(|ctx| { + // Witness caller for bob. + *witnessed_caller_bob.borrow_mut() = Some(*ctx.ext.caller()); + + // Call into CHARLIE contract. + let r = ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], &mut vec![]); + assert_matches!(r, Ok(_)); + Ok(()) + }); + let charlie_ch = loader.insert(|ctx| { + // Witness caller for charlie. + *witnessed_caller_charlie.borrow_mut() = Some(*ctx.ext.caller()); + Ok(()) + }); with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_code(&dest, Some(1.into())); - ctx.overlay.set_code(&CHARLIE, Some(2.into())); + ctx.overlay.set_code(&dest, Some(bob_ch)); + ctx.overlay.set_code(&CHARLIE, Some(charlie_ch)); let result = ctx.call( origin.clone(), From 700cf43db037fedd894a615de1552a10086383c6 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 22 Dec 2018 15:04:21 +0300 Subject: [PATCH 037/108] Restore a couple of integration tests. --- srml/contract/src/tests.rs | 92 +++++++++++++++++++++++++++++++++----- 1 file changed, 80 insertions(+), 12 deletions(-) diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index a5d74a3e4a4c6..381df8950b903 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -19,16 +19,15 @@ use double_map::StorageDoubleMap; use runtime_io::with_externalities; -use runtime_primitives::testing::{Digest, DigestItem, H256, Header}; -use runtime_primitives::traits::{BlakeTwo256}; +use runtime_primitives::testing::{Digest, DigestItem, Header, H256}; +use runtime_primitives::traits::BlakeTwo256; use runtime_primitives::BuildStorage; use runtime_support::StorageMap; -use substrate_primitives::{Blake2Hasher}; -use system::{Phase, EventRecord}; -use wabt; +use substrate_primitives::Blake2Hasher; +use system::{EventRecord, Phase}; use { - runtime_io, balances, system, ContractAddressFor, - GenesisConfig, Module, StorageOf, Trait, RawEvent, + balances, runtime_io, system, ContractAddressFor, GenesisConfig, Module, RawEvent, StorageOf, + Trait, }; impl_outer_origin! { @@ -124,7 +123,8 @@ impl ExtBuilder { pub fn build(self) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default() .build_storage() - .unwrap().0; + .unwrap() + .0; t.extend( balances::GenesisConfig:: { balances: vec![], @@ -134,8 +134,10 @@ impl ExtBuilder { transfer_fee: self.transfer_fee, creation_fee: self.creation_fee, reclaim_rebate: 0, - }.build_storage() - .unwrap().0, + } + .build_storage() + .unwrap() + .0, ); t.extend( GenesisConfig:: { @@ -146,9 +148,75 @@ impl ExtBuilder { max_depth: 100, block_gas_limit: self.block_gas_limit, current_schedule: Default::default(), - }.build_storage() - .unwrap().0, + } + .build_storage() + .unwrap() + .0, ); runtime_io::TestExternalities::new(t) } } + +#[test] +fn refunds_unused_gas() { + with_externalities(&mut ExtBuilder::default().build(), || { + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); + + assert_ok!(Contract::call( + Origin::signed(0), + 1, + 0.into(), + 100_000.into(), + Vec::new() + )); + + assert_eq!(Balances::free_balance(&0), 100_000_000 - (2 * 135)); + }); +} + +#[test] +fn account_removal_removes_storage() { + with_externalities( + &mut ExtBuilder::default().existential_deposit(100).build(), + || { + // Setup two accounts with free balance above than exsistential threshold. + { + Balances::set_free_balance(&1, 110); + Balances::increase_total_stake_by(110); + >::insert(1, b"foo".to_vec(), b"1".to_vec()); + >::insert(1, b"bar".to_vec(), b"2".to_vec()); + + Balances::set_free_balance(&2, 110); + Balances::increase_total_stake_by(110); + >::insert(2, b"hello".to_vec(), b"3".to_vec()); + >::insert(2, b"world".to_vec(), b"4".to_vec()); + } + + // Transfer funds from account 1 of such amount that after this transfer + // the balance of account 1 is will be below than exsistential threshold. + // + // This should lead to the removal of all storage associated with this account. + assert_ok!(Balances::transfer(Origin::signed(1), 2.into(), 20.into())); + + // Verify that all entries from account 1 is removed, while + // entries from account 2 is in place. + { + assert_eq!(>::get(1, b"foo".to_vec()), None); + assert_eq!(>::get(1, b"bar".to_vec()), None); + + assert_eq!( + >::get(2, b"hello".to_vec()), + Some(b"3".to_vec()) + ); + assert_eq!( + >::get(2, b"world".to_vec()), + Some(b"4".to_vec()) + ); + } + }, + ); +} + +// TODO: Block gas limit +// TODO: top_level_call_refunds_even_if_fails From 8f58d0ec682e867148f1cc3e06f675aae0aa754f Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 22 Dec 2018 15:08:54 +0300 Subject: [PATCH 038/108] Add a few comments. --- srml/contract/src/exec.rs | 2 +- srml/contract/src/tests.rs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index eeeca4d25f1ac..34019d8b7040e 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -182,7 +182,7 @@ where } } - /// Make a call to the specified address. + /// Make a call to the specified address, optionally transfering some funds. pub fn call( &mut self, caller: T::AccountId, diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index 381df8950b903..83f4df24c6f16 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -35,6 +35,9 @@ impl_outer_origin! { } mod contract { + // Re-export contents of the root. This basically + // needs to give a name for the current crate. + // This hack is required for `impl_outer_event!`. pub use super::super::*; } impl_outer_event! { @@ -77,6 +80,7 @@ type System = system::Module; pub struct DummyContractAddressFor; impl ContractAddressFor for DummyContractAddressFor { fn contract_address_for(code_hash: &H256, data: &[u8], origin: &u64) -> u64 { + // TODO: panic!() } } From 34a26b0ff4aee870dea39a8fea035a51c5de329c Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 22 Dec 2018 15:22:42 +0300 Subject: [PATCH 039/108] Add ext_address runtime call. --- srml/contract/src/exec.rs | 7 +++++++ srml/contract/src/vm/mod.rs | 3 +++ srml/contract/src/vm/runtime.rs | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 34019d8b7040e..1aba5d57d2567 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -73,6 +73,9 @@ pub trait Ext { /// Returns a reference to the account id of the caller. fn caller(&self) -> &AccountIdOf; + + /// Returns a reference to the account id of the current contract. + fn address(&self) -> &AccountIdOf; } pub trait Loader { @@ -440,6 +443,10 @@ where .map(|_| ()) } + fn address(&self) -> &T::AccountId { + &self.ctx.self_account + } + fn caller(&self) -> &T::AccountId { &self.caller } diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 0fe3719d172e2..14f3e1a5fc12b 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -167,6 +167,9 @@ mod tests { fn caller(&self) -> &u64 { &42 } + fn address(&self) -> &u64 { + &69 + } } fn execute( diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/vm/runtime.rs index 89cecdb0d5928..f897752c45ea2 100644 --- a/srml/contract/src/vm/runtime.rs +++ b/srml/contract/src/vm/runtime.rs @@ -374,6 +374,12 @@ define_env!(Env, , Ok(()) }, + // Stores the address of the current contract into the scratch buffer. + ext_address(ctx) => { + ctx.scratch_buf = ctx.ext.address().encode(); + Ok(()) + }, + // Returns the size of the input buffer. ext_input_size(ctx) -> u32 => { Ok(ctx.input_data.len() as u32) From 6519b69f7293152e0c98275a82e11da5431f20f2 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 22 Dec 2018 15:30:56 +0300 Subject: [PATCH 040/108] Deduplicate caller/self_account --- srml/contract/src/exec.rs | 17 ++--------------- srml/contract/src/lib.rs | 2 +- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 1aba5d57d2567..b36adb781a372 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -140,8 +140,6 @@ impl<'a, T: Trait> Loader for WasmLoader<'a, T> { } pub struct ExecutionContext<'a, T: Trait + 'a, V, L> { - // TODO: Should be removed and replaced by the `caller`? - // typically should be dest pub self_account: T::AccountId, pub overlay: OverlayAccountDb<'a, T>, pub depth: usize, @@ -188,15 +186,12 @@ where /// Make a call to the specified address, optionally transfering some funds. pub fn call( &mut self, - caller: T::AccountId, dest: T::AccountId, value: T::Balance, gas_meter: &mut GasMeter, input_data: &[u8], output_data: &mut Vec, ) -> Result { - assert_eq!(caller, self.self_account); - if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot make a call"); } @@ -228,7 +223,7 @@ where &executable, &mut CallContext { ctx: &mut nested, - caller: caller, + caller: self.self_account.clone(), }, input_data, output_data, @@ -437,9 +432,8 @@ where data: &[u8], output_data: &mut Vec, ) -> Result<(), &'static str> { - let caller = self.ctx.self_account.clone(); self.ctx - .call(caller, to.clone(), value, gas_meter, data, output_data) + .call(to.clone(), value, gas_meter, data, output_data) .map(|_| ()) } @@ -583,7 +577,6 @@ mod tests { ctx.overlay.set_code(&1, Some(exec_ch)); let result = ctx.call( - origin.clone(), dest, value, &mut gas_meter, @@ -622,7 +615,6 @@ mod tests { ctx.overlay.set_balance(&dest, 0); let result = ctx.call( - origin.clone(), dest, 55, &mut GasMeter::::with_limit(1000, 1), @@ -651,7 +643,6 @@ mod tests { ctx.overlay.set_balance(&origin, 0); let result = ctx.call( - origin.clone(), dest, 100, &mut GasMeter::::with_limit(1000, 1), @@ -687,7 +678,6 @@ mod tests { let mut output_data = vec![]; let result = ctx.call( - origin.clone(), dest, 0, &mut GasMeter::::with_limit(1000, 1), @@ -719,7 +709,6 @@ mod tests { ctx.overlay.set_code(&dest, Some(input_data_ch)); let result = ctx.call( - origin.clone(), dest, value, &mut GasMeter::::with_limit(10000, 1), @@ -765,7 +754,6 @@ mod tests { ctx.overlay.set_code(&dest, Some(recurse_ch)); let result = ctx.call( - origin.clone(), dest, value, &mut GasMeter::::with_limit(100000, 1), @@ -812,7 +800,6 @@ mod tests { ctx.overlay.set_code(&CHARLIE, Some(charlie_ch)); let result = ctx.call( - origin.clone(), dest, value, &mut GasMeter::::with_limit(10000, 1), diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index bf5e99e9b91a1..54ed879d4306e 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -210,7 +210,7 @@ decl_module! { let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); let mut output_data = Vec::new(); - let result = ctx.call(origin.clone(), dest, value, &mut gas_meter, &data, &mut output_data); + let result = ctx.call(dest, value, &mut gas_meter, &data, &mut output_data); if let Ok(_) = result { // Commit all changes that made it thus far into the persistant storage. From f40a2c7b7b47de02022d30acf704b8adc61c4155 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 22 Dec 2018 15:38:50 +0300 Subject: [PATCH 041/108] Add not_exists test. --- srml/contract/src/vm/env_def/macros.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/srml/contract/src/vm/env_def/macros.rs b/srml/contract/src/vm/env_def/macros.rs index 0c6e1bfb3c0a2..1511de3be830b 100644 --- a/srml/contract/src/vm/env_def/macros.rs +++ b/srml/contract/src/vm/env_def/macros.rs @@ -311,5 +311,6 @@ mod tests { ); assert!(Env::can_satisfy(b"ext_gas", &FunctionType::new(vec![ValueType::I32], None))); + assert!(!Env::can_satisfy(b"not_exists", &FunctionType::new(vec![], None))); } } From f2727a310685dbf67f34e611d62c33c28dc9f034 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Sat, 22 Dec 2018 15:53:45 +0300 Subject: [PATCH 042/108] Change bool to TransferCause. --- srml/contract/src/exec.rs | 41 ++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index b36adb781a372..fe1abd73a75be 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -209,7 +209,7 @@ where if value > T::Balance::zero() { transfer( gas_meter, - false, + TransferCause::Call, &self.self_account, &dest, value, @@ -279,7 +279,7 @@ where if endowment > T::Balance::zero() { transfer( gas_meter, - true, + TransferCause::Instantiate, &self.self_account, &dest, endowment, @@ -312,14 +312,20 @@ where } } +/// Describes possible transfer causes. +enum TransferCause { + Call, + Instantiate, +} + /// Transfer some funds from `transactor` to `dest`. /// /// All balance changes are performed in the `overlay`. /// /// This function also handles charging the fee. The fee depends -/// on whether the transfer happening because of contract creation -/// (transfering endowment), specified by `contract_create` flag, -/// or because of a transfer via `call`. +/// on whether the transfer happening because of contract instantiation, +/// transfering endowment, or because of a transfer via `call`. This +/// is specified using the `cause` parameter. /// /// NOTE: that the fee is denominated in `T::Balance` units, but /// charged in `T::Gas` from the provided `gas_meter`. This means @@ -330,33 +336,32 @@ where /// the chance to give up it's life. fn transfer<'a, T: Trait, V: Vm, L: Loader>( gas_meter: &mut GasMeter, - contract_create: bool, + cause: TransferCause, transactor: &T::AccountId, dest: &T::AccountId, value: T::Balance, ctx: &mut ExecutionContext<'a, T, V, L>, ) -> Result<(), &'static str> { + use self::TransferCause::*; + let to_balance = ctx.overlay.get_balance(dest); - // This flag is totally distinct from `contract_create`, which shows if this function - // is called from `CREATE` procedure. - // // `would_create` indicates whether the account will be created if this transfer gets executed. - // For example, we can create a contract at the address which already has some funds. In this - // case `contract_create` will be `true` but `would_create` will be `false`. Another example would - // be when this function is called from `CALL`, but `dest` doesn't exist yet. In this case - // `contract_create` will be `false` but `would_create` will be `true`. + // This flag is orthogonal to `cause. + // For example, we can instantiate a contract at the address which already has some funds. In this + // `would_create` will be `false`. Another example would be when this function is called from `call`, + // and account with the address `dest` doesn't exist yet `would_create` will be `true`. let would_create = to_balance.is_zero(); - let fee: T::Balance = match (contract_create, would_create) { - // If this function is called from `CREATE` routine, then we always + let fee: T::Balance = match (cause, would_create) { + // If this function is called from `Instantiate` routine, then we always // charge contract account creation fee. - (true, _) => ctx.config.contract_account_create_fee, + (Instantiate, _) => ctx.config.contract_account_create_fee, // Otherwise the fee depends on whether we create a new account or transfer // to an existing one. - (false, true) => ctx.config.account_create_fee, - (false, false) => ctx.config.transfer_fee, + (Call, true) => ctx.config.account_create_fee, + (Call, false) => ctx.config.transfer_fee, }; if gas_meter.charge_by_balance(fee).is_out_of_gas() { From ddf96586e86dd92e66f0987aa588af9121534a84 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 24 Dec 2018 13:52:47 +0100 Subject: [PATCH 043/108] Add address tests. --- srml/contract/src/exec.rs | 46 ++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index fe1abd73a75be..9c9822b116672 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -774,7 +774,6 @@ mod tests { fn caller_returns_proper_values() { let origin = ALICE; let dest = BOB; - let value = Default::default(); let vm = MockVm::new(); @@ -783,16 +782,15 @@ mod tests { let mut loader = MockLoader::empty(); let bob_ch = loader.insert(|ctx| { - // Witness caller for bob. + // Record the caller for bob. *witnessed_caller_bob.borrow_mut() = Some(*ctx.ext.caller()); // Call into CHARLIE contract. - let r = ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], &mut vec![]); - assert_matches!(r, Ok(_)); + assert_matches!(ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], &mut vec![]), Ok(_)); Ok(()) }); let charlie_ch = loader.insert(|ctx| { - // Witness caller for charlie. + // Record the caller for charlie. *witnessed_caller_charlie.borrow_mut() = Some(*ctx.ext.caller()); Ok(()) }); @@ -806,7 +804,7 @@ mod tests { let result = ctx.call( dest, - value, + 0, &mut GasMeter::::with_limit(10000, 1), &[], &mut vec![], @@ -818,4 +816,40 @@ mod tests { assert_eq!(&*witnessed_caller_bob.borrow(), &Some(origin)); assert_eq!(&*witnessed_caller_charlie.borrow(), &Some(dest)); } + + #[test] + fn address_returns_proper_values() { + let vm = MockVm::new(); + + let mut loader = MockLoader::empty(); + let bob_ch = loader.insert(|ctx| { + // Verify that address matches BOB. + assert_eq!(*ctx.ext.address(), BOB); + + // Call into charlie contract. + assert_matches!(ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], &mut vec![]), Ok(_)); + Ok(()) + }); + let charlie_ch = loader.insert(|ctx| { + assert_eq!(*ctx.ext.address(), CHARLIE); + Ok(()) + }); + + with_externalities(&mut ExtBuilder::default().build(), || { + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + ctx.overlay.set_code(&BOB, Some(bob_ch)); + ctx.overlay.set_code(&CHARLIE, Some(charlie_ch)); + + let result = ctx.call( + BOB, + 0, + &mut GasMeter::::with_limit(10000, 1), + &[], + &mut vec![], + ); + + assert_matches!(result, Ok(_)); + }); + } } From b6ded654b4d86f70ac1b391fcb2068870e37afa3 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 24 Dec 2018 17:07:16 +0100 Subject: [PATCH 044/108] Remove output_buf from parameter. --- srml/contract/src/exec.rs | 219 +++++++++++++++++++++----------- srml/contract/src/lib.rs | 5 +- srml/contract/src/vm/mod.rs | 176 +++++++++++++------------ srml/contract/src/vm/runtime.rs | 59 ++++++--- 4 files changed, 283 insertions(+), 176 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 9c9822b116672..798872cf75f25 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -26,14 +26,15 @@ use runtime_primitives::traits::{CheckedAdd, CheckedSub, Zero}; pub type BalanceOf = ::Balance; pub type AccountIdOf = ::AccountId; -// TODO: Add logs pub struct CreateReceipt { pub address: T::AccountId, } -// TODO: Add logs. #[cfg_attr(test, derive(Debug))] -pub struct CallReceipt; +pub struct CallReceipt { + /// Output data received as a result of a call. + pub output_data: Vec, +} /// An interface that provides an access to the external environment in which the /// smart-contract is executed. @@ -68,8 +69,8 @@ pub trait Ext { value: BalanceOf, gas_meter: &mut GasMeter, data: &[u8], - output_data: &mut Vec, - ) -> Result<(), &'static str>; + output_buf: OutputBuf, + ) -> Result; /// Returns a reference to the account id of the caller. fn caller(&self) -> &AccountIdOf; @@ -88,6 +89,69 @@ pub trait Loader { fn load_main(&self, code_hash: &CodeHash) -> Result; } +#[must_use] +pub struct OutputBuf(Vec); + +impl OutputBuf { + /// Create an output buffer from a spare vector which is not longer needed. + /// + /// All contents are discarded, but capacity is preserved. + pub fn from_spare_vec(mut v: Vec) -> Self { + v.clear(); + OutputBuf(v) + } + + /// Create an output buffer ready for receiving a result. + /// + /// Use this function to create output buffer if you don't have a spare + /// vector. Otherwise, use `from_spare_vec`. + pub fn empty() -> Self { + OutputBuf(Vec::new()) + } + + /// Attempt to write to the buffer result of the specified size. + /// + /// Calls closure with the buffer of the requested size. + pub fn write R>(&mut self, size: usize, f: F) -> R { + self.0.resize(size, 0); + f(&mut self.0) + } +} + +#[must_use] +pub enum VmExecResult { + Ok, + Returned(OutputBuf), + /// A program executed some forbidden operation. + /// + /// This can include, e.g.: division by 0, OOB access or failure to satisfy some precondition + /// of a system call. + /// + /// Contains some vm-specific description of an trap. + Trap(&'static str), +} + +impl VmExecResult { + pub fn into_result(self) -> Result, &'static str> { + match self { + VmExecResult::Ok => Ok(Vec::new()), + VmExecResult::Returned(buf) => Ok(buf.0), + VmExecResult::Trap(description) => Err(description), + } + } +} + +/// A trait that represent a virtual machine. +/// +/// You can view a virtual machine as something that takes code, an input data buffer, +/// queries it and/or performs actions on the given `Ext` and optionally +/// returns an output data buffer. The type of code depends on the particular virtual machine. +/// +/// Execution of code can end by either implicit termination (that is, reached the end of +/// executable), explicit termination via returning a buffer or termination due to a trap. +/// +/// You can optionally provide a vector for collecting output if a spare is available. If you don't have +/// it will be created anyway. pub trait Vm { type Executable; @@ -96,9 +160,9 @@ pub trait Vm { exec: &Self::Executable, ext: &mut E, input_data: &[u8], - output_data: &mut Vec, + output_buf: OutputBuf, gas_meter: &mut GasMeter, - ) -> Result<(), &'static str>; + ) -> VmExecResult; } pub struct WasmExecutable { @@ -190,7 +254,7 @@ where value: T::Balance, gas_meter: &mut GasMeter, input_data: &[u8], - output_data: &mut Vec, + output_buf: OutputBuf, ) -> Result { if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot make a call"); @@ -201,6 +265,7 @@ where } let dest_code_hash = self.overlay.get_code(&dest); + let mut output_data = Vec::new(); let (change_set, events) = { let mut overlay = OverlayAccountDb::new(&self.overlay); @@ -219,16 +284,19 @@ where if let Some(dest_code_hash) = dest_code_hash { let executable = self.loader.load_main(&dest_code_hash)?; - self.vm.execute( - &executable, - &mut CallContext { - ctx: &mut nested, - caller: self.self_account.clone(), - }, - input_data, - output_data, - gas_meter, - )?; + output_data = self + .vm + .execute( + &executable, + &mut CallContext { + ctx: &mut nested, + caller: self.self_account.clone(), + }, + input_data, + output_buf, + gas_meter, + ) + .into_result()?; } (nested.overlay.into_change_set(), nested.events) @@ -237,7 +305,9 @@ where self.overlay.commit(change_set); self.events.extend(events); - Ok(CallReceipt) + Ok(CallReceipt { + output_data, + }) } // TODO: rename it to instantiate. @@ -287,20 +357,19 @@ where )?; } - // TODO: Do something with the output data. - let mut output_data = Vec::::new(); - let executable = self.loader.load_init(&code_hash)?; - self.vm.execute( - &executable, - &mut CallContext { - ctx: &mut nested, - caller: caller, - }, - input_data, - &mut output_data, - gas_meter, - )?; + self.vm + .execute( + &executable, + &mut CallContext { + ctx: &mut nested, + caller: caller, + }, + input_data, + OutputBuf::empty(), + gas_meter, + ) + .into_result()?; (nested.overlay.into_change_set(), nested.events) }; @@ -435,11 +504,10 @@ where value: T::Balance, gas_meter: &mut GasMeter, data: &[u8], - output_data: &mut Vec, - ) -> Result<(), &'static str> { + output_buf: OutputBuf, + ) -> Result { self.ctx - .call(to.clone(), value, gas_meter, data, output_data) - .map(|_| ()) + .call(to.clone(), value, gas_meter, data, output_buf) } fn address(&self) -> &T::AccountId { @@ -453,8 +521,8 @@ where #[cfg(test)] mod tests { - use super::{ExecutionContext, Ext, Loader, Vm}; - use account_db::{AccountDb, DirectAccountDb, OverlayAccountDb}; + use super::{ExecutionContext, Ext, Loader, Vm, OutputBuf, VmExecResult}; + use account_db::AccountDb; use gas::GasMeter; use runtime_io::with_externalities; use std::cell::RefCell; @@ -471,15 +539,15 @@ mod tests { struct MockCtx<'a> { ext: &'a mut dyn Ext, input_data: &'a [u8], - output_data: &'a mut Vec, + output_data: OutputBuf, gas_meter: &'a mut GasMeter, } #[derive(Clone)] - struct MockExecutable<'a>(Rc Result<(), &'static str> + 'a>); + struct MockExecutable<'a>(Rc VmExecResult + 'a>); impl<'a> MockExecutable<'a> { - fn new(f: impl Fn(MockCtx) -> Result<(), &'static str> + 'a) -> Self { + fn new(f: impl Fn(MockCtx) -> VmExecResult + 'a) -> Self { MockExecutable(Rc::new(f)) } } @@ -499,7 +567,7 @@ mod tests { fn insert( &mut self, - f: impl Fn(MockCtx) -> Result<(), &'static str> + 'a, + f: impl Fn(MockCtx) -> VmExecResult + 'a, ) -> CodeHash { // Generate code hashes as monotonically increasing values. let code_hash = self.counter.into(); @@ -545,9 +613,9 @@ mod tests { exec: &MockExecutable, ext: &mut E, input_data: &[u8], - output_data: &mut Vec, + output_data: OutputBuf, gas_meter: &mut GasMeter, - ) -> Result<(), &'static str> { + ) -> VmExecResult { (exec.0)(MockCtx { ext, input_data, @@ -564,7 +632,6 @@ mod tests { let value = Default::default(); let mut gas_meter = GasMeter::::with_limit(10000, 1); let data = vec![]; - let mut output_data = Vec::new(); let vm = MockVm::new(); @@ -573,7 +640,7 @@ mod tests { let mut loader = MockLoader::empty(); let exec_ch = loader.insert(|_ctx| { test_data.borrow_mut().push(1); - Ok(()) + VmExecResult::Ok }); with_externalities(&mut ExtBuilder::default().build(), || { @@ -581,13 +648,7 @@ mod tests { let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); ctx.overlay.set_code(&1, Some(exec_ch)); - let result = ctx.call( - dest, - value, - &mut gas_meter, - &data, - &mut output_data, - ); + let result = ctx.call(dest, value, &mut gas_meter, &data, OutputBuf::empty()); assert_matches!(result, Ok(_)); }); @@ -624,7 +685,7 @@ mod tests { 55, &mut GasMeter::::with_limit(1000, 1), &[], - &mut vec![], + OutputBuf::empty(), ); assert_matches!(result, Ok(_)); assert_eq!(ctx.overlay.get_balance(&origin), 45); @@ -652,7 +713,7 @@ mod tests { 100, &mut GasMeter::::with_limit(1000, 1), &[], - &mut vec![], + OutputBuf::empty(), ); assert_matches!(result, Err("balance too low to send value")); @@ -670,10 +731,13 @@ mod tests { let vm = MockVm::new(); let mut loader = MockLoader::empty(); - let return_ch = loader.insert(|ctx| { - // Return some data and terminate execution without an error. - *ctx.output_data = vec![1, 2, 3, 4]; - Ok(()) + let return_ch = loader.insert(|_| { + let mut output_buf = OutputBuf::empty(); + output_buf.write(4, |data| { + data.copy_from_slice(&[1, 2, 3, 4]); + }); + + VmExecResult::Returned(output_buf) }); with_externalities(&mut ExtBuilder::default().build(), || { @@ -681,16 +745,15 @@ mod tests { let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); ctx.overlay.set_code(&BOB, Some(return_ch)); - let mut output_data = vec![]; let result = ctx.call( dest, 0, &mut GasMeter::::with_limit(1000, 1), &[], - &mut output_data, + OutputBuf::empty(), ); - assert_matches!(result, Ok(_)); + let output_data = result.unwrap().output_data; assert_eq!(&output_data, &[1, 2, 3, 4]); }); } @@ -705,7 +768,7 @@ mod tests { let mut loader = MockLoader::empty(); let input_data_ch = loader.insert(|ctx| { assert_eq!(ctx.input_data, &[1, 2, 3, 4]); - Ok(()) + VmExecResult::Ok }); with_externalities(&mut ExtBuilder::default().build(), || { @@ -718,7 +781,7 @@ mod tests { value, &mut GasMeter::::with_limit(10000, 1), &[1, 2, 3, 4], - &mut vec![], + OutputBuf::empty(), ); assert_matches!(result, Ok(_)); @@ -737,7 +800,7 @@ mod tests { let mut loader = MockLoader::empty(); let recurse_ch = loader.insert(|ctx| { // Try to call into yourself. - let r = ctx.ext.call(&BOB, 0, ctx.gas_meter, &[], &mut vec![]); + let r = ctx.ext.call(&BOB, 0, ctx.gas_meter, &[], OutputBuf::empty()); let mut reached_bottom = reached_bottom.borrow_mut(); if !*reached_bottom { @@ -750,7 +813,7 @@ mod tests { assert_matches!(r, Ok(_)); } - Ok(()) + VmExecResult::Ok }); with_externalities(&mut ExtBuilder::default().build(), || { @@ -763,7 +826,7 @@ mod tests { value, &mut GasMeter::::with_limit(100000, 1), &[], - &mut vec![], + OutputBuf::empty(), ); assert_matches!(result, Ok(_)); @@ -786,13 +849,16 @@ mod tests { *witnessed_caller_bob.borrow_mut() = Some(*ctx.ext.caller()); // Call into CHARLIE contract. - assert_matches!(ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], &mut vec![]), Ok(_)); - Ok(()) + assert_matches!( + ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], OutputBuf::empty()), + Ok(_) + ); + VmExecResult::Ok }); let charlie_ch = loader.insert(|ctx| { // Record the caller for charlie. *witnessed_caller_charlie.borrow_mut() = Some(*ctx.ext.caller()); - Ok(()) + VmExecResult::Ok }); with_externalities(&mut ExtBuilder::default().build(), || { @@ -807,7 +873,7 @@ mod tests { 0, &mut GasMeter::::with_limit(10000, 1), &[], - &mut vec![], + OutputBuf::empty(), ); assert_matches!(result, Ok(_)); @@ -827,12 +893,15 @@ mod tests { assert_eq!(*ctx.ext.address(), BOB); // Call into charlie contract. - assert_matches!(ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], &mut vec![]), Ok(_)); - Ok(()) + assert_matches!( + ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], OutputBuf::empty()), + Ok(_) + ); + VmExecResult::Ok }); let charlie_ch = loader.insert(|ctx| { assert_eq!(*ctx.ext.address(), CHARLIE); - Ok(()) + VmExecResult::Ok }); with_externalities(&mut ExtBuilder::default().build(), || { @@ -846,7 +915,7 @@ mod tests { 0, &mut GasMeter::::with_limit(10000, 1), &[], - &mut vec![], + OutputBuf::empty(), ); assert_matches!(result, Ok(_)); diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 54ed879d4306e..2ec6afb38cac4 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -94,7 +94,7 @@ mod code; mod tests; use exec::ExecutionContext; -use account_db::{AccountDb, OverlayAccountDb}; +use account_db::AccountDb; use double_map::StorageDoubleMap; use rstd::prelude::*; @@ -209,8 +209,7 @@ decl_module! { let loader = ::exec::WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); - let mut output_data = Vec::new(); - let result = ctx.call(dest, value, &mut gas_meter, &data, &mut output_data); + let result = ctx.call(dest, value, &mut gas_meter, &data, exec::OutputBuf::empty()); if let Ok(_) = result { // Commit all changes that made it thus far into the persistant storage. diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 14f3e1a5fc12b..36c5dbe3ecbbd 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -17,12 +17,12 @@ //! This module provides a means for executing contracts //! represented in wasm. -use exec::CreateReceipt; -use vm::env_def::FunctionImplProvider; +use exec::{Ext, OutputBuf, VmExecResult}; use gas::GasMeter; use rstd::prelude::*; -use {Trait, Schedule}; use sandbox; +use vm::env_def::FunctionImplProvider; +use {Schedule, Trait}; #[macro_use] pub mod env_def; @@ -46,16 +46,16 @@ impl<'a, T: Trait> WasmVm<'a, T> { impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { type Executable = ::exec::WasmExecutable; - fn execute>( + fn execute>( &self, exec: &::exec::WasmExecutable, ext: &mut E, input_data: &[u8], - output_data: &mut Vec, + output_buf: OutputBuf, gas_meter: &mut GasMeter, - ) -> Result<(), &'static str> { - let memory = - sandbox::Memory::new(exec.memory_def.initial, Some(exec.memory_def.maximum)).unwrap_or_else(|_| { + ) -> VmExecResult { + let memory = sandbox::Memory::new(exec.memory_def.initial, Some(exec.memory_def.maximum)) + .unwrap_or_else(|_| { panic!( "memory_def.initial can't be greater than memory_def.maximum; thus Memory::new must not fail; @@ -69,21 +69,39 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { imports.add_host_func("env", name, func_ptr); }); - let mut runtime = Runtime::new(ext, input_data, output_data, &self.schedule, memory, gas_meter); + let mut runtime = Runtime::new( + ext, + input_data, + output_buf, + &self.schedule, + memory, + gas_meter, + ); // Instantiate the instance from the instrumented module code. match sandbox::Instance::new(&exec.instrumented_code, &imports, &mut runtime) { // No errors or traps were generated on instantiation! That // means we can now invoke the contract entrypoint. Ok(mut instance) => { - let err = instance.invoke(exec.entrypoint_name, &[], &mut runtime).err(); + let err = instance + .invoke(exec.entrypoint_name, &[], &mut runtime) + .err(); to_execution_result(runtime, err) } // `start` function trapped. Treat it in the same manner as an execution error. Err(err @ sandbox::Error::Execution) => to_execution_result(runtime, Some(err)), + Err(_err @ sandbox::Error::Module) => { + // `Error::Module` is returned only if instantiation or linking failed (i.e. + // wasm bianry tried to import a function that is not provided by the host). + // This shouldn't happen because validation proccess ought to reject such binaries. + // + // Because panics are really undesirable in the runtime code, we treat this as + // a trap for now. Eventually, we might want to revisit this. + return VmExecResult::Trap("validation error"); + } // Other instantiation errors. // Return without executing anything. - Err(_) => return Err("failed to instantiate the contract"), + Err(_) => return VmExecResult::Trap("during start function"), } } } @@ -91,12 +109,12 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { #[cfg(test)] mod tests { use super::*; + use exec::{CallReceipt, CreateReceipt, Ext, OutputBuf}; use gas::GasMeter; use std::collections::HashMap; use tests::Test; - use exec::Ext; - use {CodeHash}; use wabt; + use CodeHash; #[derive(Debug, PartialEq, Eq)] struct CreateEntry { @@ -152,8 +170,8 @@ mod tests { value: u64, gas_meter: &mut GasMeter, data: &[u8], - _output_data: &mut Vec, - ) -> Result<(), &'static str> { + _output_data: OutputBuf, + ) -> Result { self.transfers.push(TransferEntry { to: *to, value, @@ -162,7 +180,9 @@ mod tests { }); // Assume for now that it was just a plain transfer. // TODO: Add tests for different call outcomes. - Ok(()) + Ok(CallReceipt { + output_data: Vec::new(), + }) } fn caller(&self) -> &u64 { &42 @@ -179,13 +199,14 @@ mod tests { ext: &mut E, gas_meter: &mut GasMeter, ) -> Result<(), &'static str> { - use ::code::prepare::prepare_contract; - use ::exec::{Vm, WasmExecutable}; + use code::prepare::prepare_contract; + use exec::{Vm, WasmExecutable}; let wasm = wabt::wat2wasm(wat).unwrap(); let schedule = ::Schedule::::default(); - let ::code::InstrumentedWasmModule { memory_def, code, .. } = - prepare_contract::(&wasm, &schedule).unwrap(); + let ::code::InstrumentedWasmModule { + memory_def, code, .. + } = prepare_contract::(&wasm, &schedule).unwrap(); let exec = WasmExecutable { // Use a "call" convention. @@ -197,13 +218,11 @@ mod tests { let cfg = Default::default(); let vm = WasmVm::new(&cfg); - vm.execute( - &exec, - ext, - input_data, - output_data, - gas_meter, - ) + *output_data = vm + .execute(&exec, ext, input_data, OutputBuf::empty(), gas_meter) + .into_result()?; + + Ok(()) } const CODE_TRANSFER: &str = r#" @@ -252,16 +271,15 @@ mod tests { &mut Vec::new(), &mut mock_ext, &mut GasMeter::with_limit(50_000, 1), - ).unwrap(); + ) + .unwrap(); assert_eq!( &mock_ext.transfers, &[TransferEntry { to: 9, value: 6, - data: vec![ - 1, 2, 3, 4, - ], + data: vec![1, 2, 3, 4], gas_left: 49970, }] ); @@ -312,16 +330,15 @@ mod tests { &mut Vec::new(), &mut mock_ext, &mut GasMeter::with_limit(50_000, 1), - ).unwrap(); + ) + .unwrap(); assert_eq!( &mock_ext.creates, &[CreateEntry { // code: vec![0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00], endowment: 3, - data: vec![ - 1, 2, 3, 4, - ], + data: vec![1, 2, 3, 4], gas_left: 49946, }] ); @@ -330,36 +347,36 @@ mod tests { // TODO: This shouldn't be possible. There is an invariant that // code should be already prepared. -// const CODE_MEM: &str = r#" -// (module -// ;; Internal memory is not allowed. -// (memory 1 1) - -// (func (export "call") -// nop -// ) -// ) -// "#; - -// #[test] -// fn contract_internal_mem() { -// let code_mem = wabt::wat2wasm(CODE_MEM).unwrap(); - -// let mut mock_ext = MockExt::default(); - -// assert_matches!( -// execute( -// "call", -// &code_mem, -// &[], -// &mut Vec::new(), -// &mut mock_ext, -// &Schedule::default(), -// &mut GasMeter::with_limit(100_000, 1) -// ), -// Err(_) -// ); -// } + // const CODE_MEM: &str = r#" + // (module + // ;; Internal memory is not allowed. + // (memory 1 1) + + // (func (export "call") + // nop + // ) + // ) + // "#; + + // #[test] + // fn contract_internal_mem() { + // let code_mem = wabt::wat2wasm(CODE_MEM).unwrap(); + + // let mut mock_ext = MockExt::default(); + + // assert_matches!( + // execute( + // "call", + // &code_mem, + // &[], + // &mut Vec::new(), + // &mut mock_ext, + // &Schedule::default(), + // &mut GasMeter::with_limit(100_000, 1) + // ), + // Err(_) + // ); + // } const CODE_TRANSFER_LIMITED_GAS: &str = r#" (module @@ -407,16 +424,15 @@ mod tests { &mut Vec::new(), &mut mock_ext, &mut GasMeter::with_limit(50_000, 1), - ).unwrap(); + ) + .unwrap(); assert_eq!( &mock_ext.transfers, &[TransferEntry { to: 9, value: 6, - data: vec![ - 1, 2, 3, 4, - ], + data: vec![1, 2, 3, 4], gas_left: 228, }] ); @@ -488,7 +504,9 @@ mod tests { #[test] fn get_storage_puts_data_into_scratch_buf() { let mut mock_ext = MockExt::default(); - mock_ext.storage.insert([0x11; 32].to_vec(), [0x22; 32].to_vec()); + mock_ext + .storage + .insert([0x11; 32].to_vec(), [0x22; 32].to_vec()); let mut return_buf = Vec::new(); execute( @@ -497,19 +515,15 @@ mod tests { &mut return_buf, &mut mock_ext, &mut GasMeter::with_limit(50_000, 1), - ).unwrap(); + ) + .unwrap(); - assert_eq!( - return_buf, - [0x22; 32].to_vec(), - ); + assert_eq!(return_buf, [0x22; 32].to_vec()); } - /// calls `ext_caller`, loads the address from the scratch buffer and /// compares it with the constant 42. - const CODE_CALLER: &'static str = -r#" + const CODE_CALLER: &'static str = r#" (module (import "env" "ext_caller" (func $ext_caller)) (import "env" "ext_scratch_size" (func $ext_scratch_size (result i32))) @@ -566,6 +580,10 @@ r#" &mut Vec::new(), &mut mock_ext, &mut GasMeter::with_limit(50_000, 1), - ).unwrap(); + ) + .unwrap(); } + + // TODO: address + // TODO: return data from `start` function. } diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/vm/runtime.rs index f897752c45ea2..161c1d3af13ac 100644 --- a/srml/contract/src/vm/runtime.rs +++ b/srml/contract/src/vm/runtime.rs @@ -16,9 +16,10 @@ //! Environment definition of the wasm smart-contract runtime. -use super::{Schedule, CreateReceipt}; -use exec::{Ext, BalanceOf}; +use super::{Schedule}; +use exec::{Ext, BalanceOf, VmExecResult, OutputBuf, CallReceipt, CreateReceipt}; use rstd::prelude::*; +use rstd::mem; use codec::{Decode, Encode}; use gas::{GasMeter, GasMeterResult}; use runtime_primitives::traits::{As, CheckedMul}; @@ -34,13 +35,16 @@ type GasOf = <::T as Trait>::Gas; /// to just terminate quickly in some cases. enum SpecialTrap { /// Signals that trap was generated in response to call `ext_return` host function. - Return, + Return(OutputBuf), } +/// Can only be used for one call. pub(crate) struct Runtime<'a, 'data, E: Ext + 'a> { ext: &'a mut E, input_data: &'data [u8], - output_data: &'data mut Vec, + // A VM can return a result only once and only by value. So + // we wrap output buffer to make it possible to take the buffer out. + output_buf: Option, scratch_buf: Vec, schedule: &'a Schedule<::Gas>, memory: sandbox::Memory, @@ -51,7 +55,7 @@ impl<'a, 'data, E: Ext + 'a> Runtime<'a, 'data, E> { pub(crate) fn new( ext: &'a mut E, input_data: &'data [u8], - output_data: &'data mut Vec, + output_buf: OutputBuf, schedule: &'a Schedule<::Gas>, memory: sandbox::Memory, gas_meter: &'a mut GasMeter, @@ -59,7 +63,7 @@ impl<'a, 'data, E: Ext + 'a> Runtime<'a, 'data, E> { Runtime { ext, input_data, - output_data, + output_buf: Some(output_buf), scratch_buf: Vec::new(), schedule, memory, @@ -76,16 +80,16 @@ impl<'a, 'data, E: Ext + 'a> Runtime<'a, 'data, E> { pub(crate) fn to_execution_result( runtime: Runtime, sandbox_err: Option, -) -> Result<(), &'static str> { +) -> VmExecResult { // Check the exact type of the error. It could be plain trap or // special runtime trap the we must recognize. match (sandbox_err, runtime.special_trap) { // No traps were generated. Proceed normally. - (None, None) => Ok(()), + (None, None) => VmExecResult::Ok, // Special case. The trap was the result of the execution `return` host function. - (Some(sandbox::Error::Execution), Some(SpecialTrap::Return)) => Ok(()), + (Some(sandbox::Error::Execution), Some(SpecialTrap::Return(buf))) => VmExecResult::Returned(buf), // Any other kind of a trap should result in a failure. - (Some(_), _) => Err("execution has lead to a trap"), + (Some(_), _) => VmExecResult::Trap("during execution"), // Any other case (such as special trap flag without actual trap) signifies // a logic error. _ => unreachable!(), @@ -252,8 +256,10 @@ define_env!(Env, , }; let input_data = read_sandbox_memory(ctx, input_data_ptr, input_data_len)?; - // Clear the scratch buffer in any case. - ctx.scratch_buf.clear(); + // Grab the scratch buffer and put in its' place an empty one. + // We will use it for creating `OutputBuf` container for the call. + let scratch_buf = mem::replace(&mut ctx.scratch_buf, Vec::new()); + let output_buf = OutputBuf::from_spare_vec(scratch_buf); let nested_gas_limit = if gas == 0 { ctx.gas_meter.gas_left() @@ -261,17 +267,19 @@ define_env!(Env, , <::Gas as As>::sa(gas) }; let ext = &mut ctx.ext; - let scratch_buf = &mut ctx.scratch_buf; let call_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { match nested_meter { - Some(nested_meter) => ext.call(&callee, value, nested_meter, &input_data, scratch_buf).map_err(|_| ()), + Some(nested_meter) => ext.call(&callee, value, nested_meter, &input_data, output_buf).map_err(|_| ()), // there is not enough gas to allocate for the nested call. None => Err(()), } }); match call_outcome { - Ok(()) => Ok(0), + Ok(CallReceipt { output_data }) => { + ctx.scratch_buf = output_data; + Ok(0) + }, Err(_) => Ok(1), } }, @@ -353,10 +361,23 @@ define_env!(Env, , GasMeterResult::OutOfGas => return Err(sandbox::HostError), } - ctx.output_data.resize(data_len as usize, 0); - ctx.memory.get(data_ptr, &mut ctx.output_data)?; - - ctx.special_trap = Some(SpecialTrap::Return); + let mut output_buf = ctx + .output_buf + .take() + .expect( + "`output_buf` is taken only here; + `ext_return` traps; + `Runtime` can only be used only for one execution; + qed" + ); + output_buf.write( + data_len as usize, + |slice_mut| { + // Read the memory at the specified pointer to the provided slice. + ctx.memory.get(data_ptr, slice_mut) + } + )?; + ctx.special_trap = Some(SpecialTrap::Return(output_buf)); // The trap mechanism is used to immediately terminate the execution. // This trap should be handled appropriately before returning the result From 5b629884253ac22e808ac7aea9f21fbc34286d2d Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 26 Dec 2018 17:34:33 +0100 Subject: [PATCH 045/108] return from start fn. --- Cargo.lock | 6 ++---- srml/contract/Cargo.toml | 4 +++- srml/contract/src/vm/mod.rs | 38 ++++++++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7a1c5a65b9e38..2b67bfb2cec46 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2185,8 +2185,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pwasm-utils" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = "0.6.0" dependencies = [ "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2863,7 +2862,7 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pwasm-utils 0.6.0", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", @@ -4842,7 +4841,6 @@ dependencies = [ "checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" "checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09" "checksum protobuf 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "671a9cce836bd3635b40b2b0a72783481755ee988c493891f4e974b45264cc9d" -"checksum pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "efd695333cfae6e9dbe2703a6d040e252b57a6fc3b9a65c712615ac042b2e0c5" "checksum quasi 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18c45c4854d6d1cf5d531db97c75880feb91c958b0720f4ec1057135fec358b3" "checksum quasi_codegen 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "51b9e25fa23c044c1803f43ca59c98dac608976dd04ce799411edd58ece776d4" "checksum quick-error 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb6ccf8db7bbcb9c2eae558db5ab4f3da1c2a87e4e597ed394726bc8ea6ca1d" diff --git a/srml/contract/Cargo.toml b/srml/contract/Cargo.toml index 0a2ad03029f36..157bd94f59688 100644 --- a/srml/contract/Cargo.toml +++ b/srml/contract/Cargo.toml @@ -5,7 +5,9 @@ authors = ["Parity Technologies "] [dependencies] serde = { version = "1.0", default-features = false } -pwasm-utils = { version = "0.3", default-features = false } +# TODO: +# pwasm-utils = { version = "0.3", default-features = false } +pwasm-utils = { path = "/Users/pepyakin/dev/parity/wasm-utils", default-features = false } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } parity-wasm = { version = "0.31", default-features = false } diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/vm/mod.rs index 36c5dbe3ecbbd..216105b333de9 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/vm/mod.rs @@ -584,6 +584,42 @@ mod tests { .unwrap(); } + const CODE_RETURN_FROM_START_FN: &str = r#" +(module + (import "env" "ext_return" (func $ext_return (param i32 i32))) + (import "env" "memory" (memory 1 1)) + + (start $start) + (func $start + (call $ext_return + (i32.const 8) + (i32.const 4) + ) + (unreachable) + ) + + (func (export "call") + ) + + (data (i32.const 8) "\01\02\03\04") +) +"#; + + #[test] + fn return_from_start_fn() { + let mut mock_ext = MockExt::default(); + let mut output_data = Vec::new(); + execute( + CODE_RETURN_FROM_START_FN, + &[], + &mut output_data, + &mut mock_ext, + &mut GasMeter::with_limit(50_000, 1), + ) + .unwrap(); + + assert_eq!(output_data, vec![1, 2, 3, 4]); + } + // TODO: address - // TODO: return data from `start` function. } From b5fd8dceebd47546a2b290ed67285770f46a5e38 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 26 Dec 2018 19:17:37 +0100 Subject: [PATCH 046/108] Smart gas meter --- srml/contract/src/exec.rs | 59 +++++++++++++++++++++++++++++++-------- srml/contract/src/gas.rs | 56 +++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 11 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 798872cf75f25..33a5fb64c4444 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -17,11 +17,11 @@ use super::{CodeHash, Config, ContractAddressFor, Event, RawEvent, Schedule, Trait}; use account_db::{AccountDb, DirectAccountDb, OverlayAccountDb}; use code; -use gas::GasMeter; +use gas::{GasMeter, Token}; use balances::{self, EnsureAccountLiquid}; use rstd::prelude::*; -use runtime_primitives::traits::{CheckedAdd, CheckedSub, Zero}; +use runtime_primitives::traits::{As, CheckedAdd, CheckedSub, Zero}; pub type BalanceOf = ::Balance; pub type AccountIdOf = ::AccountId; @@ -381,6 +381,37 @@ where } } +#[derive(Copy, Clone)] +pub enum TransferFeeKind { + ContractAccountCreate, + AccountCreate, + Transfer, +} + +#[derive(Copy, Clone)] +pub struct TransferFeeToken { + kind: TransferFeeKind, + gas_price: Balance, +} + +impl Token for TransferFeeToken { + type Metadata = Config; + + #[inline] + fn calculate_amount(&self, metadata: &Config) -> T::Gas { + let balance_fee = match self.kind { + TransferFeeKind::ContractAccountCreate => metadata.contract_account_create_fee, + TransferFeeKind::AccountCreate => metadata.account_create_fee, + TransferFeeKind::Transfer => metadata.transfer_fee, + }; + + let amount_in_gas: T::Balance = balance_fee / self.gas_price; + let amount_in_gas: T::Gas = >::sa(amount_in_gas); + + amount_in_gas + } +} + /// Describes possible transfer causes. enum TransferCause { Call, @@ -422,18 +453,24 @@ fn transfer<'a, T: Trait, V: Vm, L: Loader>( // and account with the address `dest` doesn't exist yet `would_create` will be `true`. let would_create = to_balance.is_zero(); - let fee: T::Balance = match (cause, would_create) { - // If this function is called from `Instantiate` routine, then we always - // charge contract account creation fee. - (Instantiate, _) => ctx.config.contract_account_create_fee, + let token = { + let kind: TransferFeeKind = match (cause, would_create) { + // If this function is called from `Instantiate` routine, then we always + // charge contract account creation fee. + (Instantiate, _) => TransferFeeKind::ContractAccountCreate, - // Otherwise the fee depends on whether we create a new account or transfer - // to an existing one. - (Call, true) => ctx.config.account_create_fee, - (Call, false) => ctx.config.transfer_fee, + // Otherwise the fee depends on whether we create a new account or transfer + // to an existing one. + (Call, true) => TransferFeeKind::AccountCreate, + (Call, false) => TransferFeeKind::Transfer, + }; + TransferFeeToken { + kind, + gas_price: gas_meter.gas_price(), + } }; - if gas_meter.charge_by_balance(fee).is_out_of_gas() { + if gas_meter.charge_with_token(ctx.config, token).is_out_of_gas() { return Err("not enough gas to pay transfer fee"); } diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index af94ae05c10fe..a305a473bef7c 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -35,6 +35,12 @@ impl GasMeterResult { } } +pub trait Token: Copy + Clone + ::std::any::Any { + type Metadata; + + fn calculate_amount(&self, metadata: &Self::Metadata) -> T::Gas; +} + pub struct GasMeter { limit: T::Gas, /// Amount of gas left from initial gas limit. Can reach zero. @@ -59,6 +65,8 @@ impl GasMeter { /// NOTE that `amount` is always consumed, i.e. if there is not enough gas /// then the counter will be set to zero. pub fn charge(&mut self, amount: T::Gas) -> GasMeterResult { + // pub fn charge>(&mut self, metadata: &Tok::Metadata, token: Tok) -> GasMeterResult { + // let amount = token.calculate_amount(metadata); let new_value = match self.gas_left.checked_sub(&amount) { None => None, Some(val) if val.is_zero() => None, @@ -86,6 +94,12 @@ impl GasMeter { self.charge(amount_in_gas) } + /// Account for gas. + pub fn charge_with_token>(&mut self, metadata: &Tok::Metadata, token: Tok) -> GasMeterResult { + let amount_in_gas = token.calculate_amount(metadata); + self.charge(amount_in_gas) + } + /// Allocate some amount of gas and perform some work with /// a newly created nested gas meter. /// @@ -118,6 +132,10 @@ impl GasMeter { } } + pub fn gas_price(&self) -> T::Balance { + self.gas_price + } + /// Returns how much gas left from the initial budget. pub fn gas_left(&self) -> T::Gas { self.gas_left @@ -179,3 +197,41 @@ pub fn refund_unused_gas(transactor: &T::AccountId, gas_meter: GasMete >::set_free_balance(transactor, b + refund); >::increase_total_stake_by(refund); } + +#[cfg(test)] +mod tests { + use super::{GasMeter, Token}; + use tests::Test; + + struct DoubleTokenMetadata { + multiplier: u64, + } + /// Simple token that charges for the given amount multipled to + /// a multiplier taken from a given metadata. + #[derive(Copy, Clone)] + struct DoubleToken(u64); + + impl Token for DoubleToken { + type Metadata = DoubleTokenMetadata; + + fn calculate_amount(&self, metadata: &DoubleTokenMetadata) -> u64 { + self.0 * metadata.multiplier + } + } + + #[test] + fn it_works() { + let mut gas_meter = GasMeter::::with_limit(50000, 10); + assert_eq!(gas_meter.gas_left(), 50000); + + let result = gas_meter.charge_with_token( + &DoubleTokenMetadata { multiplier: 3 }, + DoubleToken(10), + ); + assert!(!result.is_out_of_gas()); + + assert_eq!(gas_meter.gas_left(), 49_970); + assert_eq!(gas_meter.spent(), 30); + assert_eq!(gas_meter.gas_price(), 10); + } +} From 8b1f1138feecd4b547a411b7b524a3162f98e222 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 26 Dec 2018 19:17:43 +0100 Subject: [PATCH 047/108] Tracing --- srml/contract/src/exec.rs | 4 +- srml/contract/src/gas.rs | 88 ++++++++++++++++++++++++++++++++------- 2 files changed, 74 insertions(+), 18 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 33a5fb64c4444..e2fcf398c7556 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -381,14 +381,14 @@ where } } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, PartialEq, Eq)] pub enum TransferFeeKind { ContractAccountCreate, AccountCreate, Transfer, } -#[derive(Copy, Clone)] +#[derive(Copy, Clone, PartialEq, Eq)] pub struct TransferFeeToken { kind: TransferFeeKind, gas_price: Balance, diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index a305a473bef7c..8232ac269b7c1 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -19,6 +19,9 @@ use runtime_primitives::traits::{As, CheckedMul, CheckedSub, Zero}; use runtime_support::StorageValue; use balances; +#[cfg(test)] +use std::any::Any; + #[must_use] #[derive(Debug, PartialEq, Eq)] pub enum GasMeterResult { @@ -46,6 +49,9 @@ pub struct GasMeter { /// Amount of gas left from initial gas limit. Can reach zero. gas_left: T::Gas, gas_price: T::Balance, + + #[cfg(test)] + tokens: Vec>, } impl GasMeter { #[cfg(test)] @@ -54,6 +60,8 @@ impl GasMeter { limit: gas_limit, gas_left: gas_limit, gas_price, + #[cfg(test)] + tokens: Vec::new(), } } @@ -82,21 +90,13 @@ impl GasMeter { } } - /// Account for used gas expressed in balance units. - /// - /// Same as [`charge`], but amount to be charged is converted from units of balance to - /// units of gas. - /// - /// [`charge`]: #method.charge - pub fn charge_by_balance(&mut self, amount: T::Balance) -> GasMeterResult { - let amount_in_gas: T::Balance = amount / self.gas_price; - let amount_in_gas: T::Gas = >::sa(amount_in_gas); - self.charge(amount_in_gas) - } - /// Account for gas. pub fn charge_with_token>(&mut self, metadata: &Tok::Metadata, token: Tok) -> GasMeterResult { let amount_in_gas = token.calculate_amount(metadata); + + #[cfg(test)] + self.tokens.push(Box::new(token)); + self.charge(amount_in_gas) } @@ -122,6 +122,8 @@ impl GasMeter { limit: amount, gas_left: amount, gas_price: self.gas_price, + #[cfg(test)] + tokens: Vec::new(), }; let r = f(Some(&mut nested)); @@ -145,6 +147,11 @@ impl GasMeter { fn spent(&self) -> T::Gas { self.limit - self.gas_left } + + #[cfg(test)] + fn tokens(&self) -> &[Box] { + &self.tokens + } } /// Buy the given amount of gas. @@ -180,6 +187,8 @@ pub fn buy_gas( limit: gas_limit, gas_left: gas_limit, gas_price, + #[cfg(test)] + tokens: Vec::new() }) } @@ -198,22 +207,48 @@ pub fn refund_unused_gas(transactor: &T::AccountId, gas_meter: GasMete >::increase_total_stake_by(refund); } +#[cfg(test)] +macro_rules! match_tokens { + ($tokens_iter:ident,) => { + }; + ($tokens_iter:ident, $x:expr, $($rest:tt)*) => { + { + let next = ($tokens_iter).next().unwrap(); + let pattern = $x; + let mut _pattern_typed_next_ref = &pattern; + _pattern_typed_next_ref = next.downcast_ref().unwrap(); + assert_eq!(_pattern_typed_next_ref, &pattern); + } + + match_tokens!($tokens_iter, $($rest)*); + }; +} + #[cfg(test)] mod tests { use super::{GasMeter, Token}; use tests::Test; + /// A trivial token that charges 1 unit of gas. + #[derive(Copy, Clone, PartialEq, Eq, Debug)] + struct UnitToken; + impl Token for UnitToken { + type Metadata = (); + fn calculate_amount(&self, _metadata: &()) -> u64 { + 1 + } + } + struct DoubleTokenMetadata { multiplier: u64, } - /// Simple token that charges for the given amount multipled to + /// A simple token that charges for the given amount multipled to /// a multiplier taken from a given metadata. - #[derive(Copy, Clone)] + #[derive(Copy, Clone, PartialEq, Eq, Debug)] struct DoubleToken(u64); impl Token for DoubleToken { type Metadata = DoubleTokenMetadata; - fn calculate_amount(&self, metadata: &DoubleTokenMetadata) -> u64 { self.0 * metadata.multiplier } @@ -221,8 +256,13 @@ mod tests { #[test] fn it_works() { - let mut gas_meter = GasMeter::::with_limit(50000, 10); + let gas_meter = GasMeter::::with_limit(50000, 10); assert_eq!(gas_meter.gas_left(), 50000); + } + + #[test] + fn simple() { + let mut gas_meter = GasMeter::::with_limit(50000, 10); let result = gas_meter.charge_with_token( &DoubleTokenMetadata { multiplier: 3 }, @@ -234,4 +274,20 @@ mod tests { assert_eq!(gas_meter.spent(), 30); assert_eq!(gas_meter.gas_price(), 10); } + + #[test] + fn tracing() { + let mut gas_meter = GasMeter::::with_limit(50000, 10); + assert!(!gas_meter.charge_with_token(&(), UnitToken).is_out_of_gas()); + assert!(!gas_meter.charge_with_token( + &DoubleTokenMetadata { multiplier: 3 }, + DoubleToken(10), + ).is_out_of_gas()); + + let mut tokens = gas_meter.tokens()[0..2].iter(); + match_tokens!(tokens, + UnitToken, + DoubleToken(10), + ); + } } From e2559c6802fe75e05b00fa6e7d39bf1473a67612 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 27 Dec 2018 17:01:20 +0100 Subject: [PATCH 048/108] Fix prepare tests. --- srml/contract/src/code/prepare.rs | 124 +++++++++++++++--------------- 1 file changed, 61 insertions(+), 63 deletions(-) diff --git a/srml/contract/src/code/prepare.rs b/srml/contract/src/code/prepare.rs index 9d9eba602f941..23c84c568aeb3 100644 --- a/srml/contract/src/code/prepare.rs +++ b/srml/contract/src/code/prepare.rs @@ -216,71 +216,69 @@ pub fn prepare_contract( #[cfg(test)] mod tests { - // TODO: Remove - #![allow(unused)] - use super::*; use std::fmt; use wabt; + use tests::Test; + + impl fmt::Debug for InstrumentedWasmModule { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "PreparedContract {{ .. }}") + } + } + + fn parse_and_prepare_wat(wat: &str) -> Result { + let wasm = wabt::Wat2Wasm::new().validate(false).convert(wat).unwrap(); + let schedule = Schedule::::default(); + prepare_contract::(wasm.as_ref(), &schedule) + } + + #[test] + fn internal_memory_declaration() { + let r = parse_and_prepare_wat(r#"(module (memory 1 1))"#); + assert_matches!(r, Err("module declares internal memory")); + } + + #[test] + fn memory() { + // This test assumes that maximum page number is configured to a certain number. + assert_eq!(Schedule::::default().max_memory_pages, 16); + + let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 1)))"#); + assert_matches!(r, Ok(_)); - // impl fmt::Debug for PreparedContract { - // fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - // write!(f, "PreparedContract {{ .. }}") - // } - // } - - // fn parse_and_prepare_wat(wat: &str) -> Result { - // let wasm = wabt::Wat2Wasm::new().validate(false).convert(wat).unwrap(); - // let schedule = Schedule::::default(); - // prepare_contract::(wasm.as_ref(), &schedule) - // } - - // #[test] - // fn internal_memory_declaration() { - // let r = parse_and_prepare_wat(r#"(module (memory 1 1))"#); - // assert_matches!(r, Err("")); - // } - - // #[test] - // fn memory() { - // // This test assumes that maximum page number is configured to a certain number. - // assert_eq!(Schedule::::default().max_memory_pages, 16); - - // let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 1)))"#); - // assert_matches!(r, Ok(_)); - - // // No memory import - // let r = parse_and_prepare_wat(r#"(module)"#); - // assert_matches!(r, Ok(_)); - - // // initial exceed maximum - // let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 16 1)))"#); - // assert_matches!(r, Err(Error::Memory)); - - // // no maximum - // let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1)))"#); - // assert_matches!(r, Err(Error::Memory)); - - // // requested maximum exceed configured maximum - // let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 17)))"#); - // assert_matches!(r, Err(Error::Memory)); - // } - - // #[test] - // fn imports() { - // // nothing can be imported from non-"env" module for now. - // let r = parse_and_prepare_wat(r#"(module (import "another_module" "memory" (memory 1 1)))"#); - // assert_matches!(r, Err(Error::Instantiate)); - - // let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i32))))"#); - // assert_matches!(r, Ok(_)); - - // // wrong signature - // let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i64))))"#); - // assert_matches!(r, Err(Error::Instantiate)); - - // // unknown function name - // let r = parse_and_prepare_wat(r#"(module (import "env" "unknown_func" (func)))"#); - // assert_matches!(r, Err(Error::Instantiate)); - // } + // No memory import + let r = parse_and_prepare_wat(r#"(module)"#); + assert_matches!(r, Ok(_)); + + // initial exceed maximum + let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 16 1)))"#); + assert_matches!(r, Err("Requested initial number of pages should not exceed the requested maximum")); + + // no maximum + let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1)))"#); + assert_matches!(r, Err("Maximum number of pages should be always declared.")); + + // requested maximum exceed configured maximum + let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 17)))"#); + assert_matches!(r, Err("Maximum number of pages should not exceed the configured maximum.")); + } + + #[test] + fn imports() { + // nothing can be imported from non-"env" module for now. + let r = parse_and_prepare_wat(r#"(module (import "another_module" "memory" (memory 1 1)))"#); + assert_matches!(r, Err("module has imports from a non-'env' namespace")); + + let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i32))))"#); + assert_matches!(r, Ok(_)); + + // wrong signature + let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i64))))"#); + assert_matches!(r, Err("module imports a non-existent function")); + + // unknown function name + let r = parse_and_prepare_wat(r#"(module (import "env" "unknown_func" (func)))"#); + assert_matches!(r, Err("module imports a non-existent function")); + } } From a07066a90bbc60bc96a729fb50ced6be569f3f19 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 2 Jan 2019 16:58:56 +0100 Subject: [PATCH 049/108] Code moving --- srml/contract/src/exec.rs | 41 +------------- srml/contract/src/lib.rs | 15 +++--- srml/contract/src/{ => wasm}/code/mod.rs | 2 +- srml/contract/src/{ => wasm}/code/prepare.rs | 4 +- .../src/{vm => wasm}/env_def/macros.rs | 30 +++++------ srml/contract/src/{vm => wasm}/env_def/mod.rs | 0 srml/contract/src/{vm => wasm}/mod.rs | 53 ++++++++++++++++--- srml/contract/src/{vm => wasm}/runtime.rs | 0 8 files changed, 72 insertions(+), 73 deletions(-) rename srml/contract/src/{ => wasm}/code/mod.rs (99%) rename srml/contract/src/{ => wasm}/code/prepare.rs (98%) rename srml/contract/src/{vm => wasm}/env_def/macros.rs (88%) rename srml/contract/src/{vm => wasm}/env_def/mod.rs (100%) rename srml/contract/src/{vm => wasm}/mod.rs (92%) rename srml/contract/src/{vm => wasm}/runtime.rs (100%) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index e2fcf398c7556..7375769eaae4d 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -14,9 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use super::{CodeHash, Config, ContractAddressFor, Event, RawEvent, Schedule, Trait}; +use super::{CodeHash, Config, ContractAddressFor, Event, RawEvent, Trait}; use account_db::{AccountDb, DirectAccountDb, OverlayAccountDb}; -use code; use gas::{GasMeter, Token}; use balances::{self, EnsureAccountLiquid}; @@ -165,44 +164,6 @@ pub trait Vm { ) -> VmExecResult; } -pub struct WasmExecutable { - // TODO: Remove these pubs - pub entrypoint_name: &'static [u8], - pub memory_def: ::code::MemoryDefinition, - pub instrumented_code: Vec, -} - -pub struct WasmLoader<'a, T: Trait> { - schedule: &'a Schedule, -} - -impl<'a, T: Trait> WasmLoader<'a, T> { - pub fn new(schedule: &'a Schedule) -> Self { - WasmLoader { schedule } - } -} - -impl<'a, T: Trait> Loader for WasmLoader<'a, T> { - type Executable = WasmExecutable; - - fn load_init(&self, code_hash: &CodeHash) -> Result { - let dest_code = code::load::(code_hash, self.schedule)?; - Ok(WasmExecutable { - entrypoint_name: b"deploy", - memory_def: dest_code.memory_def, - instrumented_code: dest_code.code, - }) - } - fn load_main(&self, code_hash: &CodeHash) -> Result { - let dest_code = code::load::(code_hash, self.schedule)?; - Ok(WasmExecutable { - entrypoint_name: b"call", - memory_def: dest_code.memory_def, - instrumented_code: dest_code.code, - }) - } -} - pub struct ExecutionContext<'a, T: Trait + 'a, V, L> { pub self_account: T::AccountId, pub overlay: OverlayAccountDb<'a, T>, diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 2ec6afb38cac4..be167b948c7ff 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -86,9 +86,8 @@ extern crate wabt; mod account_db; mod double_map; mod exec; -mod vm; +mod wasm; mod gas; -mod code; #[cfg(test)] mod tests; @@ -176,7 +175,7 @@ decl_module! { let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; - let result = code::save::(code, &mut gas_meter, &schedule); + let result = wasm::code::save::(code, &mut gas_meter, &schedule); if let Ok(code_hash) = result { Self::deposit_event(RawEvent::CodeStored(code_hash)); } @@ -205,8 +204,8 @@ decl_module! { let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; let cfg = Config::preload(); - let vm = ::vm::WasmVm::new(&cfg.schedule); - let loader = ::exec::WasmLoader::new(&cfg.schedule); + let vm = ::wasm::WasmVm::new(&cfg.schedule); + let loader = ::wasm::WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); let result = ctx.call(dest, value, &mut gas_meter, &data, exec::OutputBuf::empty()); @@ -255,8 +254,8 @@ decl_module! { let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; let cfg = Config::preload(); - let vm = ::vm::WasmVm::new(&cfg.schedule); - let loader = ::exec::WasmLoader::new(&cfg.schedule); + let vm = ::wasm::WasmVm::new(&cfg.schedule); + let loader = ::wasm::WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &code_hash, &data); @@ -328,7 +327,7 @@ decl_storage! { pub CodeHashOf: map T::AccountId => Option>; pub PrestineCode: map CodeHash => Option>; - pub CodeStorage: map CodeHash => Option; + pub CodeStorage: map CodeHash => Option; } } diff --git a/srml/contract/src/code/mod.rs b/srml/contract/src/wasm/code/mod.rs similarity index 99% rename from srml/contract/src/code/mod.rs rename to srml/contract/src/wasm/code/mod.rs index e0b97d9569580..4640239d52070 100644 --- a/srml/contract/src/code/mod.rs +++ b/srml/contract/src/wasm/code/mod.rs @@ -19,7 +19,7 @@ use gas::GasMeter; use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul, Hash}; use runtime_support::StorageMap; -use vm::runtime::Env; +use wasm::runtime::Env; use {CodeHash, CodeStorage, PrestineCode, Schedule, Trait}; pub mod prepare; diff --git a/srml/contract/src/code/prepare.rs b/srml/contract/src/wasm/code/prepare.rs similarity index 98% rename from srml/contract/src/code/prepare.rs rename to srml/contract/src/wasm/code/prepare.rs index 23c84c568aeb3..d7b73342d376b 100644 --- a/srml/contract/src/code/prepare.rs +++ b/srml/contract/src/wasm/code/prepare.rs @@ -24,7 +24,7 @@ use pwasm_utils; use pwasm_utils::rules; use rstd::prelude::*; use runtime_primitives::traits::As; -use vm::env_def::ImportSatisfyCheck; +use wasm::env_def::ImportSatisfyCheck; use {Schedule, Trait}; struct ContractModule<'a, Gas: 'a> { @@ -230,7 +230,7 @@ mod tests { fn parse_and_prepare_wat(wat: &str) -> Result { let wasm = wabt::Wat2Wasm::new().validate(false).convert(wat).unwrap(); let schedule = Schedule::::default(); - prepare_contract::(wasm.as_ref(), &schedule) + prepare_contract::(wasm.as_ref(), &schedule) } #[test] diff --git a/srml/contract/src/vm/env_def/macros.rs b/srml/contract/src/wasm/env_def/macros.rs similarity index 88% rename from srml/contract/src/vm/env_def/macros.rs rename to srml/contract/src/wasm/env_def/macros.rs index 1511de3be830b..60b3f02e44564 100644 --- a/srml/contract/src/vm/env_def/macros.rs +++ b/srml/contract/src/wasm/env_def/macros.rs @@ -22,7 +22,7 @@ #[macro_export] macro_rules! convert_args { () => (vec![]); - ( $( $t:ty ),* ) => ( vec![ $( { use $crate::vm::env_def::ConvertibleToWasm; <$t>::VALUE_TYPE }, )* ] ); + ( $( $t:ty ),* ) => ( vec![ $( { use $crate::wasm::env_def::ConvertibleToWasm; <$t>::VALUE_TYPE }, )* ] ); } #[macro_export] @@ -36,7 +36,7 @@ macro_rules! gen_signature { ( ( $( $params: ty ),* ) -> $returns: ty ) => ( { $crate::parity_wasm::elements::FunctionType::new(convert_args!($($params),*), Some({ - use $crate::vm::env_def::ConvertibleToWasm; <$returns>::VALUE_TYPE + use $crate::wasm::env_def::ConvertibleToWasm; <$returns>::VALUE_TYPE })) } ); @@ -62,9 +62,9 @@ macro_rules! gen_signature_dispatch { macro_rules! unmarshall_then_body { ( $body:tt, $ctx:ident, $args_iter:ident, $( $names:ident : $params:ty ),* ) => ({ $( - let $names : <$params as $crate::vm::env_def::ConvertibleToWasm>::NativeType = + let $names : <$params as $crate::wasm::env_def::ConvertibleToWasm>::NativeType = $args_iter.next() - .and_then(|v| <$params as $crate::vm::env_def::ConvertibleToWasm> + .and_then(|v| <$params as $crate::wasm::env_def::ConvertibleToWasm> ::from_typed_value(v.clone())) .expect( "precondition: all imports should be checked against the signatures of corresponding @@ -100,16 +100,16 @@ where #[macro_export] macro_rules! unmarshall_then_body_then_marshall { ( $args_iter:ident, $ctx:ident, ( $( $names:ident : $params:ty ),* ) -> $returns:ty => $body:tt ) => ({ - let body = $crate::vm::env_def::macros::constrain_closure::< - <$returns as $crate::vm::env_def::ConvertibleToWasm>::NativeType, _ + let body = $crate::wasm::env_def::macros::constrain_closure::< + <$returns as $crate::wasm::env_def::ConvertibleToWasm>::NativeType, _ >(|| { unmarshall_then_body!($body, $ctx, $args_iter, $( $names : $params ),*) }); let r = body()?; - return Ok($crate::sandbox::ReturnValue::Value({ use $crate::vm::env_def::ConvertibleToWasm; r.to_typed_value() })) + return Ok($crate::sandbox::ReturnValue::Value({ use $crate::wasm::env_def::ConvertibleToWasm; r.to_typed_value() })) }); ( $args_iter:ident, $ctx:ident, ( $( $names:ident : $params:ty ),* ) => $body:tt ) => ({ - let body = $crate::vm::env_def::macros::constrain_closure::<(), _>(|| { + let body = $crate::wasm::env_def::macros::constrain_closure::<(), _>(|| { unmarshall_then_body!($body, $ctx, $args_iter, $( $names : $params ),*) }); body()?; @@ -121,7 +121,7 @@ macro_rules! unmarshall_then_body_then_marshall { macro_rules! define_func { ( < E: $ext_ty:tt > $name:ident ( $ctx: ident $(, $names:ident : $params:ty)*) $(-> $returns:ty)* => $body:tt ) => { fn $name< E: $ext_ty >( - $ctx: &mut $crate::vm::Runtime, + $ctx: &mut $crate::wasm::Runtime, args: &[$crate::sandbox::TypedValue], ) -> Result { #[allow(unused)] @@ -168,7 +168,7 @@ macro_rules! define_env { ) => { pub struct $init_name; - impl $crate::vm::env_def::ImportSatisfyCheck for $init_name { + impl $crate::wasm::env_def::ImportSatisfyCheck for $init_name { fn can_satisfy(name: &[u8], func_type: &$crate::parity_wasm::elements::FunctionType) -> bool { gen_signature_dispatch!( name, func_type ; $( $name ( $ctx $(, $names : $params )* ) $( -> $returns )* , )* ); @@ -176,8 +176,8 @@ macro_rules! define_env { } } - impl $crate::vm::env_def::FunctionImplProvider for $init_name { - fn impls)>(f: &mut F) { + impl $crate::wasm::env_def::FunctionImplProvider for $init_name { + fn impls)>(f: &mut F) { register_func!(f, < E: $ext_ty > ; $( $name ( $ctx $( , $names : $params )* ) $( -> $returns)* => $body )* ); } } @@ -190,9 +190,9 @@ mod tests { use parity_wasm::elements::ValueType; use runtime_primitives::traits::{As, Zero}; use sandbox::{self, ReturnValue, TypedValue}; - use vm::tests::MockExt; + use wasm::tests::MockExt; + use wasm::Runtime; use exec::Ext; - use vm::Runtime; use Trait; #[test] @@ -297,7 +297,7 @@ mod tests { #[test] fn macro_define_env() { - use vm::env_def::ImportSatisfyCheck; + use wasm::env_def::ImportSatisfyCheck; define_env!(Env, , ext_gas( _ctx, amount: u32 ) => { diff --git a/srml/contract/src/vm/env_def/mod.rs b/srml/contract/src/wasm/env_def/mod.rs similarity index 100% rename from srml/contract/src/vm/env_def/mod.rs rename to srml/contract/src/wasm/env_def/mod.rs diff --git a/srml/contract/src/vm/mod.rs b/srml/contract/src/wasm/mod.rs similarity index 92% rename from srml/contract/src/vm/mod.rs rename to srml/contract/src/wasm/mod.rs index 216105b333de9..2cd873dc3fc1d 100644 --- a/srml/contract/src/vm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -21,18 +21,57 @@ use exec::{Ext, OutputBuf, VmExecResult}; use gas::GasMeter; use rstd::prelude::*; use sandbox; -use vm::env_def::FunctionImplProvider; -use {Schedule, Trait}; +use wasm::env_def::FunctionImplProvider; +use {Schedule, Trait, CodeHash}; #[macro_use] pub mod env_def; pub mod runtime; +pub mod code; use self::runtime::{to_execution_result, Runtime}; // TODO: Instead of taking the code explicitly can we take the code hash? // TODO: Extract code injection stuff and expect the code to be already prepared? +pub struct WasmExecutable { + // TODO: Remove these pubs + pub entrypoint_name: &'static [u8], + pub memory_def: code::MemoryDefinition, + pub instrumented_code: Vec, +} + +pub struct WasmLoader<'a, T: Trait> { + schedule: &'a Schedule, +} + +impl<'a, T: Trait> WasmLoader<'a, T> { + pub fn new(schedule: &'a Schedule) -> Self { + WasmLoader { schedule } + } +} + +impl<'a, T: Trait> ::exec::Loader for WasmLoader<'a, T> { + type Executable = WasmExecutable; + + fn load_init(&self, code_hash: &CodeHash) -> Result { + let dest_code = code::load::(code_hash, self.schedule)?; + Ok(WasmExecutable { + entrypoint_name: b"deploy", + memory_def: dest_code.memory_def, + instrumented_code: dest_code.code, + }) + } + fn load_main(&self, code_hash: &CodeHash) -> Result { + let dest_code = code::load::(code_hash, self.schedule)?; + Ok(WasmExecutable { + entrypoint_name: b"call", + memory_def: dest_code.memory_def, + instrumented_code: dest_code.code, + }) + } +} + pub struct WasmVm<'a, T: Trait> { schedule: &'a Schedule, } @@ -44,11 +83,11 @@ impl<'a, T: Trait> WasmVm<'a, T> { } impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { - type Executable = ::exec::WasmExecutable; + type Executable = WasmExecutable; fn execute>( &self, - exec: &::exec::WasmExecutable, + exec: &WasmExecutable, ext: &mut E, input_data: &[u8], output_buf: OutputBuf, @@ -110,6 +149,7 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { mod tests { use super::*; use exec::{CallReceipt, CreateReceipt, Ext, OutputBuf}; + use wasm::code::prepare::prepare_contract; use gas::GasMeter; use std::collections::HashMap; use tests::Test; @@ -199,12 +239,11 @@ mod tests { ext: &mut E, gas_meter: &mut GasMeter, ) -> Result<(), &'static str> { - use code::prepare::prepare_contract; - use exec::{Vm, WasmExecutable}; + use exec::Vm; let wasm = wabt::wat2wasm(wat).unwrap(); let schedule = ::Schedule::::default(); - let ::code::InstrumentedWasmModule { + let ::wasm::code::InstrumentedWasmModule { memory_def, code, .. } = prepare_contract::(&wasm, &schedule).unwrap(); diff --git a/srml/contract/src/vm/runtime.rs b/srml/contract/src/wasm/runtime.rs similarity index 100% rename from srml/contract/src/vm/runtime.rs rename to srml/contract/src/wasm/runtime.rs From de81162b43fb4f8f75fc3a9e587ff02b66562095 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 2 Jan 2019 17:08:14 +0100 Subject: [PATCH 050/108] Add ExecFeeToken --- srml/contract/src/exec.rs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 7375769eaae4d..e3531406ca356 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -164,6 +164,25 @@ pub trait Vm { ) -> VmExecResult; } +#[derive(Copy, Clone)] +pub enum ExecFeeToken { + /// Base fee charged for a call. + Call, + /// Base fee charged for a instantiate. + Instantiate, +} + +impl Token for ExecFeeToken { + type Metadata = Config; + #[inline] + fn calculate_amount(&self, metadata: &Config) -> T::Gas { + match *self { + ExecFeeToken::Call => metadata.call_base_fee, + ExecFeeToken::Instantiate => metadata.create_base_fee, + } + } +} + pub struct ExecutionContext<'a, T: Trait + 'a, V, L> { pub self_account: T::AccountId, pub overlay: OverlayAccountDb<'a, T>, @@ -221,7 +240,10 @@ where return Err("reached maximum depth, cannot make a call"); } - if gas_meter.charge(self.config.call_base_fee).is_out_of_gas() { + if gas_meter + .charge_with_token(self.config, ExecFeeToken::Call) + .is_out_of_gas() + { return Err("not enough gas to pay base call fee"); } @@ -285,7 +307,7 @@ where } if gas_meter - .charge(self.config.create_base_fee) + .charge_with_token(self.config, ExecFeeToken::Instantiate) .is_out_of_gas() { return Err("not enough gas to pay base create fee"); From 97eb2a923f1ff518dea47be5fa415d2eef9539b8 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 2 Jan 2019 18:10:12 +0100 Subject: [PATCH 051/108] Use tokens everywhere. --- srml/contract/src/exec.rs | 16 +++--- srml/contract/src/gas.rs | 58 +++++++++++++-------- srml/contract/src/wasm/code/mod.rs | 36 ++++++++++--- srml/contract/src/wasm/runtime.rs | 84 ++++++++++++++++++++---------- 4 files changed, 128 insertions(+), 66 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index e3531406ca356..2b5ecdf7b72cb 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -175,11 +175,11 @@ pub enum ExecFeeToken { impl Token for ExecFeeToken { type Metadata = Config; #[inline] - fn calculate_amount(&self, metadata: &Config) -> T::Gas { - match *self { + fn calculate_amount(&self, metadata: &Config) -> Option { + Some(match *self { ExecFeeToken::Call => metadata.call_base_fee, ExecFeeToken::Instantiate => metadata.create_base_fee, - } + }) } } @@ -241,7 +241,7 @@ where } if gas_meter - .charge_with_token(self.config, ExecFeeToken::Call) + .charge(self.config, ExecFeeToken::Call) .is_out_of_gas() { return Err("not enough gas to pay base call fee"); @@ -307,7 +307,7 @@ where } if gas_meter - .charge_with_token(self.config, ExecFeeToken::Instantiate) + .charge(self.config, ExecFeeToken::Instantiate) .is_out_of_gas() { return Err("not enough gas to pay base create fee"); @@ -381,7 +381,7 @@ impl Token for TransferFeeToken { type Metadata = Config; #[inline] - fn calculate_amount(&self, metadata: &Config) -> T::Gas { + fn calculate_amount(&self, metadata: &Config) -> Option { let balance_fee = match self.kind { TransferFeeKind::ContractAccountCreate => metadata.contract_account_create_fee, TransferFeeKind::AccountCreate => metadata.account_create_fee, @@ -391,7 +391,7 @@ impl Token for TransferFeeToken { let amount_in_gas: T::Balance = balance_fee / self.gas_price; let amount_in_gas: T::Gas = >::sa(amount_in_gas); - amount_in_gas + Some(amount_in_gas) } } @@ -453,7 +453,7 @@ fn transfer<'a, T: Trait, V: Vm, L: Loader>( } }; - if gas_meter.charge_with_token(ctx.config, token).is_out_of_gas() { + if gas_meter.charge(ctx.config, token).is_out_of_gas() { return Err("not enough gas to pay transfer fee"); } diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index 8232ac269b7c1..f561e7567f4c2 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -38,10 +38,23 @@ impl GasMeterResult { } } +/// This trait represents a token that can be used for charging `GasMeter`. +/// There is no other way of charging it. +/// +/// Implementing type is expected to be super lightweight hence `Copy` (`Clone` is added +/// for consistency). If inlined there should be no observable difference compared +/// to a hand-written code. pub trait Token: Copy + Clone + ::std::any::Any { + /// Metadata type, which the token can require for calculating the amount + /// of gas to charge. Can be a some configuration type or + /// just the `()`. type Metadata; - fn calculate_amount(&self, metadata: &Self::Metadata) -> T::Gas; + /// Calculate amount of gas that should be taken by this token. + /// + /// Returns `None` if the amount can't be calculated e.g. because of overflow. + /// This situation is treated as if out of gas happened. + fn calculate_amount(&self, metadata: &Self::Metadata) -> Option; } pub struct GasMeter { @@ -67,14 +80,25 @@ impl GasMeter { /// Account for used gas. /// + /// Amount is calculated by the given `token`. If `token::calculate_amount` returns + /// `None` then all available gas is consumed and `OutOfGas` is returned. + /// /// Returns `OutOfGas` if there is not enough gas or addition of the specified /// amount of gas has lead to overflow. On success returns `Proceed`. /// - /// NOTE that `amount` is always consumed, i.e. if there is not enough gas + /// NOTE that amount is always consumed, i.e. if there is not enough gas /// then the counter will be set to zero. - pub fn charge(&mut self, amount: T::Gas) -> GasMeterResult { - // pub fn charge>(&mut self, metadata: &Tok::Metadata, token: Tok) -> GasMeterResult { - // let amount = token.calculate_amount(metadata); + #[inline] + pub fn charge>(&mut self, metadata: &Tok::Metadata, token: Tok) -> GasMeterResult { + // Unconditionally add the token. + #[cfg(test)] + self.tokens.push(Box::new(token)); + + let amount = match token.calculate_amount(metadata) { + Some(amount_in_gas) => amount_in_gas, + None => self.gas_left, // Consume everything + }; + let new_value = match self.gas_left.checked_sub(&amount) { None => None, Some(val) if val.is_zero() => None, @@ -90,16 +114,6 @@ impl GasMeter { } } - /// Account for gas. - pub fn charge_with_token>(&mut self, metadata: &Tok::Metadata, token: Tok) -> GasMeterResult { - let amount_in_gas = token.calculate_amount(metadata); - - #[cfg(test)] - self.tokens.push(Box::new(token)); - - self.charge(amount_in_gas) - } - /// Allocate some amount of gas and perform some work with /// a newly created nested gas meter. /// @@ -234,8 +248,8 @@ mod tests { struct UnitToken; impl Token for UnitToken { type Metadata = (); - fn calculate_amount(&self, _metadata: &()) -> u64 { - 1 + fn calculate_amount(&self, _metadata: &()) -> Option { + Some(1) } } @@ -249,8 +263,8 @@ mod tests { impl Token for DoubleToken { type Metadata = DoubleTokenMetadata; - fn calculate_amount(&self, metadata: &DoubleTokenMetadata) -> u64 { - self.0 * metadata.multiplier + fn calculate_amount(&self, metadata: &DoubleTokenMetadata) -> Option { + Some(self.0 * metadata.multiplier) } } @@ -264,7 +278,7 @@ mod tests { fn simple() { let mut gas_meter = GasMeter::::with_limit(50000, 10); - let result = gas_meter.charge_with_token( + let result = gas_meter.charge( &DoubleTokenMetadata { multiplier: 3 }, DoubleToken(10), ); @@ -278,8 +292,8 @@ mod tests { #[test] fn tracing() { let mut gas_meter = GasMeter::::with_limit(50000, 10); - assert!(!gas_meter.charge_with_token(&(), UnitToken).is_out_of_gas()); - assert!(!gas_meter.charge_with_token( + assert!(!gas_meter.charge(&(), UnitToken).is_out_of_gas()); + assert!(!gas_meter.charge( &DoubleTokenMetadata { multiplier: 3 }, DoubleToken(10), ).is_out_of_gas()); diff --git a/srml/contract/src/wasm/code/mod.rs b/srml/contract/src/wasm/code/mod.rs index 4640239d52070..49ff5a9563edc 100644 --- a/srml/contract/src/wasm/code/mod.rs +++ b/srml/contract/src/wasm/code/mod.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . use codec::Compact; -use gas::GasMeter; +use gas::{GasMeter, Token}; use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul, Hash}; use runtime_support::StorageMap; @@ -42,18 +42,38 @@ pub struct InstrumentedWasmModule { pub code: Vec, } +#[derive(Copy, Clone)] +pub struct PutCodeToken { + /// Code length in bytes. + pub code_len: u64, +} + +impl Token for PutCodeToken { + type Metadata = Schedule; + + fn calculate_amount(&self, metadata: &Schedule) -> Option { + let code_len_in_gas = >::sa(self.code_len); + let cost = metadata + .put_code_per_byte_cost + .checked_mul(&code_len_in_gas)?; + + Some(cost) + } +} + pub fn save( original_code: Vec, gas_meter: &mut GasMeter, schedule: &Schedule, ) -> Result, &'static str> { - let code_len_in_gas = >::sa(original_code.len() as u64); - let cost = schedule - .put_code_per_byte_cost - .checked_mul(&code_len_in_gas) - .ok_or_else(|| "overflow occured when calculating put_code price")?; - if gas_meter.charge(cost).is_out_of_gas() { - return Err("there is not enough gas"); + if gas_meter + .charge( + schedule, + PutCodeToken { code_len: original_code.len() as u64 } + ) + .is_out_of_gas() + { + return Err("there is not enough gas for storing the code"); } let code_hash = T::Hashing::hash(&original_code); diff --git a/srml/contract/src/wasm/runtime.rs b/srml/contract/src/wasm/runtime.rs index 161c1d3af13ac..5a23ee8362e87 100644 --- a/srml/contract/src/wasm/runtime.rs +++ b/srml/contract/src/wasm/runtime.rs @@ -21,14 +21,12 @@ use exec::{Ext, BalanceOf, VmExecResult, OutputBuf, CallReceipt, CreateReceipt}; use rstd::prelude::*; use rstd::mem; use codec::{Decode, Encode}; -use gas::{GasMeter, GasMeterResult}; +use gas::{GasMeter, Token, GasMeterResult}; use runtime_primitives::traits::{As, CheckedMul}; use sandbox; use system; use {Trait, CodeHash}; -type GasOf = <::T as Trait>::Gas; - /// Enumerates all possible *special* trap conditions. /// /// In this runtime traps used not only for signaling about errors but also @@ -96,14 +94,51 @@ pub(crate) fn to_execution_result( } } -/// Charge the specified amount of gas. +#[derive(Copy, Clone)] +pub enum RuntimeToken { + /// Explicit call to the `gas` function. Charge the gas meter + /// with the value provided. + Explicit(u32), + /// The given number of bytes is read from the sandbox memory. + ReadMemory(u32), + /// The given number of bytes is written to the sandbox memory. + WriteMemory(u32), + /// The given number of bytes is read from the sandbox memory and + /// is returned as the return data buffer of the call. + ReturnData(u32), +} + +impl Token for RuntimeToken { + type Metadata = Schedule; + + fn calculate_amount(&self, metadata: &Schedule) -> Option { + use self::RuntimeToken::*; + let value = match *self { + Explicit(amount) => >::sa(amount), + ReadMemory(byte_count) => metadata + .sandbox_data_read_cost + .checked_mul(&>::sa(byte_count))?, + WriteMemory(byte_count) => metadata + .sandbox_data_write_cost + .checked_mul(&>::sa(byte_count))?, + ReturnData(byte_count) => metadata + .return_data_per_byte_cost + .checked_mul(&>::sa(byte_count))?, + }; + + Some(value) + } +} + +/// Charge the gas meter with the specified token. /// -/// Returns `Err` if there is not enough gas. -fn charge_gas( +/// Returns `Err(HostError)` if there is not enough gas. +fn charge_gas>( gas_meter: &mut GasMeter, - amount: T::Gas, + metadata: &Tok::Metadata, + token: Tok, ) -> Result<(), sandbox::HostError> { - match gas_meter.charge(amount) { + match gas_meter.charge(metadata, token) { GasMeterResult::Proceed => Ok(()), GasMeterResult::OutOfGas => Err(sandbox::HostError), } @@ -122,10 +157,7 @@ fn read_sandbox_memory( ptr: u32, len: u32, ) -> Result, sandbox::HostError> { - let price = (ctx.schedule.sandbox_data_read_cost) - .checked_mul(& as As>::sa(len)) - .ok_or(sandbox::HostError)?; - charge_gas(ctx.gas_meter, price)?; + charge_gas(ctx.gas_meter, ctx.schedule, RuntimeToken::ReadMemory(len))?; let mut buf = Vec::new(); buf.resize(len as usize, 0); @@ -144,16 +176,13 @@ fn read_sandbox_memory( /// - out of gas /// - designated area is not within the bounds of the sandbox memory. fn write_sandbox_memory( - per_byte_cost: T::Gas, + schedule: &Schedule, gas_meter: &mut GasMeter, memory: &sandbox::Memory, ptr: u32, buf: &[u8], ) -> Result<(), sandbox::HostError> { - let price = per_byte_cost - .checked_mul(&>::sa(buf.len() as u32)) - .ok_or(sandbox::HostError)?; - charge_gas(gas_meter, price)?; + charge_gas(gas_meter, schedule, RuntimeToken::WriteMemory(buf.len() as u32))?; memory.set(ptr, buf)?; @@ -174,9 +203,7 @@ define_env!(Env, , // // - amount: How much gas is used. gas(ctx, amount: u32) => { - let amount = <::Gas as As>::sa(amount); - charge_gas(&mut ctx.gas_meter, amount)?; - + charge_gas(&mut ctx.gas_meter, ctx.schedule, RuntimeToken::Explicit(amount))?; Ok(()) }, @@ -351,12 +378,13 @@ define_env!(Env, , // Save a data buffer as a result of the execution, terminate the execution and return a // successful result to the caller. ext_return(ctx, data_ptr: u32, data_len: u32) => { - let data_len_in_gas = <::Gas as As>::sa(data_len as u64); - let price = (ctx.schedule.return_data_per_byte_cost) - .checked_mul(&data_len_in_gas) - .ok_or(sandbox::HostError)?; - - match ctx.gas_meter.charge(price) { + match ctx + .gas_meter + .charge( + ctx.schedule, + RuntimeToken::ReturnData(data_len) + ) + { GasMeterResult::Proceed => (), GasMeterResult::OutOfGas => return Err(sandbox::HostError), } @@ -423,7 +451,7 @@ define_env!(Env, , // Finally, perform the write. write_sandbox_memory( - ctx.schedule.sandbox_data_write_cost, + ctx.schedule, ctx.gas_meter, &ctx.memory, dest_ptr, @@ -455,7 +483,7 @@ define_env!(Env, , // Finally, perform the write. write_sandbox_memory( - ctx.schedule.sandbox_data_write_cost, + ctx.schedule, ctx.gas_meter, &ctx.memory, dest_ptr, From 16351cafd6c1fe491d68eacd4a244c7c9338cefb Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 2 Jan 2019 18:26:31 +0100 Subject: [PATCH 052/108] Make it compile in no_std. --- srml/contract/src/gas.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index f561e7567f4c2..78fbedeb094bc 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -38,13 +38,23 @@ impl GasMeterResult { } } +#[cfg(not(test))] +pub trait MaybeAny {} +#[cfg(not(test))] +impl MaybeAny for T {} + +#[cfg(test)] +pub trait MaybeAny: Any {} +#[cfg(test)] +impl MaybeAny for T {} + /// This trait represents a token that can be used for charging `GasMeter`. /// There is no other way of charging it. /// /// Implementing type is expected to be super lightweight hence `Copy` (`Clone` is added /// for consistency). If inlined there should be no observable difference compared /// to a hand-written code. -pub trait Token: Copy + Clone + ::std::any::Any { +pub trait Token: Copy + Clone + MaybeAny { /// Metadata type, which the token can require for calculating the amount /// of gas to charge. Can be a some configuration type or /// just the `()`. From d9d27699d645c8a1d048ca8ac2bf7cd95ac926f4 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 2 Jan 2019 18:34:19 +0100 Subject: [PATCH 053/108] Lift all test requirements to TestAuxiliaries --- srml/contract/src/exec.rs | 7 +++++-- srml/contract/src/gas.rs | 15 +++++++++------ srml/contract/src/wasm/code/mod.rs | 1 + srml/contract/src/wasm/runtime.rs | 1 + 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 2b5ecdf7b72cb..cfe67d689aaad 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -164,6 +164,7 @@ pub trait Vm { ) -> VmExecResult; } +#[cfg_attr(test, derive(Debug, PartialEq, Eq))] #[derive(Copy, Clone)] pub enum ExecFeeToken { /// Base fee charged for a call. @@ -364,14 +365,16 @@ where } } -#[derive(Copy, Clone, PartialEq, Eq)] +#[cfg_attr(test, derive(Debug, PartialEq, Eq))] +#[derive(Copy, Clone)] pub enum TransferFeeKind { ContractAccountCreate, AccountCreate, Transfer, } -#[derive(Copy, Clone, PartialEq, Eq)] +#[cfg_attr(test, derive(Debug, PartialEq, Eq))] +#[derive(Copy, Clone)] pub struct TransferFeeToken { kind: TransferFeeKind, gas_price: Balance, diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index 78fbedeb094bc..4f5b3e8b1141f 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -20,7 +20,10 @@ use runtime_support::StorageValue; use balances; #[cfg(test)] -use std::any::Any; +use std::{ + any::Any, + fmt::Debug, +}; #[must_use] #[derive(Debug, PartialEq, Eq)] @@ -39,14 +42,14 @@ impl GasMeterResult { } #[cfg(not(test))] -pub trait MaybeAny {} +pub trait TestAuxiliaries {} #[cfg(not(test))] -impl MaybeAny for T {} +impl TestAuxiliaries for T {} #[cfg(test)] -pub trait MaybeAny: Any {} +pub trait TestAuxiliaries: Any + Debug + PartialEq + Eq {} #[cfg(test)] -impl MaybeAny for T {} +impl TestAuxiliaries for T {} /// This trait represents a token that can be used for charging `GasMeter`. /// There is no other way of charging it. @@ -54,7 +57,7 @@ impl MaybeAny for T {} /// Implementing type is expected to be super lightweight hence `Copy` (`Clone` is added /// for consistency). If inlined there should be no observable difference compared /// to a hand-written code. -pub trait Token: Copy + Clone + MaybeAny { +pub trait Token: Copy + Clone + TestAuxiliaries { /// Metadata type, which the token can require for calculating the amount /// of gas to charge. Can be a some configuration type or /// just the `()`. diff --git a/srml/contract/src/wasm/code/mod.rs b/srml/contract/src/wasm/code/mod.rs index 49ff5a9563edc..757f2a335004d 100644 --- a/srml/contract/src/wasm/code/mod.rs +++ b/srml/contract/src/wasm/code/mod.rs @@ -42,6 +42,7 @@ pub struct InstrumentedWasmModule { pub code: Vec, } +#[cfg_attr(test, derive(Debug, PartialEq, Eq))] #[derive(Copy, Clone)] pub struct PutCodeToken { /// Code length in bytes. diff --git a/srml/contract/src/wasm/runtime.rs b/srml/contract/src/wasm/runtime.rs index 5a23ee8362e87..15dc75e54bc23 100644 --- a/srml/contract/src/wasm/runtime.rs +++ b/srml/contract/src/wasm/runtime.rs @@ -94,6 +94,7 @@ pub(crate) fn to_execution_result( } } +#[cfg_attr(test, derive(Debug, PartialEq, Eq))] #[derive(Copy, Clone)] pub enum RuntimeToken { /// Explicit call to the `gas` function. Charge the gas meter From 81be0fdc2ecae46a5bcd0c90dc163b3912908902 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 2 Jan 2019 18:36:16 +0100 Subject: [PATCH 054/108] A minor clean --- srml/contract/src/wasm/mod.rs | 44 +++-------------------------------- 1 file changed, 3 insertions(+), 41 deletions(-) diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 2cd873dc3fc1d..8102add01e1e8 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -31,14 +31,10 @@ pub mod code; use self::runtime::{to_execution_result, Runtime}; -// TODO: Instead of taking the code explicitly can we take the code hash? -// TODO: Extract code injection stuff and expect the code to be already prepared? - pub struct WasmExecutable { - // TODO: Remove these pubs - pub entrypoint_name: &'static [u8], - pub memory_def: code::MemoryDefinition, - pub instrumented_code: Vec, + entrypoint_name: &'static [u8], + memory_def: code::MemoryDefinition, + instrumented_code: Vec, } pub struct WasmLoader<'a, T: Trait> { @@ -383,40 +379,6 @@ mod tests { ); } - // TODO: This shouldn't be possible. There is an invariant that - // code should be already prepared. - - // const CODE_MEM: &str = r#" - // (module - // ;; Internal memory is not allowed. - // (memory 1 1) - - // (func (export "call") - // nop - // ) - // ) - // "#; - - // #[test] - // fn contract_internal_mem() { - // let code_mem = wabt::wat2wasm(CODE_MEM).unwrap(); - - // let mut mock_ext = MockExt::default(); - - // assert_matches!( - // execute( - // "call", - // &code_mem, - // &[], - // &mut Vec::new(), - // &mut mock_ext, - // &Schedule::default(), - // &mut GasMeter::with_limit(100_000, 1) - // ), - // Err(_) - // ); - // } - const CODE_TRANSFER_LIMITED_GAS: &str = r#" (module ;; ext_call( From 7451166ecd6f876ef1238afaf6b6ee55acac8693 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 2 Jan 2019 21:08:06 +0100 Subject: [PATCH 055/108] First create tests --- srml/contract/src/exec.rs | 158 ++++++++++++++++++++++++++++++---- srml/contract/src/gas.rs | 31 +++++-- srml/contract/src/lib.rs | 6 +- srml/contract/src/tests.rs | 3 +- srml/contract/src/wasm/mod.rs | 2 +- 5 files changed, 171 insertions(+), 29 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index cfe67d689aaad..68cb648e637a3 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -25,8 +25,9 @@ use runtime_primitives::traits::{As, CheckedAdd, CheckedSub, Zero}; pub type BalanceOf = ::Balance; pub type AccountIdOf = ::AccountId; -pub struct CreateReceipt { - pub address: T::AccountId, +#[cfg_attr(test, derive(Debug))] +pub struct CreateReceipt { + pub address: AccountId, } #[cfg_attr(test, derive(Debug))] @@ -59,7 +60,7 @@ pub trait Ext { value: BalanceOf, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result, &'static str>; + ) -> Result>, &'static str>; /// Call (possibly transfering some amount of funds) into the specified account. fn call( @@ -297,12 +298,11 @@ where // TODO: rename it to instantiate. pub fn create( &mut self, - caller: T::AccountId, endowment: T::Balance, gas_meter: &mut GasMeter, code_hash: &CodeHash, input_data: &[u8], - ) -> Result, &'static str> { + ) -> Result, &'static str> { if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot create"); } @@ -347,7 +347,7 @@ where &executable, &mut CallContext { ctx: &mut nested, - caller: caller, + caller: self.self_account.clone(), }, input_data, OutputBuf::empty(), @@ -515,10 +515,9 @@ where endowment: T::Balance, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result, &'static str> { - let caller = self.ctx.self_account.clone(); + ) -> Result>, &'static str> { self.ctx - .create(caller, endowment, gas_meter, code_hash, &data) + .create(endowment, gas_meter, code_hash, &data) } fn call( @@ -544,7 +543,7 @@ where #[cfg(test)] mod tests { - use super::{ExecutionContext, Ext, Loader, Vm, OutputBuf, VmExecResult}; + use super::{ExecutionContext, Ext, Loader, Vm, OutputBuf, VmExecResult, TransferFeeToken, TransferFeeKind, ExecFeeToken}; use account_db::AccountDb; use gas::GasMeter; use runtime_io::with_externalities; @@ -716,6 +715,119 @@ mod tests { }); } + #[test] + fn transfer_fees() { + let origin = ALICE; + let dest = BOB; + + // This test sends 50 units of currency to a non-existent account. + // This should create lead to creation of a new account thus + // a fee should be charged. + with_externalities( + &mut ExtBuilder::default().existential_deposit(15).build(), + || { + let vm = MockVm::new(); + let loader = MockLoader::empty(); + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_balance(&origin, 100); + ctx.overlay.set_balance(&dest, 0); + + let mut gas_meter = GasMeter::::with_limit(1000, 1); + + let result = ctx.call( + dest, + 50, + &mut gas_meter, + &[], + OutputBuf::empty(), + ); + assert_matches!(result, Ok(_)); + + let mut toks = gas_meter.tokens().iter(); + match_tokens!(toks, + ExecFeeToken::Call, + TransferFeeToken { + kind: TransferFeeKind::AccountCreate, + gas_price: 1u64 + }, + ); + } + ); + + // This one is similar to the previous one but transfer to an existing account. + // In this test we expect that a regular transfer fee is charged. + with_externalities( + &mut ExtBuilder::default().existential_deposit(15).build(), + || { + let vm = MockVm::new(); + let loader = MockLoader::empty(); + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_balance(&origin, 100); + ctx.overlay.set_balance(&dest, 15); + + let mut gas_meter = GasMeter::::with_limit(1000, 1); + + let result = ctx.call( + dest, + 50, + &mut gas_meter, + &[], + OutputBuf::empty(), + ); + assert_matches!(result, Ok(_)); + + let mut toks = gas_meter.tokens().iter(); + match_tokens!(toks, + ExecFeeToken::Call, + TransferFeeToken { + kind: TransferFeeKind::Transfer, + gas_price: 1u64 + }, + ); + } + ); + + // This test sends 50 units of currency as an endownment to a newly + // created contract. + with_externalities( + &mut ExtBuilder::default().existential_deposit(15).build(), + || { + let mut loader = MockLoader::empty(); + let code = loader.insert(|_| { + VmExecResult::Ok + }); + + let vm = MockVm::new(); + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + + ctx.overlay.set_balance(&origin, 100); + ctx.overlay.set_balance(&dest, 15); + + let mut gas_meter = GasMeter::::with_limit(1000, 1); + + let result = ctx.create( + 50, + &mut gas_meter, + &code, + &[], + ); + assert_matches!(result, Ok(_)); + + let mut toks = gas_meter.tokens().iter(); + match_tokens!(toks, + ExecFeeToken::Instantiate, + TransferFeeToken { + kind: TransferFeeKind::ContractAccountCreate, + gas_price: 1u64 + }, + ); + } + ); + } + #[test] fn balance_too_low() { // This test verifies that a contract can't send value if it's @@ -783,10 +895,6 @@ mod tests { #[test] fn input_data() { - let origin = ALICE; - let dest = BOB; - let value = Default::default(); - let vm = MockVm::new(); let mut loader = MockLoader::empty(); let input_data_ch = loader.insert(|ctx| { @@ -794,19 +902,33 @@ mod tests { VmExecResult::Ok }); + // This one tests passing the input data into a contract via call. with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); - let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_code(&dest, Some(input_data_ch)); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + ctx.overlay.set_code(&BOB, Some(input_data_ch)); let result = ctx.call( - dest, - value, + BOB, + 0, &mut GasMeter::::with_limit(10000, 1), &[1, 2, 3, 4], OutputBuf::empty(), ); + assert_matches!(result, Ok(_)); + }); + + // This one tests passing the input data into a contract via call. + with_externalities(&mut ExtBuilder::default().build(), || { + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + let result = ctx.create( + 0, + &mut GasMeter::::with_limit(10000, 1), + &input_data_ch, + &[1, 2, 3, 4], + ); assert_matches!(result, Ok(_)); }); } diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index 4f5b3e8b1141f..59adcba6a51e2 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -70,6 +70,12 @@ pub trait Token: Copy + Clone + TestAuxiliaries { fn calculate_amount(&self, metadata: &Self::Metadata) -> Option; } +#[cfg(test)] +pub struct ErasedToken { + pub description: String, + pub token: Box, +} + pub struct GasMeter { limit: T::Gas, /// Amount of gas left from initial gas limit. Can reach zero. @@ -77,7 +83,7 @@ pub struct GasMeter { gas_price: T::Balance, #[cfg(test)] - tokens: Vec>, + tokens: Vec, } impl GasMeter { #[cfg(test)] @@ -105,7 +111,13 @@ impl GasMeter { pub fn charge>(&mut self, metadata: &Tok::Metadata, token: Tok) -> GasMeterResult { // Unconditionally add the token. #[cfg(test)] - self.tokens.push(Box::new(token)); + { + let erased_tok = ErasedToken { + description: format!("{:?}", token), + token: Box::new(token), + }; + self.tokens.push(erased_tok); + } let amount = match token.calculate_amount(metadata) { Some(amount_in_gas) => amount_in_gas, @@ -176,7 +188,7 @@ impl GasMeter { } #[cfg(test)] - fn tokens(&self) -> &[Box] { + pub fn tokens(&self) -> &[ErasedToken] { &self.tokens } } @@ -234,7 +246,7 @@ pub fn refund_unused_gas(transactor: &T::AccountId, gas_meter: GasMete >::increase_total_stake_by(refund); } -#[cfg(test)] +#[macro_export] macro_rules! match_tokens { ($tokens_iter:ident,) => { }; @@ -243,8 +255,15 @@ macro_rules! match_tokens { let next = ($tokens_iter).next().unwrap(); let pattern = $x; let mut _pattern_typed_next_ref = &pattern; - _pattern_typed_next_ref = next.downcast_ref().unwrap(); - assert_eq!(_pattern_typed_next_ref, &pattern); + _pattern_typed_next_ref = match next.token.downcast_ref() { + Some(p) => { + assert_eq!(p, &pattern); + p + } + None => { + panic!("expected type {} got {}", stringify!($x), next.description); + } + }; } match_tokens!($tokens_iter, $($rest)*); diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index be167b948c7ff..1395448c1bdc7 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -83,11 +83,13 @@ extern crate assert_matches; #[cfg(test)] extern crate wabt; +#[macro_use] +mod gas; + mod account_db; mod double_map; mod exec; mod wasm; -mod gas; #[cfg(test)] mod tests; @@ -257,7 +259,7 @@ decl_module! { let vm = ::wasm::WasmVm::new(&cfg.schedule); let loader = ::wasm::WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); - let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &code_hash, &data); + let result = ctx.create(endowment, &mut gas_meter, &code_hash, &data); if let Ok(ref r) = result { // Commit all changes that made it thus far into the persistant storage. diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index 83f4df24c6f16..7c71664923069 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -80,8 +80,7 @@ type System = system::Module; pub struct DummyContractAddressFor; impl ContractAddressFor for DummyContractAddressFor { fn contract_address_for(code_hash: &H256, data: &[u8], origin: &u64) -> u64 { - // TODO: - panic!() + *origin + 1 } } diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 8102add01e1e8..bc43c694b7130 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -188,7 +188,7 @@ mod tests { endowment: u64, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result, &'static str> { + ) -> Result, &'static str> { self.creates.push(CreateEntry { // code_hash: code_hash.clone(), endowment, From bf094c779988d3b9f1723923aa0972491108a724 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 17:54:39 +0100 Subject: [PATCH 056/108] Remove unneeded TODO --- srml/contract/src/exec.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 68cb648e637a3..b03bcd6e32a78 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -678,10 +678,6 @@ mod tests { assert_eq!(&*test_data.borrow(), &vec![0, 1]); } - // These will probably require introducing gas meter breakdown. - // TODO: Verify that transfer charges creation or transfer fee. - // TODO: Verify that transfer charges correct fee for INSTANTIATE. - // TODO: Won't create an account with value below exsistential deposit. // TODO: Verify that instantiate properly creates a contract. // TODO: Instantiate accounts in a proper way (i.e. via `instantiate`) From 5239bf8fdc04341d0f72fe26a5a7360523c6e1e3 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 18:18:16 +0100 Subject: [PATCH 057/108] Docs. --- srml/contract/src/exec.rs | 5 +++++ srml/contract/src/wasm/code/mod.rs | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index b03bcd6e32a78..425316cef935a 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -541,6 +541,11 @@ where } } +/// These tests exercise the executive layer. +/// +/// These tests mock a vm and use a simple callbacks instead of actual VM and loaders. +/// This allows you to tackle executive logic more thoroughly without writing a +/// wasm VM code. #[cfg(test)] mod tests { use super::{ExecutionContext, Ext, Loader, Vm, OutputBuf, VmExecResult, TransferFeeToken, TransferFeeKind, ExecFeeToken}; diff --git a/srml/contract/src/wasm/code/mod.rs b/srml/contract/src/wasm/code/mod.rs index 757f2a335004d..ef55070171863 100644 --- a/srml/contract/src/wasm/code/mod.rs +++ b/srml/contract/src/wasm/code/mod.rs @@ -67,6 +67,8 @@ pub fn save( gas_meter: &mut GasMeter, schedule: &Schedule, ) -> Result, &'static str> { + // The first time instrumentation is on the user. However, consequent reinstrumentation + // due to the schedule changes is on governance system. if gas_meter .charge( schedule, @@ -77,12 +79,10 @@ pub fn save( return Err("there is not enough gas for storing the code"); } - let code_hash = T::Hashing::hash(&original_code); - - // The first time instrumentation is on the user. However, consequent reinstrumentation - // due to the schedule changes is on governance system. let instrumented_module = prepare::prepare_contract::(&original_code, schedule)?; + let code_hash = T::Hashing::hash(&original_code); + // TODO: validate the code. If the code is not valid, then don't store it. >::insert(code_hash, instrumented_module); From 46ac8fa21bb92838619d7e630a8e17b60600f85a Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 18:39:41 +0100 Subject: [PATCH 058/108] Code shuffling --- srml/contract/src/lib.rs | 11 ++++++----- srml/contract/src/wasm/{code/mod.rs => code.rs} | 17 ++++++++--------- srml/contract/src/wasm/mod.rs | 3 ++- srml/contract/src/wasm/{code => }/prepare.rs | 2 +- 4 files changed, 17 insertions(+), 16 deletions(-) rename srml/contract/src/wasm/{code/mod.rs => code.rs} (91%) rename srml/contract/src/wasm/{code => }/prepare.rs (99%) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 1395448c1bdc7..ab04b7f907e53 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -325,10 +325,11 @@ decl_storage! { GasSpent get(gas_spent): T::Gas; /// Current cost schedule for contracts. CurrentSchedule get(current_schedule) config(): Schedule = Schedule::default(); - /// The code associated with an account. + /// The code associated with a given account. pub CodeHashOf: map T::AccountId => Option>; - + /// A mapping from an original code hash to the original code, untouched by instrumentation. pub PrestineCode: map CodeHash => Option>; + /// A mapping between an original code hash and instrumented wasm code, ready for the execution. pub CodeStorage: map CodeHash => Option; } } @@ -404,10 +405,10 @@ pub struct Schedule { pub return_data_per_byte_cost: Gas, /// Gas cost per one byte read from the sandbox memory. - sandbox_data_read_cost: Gas, + pub sandbox_data_read_cost: Gas, /// Gas cost per one byte written to the sandbox memory. - sandbox_data_write_cost: Gas, + pub sandbox_data_write_cost: Gas, /// How tall the stack is allowed to grow? /// @@ -415,7 +416,7 @@ pub struct Schedule { /// how the stack frame cost is calculated. pub max_stack_height: u32, - //// What is the maximal memory pages amount is allowed to have for + /// What is the maximal memory pages amount is allowed to have for /// a contract. pub max_memory_pages: u32, } diff --git a/srml/contract/src/wasm/code/mod.rs b/srml/contract/src/wasm/code.rs similarity index 91% rename from srml/contract/src/wasm/code/mod.rs rename to srml/contract/src/wasm/code.rs index ef55070171863..3a26cf6643f90 100644 --- a/srml/contract/src/wasm/code/mod.rs +++ b/srml/contract/src/wasm/code.rs @@ -20,10 +20,9 @@ use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul, Hash}; use runtime_support::StorageMap; use wasm::runtime::Env; +use wasm::prepare; use {CodeHash, CodeStorage, PrestineCode, Schedule, Trait}; -pub mod prepare; - #[derive(Clone, Encode, Decode)] pub struct MemoryDefinition { #[codec(compact)] @@ -36,24 +35,24 @@ pub struct MemoryDefinition { pub struct InstrumentedWasmModule { /// Version of the schedule with which the code was instrumented. #[codec(compact)] - schedule_version: u32, + pub schedule_version: u32, pub memory_def: MemoryDefinition, /// Code instrumented with the latest schedule. pub code: Vec, } +/// Gas metering token that used for charging storing code into the code storage. +/// +/// Specifies the code length in bytes. #[cfg_attr(test, derive(Debug, PartialEq, Eq))] #[derive(Copy, Clone)] -pub struct PutCodeToken { - /// Code length in bytes. - pub code_len: u64, -} +pub struct PutCodeToken(u64); impl Token for PutCodeToken { type Metadata = Schedule; fn calculate_amount(&self, metadata: &Schedule) -> Option { - let code_len_in_gas = >::sa(self.code_len); + let code_len_in_gas = >::sa(self.0); let cost = metadata .put_code_per_byte_cost .checked_mul(&code_len_in_gas)?; @@ -72,7 +71,7 @@ pub fn save( if gas_meter .charge( schedule, - PutCodeToken { code_len: original_code.len() as u64 } + PutCodeToken(original_code.len() as u64) ) .is_out_of_gas() { diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index bc43c694b7130..81386ef79121e 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -28,6 +28,7 @@ use {Schedule, Trait, CodeHash}; pub mod env_def; pub mod runtime; pub mod code; +pub mod prepare; use self::runtime::{to_execution_result, Runtime}; @@ -145,7 +146,7 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { mod tests { use super::*; use exec::{CallReceipt, CreateReceipt, Ext, OutputBuf}; - use wasm::code::prepare::prepare_contract; + use wasm::prepare::prepare_contract; use gas::GasMeter; use std::collections::HashMap; use tests::Test; diff --git a/srml/contract/src/wasm/code/prepare.rs b/srml/contract/src/wasm/prepare.rs similarity index 99% rename from srml/contract/src/wasm/code/prepare.rs rename to srml/contract/src/wasm/prepare.rs index d7b73342d376b..84fa1e2ae707d 100644 --- a/srml/contract/src/wasm/code/prepare.rs +++ b/srml/contract/src/wasm/prepare.rs @@ -17,13 +17,13 @@ //! Module that takes care of loading, checking and preprocessing of a //! wasm module before execution. -use super::{InstrumentedWasmModule, MemoryDefinition}; use parity_wasm::elements::{self, External, MemoryType, Type}; use pwasm_utils; use pwasm_utils::rules; use rstd::prelude::*; use runtime_primitives::traits::As; +use wasm::code::{InstrumentedWasmModule, MemoryDefinition}; use wasm::env_def::ImportSatisfyCheck; use {Schedule, Trait}; From e17b3698139c785c7c679cf4d18215453f47578e Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 18:50:45 +0100 Subject: [PATCH 059/108] =?UTF-8?q?Rename=20create=20=E2=86=92=20instantia?= =?UTF-8?q?te?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srml/contract/src/exec.rs | 37 +++++++++++++++---------------- srml/contract/src/lib.rs | 10 ++++----- srml/contract/src/wasm/mod.rs | 8 +++---- srml/contract/src/wasm/runtime.rs | 12 +++++----- 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 425316cef935a..4b64238e431f8 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -26,7 +26,7 @@ pub type BalanceOf = ::Balance; pub type AccountIdOf = ::AccountId; #[cfg_attr(test, derive(Debug))] -pub struct CreateReceipt { +pub struct InstantiateReceipt { pub address: AccountId, } @@ -50,17 +50,17 @@ pub trait Ext { /// Sets the storage entry by the given key to the specified value. fn set_storage(&mut self, key: &[u8], value: Option>); - /// Create a new account for a contract. + /// Instantiate a contract from the given code. /// /// The newly created account will be associated with the `code`. `value` specifies the amount of value /// transfered from this to the newly created account. - fn create( + fn instantiate( &mut self, code: &CodeHash, value: BalanceOf, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result>, &'static str>; + ) -> Result>, &'static str>; /// Call (possibly transfering some amount of funds) into the specified account. fn call( @@ -180,7 +180,7 @@ impl Token for ExecFeeToken { fn calculate_amount(&self, metadata: &Config) -> Option { Some(match *self { ExecFeeToken::Call => metadata.call_base_fee, - ExecFeeToken::Instantiate => metadata.create_base_fee, + ExecFeeToken::Instantiate => metadata.instantiate_base_fee, }) } } @@ -295,14 +295,13 @@ where }) } - // TODO: rename it to instantiate. - pub fn create( + pub fn instantiate( &mut self, endowment: T::Balance, gas_meter: &mut GasMeter, code_hash: &CodeHash, input_data: &[u8], - ) -> Result, &'static str> { + ) -> Result, &'static str> { if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot create"); } @@ -311,7 +310,7 @@ where .charge(self.config, ExecFeeToken::Instantiate) .is_out_of_gas() { - return Err("not enough gas to pay base create fee"); + return Err("not enough gas to pay base instantiate fee"); } let dest = T::DetermineContractAddress::contract_address_for( @@ -361,14 +360,14 @@ where self.overlay.commit(change_set); self.events.extend(events); - Ok(CreateReceipt { address: dest }) + Ok(InstantiateReceipt { address: dest }) } } #[cfg_attr(test, derive(Debug, PartialEq, Eq))] #[derive(Copy, Clone)] pub enum TransferFeeKind { - ContractAccountCreate, + ContractInstantiate, AccountCreate, Transfer, } @@ -386,7 +385,7 @@ impl Token for TransferFeeToken { #[inline] fn calculate_amount(&self, metadata: &Config) -> Option { let balance_fee = match self.kind { - TransferFeeKind::ContractAccountCreate => metadata.contract_account_create_fee, + TransferFeeKind::ContractInstantiate => metadata.contract_account_instantiate_fee, TransferFeeKind::AccountCreate => metadata.account_create_fee, TransferFeeKind::Transfer => metadata.transfer_fee, }; @@ -443,7 +442,7 @@ fn transfer<'a, T: Trait, V: Vm, L: Loader>( let kind: TransferFeeKind = match (cause, would_create) { // If this function is called from `Instantiate` routine, then we always // charge contract account creation fee. - (Instantiate, _) => TransferFeeKind::ContractAccountCreate, + (Instantiate, _) => TransferFeeKind::ContractInstantiate, // Otherwise the fee depends on whether we create a new account or transfer // to an existing one. @@ -509,15 +508,15 @@ where .set_storage(&self.ctx.self_account, key.to_vec(), value) } - fn create( + fn instantiate( &mut self, code_hash: &CodeHash, endowment: T::Balance, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result>, &'static str> { + ) -> Result>, &'static str> { self.ctx - .create(endowment, gas_meter, code_hash, &data) + .instantiate(endowment, gas_meter, code_hash, &data) } fn call( @@ -809,7 +808,7 @@ mod tests { let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.create( + let result = ctx.instantiate( 50, &mut gas_meter, &code, @@ -821,7 +820,7 @@ mod tests { match_tokens!(toks, ExecFeeToken::Instantiate, TransferFeeToken { - kind: TransferFeeKind::ContractAccountCreate, + kind: TransferFeeKind::ContractInstantiate, gas_price: 1u64 }, ); @@ -924,7 +923,7 @@ mod tests { let cfg = Config::preload(); let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); - let result = ctx.create( + let result = ctx.instantiate( 0, &mut GasMeter::::with_limit(10000, 1), &input_data_ch, diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index ab04b7f907e53..c78e43b53131d 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -259,7 +259,7 @@ decl_module! { let vm = ::wasm::WasmVm::new(&cfg.schedule); let loader = ::wasm::WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); - let result = ctx.create(endowment, &mut gas_meter, &code_hash, &data); + let result = ctx.instantiate(endowment, &mut gas_meter, &code_hash, &data); if let Ok(ref r) = result { // Commit all changes that made it thus far into the persistant storage. @@ -363,11 +363,11 @@ pub struct Config { pub schedule: Schedule, pub existential_deposit: T::Balance, pub max_depth: u32, - pub contract_account_create_fee: T::Balance, + pub contract_account_instantiate_fee: T::Balance, pub account_create_fee: T::Balance, pub transfer_fee: T::Balance, pub call_base_fee: T::Gas, - pub create_base_fee: T::Gas, + pub instantiate_base_fee: T::Gas, } impl Config { @@ -376,11 +376,11 @@ impl Config { schedule: >::current_schedule(), existential_deposit: >::existential_deposit(), max_depth: >::max_depth(), - contract_account_create_fee: >::contract_fee(), + contract_account_instantiate_fee: >::contract_fee(), account_create_fee: >::creation_fee(), transfer_fee: >::transfer_fee(), call_base_fee: >::call_base_fee(), - create_base_fee: >::create_base_fee(), + instantiate_base_fee: >::create_base_fee(), } } } diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 81386ef79121e..abb37f8c3d739 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -145,7 +145,7 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { #[cfg(test)] mod tests { use super::*; - use exec::{CallReceipt, CreateReceipt, Ext, OutputBuf}; + use exec::{CallReceipt, InstantiateReceipt, Ext, OutputBuf}; use wasm::prepare::prepare_contract; use gas::GasMeter; use std::collections::HashMap; @@ -183,13 +183,13 @@ mod tests { fn set_storage(&mut self, key: &[u8], value: Option>) { *self.storage.entry(key.to_vec()).or_insert(Vec::new()) = value.unwrap_or(Vec::new()); } - fn create( + fn instantiate( &mut self, _code_hash: &CodeHash, endowment: u64, gas_meter: &mut GasMeter, data: &[u8], - ) -> Result, &'static str> { + ) -> Result, &'static str> { self.creates.push(CreateEntry { // code_hash: code_hash.clone(), endowment, @@ -199,7 +199,7 @@ mod tests { let address = self.next_account_id; self.next_account_id += 1; - Ok(CreateReceipt { address }) + Ok(InstantiateReceipt { address }) } fn call( &mut self, diff --git a/srml/contract/src/wasm/runtime.rs b/srml/contract/src/wasm/runtime.rs index 15dc75e54bc23..ef7a93a36e882 100644 --- a/srml/contract/src/wasm/runtime.rs +++ b/srml/contract/src/wasm/runtime.rs @@ -17,7 +17,7 @@ //! Environment definition of the wasm smart-contract runtime. use super::{Schedule}; -use exec::{Ext, BalanceOf, VmExecResult, OutputBuf, CallReceipt, CreateReceipt}; +use exec::{Ext, BalanceOf, VmExecResult, OutputBuf, CallReceipt, InstantiateReceipt}; use rstd::prelude::*; use rstd::mem; use codec::{Decode, Encode}; @@ -312,7 +312,7 @@ define_env!(Env, , } }, - // Create a contract with code returned by the specified initializer code. + // Instantiate a contract with code returned by the specified initializer code. // // This function creates an account and executes initializer code. After the execution, // the returned buffer is saved as the code of the created account. @@ -359,15 +359,15 @@ define_env!(Env, , <::Gas as As>::sa(gas) }; let ext = &mut ctx.ext; - let create_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { + let instantiate_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { match nested_meter { - Some(nested_meter) => ext.create(&code_hash, value, nested_meter, &input_data).map_err(|_| ()), + Some(nested_meter) => ext.instantiate(&code_hash, value, nested_meter, &input_data).map_err(|_| ()), // there is not enough gas to allocate for the nested call. None => Err(()), } }); - match create_outcome { - Ok(CreateReceipt { address }) => { + match instantiate_outcome { + Ok(InstantiateReceipt { address }) => { // Write the address to the scratch buffer. address.encode_to(&mut ctx.scratch_buf); Ok(0) From 6d5e0aa7cec9b884c679daa8d284f5126ec320f2 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 18:57:04 +0100 Subject: [PATCH 060/108] Add test address. --- srml/contract/src/wasm/mod.rs | 65 +++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index abb37f8c3d739..0c4873554b54e 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -586,6 +586,69 @@ mod tests { .unwrap(); } + /// calls `ext_address`, loads the address from the scratch buffer and + /// compares it with the constant 69. + const CODE_ADDRESS: &'static str = r#" +(module + (import "env" "ext_address" (func $ext_address)) + (import "env" "ext_scratch_size" (func $ext_scratch_size (result i32))) + (import "env" "ext_scratch_copy" (func $ext_scratch_copy (param i32 i32 i32))) + (import "env" "memory" (memory 1 1)) + + (func $assert (param i32) + (block $ok + (br_if $ok + (get_local 0) + ) + (unreachable) + ) + ) + + (func (export "call") + ;; fill the scratch buffer with the self address. + (call $ext_address) + + ;; assert $ext_scratch_size == 8 + (call $assert + (i32.eq + (call $ext_scratch_size) + (i32.const 8) + ) + ) + + ;; copy contents of the scratch buffer into the contract's memory. + (call $ext_scratch_copy + (i32.const 8) ;; Pointer in memory to the place where to copy. + (i32.const 0) ;; Offset from the start of the scratch buffer. + (i32.const 8) ;; Count of bytes to copy. + ) + + ;; assert that contents of the buffer is equal to the i64 value of 69. + (call $assert + (i64.eq + (i64.load + (i32.const 8) + ) + (i64.const 69) + ) + ) + ) +) +"#; + + #[test] + fn address() { + let mut mock_ext = MockExt::default(); + execute( + CODE_ADDRESS, + &[], + &mut Vec::new(), + &mut mock_ext, + &mut GasMeter::with_limit(50_000, 1), + ) + .unwrap(); + } + const CODE_RETURN_FROM_START_FN: &str = r#" (module (import "env" "ext_return" (func $ext_return (param i32 i32))) @@ -622,6 +685,4 @@ mod tests { assert_eq!(output_data, vec![1, 2, 3, 4]); } - - // TODO: address } From 5365d8b2bb62ea4309c7afec59143bac82257624 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 20:22:05 +0100 Subject: [PATCH 061/108] Code shuffling --- srml/contract/src/lib.rs | 4 +-- srml/contract/src/wasm/code.rs | 28 ++++----------- srml/contract/src/wasm/mod.rs | 58 ++++++++++++++++++++----------- srml/contract/src/wasm/prepare.rs | 25 ++++++++----- 4 files changed, 62 insertions(+), 53 deletions(-) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 9d09c0d4c7ef5..1ee6ff079a12e 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -177,7 +177,7 @@ decl_module! { let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; - let result = wasm::code::save::(code, &mut gas_meter, &schedule); + let result = wasm::save_code::(code, &mut gas_meter, &schedule); if let Ok(code_hash) = result { Self::deposit_event(RawEvent::CodeStored(code_hash)); } @@ -330,7 +330,7 @@ decl_storage! { /// A mapping from an original code hash to the original code, untouched by instrumentation. pub PrestineCode: map CodeHash => Option>; /// A mapping between an original code hash and instrumented wasm code, ready for the execution. - pub CodeStorage: map CodeHash => Option; + pub CodeStorage: map CodeHash => Option; } } diff --git a/srml/contract/src/wasm/code.rs b/srml/contract/src/wasm/code.rs index 3a26cf6643f90..195457880c5dc 100644 --- a/srml/contract/src/wasm/code.rs +++ b/srml/contract/src/wasm/code.rs @@ -19,28 +19,13 @@ use gas::{GasMeter, Token}; use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul, Hash}; use runtime_support::StorageMap; -use wasm::runtime::Env; -use wasm::prepare; +use wasm::{ + PrefabWasmModule, + prepare, + runtime::Env, +}; use {CodeHash, CodeStorage, PrestineCode, Schedule, Trait}; -#[derive(Clone, Encode, Decode)] -pub struct MemoryDefinition { - #[codec(compact)] - pub initial: u32, - #[codec(compact)] - pub maximum: u32, -} - -#[derive(Clone, Encode, Decode)] -pub struct InstrumentedWasmModule { - /// Version of the schedule with which the code was instrumented. - #[codec(compact)] - pub schedule_version: u32, - pub memory_def: MemoryDefinition, - /// Code instrumented with the latest schedule. - pub code: Vec, -} - /// Gas metering token that used for charging storing code into the code storage. /// /// Specifies the code length in bytes. @@ -79,7 +64,6 @@ pub fn save( } let instrumented_module = prepare::prepare_contract::(&original_code, schedule)?; - let code_hash = T::Hashing::hash(&original_code); // TODO: validate the code. If the code is not valid, then don't store it. @@ -93,7 +77,7 @@ pub fn save( pub fn load( code_hash: &CodeHash, schedule: &Schedule, -) -> Result { +) -> Result { let instrumented_module = >::get(code_hash).ok_or_else(|| "code is not found")?; diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 0c4873554b54e..cbee98b1a42d2 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -17,6 +17,7 @@ //! This module provides a means for executing contracts //! represented in wasm. +use codec::Compact; use exec::{Ext, OutputBuf, VmExecResult}; use gas::GasMeter; use rstd::prelude::*; @@ -25,17 +26,39 @@ use wasm::env_def::FunctionImplProvider; use {Schedule, Trait, CodeHash}; #[macro_use] -pub mod env_def; -pub mod runtime; -pub mod code; -pub mod prepare; +mod env_def; +mod runtime; +mod code; +mod prepare; use self::runtime::{to_execution_result, Runtime}; +pub use self::code::{ + save as save_code, +}; + +/// A prepared wasm module ready for execution. +#[derive(Clone, Encode, Decode)] +pub struct PrefabWasmModule { + /// Version of the schedule with which the code was instrumented. + #[codec(compact)] + schedule_version: u32, + #[codec(compact)] + initial: u32, + #[codec(compact)] + maximum: u32, + /// This field is reserved for future evolution of format. + /// + /// Basically, for now this field will be serialized as `None`. In the future + /// we would be able to extend this structure with. + _reserved: Option<()>, + /// Code instrumented with the latest schedule. + code: Vec, +} + pub struct WasmExecutable { entrypoint_name: &'static [u8], - memory_def: code::MemoryDefinition, - instrumented_code: Vec, + prefab_module: PrefabWasmModule, } pub struct WasmLoader<'a, T: Trait> { @@ -52,19 +75,17 @@ impl<'a, T: Trait> ::exec::Loader for WasmLoader<'a, T> { type Executable = WasmExecutable; fn load_init(&self, code_hash: &CodeHash) -> Result { - let dest_code = code::load::(code_hash, self.schedule)?; + let prefab_module = code::load::(code_hash, self.schedule)?; Ok(WasmExecutable { entrypoint_name: b"deploy", - memory_def: dest_code.memory_def, - instrumented_code: dest_code.code, + prefab_module, }) } fn load_main(&self, code_hash: &CodeHash) -> Result { - let dest_code = code::load::(code_hash, self.schedule)?; + let prefab_module = code::load::(code_hash, self.schedule)?; Ok(WasmExecutable { entrypoint_name: b"call", - memory_def: dest_code.memory_def, - instrumented_code: dest_code.code, + prefab_module, }) } } @@ -90,10 +111,10 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { output_buf: OutputBuf, gas_meter: &mut GasMeter, ) -> VmExecResult { - let memory = sandbox::Memory::new(exec.memory_def.initial, Some(exec.memory_def.maximum)) + let memory = sandbox::Memory::new(exec.prefab_module.initial, Some(exec.prefab_module.maximum)) .unwrap_or_else(|_| { panic!( - "memory_def.initial can't be greater than memory_def.maximum; + "exec.prefab_module.initial can't be greater than exec.prefab_module.maximum; thus Memory::new must not fail; qed" ) @@ -115,7 +136,7 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { ); // Instantiate the instance from the instrumented module code. - match sandbox::Instance::new(&exec.instrumented_code, &imports, &mut runtime) { + match sandbox::Instance::new(&exec.prefab_module.code, &imports, &mut runtime) { // No errors or traps were generated on instantiation! That // means we can now invoke the contract entrypoint. Ok(mut instance) => { @@ -240,15 +261,12 @@ mod tests { let wasm = wabt::wat2wasm(wat).unwrap(); let schedule = ::Schedule::::default(); - let ::wasm::code::InstrumentedWasmModule { - memory_def, code, .. - } = prepare_contract::(&wasm, &schedule).unwrap(); + let prefab_module = prepare_contract::(&wasm, &schedule).unwrap(); let exec = WasmExecutable { // Use a "call" convention. entrypoint_name: b"call", - memory_def, - instrumented_code: code, + prefab_module, }; let cfg = Default::default(); diff --git a/srml/contract/src/wasm/prepare.rs b/srml/contract/src/wasm/prepare.rs index 84fa1e2ae707d..1306079d355cd 100644 --- a/srml/contract/src/wasm/prepare.rs +++ b/srml/contract/src/wasm/prepare.rs @@ -14,16 +14,16 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! Module that takes care of loading, checking and preprocessing of a -//! wasm module before execution. - +//! This module takes care of loading, checking and preprocessing of a +//! wasm module before execution. It also extracts some essential information +//! from a module. use parity_wasm::elements::{self, External, MemoryType, Type}; use pwasm_utils; use pwasm_utils::rules; use rstd::prelude::*; use runtime_primitives::traits::As; -use wasm::code::{InstrumentedWasmModule, MemoryDefinition}; +use wasm::PrefabWasmModule; use wasm::env_def::ImportSatisfyCheck; use {Schedule, Trait}; @@ -172,12 +172,17 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { pub fn prepare_contract( original_code: &[u8], schedule: &Schedule, -) -> Result { +) -> Result { let mut contract_module = ContractModule::new(original_code, schedule)?; contract_module.ensure_no_internal_memory()?; contract_module.inject_gas_metering()?; contract_module.inject_stack_height_metering()?; + struct MemoryDefinition { + initial: u32, + maximum: u32, + } + let memory_def = if let Some(memory_type) = contract_module.scan_imports::()? { // Inspect the module to extract the initial and maximum page count. let limits = memory_type.limits(); @@ -207,10 +212,12 @@ pub fn prepare_contract( } }; - Ok(InstrumentedWasmModule { + Ok(PrefabWasmModule { schedule_version: schedule.version, + initial: memory_def.initial, + maximum: memory_def.maximum, + _reserved: None, code: contract_module.into_wasm_code()?, - memory_def, }) } @@ -221,13 +228,13 @@ mod tests { use wabt; use tests::Test; - impl fmt::Debug for InstrumentedWasmModule { + impl fmt::Debug for PrefabWasmModule { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "PreparedContract {{ .. }}") } } - fn parse_and_prepare_wat(wat: &str) -> Result { + fn parse_and_prepare_wat(wat: &str) -> Result { let wasm = wabt::Wat2Wasm::new().validate(false).convert(wat).unwrap(); let schedule = Schedule::::default(); prepare_contract::(wasm.as_ref(), &schedule) From 224fadf0bfc36352ca48da86e9916ea30d951419 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 20:48:38 +0100 Subject: [PATCH 062/108] Add base_fee tests. --- srml/contract/src/exec.rs | 86 +++++++++++++++++++++++++++++++++++---- 1 file changed, 79 insertions(+), 7 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 4b64238e431f8..560a5ff27f189 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -542,9 +542,14 @@ where /// These tests exercise the executive layer. /// -/// These tests mock a vm and use a simple callbacks instead of actual VM and loaders. +/// In these tests the VM/loader are mocked. Instead of dealing with wasm bytecode they use simple closures. /// This allows you to tackle executive logic more thoroughly without writing a /// wasm VM code. +/// +/// Because it's the executive layer: +/// +/// - no gas meter setup and teardown logic. All balances are *AFTER* gas purchase. +/// - executive layer doesn't alter any storage! #[cfg(test)] mod tests { use super::{ExecutionContext, Ext, Loader, Vm, OutputBuf, VmExecResult, TransferFeeToken, TransferFeeKind, ExecFeeToken}; @@ -685,6 +690,74 @@ mod tests { // TODO: Won't create an account with value below exsistential deposit. // TODO: Verify that instantiate properly creates a contract. // TODO: Instantiate accounts in a proper way (i.e. via `instantiate`) + // TODO: Verify sanity of initial setup. I.e. no active account should have a zero balance. + + #[test] + fn base_fees() { + let origin = ALICE; + let dest = BOB; + + // This test verifies that base fee for call is taken. + with_externalities( + &mut ExtBuilder::default().build(), + || { + let vm = MockVm::new(); + let loader = MockLoader::empty(); + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_balance(&origin, 100); + ctx.overlay.set_balance(&dest, 0); + + let mut gas_meter = GasMeter::::with_limit(1000, 1); + + let result = ctx.call( + dest, + 0, + &mut gas_meter, + &[], + OutputBuf::empty(), + ); + assert_matches!(result, Ok(_)); + + let mut toks = gas_meter.tokens().iter(); + match_tokens!(toks, + ExecFeeToken::Call, + ); + } + ); + + // This test verifies that base fee for instantiation is taken. + with_externalities( + &mut ExtBuilder::default().build(), + || { + let mut loader = MockLoader::empty(); + let code = loader.insert(|_| { + VmExecResult::Ok + }); + + let vm = MockVm::new(); + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + + ctx.overlay.set_balance(&origin, 100); + + let mut gas_meter = GasMeter::::with_limit(1000, 1); + + let result = ctx.instantiate( + 0, + &mut gas_meter, + &code, + &[], + ); + assert_matches!(result, Ok(_)); + + let mut toks = gas_meter.tokens().iter(); + match_tokens!(toks, + ExecFeeToken::Instantiate, + ); + } + ); + } #[test] fn transfer_works() { @@ -935,10 +1008,9 @@ mod tests { #[test] fn max_depth() { - let origin = ALICE; - let dest = BOB; + // This test verifies that when we reach the maximal depth creation of an + // yet another context fails. let value = Default::default(); - let reached_bottom = RefCell::new(false); let vm = MockVm::new(); @@ -963,11 +1035,11 @@ mod tests { with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); - let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_code(&dest, Some(recurse_ch)); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + ctx.overlay.set_code(&BOB, Some(recurse_ch)); let result = ctx.call( - dest, + BOB, value, &mut GasMeter::::with_limit(100000, 1), &[], From 01390c710f5a6f6c5b9911addacf86022408929e Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 20:53:04 +0100 Subject: [PATCH 063/108] rejig the code --- srml/contract/src/exec.rs | 144 +++++++++++------------------- srml/contract/src/gas.rs | 34 +++---- srml/contract/src/wasm/code.rs | 11 +-- srml/contract/src/wasm/mod.rs | 24 ++--- srml/contract/src/wasm/prepare.rs | 17 ++-- 5 files changed, 93 insertions(+), 137 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 560a5ff27f189..946a3b3585ccd 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -290,9 +290,7 @@ where self.overlay.commit(change_set); self.events.extend(events); - Ok(CallReceipt { - output_data, - }) + Ok(CallReceipt { output_data }) } pub fn instantiate( @@ -515,8 +513,7 @@ where gas_meter: &mut GasMeter, data: &[u8], ) -> Result>, &'static str> { - self.ctx - .instantiate(endowment, gas_meter, code_hash, &data) + self.ctx.instantiate(endowment, gas_meter, code_hash, &data) } fn call( @@ -552,7 +549,10 @@ where /// - executive layer doesn't alter any storage! #[cfg(test)] mod tests { - use super::{ExecutionContext, Ext, Loader, Vm, OutputBuf, VmExecResult, TransferFeeToken, TransferFeeKind, ExecFeeToken}; + use super::{ + ExecFeeToken, ExecutionContext, Ext, Loader, OutputBuf, TransferFeeKind, TransferFeeToken, + Vm, VmExecResult, + }; use account_db::AccountDb; use gas::GasMeter; use runtime_io::with_externalities; @@ -596,10 +596,7 @@ mod tests { } } - fn insert( - &mut self, - f: impl Fn(MockCtx) -> VmExecResult + 'a, - ) -> CodeHash { + fn insert(&mut self, f: impl Fn(MockCtx) -> VmExecResult + 'a) -> CodeHash { // Generate code hashes as monotonically increasing values. let code_hash = self.counter.into(); @@ -698,65 +695,42 @@ mod tests { let dest = BOB; // This test verifies that base fee for call is taken. - with_externalities( - &mut ExtBuilder::default().build(), - || { - let vm = MockVm::new(); - let loader = MockLoader::empty(); - let cfg = Config::preload(); - let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_balance(&origin, 100); - ctx.overlay.set_balance(&dest, 0); + with_externalities(&mut ExtBuilder::default().build(), || { + let vm = MockVm::new(); + let loader = MockLoader::empty(); + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + ctx.overlay.set_balance(&origin, 100); + ctx.overlay.set_balance(&dest, 0); - let mut gas_meter = GasMeter::::with_limit(1000, 1); + let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.call( - dest, - 0, - &mut gas_meter, - &[], - OutputBuf::empty(), - ); - assert_matches!(result, Ok(_)); + let result = ctx.call(dest, 0, &mut gas_meter, &[], OutputBuf::empty()); + assert_matches!(result, Ok(_)); - let mut toks = gas_meter.tokens().iter(); - match_tokens!(toks, - ExecFeeToken::Call, - ); - } - ); + let mut toks = gas_meter.tokens().iter(); + match_tokens!(toks, ExecFeeToken::Call,); + }); // This test verifies that base fee for instantiation is taken. - with_externalities( - &mut ExtBuilder::default().build(), - || { - let mut loader = MockLoader::empty(); - let code = loader.insert(|_| { - VmExecResult::Ok - }); + with_externalities(&mut ExtBuilder::default().build(), || { + let mut loader = MockLoader::empty(); + let code = loader.insert(|_| VmExecResult::Ok); - let vm = MockVm::new(); - let cfg = Config::preload(); - let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); + let vm = MockVm::new(); + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_balance(&origin, 100); + ctx.overlay.set_balance(&origin, 100); - let mut gas_meter = GasMeter::::with_limit(1000, 1); + let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.instantiate( - 0, - &mut gas_meter, - &code, - &[], - ); - assert_matches!(result, Ok(_)); + let result = ctx.instantiate(0, &mut gas_meter, &code, &[]); + assert_matches!(result, Ok(_)); - let mut toks = gas_meter.tokens().iter(); - match_tokens!(toks, - ExecFeeToken::Instantiate, - ); - } - ); + let mut toks = gas_meter.tokens().iter(); + match_tokens!(toks, ExecFeeToken::Instantiate,); + }); } #[test] @@ -808,24 +782,19 @@ mod tests { let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.call( - dest, - 50, - &mut gas_meter, - &[], - OutputBuf::empty(), - ); + let result = ctx.call(dest, 50, &mut gas_meter, &[], OutputBuf::empty()); assert_matches!(result, Ok(_)); let mut toks = gas_meter.tokens().iter(); - match_tokens!(toks, + match_tokens!( + toks, ExecFeeToken::Call, TransferFeeToken { kind: TransferFeeKind::AccountCreate, gas_price: 1u64 }, ); - } + }, ); // This one is similar to the previous one but transfer to an existing account. @@ -842,24 +811,19 @@ mod tests { let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.call( - dest, - 50, - &mut gas_meter, - &[], - OutputBuf::empty(), - ); + let result = ctx.call(dest, 50, &mut gas_meter, &[], OutputBuf::empty()); assert_matches!(result, Ok(_)); let mut toks = gas_meter.tokens().iter(); - match_tokens!(toks, + match_tokens!( + toks, ExecFeeToken::Call, TransferFeeToken { kind: TransferFeeKind::Transfer, gas_price: 1u64 }, ); - } + }, ); // This test sends 50 units of currency as an endownment to a newly @@ -868,9 +832,7 @@ mod tests { &mut ExtBuilder::default().existential_deposit(15).build(), || { let mut loader = MockLoader::empty(); - let code = loader.insert(|_| { - VmExecResult::Ok - }); + let code = loader.insert(|_| VmExecResult::Ok); let vm = MockVm::new(); let cfg = Config::preload(); @@ -881,23 +843,19 @@ mod tests { let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.instantiate( - 50, - &mut gas_meter, - &code, - &[], - ); + let result = ctx.instantiate(50, &mut gas_meter, &code, &[]); assert_matches!(result, Ok(_)); let mut toks = gas_meter.tokens().iter(); - match_tokens!(toks, + match_tokens!( + toks, ExecFeeToken::Instantiate, TransferFeeToken { kind: TransferFeeKind::ContractInstantiate, gas_price: 1u64 }, ); - } + }, ); } @@ -1017,7 +975,9 @@ mod tests { let mut loader = MockLoader::empty(); let recurse_ch = loader.insert(|ctx| { // Try to call into yourself. - let r = ctx.ext.call(&BOB, 0, ctx.gas_meter, &[], OutputBuf::empty()); + let r = ctx + .ext + .call(&BOB, 0, ctx.gas_meter, &[], OutputBuf::empty()); let mut reached_bottom = reached_bottom.borrow_mut(); if !*reached_bottom { @@ -1067,7 +1027,8 @@ mod tests { // Call into CHARLIE contract. assert_matches!( - ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], OutputBuf::empty()), + ctx.ext + .call(&CHARLIE, 0, ctx.gas_meter, &[], OutputBuf::empty()), Ok(_) ); VmExecResult::Ok @@ -1111,7 +1072,8 @@ mod tests { // Call into charlie contract. assert_matches!( - ctx.ext.call(&CHARLIE, 0, ctx.gas_meter, &[], OutputBuf::empty()), + ctx.ext + .call(&CHARLIE, 0, ctx.gas_meter, &[], OutputBuf::empty()), Ok(_) ); VmExecResult::Ok diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index 59adcba6a51e2..b8c90da77c720 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -14,16 +14,13 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use {Trait, Module, GasSpent}; +use balances; use runtime_primitives::traits::{As, CheckedMul, CheckedSub, Zero}; use runtime_support::StorageValue; -use balances; +use {GasSpent, Module, Trait}; #[cfg(test)] -use std::{ - any::Any, - fmt::Debug, -}; +use std::{any::Any, fmt::Debug}; #[must_use] #[derive(Debug, PartialEq, Eq)] @@ -108,7 +105,11 @@ impl GasMeter { /// NOTE that amount is always consumed, i.e. if there is not enough gas /// then the counter will be set to zero. #[inline] - pub fn charge>(&mut self, metadata: &Tok::Metadata, token: Tok) -> GasMeterResult { + pub fn charge>( + &mut self, + metadata: &Tok::Metadata, + token: Tok, + ) -> GasMeterResult { // Unconditionally add the token. #[cfg(test)] { @@ -227,7 +228,7 @@ pub fn buy_gas( gas_left: gas_limit, gas_price, #[cfg(test)] - tokens: Vec::new() + tokens: Vec::new(), }) } @@ -310,10 +311,7 @@ mod tests { fn simple() { let mut gas_meter = GasMeter::::with_limit(50000, 10); - let result = gas_meter.charge( - &DoubleTokenMetadata { multiplier: 3 }, - DoubleToken(10), - ); + let result = gas_meter.charge(&DoubleTokenMetadata { multiplier: 3 }, DoubleToken(10)); assert!(!result.is_out_of_gas()); assert_eq!(gas_meter.gas_left(), 49_970); @@ -325,15 +323,11 @@ mod tests { fn tracing() { let mut gas_meter = GasMeter::::with_limit(50000, 10); assert!(!gas_meter.charge(&(), UnitToken).is_out_of_gas()); - assert!(!gas_meter.charge( - &DoubleTokenMetadata { multiplier: 3 }, - DoubleToken(10), - ).is_out_of_gas()); + assert!(!gas_meter + .charge(&DoubleTokenMetadata { multiplier: 3 }, DoubleToken(10)) + .is_out_of_gas()); let mut tokens = gas_meter.tokens()[0..2].iter(); - match_tokens!(tokens, - UnitToken, - DoubleToken(10), - ); + match_tokens!(tokens, UnitToken, DoubleToken(10),); } } diff --git a/srml/contract/src/wasm/code.rs b/srml/contract/src/wasm/code.rs index 195457880c5dc..1ce46b9c1857d 100644 --- a/srml/contract/src/wasm/code.rs +++ b/srml/contract/src/wasm/code.rs @@ -19,11 +19,7 @@ use gas::{GasMeter, Token}; use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul, Hash}; use runtime_support::StorageMap; -use wasm::{ - PrefabWasmModule, - prepare, - runtime::Env, -}; +use wasm::{prepare, runtime::Env, PrefabWasmModule}; use {CodeHash, CodeStorage, PrestineCode, Schedule, Trait}; /// Gas metering token that used for charging storing code into the code storage. @@ -54,10 +50,7 @@ pub fn save( // The first time instrumentation is on the user. However, consequent reinstrumentation // due to the schedule changes is on governance system. if gas_meter - .charge( - schedule, - PutCodeToken(original_code.len() as u64) - ) + .charge(schedule, PutCodeToken(original_code.len() as u64)) .is_out_of_gas() { return Err("there is not enough gas for storing the code"); diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index cbee98b1a42d2..776fc7133b38f 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -23,19 +23,17 @@ use gas::GasMeter; use rstd::prelude::*; use sandbox; use wasm::env_def::FunctionImplProvider; -use {Schedule, Trait, CodeHash}; +use {CodeHash, Schedule, Trait}; #[macro_use] mod env_def; -mod runtime; mod code; mod prepare; +mod runtime; use self::runtime::{to_execution_result, Runtime}; -pub use self::code::{ - save as save_code, -}; +pub use self::code::save as save_code; /// A prepared wasm module ready for execution. #[derive(Clone, Encode, Decode)] @@ -111,14 +109,15 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { output_buf: OutputBuf, gas_meter: &mut GasMeter, ) -> VmExecResult { - let memory = sandbox::Memory::new(exec.prefab_module.initial, Some(exec.prefab_module.maximum)) - .unwrap_or_else(|_| { - panic!( + let memory = + sandbox::Memory::new(exec.prefab_module.initial, Some(exec.prefab_module.maximum)) + .unwrap_or_else(|_| { + panic!( "exec.prefab_module.initial can't be greater than exec.prefab_module.maximum; thus Memory::new must not fail; qed" ) - }); + }); let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); imports.add_memory("env", "memory", memory.clone()); @@ -166,12 +165,12 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { #[cfg(test)] mod tests { use super::*; - use exec::{CallReceipt, InstantiateReceipt, Ext, OutputBuf}; - use wasm::prepare::prepare_contract; + use exec::{CallReceipt, Ext, InstantiateReceipt, OutputBuf}; use gas::GasMeter; use std::collections::HashMap; use tests::Test; use wabt; + use wasm::prepare::prepare_contract; use CodeHash; #[derive(Debug, PartialEq, Eq)] @@ -261,7 +260,8 @@ mod tests { let wasm = wabt::wat2wasm(wat).unwrap(); let schedule = ::Schedule::::default(); - let prefab_module = prepare_contract::(&wasm, &schedule).unwrap(); + let prefab_module = + prepare_contract::(&wasm, &schedule).unwrap(); let exec = WasmExecutable { // Use a "call" convention. diff --git a/srml/contract/src/wasm/prepare.rs b/srml/contract/src/wasm/prepare.rs index 1306079d355cd..879348b36a479 100644 --- a/srml/contract/src/wasm/prepare.rs +++ b/srml/contract/src/wasm/prepare.rs @@ -23,8 +23,8 @@ use pwasm_utils; use pwasm_utils::rules; use rstd::prelude::*; use runtime_primitives::traits::As; -use wasm::PrefabWasmModule; use wasm::env_def::ImportSatisfyCheck; +use wasm::PrefabWasmModule; use {Schedule, Trait}; struct ContractModule<'a, Gas: 'a> { @@ -225,8 +225,8 @@ pub fn prepare_contract( mod tests { use super::*; use std::fmt; - use wabt; use tests::Test; + use wabt; impl fmt::Debug for PrefabWasmModule { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { @@ -260,7 +260,10 @@ mod tests { // initial exceed maximum let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 16 1)))"#); - assert_matches!(r, Err("Requested initial number of pages should not exceed the requested maximum")); + assert_matches!( + r, + Err("Requested initial number of pages should not exceed the requested maximum") + ); // no maximum let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1)))"#); @@ -268,13 +271,17 @@ mod tests { // requested maximum exceed configured maximum let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 17)))"#); - assert_matches!(r, Err("Maximum number of pages should not exceed the configured maximum.")); + assert_matches!( + r, + Err("Maximum number of pages should not exceed the configured maximum.") + ); } #[test] fn imports() { // nothing can be imported from non-"env" module for now. - let r = parse_and_prepare_wat(r#"(module (import "another_module" "memory" (memory 1 1)))"#); + let r = + parse_and_prepare_wat(r#"(module (import "another_module" "memory" (memory 1 1)))"#); assert_matches!(r, Err("module has imports from a non-'env' namespace")); let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i32))))"#); From 3f6b1746f47b44465d18afdd1433f5344b086e97 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 21:01:57 +0100 Subject: [PATCH 064/108] Add some comments --- srml/contract/src/wasm/code.rs | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/srml/contract/src/wasm/code.rs b/srml/contract/src/wasm/code.rs index 1ce46b9c1857d..29a47f74dc810 100644 --- a/srml/contract/src/wasm/code.rs +++ b/srml/contract/src/wasm/code.rs @@ -14,7 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use codec::Compact; use gas::{GasMeter, Token}; use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul, Hash}; @@ -42,6 +41,10 @@ impl Token for PutCodeToken { } } +/// Put code in the storage. The hash of code is used as a key and is returned +/// as a result of this function. +/// +/// This function instruments the given code and caches it in the storage. pub fn save( original_code: Vec, gas_meter: &mut GasMeter, @@ -56,34 +59,38 @@ pub fn save( return Err("there is not enough gas for storing the code"); } - let instrumented_module = prepare::prepare_contract::(&original_code, schedule)?; + let prefab_module = prepare::prepare_contract::(&original_code, schedule)?; let code_hash = T::Hashing::hash(&original_code); // TODO: validate the code. If the code is not valid, then don't store it. - >::insert(code_hash, instrumented_module); + >::insert(code_hash, prefab_module); >::insert(code_hash, original_code); Ok(code_hash) } +/// Load code with the given code hash. +/// +/// If the module was instrumented with a lower version of schedule than +/// the current one given as an argument, then this function will perform +/// re-instrumentation and update the cache in the storage. pub fn load( code_hash: &CodeHash, schedule: &Schedule, ) -> Result { - let instrumented_module = + let mut prefab_module = >::get(code_hash).ok_or_else(|| "code is not found")?; - if instrumented_module.schedule_version < schedule.version { + if prefab_module.schedule_version < schedule.version { + // The current schedule version is greater than the version of the one cached + // in the storage. + // + // We need to re-instrument the code with the latest schedule here. let original_code = >::get(code_hash).ok_or_else(|| "prestine code is not found")?; - - let instrumented_module = prepare::prepare_contract::(&original_code, schedule)?; - - >::insert(code_hash, instrumented_module.clone()); - - Ok(instrumented_module) - } else { - Ok(instrumented_module) + prefab_module = prepare::prepare_contract::(&original_code, schedule)?; + >::insert(code_hash, prefab_module.clone()); } + Ok(prefab_module) } From 83e4ee18eea485a593e8277da05a4b46f933fb53 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 3 Jan 2019 21:18:05 +0100 Subject: [PATCH 065/108] on_finalise comment --- srml/contract/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 1ee6ff079a12e..b7b5d2ccf01ea 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -39,7 +39,7 @@ //! This module requires performing some finalization steps at the end of the block. If not performed //! the module will have incorrect behavior. //! -//! Call [`Module::execute`] at the end of the block. The order in relation to +//! Thus [`Module::on_finalise`] should be called at the end of the block. The order in relation to //! the other module doesn't matter. //! //! ## Account killing @@ -48,7 +48,7 @@ //! exsistential deposit) then it reaps the account. That will lead to deletion of the associated //! code and storage of the account. //! -//! [`Module::execute`]: struct.Module.html#impl-OnFinalise +//! [`Module::on_finalise`]: struct.Module.html#impl-OnFinalise #![cfg_attr(not(feature = "std"), no_std)] From 452977d87a1889ffdd4f52acd05056c3a1b494a1 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 4 Jan 2019 17:16:39 +0100 Subject: [PATCH 066/108] Move event deposit further --- srml/contract/src/exec.rs | 5 +++++ srml/contract/src/lib.rs | 6 ++---- srml/contract/src/tests.rs | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 946a3b3585ccd..ad0e1ce915f8d 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -352,6 +352,9 @@ where ) .into_result()?; + // Deposit an instantiation event. + nested.events.push(RawEvent::Instantiated(self.self_account.clone(), dest.clone())); + (nested.overlay.into_change_set(), nested.events) }; @@ -688,6 +691,8 @@ mod tests { // TODO: Verify that instantiate properly creates a contract. // TODO: Instantiate accounts in a proper way (i.e. via `instantiate`) // TODO: Verify sanity of initial setup. I.e. no active account should have a zero balance. + // TODO: test events acruing in success and failure cases. + // TODO: test instantiation yields an instantiation event. #[test] fn base_fees() { diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index b7b5d2ccf01ea..2aa8a869305f0 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -261,14 +261,12 @@ decl_module! { let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); let result = ctx.instantiate(endowment, &mut gas_meter, &code_hash, &data); - if let Ok(ref r) = result { + if let Ok(_) = result { // Commit all changes that made it thus far into the persistant storage. account_db::DirectAccountDb.commit(ctx.overlay.into_change_set()); // Then deposit all events produced. ctx.events.into_iter().for_each(Self::deposit_event); - - Self::deposit_event(RawEvent::Created(origin.clone(), r.address.clone())); } // Refund cost of the unused gas. @@ -297,7 +295,7 @@ decl_event! { Transfer(AccountId, AccountId, Balance), /// Contract deployed by address at the specified address. - Created(AccountId, AccountId), + Instantiated(AccountId, AccountId), /// Code with the specified hash has been stored. CodeStored(Hash), diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index 7c71664923069..b7c090708e9a9 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -223,3 +223,4 @@ fn account_removal_removes_storage() { // TODO: Block gas limit // TODO: top_level_call_refunds_even_if_fails +// TODO: test finalization of a tx. From 0af6aa8dfb089205cf823c6e01d80042e65eabec Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 7 Jan 2019 12:38:18 +0100 Subject: [PATCH 067/108] Update Cargo.lock --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e8a92b3bdbaed..dc0ed47652989 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2213,7 +2213,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pwasm-utils" -version = "0.6.0" +version = "0.6.1" dependencies = [ "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2890,7 +2890,7 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pwasm-utils 0.6.0", + "pwasm-utils 0.6.1", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", From a5a5d207e7ca9c16b3451a46b9daa8106e371dd0 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 7 Jan 2019 12:41:06 +0100 Subject: [PATCH 068/108] Use crates.io version of pwasm-utils --- Cargo.lock | 6 ++++-- srml/contract/Cargo.toml | 4 +--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dc0ed47652989..aa8f73055d055 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2214,6 +2214,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "pwasm-utils" version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2890,7 +2891,7 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pwasm-utils 0.6.1", + "pwasm-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", @@ -3490,7 +3491,7 @@ dependencies = [ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", @@ -4909,6 +4910,7 @@ dependencies = [ "checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" "checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09" "checksum protobuf 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "671a9cce836bd3635b40b2b0a72783481755ee988c493891f4e974b45264cc9d" +"checksum pwasm-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e9135bed7b452e20dbb395a2d519abaf0c46d60e7ecc02daeeab447d29bada1" "checksum quasi 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18c45c4854d6d1cf5d531db97c75880feb91c958b0720f4ec1057135fec358b3" "checksum quasi_codegen 0.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "51b9e25fa23c044c1803f43ca59c98dac608976dd04ce799411edd58ece776d4" "checksum quick-error 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5fb6ccf8db7bbcb9c2eae558db5ab4f3da1c2a87e4e597ed394726bc8ea6ca1d" diff --git a/srml/contract/Cargo.toml b/srml/contract/Cargo.toml index 157bd94f59688..b9d982359dc11 100644 --- a/srml/contract/Cargo.toml +++ b/srml/contract/Cargo.toml @@ -5,9 +5,7 @@ authors = ["Parity Technologies "] [dependencies] serde = { version = "1.0", default-features = false } -# TODO: -# pwasm-utils = { version = "0.3", default-features = false } -pwasm-utils = { path = "/Users/pepyakin/dev/parity/wasm-utils", default-features = false } +pwasm-utils = { version = "0.6.1", default-features = false } parity-codec = { version = "2.1", default-features = false } parity-codec-derive = { version = "2.1", default-features = false } parity-wasm = { version = "0.31", default-features = false } From af9427b41a6e8f1c856b327dc8da44184e2f0a3f Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 7 Jan 2019 12:50:15 +0100 Subject: [PATCH 069/108] Format todo comments --- srml/contract/src/exec.rs | 15 ++++++++------- srml/contract/src/tests.rs | 7 ++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index ad0e1ce915f8d..8e4f8bce27eba 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -656,6 +656,14 @@ mod tests { } } + // TODO: Tests to add: + // - Won't create an account with value below exsistential deposit. + // - Verify that instantiate properly creates a contract. + // - Instantiate accounts in a proper way (i.e. via `instantiate`) + // - Verify sanity of initial setup. I.e. no active account should have a zero balance. + // - test events acruing in success and failure cases. + // - test instantiation yields an instantiation event. + #[test] fn it_works() { let origin = 0; @@ -687,13 +695,6 @@ mod tests { assert_eq!(&*test_data.borrow(), &vec![0, 1]); } - // TODO: Won't create an account with value below exsistential deposit. - // TODO: Verify that instantiate properly creates a contract. - // TODO: Instantiate accounts in a proper way (i.e. via `instantiate`) - // TODO: Verify sanity of initial setup. I.e. no active account should have a zero balance. - // TODO: test events acruing in success and failure cases. - // TODO: test instantiation yields an instantiation event. - #[test] fn base_fees() { let origin = ALICE; diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index b7c090708e9a9..a65d34341bb07 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -221,6 +221,7 @@ fn account_removal_removes_storage() { ); } -// TODO: Block gas limit -// TODO: top_level_call_refunds_even_if_fails -// TODO: test finalization of a tx. +// TODO: Tests to add +// - Block gas limit +// - top_level_call_refunds_even_if_fails +// - test commit/discard of a tx. From 89932cd4c895e0672669804b17dd5af53ed21d42 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 7 Jan 2019 12:51:05 +0100 Subject: [PATCH 070/108] Fix formatting --- srml/contract/src/wasm/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 776fc7133b38f..67f31bdfe344d 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -113,10 +113,10 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { sandbox::Memory::new(exec.prefab_module.initial, Some(exec.prefab_module.maximum)) .unwrap_or_else(|_| { panic!( - "exec.prefab_module.initial can't be greater than exec.prefab_module.maximum; - thus Memory::new must not fail; - qed" - ) + "exec.prefab_module.initial can't be greater than exec.prefab_module.maximum; + thus Memory::new must not fail; + qed" + ) }); let mut imports = sandbox::EnvironmentDefinitionBuilder::new(); From 9265e73b9393d89b3b4655550b4918448b398d36 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 7 Jan 2019 13:02:47 +0100 Subject: [PATCH 071/108] Comments --- srml/contract/src/gas.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index b8c90da77c720..51e09ff840d98 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -67,6 +67,7 @@ pub trait Token: Copy + Clone + TestAuxiliaries { fn calculate_amount(&self, metadata: &Self::Metadata) -> Option; } +/// A wrapper around a type-erased trait object of what used to be a `Token`. #[cfg(test)] pub struct ErasedToken { pub description: String, @@ -110,9 +111,9 @@ impl GasMeter { metadata: &Tok::Metadata, token: Tok, ) -> GasMeterResult { - // Unconditionally add the token. #[cfg(test)] { + // Unconditionally add the token to the storage. let erased_tok = ErasedToken { description: format!("{:?}", token), token: Box::new(token), @@ -247,6 +248,8 @@ pub fn refund_unused_gas(transactor: &T::AccountId, gas_meter: GasMete >::increase_total_stake_by(refund); } +/// A simple utility macro that helps to match against a +/// list of tokens. #[macro_export] macro_rules! match_tokens { ($tokens_iter:ident,) => { @@ -255,6 +258,18 @@ macro_rules! match_tokens { { let next = ($tokens_iter).next().unwrap(); let pattern = $x; + + // Note that we don't specify the type name directly in this macro, + // we only have some expression $x of some type. At the same time, we + // have an iterator of Box and to downcast we need to specify + // the type which we want downcast to. + // + // So what we do is we assign `_pattern_typed_next_ref` to the a variable which has + // the required type. + // + // Then we make `_pattern_typed_next_ref = token.downcast_ref()`. This makes + // rustc infer the type `T` (in `downcast_ref`) to be the same as in $x. + let mut _pattern_typed_next_ref = &pattern; _pattern_typed_next_ref = match next.token.downcast_ref() { Some(p) => { From 56e996971009b1777ad6a8be0fd0e2d5227f5870 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 7 Jan 2019 13:53:22 +0100 Subject: [PATCH 072/108] EmptyOutputBuf and OutputBuf split. --- srml/contract/src/exec.rs | 92 +++++++++++++++++-------------- srml/contract/src/lib.rs | 2 +- srml/contract/src/tests.rs | 11 ++-- srml/contract/src/wasm/mod.rs | 12 ++-- srml/contract/src/wasm/runtime.rs | 22 ++++---- 5 files changed, 75 insertions(+), 64 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 8e4f8bce27eba..b995627965718 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -69,7 +69,7 @@ pub trait Ext { value: BalanceOf, gas_meter: &mut GasMeter, data: &[u8], - output_buf: OutputBuf, + empty_output_buf: EmptyOutputBuf, ) -> Result; /// Returns a reference to the account id of the caller. @@ -89,35 +89,43 @@ pub trait Loader { fn load_main(&self, code_hash: &CodeHash) -> Result; } -#[must_use] -pub struct OutputBuf(Vec); +/// An `EmptyOutputBuf` is used as an optimization for reusing empty vectors when +/// available. +/// +/// You can create this structure from a spare vector if you have any and then +/// you can fill it (only once), converting it to `OutputBuf`. +pub struct EmptyOutputBuf(Vec); -impl OutputBuf { +impl EmptyOutputBuf { /// Create an output buffer from a spare vector which is not longer needed. /// /// All contents are discarded, but capacity is preserved. pub fn from_spare_vec(mut v: Vec) -> Self { v.clear(); - OutputBuf(v) + EmptyOutputBuf(v) } /// Create an output buffer ready for receiving a result. /// /// Use this function to create output buffer if you don't have a spare /// vector. Otherwise, use `from_spare_vec`. - pub fn empty() -> Self { - OutputBuf(Vec::new()) + pub fn new() -> Self { + EmptyOutputBuf(Vec::new()) } - /// Attempt to write to the buffer result of the specified size. + /// Write to the buffer result of the specified size. /// /// Calls closure with the buffer of the requested size. - pub fn write R>(&mut self, size: usize, f: F) -> R { + pub fn fill Result<(), E>>(mut self, size: usize, f: F) -> Result { + assert!(self.0.len() == 0, "the vector is always cleared; it's written only once"); self.0.resize(size, 0); - f(&mut self.0) + f(&mut self.0).map(|()| OutputBuf(self.0)) } } +/// `OutputBuf` is the end result of filling an `EmptyOutputBuf`. +pub struct OutputBuf(Vec); + #[must_use] pub enum VmExecResult { Ok, @@ -160,7 +168,7 @@ pub trait Vm { exec: &Self::Executable, ext: &mut E, input_data: &[u8], - output_buf: OutputBuf, + empty_output_buf: EmptyOutputBuf, gas_meter: &mut GasMeter, ) -> VmExecResult; } @@ -236,7 +244,7 @@ where value: T::Balance, gas_meter: &mut GasMeter, input_data: &[u8], - output_buf: OutputBuf, + empty_output_buf: EmptyOutputBuf, ) -> Result { if self.depth == self.config.max_depth as usize { return Err("reached maximum depth, cannot make a call"); @@ -278,7 +286,7 @@ where caller: self.self_account.clone(), }, input_data, - output_buf, + empty_output_buf, gas_meter, ) .into_result()?; @@ -347,7 +355,7 @@ where caller: self.self_account.clone(), }, input_data, - OutputBuf::empty(), + EmptyOutputBuf::new(), gas_meter, ) .into_result()?; @@ -525,10 +533,10 @@ where value: T::Balance, gas_meter: &mut GasMeter, data: &[u8], - output_buf: OutputBuf, + empty_output_buf: EmptyOutputBuf, ) -> Result { self.ctx - .call(to.clone(), value, gas_meter, data, output_buf) + .call(to.clone(), value, gas_meter, data, empty_output_buf) } fn address(&self) -> &T::AccountId { @@ -553,7 +561,7 @@ where #[cfg(test)] mod tests { use super::{ - ExecFeeToken, ExecutionContext, Ext, Loader, OutputBuf, TransferFeeKind, TransferFeeToken, + ExecFeeToken, ExecutionContext, Ext, Loader, EmptyOutputBuf, TransferFeeKind, TransferFeeToken, Vm, VmExecResult, }; use account_db::AccountDb; @@ -573,7 +581,7 @@ mod tests { struct MockCtx<'a> { ext: &'a mut dyn Ext, input_data: &'a [u8], - output_data: OutputBuf, + empty_output_buf: Option, gas_meter: &'a mut GasMeter, } @@ -644,13 +652,13 @@ mod tests { exec: &MockExecutable, ext: &mut E, input_data: &[u8], - output_data: OutputBuf, + empty_output_buf: EmptyOutputBuf, gas_meter: &mut GasMeter, ) -> VmExecResult { (exec.0)(MockCtx { ext, input_data, - output_data, + empty_output_buf: Some(empty_output_buf), gas_meter, }) } @@ -687,7 +695,7 @@ mod tests { let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); ctx.overlay.set_code(&1, Some(exec_ch)); - let result = ctx.call(dest, value, &mut gas_meter, &data, OutputBuf::empty()); + let result = ctx.call(dest, value, &mut gas_meter, &data, EmptyOutputBuf::new()); assert_matches!(result, Ok(_)); }); @@ -711,7 +719,7 @@ mod tests { let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.call(dest, 0, &mut gas_meter, &[], OutputBuf::empty()); + let result = ctx.call(dest, 0, &mut gas_meter, &[], EmptyOutputBuf::new()); assert_matches!(result, Ok(_)); let mut toks = gas_meter.tokens().iter(); @@ -760,7 +768,7 @@ mod tests { 55, &mut GasMeter::::with_limit(1000, 1), &[], - OutputBuf::empty(), + EmptyOutputBuf::new(), ); assert_matches!(result, Ok(_)); assert_eq!(ctx.overlay.get_balance(&origin), 45); @@ -788,7 +796,7 @@ mod tests { let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.call(dest, 50, &mut gas_meter, &[], OutputBuf::empty()); + let result = ctx.call(dest, 50, &mut gas_meter, &[], EmptyOutputBuf::new()); assert_matches!(result, Ok(_)); let mut toks = gas_meter.tokens().iter(); @@ -817,7 +825,7 @@ mod tests { let mut gas_meter = GasMeter::::with_limit(1000, 1); - let result = ctx.call(dest, 50, &mut gas_meter, &[], OutputBuf::empty()); + let result = ctx.call(dest, 50, &mut gas_meter, &[], EmptyOutputBuf::new()); assert_matches!(result, Ok(_)); let mut toks = gas_meter.tokens().iter(); @@ -885,7 +893,7 @@ mod tests { 100, &mut GasMeter::::with_limit(1000, 1), &[], - OutputBuf::empty(), + EmptyOutputBuf::new(), ); assert_matches!(result, Err("balance too low to send value")); @@ -903,12 +911,16 @@ mod tests { let vm = MockVm::new(); let mut loader = MockLoader::empty(); - let return_ch = loader.insert(|_| { - let mut output_buf = OutputBuf::empty(); - output_buf.write(4, |data| { - data.copy_from_slice(&[1, 2, 3, 4]); - }); - + let return_ch = loader.insert(|mut ctx| { + #[derive(Debug)] + enum Void {} + let empty_output_buf = ctx.empty_output_buf.take().unwrap(); + let output_buf = + empty_output_buf.fill::(4, |data| { + data.copy_from_slice(&[1, 2, 3, 4]); + Ok(()) + }) + .expect("Ok is always returned"); VmExecResult::Returned(output_buf) }); @@ -922,7 +934,7 @@ mod tests { 0, &mut GasMeter::::with_limit(1000, 1), &[], - OutputBuf::empty(), + EmptyOutputBuf::new(), ); let output_data = result.unwrap().output_data; @@ -950,7 +962,7 @@ mod tests { 0, &mut GasMeter::::with_limit(10000, 1), &[1, 2, 3, 4], - OutputBuf::empty(), + EmptyOutputBuf::new(), ); assert_matches!(result, Ok(_)); }); @@ -983,7 +995,7 @@ mod tests { // Try to call into yourself. let r = ctx .ext - .call(&BOB, 0, ctx.gas_meter, &[], OutputBuf::empty()); + .call(&BOB, 0, ctx.gas_meter, &[], EmptyOutputBuf::new()); let mut reached_bottom = reached_bottom.borrow_mut(); if !*reached_bottom { @@ -1009,7 +1021,7 @@ mod tests { value, &mut GasMeter::::with_limit(100000, 1), &[], - OutputBuf::empty(), + EmptyOutputBuf::new(), ); assert_matches!(result, Ok(_)); @@ -1034,7 +1046,7 @@ mod tests { // Call into CHARLIE contract. assert_matches!( ctx.ext - .call(&CHARLIE, 0, ctx.gas_meter, &[], OutputBuf::empty()), + .call(&CHARLIE, 0, ctx.gas_meter, &[], EmptyOutputBuf::new()), Ok(_) ); VmExecResult::Ok @@ -1057,7 +1069,7 @@ mod tests { 0, &mut GasMeter::::with_limit(10000, 1), &[], - OutputBuf::empty(), + EmptyOutputBuf::new(), ); assert_matches!(result, Ok(_)); @@ -1079,7 +1091,7 @@ mod tests { // Call into charlie contract. assert_matches!( ctx.ext - .call(&CHARLIE, 0, ctx.gas_meter, &[], OutputBuf::empty()), + .call(&CHARLIE, 0, ctx.gas_meter, &[], EmptyOutputBuf::new()), Ok(_) ); VmExecResult::Ok @@ -1100,7 +1112,7 @@ mod tests { 0, &mut GasMeter::::with_limit(10000, 1), &[], - OutputBuf::empty(), + EmptyOutputBuf::new(), ); assert_matches!(result, Ok(_)); diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 2aa8a869305f0..512fa60f92060 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -210,7 +210,7 @@ decl_module! { let loader = ::wasm::WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); - let result = ctx.call(dest, value, &mut gas_meter, &data, exec::OutputBuf::empty()); + let result = ctx.call(dest, value, &mut gas_meter, &data, exec::EmptyOutputBuf::new()); if let Ok(_) = result { // Commit all changes that made it thus far into the persistant storage. diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index a65d34341bb07..cba75a4991ade 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -14,7 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// TODO: Remove +// TODO: Tests to add +// - Block gas limit +// - top_level_call_refunds_even_if_fails +// - test commit/discard of a tx. + #![allow(unused)] use double_map::StorageDoubleMap; @@ -220,8 +224,3 @@ fn account_removal_removes_storage() { }, ); } - -// TODO: Tests to add -// - Block gas limit -// - top_level_call_refunds_even_if_fails -// - test commit/discard of a tx. diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 67f31bdfe344d..157db73402517 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -18,7 +18,7 @@ //! represented in wasm. use codec::Compact; -use exec::{Ext, OutputBuf, VmExecResult}; +use exec::{Ext, EmptyOutputBuf, VmExecResult}; use gas::GasMeter; use rstd::prelude::*; use sandbox; @@ -106,7 +106,7 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { exec: &WasmExecutable, ext: &mut E, input_data: &[u8], - output_buf: OutputBuf, + empty_output_buf: EmptyOutputBuf, gas_meter: &mut GasMeter, ) -> VmExecResult { let memory = @@ -128,7 +128,7 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { let mut runtime = Runtime::new( ext, input_data, - output_buf, + empty_output_buf, &self.schedule, memory, gas_meter, @@ -165,7 +165,7 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { #[cfg(test)] mod tests { use super::*; - use exec::{CallReceipt, Ext, InstantiateReceipt, OutputBuf}; + use exec::{CallReceipt, Ext, InstantiateReceipt, EmptyOutputBuf}; use gas::GasMeter; use std::collections::HashMap; use tests::Test; @@ -227,7 +227,7 @@ mod tests { value: u64, gas_meter: &mut GasMeter, data: &[u8], - _output_data: OutputBuf, + _output_data: EmptyOutputBuf, ) -> Result { self.transfers.push(TransferEntry { to: *to, @@ -273,7 +273,7 @@ mod tests { let vm = WasmVm::new(&cfg); *output_data = vm - .execute(&exec, ext, input_data, OutputBuf::empty(), gas_meter) + .execute(&exec, ext, input_data, EmptyOutputBuf::new(), gas_meter) .into_result()?; Ok(()) diff --git a/srml/contract/src/wasm/runtime.rs b/srml/contract/src/wasm/runtime.rs index ef7a93a36e882..231c6f5ab3283 100644 --- a/srml/contract/src/wasm/runtime.rs +++ b/srml/contract/src/wasm/runtime.rs @@ -17,7 +17,7 @@ //! Environment definition of the wasm smart-contract runtime. use super::{Schedule}; -use exec::{Ext, BalanceOf, VmExecResult, OutputBuf, CallReceipt, InstantiateReceipt}; +use exec::{Ext, BalanceOf, VmExecResult, OutputBuf, EmptyOutputBuf, CallReceipt, InstantiateReceipt}; use rstd::prelude::*; use rstd::mem; use codec::{Decode, Encode}; @@ -42,7 +42,7 @@ pub(crate) struct Runtime<'a, 'data, E: Ext + 'a> { input_data: &'data [u8], // A VM can return a result only once and only by value. So // we wrap output buffer to make it possible to take the buffer out. - output_buf: Option, + empty_output_buf: Option, scratch_buf: Vec, schedule: &'a Schedule<::Gas>, memory: sandbox::Memory, @@ -53,7 +53,7 @@ impl<'a, 'data, E: Ext + 'a> Runtime<'a, 'data, E> { pub(crate) fn new( ext: &'a mut E, input_data: &'data [u8], - output_buf: OutputBuf, + empty_output_buf: EmptyOutputBuf, schedule: &'a Schedule<::Gas>, memory: sandbox::Memory, gas_meter: &'a mut GasMeter, @@ -61,7 +61,7 @@ impl<'a, 'data, E: Ext + 'a> Runtime<'a, 'data, E> { Runtime { ext, input_data, - output_buf: Some(output_buf), + empty_output_buf: Some(empty_output_buf), scratch_buf: Vec::new(), schedule, memory, @@ -285,9 +285,9 @@ define_env!(Env, , let input_data = read_sandbox_memory(ctx, input_data_ptr, input_data_len)?; // Grab the scratch buffer and put in its' place an empty one. - // We will use it for creating `OutputBuf` container for the call. + // We will use it for creating `EmptyOutputBuf` container for the call. let scratch_buf = mem::replace(&mut ctx.scratch_buf, Vec::new()); - let output_buf = OutputBuf::from_spare_vec(scratch_buf); + let empty_output_buf = EmptyOutputBuf::from_spare_vec(scratch_buf); let nested_gas_limit = if gas == 0 { ctx.gas_meter.gas_left() @@ -297,7 +297,7 @@ define_env!(Env, , let ext = &mut ctx.ext; let call_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { match nested_meter { - Some(nested_meter) => ext.call(&callee, value, nested_meter, &input_data, output_buf).map_err(|_| ()), + Some(nested_meter) => ext.call(&callee, value, nested_meter, &input_data, empty_output_buf).map_err(|_| ()), // there is not enough gas to allocate for the nested call. None => Err(()), } @@ -390,16 +390,16 @@ define_env!(Env, , GasMeterResult::OutOfGas => return Err(sandbox::HostError), } - let mut output_buf = ctx - .output_buf + let empty_output_buf = ctx + .empty_output_buf .take() .expect( - "`output_buf` is taken only here; + "`empty_output_buf` is taken only here; `ext_return` traps; `Runtime` can only be used only for one execution; qed" ); - output_buf.write( + let output_buf = empty_output_buf.fill( data_len as usize, |slice_mut| { // Read the memory at the specified pointer to the provided slice. From 755fccd94a2c8bfa873b72e2d21b2ff5323fb606 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 7 Jan 2019 14:09:20 +0100 Subject: [PATCH 073/108] Restore code_hash --- srml/contract/src/wasm/mod.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 157db73402517..00d4dff108455 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -165,9 +165,10 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { #[cfg(test)] mod tests { use super::*; + use std::collections::HashMap; + use substrate_primitives::H256; use exec::{CallReceipt, Ext, InstantiateReceipt, EmptyOutputBuf}; use gas::GasMeter; - use std::collections::HashMap; use tests::Test; use wabt; use wasm::prepare::prepare_contract; @@ -175,7 +176,7 @@ mod tests { #[derive(Debug, PartialEq, Eq)] struct CreateEntry { - // TODO: code_hash: H256, + code_hash: H256, endowment: u64, data: Vec, gas_left: u64, @@ -205,13 +206,13 @@ mod tests { } fn instantiate( &mut self, - _code_hash: &CodeHash, + code_hash: &CodeHash, endowment: u64, gas_meter: &mut GasMeter, data: &[u8], ) -> Result, &'static str> { self.creates.push(CreateEntry { - // code_hash: code_hash.clone(), + code_hash: code_hash.clone(), endowment, data: data.to_vec(), gas_left: gas_meter.gas_left(), @@ -390,7 +391,7 @@ mod tests { assert_eq!( &mock_ext.creates, &[CreateEntry { - // code: vec![0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00], + code_hash: [0x11; 32].into(), endowment: 3, data: vec![1, 2, 3, 4], gas_left: 49946, From d3693dfe7badb8f3283d9be449565978b604e33b Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 7 Jan 2019 14:34:13 +0100 Subject: [PATCH 074/108] Fix node-executor. --- core/test-runtime/wasm/Cargo.lock | 2 + .../substrate_test_runtime.compact.wasm | Bin 43804 -> 42298 bytes node/executor/src/lib.rs | 70 +++++------------- node/runtime/wasm/Cargo.lock | 8 +- .../release/node_runtime.compact.wasm | Bin 841783 -> 817465 bytes 5 files changed, 26 insertions(+), 54 deletions(-) diff --git a/core/test-runtime/wasm/Cargo.lock b/core/test-runtime/wasm/Cargo.lock index 8791d2c1ff974..8721c4d21b369 100644 --- a/core/test-runtime/wasm/Cargo.lock +++ b/core/test-runtime/wasm/Cargo.lock @@ -1112,8 +1112,10 @@ version = "0.1.0" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "sr-version 0.1.0", "substrate-primitives 0.1.0", diff --git a/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 440d0288d7fb526d5efdb5c36574dda232b197d6..7e6b5141bd8be404df820560d38ac53f442d7506 100644 GIT binary patch delta 13971 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 delta 15685 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 V String { - use std::fmt::Write; - let mut result = String::new(); - for b in bytes { - write!(result, "\\{:02x}", b).unwrap(); - } - result - } - - /// Create a constructor for the specified code. - /// - /// When constructor is executed, it will call `ext_return` with code that - /// specified in `child_bytecode`. - fn code_ctor(child_bytecode: &[u8]) -> String { - format!( - r#" - (module - ;; ext_return(data_ptr: u32, data_len: u32) -> ! - (import "env" "ext_return" (func $ext_return (param i32 i32))) - (import "env" "memory" (memory 1 1)) - (func (export "call") - (call $ext_return - (i32.const 4) - (i32.const {code_len}) - ) - ;; ext_return is diverging, i.e. doesn't return. - unreachable - ) - (data (i32.const 4) "{escaped_bytecode}") - ) - "#, - escaped_bytecode = escaped_bytestring(child_bytecode), - code_len = child_bytecode.len(), - ) - } - #[test] fn deploying_wasm_contract_should_work() { let mut t = new_test_ext(false); - let code_transfer = wabt::wat2wasm(CODE_TRANSFER).unwrap(); - let code_ctor_transfer = wabt::wat2wasm(&code_ctor(&code_transfer)).unwrap(); + let transfer_code = wabt::wat2wasm(CODE_TRANSFER).unwrap(); + let transfer_ch = ::Hashing::hash(&transfer_code); let addr = ::DetermineContractAddress::contract_address_for( - &code_ctor_transfer, + &transfer_ch, &[], &charlie(), ); @@ -659,7 +621,7 @@ mod tests { let b = construct_block( 1, GENESIS_HASH.into(), - hex!("bfc8051f91071149cca8b8dca6290fdb82eda6868d48cfed25f8ca38ed3a1049").into(), + hex!("a586a9c29074c5265586332b966820ff42d647cc0192994f9ac8e4e9030bdda1").into(), vec![], vec![ CheckedExtrinsic { @@ -669,11 +631,17 @@ mod tests { CheckedExtrinsic { signed: Some((charlie(), 0)), function: Call::Contract( - contract::Call::create::(10.into(), 10_000.into(), code_ctor_transfer, Vec::new()) + contract::Call::put_code::(10_000.into(), transfer_code) ), }, CheckedExtrinsic { signed: Some((charlie(), 1)), + function: Call::Contract( + contract::Call::create::(10.into(), 10_000.into(), transfer_ch, Vec::new()) + ), + }, + CheckedExtrinsic { + signed: Some((charlie(), 2)), function: Call::Contract( contract::Call::call::(addr, 10.into(), 10_000.into(), vec![0x00, 0x01, 0x02, 0x03]) ), @@ -685,7 +653,7 @@ mod tests { runtime_io::with_externalities(&mut t, || { // Verify that the contract constructor worked well and code of TRANSFER contract is actually deployed. - assert_eq!(&contract::CodeHashOf::::get(addr), &code_transfer); + assert_eq!(&contract::CodeHashOf::::get(addr).unwrap(), &transfer_ch); }); } diff --git a/node/runtime/wasm/Cargo.lock b/node/runtime/wasm/Cargo.lock index 0a44e0b021648..573d9b4158c25 100644 --- a/node/runtime/wasm/Cargo.lock +++ b/node/runtime/wasm/Cargo.lock @@ -737,7 +737,7 @@ dependencies = [ [[package]] name = "pwasm-utils" -version = "0.3.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1147,7 +1147,7 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", - "pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "pwasm-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.81 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", @@ -1472,8 +1472,10 @@ version = "0.1.0" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "sr-version 0.1.0", "substrate-primitives 0.1.0", @@ -2036,7 +2038,7 @@ dependencies = [ "checksum proc-macro-hack 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2c725b36c99df7af7bf9324e9c999b9e37d92c8f8caf106d82e1d7953218d2d8" "checksum proc-macro-hack-impl 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2b753ad9ed99dd8efeaa7d2fb8453c8f6bc3e54b97966d35f1bc77ca6865254a" "checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09" -"checksum pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "efd695333cfae6e9dbe2703a6d040e252b57a6fc3b9a65c712615ac042b2e0c5" +"checksum pwasm-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e9135bed7b452e20dbb395a2d519abaf0c46d60e7ecc02daeeab447d29bada1" "checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c" "checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c" diff --git a/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index fcb764ca1fb11099241f950674dc7e4ec262457b..537392acd1ef67fa2c88b484fa8905da9a3309f2 100644 GIT binary patch literal 817465 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 S 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 z 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μHh_}){lY=0<$Jv$7`j2 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ᯝ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
    ~_|(y!{@Q|*0Yr4#mJSTA{` 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 Jh}(O}e*yOR$T|Q3 literal 841783 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

    RW;w!ttbyK5mk)?EkpqJ7H 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 eymSC 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

    SXMG(z7c}WwErEb&C4X> zi&*x*^MWR*ot;NSU+kgGyKn{z!FCv-*45-A3E6Vl#*#=_i=9jlusHH?yLa;YzxJK{ zAL)TS_akJhP0!6-XIq76D_P?W-AvPqkVw)A4#E0fV**bVhWr#m?rTIJVz^F!f~rJ_ z5r!8Clu3wY4p`u!?%xH(+~j2Gs~|cAbsDRyLF8rImnFmjj=2u37FH5l%^a8V5Ss8; zqH#1DP`?=+XccRmKrxUqvho0AE*l-dx1=b$3?M4{a2d!@RKg&J7LEi9hXlK^xzM)! zI2WxV18oI})JfW*%4{yEE}x6Cc3Hu)P$wd8?LWX#pv=VU1{+T=&ArP7mhSgzDR*q+ zc1RN4osf7{`6#I7$-<02$&6mkI#O0$9}p62(k}spQ2S+TkKR~YbZvpL&T~Yccb?`( zR}t8>v+7DTBD7%D(Qu$@3<8`PLWiWU2#{=#Ve?vC2PKaR!6lEfB9aCt=V!1Q=W&uK zgRp6#+@;KLz@$YNF}2zue2hwqtD_O>wj?UJ%J>2ryQNM^0JeQg0e^Ep4k=p?cJCLO zyC>_?{5Zn;;KyO*h{h|OstF$WlKLVONWFH_riZzhjp0~D@_Tl^FxBVnO^kX$wRPE# z*s@c7G^+XJ%L(V^u0tSX#absMLeSG5rD=9cQPsIZRp+Sch`#xJG61I$2$`h`h7~5H)`sb^I}(F>n|fezT7*061$BhM5D|A>{DNO(1SlAuwN> zo@yQ9Wb`-+Q*%EgW102lpDIl5Q<~hj+2B@~+?Klh&8qylf>ZlBi;`k|pDDB80NKK` zXXCR^DRPbF!JdgK0H5@3RYpjV%V37ih|=uk=U`Jh2xiw6Lko-w({+sLVhZPz<2p{6 z*_dX#UEQ&I43>skU`WB_Bf`B3ipuhC~)y0`tjN^7q(@*>*B~-d=Pv zd|uE4+=zN3R*PBqaHy9s!klVf(ChLuSI&>U&bI7!Te|^A#RIaQXkqn`6gCbVLY50+ zNeoFLmf9DB+@6c9_+FW zvD#g)9bgX7_{LgG=3}Bc7|h20`pSMlia;Nw zftwF>LALqiHn;$m*|#M7ll>{Y0a>DF{-B+tH`R|3}0f$XUl{nE1XN)hmh|#q}&uc)HW>Pb#;jCc4Y{gYH#oM!ain&6Ss7(dI=vJ zey_Ac#p_LEGJ@(}Ddx99KC~1XAJ%A6j$x~M-Z_TDrnh@csK1g#B0CT```*6gqD!@M{DYgy*d0O zyqdR#f@F2awlDSfZ0KA3ZWa<35QG!UXUQlA`!%LgQ!}`p6Yb39v=i*t!B)-TS0qLj z6>Zp8zJ|-joR~T}F|~7I3W~@GF$GeCUl^A#VwxT^%xKjcGjFT&f%>Ey1}hEgLU1+h z&duepX78g&JQ#nrV|UMc6{^_^1Mo8X7y8m97m1g_#mrn(DVU4sGZgq(+Bv=S)vtcF z@!qB8V`-K9@_UaPdmCDVs;8x;K87(La;?I*kkCfT$mGI~ztJTceeqzIjW9VIlg6h5 zHFaSgs(?U=ytyzk_bABIa3uu{aMmXP9u|hc00TFJhXroN5W=7tV36YWbPKmdbo70fmY1`R!e!F@6p1cS_+fRtrBHmxoR4B$YH4@R0y zcmWJyf&qgaylUR0fZrov7@7ozU>G$H)PXH+itJVegY`r*Bi3EeIjrn`*#hJt(f7dt z#o~VuoOh2|IqkBzi3Unb?<4Lel>yYfV>z)6sbkcxx(sKAFWO2-yCpwJCPY*iT7cYP z#7wuL#RV~1`Pn4SF-I)Ck0a>-i}~aU{DBhbDCbEo(y{I$u`Czq%-3%cripZJowvdc zLMQ&V7IIm%)SHay#(F+c#wRi%SaLTBcyIx0PDg?q*6DNdnXE^|{=jd&@Mkr_6YyO!oG&nCi>x4li&hS{VjR zad{p(!8~n_7uIv7U^nSt98jJUlgW`cQ4jkQ2|GB!XK>4o z`2f?vGtf{I4$nd8)F(K!F%4J1a-~vMVjwcxVaG#dm6gCWSM+j~KB|ljIIBQRQExN* zYUu%e_Q27!_8>j5p33ssP=}k@F^;-7!Ly#F2>2v0q4Zlhu23s0o-C!pV(%QPhmuQ6 z?^AF^=u#_oiEPypakYDn!z(BCOWStKI$|b=0DUsvUhGrrK}H%nBg@K49ip_@A)`b~ zn#S;)-Lm+w>S(TPdUBQnu$id3HeO+YDcQymGWG=10eFOJ_>%FcH;zZtB_skTFp?k> z*e0pS{or)iQOqr6tWcT3k>WK+!>$phsV`xUT14%kQJ3*ZW63tD!w;r{om@2WH5!Zc zh-TFzUz*Jsc+s(tlEg)1gj=?UWse3O0~J5~7K->Q+<58Ur0j`edbl>WBTkUO9|1*{ zGfgm-MOo4IR+{|4jj58JHlICPEmy=<&cjt|e5YNM(h^0=3+%z>O)D}=_Z_gYNE4%K z!&}Uf?s`S0B&@!xTT+p$aPsb<2+})Yx{L!Dxu9XJcs1dfnhssC?y7Ya(|qX0NHJZo z;xIVgPDx$S+Y5C;uzQlX`{iw1i1T_YFE8o~N!m4Sk?1{>#O|gwj&x8KIO)4hgbJHuZ}h}p;le*dVL5(!lN>uz;HEgNME678Z(Njd`G|@a|w)~ zrWiBrsRxtA>3G6-)QCGMg&n4iUV?X+W%?j7Dk`~Cu_{7(?r$e2AD+s9=zO!=GMEEL zYu>BL%BocDNC9Tsj@i_(zUR7hVT+=z!l2cNUdRW&T`@%YFj%7^HE1fbQkl~P+eyHr zPglwf+qwuQ83tjXb7 zI~8T4VTp3kagj%k7j9Dy`Q31EE;q9(a9QjFe%}Wj(w-2qW!SIFVv4WLzhx;1h|hjg ze?z~8cE#U7AZCiO{H5$j2jBhdDE8W##gB}?w(SGxL4ORP#2tvjn2idpBwOSqjJajH z5c9PAw(|G|Myk@%8HID#_lkx13Q#r`$-AnKQMd97P;+YZZNH%*8;w(iio^(d9NCrZ zhh%fhNJG=7JS@)M$q}LH&ldgq!_}nbEM?IqG!lxg*;GD8mP2KaSSbDBnaqdE{pajH z+r?YRdzRoQj7uvPFb!Z~kacM$k=xK$R$TpdwQ%oAvk&rXU<=Ir2;$40N%yQwYOtRlaHQ3i3YAwTj@KtPQeN>+FW89YtPxwBK-))4K*=ZBp!gIZ^goiAf~HfKN((B)X6eQVlPtnojoU z>y;d%j{3m}+PnZ7T839dF~l@JOO77SUaV6E3y=wF?4F=Ug4%?zkA<_#ozW17+Mz(R*1t`uA0iRE1r>laEztc5XXwLO5+v&=hSDQ-?uJo06a=7wNwR>+WwLd&vYeHl* zK-Gl%bIl;!rzJW=UrO1d!UhTR3V|j2pg_s9J_wh61yRvfCdooLidZU4(jbe&p5)8C z0hn;pU?DzV7BIsiEP<447ySu9%b;IWlFd*JNq9}NQZ5mzfP4tI>vIH5J1p=~EFQ8A zoF{cd^+8MBT==CYPIP3!%*8Y|>L)N&$yw?#SwF1}tHT)MSf^L)FMTbiWe_AzodY3M z#)7i8e$$u7K^;#QoR21!Dqo9r8rTa77=1n*^#SmSC+Pr4AMb!g(MKhAg9M@(0TO6} zX4|qKIxEaa&J)uIjnIX6-gy>U7B=`!cgC#VUbQz?xx>Qo_n&@AV zTJX5kT=kWnT#1a~tGyS|gR4BLgiW8`qGd=TzNNNr-dlOxiAnpzkn~>o#b-+5c~Udf z&ealWU#$CTP(kmzT2#2NEG^gOS<*ll^LgJ+p-=r87DG_M1PP!=O2YbJUi@$Yeh4Y{ z%ltnfQZ^pCkg~~Eprxyb8`fXvk=S}9V=*D3T&AcA9vhE@DH(IT8s>=DJg>`*+hEPND&|-!YURCWREjlZ%((miPrG|1=Hx_ zGPmV|p$nBa%S1LQ;F!>5Kaju-`t}3C#wLs(IfoP2;7(Vimy71=={8+9rrVv)G==kr z(<}6gqqcO}ln!*+oc49OGEH^CGN5VoS#fywe!!Fy;4wkUC3t6Rsr+?Jb4^Q@L{Qx- zj>j5C3g%Xg+uWrD4wm?)mL02jp51}075qM45t8U$=Mbf3Z@-p3UODU?vsbKh84JB| z$&}j&wn1Qcm-%QCjm;SK6@gI;HPS28z!jQMWWRnBRBGzzA;SX0!OH?$65F)TK`iI< zW$}6b7@udafMc}-scU>3I8lF@N)du1Lq3rh@>i_Y!4>ZDWIk5>p2bv5RPa`s7chn_ zT7bn{2^jN`&jvUgXH%>IhH9LCi_;4h6MdwNl3W;7u@-WSf*MX82EX3p@K3XaB718# zo~S?>48-{($Tmb}F-$t9{62w4L{xrSb)K`wwiM^Rej2PeCuz4)1X?2k4bvWEDt5=m z-mTsbh7KuA1~gQdjPwF-^|Du^pVBV;6aE4RM&jdOH4e*h?|YN9uXob}Y4t%}{Ttrq zo8Dm-5C0a3G9)b@;InqGeNBcxTh~o55@4E2U zbjF5PUkV|@AG)p>8(Sg7*x1e@Zl@&w&flso{3%~0;v>QzBBdloDc^y=*+yE-e_1O2 z-N+si3M(LhA3ivwdjvXlKv5Wwu!KiS%yI$uWMal-!X7dqd==W2=q~I;bk{{XoLHV{ zUZA5l{BkkS1aZJ7Fn_XEo-jKvDS*iMYoHz#21y)*t4hp}KT@S&MP3F17xZc`gPj)C zY8DCm;)Ds;nsCmdUABbD&gV-Qz(_KgE|Cwlgat9tEFV<>o-JF!B!`%ng5gUfv4)t& zT0Xt4?BpYTu{F3%znRZ-%NH~2H83{p&jtSR#jKs(BcZ1#=`$S@LL*zuu$)NJS3{KI9%ZYisw*iZf3%=g9OH=0|EXv%>Jqa{zEP+OiPwk z&3=7~Uvb4^{t>_=;8~)+9bAxe=eeLIZRbIwq|We#^CTg(=GQT zPjS_g6Z#E%wBE5^S(;9M-JE}if!{w>->6}~U+9Crr}6MOZ@)%x4t!bF!cT;&Y~e*$ z@C8rEm2!{{oTA7p$lK+)g~TGj8|N2)+9<{FSYLB5S;3FtJ7M=BQP|9=%^`Eo~f0n|F&hq~OFv+R%B7p@S3X z3+fwb1auxFJuBnNvID{!Iz}B2nR?do7$h=7qEu6Zgtn%INLA4F;ZZdt`1+tb`o!e4 zP+N`Kik}&>TT~q2?DQ+%U7BkiQGbJ~I+#$umGKhMY(h3UHhkl36LevZ!a+I@ZQr3% zb-w1Xf;rP59oGQ7^Ayl|>nI1IgCa&5gLf>TBRK+4s(#7}D5g($0XkSicUsI4$(^mcn!ci~;dA-gw~BCU85Ky)CcmTzAJX=4QxX*i0YGdGI(5e#eeS)-(`0r0Onz7Shh z#24%pnteb{*618xtcNttQ1Bb+4Sp~ndJ%>K*5pH(&|P?!PO~Y=S8bRtY(?^eYa@Eb zEj4*KrePh~iZmZ!HIt2XLV`jm+YIVcR0xw&bPX$%lH_ruh#80D72L7k5P)5QnXZ3S zVfCU#R85ThnrGR69Ui!Me6|a-uD%Vl*t$s2)YMB~0bb2KA8X6tRhW7fVtAD1%cm1~ zp{0pGF#RAvfER9NLCIb;cxme8latHO=G>B{dfR^dl-d^fXdYXyaff>F1i~GfHuXBH zh%ERpNAWh6Ep;R)Wxy{^zsBD&M1U4+PJosJmVsfw6Hc>Q@lQK@(Cvf>F6#g`RSBPQ zD%4B-khq;T!`Lw18ZLx)Ef6}q&hTu?gW&;;u+WLn8;w)9)E9DgX{Z>00!CQ;q_VgM zj2N4L0Hk^T^KQ8w1i?tbqt~>wQ~CRq<<5|bEO$wzTB|pj6O%2SUZeUAFO)n>k^)2S zArAq;`~j;>eBk9~cyj?+n@0E~7miEWcK_Ysqx536@s8D{7<0K5i;erFnE^F4-!B8Q z>d}58%mtrw6S}5epc2j4OW%b(nz0oI*BXu?3~rVB=kH&&{!yyT&-_rkSZ~z1H!o{< zqS!9?0oF*P5u}7f=f#bci|fT=n;GxCsVJc$1sMPwDBYlgXy25NFHqGe}Gl^H1`Qmn2ukcaYC9IC5h0*Y;f$p|Ja!{NV9GgTfPR3g5lVLH>r z1tbzP<6xPv7ik{GD>cD}DmkYe;i!(n(zQg-b!lxFIALuys%IIk8tc`45tUg@avGu) zIlI;R5HFlVA`*y{bRM3Os?4C)Dd{GGl#qZGHRhBYra14ut#~$0?{whM)@iHyC3Pck ze@PSpOoC0k*H8)|YyW1g+%fI^SUG0sm4e;-5uh#UTXH5#q*z=Ddr{Ic=WUGtP*@G4 z26(awnUr?+SlP@h`mlqrWY0_4v14UCh&b(S3rmojG|K|M!xvE+B?`!yVHmR@uhIvu ziY}5NY=E4jOC3QpZ5=^7p<1MV{z_NT!2oC`htW3(yHc((PEGS3m`uagSduSuwCRBl(ZI2u*KbE+OEklC}+r+ zC<_${GwiJc>vX3NKqEwzu5>l@2Zvnfj~rGU$HQjZK@0gpd_S02+$yNW-Gv^_ZY%@( zA%>JGGuLF24Z*KSpdSJ}cs7_4pRpu+Qum$wC#J`b`#VqkGV1hGc2D64?8bxT_ylo0 z$*2rb^6Bu4E5FXzdndT(1=Ve#b3f<5PjX?p6cA|6A70yA`bT_0w46r=o8?n@RpQ&d zC9QFWQm6P*W}Q+=vm^A7*)cU_eGC-q7V|6_SfoO2Iy zlD!l7Q4>0d;g&7(IVP}#pi+wIaG=4_Z0@^VqhUrft?E3MEDug0%X9pdr>B#VCVT8Z zJX11m#g1|LF!;xm-=0j*N8v?_vXFn4L`t4p_afB^6Oe6b$nYurLOUi%}p1u*aEDRzJb9}0K zU-3o}qnz%c3CUuRbV%g|UBbX~w9&i?bB>*5_96~pYY{B0K}6%m?Re-LGq4f|5J3n8GDEX1TzS_}bI41_FTag}Lm zk?|2o>}E+pukXXU%~mIeqk?DY%@MddxdJNLF-2P)lgetb-^5QH<~U$m02=A!A#J_Y zT%fXJ_OZo-0~Cvk2Ntg*MyXP0^)2eK&fP&Bp5SO+)wM-Vt~*pJ7BazFfUT#eRfsu} zwQ9l_4+>a3$aAG7gOTFt)}21U21N+Qgu+6*(r>L()*m4#FDt{)8$e~5oq)UL`ZSv) z%V#=iaScI@?xvHy-!N~BE$k)=iNyx136ZoBJ!s`@aGFeclFme{%1OC=w&rWdY<>qy zJ)vhFbuA}6C34~WLc$~NPc~UM9{2mlbuVZ8Q(;IJG|Qys%b&0`P{TsM9 zAHmalg>mthUfB}(&+XTf-oa8>08bL5|8r7Umo0ycY`FUUJa+jIP$m&Y=9T`Q&AU436sHI_d3HmluogK`g*d5-G*a#fJ z`I_gw#h2!tJfUUqtb1oMC+E1susocH6;~m%U9I2v&&9v=2|gi~SWXCcRO59#8vFOc zb8w-1=36aJ&^2`4KFzooBxwm)?&_RuF2WaynHfq(Z*DNwLHr%&k}bea`V=tDEl<6t z*BGdF*r$ZmwoF>3N1F1`3){6zM^a%qTTR7lB^&mc9hvZC5NF1z1qNdCC(jH!K(=$i zpqer=P*lU~eUF9-n213@*w-KSzf9MdcOldr_*U=(J9Nk?%p6H&)sQmtX)tpvydp2Y zh-cos&Kupor1KQZeLF}hyh!re6<*8;H|&=Z)#{tjbS4#p+35#z;xA@=d`e%J-UFdC zaJ4}P_b(~M3H}glXUjjKTPu9x12%l%Akr`Sd_TZTpWgs99I&QaRwiJXlQ1A(HQIm32cIAl{ zdGu7b-Y|JKopPTf8Je-V%MU$aC#?}f#S?u!9URa-xgaqwGT4;syPTY#bVolI1-OXsyn%O+Yd^w#ZN0}lV0uh_wq<)`MI(yH9xY+P0+I(re z*?)ZQ8L^>3e@eqs*M0SeLBuK4X;U_ZwhZM{80N*our5Axl~-=&I`s4sW^Oh@rN7>1 z4hCW~S6Mc5KGo!u(aZr?opQBaGpA@AW{&AupVl53Y%n0E^+)vczSEBY-`O{DKYQ;M zGdg5H@tX$C%M6-vQjOxk8-p$9sHL?x(Y2c`3WW3!OiNn7cZ(+DqyG6e`7O&L^ng%ZS)&xOtLR

    clX-sQGC5$n95@I$jNYuOBh#77E`^asBegQT6A;o+ z@hZO)VI0;#!ep?Kgot9{3`O6EOEjMjdox~eYdg9PYi>Aekc|V% z=?Ti|6+(ENM(^6XBojT6`2F&Bh`7-YWL}~PZFk3wrp{Y;9M!#ms&nR4V;jGipAB7C!B?P z@!~Nsw*dHD04Up?x+eJ=pv21r@-c~4P=~lL3$1CC>(4EKLjIa)Uy{w0a+;{tUS}ty zz0TAm+K>C}nu*(#vX=Hh?E$Y7l#0|mVt>l41UN!6JrmcypEXCgrUgkeHl0EE4~_U+ zOc9f21%zT4?(_lCESnCeIx|ejKqDPwWh0voHkZeE(IVyNVY>~cS+4FF!QFU{tJK!$ z{$QK25{R`U6VB6k`9aJc$r3aoHsMnD>L3_#k967%%=9^^N-71LY#0c!_!r1Zq8Y7I zhn^%mCW`Dxx(9R#aga6>U%=8;Kw#*ekUF}O^l9`6KPCsL=^B}aaB}_y;47L%J|n3{KOA6d=<8-dHEBU3^JZ zak8vviL<;VIcq2{yu|6D?_I0LoGg1KX3;%li{N}YyBLw^`F)MvxP;@r3%x?4O|~l7 z)Cu6)XDREO=a*%l;mw1fbbH=7V&m)`Nkk}9#C4kyl)&15Fc@G6=B5m# zx^zApFErsrV};Aa1)q(n?(2x01Fn4HWPvT@UubBNUx5}5FjAx=ik88 zNTbH$u?eVWRz?b8dS-MVI0Z{6yh+XeovcJ~$4$G9krhZHmS_`mB41iIC&CT#QDufD z$?3;YNjR1$Dv2BeL7)MDq;wEOHdCRU{`%br0cE5M<(IhG2BdwFkN{1RpppMqLOUz5 zn!CtA=uC1dl_x}M4I~ypkwZH$Zy_c{tRVcP2&wU>$Qo2+cP$;w_* z7vl zo*LK;!y2#)enl)NgI~c57^sdYtdM8A5fa0}1?Ub`&IDO3mZ+mA$jYv};XBhl16XOd zOE%wW(=6Z7QO6vdGW7Zc*-qT0#6;QNdQyZJtE!1eoq9u6Pn4%6km*Q}^3pF^SlQ^;whm6_k;UOtB~m*4D$ zFm*)pZto`|nzwt`t(w zdyvU{y-@@9XE_TJ5IlNco2CI`IWSTwI4;RlhunhqcCiRQ!H9sKA*+CyF&|>-tc%e& zzz7Xz+K1|qGi4R0FmlY7`7o`cPD3X|0)r;s0tn8_Y}G5B&K4!l{7T#>&ujygm=uRk z;2-lsCsDdU7wEgMB)7PCO`<75ZaApRp5eL>zqZ^@-ykI3OZQU7pz{t}KkFfYby zY)Dn=05w;>kgC-2TdEw2kJ;7MLeW@E1EB3?7!5*dAmE4SdNx&~Bt3+%cfEiT%-1CI zp(yKX=#zcrWBQtB)PQSO{l^6n6-FmrYnE03u@PO50cO^-n}#zI+;mQ2+mLzNkt)h& z8U}+@M{_9o!|5gKHBR!}2x$s!4%)$I*$Ocmrkv=_l5l~rW4#rRM)pIs#sVE~VtA&k z1CUyR%mdGbqKyJ=0PqlKI7?v|@aw@l-Iv^l7dT5zLJl@uR_II1S#M0NVM}v4*Tj%Z zLx@`)A#s17zXplPs4(GpL3#xl>rMh=07YR1VR#1Y6X^p23iw9qT04@Ik8>7##;{DGnUwnt^ryJh$-{J_^$-pp)EKisx&;x=4v zn=)_H54znReQm=1-0H|1%%FJ9!VF)$9$-K#ReGTulhFPxYM1JnbZ||VdqKyVdffKe zbi5f|5*^d1h>kZ<2|8Ynl8Be+I6-*WEFphyI(8`qc{dq!OqEUOm?~X5PVAD9F)oje zJ#R;vmO)Z`Ps>^_tOH(Z0t3jXa}ZxEJJB*aOKJ*3E{}}oN8mg0D2#))O(^V#5*US` zQUo@MDGZ9F<5C#XdNhUgK^;+8lqxbQtXTr<1B%KbFp{WE2~6F69&%$K7F`~P{Z9qa z6A1H+>PTy6cFKE9`iFM1-^bWUOO|Dtxo%NA*U33Aj!kXa!`a9q3d^3eTe3Z(`yB}ZO2kAcb%yDX6Hmy|2wHzxgkRzpEoUzgnJnazC4o!(!xrdEXo(3DrDW7l ze0MtqhpNC+hZ=V2qM=6gONeCrkGk{ePpueg9A5qx`09N}*`Y(viGwZVImkJ7{`CU< zF`OoC2XSnx9dgRFR6h%x5T9>Dn$`N7-83u8x~ekPX+b-b}%Ot3tdekweaM6rXRZ<eUOjGVj#V)u;(=Hh9}S<5R4j*x+;u$Rff zNGIXWM+QI6%;wSPF?w-bsOBMO)}`zdErt1sPt!uw(D~cBu$br?TPG7SKRrwvUqY$f zGt21LU|#pTaS0kDoL+=Wc8i+Mt+*t$9JM#&5*~9xV(`HmX_lA4l|iP0jgqs%^*%S+ zH$#wvBE%&VPNK02N|@K23aT*@PrBmORZR)Fq=B+&q9K>%n%`3xsIy0YjnW?V2$A{- zF!^zmmk}#cSN=urGd?L0dMYQ43}f-sn{`-vS8-a08&HBM&XT%KKiu1EaT|Kon%(P7 zC0@sC(oe3TH>#fZ$inXKbeqL;=i;|vIA22O2!N1W1DiJdwsbZ9Zp; z(V`8eh-*t6oI)E8Yhn?H7GEz4>DAT*z0tDH2c=mfey$xP(JqJBxptsNy)ais2i%CW zD)13U`gUFmCoHv$~gj+Dn7H1~s~b0Q)<3R*I_1ORrhx-lV79Su20Iv!zL zu4|WKLsy+I+zPu*x*9=N(wm3N*0%tc%zU0YbyzLuypS^&3+(Abo;A+$CDF)4f~3t4v%|9^JxM4^>z zP2)eU31Pps^A@X3Q)ETrWLxBP5G$gVP{sFlX3hYKk1+ahvUdjuEIr$en zJ>JEL9Fp(RFbEyO1PjrOs(BdSfC@)*OGAdWO?m`M8?sAWn~$_SPvDWh36~c99U~$x zQ$SR6WaJ9qy@;5x#`E z9pZkGi}?rm81g?SYl(nLCd?Lsw`$p^(*SYC8fuAKgQ1*vPQ`PzhX@s8;8^>;e`YL|3Uaanf#G)29ea1gaPh zM;G?-I7X$h;3bDtOWNQ<=Hc9z*b;)uP-WD4*F|g&;<*#ae~xW=)<76NSoyw2ISOd3 zt>^~MEs*_;w&<%R@en;*Jy+CqqB^}8+7dzNvmG*%%XM+ZW zS}?yT_9nr}##jtX8US!TVe`nNr`r&Gz2$UYodO7k#7pYJ9B1>8as{C48|fj?9G9my z&uG{~S18uN`z^*DVPI{0(FK-<-KXA9!0tWoy4dLhVg~F^(y-eO*cCJE5=MmvUWo=C znUXg8#+EVD*}$pT3&AL?46@;%U(#~um4Z*i zAQdXTJWTw{iHKxs8#IQg?z++{;Zuh|T*OW_oi!#0)>80#_~O�Pwps3$$>RSK=04 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�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 From 49e4d042be6776a4d1e8f142098047c6b98a7baf Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 18:07:49 +0100 Subject: [PATCH 095/108] Add comments --- srml/contract/src/wasm/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index fbbb2c96b9683..76a038b302cea 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -55,11 +55,13 @@ pub struct PrefabWasmModule { code: Vec, } +/// Wasm executable loaded by `WasmLoader` and executed by `WasmVm`. pub struct WasmExecutable { entrypoint_name: &'static [u8], prefab_module: PrefabWasmModule, } +/// Loader which fetches `WasmExecutable` from the code cache. pub struct WasmLoader<'a, T: Trait> { schedule: &'a Schedule, } @@ -89,6 +91,7 @@ impl<'a, T: Trait> ::exec::Loader for WasmLoader<'a, T> { } } +/// Implementation of `Vm` that takes `WasmExecutable` and executes it. pub struct WasmVm<'a, T: Trait> { schedule: &'a Schedule, } From 1ebe45f08bbd7f1c215d88b0cb1688eaf4bebc54 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 19:32:19 +0100 Subject: [PATCH 096/108] refuse_instantiate_with_value_below_existential_deposit --- srml/contract/src/exec.rs | 47 ++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 36a55350b9a5f..738b599aed6d3 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -343,16 +343,16 @@ where overlay.set_code(&dest, Some(code_hash.clone())); let mut nested = self.nested(overlay, dest.clone()); - if endowment > T::Balance::zero() { - transfer( - gas_meter, - TransferCause::Instantiate, - &self.self_account, - &dest, - endowment, - &mut nested, - )?; - } + // Send funds unconditionally here. If the `endowment` is below existential_deposit + // then error will be returned here. + transfer( + gas_meter, + TransferCause::Instantiate, + &self.self_account, + &dest, + endowment, + &mut nested, + )?; let executable = self.loader.load_init(&code_hash)?; self.vm @@ -677,7 +677,6 @@ mod tests { } // TODO: Tests to add: - // - Won't create an account with value below exsistential deposit. // - Verify that instantiate properly creates a contract. // - Instantiate accounts in a proper way (i.e. via `instantiate`) // - Verify sanity of initial setup. I.e. no active account should have a zero balance. @@ -1130,4 +1129,30 @@ mod tests { assert_matches!(result, Ok(_)); }); } + + #[test] + fn refuse_instantiate_with_value_below_existential_deposit() { + let vm = MockVm::new(); + + let mut loader = MockLoader::empty(); + let dummy_ch = loader.insert(|_| VmExecResult::Ok); + + with_externalities( + &mut ExtBuilder::default().existential_deposit(15).build(), + || { + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + + assert_matches!( + ctx.instantiate( + 0, // <- zero endowment + &mut GasMeter::::with_limit(10000, 1), + &dummy_ch, + &[], + ), + Err(_) + ); + } + ); + } } From 7d761843461e0e63317cc643386fcb9c4c6d9103 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 19:37:34 +0100 Subject: [PATCH 097/108] Little fix --- srml/contract/src/exec.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 738b599aed6d3..a89678bfbfb38 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -685,7 +685,6 @@ mod tests { #[test] fn it_works() { - let origin = 0; let dest = 1; let value = Default::default(); let mut gas_meter = GasMeter::::with_limit(10000, 1); @@ -703,12 +702,13 @@ mod tests { with_externalities(&mut ExtBuilder::default().build(), || { let cfg = Config::preload(); - let mut ctx = ExecutionContext::top_level(origin, &cfg, &vm, &loader); - ctx.overlay.set_code(&1, Some(exec_ch)); - - let result = ctx.call(dest, value, &mut gas_meter, &data, EmptyOutputBuf::new()); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + ctx.overlay.set_code(&BOB, Some(exec_ch)); - assert_matches!(result, Ok(_)); + assert_matches!( + ctx.call(BOB, value, &mut gas_meter, &data, EmptyOutputBuf::new()), + Ok(_) + ); }); assert_eq!(&*test_data.borrow(), &vec![0, 1]); From 7b408282e250dabc4f1ce977cc251e9c5371d979 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 19:50:58 +0100 Subject: [PATCH 098/108] Make test more complete --- srml/contract/src/wasm/mod.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 76a038b302cea..a2430064cbb3d 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -700,7 +700,9 @@ mod tests { (unreachable) ) - (func (export "call")) + (func (export "call") + (unreachable) + ) (func (export "deploy")) (data (i32.const 8) "\01\02\03\04") From 1aa7dc7267e5409d66d3a505a2330660f27cafb9 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 19:51:08 +0100 Subject: [PATCH 099/108] Clean --- srml/contract/src/exec.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index a89678bfbfb38..6fd5c2becd345 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -685,7 +685,6 @@ mod tests { #[test] fn it_works() { - let dest = 1; let value = Default::default(); let mut gas_meter = GasMeter::::with_limit(10000, 1); let data = vec![]; From 66e2cc6a4bd155731d0790a195169c049939e173 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 20:09:40 +0100 Subject: [PATCH 100/108] Add integration test for instantiation --- Cargo.lock | 1 + .../release/node_runtime.compact.wasm | Bin 812812 -> 812795 bytes srml/contract/Cargo.toml | 1 + srml/contract/src/exec.rs | 1 - srml/contract/src/lib.rs | 4 + srml/contract/src/tests.rs | 77 ++++++++++++++++++ 6 files changed, 83 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 893068c0b4913..33e4564104e06 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2931,6 +2931,7 @@ name = "srml-contract" version = "0.1.0" dependencies = [ "assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 0f9b20bc3f4fc2a56d70aeeeb5424ebd8bc9f3b8..faff056fb9df6a8c975936d228858ce35b182956 100644 GIT binary patch delta 174 zcmeA;tp@&IF&0xQr6gDeduhW5r)>_E%`#GF9PwY_l__dE;6%IOM^x%C-mZ4Y?N Oy_ywB|9QbJPzL~R+B9(h delta 193 zcmWm6Ark>n6b0aSFYE4l42kG&Tfx{ZM&tPhs-N(ZBr42oF=LaRF$kJfw5_VZpHR$5 zvf>KgoKw#E-lNqcx~vKIi-h8YK%gjyqHshhPl#??c;%BL&B(7Xn83DC`I;fX(D&Fi zJG4giP_fHi`Z-avQ88e9m>>>u$jF7|NR6v1t!LCqql`LDl(`9QAV;2-iz`@m*o&tb e30M4kIiF_w(1%%Cd+IK1^1)M|9m)4g*XKV for DummyContractAddressFor { } } +const ALICE: u64 = 1; +const BOB: u64 = 2; +const CHARLIE: u64 = 3; + pub struct ExtBuilder { existential_deposit: u64, gas_price: u64, @@ -224,3 +229,75 @@ fn account_removal_removes_storage() { }, ); } + +const CODE_RETURN_FROM_START_FN: &str = r#" +(module + (import "env" "ext_return" (func $ext_return (param i32 i32))) + (import "env" "memory" (memory 1 1)) + + (start $start) + (func $start + (call $ext_return + (i32.const 8) + (i32.const 4) + ) + (unreachable) + ) + + (func (export "call") + (unreachable) + ) + (func (export "deploy")) + + (data (i32.const 8) "\01\02\03\04") +) +"#; +const HASH_RETURN_FROM_START_FN: [u8; 32] = hex!("e6411d12daa2a19e4e9c7d8306c31c7d53a352cb8ed84385c8a1d48fc232e708"); + +#[test] +fn instantiate_and_call() { + let wasm = wabt::wat2wasm(CODE_RETURN_FROM_START_FN).unwrap(); + + with_externalities( + &mut ExtBuilder::default().existential_deposit(100).build(), + || { + Balances::set_free_balance(&ALICE, 1_000_000); + Balances::increase_total_stake_by(1_000_000); + + assert_ok!(Contract::put_code( + Origin::signed(ALICE), + 100_000.into(), + wasm, + )); + + assert_ok!(Contract::create( + Origin::signed(ALICE), + 100.into(), + 100_000.into(), + HASH_RETURN_FROM_START_FN.into(), + vec![], + )); + + assert_eq!(System::events(), vec![ + EventRecord { + phase: Phase::ApplyExtrinsic(0), + event: MetaEvent::contract(RawEvent::CodeStored(HASH_RETURN_FROM_START_FN.into())), + }, + EventRecord { + phase: Phase::ApplyExtrinsic(0), + event: MetaEvent::balances( + balances::RawEvent::NewAccount(BOB, 0, balances::NewAccountOutcome::NoHint) + ) + }, + EventRecord { + phase: Phase::ApplyExtrinsic(0), + event: MetaEvent::contract(RawEvent::Transfer(ALICE, BOB, 100)) + }, + EventRecord { + phase: Phase::ApplyExtrinsic(0), + event: MetaEvent::contract(RawEvent::Instantiated(ALICE, BOB)) + } + ]); + }, + ); +} From 9974158d7843b82863164152d4991aea51c47cb6 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Fri, 11 Jan 2019 20:12:37 +0100 Subject: [PATCH 101/108] Rebuild runtime. --- .../release/node_runtime.compact.wasm | Bin 812795 -> 813114 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index faff056fb9df6a8c975936d228858ce35b182956..46ccd4dacdfa082e92007a9a067bb5f185590c8f 100644 GIT binary patch delta 43605 zcmeIbcYIVu_XoT?yZ7GBE=iV7AiyTHgkD2e7NrSDc>s|jp!kSjK}E%yh$vAJq97Bb zMLI|ay@-_10|W?y8UXW{Rq*LqK1-)!^8dtEl0$8GZ;%3eJn zbBtDU&CD&fB-X~q{PrZ)3dx#1tIzNJK@EqPv^l@VYUlo$&alYyJKtU1@=#h>k&_5H z^k|*JIcxsZhJ_WoIlubqIlnj~3PDc4OL(nGD{enm2v1SC!s@9uX~o||3z7G~@DwHQ zf5jEmucB~;wf}$NDNI&j@S^%!YtqQS!jIwkow1X=*V`2`9!0gg+N4%D>irLVg|)xv zy6)a){+D_R<0%YYl+LU1l*;yd^pBXmTXZ36Dw4ejH~Ihh!USQ&+W%iKh3G|xDK05& zh9a#s=IPb#HQ9-od|P$<;1)kz!_4RL+5NG@6PPW56)SGDMWdX+%K5Vi7a1Oxc};($ zhW$Z1yP3_GCD@y=v)TMqg8gyR{+k(-W@9mF>H`z)2OK7*zJaMNFx+3q{zEu~UZ<`- z(q1z4_GZk$UeK~6Rt(9dy}WBZdv$f}zO6RzfBBzv?OpC9I%E*BlY6Jsx8LK)xxHEU z*SD8m%d$4`T8rE<`g3{q9(I)UZNJ;&G|K#zZ_ic)<(F6NwIj_Yl{4B}3d!1|{IY{p zW|>FzGESCdCtCiK!ct|Xl%Arp0TJcSPJ_}Kd6R4&za^WO!7oL#C4zWCYxM#ChnM}% z&Q8;Fi?hu_m_EHEYh>iUDa9H(1*sOpJ}yKecvr@-7)EsZ-U{rtT0T&pw<4;an++W$ zB9k_Y{~FKcu(OBt52~_7!D_G*)A{il z?6UyPiUhX0N}yV6kAtB6^=};I96;-zC9-H2n>&?1Gl(VfXWOv|(ShF@uoH~^wvxB( z2XN)r3^2ddmZM14g|*5A(FyQD|9W=+F1{k3-NKTh^*st)SYtm4G?{4H%ZSd449-}<(Y-f0N?*3^xVruTo8 zJ#J@L^Z1s>*hO`99y(NxztIUnARI`2&I>;Eo>KIyF_Bboell> zm*GG+=8cB4u@?GjUcW7l!4wucq$yk&&K9yo=k@6$SVy}${t9@D@dnGlTj^<5ie*pa zjh|*iL??ySEPt9cRAN1doQ`9(j?Cv9s~3 z^q*g1AK2NRJpSxx=BvGZmT8AxVTT)J#YQ{6kVUj(=`8;BXm&X&b4I{a*UsP@UtvdT z|1itnLYOZ}sb~9M3N@tcw@BGJi*J9GJth=X>ou0mE|1m!dW~U*usFMm=dWX${?;3; zuAMD7rLTOGO|Y|%PjP>WX+W>1u!`h*(^6P#wrQ1qIE78MyXIZaw8g2#R`NDa!-fOn zF2+#{8pi`;*f2I9Ci%80aoG}9j!$@-wNvM>!f3_t!wDGInUS{^|#8g;sISEWCb4ElupTp+b%MV5 z-pOW&x-pq8Vr~}Rxdfln4JPRG|KGWFcu0b&yy1HW;vk*+*WzH_y6Uij#YltM4>ckisE0z@svY5@6P`YFyKQf)gB(I+c*8gIvO1-tkn6pkw zsY}kAkQHB;nX$6w^ton*lZl;XI!pV)W-)ShZ|og}{P@pGIsU;6mf*`cT~vG5>=Nyb z+eS^G_J*wmP#!sxB_>#~PP1Z}T2P>V1k{nipvf~?+h#$ae;5!8t&iV6<0!*h&th&~ zcNX)9h<+U)T6=7og}^4gNyadjuFj@70=JknhkeWrUgkCCvR6ENE@i?6{ng`~#qRLJ zQi!H5)`rpKS`blnWgeSmXXh{R+4I?T)W>HoVC(LM-ehdnRep6b+r=i2F`PlC^({NPAaJYiZuyI%m5BM_g@fEv=&H0Xh^c5Q;>utd6HDQY0WgVMur-ohn znq4s0O}*K{clf;<*!}9|ccI?WwEn8ao4u!bi(#}g>~j9Zq&Q88le1$vK4T+W&sLA) z{Wlrml~3Np1~$t4%=BZ6!CJB@5}htHu+*xV%NUF+baUSWFFX>uky>2Wwb=jc@wQ@wTX?-E7BD(x(3T97k1^ z<$lHwEOJbs-Nul`j`Rwm@hfv375RuPtiq4xIx6$_I~<9`@!Sr_VWW0Q@IeT9wXYN} zKXJs-MNiq~$hFtLlq)7`MVMqg+l5>)`zz)|bvjo}R0>U0Kj-qXdmMjM%$;F!7*?BO z%>IHTYlc1{+tE9?1toczeU8qByN595J*$)mer}cG(r52;Jn0aPj{3&&6goxLF4WHf zsL7`vbaXVK<@l|Gj&+i@4Zm^7(UMTjzIB`z(AwWQ4$Dj(p7g!rL`X!-zXV5Wnd^8# zP(f!exC2AVQ!YAc>V1E3%q-|oE&fWDqXF-I#L-o9)aNz7Qan0T>NBhbQfl$K#~j@Y z?=n@ZFFWRV%Fb5o=CLOnu`F*PZ*ju0k)-N3PB`WoRnGp|(SaRZsh|1TvCWVUTqEA< zy6WNiryO-cxk zFHj5q`rTou|HnU2Q@uYNpNlr3)X5&EI^Ox5^h)D4I9U;qi~1!Bej|Dodl3 zyC>5q8QE>t48HA(<73HfL`fm^@2d{?J!5Gpj-{E;(WgQjqZ19^@T!Q>(LvEMU=_hr zH*a^%QHPwn&G%Yt%%zod@E^{(7hQ9l5iQ8O?r6im|I5*WI@^7R62og>cYGyL3kmx1 z4M$Bj=_KEH!{Ij%DST)a);_UFChz4XZo=E=?$ul0bR;mAI*C7V%h8VIPU6dMIoj6D zowUW)A<|w9eeuRc`%1(``AYZ=pv~j)Mfz{wc03ms?H@OVm%oiA)z)-A@V29Vsk3x6 zg2j+8%5Q%GOg29-p8-P@2Z{2XsZ>LqPwsP;uKCW?Ftr%Kpjzg9O0_ieIEvY66Yce9 z%%JM(l*QoPS!2cwJ;LtX?ugvBcPljM#8e4~;76R!s_b$uw=2#@rbf!4eb7iLB+y6) z#hF-QE_i5h6>Bq&q2|owV-#m?_RbG{#a%I`&*TkMXJvMDHSei9N7CTv+g0a8!vi0R zaDGd}RM+jSMrm)i^Pm{NS{~;Z0QBV^=Q?58`csk41jCuQ*EvHFH7)M!B)5M*xt;OF zFr=9Uo5?lBo$LSAxyXSmXF2|P31@53xHBc3Q<~h}&TVN&=ks^9{O6rJIe!gV{pwjbW(&VA#MfvYPA=#g-d4r@>M2PDn2Hn0wGCVJ)^)WPi#1EV zZLTJ^$$dh;+(M+t?Lp2$lO{`UA@b(vA3fr{VrTgq^!ElkM@9C`m0UTfQEUP2RoFnfBU?1g_Et_q>p>qImy9tH|VjiIY0j2 zyTs9@s=7PXxlNp@@dF<@Q-oRd`q+6~*u0+fiStFnq?b)`K4paMXTNsV);py;qa5t7 z9sJ>GP9wzrIn8Oz7}KXa7io<%HWjsM^J(E$om^P=M{}L`S!a+XyZKLZoi$1aLNTI) z+?DAS=Q-bu@}{9SpU)TV9b?BPD{Yhh`D$l*<46>}s>3hq&W^%NMd|6a&X(31;JaU} zb?Qc!(Y;!lpcNh6wZ++s1rzg{+ns+2MOEM7j1%kMPCK1>f+wen=Hvg3*P{7jSx#ET z=;+hKtXP3@AjALu(^*e{e2;Ue!;`u%ohuYifd%F)3}#utlua%E>= zn#pCAub8L6OLA}V`^qcb3(nrfmYy~QYxeT_<&|HB@>W(-8uP6c6k}D^JXT2);OFWo zb@*Sg%63uOTv2ITJ75deX*oxBF$m4;RZ^0r{HZe2*d6a|YwH955puQ6+#K~;s>ar@i_wpxJA+r*nzRbCB9&8w>PG$xrL z4?+dc)lfRo470w55<@2ReGTP(15GW`Kdz}fDrOh`Y8~Ze!zt156G9%;(}cfQUl9`o z-&J1`YYhFJ2FhN;AE=A^m?Y(IPl#2IZ>z-I6X=f5b!Wo^SidhER{y1~@}Ar9#u@={ zkmghVlC6!aGV!V+e>=A2d!`Ym80#4;0lN zjZUK#ew&y1liNqe@B?ouRd~Edvt9+_dGdNL9;%`k;jBR!0>B<4ohl|sd=^^cKO!*4S|E)8W-9moa zOeNP?u82N-I$QZH+8D&zzE~MjdFNG1<5m_62%pV^4~h{+C==}V{? zgqQx|Z5YH!r>EXnzIl~WvTj)V;98^g4 zu{Fvm!-Gie9Q$eG?VM1VW1aGR=qxd2y^_e%GWDhFl^w?D32U0SNohpReRz}dq!=F> zQ~k9}#b;OoiW`mGpsh-R!TA1mCH-#ujy=YoVsz2mVaBmSmQu}0E&3)~i7-qC+rZ~N z0d1`3J%(zn_4Iv8mT@2w*d}f}qzt_YSZozKPxrdU&in=9Bt&~>W*)fx1B6! z2T%P$sm4w&<;#CiIyWJoNMe0`j<)uutPAFVEG)c|SV!bsNvtuFwPVOdeaJaz^W*TZ z&*t?GD~;LBrTXKCl_%|GKdPi?$&NRf_^V>`=d%&ut)iA;F+X!i!ww z^6bO$f0Eta#}ZhcJ>JnS5+n)itUV4V*Ffgm>GinJ=ACPgQ?UPWwu`j+9Nrj@Picoe zn#bd}WAjPqNVg~1U&32~WZ2PFZl<6ovDo5PCNc{rR0DCQ_zrWU|m*o*i#&>>eBqs~%F7Nmwq>9U3{o>m2Fwm|YDWL+ZX|4E<0-bVqQT554W+{g{%c||$iUAUd74beOu#*x7C?a9!om>A*| zv}7Sh$>!~C#!eMWp9V6?DdYu^4 z?eS5*h}YvIFqlhUhcE{YFHxt{KNxX5(&nY{quGcgE0}dmuP|POLneH!=y{RBiyh<< zATA`V|I4Wn^BpMxevphA(NGLclN9PPH=-V=3=^1y?BrW8Z6hH150e{LytBcii{Ob| zxN+f)r8%g>9X@NFgv8Kc4zkl+trb%}esVfzq(a#{f=x_v03gbA0}dCA z@(!fYO0h5S+dBwMnk5>f+T%}Een#`f!W)JY0F#ll$~zxA5pG7mgGz~)&v^dZZFk$ZwpSP{OM}^LawGnOaO+}oIYHNSj zqFCXQ$f;H?FH^g%SfqkuTZ#)bWM@gOA1Hx zf}Ifx>;>hHMcX1o+l&zoI444QL|;VlDDl4@70{PxpQj(j$u0f|hy$nk{#d_p>eb3f z@7|}W;{T&J!ze{)g9n!&amnUNmzJS6X2c6bUZ1T!49r2stN4n?!4~422xep=SeFVN zi4`fCCjl@$nj;Mw!&E2=2pAR$(Zbh73F`M6p6{kfxU-L9rl`^H^Zv!+?S5Man%NNg zXvz^`QK7J?MB0iuu`}G}cOan`?LWL#M8rtX*h8b^VjKyN;JdCzkS5QJ(1Pi|k#sZ4r ztr=uxu;IQaL!0TyMg%F=fva0Ib)Lrn!W*zbvQd9N0wJqs%VowL!^tS(;v`}IB0|!W zF{>HmZxOjaS427k@}7X4us|jW$YD0Tjt$x(QK(yl=c;*_n(hH0pW$^}(91aZ-D5%_ z`TXxZiERE+mXC(?MCpN@UL|UhT9pUTn7mTiViR6ngW?Yn)O3 zD^O`?aLxum>{+D&%ld_PJ8K@JO+2f-;oS(kz)ff7uaAcLaX%yW4`mT<1^>c#{;3R* zLD6ou#te#fXofazW>AE6CfabvquV*<6JrPdt=j=w zlP8haxT2I5Jp$uOy5w=`ic&`auDVscS-+}0aCa))b5&{YP!HupX(f2^TZ(z5v*Qh= zxuIE9)PR3+QyI<1U*YxsR%(gb2L7!qBS7RWWdwVF9DnteQdc0**IN9$TR5S@^}_SF zlqv#R_BIwT05rd?v}3>K^OW04?Ev}V+e(c3)_F9c48Ny@8dre%q@x7+Hd;8DIqx`_qB8cZ7(9=FSkJn}VJdd`kZ3|Fo3A)^_ z-h=z9{G44ix+Xf@hN)H9Tj%-Hni|Ku7gvopA3zNv=y?VnD5-%%tsy1W;i(R_vid72 zz5?~S9M7?$)0pRrWe3(o954}~};8H!zv3lHQ?zO8` z`8l_09DSkX$uh)9r#3^3bZRri2&dk2N}ugf`v}vUQU-40jZ{C8W3R(U%i8Zw8jDu( z7W9Ynyk2oNL3ZvK`vaqLOQ{qXE79c-OQ<8%wKOELq^t@wBpzP1q}r@-_Z(GHt*4^j zLAf! z{n4`Ohm39A$j`^9Pg1W3lvnB11--&3r%x=ezEr&YiVwHaqS$U6C}*N1u3*~Ys_@Nc z?bY>mwbe1KlAx+2sWL$2$A1P-?uYuRx@sLKg^yB=)bFFm=2FvW`oPu_4SO?5Ehl=A zIYq0^TQ*j6s11=#)QxOxF5lZko&66io08OKbwi|XhJ5c*3^H9=q_w#hM=~C)NaNk& zk^<@~#hW)(@25JFo2vKSQOAL%YDdfKOTP~@yK$*huiH$$&(1D<$zN!$3KQ0+H&^$G zcZyH7R9lit7qwK4(1mv)e^7sRv{LKHYmsu%ZQcaNLMzcW=`#1WRwoNZ;I|_ehzI8* z<@D9}sPJ?1Mt|$B81k;|)oOwczf38~Q`@VLQEdF9z1mDb6FR6<>2l@P4r(I;=zn!k zolM?}EV$Kd{M^8})qF)S|A5-mh`?a4tiRA%?P4b(o4cql(XR)ZcU8qzX?XTsy99K?G&RbRf!D~hrm0m`V_nII%u=iKbJNsPf=->TcB4!24^3B#xPZ5Ax>}7c zZT>V}Z4nUPWriAK|Av1$Q?0@yXRDq7X8Q~^UVWbeMk#7-4c>j4YOE7PyL!%4JJ4h? zZKm4U5YW`&|237z%~D%XF9yz1jkm9Yx<-cTlU<)RQ?1Y6$Utw*aD?7eO$*_AH#KGEOW?RWdokh*UVQNvhBG%Z@$`6)LVUlI-!BluKH+}h+v2{cC0Ur zaN|U{!SCw4@c`oIb@Ad(lzwV~+K7>$@{83$Ax(XEG3vne+jWaoV^MQvvD%IR4L?^~ zl+Tn`RswD!UgM>qi!11mFEw*8?>=D(hHQea&xo=6SxT&MjO`XnEMYxx?c>6;rytKXfu4D>n zN~o`isy@M$5xP5cDV5(|hGhvB#vgu%dwLlk6e5LpUaszEV^VnR3bg{I%~zzuhmIX;psoZ+CJ2{aSTEY_x%L`rpL<2?ylUlb;%n^Ity%_54a5O#-vOQma#X=_^Ap_pMVmle|7(t3K}d zTJ2#LQiJMNu61DkFZoknrtQGRuUx1ba#2jbAf5(V zPXFY6{P#_2W42@;ubinqQF89v6l{sWX%MX6$ERju`FC_5{~=R7&d%=R>o%*KORgC! z2@!Eg(%Aic!WIxN+0XZFK`2@{UUzR*M>ZqfSlTT8tvq#solV}Y*F3G})30KA>;*NRt(eQ(Tu=kAd71H=7v}`# zYhLE}(8%ERh54EnyMKDk%jh+4<^>FT&Rl-wg1Vc1n9H|ZG{WVSOW2a2Jmix4xd@-p zm(`y`!r!gSY6G@Bmp8bgieK?^<*M3*FSw%CAkLgCs z@(nlCcA_)NP4zW(=}dS;X}-~+RpX!EG^SSl>zk^>UM3J&{Wm9?3ui294*jimcF-?x z;_TY++J|Na{r2vgnL$4+-91xW>1VV;+%l8vcI{CSyJDF(-Ogsu;OiWkp`UXOZH@Y^ zr7`=Qnz0Nx>eN1Fr)Tn!iq=ZBd%2?ZRR1PY{L+P?-L+NCxZeXzJ^g7_d(zp~()hc{ z=F5wflhgEa9__lg3Za*d(h?oCplefHdx6Pj4z8$G;-z<(NO)6msyh&1b4;;#!psIU||Xa?6`r67$zU@I~KnZ!7DIj|Kcz zwoq2dxP(!O9a;cbS*U%OVt9m6t z>rX`AC1@R_?qv<;4`M|P_(5!oMC}PNgmV+M)sB_{?bELzd?k(TzE~6N2y9szMe_TiFO)G`p>tLmjHLb9fLZ!MIu9{`&t?Fto{U7h%@~D8&+471#z7B93=)@bG1C{HT~#fvShsR)1J9P7Ep!&{_pgjryll;S@jvj!6&CkbM( zzC)L>N-6-RZP2F-(OTOXejfMjqgu6^YgQGASSzyyA~GdJ@o!tjt3C#+%vz;ydrUhf zu21rL!?kxrm+Oqs4$#rcl&7_X<_l%-Od}I-AJFrYqzj|#Cy+(Kg|5@J4?o^uQ0Ip{ ztvyEa_|B)biz2h(8SP10VkA7PjTM09&uV{*DwmH0Nv(iASay$iJ0*{Sphx-BX?^b~ zt&>9ti5aauK>PE@M{CA%MjXd~Jz8r_NB8GPYsR5~gqG($U(p%`k30YP6)n-XLUc7Z zFvz*oE%fyerEsVtui(QWX>;@|uV}A{JC6FOH??+ls{HF@)BbP1t<~XGQnYeZdFvF+ z!esAHrfAF_bM3%p8?KPxRev#`%NtXyn5S*kIFEnMG(Pq%tw+*YQNP8Z3o$ah9k&{p zXN*?k5rcPOpzZWRm)bs=Qe&J*G71ZcJ%hjygn=^SLs;dvt%mmPoW|3}Xx-VlYy9Ui z+K<$+&2I;~JH@KYYcus(W3_q4BBaAOt&=#T`#9BHL6mz>t7YKYf1v%&Drbr=Q$LLm zChP~TK5Mj^KR7`v7YJbp5YJ7}1{(tK*|(d{##ur@LV*Cwr)7*zLpG2J=&}zfrZ8Bh zbBdN4Z3Gvbn;Az6eA*Nvw&*yhtSy53pXo3xbhgD*(}bRyDkfZg*Ho>Kmi*0H*yAOK z_$1B$TlqugZ}7#mjPVoapAuMb)m#Ah%+Ijcd-ov!bT%UH;)D9R*)%B~I>_tKLr@;S zfp?szRidB84x6VPWwh^TzfkK}HEV-$7U1$D=BG0VMVg9~Uc{zQ87$itYER%Zeh2kB zpKCvA)eGz1j`dK%-!`Fw-1WTvYVB8cXqR4YjW*3*D3ev#*sn)l`fzo#ohDb=F4%G4J9 z+a7Sw7VUBN&078WEn2+#|G8O|+y$#$`#m4D3$xr$-}5hb!JJ_YCwFO&P}lC?tu=74 zIY;!D_iB+YmZI}_ztuXINzo0nz!6%pc$@frq(5g4|Lt4tS$1M0oqSa+CpM;Z(u5PK zXv>L|I5n!jeqJGKK|^rhoL8(ff7#7{z*!SJJC9%ePU|2K)0&=L_%Eecx7*tm^GV-p zds)io`lGp8h3MMXc3Ad!iMIS5=BCbg%bX{R*x#Jk!596eEur6NJ(Q=tR55>N5a}6N z1nDn3`RP1O{A@r^{awqqm;E3M0o~;<6{q0GWyRJZ6o94N45d;i|@8}2p{_q%nf;h z-SyF3byz=TcYSY{YLqWPO(U|?e)^Z4`VS7*1Fq7>gtwM%BVxi^L+P45yjd~VwD2fB zub69CvG6!ztIH?FxQvZqoANHP+vAI6rc?#ji(;`fzJeTovnk; zBI>#Pjt-F;JP~$z&Nt^4?bdaigjV;|pB&(+&~#-Q+{oi*#b zMpQe4Z``zxRQ!};%My)yR=Ctj68+Z&%7&D$Bhv5A7^IW}?X{5pDo{56uV?rJ4O}l) zTW69|3eqSGX_iTvb%vj8;Ch+8cZLsa==#9D+=MSb!!I;+HM!>_QFiz#g$TD0K?mB? z1R_GD1qixpYxmDHWz0LHKie$L;Fu8!LLTlVvxlU%v% zSTx#~&i2^|S9RUv zcl{_oOn4`nR~g|d&6B#h_J)=4)@WBryg+ri_^mdsNS;5+rSP=>y4<{LcUSi!Im+#%gPGoop2!jcG4wbEVD z{E7d#9tcYkB&Fn(Uam&}K=y1eR}q!v^(v$uG^MKkWN#OCR%>SRl`mlfjv+-tke_!y!!Ze8q<@Cykv?_dMo0W-n{R=S*=b z0+U%UGHdpH`M9gSJuI^h=BMpNcD9o4ALe?zXqtd2Mf3b8UDv}36ypHX98nlHqp~J>_|ma1kN(svu1oSu-oaif?X495^i7xiPHK3Pl6tdb*M~)`zmgvD zmaDJ)E_ir3W%%v+@b<-TyEa%_t4|o~8ZDF~n-4%m{egE~=R={DcuK144GS*^X(itF zJ=bR;z>2)a`!0Mp^NK$BeODRzvDe^cN&k-4H-6}vSG1NA`KpgyFHt209y8fhkv};J zvwA2nCmgWp}D&o!fHn=7Nk zp5{i3K>xv~h3>6i7KORjMW>Fwd`aQU%&_?y>V17k1k##>=kUSYa+ z5$n8cI@ev1{Z0etSml_erqS(}PymnGV45b~CBAO$`kNzV@d{5s?Js0UVuAtyk zXqELYQEv0AkxRYqI($vEyE$9(J3klgHty$E_PYDB4ZrhOyl&$gdLWx4S|{jJio1>5 z(*oQk-u5OZQNr1u!Ospdg^!dwhVs*l?ZMCYxDa`y0>%-Y>h0(qyKwW z?^Vj(K#^ZKGwyB{eBn%PUCb|>iLDF1aJDkWopo0n`n>XP_dTW$*Ed#QwZ-a7-_qCJ zL{oTu*Z2PzRlELn-cKU?hjUnz9Z0vWu>7(w}_ynK+(xdJ% zjAd@%*N3{>$&ZUV=}aC*XMS81ziAR57aj1pJDv2bUwz!&5ueLF%>7Te+t9lm@!_>; zPq;70Z;wg|=C?19M+?TyB{z3rm6homRT(`t4$l>o?R?3 zpgxVCSf!NVs4hYu_>}v>g56Ri?S#zTk_z9AqTh){`JL!XJ=^7j;@x!=`SJOK{Ku!= z@5x=3m5+8=;B$d5XqN>(vCB$-#@#0zU$ntTpS;q9?k=1bAq9Miwlk->?^$=>BKV>T z_})4b;KLSZ@w4tuQRZ&YY$vymbiW)c%-{q5qzZ! z_~uynrk&xno-2~CYysa=3*WpmdOp;1vfC?S z^O14xr^T7>10T8{5ofxKC%EZMSI?e6E{Mb3GHLGru!S4+5ozv$@*j7hmjqac)B7__ zuSdB1l)1!RAzsS?wM1mr?9snZ$Jb=oyMOEDKXqS_>!D!&%Cp={%(IjgE<^GXO2K_% z7Gkpqy%lD=b14#Bp6wnfqn?vq7r+e7FG0$fV8%%i6A&jqn&UPu7AMSgi;KnhrhGZQ z@jQ1o`-9~348+_uu{PeAbNHIR%a&w3N@B(*^ zIO@ii`+cQq-#RC(RWo~c^PF%pc_rl1IpM$JLde;3{N)Yq)=}@~2Vl3)@yLysrvBXE zE*|xX1u-F?5UpFTlQ3i9@`WrKON6DeXqezUS%j<1z>k}nzL7&DfI9zue-k%BOB}zZCWE`9RN8&hw8pyKC|eneO|;BDNNWxOa0{ zj%UJ3X}ZOIf6Jw^UZeH%WzlH;Oj$HqKSdVN`U&T$_2DHC*y_H&;x*Y-gZI2Fg7^1) zp0fiT{B5hdOxUJ1+2+oO`r1<47p6)gx4UnK8; zkXH5HRfyy{g(1!thPZdPyUag#5Z`JAUD#fpE)3CZPgtX=$=3k!Z>qdE+g*_z+O0p5 z?QUzYIOd|TWVzV8dBH4V+%H|=8}_>IYdQC#2n=?y<)~+yeNhAk`AeTqg9UsnixBYs zMc#6syE{9%n}4{^eJJXzAzUngPF>*7?ss=;`J;px7M&}LhDGPdqG6R;vIyas7x=~f z?k`1@UXtT}ECMSyo6l1rE|NFs?<%F&KHyH1doFsng6|u)LNb02-~WyK;iwO;VvYTy zv7^{^g(n?!KVp7zjfipKg@~u`(H9(aH+Hf0d-NZVxDQ6xIJzI(5|^)p@zy|op3|RA z;F1!Yy`O)7#$A==-{60rao@%FI1kU%-#qK?>%u?%qUT<6pOybi3%$1%A2-Dnoc;Ru zSKO+dK5BaWs=E_?)U@U`_dV8+nnvJdlq(MHw0zVQpTeMznrie>(-VKWTWI)}fRnyo z8h71Yi{HBDE=C_QE%ukYGNq8*nh*aAKzz{@;uHC2f4PG`X&R^_@JZ8xI`BzT)NwDv zmrNnPDW(0cyTA4n=yai z>cA2wW^S?JQ-Jo;Hm|L!&1U=I4Lx&`XN-?6u`j@|qJO1Oo$%9o@XRTmGQ~riZ{xpB@l+{_y)iFZd+tLGyTEh9wbhNB6{2IgfRsi~;=e_CAj%Cr zUhG+fhuoa*d89ICzK8g#E`Ga8wDm16Iw%ry(zuJowY#YDc3it0VGHK^rOgb_C;60<`#T z37)^74^*5Aq|;=iWMP2Vw&Ml9cBZF#+Z}LkvT~W$9%Z<=Oc$W?+Q8ocyb985n%CAE z>3jI2M#4LMv)~=3TPKn3+sp`9p&Sd47If+qEKEi;f}6a;ce@Ai;x}fn4-;RVWDU09 zM%`aGRsAREy7x0C1J(YO%1)c=a#5M~8>dBhV z2QM%us=gL@-h94f0pv92`xki18VdtUH8y^ALCBm_JSH&yRISe<&CBmw7()I@IU~kl z2!$_O$?NlpAZIgrPFZ9wN~}$8#*Y+%?apf~3K=m=L*P)O7Ma~0W`U1hz%wO0#R5-T zz>6(5>C-Lng$sC>ou2ag^NT%m?Ii{;3XCW9Cv6c=SmLQvJOgm)ZUndShn9FM7f)Cm z?9FZXIDkuZ3;_>b%-2FniP3;tXTZ$GJdfbHA@uo+dAX&i)%AI>cpvYu6ty-B0e9yw z16(2$Jot0Ia4F`FTZ8$brJjc6>mVG+d0|0Zpd~ljaNjad8G9YxbeX4V9E~_VSF2*G z5jmUf79xzCkL&P>%TSw?HoS`0RtaPnkIZGBN(|CYKw6ZXmPrCy;9Tx$fg0{z?x{y4 zBbR&XvKt+E#&S>6lU+^*E8VvwxZAna0`{1;BN&$uLYoI#*~w9mE1i;>QJ>$t!c(Dm zGq6aXC2&VRVuhzl`5*ckD|eZ)>Rwwvpl^)g3s-n*S|dlfH37HFU&U{(C~#BZUe{Iy z&@SF#Wx&Y=y8G$?+RG=c^t2SBwIOHYlE0s~WtT zZ(D^BXZWHBA1f@fhppz`)gckkW|2O6H6H*x!btLJPgxO;QdaZ)6$nS`R(rgKiA`V4 zFM%y+n`K=NleN{iRFkoqw^`$fuV|$So%~numMcA#`OGyQZ;;$O=q%mKT+MSKH)wLn zvfvYVl`o(?bC)4>Yel!=&l1`itF5ihUCq~j5m27cj%^M1t%7#Sf9XjWNZrh{RCf(| zX__+q5IYH)u4UP(0_(O?IH*NsUOwx~kdQ2ATrzJWw;F5$Kl7z&a@H=i(VOa?5%%QY z8U|cl)I>7Or|*}6s3BozK`$2>BY~H#Cw!`fUcxVeUM^NLLg-OnvXookqBp=G*Yaya z8Bmt4ECZ|3$ZIQQN;zS{6UeIvIv~S&jD^1OHYiKBlo%4gAj<^-Fo+?5C;IvpdX)fp z@WT^ZNh51(X2BDvyQM6&Nd4~x2Du~YwJo@UzF?3&mTDXV`m%*oFw9Z`ZA9o94SKm{ z9cjT6E;-c#Ahl0Rf`cNJwlEZB{K8W_X-xuwSWq?Kw&-z+kTY11PHTK&2Ae9Y&05t7U-Um2UJR50kr1Ttl zPTB?ZFB>oh1U?{7LtWjFHb=P=(j6#QMM}?l z2dnf>Dw{Ka;2m$_9g4inmjfP>l{R&A{b!@g{gvDTLw5bPuePYRk9 zZ)Anjtp~q+vMsVCY&Pg+NCHf?eGUNr{bbpeLl*v%7JjO`?mb>xFQj9TQZzc++H32H zlvbkj5Dod@I>4z-FCisEvf`_ud>`OMXNAMJ9k%kVdHw-UndBR2Q{@l>DsKS%9;Ebq zg+@r79$grraIhB)Qd9SXz-l*hEez7OzXN?V zNyD?mf~WE}OIaGxDbUNY3Z_T>*oc2NmUkjmaQbZ$cn*tq>9<8>e?GVOaP6*i$fNwn*5d*1& z%b8^f@IJubLs|uCYouL}%0M3)&(l!BeZW70*??S8mWQHT8|B-;*CP9`d7t5GuOm-m zC}*VYfYXG~0Dt5{5`GJCnyF~cw!)SBXjs2VB!dj?94)u7*qc+J$E?TH8;nrimqYni<)?B=h&ap@t z8E}Axs6Z}G2xsj4#LVX08fbqh;ys*#4&Dr-O(S+j$?;E=i#HfLoXwUth-Dkb07 z;m+xa7PnPRxQdkKwqxy$w{JeAkD&Y}(!ogcQDJ?g*+{D*wa$Z;QCJXHY*)#{_DT-sk_gF%wpx>(9mb5DU@4q)iM=P3)ltS6--RO&EAN>x|xh;vfF zUPdbC%)s&<;RuybPcx9x+bwz~AuoqX9+bZU7|jCoybW2h9x4xkR)lQ+Tb3tUIEB?X zhi$*pq27fEIl&kr0){;j^zumw!~2n?D@11)wy=p*3v2pzp0NujaMwEW%w1Tz>;xOd z#?UeS6!1D`eX*SaJscBWFwU!gES>$Ruh!5wMe$Tj|{2! z6jBPhZNWgV(Inw>C=WrIo=eEfsVrqjK!1cw4JrQxT4`6I=Yi=3w6IM%miKnX5eNjy zsmg&e%@8?ADe`{}3#9NV%j?bZBH(F-usg-z{{u!qb}|_7PDnq3C04YQ7a&hlq`;GJ zEW;nU7d_>=1X|sAXK)W&p)9R>D(J{k;*ru0?Pa9#NaZ{lI_*h#=(LwC5ux+m3tbJL zm+%n~PV;JKz!Q)@@}l7l691Hmzm0~_gf8LFnQ%Gp{_vnNPm}jSfe+bEbT@ZwNUalW znpvI)AELVwC%TzI#)QkQBv7^(yv&qKSt=*=5Pl=}IthCNezPJwpixvVo(ABx`dllN zYX$ZfsTTINVc4GlIeEDhmtdAj_DJN(_UR#W&IG@FaxAhWY$E6_b7DbY7qP=-X-KYx zSysFV%<@hN3AAoePgp9>55v0|yjC4pC*zTpdas4y%?_#ea1TCmpQnsybB2Z2hP-U6 zObdAlc1M59h2cGqdaYw_>&d%+YSwEVb6*(V=$?VFFO+ZaikaNX+bj%kIq=dj%0Ado zmhDJDUItAX@HXI=Pj`zf3F{4d3KgcTWX$A&L3|X*S|%k4>uV7<%py!SAqqZ|kLOMQ5Klpjb$xhu+-dV6h6kiLoZC8X9VjFvau0k4ac zA$>3ePm_C2FP;W@<>&M=M$O7kf&PVFJQMhsdx38p!cX`z{M-Rg+2rrhwHHzB@*l75 zd88YWQgoxodO09(Um$!FuH62BLr|HXI#{uj3hD8M;H~s>m~fdOxj?VYz#!)b5-`kC zmheWFEx~BurQV4?(^8>?-v@fR+RC!viT;Er(+q}34sI_nkV(^%2Lf3!mCNM>dMu~$ z!uBiS4iConHRc|YRlrB}zY0VNg5p_#29V{_vjTaV(&@3@yO7p+3wW}m&fupt2R#LX zk+*K3styUrJ!|P?@?R*(-bnw=0!+SM2-l#GfiEqp!&Vr1sXfV0s1Gf2<$>%Fz-acR zXAK$+TQT&Xa3FXr$;YhEIuOfkWE;?0hb5GDvmscpcL%LBHUfmw?(B<-q`Lo!I0u6N zE$w=!+hz8kZxIbnNbX?>l_w4I&8&=A1!Dy_6>-{3<+4vMfI=1~w*LJLLvDk#0vh5( zO3Ohf)Ik~eLka&5aH?P> z{-^>8FEPM)#eTmDmkl=QdloQ64)WTPKy(ll4nleZe`J_Bj~MY(!WpDXgMAh}(p^Dn zdmZJ5V)Y|#KP~wtU`Ar-joVLA-+Nr`9(pd|bnAZ(Hj_gkWfCnV}OOpCfGb_k+K#q>}!TUlf^w#YIl@UjNHlGvfb!E6>YY;V3dw97D$;V+!B0yvl6s&IUP!yye)*-8tAe^Dm`kUmD^Hz^cs49?)0Nx+rwyp zq?33V=gcW2x!}Ux2r#q-!&0QJk+wieCjkmlT2_S$*oI#D0S^r`UUZ!_C&Nowvn=CO zaQuS)yAL&XdU9vC5@qs6T4U+RlbWdkn~=8EP28uBJxRG4HGBF zzrHDx=wxT49W?_kS~eSnkE-PBHU zK_!m?Dcww}OIrAI7NJsovd5!=lXP}7FArK$EI6rM=?SU8IpuOps#|V%R}SUlfAsWG z#uE{r_@k#DFLTUO)n19WJmz^QQfiqLa6io%wfOF1_;(HTq5SMIPoGGsOu~0G@UI>R ze#cNg{W$PaX@u`$;A@@${=1>P%L(A6=@7oVfj><6Geh}J!b=?xzL$Z2|0jIc-_Ae( z3C)vTC3Igx*DzXNocI6P^Ph-PPZ}GDj$HrQ(;-ayj)>`*1_n8* z*MOHcOSps+0Rhs^=YU?CXMNyhp6Jso^is|O&>Lon2#_Aaa1CW?Ub11u;bgKwG04;E zVAe=urzWSXY?Rwkjd&J38<4RA`B(#Nn+6)$IPu#VngJdFu!l*|#6n;_mJhcBA(p}_ zI)O@qDgx~pz#cH`dDCnl)o-)Djx0=Iw#h*B-y$y^DO^QMq2B+1PHM*XjIn2yf~N|4S;}&xKLWiRm;t}=s^4RYCqwg<=K~>K{%q?gVC6{|o^%U-7VPklJ{9F!m@G3zT0DPR{GEZ2}a@>0Nh!@6F(6tttaF{XCTVt8gjE;6Xp6S%Y{s6{FU&~_?z75MdRd7 zo{>v}eGo==BLlbmmD@PLsKKG|G!s7ZCF8eMsVLKe_c+QF-m;OBpALdh;=h41whYMy zh(53gLhO6l81oZI$=h;9du=0;X5p_m{#LwV%sBGe)rnWVwkH9vf&ngzbREjokd}Vk zkW&LG4N2Z>#xPz$N?To3z%l+qk&#~UA@VX{$Z!N&@s#>C*obDBf(aQ)8*8E63_5Di z5~SiBQu3YO(= zC@1jG-uFDg=b!atlt=*`&5Swkpt)eo8K?LC!}F`N-(VnoKs3M~y;PRvhRFLYW!f!R c@w8*0vpz|mguD-bvVnUh=;;?ckB$0&0Hf{g{r~^~ delta 43019 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 From 27f9d5f183a421c3a565901357aec7b70d47e272 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 14 Jan 2019 14:48:16 +0100 Subject: [PATCH 102/108] Add some tests. --- core/test-runtime/wasm/Cargo.lock | 12 +- .../substrate_test_runtime.compact.wasm | Bin 46028 -> 46045 bytes node/runtime/wasm/Cargo.lock | 12 +- .../release/node_runtime.compact.wasm | Bin 791154 -> 812145 bytes srml/contract/src/exec.rs | 142 +++++++++++++++++- 5 files changed, 147 insertions(+), 19 deletions(-) diff --git a/core/test-runtime/wasm/Cargo.lock b/core/test-runtime/wasm/Cargo.lock index 6bd62383c2d39..cb033b3aaef50 100644 --- a/core/test-runtime/wasm/Cargo.lock +++ b/core/test-runtime/wasm/Cargo.lock @@ -310,10 +310,10 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6#616b40150ded71f57f650067fcbc5c99d7c343e6" +source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d#b0317f649ab2c665b7987b8475878fc4d2e1f81d" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)", ] [[package]] @@ -529,7 +529,7 @@ dependencies = [ [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6#616b40150ded71f57f650067fcbc5c99d7c343e6" +source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d#b0317f649ab2c665b7987b8475878fc4d2e1f81d" [[package]] name = "parity-codec" @@ -1020,7 +1020,7 @@ dependencies = [ "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1594,7 +1594,7 @@ dependencies = [ "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)" = "" +"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)" = "" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" @@ -1621,7 +1621,7 @@ dependencies = [ "checksum openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ec7bd7ca4cce6dbdc77e7c1230682740d307d1218a87fb0349a571272be749f9" "checksum openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)" = "1bb974e77de925ef426b6bc82fce15fd45bdcbeb5728bffcfc7cdeeb7ce1c2d6" "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)" = "" +"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)" = "" "checksum parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dca389ea5e1632c89b2ce54f7e2b4a8a8c9d278042222a91e0bf95451218cb4c" "checksum parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa42c2cb493b60b12c75b26e8c94cb734af4df4d7f2cc229dc04c1953dac189" "checksum parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" diff --git a/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 3b32eaae5b4fceef8dc3368b0ffa18a0fd59d501..828287ace52c5b19767c56b537ff2f8bba90ad6f 100644 GIT binary patch delta 2377 zcmaJ=eQ*`k72mt>CE+D`a9=_aUWj4&kOV`_-Q9b4?wdX!o|MsyuGJ#T4ht4QPy-IE>`VyT+Xi}a|e5n5D$*4bBmly3V zdL5<8l_D*v<>PYs_4M6nNvM zq^9E1Tz~Yz?Hg5eIBHmX3ql{sZ?&w4xL#^0L;$b0wy9`bs%<*#wCzFkzI?IGgNwYo zhVuYM?kz^ZX%AG%57rYj9u0(u&#)kE?J1NVKL^2(-AfR#lcDEq~_Jn$8C@ zIZY}+&YbdF(g_Vj4aw~rSPFH*4eHEk(R&*%7ooAIy5`G&xC`YvnI|XP|9*o=xxcz5 zT&ft~2kDvk7NsaR`xssHPN-;19t<`@>=%Pi;@IEb+6h8q#|3pdk@IM5wCk=Uq;hxn zawvgp>{uc9chskH|Je&pac(U7(<74z%JJ3?bJ~JPqvt+Q+}CqISY7Bz##Wy`dMm1k zvO7NnA&$9l*AwU!*}to@{*^ekC2?#sBeE7sl*U!FBZao3cy4mz^1WT%5MAr;$vEzj zd*{nea4`^(TLQPB^6UkpC}(*IhV?!iO*K&W~u z5l5-X2O*II(m?M=XXR1^V|n4}XJL?fpQ(cV@H4w%FCVCZ{kDNxFxWb9Q#!5O-v9F0 zsr|<${_v&}9UQ1ud;3dNn8QB!-TIPiRjgQwqHM~;N;}{rtUOqAfdASoUPUwfngR^0 zqWl`}RluJEmH~dAn7RKK$Z3#&3%C$a1;07KcVK}F<&uhJ{j)dsZcSok8OW0ftgHcC z4=eV!8u;2-{FbZyInaY&?YjQftNcfxUmc&Xz9ZqBf^`STrL*{pa8BOfd#@Y(_p2Az z`8eU&U}Zj5>H+TuECvh!Ay?&HzzpC8zzV=GAo{p)ae*{I0ayZ904x6DwYXHotAv=0|yx*1kpd4Q1sU zM^h3HX6Cti7_8zGK>Epc7pz{4tVeUs@pFJ@zmTLr-{aXnP)` zG!#^BI8MqK$cz#iIHqs0fLD`MwJYSAp_{O!Q{oslu>_^Q?>X|#R!lAOMdtC5o`w@buFfcmd5~HSvT5*gMd;fS0Jbj**Uh{Il2TxGkwZDi*hHl z4eraK(Hbm#gSnxAp$OwL`SScI#ZW2Fh3+%m6O=JSE{$sDx|~22ebe-yj*h%9YA=JI T#DHJN7MekHUauSVy0zke?_iC0 delta 2395 zcmZuweN0!^8NTQKet>*>0Rd5@S7!xEk#o;E_ug}XO@2+4hIXy2akX0vp8LgzR_LTe zlXmE4x;Cs*Jgu9Hon=^xbX}2~w6xt8w`Chkh_(ALabat>L|qtb`De=_%iMcGlqS2$ zInVn(=e+NE-uImQr|atUb#?q-D06P`f|A{*q~@ZV=sZF<q$LbE0IUDA42o;Vs>NNUF^_cxSqvsl}M7 zXJ{qS*3w@gSpDa^>KHbbSy`p9sO7=Pg-sc$Ra(K~=3Lm^z2%c6Dv4UFznz3*=4xL> zlhF&fIt>-eqoqaBMRQm!pFMs->8w?hdPUI_sjqiJiqn1j_4LjZ>PgMY0e&3)LzX*T zFduj7vtlJm>IeeyzjLb5ti0)L(^llj)=_FQdbmzcmy_m`(MOG+pqyjRUrUDXOx z&qY`6+ohtHqT22EAT%StvZDnw{cuMX0(hsXSw&M)Z8l(L%}>DmgJu^N(jFX30~p_# zgMicbmB}kD7)?c4UwQ!Pi5`LS3pACYNtq4m#qh)nVGW#`k9seUMr zYWFDFsg-7Q%{`~0N%>;13$$Mg{uXQhpsf>}y7sGaq58g$(B#Da2a{0BL)}}T1+uQa zO1{uulbQPWvyfCvO-8?cav=`9c#tkeU`cv*!^Zxe$06!!Pcn|0eQGNzib{KDz=<_y z9Xf_a3hUUY`2k^iN*Riv~}Y zt9>`~Rd|3$;7>b}+^%Yhr6@{Mnx?b@F2G2Gu?qOlui#a*#PbXdSVj2-tgC=O0xSZ& zo>*G{EBLwK{~B;T;EklF)B%1715zlTs+!z->h8Y1z;6bBA+dB$3)pc!4t(Vbe$Op_ z8ur0Ic6)!@Eq(^}mxH~0js!as27`JESMb-sPTt}BZU@}>?80q6E;tU@kgh2;fX#q8 zfL{iLT9qlle84M!C4hei^>O3k2I+vi0Sf>#V8mZs{3;mDt2Cup=~I-wV8opwfNKG( zL3W(rS@5d?&jZGteH;}IWumx1b2QT~E!H+w(d^5{&8t`#GxawnY)pPM#i{HWa zjxf6Py?Ip7-t|OKd$9Mg=;=Dpv9Hz-dgaHjY?L=n2XgN#ZU29{KJT+pQPuYoC~k=j~pB=m6wJyW&5zEdDs>KW`W^{ z+~>rWsk4t1QqK^?u+4xA)3w8}cu&KL*NWu)Svx;)h3in^Vsp`8C35I&MWIcE&3zJ3 zlQGL7=Gwit0`7)`iV6enI5@P0%5g(wmHcpYgBBXTLukN5;X`Qwlb2uLtPx@b%m|s!O>PmWKWp@^0!*+V zHX|OUp&_`l@!k{XN(<}i+Rc!0>boSwBDA<;%eK*7S{NF{XD)T2{la5ZPLFQVa1aK9 zm|n=3&qCjl{~fJZ9boL++;p&jd-OcX&Q<0IflUbGM&MD51K+EV&x~%QCsD8eJ!Y~>lOz(ynP)9+HRRptxJ3;)^Hd#0*81a`r;dJ zqkL)+hnk-4Gi>&|G#>hb zdfZ?n6r4hP-kqq>m@tVc96>Q-cIfzWeu8PHPbe0y0Y|$br=es~MIQWFa94&8{c@Ng XJEGPipFk>TnXMCSI5pU)!My5!Hu09w diff --git a/node/runtime/wasm/Cargo.lock b/node/runtime/wasm/Cargo.lock index efa6b320bae2c..c4483ad72308a 100644 --- a/node/runtime/wasm/Cargo.lock +++ b/node/runtime/wasm/Cargo.lock @@ -310,10 +310,10 @@ dependencies = [ [[package]] name = "kvdb" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6#616b40150ded71f57f650067fcbc5c99d7c343e6" +source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d#b0317f649ab2c665b7987b8475878fc4d2e1f81d" dependencies = [ "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)", + "parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)", ] [[package]] @@ -586,7 +586,7 @@ dependencies = [ [[package]] name = "parity-bytes" version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6#616b40150ded71f57f650067fcbc5c99d7c343e6" +source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d#b0317f649ab2c665b7987b8475878fc4d2e1f81d" [[package]] name = "parity-codec" @@ -1380,7 +1380,7 @@ dependencies = [ "hash-db 0.9.0 (git+https://github.com/paritytech/trie)", "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)", + "kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1938,7 +1938,7 @@ dependencies = [ "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)" = "" +"checksum kvdb 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)" = "" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" "checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1" "checksum lazycell 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" @@ -1965,7 +1965,7 @@ dependencies = [ "checksum openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ec7bd7ca4cce6dbdc77e7c1230682740d307d1218a87fb0349a571272be749f9" "checksum openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)" = "1bb974e77de925ef426b6bc82fce15fd45bdcbeb5728bffcfc7cdeeb7ce1c2d6" "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=616b40150ded71f57f650067fcbc5c99d7c343e6)" = "" +"checksum parity-bytes 0.1.0 (git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d)" = "" "checksum parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dca389ea5e1632c89b2ce54f7e2b4a8a8c9d278042222a91e0bf95451218cb4c" "checksum parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa42c2cb493b60b12c75b26e8c94cb734af4df4d7f2cc229dc04c1953dac189" "checksum parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)" = "511379a8194230c2395d2f5fa627a5a7e108a9f976656ce723ae68fca4097bfc" diff --git a/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index f0e4c77f77998fbfadaaeca112c6b3c6f6e871b7..b9e68a0b47c33f0e0acf6865f2a580ca04523e09 100644 GIT binary patch literal 812145 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šaE&ZgUn=%Q<5y7Z%?$Kq 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%0D*U3Dt1-I%Xc}nh(T6H#l zKG9t9x020~Fqpi#gdsfku#P`BUtbj(vL) zLN<)f)l9nY%wYiTX;O3=P z%fm|W2yT``zDlx`J9Fyc;9<|D{&rkSMG z!1*i`6&D#;AtW3`Df1n!5XymOa7haWVx}hlaY@JMqTQ2h6d8t;i-^l6zPY#W)R&;J zT~uG%ZCPSdt1s=oPW2^t+b^I)fWii=>f?t)=9)CZ6RVUkKGTc03-CmjG zv?a6UN@hy}E6BHW$tN+1T0Ebr33`}KJ2b}Z5V6#(#mqImWOzot7o5!5rfFzURmC^j z`CdWAbAf6?09lg-zM*?>$CR6?c5r8YyKuwXfzqs#E^e%o+wHfM6i`hGVAoNhr5H#b z@V!Z=Ia58}pxih!B^&IzOt#QWHduqfxOTLK>t0lj*40DnnvfCV*WcxJ^1>`CrMxid+C-+VrO_%ctfj^o0x`UX-ZGsR z=9=5)d0}E|t}iK10(CS&buozPYO$FYX8nqN0_@5UsUjwIUYJ6y1}3Xz^qoK?s9~V2 z!_TCIb3piy;h1Bq;n>koWcdsJ)@28LpfhvlM@9S!On1l?I|QgaSIh+IH4;ujaaZ&K zxl77x3$wp0@`{pE_xZbkvDk+=O2`#UELV)8Na3-z#VR;SGd6>;5lb19IZ>sI5q!0+ zW|RfB<&xL52D}YCRUE%c z7^79X5V{4ct2<~Svk3y@WO3UAWtFit=}xoCdKbtl)5KL-Wl7k1R*`v2Ckq<6%~!Al z=zLHI#5sZpNT$=vY)b;0VTYfQN~DX5L)U|~1RA>1@H^}x*Gz+%P1zCNc&?e!62Kd2 z9FBpz%r%o)3ww}qg+3V6NaO_5Wo9~jI{Fl`GiXLHSV zJSJnaQk+aQ$MiXCIEY{ibs)OyT(f51@s)_Q^69Os^VZhY4MlLN;*Df31wAor@6A|! z9|!48jkI?sPx*E%Pc4vQ$BjVK4{U}s3R4M8hiD|B)x-zP%qxK$A{R}2_wGIy&8x6k zu&JHSMGH-AGZ&4u*q1C9O;|RI*b-@u*r}WFyUj&QJlV|lOPta5VVyylXEtks2eZS( zYig%96{)m}2K7hXW0v~M-DjQ!l^QAG%kh8dyB3zvrBgiGd-=}{;B(pONxs?glI>~F z+k4B?bUIQ8SdGOzft%qlI; zLI6ybc*VTovgLE2CH^-NC)^j^w_Z9tH5pKP&`R|#H<{-Qvusg!L;v6n#UdtVE;h&u z#ZqwCQecZDi{-$9yns!wISbxwKz83bl0HlJKdQ1;K)=Dx%I@2VyyoG|%RfNW#fqqA zGL-F@EBQDSTOZgN)QZor;*B1}u1Ik# ze$JDs{Mh-VJm`;gPO~&1ItWquYl6pl7Ht;(h-6Tos!=j{gOc5lxD96l3|aS;;{*1j zdtU~mAy&*h?rfefCpQpT%`gM=o@M1Lai#y6&8>*_ zHO6_hlYw)nibERFPw?pl1{JAa+yIL9;z~*yb2^jVp0dTA_`|ctAF|1)_#M0^`|_o#m1cOTL(75)Fzy$z6L*LC05{knUmXQq3mcV_l;cCoJ; z3+yZwAIq;LB2d!44GCZg!dx;N7DB@goiH-BOQk4kgHRDjEJ=`ttP%rRl#MD&Hj1PJ z$l|70k*q=_Ct8Y(#1bWv38gX|$uUex6*!?Hh><1Au?zYA&$;)$*ROlN7Aq`KQ@j1% zeed0mbIT5d$ir9HSmOEL0SNvX>@yYh7SRn(EuS3j@WXocq3F4G$BH zC5O5Wz<_RReDPDKeD&V5X#DD@PAS|Va;snZ)EKw=AL1?C>L17Jwc;+%4>NRbb@ug* zH7a9E%)Aarmk1##oj(SH@xUe-?7iz(@Jyg$8zkX~B0<^Vflgj_?j@aaMfU z3V?&_$yxCQE1*IzNZ38W3V#=J-I5ow>!`B{ktu0}G~7sK;xAa0o~)&LfB#tCx{Vja zpU7=M&qR5tUCv5$9ceDAXxYMDweueio03Pw*|k>7~n`<36JZ&Qbu8 zP9e>mNg(fQDl;kM{S0LrgMSB-sK!|cMLs=H8U}D1z{@LQn1ytLN3UmRN4u2S8Od~x zjE~o(2jrGA8HcUd*8wI6I=W<2u69M_ojv7 zF}_CQJ&uCZ#7$4h=YG~oZl?>U7f!c^19DFcNxxAYXEx5p{~vWh_(l&aVt=v=o1nSC z{d=YW8N3bSA#W;WvIqA#(Ai0}KLC9pALNS)PLx&zVwyK5(Jm`cfO@I#+(6Ena|oR%^)AlxZ7fO&sLT@fyX? zJE-#j>Ov_7P)c%^lE`mDE&=PmHjt_g6=OGybw~@`T7Vlt-VGMHp?Hf@0AkQWzW5Hm z%kIfLKRC<)cAq4?q@E$=Np^}`#w0w(z4-w6ZM<9SFpQC8LW1zQA*v0!*Kpq8tu0`I z$0p^$?nw<6d7a&(T!h?PK_JhuWy~v96+!mRm%_t}sD%&L=+P)DC=U29px^zP!8DvEt6^3SFSZwZfdb2PIeA2RQ5)$mroi9 z0J+Oq$MlGbfmUc$LpEInCqzm zUJXnW@Tp-q3_XY))m%uxp9SZGp>-eY#U%HA>K<~^A{&$)uyY1wgX@bJTC@Dkomsm) zS|r4E#F@RsyB^C2Pq8#k!YE#oj=IF#os0P_1cfnYDV&)E`oD{DD766kic=7pamgrR zuLAf?7oQ5i(fr0B6js>|Q13nV-x(i?vYbgMD9hREW%b@h%)|auqfEVLz=};L7p;1) zbXU9B_$yvDT-8GMEPQ3De}oI)HCp^1j;+{;#&KUuBI5lfPETr%V7K>zVPx$SwP*%R zCA-F`LhsTnjdXo+)V5h_GfuWSuYV|vbEI+FEb*Fz;4*Kozt?673~wu$jy7(i;E-Wv z7lXu3W;d<)hPxK%el$?US(A~Y)jQ|S4Z?w)`EtO{OH~xfCA^P3(8eyLD6Y7tLONh# z#w+fv7}FJ3++$JG6|2IJ`LmH}QU-4evq8Xa5;|$gmFD9E5+vSD_Pes+Y~Wjk-!?K_z1>ja&e=B$F%}yK*I6b7NOo>zv}Qow2KP{;s>Rik@pB`wL_)#MpDjkfAP`!{O!C;=7#7@W& zLB-)UTRu38+?Kg9SF|()dUiHfZwVZk&%1iWptItv;P`>~Wmep)`}dXir*!|G^8T4e zRPe5{;B!{+fCEQ!H;;ZX_f{Z`qY}vz=U(QX^uT=aocXO6fVFaqh8dTMDi8-|0V;^m zCu2zBB3}yQGg-ajH%Ol10j0|5U`S>#cJ!5pMh7ZtLeJG9;+11R`pfi?c|`Lb#|$dB;i5WkPn%^RTUIsP3k+8oinf4C3O?X$E}P}{IQ4fW_2xHO9# zh)+Qr7UbS5$Z;tndDJ^!06q#vec{m!c@L0KH>^OW^sGPxVHgNUi|0)G(Y-8R1j#gD zS`OW7rZIGOvybU^c z!*pAS@(dn?ZodD%{;VkoEI+V&=OJZO(NJtubn2kG-=SqkU+`S({QSguOJtxN|DgM- zPhof;JXgY9e)f!&V@XT*;%8qhH-JdVR|?osPO;#jPlvi*e zIt>Iw$Q*?2{7`_{5}*ROdU@X&Oa9r-_X)It=NMdZ=hCC)d|zTf&U2W>&P&_E2kX)Y{1X!KSXLjg z#+L23osil{?#k*Ap6J(EMs`5lqTXn*^YPHA&H>(~{Er}g6 z$5Lh)NPa&CFxU4JN~GiM)aBi37=oq=4SrY7Mtq8Ol+S4I8J!{~UN@KTCZK6Jg823t z@%41rPn)CN;oKduTuH1UEHVD^-QEir`77ia&R5_M$ ze146dKs9ulnzOgU;%9}>v-tu52IW9#@?R}523Ww9?laD}Fbep;q`W@r*$}`c%_&VA zi#j*zVlRe{NF2~i(o~GZs%i{^ zj%vYFRv`Vt2(@)3ddBk$pdH-xeHUz4BbfV&t&Hr>?GUp)`5rOTym;h?@}=|O#^BGH zJV*j!2&?Y<5RgJP%JxB^a{V1PDv-^0Kv!#S{ZSzXY4PZ%uVAm++D9WeRtG;ox!e9+ z)SM`8|A+E4kN!Sg^Y=^rQWlo{ZE3M#2K_~Yi>_mV>ndEw%4-nZ70Gw(UDgCOkeGtL zcguTeWlVDHYIv_D=MgS>`Rao!f)%Js=Bwvqa#`nMnEbeNGZ^O~S-SaPuZUtMJ&qZig!evC|1#bV(cub7t#OF4I%b*XYa2Y~wiZ|c_ zq!vgZ*yIPP&%$Mhd<;|7aSzmUl>%R?Oa(TX&oOtJP22}u+1i#lo}dI~@%Nf?cCKg7 zHAn3WMJ`@wmJfVRGR)jb$@hwxg|m`UNmV`qi}6CyRcTGiersh|)m$p)-Ym({C8q4a zk}Fu%d5)vOM*&4JHdlB#~j%Nr~7damkz{G<}@Jsz@ID9To?i8i=>xC32iR z+jLPH9a7>i*W4im8wtpN?Hp3RHY<-Hn)dYzzyOMq{wOENH;M^DN2i1lGhl-<+zgee zK!)vXZ|_2}k*A1-6dmU9zK`aMk7}_dM4aISmN18vU_FunLo(77k;qvCKQU#*%aVvN zW5vr{h#@v$o53-k$RQhFou9s%XP#x(dlE_Hr!C&gu_-{MwpIo-RJ%lSfSIPRy08Z? zqC<-Ms`aB5s36aFy?wQOwe8v{SlPt2Fk2jCe!>bw6P@Pt^Rx8_efEgMN{z9V&bW&2 z&^VDq#+N@m7Ge2?xKiv9mcJZt5g9)puHmv087y3I%%8wv5td=yB8jcAW|3w$tXHI& zHF*&i>S3uSC8b&@@IhKcD;*ai=RG+HulM?hIw*)fnHt_E%#|fgH*p^MT3(@zhhT4h_w;Cg61^75MEo>0O1ipQ7JE}Cep&x zMGYWnt}~VdEs&;ct41Eub+@~aji)vKg~q3l>81fSVM!Zf7eBn#c$SLwA-acFg=Ekz z$o!gT7Rm727;-1Sot2?&#Pu1DyUoM~TOwL#O?)<HQKP9wG9N>PwIh!=gJX?U*KOK%G!9eaXHXg)kiLyby4ero@wGHzq$ z(hk?5cd{feVMbD>*zyK$8bn9rnmuVt@w~Ghknp8fdkr`QcZ_jVO(sTa&hgG#pTwiQ zn|V?xPI6hVds0Wj@_ci+!ldpFzNa{5$&AUFW$4n%)35~}8@5f4vv?U&l~MW_Dzj_I zQJqPKW5`i0V^oGCp$t1&SM}M&gHB`X%$0(qWY0RhnLT`Wsh45eb|(<}TXcMH0%V$~ zeaUU;QpU8$**to=y2;BqU-5F5e%CO8XW<2$XH2&^D;XyX*JtG05liLFRsL4-Os!O$ z@QNqEVT79B;agVZ!2#Z9wSE;Q+k-qgi*400W!Z<#)cPwLu47XJ16(>s82f4!aaOB{ zvnu`;y(Q`*ZhOvv6C7D1K(JCaT#?ldap3ZjQp8cn7EY!k(Itk+Enz#Nu;8Wc2NOP7 z*ap(U4+s)A8ml6*h`9a0=-JVT8Y*<7GP)SIAsCG_Mkypw+zUm=Og&*?#nclX>UQ&; z5prf3@Q61EJ0sLKj$Z>$Ln^jKrv_v<*jlL>ecsPejFL#=C7fbd8s^nia~Cg>q9??Q zpFJuQv?Mm!%n3YNSFO-kgiDBm!^{eR*ijVRd;&!BWRx~z>rSQRJ(7_Y^UEMC=2t}Eky5@e22JAB zvek9`GP`U+M_qtJffi9Tn3R~tDl5|%;WiTEO7khzA8&o+f7EHq4T`XG8E7To=L#jX z5ZVckRE!?^1qD~QOScLbneLh)@$mabM~@ZCE(L`1-%)bG1^ ztRVcAFba>rUrKihzfYT1qvke2T2o^0x1ufc9?#i|gd%4-c^>h<%Z@VK*vyLo2r7Ll9H`AtIN9pSj2xj0f4fzlU3B`mq)n2B&OqX|9|y@<=W;0p$;c#0%lFj&P*bQ=s-6y9X8 za<-5etkibKTER!IxAob1HgK>UmMdjkmQxeR^!lvFmGUb%aX}~Gs(Ie!1hknLn+M?KL>`F# zUwo=*=jybloU0>Lf4TqihHSVXnb^B8A4u5;AY+*d1S&K3jALX{Ns$j{`nND-3m--D z<`zCG4U|$NK57QP+vuO5OJ=F|wEWQ0l@6n8$vzC{4&|Ve7Dv^fr|=9-YH3NATJNM? zk3u9yn!Qeq>=aaGf{#rGB>tix{-vI`ZG2*MWw(z{?KY*?zT1*lG$ru5nmyFOd^o-316c6p~) z1}_K9EQ^rk=VT4L5?B|a*6+v^d&y+w8Ki78}2 zsm_8Lua1H(t9#Sb>L^t_)p&J_y+d18_r|H!QL0SEaxI>L`^9V!XNm zUhh<0B*f}GoSs@2rE)fn*R`v+N?lA1{6pux`jt*L^(#%fU+J_;zrxTBSL9iDj>Bt_ z<9GpP@pyq=b)FqQ(K`270l^UC1>$Fc&BtT5%Ja6iVr&AzI9mhBEgurUc32ji;!I=* zuz>|dfbXogp+!DeRKl!kQO?TB2MU)aeQk#oXAC4*&o@?a&pP! zp9Mra>rlu`y4f&i?UceTq{2AxLYmvnYPIm7t@>K$UMX!F3W;{$#=nT$0MfDhLebSq ztYD`)vV?SCN*HF=^hSfVgRDw<*2$-L_WayqQ{K^bg_vdXuXYa+mUZr~NhuKchlV)2Mmi zYmwlTVTHLh=jM09$Q+%NL~gT@U9lhthDdC?23{Mm1|s{2d1yu4B&#ZhZW}9;@Pm8$ z9r%WWBa$b-Q?=JzwN2nArPC&vP4hvPaOI+-!uBtvGd06SelOb&ZTyi*u^MLEYVJ@ZW@SH?bNP{C0bW$Kd{8Is~fOH z-;uA5!T>B7$rE`uMC~jcv_kGJyElii=ibsiuBrwJ2QXim5A2Za6yGRk!nP^y<(`}I znF$nEvo>mDky{~79s``B{0UO<#g}_5bv$!+9=n=4>R84gu1_z=APzP)&jVix&VVyK zcfVUQ?2JOdfm?eVDVJCJnF$|iF%^U4^?n0@Bxl{@z_RCAG{1lwaeT1~VlXrju%Huoi7H%<_Y zpO=7k+JuY`FC2e7#{zX6Mz|4to>)TN*$o4C&a?OpzuF->IM;2Xr|0Z&R%4eWwnkjx~OUpnC)BemgWSyhtdT1Z=XTDaBp! zbrH$(S(#rLg!*X(E373ejNpSaWL&iPOoHwCYhf_5%6G3ylio#`8dg{rdy&;+Gkv@A zA?aiYUcv|3bn}qN60-$qM@y}EdT2x?RG?G8#v}DxGP-1WrIkU9F8RyiJfpUKAt_84j}|wJ6qtASh`xRnibF~1EO@=fS9x}AWdI%JH`QR)or!3 zf&03t{YP=NYb#}8+cvf7c-L)!*Iw^_8HZA5FG=$b3TxyYpk4F>OcPKqV~@wMYYPFj zGb`a`97G-LH9O%_vxNJ`S8?#Tv2Z2G+krc~ndYg&*&q=4Ym82Yx}I=xQVIt*sxKGl zyW}xW)x~LVR_e;9)~sqjBib>%uN*RAmYIKI_8*X{e4R|KK_;1#m-k=M3*eyc$~ln3r=amC)S(@=GC0n z)|@C!%pcVF%UW}y*AwRZ&TQV7kub;SYKqM}F_fK|v@hdO>O7`u)NX)5PUF`TeXP^n zq&?W8B?x4?`>#QWB5D#QmsQIN|UYu{2UGAP7vzF-6tfDNFw>RpgGr`jf z0$CVOI?O#@OpcaOPhGaM#0wKVozg_#i4T`+J=Z4aO74ZAlfrp-wxp^syh%|+>9z0n zI9;1Neln!ur=*+OspH9iDrs_6i>lXcY*W-x?5nWA`r3-e?#{~f*y{1loW$2{pmkN% z4I?;(%gBo{2Cy@4@O2wR@CMhs^cB+CnJf6ZjYE!LnAg;CNN&}mTiA(7bW7Kw zTfn#NN4F?kYf|1)I!)eg9^Dd;r7z;emR3+*9o6gw#o;QVTjqTzwdfW~D?_HIbL;lP%Qy>T7?rmQJ1I^~pdMAUZB6WYF)Ezh8o5gGTv8OdT< zSVS2ds>N?l3%;(4OkXi(Ht})jELfJ(HVa^u6oR{0pdRac%0`9suZc`bQ|DWRe!jGT zP%RuG4y{!W2W=&hX)0#Wna9MZ9bwBtA=*G|JHeFKZ(IOR@Ju7yTzrl#vGS#+zye)? zvz9{R5-X)?3SbaZr$B407U)X*6M?Q_714G0Fa_4t$oR@t*A(g+R$cuJQi&c-TNaL) z)xB0-E!36FEzxM3WbrOauiuP}%?JHYqSVex1{STN6})fbA>w3-wN+tk1Z@DR)Bkio z+m5`qn=8;yd?w_7j~C)OLM$z_#dzyzl^Idhxq-qODiZ>yYs>v+D?!4i%q@q&0q2z! zw^JWyT+|7Q5RMY7|qTcrpk^nIW?3{n;J0!mp@!xn??K+({`S0;6&KA z4P;1n-9{GNrLI#E@yZW!A>MroRWYwMJ93a8HV z`HZjin)H~ure1cs+y;DII_+!f)@f}72GquDUum5-!SG7!vS79C${ zo&Mr0lIMk!#=cWIb<)I2K3(^&Z`(qliZf(^G283qkd107IGOO^1`EYi^$sfbRrm$Y9zW^1U&L!_JrX58Fr4vq$?(_CN0 z(J?u#+qNLC_p}BZ!g#W)c9lSo%D^|(_3RuAO@fd{RA?U5mqXXPc2mFEw9?9y@W6uo zNZZ}2qNKHxP9aK@`nzrW&?>u1N_081-T4u^%FE78 z)lm{Ij%VLccF4SveIu+SrR*Cx$j7s9(0QEur0K+L&y|vKfkcasy%=ohc=7ROv-yZ; zy=;*blffxbX-hd8wd_G2NX~?`ev`^FU6JpyEavGEUVY}p&oe4=-s^Qzs~3OpTVL=q zmgKr$S3)Cm|KxV1k?x~}b(O~8?Tv-M_gHf_dnEhNDoHq-kF@xuQ(wz0D=L5rX`i!7 zI@Ghp=YQ@BLf)TRK2$$yK-n)nYidqL%(JiOOqvokuiX{xs=dk7nwF&VYz=J&bCJ% zyHZO6swA*XP`#%d!Qwq_a|oWCbdwo>O107Gv6>lbn>3b26URN^`5c=EuJt%3zp=?A+lPnFC z^5cUyMyhR5(t_=5i64YtpG=;z{QsIV0ag8E=V9C~DYaf9w` zM2VAN+pH_%X?1Q`J%7n(o@tIkgkwWE%LVS(;K&bOm1&bz7oa_kX-dAw8OkwD*`Te| zY*xxK7@TIQc-CquiVEjkA`N3H`P}vVag=*>2@ZwOF;}pY$20jSm!upRceNWdgLrtt zk|b(8GXd?4#PD`vhn)H9t(~Y@Q7OGE+)PIiq?od=5Vl-0Q4#)zrc5k)sAGbs#<-Rp@c0Z23<~6 z%77F5=gIr8c>~lOWe0R;1dCk~WOf4x;@J~30(DHtuXA}2kercqp0gB}5lK3{l#>DD z0Ut{c!hnC|SY6~Ck->%0%>Dg&wr6S*__wU$qDk?66tjPm4yHFb{FN+y6-K`0Wj^nk zXZ6J=;8igG89$jY_ZRYIgOBI1-+;V+;H3AinQUseDji&BL0?=I*#XJu> zgu;kZ1jP__Oa=GOQ0zVsWOzPHLI}F6?kJPLesB;dOGK9}5sV8ZilrLaBl(<8nrY_q zXoao=j4N0uPvXT8%La(@ueYroP=g_cMmK0AK%jeZ4NAh}JXe3zea95e%R)$!G247K zLtPs7G=(!WKyQqQn~TZ2ZOr1pFa^!E3=Rhi=KG5;zWBXAI1&jdaI(o+UyUKB3dQn1 zdK$;J*rZO`*fZ-7$v296IUW9O)BPCT_I93Jl9 zX76X2kj$C|rmBGfGs%8~iEp!~HS#t`V$bKhG~5p3>(J?4Ha;<8ADl#@RC)j7D6;HA zG4P$QCU;Tl_rsVWM$WC}FJ=CuRJ=qdz{-U(hm0_h0BAbek1lS*fH_&UtFyi7x?CCU z*TX$vHb#bY2V4f2BS|Vg5+HbY15){Ap|FlpsM$=DD9k%fDq<2M6;mj6L{uad4pZ5% zov*8%`pk7rQd6L2YVpRy0g2PNeYfTDnN2_X`c^vNb z*7;w~o4W<~E6ve9vpJ73=fnMw>j6x=wb)JgYG4mOlsd@L^wa=vu%i-D!T`WGbI!?o z0*K^hMvYCxSwpm9#b2MChu|{|U7F_M+gxY(SW^Q%J33&;W9U>f4bN$GY5W4aPrwtLXiKc`*!XfK@bPeLfY#Yf855h?*^L4hUIf!brWRQ)u z)-W2Nsiti-dI;%C-}i{ncSG03?_Ea7Ee*QG|E-JH4aBCurZcvd7EX7DhvYkmNQ|L6 z-r--@C%b)wTN^hU^qtz(cUdP>hJf8Cf`Rh-BDI$F2dxmY;^XWPHkPhT) zcKFr}#R(3WFzuDW?$u!Tijia2Du{#kES&v7ZZD2zin9!j8c{+Xka&9ZtUS#H@|Kbh zB+o*D)TQ8kWdX96g7>5XZrmNm<|FA0dQZ#_2FvP+%8#q+ zB#H`AOoTm^nKaszQk+$%)42Wlk)rr3bDEWN3Mh@yYslur7=+#ndg)X_b9_Yi26!M5 zTh77bjGGQ&N$OjHHhQ<@#Hkj^Gn88kHUZu;eykjwKD@Y;YQdcoKUN>{b}=>CsXWhz za{mBAwV9vk?~@MB-y9-rSn>R@rX(#9`+A=~6XG03(N|#hVKdUWTpKa*XsA3;ZE5;V z!HKhOnoXQ+)3V|m&lQ=>tl;sPm9jM}(#RK3x_aKnoaqf#Ktd>B{ZbING0bUYC>?i1 zol~XBj@-vL2JOPIsK$$#&+RS5j7-Eu_pu#lbZ&T~tD2S{jfKRs`3R4tPVL*JCgWee z-`JcqI|g=ye>X8@Sa|v9Lb3i|O2NqI?=vrt$N>X)M)QiE!3@F@5Z^jh@ob(AZ(7Jl zvcI%MCBb{MY1SZ^pH(O}=oCafV67d7X*lZ?L@AU#?xBQnXx2+#C)g?`a-|8fHX1`b zY5GC;(GQ9q6{D~7N<&lyAz>W``tq`1CyMS{)O|vXifS?)RT67jx0>!$+gBRK$*hhO zskZg==rbx)Z8=DY43PeXP8_Ry&M&QJENsykDa={%e5FFLC-#q6lS-ARsFDLhpqS!P zGgbMRUs{zPuqwZ8RX%RzKF$})Dru=w<-77DEc_1Tu%$}#K|RT@PI7$Md<{4bBwKE> zxf|XrWY8iy(V+nyG`6byd?-&4gR;i%?&}D%DDEYk(Qm>8#=%KAk6frX!n?F1;mmo`ak3BF z6$4ZeldbomTor@N&P(M~wbxXQn5#{?F$rh2V6+LamQ>Wk*vImNF%bvpGc%e|!honf zK_zxQj@Y0;wNaNCE2r09UV)HHrWPQw`7mgxGp40D=u;h`%ieee@}cuyK3?|==17-I z;INduM~X+7*j0G%55Rkm=A8?80OcmZjfRxXBzxn{x*er%tLTX0=$Jv|f~?6gb4=&& z9UC5(H0TbG@$dLTeoXQfGoX=FK{%wXdK31!DM8@bbnR(Kl7_@i3m z3dcAz4dM7^=GkUl^DJ%;?BX%bRSBRYO2ZqpR!;R5WK5iEq?<4U&c&SPt9D>8;{|48 z#Gq5)>E}cwj zo>D;%$%mshpv(&~4>h zu6Q{!IfJIU4%2qL8Y76Ak|1u)Z_Q`qIT1mm8{y!*R%&pto#`LI(Ko~2fcL7jazM0V zYRm!i!$A&R^qB*rV=z{&^$gd=Or+sJJ$R2HpN0H*PB%+S+EfkGMj5@S8g}@%-GDZ| zFix%b7$*C07~hg*fuP^Q*BMWUYe>=BjBXaI1k-oSTbV{8r<=nzQ?(RXBB!;BBp30x zC#lr8)73){SGcLLB=>fL$6SENRvk+!ytFPHo@M%l$Hrvld?6t5+PSGjH#e2&=Bh*| zuPO+<;?%|=^g^A*>GZ|Bv0tJw0%o9zzy<)Xfl|aBgt5`rxNL$1jJ`?@)D1|3KelBf zkc7)F=u1U(Pw$tUjHS!)=2p{TQ{gdXqM{|_xRx)Fuk;&qliC87%Ay%yi6VyyFSW=P z6c>AXOMWBKU*tN5@VM?T>atv^s$4>dwr~Sx`AO^LTU1?N;;MXD)H5ubwZS_k@}bdfreQQJoMSF;gr%Q3=Vhgial5=Gw-4uC$G9CGgLS*( zs_zbdp2l5vf>lSE7q8-9H@{`L8rh-Q5=e2%S3z!Ui|QYp0%7EN8Y?{x+(8!yB&Y%p zAOh$-ZW{*Zh;o9$&U=d%EB@#TOa-f@GS;ESA0m8 z#0gdyhX@L-CR-)oirbB5I`O_$@=hw0yN|k5iK*&R)Px4IetiftT6@K5NbPy&jIDFt za$lbT>;A%sxqWD4(GGXy>N3N!L7Jd-WeiH#MMM0=iS%-lypl&HdI#ls1d|duM5*iV zOWabJb&TDAz)V;o3V7wE8(wDL_~ZsbmN5N)iVzzkPi zHldlT@J0{b;cApe(!4c~I>OOBNPm0{Q7;XX0uylF2n+{?;2mT%cBv%Mt8$Vi*@?Tv zO%9I2m1c{%`yymZ2r9fvt|IDKJ=1R+#8(CJz{lK;6?^&xuR;kM{!Jo zc^G)&Jv|3@99H5zeFt_NWCZpVE)r{4G02A+7Y+2`MvN$N2*Ovqm_f`s@0qFb9wdo8 z(~P-eW8!n)$)br+Rs46wxRn>c7tH%nVGZUN3HLliz=l>C2pov8D(66v=>^uKxsnm4 zNvyD-h^)qfA_Eqlz$ca5*+5egVeNnx13dRR_V?{ zz8a8VF27~44l=w-ea-S$oxuR&8qXD7!@ic*c=>ee<0I#5edlX9wfbT*`KzQv>g(1; z^H?t6vBbqLkEOyi6%+QV1zza#g6f}DtbUfSYS|453lYZL4}_8l!&=npe|*&&EeQ{M z{xNY(-rADg&lMLfvk-L!c9JAw|nxV#!Yd z#P7DPSwK&Z6!k*o;y0=j7FDZ749NndfZ&qY9y4gkx?uyVkL&x1x{<`!co)?$q)X2= z_=Wta75BLxtq`pZB;ab@d{N$}5u~(Yq_ivNjrM3+jGB0FMV-iV5&;9)vwYRye-f9}9}44%w6ho|%bx#unDPYS{ZOeUMRzSTH4 znq%SvQOTSHnUf^8crH+ic@gBxLzE!*nzqDKbw^S-G3D890Mi9CN72Y=2)LLQ2-q;5d73O5(x zQML*Vqe=$)Q=q_Y#QNm76BJ3*<&|Ig)kc1lc(e~U8{rPU-0mN%#q zCdoR!uK9_}tZQy7@Q0op6*)vzcE@W0cjxAHzg5d=F*t4*LdlOxGiwfSr4gcTZ8j1$W5YW_tggz3Z zeiD5p@WrT~r1LhTG&$?cA~02c6i$;U#`K0p5O78&b^{rhL2EbQVhkG=0fF>0;>9R^ z@MTpu5SSX!BAA}{su4P|X78u7iP%6Kl?EBxiQ@@n9+9k7<+1hT3j4E_?jVDa$8ka+&={T8BAnGme8t zYz%k{URB7Mi~x3N@D4=$ZVtHw0fF#+ZmtTv2@La;zo(+3bNeo)$38cBxQna;KlhDA zvoZ`8Y%Pc4Uo(=34M@pyN*;G;A_!9-RfHx#Tf!$oGt98ZCCHyEjWB(u0?CfC0=kk$ zA7}O~gfima@zc$-0M?D0!%#Bq@3vmL+%4x{Ur;tBjJPXCES?6Zn zdgCl|L;ZjbW+2C!K{-@ZhYk1VhzP*qL`a29a2-i7{ei)p2<#j^`sorKY2j zgu$k$Bsubd3V#bLYK+ZLDNSHlZyYIGC#W<^$XrLIhy@F2)Qe$V62b}-KF<0QVZ?Zs z*#xFe1q-*rpjb^sya|F4gGLd1ES!FH+OY6I1lOt?e}S@Wt&i*BDmpm(n5Hy?{vnO|lA;bahtHg^$EshR#}<9vR^ zW6Fc}aFgHt0S|62AD}+ue)oGk7?uyqbrD6Z_-Jn#+9+Nn z+grxsqm&V+Wl_KR=qj|#c*kfNqO8#JE{}|DsCdkkC&+hCfj>b?XfAK#*Zp% zu+0gM#M=_o?Ew=x*7;vlWxG;krQ@}%Lo6xweA4QMpmR`K8c$fHKSPnRhiTSN8WYs-70&0wtC6??+( zN&g+ZnzC|O^Qk(3fklhmovfQjU=1ZUNLz0#?D0%&~ zT@$Tx*929pXE_9?nuw*!5alN|5JhaYQeZ%O3i6yUsb{dCJp6j@}u@@y#__9W+RLu^bNVUeq_v3Z4h zQmS#|0b6zklqP1vTs@|}R8O`P$e%{gKd#5P-aF@uUTM-REjN9rn%0uH!OY?Tw_c_Tb* zF-SIrk`UAi>~rP?{Z;H!&LMzphc7y$0dW90TvpEYmVO%M-FD@E-g%I*B5Cz9 z)0oXBKXfL#Lr@z{pSQUd00+R#r+Fr-SHdA9Wa0tLxfy=H(wWI1%mx1GSNVDx5vORP zIXE4`U;e7omW+kp-l$dC-UkGpLU^&g56w=qE=gsvh~R!EyWY@R9fhMAUUxya7HSlF zZl8ZW`THUxQ2q|S{4uJ!y5R8m@yuR*5FPeNX$lQ80+WL z>T5@AF8bU|_ps=DdrgW*KuxwzDo@V>a6>EaGi!wDXoW+LG{*|MV!}NjZNQM6rC}|R z(M7>Y=>qe<5m&?^!)tP82w#4yopl|LUlMCnoO@!8BQwiEA#p|aVn<2yQJ;KXv4 zk#9_!^kIUmBJroad2`MLp#o3}_R3dtz`5&uP#=QcdSKggcxJjC?2t7TXC7!<;GL9T z_@YMM%|TVAH?Hy{9Uf6-Nd_q6-_F0_`H5NC!q0HNGLYE|g{5y+EY}EV3-gj$i8uw7MoLra4%NUOBdh~l#@VC%2hJXY zAr#mnGRmGr_89$O0=0EbE;Ktu&L~fEfiBw92arDc=hzn>?w%)E;E8se;^M2srv@ZyIq*1%p%zej1W@ z4SfqYZw>ZSPhMAL>gwccMc*&}#^?D+wdh-ZR?io19+9f>xv$3AUOj)h&1_Q)5`6R9`bak*!Hke#MK_!zXKl{tgxdqddr7gEUB&~TxsPbIv!l-ow?0BhvreAF!TH!12`@FL_ z*XU%e=FDunYwiNe+$^sElLJwiG395P;6##|D>ZKJ{CdMR-Hu&hdfe7%q9E9*R!z9t zv)JJz=#b8Ac}hi#t%5aX(W^o&cNxm0W&94&dVHtkbS`1S?v=-Q&x zuU4Tu`sHt;CN#bZ#9&g5FYA|1{z7X+HyNpQ^NE()`nv8YB~w646}^z5JZHUuTs(K0 zl_xLh3A>UXb=_u90_HP5q-HUDKEaCJWa^NKugnBat56x;Y8HpeNod~D=-k!(jM_HQ zrgtA>2KZRWq4jA;7`ky=qdk;Ya0BFE(rF$XNywoIpF|ER2$RU6NR@3N$2^|#ID2_N z4LBf2^!X>`uqbX#ZZT4Ubc0y|u9_9$TwtV{!pT_?1x?b5C}>-=(j{0Z z%}TF6D{)mg%}U%_yAiD{#92|Tue4cFKnOC-0RMgh;KcCEdnRfM<3V&~Qrlq{`uS3` z2x<9jxL7WvV0KP#>Z#s~az>D?p1#`aBiWNe3Q<(#lu~|Z-S5@n!eI;l>s4zWRnOfHa&@uk_y{G z$c4VLRtGjQTSv$kB#{tu*A|k!9}!ZuUMqy0%DjVQ56t`OB)c(hDhkY72YQqUDXA~K zAXU)D*cej6UIjL?WYYV9X7{&EZ^5D(Qx`PnAiq!rdpDw;O3~ZqDVV%giM zaFww%`M_~c>yfTW5RD`KK~(aXOUHJa{y6#mo+XR|g7dui zD0a&}{dm4+9vb{-d22oUntXMn4J5i*mb_!!h|kxvFEtsFavebIsBozlPnehnGFh?W zs;G21l>!3^&C(N)XLmGETuskpU2nnE%xt~EhA)imM$2-?(9~~|6JCCGR&E?WSJ+ir z(Jh6txQVneKI)a9q&@UXfRz+e<0eVD+#Cf_Iex={w7HV`NxGoa$$Dk_p~Vxjm7 zhBBM4*I5MkZwbI^4zuDG+`4~e#Tt$G6G*lSCzu3BpG|Clzz3zV2Gs|AGB23M0Oo{p zX=YD1?`m47P}`qjr-^2_|6^jfA8iGd-?Z_^xQqBv#g0$5?rOdultkP9bN!-i|G)ZG zeI%aw|8zZXef$=Y#rY!fM(TSQ22TSsPQwT!f&1DJHi!zLgp)-mcdI3;GM}jo<1wrc z=wesoQNjAa@m)dEZa`8=gMg&8Xh0k!2;S0Nh`{(u^1`4nJK$_91R@> zg^fbPFB&fqVOyIOau!ya>&We~%KYhxp`q-waWs4eCi6w3A7WEsGO+A`hF=EpM7plv zf6dVFpQO|r;MpB~i1jAI0tbIZzu@36>lYk+8b{3+bS=XEuEsBMX##6f;|S^NcEaNa zD2s8!b$*jOE!|G(e_SY^`n{z!OHd@8p&QgtlWl5?=))CEtHQ#T7vT|WEI-XH^w3I=F5A<%)o(Ipha}S$SCo`-^||zh2P_ zS+{R+3zcW%Drg9ln5ch>3JRUfW)QV2q7(jPjK-6QzxbSAwOI8k|4rvT+Q94&C-L(W zm#=8g!#2Ca>fzMR?9E$Be)Oke%l5{}Ozc}7;(w5kM25}=cfG0qPKwybAcq9+h-2Zu zB7XMn{=OcYJS3cU$Q9GLlKSJ)ZUCA381^(6&nW1CPXW7L0ILfu3X zP!AcH>);MTR5I5jnTB6%TCAh77k-)~8@KjykqXM^>6DpJ$u11b3uyr<7 zhng0HtU#(e&?mN`6S#X3oj|>Jd#t7cQ2v-veL|IIy|JhoY^eeyACtx)44R(Nr=ZMJMR|4pe}OGt^W7>8Y@G_jhg2 zY!4YSx5K2E62nFPA_KY@O6Mc@LlKWEqEwx^(#Z`Lx*}*CB>IX2oRnFj2B+|;T8e&R z)KF6<$kXc%;;0@O>Q)`Z&t_EzaSbNqMF08!?TRG-*W|G$JIFo#k2HH9Mg>^)<)U|h z6RgTK)*JukE2mgi;?~9HAARMNdH`&XHU2POuNJRmEflf&AD3d2bUP*yZ;b?tmg%Zc zRvd|CPQ+Hg~%>5>zbjO9u!t2j%OGV1bYkx`426;BbF zykyf~6PByn=9EC{EkP(Xa~VA@sYax6*bM}Gro+pP33lDxzd>O_hG-roenaskQvr(o z0Jz!TWAnyB3+T@JtU*Q$w5Aelpd+%kbIJ&_q!36?Y!pB9TUUfFx2wT7^*`8q7@je% zar~l0{4Q^ud6`*n~)+3!(1$%v<~WiYLEfo%~;f z(#`&lsFMy1Bgx02lo?;Uaq0pyBR%@sjf%(CZd_i)wHu@QZJO7R=3~t&X+ASXnl-bU zDDu>4x!0<_m39~{Ebr#Cshi_gR$N8kF|1=-2G%qVvaw+`v!IELhM-9vj6qYYzWNEK zpBTg7$~H2=;HhSU!BZzpFqy48F~OjZDEdopZ;AU(RsZ0tS434e z)9=*h$bipW9Rt4C88CKeV~hd2(lgG0RaR%fDw|}$6Q;`)2E2*sQloTniLEI8ZD#5O zVN_flEI^BB!>ty#0^|&DI&D|&xE)HOYYT||+W^F02`tZSKi-$RFv;9&+&5CxG$f>s zX~Ju58+~~*`y-6h@97`x{a0IXfDRm>?rw1=TIT=?8FPjjNv3omsC=CMrJ*PK$LnYA zmLH}HIsHm+i#z?Mkora*KY3fsI-bZD zUC(~Isf12=b&s{4Z4UPoI&yF$Gz%wNY!l7QbuNZpW45eh2+clA^RxuzpUj|`R&mLk zCQRetv^sVPweB6dc(gg{Umh)=K1hy-B40k;jyWD+!f)b~9!q*d9!2Z{MO7A``}!5h zFw#M~40{O7E1od@R98$lKm|_~-)-1R(5yndn=PrB;%3Aev(Tf3m6W{1A7DM2VH%eL z^fEXn!z4~!V2A2WDhm_)rD!<23&6Jap&R7rrkvudsD5?BPkltkB{KrPH6qq~i&A5D zaj6Ycv-c>E5Xf?O|3Q|rUGLt*U@3ZQAAMA@K0y;!O8Gj;zjHd&e@5sg)cJ5 z=wLOKvKq*PA;E?02WSp^%sgA?vQrfdz!^Vf`emC`2kN7<)wT%~u+_H80G+z0ApxnH zt$)5vk(2&Pu-k6wxbWog)(MFb0bLl4b|+}~d;#Irv?aE*Kk+)GE&Qa#47IfL-QkM- zHnHXi`7cSA?d5&34M3%t>!0brN7u?#)#FdOs)+kv|IldB;{M;0FNVye@8Mg{)M1Wz zfBn6dzEqj2zMFu5pW`>k(_<6kuV{OCKm=`r)!wGiBTHo(2X33iO|pUjwpl!`x~h+C zZE!}%$y~POg9xMIbIt(X8?Ve40E@Xm56IqwvqYZkFPi@AeB=9j?^!7RrOU9-y9M{| z-hZ)BeAM~NZIQqH&EEGVC&f(+=PH~OM=E+DHC&xec$)K56Io6A_IIWrV?Wk^Pi^SK&#@RdZoBCY{j(L(2NsA~vDNzgsaI7AD90!B+2hLgQ zodMMq_iVKgGi|jHp=?wFa)VyRCbx`fAN)_xbtQDP188xajI6G(XV$x z63jb+Bul5W9A=u>z;l=N%F`cVwnM{>F)l2 z!f`ZiZ;5@Iz4h07e@*W#Agm+pxak=K8IgydB?G18;?t}jP@n2Vl4-AtF|yha3hla) z#%HXG%?Q<qE(;{#~| zZqpDy{G1%l3deQ^B0%!5mm?@(A`5QXyGW_wezB1sZHj$Jl`{tV=?H@AG*xw>UAp)* zs!Lq&;l!{*jvHF*mD?*2{SGl0E`ngXX- z3FNd_fNcn{uv41ao9{a(=-Pj8TZ4LvZ@H|Imve^P$|NpJgQ_9SAIe!w%^LF-2(!VM z#Pz1>gtt7Hu|sIr2=*X{wU%AHdZDvH_dvGo z3LGV<0gXZ*#{~|FgFf$w@+w0VSqvZ+r|JL|gy|%E)WTwlj_@VKQxUDA(j{WAz+vs>RocDPpO7Y%?T)s2q#H#x$v&hw`MK zoAgJOuBhhl8-;6`z^5_<58x(=G7<~qIz%#^{E*BB42U&1A7wFUcltlHOyZ$R9k3%| z<{goJH{!gfdn8=lo{CH>O2T-~gqCI34!|#Qv zFegLRwS2cB58`Ne1OE=UPDS6kLXWS)Za{w{6Pxx8i9H}HExoGmBeFG3ORpO5k&+U@ z_CA_SB&U#5CrZa`nskijRZTi>CLgzSs2_1);z5*x#KfA?hsiOUuQ3};j*O1V160{H zas*>3GDp^Z1m`DZ7_9JbFP+i;`urdniBTnuyifC@W-LFb2-#7#hFTzB0p(n;XvS@B zH0$=FW`1ve_+jMm4G)iQ$XCu?et39TnF5s7fof4rm3v~Bc9rWisxP>(I|*AgfJhwv8ry3 z_&ITYcq2bAkQB(jclbPk6~7tdj2g74y@M_}HTavTvM20}Jay|Qu+5a|#Co8i&& z+t9KWF`jUaSQ1uPiYAXNl~Beqz9aHlkU1Q{>+pbu+-D{Od5lH7O9C)W$pc zezJ{smTj1~1ouT~gT!mrh6Dz@krPg(Bnl>E;+U5*$pR$ugA*S3+3!bda4+7#1e$Mc zWaEv1vtBtNL&0=UgdEY#%c0;yl=HJ5FfI}PG0Gw2TgJ*E{Nt4Kb9Ag6!oQVrer}89 zA38T_nOUj-gsyc41bujwuF1@*pS}4(3hD5xxf2ntJ43z2$%$0y zD!ffpg=z0B_SK1^UX>{5M1Cw(z*#Nf>h@fxe&|Caimx5WJpclug9)8E^+1rHH9{u2 z8wsJhI(kEkC_uiQ-{`2R)R&qQy?pdcAO8<`M=RWV41tdtHp>c4+}c?8l0#11pvtZ3 zOXwv$I9&0uxV2`0o=$RWO(rmlulr;&TkDhq;K*>ioY@MK9FamGPh4@0o5ZaV9aJ28 z(MsHUuH@Eq&A4@E18xm|57)9&B9y;eZas%=GH!h^=!N3e8u@12`k)bfom-Q_tK`;+ zCj*r{l8fM#Ff3sc-1?~U>C6h5W?_9S700taZq|xOSI&WXh@88-`!l+m8y?jiabU_r z#hRSu{Ex_GCx9GHh5PLwfb`>eUFhaB{Wt6SBHES|rVdt9W~YHTZ-29RJMOc4 z`)@X`d$ZW&O?=V1h(>&1bQ9V$d`5Y(ZZf>jhBq(pLf?+T;3Q_Hu;AcExl?UXXI&E8 zs#-S{rDZo(a8tfM5?n{?{xKT1w|3C(=fi0rEU>ZdZ`48e<}{Fgez0KAT8B0dj-3WV z3b(u)P6N?PExj}!P6GkH@iY*gq|-nqY7q~$TyQ|_U^op#NDu68)iEGk-%pC9n<&z0 zAjj0P+j4#y0`5)utyX*s_oL%yv@|GoFqa==qv-H<`0jB-m$jTX+M`1fSe$*K6+|-L zLo4x*?~Y#}DEtsPVe&&d4P=P*ueU}WJ8J?o9UCOs+_^8PXv`FGDR#*6 zGaggI&_;esehW>4Yn&@Wj+t<-2!xie$8$xFq7w*(DLaadC^Nw+S!QD{DjS+3BHtet z$PR=BG7=Rbkz2(I%WN{I@w5K()a(c_>#if7#s}0VuM%i~9n2HaE32UWa;!y7(&I{;-L)A&q z2ira7?j*}(S#dX&oFzVwoW<{3@(0<3h~M%}qE z#1N7z2Oq4tY*_o-Ew&?dX&0jh+SoD~!^%dyN7v40nzDMubh z!|41ec^GlqNowo(8S!rUFRP<9wJMG->TdC#(V8jZ_X`-KbU1j8#IfKqeF{hTu4K{S z8q~TsgG`I(yF}Gu2vMG_^VL(@IO8L}qw)8@dg?B_ z^-U;0`PFh0%8$kCmEtwN2}NpL7_rW*I4&Mt9r2CEv|GWorFG7%Sc_#YoGGi5kn$rs z{rr?I%(1nN2nJ;hNVFo?T=41i#v&$Y;5Ff6bF$gmX_=HNT2$p`PlVorp^Bx+_Kf9%G;@fq}ioe{pzj7_n0P`ehb0!-~Qd3z|mMVH#_} zhCpo_D{Qs`u9MMNVGE9Xlm~Ur;vSZu%F}bco_1%L7Wv}_-zRY2iIGtJly6>Q%dL5Q zNuWw}%W{QSYb$8KsL_?1Q@r!ym_cbt#A17lG(*w$6?6JPM&DPl-bmPdyt-X zAri0(J58I&VmKibU0a#Z!4Hn_6_k}aDXp&pum~zCedJi5Qxua>)zDuRy3dVG`73_p4uMyje1J&?#KA?77Y&OL}5-O)!kWP zHwFsz!8K|t15*v~jfO`%Av@(?$u?6^im1Lsbta^%j5#O^OXkk}3_jdMM#hdA=Oi+e zc1_ba3bC8Xj!6Qio@)-IwAa}t6>2KOi3+yjCIKc-lfql-p1_SpIWol{+m-qI5U_~r$cd_Jjr>mp?-e0Br7C@*H?P8OoUt&X zm%^dLHWpBd#XKEPLToZOcqhsoMCB+U#XE0zeTq=Z^MMrg1JaE9KbWMFe*(gXJ; z_76PThW2T%YSjwuQ&YlJjBB3=F?$CPUww5k>TnV6g5u3#0>eddc9Wt4n-to=M#1lx z3+daL`Og}f$bVramy%+K$H_{{u*_D`{H}&3qUd~ALlYrAQ6Zear7}s|??F+ZNrD|) zxbpaqCI=5XztPL<6rE6$Izq45=hm0psWLE+HGb+7!M<`m^~d8ak3JT!_Z4@#xrN;x z^;8|Xazf2j%`IzRDqPZNGGrw$sVtgXf)Pc5wT_cLmEP&ks$It|R&g9nzuXr-ztexiOszLU zu&-1xOBHEMg3~^nQ0SK4CG9FtQnIb>UR$`jZ`u^AmRwmz6kIgEPE3n%YXR!v$fIU z!=ruq9t*kVZslQu1oje~dk0E^|V->nl zVbuOdqHUiM5&yq2QWx+eWl;FBsR`D^INYKuMkZDXZ1?;2>Q<$pI6wy&CNo5*O zTN;riAjI2%8HH^PPqat)%R+KS2`lBElz_nM^920vV=JC(kyL--k7qg5sP&;%IMk?h z1kEGI%oqiEW<=6hR86%!K!1E@Y%2( zhko^8ojoj0tT=r&oE3!ouwirt%#*$nd9c?@8?>TR)V5?*oT9cXOAI><-8N=boT9TR z8ky?m_-466+isKyUhWBH0}$c7a){bFMwJ007JZ~XZh@|*?>5pl4`ay&s&P#hH-R?t z@PxxK^I0=O%w?sdfq)xL5!;vR==;M@c@2DjT4{y%!O4Q_PiLwG2xY~M=W`u4knZvN z>AZn(Z=(#Fm$4o(L;QA?A*O7zqS?w2Irh>xz6(-WgA$}WOrFDhg}w(z?O5O0i80o9 zIPz9~$0fV%zB5;TmWLT^tW%pS(VPU$ylqZ`qUKOcD@1{V{BGtatDLZ7JDk*QcEi~! zW1d|@jYjh93ic9O!Ltjk9%}^8E-P>5*&RD-Me&F@cE^rdVRpxkT48oAU9+D$Vuo>N*>KI==A4N0s+(-ESF$E zj4hE;Y)DJmJ~Zuhv6pOXfWKq~CIaBvV$M|P-Now|vCjwln+UVAi6c8t># zggy98H=N~#j0@*oZGJ?SjL-6jtiNH0S7oP)$>Xc^qA&>Gm*pIU)nF&0^*2sGX_BHm z(u&vio!3Lv91gcCav#^dw6MV$V}-Q2H|lVAet)LP$UsE^YCEDSlj@i7a^Xkko3nNV z6{l>D898F2+x?^S-}?@oaQpVWd3My+)`Pk{;v`ZuF;OoPTGHB>FDdZ&Q&tEV!o4a@ z(z<*gX^lI^U>fx_V6A-IpHdO|h zO;4Bv?&l<_jlp-c6s^XP*;_PclDjQ&V$CTqZL&E^>&?-cL+NLmM|u;LTy47MymP%u}o$3gdaLD2HncBgApFNE$FHSod6&4)i-yU z+}8=XR*TP))p(KhQ6WV-M3T~q(3fn`slb@B0VoJpNeOywT8UZs$PgQ-=8@7`R~t{M zmyOfi$C%SQKmMo$DmO!g2qRZ#&7Aelr=g%h$mo3h*FFyuTFv?5(X;Np51^}xiQ?Z~ z{(^^S;df*^J!cXc>yl?wH*O~DribC6p6aMzJuyYaZg>)IE?pAid%)Za*;_POpZNj> z_j1Lz3XXaHBYGp}ichqK`kTM0H}FVsO$Sb9r|fc-EBu`l4!AmDS0}iV&zAN-`QOv) zx1&%-+=>d&HZaQ-9{?RO%QPSAjhI!f!{#V32hC5wPRFLQ4#Op{VBs}>b_zZ=yLCLRVIB+BL=yuoF{_v`BZ0JQT_M(ke!} zPu`anr~jB_P2QLQ)V81rupFq=^Xf3f3PfWzqA3t{_)Ig{Mc&WHN@TJFy;|rFfP0=q zFIwCqH;D`t9dfGo@SDZKsB>1vVon@TDuaVZw~Wdh9IfY@5wbG4INk0nYYK;nDU1E;(WjFAXUnF;xh|1 zYK9B~Z7dC;GAPVL5E_HY>&jr%-KMgy%+pvvkK z=m42Efws}Ig|Sl!1=!$n*=2t5>hN2;KaH*9z(CrMY8>Rpe;-(B7m>qiCmdvB@QILK z0PpoXf&ZRmsik!?xod0{#h3=uEsIb%H(Y=q=(qk6H>1)s%M3rbbg&(D@XRwn z6vMR7TZ`GL)~URWu*SiR=SHHfc#-K4>F{2z$Q+gY;Nah}&C|AGJWLP|%{|k6SetRr zjXIYfCZKrnZ7h`YbB;wdoa*kH=Z6hdz;Qs-AX$y_UD9dsd|X>v6+o_nRuSFTgjR7F z?vPA(K%@pK*#6%GG1jvengG<9pA3ShnW4tuLBC>7g$pRsI+DgBN?`Sp0iBEBKvq2A z^R9)F7PD>zFoFjyn_Ry5us(dEse|tyMr~x_>|rWvVeisrJ1$L_rua=;A@Fe5$en5w z^0X*Kn;*BP5STz~bH*YU?lxp9f>Ka%N$P--c=Zqv%mvquoOz7-m*E<}r2Zb7?C+SP zxzq`G(OBwLFhQG0h!rCd+dxrEqQ8(Gwlw0aT&u>KDvz)+Y?%h)wk0~t7m9<1sD*cH zJ})(&^6-+Zc-#Xhj8{CSVCaZipNT!{h`9^N6lU3A`-Kn(E+N4|DwUyB;-+`z&P^2AeI!#5UNg9q1IYe+HkI3zl#PbbBq=bBC8ff>-O+Y zuI`M_sBrKXCL>jazFoH${Zn92??MfKg?IWZ4!S}mazS}#N$8J%{}f6lx8f|v8vp0- z2ZhSlKmKLB<iU)Jhu4-WiB(8OlBkZ@{gF}?;ofJZMOFWZc?mj= znO+(lc!TAH@McH#1*o!>4^B7Vwx<2NbEm)eF(kp_>E_2PlRK4fNX8o5V5rVDnBrrt zeZ!>;0Wiii7%sA+0QmYWWhj_F1v1g(iOlt|0q41v!2lcI9A~xSey?a zWftu}k~wHE`@%axm3jM*l9sZbu;o=IdhrJT1vG(>ub%O!D;tsVHdzjYVhkBRvuxEl z^O2I>5MG7pB(Gs$#OxIuqLmNZa9}CxXw?QY)3-%3Du70#GAneH=A9H*bRpXx?r$(1 z1AE4Tx|9a-`R64S3QM%qv_wm+-&@e3PfSOwyyK2u=ZUxt2LBxC zecL_4k;}Of?81AQ&{^>(vgKk_cvk!b?{Q=#XOr90PjVY9^1slF0ZRoLd;Vd)uK2=K z@}pKl|h<;;?M?iD4^I%c&IWKxZcde26tyr5lC3gH@RfU(+aHu7&d_@Smg&(#&!(Gc8sB<#EPvJM5DM{SB*EeT(gb<(~V>^wqo}4 z{XXw|?zuB}c9)dg{!X-|=l${gexLVwpSLF!WScX-gwV>-sKm;wy5fS|r$P6E zJ3xDfJAeyJU64adagVJ2^+&(HXo28}(EjXi&k5~c`0Y8N{WJL%+5GqO^_ay_!X0eKRhx)P?A#udMB$R0qnh!1-QJ3|>H*q|7=Bu+(ly^4 zgiE$H=wDdt4saOtv?LIb5a0@3e`vBdt{Y31paI67hCCc%-l%Sz}0UF|gGMFP`?UPkaNi^%$1tf=Sl%owy7eSmNCBTfqwT zPyY6SIH&}^vpc4QcFsoSQaN~-BXWx$MQ-Jm9l4d2PzUB+7`dgHKZch=wkpl>Mf7jW zkkD@=NLHkn!nR;)zXPzbY*?{o1(GpWnx5{LceC{ylenwT2+c~{NkmOZC6*|AO3&~p z^Avfu*Yk>sYh%Q8U6YqeP2 z@meibA8G&!NVb(z=%=Vg(y1f4x^1P}*UZ+|d&|2)G?81C0!s8qhMWxs4KjwT2SIo3 zkeB1=Zcc`X?gEes-s(Dd%c;dv@K!?%Hg7Qkv?e`g-fEyN^H$^3Z8C2$9~$$vzygzb zODzDeF>i}Q=53*bdoA;}P-@!jX#>1@tZntrx=<}id2#pUn#>!IeHTHn1xl;TP0gM5>5$Ka&`{IintvxHmyA5;M*7qt< zTEA;a?qe$gLbW-x>(0qI|kNC8vE|KV$ZD!uZ?pl->ypberl>TePCHo~E(&mN-g zQ}fi#%zNoEqg-TpSeH=W8xMo{I2z$S?bC$Txw7n*!S}|1%max3`se=l=MlT;K}lZ~ zfO&R)=!)DLFTa>q__r@#?A_;Ly7ZNo^^x9T;eSB!XiGOpELC*yd;Vzjh5vLUi=g{N z534}GT3IO{cWlhnUMp^}E#q(ZTC))e0yZBALT#z{0&&_OWg?*I1&^(75B%D^@$>?D zX%8UjS`QEF*rF=M3ol5;`nf983eRD7cmb>5;Y4c7E;3%9_E}dLjxOTnkYrxm$v?UM zP6{fyBS*bOx9%uhk8(Vx;dCFDANrkWwZ2@uLpUduz01qBO=qiNNF9EF=qFz~P}cO@ zf#|I}%cl8-)bU`;z0&$Em^WKDhiq}Lz}DSfY+7Zc=v_oHx)+^xYi+PNMa z(@}(iI>8QuPAOU>(a{1r#KZbU7|O>^h_PUpRGSUc7fS8OrTgc~FA}5{F4fV9>Q=}T zJYBtpWhZ^Cy}V5S)~eBDy?dcr$70X62YUOPV0%DY)w(tJ8S2Bew%(S`*dFT$-ek(z z_8_5pzK>C1YlLgfGU4)cLj;$Z&6ZO3O^ME_kZz7LWku&MK)yU*(}Ds4U+HSIjrv~yJ?a<2Q79YV+|8&gDXQgPkP9 z57L|J_2I!VXo^6C5zU+JnhvN*jQK1T?65tu8Nt&rf@jrD9?p*di02|z3YZI80f%37 zc*K^bVCxmG?#G~lZngOs^$PwBa~=3k3l>+{U}7H!^*=>hLnwuWBmuq`fo}3Yy#Vx> zBZg29RfZ)K-Y7gnR&=~$&(LD=@Uv0@Gw~35F^h<7pdPDKMVsni0-7oDDORFNcmkXu z@hQ4pA&Kc-kDXxd7GI1xl*N_n3)Bfrnbk?dpCMMq5P?PORe(4K&H+R^2ek#WX(a?a zK#6%6)1jX5rHtjpQ2XmY2Gn-qamy6J)jc;03%D5=iw%<7gU+@9xyI&g#;R#RQk^G6 zTgZjwq&n#_;cf5@3mzDoA0#Ej@PoQSv@rBxEQj3SDc}8Iyx5{#So4s<^_8zNO05fr z>R329o*veXCJLHq6UD=?ktW~-jao5)Y1D@>EbM|=39&Hj#7vKYUadKVay|x!hemfh zlrK<-S@7=Zd*cl04=L~ z+*O8v1=aj>37frJK>_KpuwND=h_uBpz@{`eV4Kgw;NPgx9XGlV2Cu2LLA0inJEUE& zfA;r3<3L2sSfNOC3LN)gS>&sLqHVk$o{KItafM<8*4Fqh)<2PIZr9QJ<`$1OijAyUn5JpkB+(w~P6r?4$x~Ab z-QP)ROrfj>Jo$pZ`3#dFK6Z4HErf`XF9fy&9b-V?uk1ZbMAFn2$QRD3sY0q1KgP;~&a>GM+tG5X43u zu_lYza3iIq{Q^oGp4^JeY|Nl#k`>TL2RD8Eal66#xmQi}Y{^*n?yJgb55A)$W!0{9l38ahH(e=&Y7b&pOFohz{)M zYfP^Y9RLf_Q7MpxitLf&6sEeERH{=By0|=Bt+Q36JF2UI4ls^QGqj}{pc>|gxGYU3 z+kCfGRq*s~;%Qmc;urqQoMq7i+c2Q{GA-yzLhH&LG1V9%QL`1CK@(uH6Gq`RNgL4UiPVZ8Z zBj`~}gLehPLk5=t#hprNey8FZN{+t~S?|K~P~dP8b0x1{Lkve|6N$bQ+|d++ziq%B=Ww(R)24c&{P}{&h@I*KvD)HRW`J{zxTMDOVrO*7se;*^fEJVkP~8VBdLwkTVJP)HGfE_{bFr6lq{BhTI$ zp9;~od=5{S4lUiyBc*DvAyErnlHi@K?!E^2!}2HVnmj$qP!plpQ1ekMc8#i`)4tk5J8w++tnGO zJ+{4nR)DN*7htiFygibKvaqy`GGnQN`T4f;szG|HC`(S8WmYUPHmL=(dK#;ghdDjn zuS2kOI3ZP93XwibS-x9s7$Oyi4t!CHgZ0-Je13rji@eVxOe0=o+<}h}QV#qQR?^I{*)Uk{}g8IYKwFP-+by{YnsB8T9ojo00&efvk>woh52W_WS z1FFVlWl%3vF*mj0Shf6ifDujrHU`=afKIINuWM-`+}!AXY~%Bg&G}^JU%dK>fBPkj zGdnUVXH`3?d9A_e?aJi0z!**2a#Y7kf-yv7R|0GbHJl>T6pkF;4aAnTm@ErjK zh^`F<4N49UhYTQU4};*)_@NOfW5M{-+GigBQB>M^Oxl9cV-+q}6?wzNH_7I`l`LLp z6SsuyPz3NkM+&zAErL#FO!{#iMx;3t)Bpa z!r3X~43?7aSyzUomlA9MRKUg3_y!ez} zEd8QAiilW+|MI?;kY@IWCdPz6toxMe-TL7)0%-hB*&=7I$f0K&1f#-}RAwJUFO&(- zP|Ox{X(+hbP)emWuAsCvPA`?bR1B&URAQBE$SR>UVTi84%Jf)sX3A*=Rk$vXt{ioA zOxTt6;K4%fe8F-)YCT%nlU)H*K!D6~#C3gLCGHnY$fwcpecaDD-uGz^qIs()*OLx( zq7l_YZSdSfI508h@L=3o8q6LdO!wGN_6rCK8j$+24P$CBg$6T<5pW=k4W8BrMtKDL z$ls>_f}hd2#i3n*Jdr%c6B5COiotF}CHq%lqJ)_YJ8?szV!2Et(e#5Z`H^3GKKAYf z6-zNP_K;EYGZsd|u8}k-@i>fv(21RlEe@iot37YAm|ZCvu`RcglL$N|55qCQFTC6p0qA|?YB=?}qA(wHBri}&d~ zM!#q#=cOM)6d+T_Uu6En)P*Pr2BLz0B|jZJpba8aTfU!+Gu`*#6VrZRA}t9ca(i!5 zdu6R!2KE_^@J#@<>8gDk)3t{f+V{I;oh#cQI+!$$TO)(CVvg5HC9Myz-t;Noh$TcH zl)c4e%_k@J)D(@87GzWJgsVyp73x`KbFf;Bc2=onof4gS%6Sk3)NDgT)$*(F=*i3O z=1Fx^6%>z5ccPY7hk3eSjEe1KW!-0Bp00SuCmG{$NF6?Pq{F9L9ah=|5_ZWO_o^UE zIz+*BZvk8>TL9OQ8=@)T%It2>r}L3JEO&E6H&^E1I%;+EE}zE7*H|x{F3I=RXs^0! z4}!UaaG28o;3O*-d)4k9!Dw5eB94Lvk5B*@-QH9Fg%yUHh)7TkNNeQd1muj@byD~r zq9nSn@zN)K768kiiI~*cqhF2bcIFaeX`mPHGPqCXk&pM@O$PloMTs)s9TbIJOF7m? zY=$Z?z$+X!>%3{Okt)*pewc7h+tyQn72*nsxvU@cP%buf z1#`M$$Cl#ET!-AAWE~3NnJAZR%g7b_#QQE!aEN|aHGD)8%#m9jJ9$Y?353yf>1GBG+2(J)XF%%B>j!qHV0L5R!-k9;h!%)?&@ zq@15TvUuNkR2=vWFQx~OaDw;w$tUi_`*h(H<@{tw5?xJC?gL0hXhxyPD5KD*O(-;K z8x+EB>Z@=p5N`zvw*!SsfkKwO^o&VeperK|!IeJSX;3(>GC3|c$ZVldeWruzFeKH} zu&ZhYC`LPJFz;FDwDC=nSTMEL5drJ~1jykuN(aSL5rQQlHNqgS2b0$+e>Em8t{S6L z+x`-ho#s0R{DxFll!KK!DCcK?uAJ`eQm$UkmDA5Nl&iaQg46lEmw znyAT0N_aM((VXD~lGG(5@@(~nz*GkQeqf^tgiQir(?A&JkubGV3D>$BR~f-0uUe^W zsacm?Zk8ikn9=|;rZxgo{b~j^`a5jS^EIZvwQ68gWvCcMCqdEO7J?wiLh$5-Et<$* z@z%Rh#$qfkr>nYIWm`5mD}~%ab+_g@cUMb3rveJJ@T8nX;5K0f6NKjU_0`?T+3NK& zR+c5#A&{vmm(7qZjaA)HIaVhIGM`++b-7f%{t^^(wO~yN>xF-t{3GC;b$1FCvw61# z|DTzhq{|%5cm5=Ik%B*tQ zy&Z(o(jHY0FnzheFz2PWW6UF!WW%5;cCKh)U8R)mU`Wy-9YzB+oMPcI;Kxym3e;qa z{IP(%%*zRqJM;@!`eY*ZVpl7vMOQkWoQfjPRc)9HhR!gmcAw_U&B+Q7Ko_aemDH$U z+F&mMSXw{HXdOnM8fAVWAE9bmnQS6;sbdph(*ILF+O--yfZe7!0dl1}bx#N4LCs4% zfyt0O;)iszOB=W=;>j6q@KVIhow-N)hV6(hMmV-B1(Ta<;feRTk$fR%1rziwnS3@Yn0~L-@<839P+&Td$NZ<%9hz#I zz@}lER_M@~KV=|bca>sgnSs+~O%|#xu`>k6dBvNIo*!~a&ts$|iHwvi$&8UK%#041 zB*L_DkxdaJA_rNp=HrI+LqjJkTj>V;`2Ia&zO`v|n?>#SC@T@HK_QBRK8nS~hs@AH zpXhQdEi-Nq1*tUp`3_Txjbrs^ms=!xwr$RsP8wtFPLs*ZMwr=RjqpMjNOsv?(6$GA zwHPdh*Qox1WUqY-*FSi9dY8)2A>*{i-qKPN(CY=*`l9$bZ^Mn~M$ z=!l(0N3blCpu4q5M@afgz{N&)Kg(Qh@h{-Ac`FkVaM=WwsRg)<2${W;Z{eDzZ4U`tHn;^m!D1ZXIvL>F3vitX za18=ncQxSJX~4DJfNQG(*Qo|vh|g@lCP^&4U>#&Ny;R{vQR{DL_PXzL#zpj~s=hT{ zA<29-Hc6r%t3Lz5zPGv?p3;`>(~WMvqfyJdjYdAxXyiMqg_cRoekCfiWg=rMTPC(f zWIjUAwnma=vZ8ky%Oo3vw_%x_Y{0nEfHC4}f+jQ7Ej3_l$%CR=z9Kt0C{a<%k; z*tHUHbOz5Z}%(Cri@ZaXHz zl09hKA(rbHD*(7w*ehAH>Z}Dl7AF-BR48XPhBV5WDA0C3bOrf&NBpoXzBncBXF z+r|pgvr#=cCz#jQxy=*YJA&VKgWt{szu}}54Ge-QNYz8FD%fu(8*gYP8?SFB8+SL8 zjk{+2mS7VTgG*~n6964f#+`5l0PlhVke+B|iFqFxvtFkJ`ep@9fJsp#U}I2@A(RcF zMeKmDw!w)Z55m;V#M7G%>uoixx81N_!^{wyJIR4D&@U~sT9(`$&?uC6C8%!2Q~|;1 zh<6c*gXmtzW=)TYRiT*kctB({>hlUgHzhw9yEb>1d~E#P)$3h{DVV8IQ1A;-u-7#{ zR8aquKmJ*!D(M-lLF@(Ns-MQVmSK!%W3r4kRL7ku9#*gswUn)HPt;`0FC{1623Js& z1cZDfLCF9?^5g{1&<$Bl68oVE?vluLHZSDkEy{R(=Da{av29%Qn6U6VXy?Q*E|zK5 zvI@7kY3w%5dK;ro+|XEj8Vq9Nq#1HA^KNxgcIgVLOhm9GSTL5#L;SR_MGtvoU7$0l zpTwCp5WOb?9%zFQB``!&Lh3V0;FqT4C6~ZXP05QcvBOj28q_yjV6UhOz=M)?v!TV{mSAX=pvykJ_pZjl_z&1AjPr(tB2KE);vpL`xhFBg z+j1jRrQov~w-4nIt`>CqSFl`JHqdF9{A_EEgJ2jc+ZG?JRG9E*wf4~$<*rtJB@l=e(sx3(np4Ujmv*q@bp+enA#Osg>Gbx{HK#ntsv9m-1)j6Csf_a8oa}{uRVX&7V+9^@qB=QIc8EL;?(hfp0U)$>Ya&v`Nwxg(FGAsgiC9Ekf!A1%5nVAN7&8tL+Z;MKX|zm*$piKtfdOJLC`GXNN{3|C1zCP z1dVcM@0HV3^`SQea;TbxmCQhDZVr(*)}~CQR%)0S?9ElIUmWiDS{T^(VN zUoKilcd4#)x{p?6Q3#b+UMcP{J4r|Vur-WcbWvEl&RU~Wxw=qXHifKIl-#pjh&7nlXZHROhEaG z@cWHk=~+>)Dz(`Q8lF_=k#TZo}Z`Oe4A?);BC23C}1;IgmA`s4MAIY#< zP1#GsK8*1k5mmp{C70(sE9X-R#QXHQ^Ty7Pd~NRhhd=)61;qe$ z>(05(zsuLn`41Q_^h&xi9a7MWi0;JKA*rlZ9=!2_uwwWj3EUl#OV((egTk; zYe6OW&-?(svqaGIqxeibt?I;k=IDI$mbN@V%D9GjDY)5rB8UMKHw)p&26co=umMsx zBq1c%Tys;%NMr(1h&3?ZVa=yGz?+{S%T7VTa>{n8;`&6gqJ47*U{ehoQHS0Eof5_9 z2IcQM$}a3yh!~+a#qSq;#j=oGHR8Jd297_&9>VHmRZ}=4pjpSCwbGdNYK}i^CF$$c z9Dg>Kq;GEOC6xzx>nLEMracX-Ix>*8;WaCZ*a2!KKbG3iG)y|9)4dP`P|9TJUWv1K zyP%R}^JH}-p|vJrD`*g=T&PaWLG5d`dC3n+z;`)K$Y=5DD-vR$30BZoLr=$6v?ZVD zTq(vFx5yv6yESexOMBe#^4z$Wk=mf(@BGvTftchJWsAunMf^idie^}QL4$zxp}127bP%nBtPB7b(Shuc$Zzp6_ELUJZ20hf z-3wGvssD|B^*yM~J|^FT+NOSec|j_tP_$BX8yO)dgKNqycs%q2^3?;TW?6XLpwIM1 zW9GrUtf=nmKHShY5ryjgT<_>w(-o22+|-*9@qr-y1M%}PP^KxSk_prxeo8`IRjY20 z;bsolV<0;Q*qRpcnH2O;=~RmJK6MF%vY>z;K9Oepjm_n1S&|BT&!Ig!gT)t}Y4xMR z1+WO|y>>s6Kt7<~26(nff(i_3d1^!G>n(bVxX4AfMEMM^MoVL8*{g8@lpg|ZGmyki z4NNtbg2779hY2B=dMtvd6V!+-1SnsT`G>ti|?eOhU_yeoXn) zmniPg1HMfZ*L>cvkJJ`pp0%dV0LX{2!nvx%C=zDLV|(_V5vGD|V*kL=0&HoP7d z5)=&5sP2x=W5`TJc1V1h*}&|`A*yzOvA#mXH8kFlL$x9Dj$qSZv=e&)O8HsC?nyG{ zH5ZINv^7w2$`dJ3B}!BWfQ8xll5BFOW6_9hmY0h9-~PdYwmcO|K4!}^l3OJJf^0$H zCH#(073GDS{ZWNJJ!;LQmh$sxYAz%mYej9~DJ6dl9Or3p_rsCjaUD)n!Nr1tcj<&e z_tis*l-8(sofcH5{6>d|BBQ3Ex4FUOF3ruwLZ)6&f@;^t|NEE6KSQyPI>CBa(dAbQ%#`RW1hb3`(?nPw z(+A8x z^b~s+rGQGde-0|HsuP!evkl|oJy3k3T8O#x$??z97mhc%SiB1p*F$2bz>SW4514v9 zda9W2JX8tb>Wn4Hw5x)y;;FiX7I0wbrYdHif@_sv8|XwyqMY=@HUMHhBv^3pl}ylC zt&~xfI+^>$qUz#)(L=SppkMDk+%FZ-FZq$(fg>#sX!(Q|NW1}5+XkXnauwNiqT5O7 znGiZx3*XpW%!Ho&1J8uC%B0!P)j#k|2yJ?<^YYiy^=5rH)+C>?MqZt~muV15MNO=U z_y_e4V|giwhZ}_cLKFl_9p{2;snbMVR1gYO$ZBF0epcRyUasQ>@q{5 zQ+skRkVC6i?U1|l+ctyGot-U$SK+ycXkXN9bCvOHI&% zM}f>qQ8b>O1c?=ZK0Fgiqbc22UB%1a?EJ?k`Yujy{8ggwTE zrtX%Us0@VK5Ek0HlEC|qVG2tZ&!Aq$01d%|6S0vt+jF?74@tkw&rOgmHD>ih9i}z} z#=x@%r+hD&HIz)VWQuAA!S!bS3IW&5N0{O??H-c4fAbHKy4sPJ>0VU>!G)S6w|tZ~ z1PzP!=vlOe-4z}(oW&$<|90L`f@SX~LtXF0y&}Vq^`qEQV*u zdMT`1$M8!@5_f{k(v*BO-&Zk}^MC9eDM^hKs^}_O2`Z~7vG*&Zo=7m!VK>uZS9BPF z_)pZ!W3<@}l65b-G_Tf*3aN4)6@>2FKdj`AQQeEcO%F0K_a$pg@<+~qsbBb$&vc|Z zB4FT#?hxm3_woPxGZ6qY+j`pC&D6fko(aNwJ*Pw~`1j4}cUFNQq+X0Z*X@>=U-n>( z(`9V6?9VXkyoLy<%QKwOsWsP5XQP&Q8ESI?Su*=*|6db+QV#A%f7JI4yMO zH~zxu=otpbNVSEySM{zQO=2-vI4u~~LdsG_})U_Bl1Lgq+yvFPRO~nkLr&*+B zBrG-L5H;4;V4yg7NPe7rcy)j&fsKB#LdjdPBofc;Jy;8HeYPy({M_&p1mcdm8k2&R z^Q5I9K;jHdN7>^u%Q^6W}nY<29J%#%pfA5dq~ z^P|?bbKQ{ZI9|B7{6N&m|HN*L{}C0R>poe?a?)%{5-oKm+fQj$V$kV@RBlI}Wpj4q zAsJ10hk0bi6E}w8t%VJ`cXtAYul9e)^Pr=cIM(9i^KqwTk+L4H)nu&zS7hmWRcFf+ zR9hgdiM0bBQ7^SN%@4L>mIGkN3a4N$fmXtbn~^ObHwIqk&BEGs(wfyG+`#M z3=q&NU(l3;z5q4D1Wx)+(JrhrK8jC)IUM(_Jz5NfwACn8sXf_zBm3mB|;NPD@FSlGRq78U8|kZo8|BL^she87YNk)^1{KU(-o!dF&BbJcskAK}Cjs8Vh zYCCeK9{p0Q1rF=il7%9o?iE0=8Zv^bDC}#4&GpV-nGQu?tl`ROhc=QI3;OD!`E-ww z^~}ZVoyVukR(xc_zs3$Qn2`6R8U%K}xZZgWF3nx7mzCJrE}rJ9y1yc}dH1;^Di)k(-8 z=r13<>Nvp=)XntDB!CTK59L+h#z| zD=05_-a{LDs$TZ>4KHi;WIzYIaSJ4j#=h2A3P6c=YHG37ZS{286IP1SLz2peTEsxQ1|BC+|2?InDbN)q%oE-)>=zFouqlv@AW}@;gEWd zlAiE`OmmnN{l54SwDUpdK4TfiU||YA0-;c-hJd<&+jbRHML(OY9OO0EYtX2;i4;zZ zK!cSG9EYd~f@p|4B4)Z;9F(CElYtQAHN&c!m{GIVaUc_49u^^%4h+W{yZ%nfe_Wvs^3T z4A+mcVkyf_!jqY*63(Ex%uMhjt{zGDo;FJy`F>^L_mnC(pg5-aexUEoLj!HlPFL{I zFmwdV>?I0dv5pAKR5~IKD3Laf^W#yc2vKD#$`x7J+(t!?!Dy5XTz*6q(#J;c994?m zu6sl&Qra*I{Y^?SGfG=2no(|BDIOYdWN`}7XG0*7JLD_nYlR^%M$#KN=;Wws^hHGA zd1?%mFAf;MSz>)*i-dR+u~ti8ASFCg$-mH%?tiUkm(6-BvM5-o82{OMvWz?R*A7K~ zSF!7GW+=oTMs$e(?YV7o9E`l6Ex*nB%x@EYEhBWtVTb4COqWoMARU|^a^5&vSbiVk z^;v-FI=}gRC}Hw=8?rNv^Ar*!&Igy)c_B3(BvEheB#{X93(a`Pa9$?R?=iRX_ic7-Z-Q52Ai@aiTXA- zl=UxzR4r}cA|jB>1ooU4Zj5SO7LO=qLOAA1i*b;hnCs)L_W(&b4e=)f#%C65V5*6DhKB`7g!_tqdwhdemDJR#Wovv;OxY_% ziURi|V!}!0f?s?KqTF$R94NkB?a0fd^}?OR7-FGn$GpMo9QJ49LI7aLcBOw*L5?x# zgO zKUci9cow+Am3kB3Uo-@Y{Mt|R%=qbE-tVxJibXkow0n)SJmbmPY}aY`S}JR7Ju=V9 zQcvcddKDiv#v-EW9KB%fUX!6h3eF;@!L_!sFX^8E(;E78JCLlw2agK^K^x8O za)uWbFvNB_LyU5U*)C_8QGUKDuT~qf6M25TOyp^-LZ66+Z6p!2f>5fq-tOs1CiwsF zd%vj5V5u3@mNb9$(W>_mvafVWjG_~@5llaAGcEU@ouC;bPE#cgmIe)EG<%%mb#$uM z0Q8K@yx}>XG20>9+Rs`jk+|JgdY^dGLW-W8SAw5-(n3r5M#RKhi;qKb;;;|g2b1yE zS80{Fh`Z7VC1~Da7tGlv$B|1=^Vkaw@_C28PAVlS2=PP-ot-xOp8XY_+-vd;xP;D~ zX*SH$lQ+_%w-%2^r;sAuw;+g5sY>MF8;eJ^!GmS)%hg?pmjL6r?pw6b?*li^ssp}( z$gAcC0-rQDQ1!IAft0w)7HuAv0w4AZNc4=Sn6Rx+;G zQMeVx6%zm+XeTq!fIYz}5DMYHRTJZF^7Ip;zr9!AH!RaR`-yMRg{ClWHe@MiBR;z< zloRL#ookluHV@leR`rbm6EQ+3!=nFjNZ=@&Wu5}KnGVGP9zcK-9JHT6w4(apwYeu2 zeJVe~XX*VTT$ajj&0{RrYwMqShR$tKOwpzo5lKTa>_l5cF`5P^J2a4}d3AZA>cbq) zOT;zVd_)N14x2!jidb%35?0a|9{Ql;`?1k+j4;9Nhp$E?p)G=bPo?b_nZ;4@rpYGI zk!(y`Gwk=51?-jQtz=))3EP=FWQpeau)`Gd|13v8xjyJ)87m-r#4q;ojl&zXO2%{Z zzpBt^F?;dBYOHeBYqvqg#N}KEL!_Vpf+V;hv!?ed6xg|mlsh8jg8$Nem(&Jqm^-!Iztgc_FkP5j+`HlKUn8|NAy#SC;Jdg@ z>+aqZaU=E+F$Pj7ldLbAWM+nY5y_t4o#Knam#z_B;OBt8u}CGuIXwIb|FQfwitud+_n{=y;Z%irbYkBUPn+TWHLwWsS2QRI%2PI)rB% z2cP#2EUF=^vEBjadVl_$p zu4=hRl3&`QbK$K8@^`=U=j9ta*Lk}gXPtLw{&KGK7c^nn@BHU79{+6Tzu=%|MJ=t3 zSAAq?3xa8|y);-a4QjBx)FD;}-64p~+WmrlJV?3ik_~o2G)Vcm@@<|;-MrHnJcF1k z+*UsXXn{sO5duzYo(FM)N&U!AlF31?SNx3H+%*999+OBQLl-!EFav#fu6x0qHPJE@ zPn2+M@JNmg0yUU&>QL)z5Xs85DLcQuN9jRJ7GcbB=m{-GD3+pNX_IYoY#+v(3L$J< z>@ZJMWpYQ;bFqE|q_7c)YoUDZ7sqobQYMdL)(7euR@lc7Psnc``o| z6<%nm#D%J0oThgJ}ers`|!nUzCP-j+T8)~hXMH^p{M|nBQ z7{pSP!3)DE^OCCGlkG_yZNax)1a7pUHS?rYwcRl(RRv~kh&8lURsZXM`Fy9oYkY6B zk2wgu`4AnIKV$$mk`72$qkptyujE*sqi4Hwo}-J4l%hBWDAL{VN?v@K)#fny5N5X< zP4;ZJ?J#mU*#^wFHgij6rx9wu?mdD4(Rd_tnQXu{_7jDpk`P zu47qX2`=eJ{Dv8Gqr?jVKq$g)1qP~}^V4;lfi@^Bt$dFwA~pP-d?c1c8+G@4W6(EB zOiF)=)91Yc!;P|DQ#`-T$W-YI5hk8IqASVCtiHp$9G`85*U$M`htyv_=bg%p&-JRJ zS17txuP8uw=?ivt0Fs#l)CCaRN@H&74QMViwHX)}>D5C0f2uTiK7|oItiKQ)KM~G5 z4{7{ak|wQ9$XOG^E^A)RFP4rFMT|*_Mn{@fiQSSE6S(xGWfvRkVr(lW=uj>RAX&UCiF$?b&v5noxt}G0*j>goX%d&n0R>J5A&s?)x}+ylpyE zKW@UnWMkH&WpZKl%kKP=M~Vz6E%Ng2hSDJYVRl9)8i-l4g^ zvI`JlM1mH-F?EfHYo-;wGMv??%OmyaoxyR{qyhAgdyf0JCOepx>0PnnY17($GeX8i zpB=!1tcueMG0HWuNaO70&(k;P>jfh^pJ!Yh_9@Ijn2M!{n&Qz<7vH3G8^~59$e(h$ z4YCb%I-}oNDh5(bFU6z{w!)TuFa$VKTm}_OB6Xn>Hfd^k&zIN_EadXv1GZ(Cf>JhroY?xVxwGE?H8R?Vd3FM$B?;A6vTf?04qN>{?bo&$j1n#e;7x zz6~nHJpRuV3dAh!FH8V05wrLpj*R=81yGopoL2QKuXNp5AqD%OZXd7|n1{AB>K8;B z;UoIC_S7@k3Zii9u&lpSj*d&2Vp=+ta@4RE*m(c+94Nl+t;P2k6pGY1kA$}#C=pLI zZRbV+T|flt&2DMaErvwik(!C48iskQI^S4)&sz&7Qc_iz6e5UXA%u^B{Aht{TeS^b zMIH!g(k9|iEj%b?XbYKCIC+ecnG8F6FF5&~hAaX`F01l;j)V~dB$gWejm3h-wVJGn zv6R430B`bHNDx%aoRkPsRlq=O=`@ookXD!_w}p^Ns4ao^GfmBjpUxujBY-#{=Qubt z!#o11+Yl9+pMLX2g?%u`ii+9#jJWT$hziBR9;OQ6OwJqFbAdp>HzgS$_3)=C5Pp88 z*;X=_&TGb@x4x3Gi(Z$5M3!Addc#z!+@KPi$|xzzG+m!!1SDs#PEEuF+@R|#9!*-(W<7z@QfXlP@cxFH{|K8FiFE?(N3kPmaq?+ zx6eTaLLePDE6$j>s$o8!=rwsJ?iqp zf^pB{a5YXQZ;QrF>EUrJOi5@6a^uPa*G`m0eLZIURfA_HY-j^5RB_0E{;qbsoLHI9ST7l@@xiijBcFncAw~S{vIObsycN?b%X(yr5~!OSG9XK)s7e=?kxXrlain7hfDIDd2Iy`{#d+ zZjlJ~5bzd(u0mLSu!M-sXUU6qG7LQGolJ88wZ{JH$pvGXpoRh84oktp&l=US%z4yUpw>_KXatA+d;sh%Id%IG4a+IrVgMW zjjn|)XBy_nW|8n>+B+mJGRzn9^(cFJ!+Fo8l* zm{7S8TZaVr!af`YuvTXKAFPJszY8>vfnqwc{O~Xr4YDTFPe#(WVO-}gek273RM#_<+8 zhmjfQxsTOhGR4OIXFpcUY$&yH|I_(8a)k039v!5lEDNmwf2(ZFCM343r@D_|9aq6& zr&4>t65ERG zHx2&A^OTYSC#l|K1J3+E-DoL_!#cQ08>t8qx^sla9Vj` za;*|ZQd;JD_?HCZ1!`Kb=O7QkUW6}tIs|+b%|U;71nR(_2BBItQIeW>yuGGDG_%gO5d_3w4Cm|qvY(@itcf}F!g{1rQ}!3N_vLKBHxNq@-rwlMu?-&hm-+AUiGxR0C+wm z#y3n;96-ShW2j2LM=Xiz+r3%H^V(j;UdFUfmMl3(lj5{YwVbu%O))oYnQpJ@vO4nl z^P#zS_4DI63rD3hO63wL5WV~iyTUsi_Im>!q zkL3zfjVVI;!$O)!yfD^8l;!0~+aP$_0SMbyW zP?xM4c;8p!;3+*l%ES<^9CrSeUAQ&86SA54Emhvr=}c5J?IuZbe7o7)ZrV+?GN;vH zN!(Qt==2h)!F(FtOgK8L$#cK@JY)+|NMq=I0?bIWuPgfgB3^*FVbQh6vexK-C<@Cw zpc8xi(9vlIF5e50ScXHX-nX*~gCHvjr#QgU6qE#mi%%KFouf{@}!?+j7|@py%+*;1)UEn)=un5)^EDNn$L7G`8jC7bJZxW5XmVt5s~bGM8Z>J zVO*(Id@{TU9o$MNX}mGiAT{D@Q4NmapfFAIh{q zwL>BOSOQAxzYx$r_|g2)Et2oJ1OIG62U1;NkNf+jrs`9K||Cx<`bp z4_g=Eh@+<~JmF`SAsiZ4S}%UqGC7L6*D2#C&$=vcly4vMZes76I0A*esX39h(%tGU zpFz9LHMPhVo$PQ;D?X?8G}rV(n|+i>l{@;G&q5?osk*yXoz~Arjp!$xE}sA!Z^r(^HFk>3sR4&WEw#V@%vH)M6y&wvdCyCCa?SwT?ZX4f|Y%|nFdW7eXvv`;Utwse&5);st1CcBz)xElBP z9g3Su9}AM)B;n%HCL6324p>0fPll;woz@XSRu&c7XG5YN%eq)2gDJ3=5~ed)?rCyj+()*-FrAUL5qeZ)40%&RdUv3<%OB!~q#saN>` z;-%Pzx>B7~#Y7tGhXbti(+jGZZOYtf?1Nc0=}jNPtJh~vGor6k|8|`&p2fZt=37KC zWZ_I6>q0J$Pa)3`8_W}Lf|$vBwqcmjE%6>d8oU~|6{=t&fRIfYLu`dIP}MMAvebpo z^^lkXSwf;<4fqUqu_b#|jTeLU6xV>#U_A|`8MArU>TbYk9H8t6D2dco-_REN*=bm7 zyMf_mqcJ!mJq?Ak2h$a^zqrzL^EmQf5Ax?{I7j}1Ohdr}$wLj%Z=l(ZA%EA_tN7_R zA0J2lsx*_oS)on-#DIy$GTal|RRk-qB!)MyaEG%UHsa)Y)H9+!i>!)edqkwB-s z>5>oA9!ipy7rOqxynwZCNvZsXI^TQ=g3{2~2y#A@)k9ncS>T0Wb36~Hqldu8$oc!1 zaaxdDNK=Z!I{=_cN~+?1+!zBadA4g5?Go1Y^^|!G#|25o(LNhtl$wMYyO~cN&{_rs z>eZBJ^UMa81{|m-95zBv45;&~`DsW*grsw;`N?NgTN>z$YKY42M}}!>aFQ~lLFU>W zy1{KeGZ_r)3-9md3zFHZ(kv!%IjG$%h1R*HYuP+xv%5%luUR!9g?%EDI~vdZY)AX4 z<^Xm481bG^6rxeUAO>^8AQF!lQPVT;W{Vl!)miXp2MuDn@@_Qx3i#ojrsh zk26Wp%iL80tk?z^1n7ggm$crMT3M>EvR<(y?{`zeW)Vu5M>i!ex#XZ#LPBZYG0|#h zOZ5#GoX_9v5S3#v0uJ?wje0sF9eUk?II*Ti)tQG3K|s60vGM^`zzoSxHna?fnn*ti z5j1ut#67K5XVl_aI%Fpvpq~P*9O4Aj8VV5UHk*Q+g(ht&bT}A$VgM%ma%H+6q#$mX zo{?@i|8CAP5XPaq#GCIU69B_39 zui`ij%}Qp584c`lbBG4udE8zoQzC&n9N<86536I#%JHoZk6PUnR>;xLZaH>Aoypzf>OkDdAlbl>!A2Nxvw&5(B3>d$>M>>aS%$ZqT=WvO1H zB{0559vSEQ0(JBNmXaKjq-&@(i#IFLa8M7OT|X*MeZhY>SSRea=>MwM-gd z8_7t=Py!bF$W7no85D^n~lsX-fl zO@oFz$a7#@^G25)7(DPcZtBzJAC~;D4cju{cp)CA4^1D-Hhvgz{lxo}ys!AKYWRp~ z(4IbJcpZo?R`)dO(Rbyii6Vc!U{7`)4V~1ADTBgrSh1fKD8!Ja+FpAJ!ge>Xe^NgK zZuE1qI^W0LYLze8m#rk}Y&;}*aa?~X2Dj<~067nC1GTgHv-C5?SO)Fj_kV@WV! zK}aI)h=K%`B~V6)?!X`qmL(Fv-x6lkU2>RkqD-sYlbPKUt>h; zKI8*({Bs@n#|iEjn#MXZp!i4?A+5E5=dPp%z#hc|%mBJav^rF$jJm?1*?@*L0cYdy zbYrp%K$okL8i9h1j7!=JzLY4RBoXE<8o@%y-z`rzRO@oJ0kG)Z+7%d^p*`R;0OU^) z0by3%(-9TDCvnqmy9nan(BmiG*M5Uqk?X7s3mo)~m!!o;tv6K(W$M=I(fXSrK2_IS zAJUFF-sh0eTh{>4F;GNow1mWweB}r0XTE>)%2?LP@PuANn=7$B}34_MkheVaJ!4NRpWTJRq>K2k`yCQ~{qq z7Rtx}E9=s4j#+^VK{ijE9grf7(K*?rorr_xeqva+1 zd|qe7FFDFH&Y2uPdR6VLFZcSxr9qc{Wu>Spv>)nnh^%GP|GF9N(%K4%S9Y|0BSRUz zFTd*w5&2&2HW%gZ1N(tHivX)YlY`b68kMz6d#)yAJX^hCrJYrq^Py+yNkIwl;A|d~ z2ui5#Q3QiKxr59_WW{s@H9^X$KNvY$Rtzbh#XE>nb1bibB&xsw1R+K`kmdAtvolGe<17)_8yph=cy&0pL- zDd$6e2L8QAxnq&0=2mG$mVkObS%-MDg%XD*%EH&^1qv~#m6}d1%3~Hkny4phd@M?o zcwLojhJ=+a<=`>dQHcwUIa%=jCgVpmp5d&s8iT*!OTl4t-r_X+L(4&jmMb9t zV-_srwC+Z=Niag3_(d1A)j+!Y+Sf-kiZnD?AV@HrQN^q|TSt<`(JM(fO??nhia-h> za+4K<|F*XfRUt}mvP1yMlDnl8)uF$UZ6eU2ev~d~NN(fR}WE~jtMAf)Qi=1+YrwW$*(2ocIzz*sbzt!9jL}W^^y~gbqR&*%LaflAua=>6wKXF!GyU?HAtQ)37g$ z`zE@EwCaMpMvO@bf;=@4*{DRUn0YJemyqcLj0bOywQ+*tCl|Z^v zU;VE=J+gq5x?qHAa^_;CdGoET!~kJJd+95gF2rIbLz zwp3;o=vpJe%i{`m`QF)D2$ZdF{M97IYwU|F@~bh$O#=sXW)G@NU)ma+@-Zk7Zlot= zaB~1(H4f>%9tYvAOS*3)ZGsk-8e(pPcp+aD{v%%27R4K+lM!CMaUp@TX#SupzfdS^y2=8343AgHl&3&ijRcK77WMEjp^=Z2)h~f|*XSIJh;W!{ z3@XqpW~`k#KuyX@kVHR)F{t5$IW3eR3~Px)JA$$}4B-e#nCczbK|~0st)D}0Q{(8@ zh9MpEL5ww}7Ljn)wSSn&Vj(8#N5KGiM9yLVRiP~Te&6jMB2<+ z*hnh)VB=n{SJ=%5hTJXM5nkz*(w`W9Q&S)2=I|H^ONuiQo%sQi#i`4I}$&80kG$z9J7on<1%9;QV46oEnVka+%8&!#d zmW?VM?1S8FD2UvY1a8J5RcsX2SM0xIGO(-;d82TtVA6I^I7TE$g@85fS&{T}Q0-)S z9$g$wCh#!1^lnwo^pcw8bgI-P)ScilLsy%qjWK8%mqa3FdS#q>oAw;CDxfHv-7O>- z4GDGAzSKUcP7uI9@rCC(t_d%h`ew7Me7w<|H-+ zN;YBGc7t~nhOHcYsdCZA@)ah{3{$Hk8m&|LVO24ByxJ)Y8#700k%d39wkf+7)1pT? zl0zbK4eD`XgwQLi0*)qj%8W1~7CUYBCxIyB-Jf`BO}btx1U{}ejZqTqvOghW}!(LE!b;br1xuZNUUK99*1!q`=!2%bci zqlPR2^P#wD+H=vzPIVPa=xNlmxFS-fiU>Z&B!NkzB@rJtG(lc1F>-x<0D{NAk)(B- zXK%pr!jCC{*H{{~`CRHqWS7sCup*l$<7hkvptNQe9$asyicF%ie`i(O63{09&=w@6Zju=5FI&UF4! z7OpVZ2a^IL!Gpir479%5yF9*8@LDq}ODjpSLcPDP$YV8nc~YR-uVdp#Yr6G&GoW z=&NmG1*>70C`blSM86y_t1k1Zc#Ux?r`#0kj;VB@QKxSGn}Q~q5PbDZNL1$-he1M_ zTA*@0VGDqEcg#loDAh7hPrLMj4lU-Bvi>sN21Fv5I`5tO@Bc`a%vgP{#_(=>$Vx){ zO_{|yyM?9@7bYL&8`Q0Wi~{MhQ|eEaA}q*@=cYB(n-D7`(0Nfw`!DCO0;x`5C^4+= z0Vn_*_^+SB@$bNB}TNkoaUVH2cZ}+4R{2&gf0YL5$^v`gecifY7qVy7ao{ zfkk>H1~#WuZC+o8<P?sE>T9 zGQF97X~x;Ktj}rLa!|5IamnrnKL}|xs)&Yn(vg8Xf&%SOQS_TR>9T6Y39GJZ!D_|A ztA_~(=oGjIsua>cEhL-4g-DZFs7xTfCse8<8imAs4^6iB{#=#p70p@(Bipb~8j3Y_ zV&vrQT|urW$tHL+)AUmykBYv4YfHp0A$hDih=)lXA ztm#J4+&AFO*vQ#ZYP}vO!cy!&$eXcQU3WUV~j? z8Y3L5m;Z0}@Ke^6(UYfrtRRHT za!8f|s|xk!K)}<8UQAGgN_(=%y{i$)r0cH_mNi+FIj+F^xMp?ZB_f7mtKR1^a*FZ) zC5T=Rqlm`#%P(3S@0Tx>QqJePpD%44U9~>_5(N5X8!086a`Z1-LY~0!NqU(kVBvHq z9g-BgMd{jy91dPQ&dIJiY=MdSHQWFkw!rLPbfnon?1@a58;LEo=tMiRqyW53pjd_> znavQu8y8ua5;rTIs!v>4&L=C>4Al0;Nbm5j&Q)0E-#Q$>f#7B zRDxBejirJem(^vQ_G7@o0o4e8Dh1%;bAiS4;y^hF0Iw!~OnIjbl#32ESq;>lc8kVW z8SS0=>-2#9;Lm(S)0vJtv=W?^kl2i{eo`O=9b?&DV|PoTwVLuQTiZC8bVVX4D1lGY z93H{QY2XUSpiE2lQ$bBtM}{0|A&c+jP~3=btOF0cbrjI@OnfWi7m2Ud=3fl)Z8NYR z;xLWG+_xE2cYO<2O&PA5aKj$um0VK)dI35;lJerOBS|F14CO94RXdVGY~5SRuQMu5 zmZrq7|KP>)T~ZS`Yio9*L%uwyO9a5~lB$(+A0b|D^CS2yiH1(t z^%BwweGzk`gVih80PN!6IQr^`7Qc%xQ&ZsaFBdUDcMLC;$5>pc54_;ujoX+zOvSY) z08a}uQ2yBQ#$=bdEv42y^r7No0KmQT3~G2dSCw%PF!!8hFgY-Oome+}GLriO^E@1G z*((tV6E!|n;z^5)8Ek-q$OB7L44t@JhA}%>UOUk#m>oSYJB)(a+43?FDInSMx$tIr zyL`9)T&qC5R)5Fr1;Es;-`w0QInTGr{iTfz0Pyz{0B3ZP07_zU&owU=A{O5M06x0a zC#S=U*u@u%@54EF5tC3S0$nX^m=3SX>edo~l&A+k1r_9b1j|}WG$OPQ^C%)HmCP2@ zXNc$%*Z|$C%2XJW%* zvI(h2(f#75v#}zvCAJ8U*gSgG6%ny|kBI<*n_ZHh>bOsGT1v$K@LJttujXI9W;?kS z$O=NcikkE&HRsYj0#9qj4tWRKt{y>K2Dw80yY+Xn#!(jvI)QpaFY;~qs2NYoGb>Kf z4lDpL7`&=AZMcsxt@r>}xj$er*uo@z^8isYgZ$0at8#|pNg{G0zCs7bSLGv4q&WAL z`vPuQgsM5(twXqprW_o40FLM*GcN>K$MVP>e1O;>LREOh>{h1V%yzjvVXpq%uSC=k z)hsdNKviRzfF(IqtvuxY$LlSoWC+LoRVxCay{|a8r0CU2aJyOof9w$yg}{g)p{9iO zuG}2RUvAZ^%oJumn*9r?)#}OLXD|xix z?m}9wnDt7a2=l5Y=CfB6SWswQE6*I0Fx<(iSV4BU{E&6D{M{;TSd6owsGIvf*mMtB z%3&EaVxSD6zHBG0<&4${V`5I)tZLEV1b}g3B#G7f;d9vx^7J(+RaVTct&$HC=#K0PPPy;bsJjHA!CQA zAz{8xk7!1SXNO`+x5k2wC`XRg_zTn(m^e^p?@HD6G8eB%mR(}-CJe2q=sqn0QrhS$ z`UL(8NCOdOba`D;T*yl(t!7P0DqOS#g|TWbz=NBN7FKb^p&FlSsaSB0S6O_Mdqp_W zIbs_6ittiULB_^m1`y>Zr1XT1p0Po2BzO?Lj%4@1S7K^gJz&5zG}E8hFA}hj6dg(e z7U&_2Kz4&17A6uw1k^=fj$dsMbR2p_ESWK>mKJO>1&@kiX0*y+11P*Nu5aL$zSE&- zhAqiruq>%5by$7pOVq23R~f=2llawc;bYCoc+$PQW4dxMI!4-~WTH1y!5N-|AyE5` ze4=4yfVj0mzk9@umJP5+K@bv@F|%+3Tc}+xda{(Or&>e&KuW7K&~6xXad`g$=7dn$ ziMW6Ts!B%FWVInqm;#ZKJXNs*D?0TGtV5HvV5P-!O+n0IajG2@0;ZwMm7q(yl~!QI ze=+e`(*hB3ATsZl>`i55kH)Bc$W8 z8qy(S((1@PlvBQV0%BiL2h<2va%ag13NwhS@`4WLW5xuHa&6q$PVZuJY1Y^#*nidU zYjUjf>U#?PQ+}5YD_$MhcOFV~$L_2PId_+z;&D|6)Q9Z6;=6M?Ev{{<`<;?6~u zsoqSl_59wF99U|R|4AWpf5igK1^H6CR9LG<5uc1uGo&&i{HjiB(Av-Pn@_b zM%85Qq7R69b!EI@vA82e484J-=v#ZWxby%bbr;`T0V^SknZ*;QcJeM3+^>ZV5BWe| z%=WdQrj_CXk~WsTQfw31@NCvYG)tnQz$j`~MH$7p&XTA^X7>b3_) zvfXQwggB`ZO~j|f|92QA77gs5UCX!}r~>DR_>GF}@|9)bs=1e-#VFHWr4;tTL zY6*Tq3VNb!+tUOcR~7!JRUR=-Vn)p<#t)$Lt^6W!o3=jM?J>*QBwB9y*XV@h@IU^Z z<&xQF_WcZ=Sbuz1g9YSW)KBA}fa$!Hz`dya>3;oBe+s|;PCSObndSJk5P?iG zC_2Y`_jM2YS;oAU-&FBYu5dq|lG0SevZ|h9&4ShW2t*((9yqhIJD4IS-nqtqh#WZo z!^+ak!CrFkP(YGummq(Zz{PB|IYT2WB8>K5YP8xR12Ar5w7FMD7JCZu@-ITX@y5O7 zbCQGfod2K0&HWi3?3Z-fR$Fnd{KO!FB&I{`iY0ZLG}9(HXkW1b$orQ&EH=uhRy~-f z503v>#D*&;63eQ}rw6eY2yn>|6JX*4P^&p%QGa@H`P)l`*Z7Y_pu81NkSM%;P{uaC z{qj>@5LB)-32I1v3Ht!uPR~~O*UhDG*W|gs){`wiBf|RY^01N|yj4bPPY)Dv?LOdU zD(X*hk2{8N!M@!*F|<-tjn-m#77yBtl}GjL!cncYM#LLwM5OyT*L}7mD~e(iWnM9y zpomR|!11?Tw*0V#b$Q` zbM+Qq;igi3WF0!!U7D~zQk!;Cxr>pWxv#^3k&x6|R(tm$ez@zm}06?k*UxIq}3{Wo}BkzpM*v%cE04#DbxD2318L%WVjmsER zBoM>H&gBV}7WF6LmJ_k^1T0u2cPXS8>*a;E>Y7VnOd%*`yAhuXb&>qRY%8CR6FbEn z4xKwxZ`|#3*!%3Rx*RDa;u+@3oqkr`bzk@M5({htKhW>qeO-wLyrB;Bx=1FiS2lhG z&*&%MTe&3MGme1&S()DwPxqG3>M~@>v)#+%U%HN`8)%GW#PV3GaJ1_rKZC3%jRiipz z`l(r-=oj<#R{aJHL~3Ckj+x)l(cVd`EQisQv~|t2_S7fDo%f z_&^)-;N#XAHNzC;h4b!f5Fd;oCgal&zUtQy=OV1Pd(%zXzx50 zovpEN#y=>Md$ya>{qKi>a3$8AqU5VX8;4van#6Gs3>MbTQ%{4n#H4LT^z?S#wnN>Q zVb@XHBK(P@kWEMM*PaBxv@&`oj{8YnnimZ9-&U8D+MLJjE-jD^bZHs>c3>G?+YOqE||IM)C)Fy_&76g zTbMq@THFgV_e4kKtT~aqO#UW^5*Rwio1v6uIwpOg<;1<|S>=h`3@a2g3t0acDr)|s*aRcR|61oCw9w#;-v)o;rW#@>v8s@@^N z3ap`pL7DVtMWFnvxSnWhX1uZx+-yx~08ah#I zK_#%lG`obmnd?WVZ^m7;RJ|G3P4&#hmpJy^lUAN~ud$yHcj;J!UZJ8pppbx!&U^6G z>`u>O+iTlwpqE3*=-Q~7#2ab?Y)c~(DkE?`=BVHh zBfi7<$UD}w7?NLWUJ@H&g$v{E2J#~_PlLyVJ`DO0ZxAHd6YOSa+hE)YZL1D@ zYD|qeB(aGot>Qyqh4@uW36%k>$+Q8<TrW>vR~Ks| zHtDwJK(FfZC1(6y8~McF{45SuLV`Y2bg`oK(}xlL?iXRf}!>^K=Uy`LKY*mqB*6IcM*+ z*IsMwwbxpE?W#GTAsrh<%Nu)R{Xb4qezRw@dI-zjTOT}5=AN3H>4nF&Lx3!S-%B#5 z`g?V!xurU4a@k@a(Z8vi`QWdLyC#3Bc8Ho`3L~zzq89Y7ZkSYA*{=-2Ynj3k8L6IB z312@4F48eWfP8#oKd8M>vYHyOW<9pC-yl2_pSBYJ@?~Oduka;T?F#{pk7?nH^1Q-q__oae?gY)GyVu-K4_>3Zr$iQG z#3x?Wkb#He0hjcf1fmfOv4PgH(TXueXx(G9*3I7UrQhR4w4S0*O3$=2T2HZU1Ne9; zL8QtM5wprNS|9J~nW6P@p_K>m?QzQi0+oeUxC*q^M(c_A^c-kC$s2VKt$T#l+GyPa zHuv<P=pwR1FHz8z z8*emOm!b$_i>4RrxFB9iU4W~Y>hj%QB|_W#&S`Ziir&S|{@c`r+Zt}waT#a!^Mb0j z=@Cm0Z|%(liEgOF1;_Ux#!2HrF)KTyonE_72sf8Yc7w;dm0L&%TfE+Dfc8k zwSjQRt>^GKvH)ME=dyrZiv+(FeW6x%hlUP$IckAwwk3~WG=B6dua62T3#qs7R>gJx$?j^vL; zT@SPRKC#^H3IC`90%WPZqWG&HZKqeubh`r9Wvl%P1-5##_x(`uXWZE`zS8b#uVU?o zgGqa?qwQi3pB*|Dkh_kJV~t_<&1;SYwA{=K0=~KmeuFZx+MGoSR7cM(2kaxu+MMF}LmBVAWR%Iv zoOuYf|IIzM|9*^nC^=Hs_dcSGm6{~NIq-7(o5bIcZC&y+SIwKW=1Q!(GS8}4&$H?x z2Qo6N9b4`~P6VIh=vv_Em&2-wmu4KR^i!3@C1Q-pk4ZFf!Yu+$sb^3ZmcOVS7t0COh}JL z8sBRfE`HhJev*EP{6Y7W5e*c0RDoX}U53%=SDaDW*l#bQDzplHw%fw=H%=zUSIE|< z@-33}6Z!h0_D$gj(_x3m5Ba)Y&(Ve#YIE2=ijR4yq-pHN z_GCR-v+B%96?EG-OLcarFpSNaCBDHm+C{@$6l0a`P~>5^l`7fR=2fl7(Ew3tWd_qE zmP}V8Mh{q6ElrKl7`H}p?DZZu3!cI<$dMs@Z?^-R)MQM|9>y+`Ptq{L+9r@l#t2e@ zHlGgR#)cVaNj}0|68#g5;;t(r68oPlvv?rb=o1D%*-Yi%SYh+e(8}hl^QqPz`=^Eg zWMtGL^Z5q=){?d~& z^YDCpixXYYtA+sl~2gC8-|CigZvTsoH*r9iJccn(O}AAN5hh9bdG zWEf&wceKwiCsE`WMF-tMYAGe*c9`&bB}m9J9IeuDDidgO6amRw19`DmP0{HGVev7m zYF z8m2-%*G33z=M57rjMg4R;~09@qnYF0@vvKTNA$9!I|xy-uQAMnK|(tjNNOVN4B#Fv zn>1lyUH0ta-JNN4=;d+sCAzt#OVE}MqNT@?0BPN%M&lgBsIE?+z{T`Or99eHAlSp~ zwauFihSoI!Q-hgDM~b>;c2O#0uWUAiyp7VJo*!&-RT(nW0LEfUa_p^76)k@RJvuQ{ zhD^IawnOF)Y3%xtfo&0!+-Ow4yQu@b9U-E}uGK^lC=wvVr1blVgsYLUDP6Y7>%|an zOpAM^G*X*H)jWbH#R4{ggyDn0>z!n~pDgXwv@`0s>A0fl3T{%m38RWVvy)l16m6?+~3qzoE4;W3?XwKzE2}bABVrU~Z&A_^FG34thP7WYe)uJrSBc=FCU%u;QCGPmBPcAVGQV(3G z7HhZyBP|BkoX(o|T;mu|S7-~!Omg)_vI<>BDhmg6NMFc_EW}^br!_w&d*LHzvG~_R z&ijhA4(6I?5;>EU13aQcB*_`~=nsRCq;ZdA?Pp@aTjp}HniAmhGaz85!7SF?JRPEx zMW_t za`LF}3j+9nNukd252h~7b%8GBE+j|a6vLhtf0cgbyQHaH`5o20u3vTTmoh$&?wmUB zN6EB5VvQ};vbLRv)th=W>wpTRXYglx(qH~@l&LA@luB__`DcPhS&%laa(=#q}09`y|(AkQYk(E!f z>!3XW!u60r_$4lhGc2|BkWUU(KU<>D=%nZv-qdsSRu^tdT_<-RE$GrHWHLj2lHq5F(sn?aJ+~XL`1g+Iq35JN9w~- zcmk5+ly%OUhTo76k-x&upU7Wfss#6imKw&EZw{b6t2y6X&Mxon=4zyv4$k(I8xn!| zhTZ%@9lm3;e|Um?_eD(`T^-~Oi2nH*i37s7<2$kjr~#y)`6|{UfQP;+dU)p5Dp>u} zkaNyUopatD=S~|4Aky2^9Ezj4Un5Ee&6`^ZE2YwGKZg~_8n3eQDmAZ&O|S3+cTh0g zqY;r7$Rq9BOqF~KLYi2lx?-UwX}Z*2{@zHY$lS_85l#=0%@a%UT(Qz%(wLN6eH%%- zLf%VvassV*_Y0-M6;!xSU*tk135b=e^y8&aIc60c?7xf1TWK%H1D6)?s_ej7USMTS zpT7Km{<8DmwX!oBN6-FUv^lxW0%U<*9i@{??MFWO%ijOO<%xWm(6`inR3%Zz7nwR2 z|M=#V-f&8Gsi?;CzLenBI-wLhFnKdUlB8Nz%4TI)P|D_IMF>)=)f$6B>X&Aj)f@RS z6j4dZwtAc;m)&owhh*~nbz9vj)u!xJk5dU_T8?_ib*)eaJtO%uX4z%dm}rSQ>rCmM z_wmCHIL^bAWnQo9ipD(*XdM=kNwO`Jc@i32&;cbD@TY5%kdHd?rFEW+f%B<|Q!V^w~QiGUufr z^Dw)|1mBgVlgfzbK`5%7=+dY+oUA@PRHD}&_hU-YJP>?+4T?FFfJStsIw~6qBcvr~ z725Vl`&(AJe6b9tExar<{EKR)-#=bKBhNT`X}?VC%8NmJR_XY)e3&XHfHXf(4mYpk zR}*GIC4XI75lR!WBCdejsbZGbF7oPH=`+e)FJso#?DQvEI5BLj%oK&|VWS5AI!>T8 zrMD8zi4#QX^7MeNf^oYrn%Ppujk7cqYeOk6Zb(OyndRmhqI9t#+F^x~+96tX2kemj zyTgtwOWUzSseHt$C1YoOj1K@rL2c{op~(4FQbTZby3!_Ezho(x#yV&;Co+g33maKN ztu{TxOhJ#O^nf-kJF9!z$UUM|x@1UL)sZ^}B9VMb-h#be87uNgmvf{lnk6@TEaO5vjfg4O+48RE^%6tLov4Sq!Hj?TuZg{@2|3~L{CL8!`P-y z56m$c<@x?R>duUxaT(cP5-uHF)~{qI49?-t10q41VPsn6hGi5IQj1~~lEjP5{92e# zc`TFO>gp3|=^Z)C5g2+uW?Q`&A3M=zQ~KkWtCMXdm7$E4lQZabsFvCV9W+BtgQQ)A zLZZr4NfK)O+MJNe8bd`j2?z-;(O$e{O~kjJ-=|(?7CIUfQ=mG^SC}QJBQy?uEuE1z z{4@I3gOX$GuthcEb0=7xBN}82)vV_8nhNp`i@X$dGnr3*oT$dRS*UidLS=9+d z+>qWeB2bNInCK9iFrl8To>&fh-Q$tIP@H@|S;bF7{?+8q%gp)y4rTg@f%5jn;L}lF zBi~%IL7ZVNWGcud+);LIby`cTCsd<8Q2K7rcB3Wt5SnbW5m#OKr z_kVHm357KB`$WwNHTw{tEXNc-$RejWSp2~UkA|#(Y>Pw1?|$%TY;xuLH}myAZ0=40 z2e~3_3seJ5=FiXp>GE`BsZrnQyk0gDpBlDMFiRa?vl$*l~Y`(?RnZ5-B zDHwcy<#igj=t*f1c)r3lis6Nt&kTRxG>c)+a&M^@Te1 zxH3#OU?o_i7qN3^a-1Hv@{Fr&gWGjZ+}j|k*M?xm)t1z z$8#!Gx3h((-4|fC2h%SgY7(F$@teBw=aYewdJgf}DYe5Or}eZ5xT-q3_$Qos3oxW` zeet}SeO{}6SXJg?nSLP28_996Q}U!QVFQr)MAukIio1<=Rj zuX1nPPRzt=djm$y4TOPagj=*lm;OB6j}%WutJD2LIvDDGVR;s>#5pP z^!vJGrqJ@+1&33@oUY(tvTAe%pmr>)L{|V#I|G;N0GWB~T2u-a^BysqU7iPhr$8Tb zi>!LUE;a|RLj^YE{z$}aCqz;cZKJ{H<}`e*tU{L1(X1!B+N(r_6GeQ@S10ukY95%H zIf6z9yqKDG98FL&>jG1=EXJF}G;Qww@PmYJ4Q}I>BMzHNb#D$IY$nGy2M@7*grtd+ z&5{>Mnt13e57)_jbqGJ4pqd^9?Xts#4zQMPo|>|PL)GvQGQ+b zzQ+4uSbvLg(e){=Ph0H->-H$*U#*hlVaOcqMOR?4LtgMSDt+L$*9|>^rNpg)$qumK zYwU*cq=zc8HEgH#te{_bLT!@WdeTFqzJZll82L#L0zDDarzbsB>IvdOT~lp6WakO_DY@p0k5rdavy8-nOnty)T9Dc`ilSZ@$zbf) zg1%fPv$4y9vRr19u&N81a+!?AV5KlExkN@~?8Cj1hlEB6KNJQoC((a)I(!dkAQ=7q zJot$5B<@Lgf`2r3um0P8wUVWcl}YMUxSgtPT1GB8=gAo4_(N-pvonAYMYgXDdyuge zFC2>@Gl6D@rY47nI8@FK*f=}9GWYHjbB+t{y{CJXpAWmhW zwiiBliipf;jM{drWRqlN(e2dQ_Kl3zoCULhNv-uaz5s}(N3to#VH`_3jAKcMaV+UD zjwKG`Skhq}OFE2W0mSYwj@)6%L3nmscO{BLND>~gP)T=|NK~?8KUw9lF=YNPcWGPD zN@e#12@o;<$)wotd4I4OR2&28%<9KB*Y3x=r#P`a&C(-NX7HP2#A6ABeOc++`BYiH zy((hb22R9LZ&jqQsNSlG3c6KMjbg1;k#fX0V}enE0JdM4=;h8CjD#2$b z!!%Zs#6zKip7D665yxL6Z?9i);EOI*fSqhmX6#gla>x8b*`*%rEPb%twV3w0K^ym!6tSV0utYCowi5g*;S&WRXV zIo+}6!D8FH{y30?vk_8SBao3{sns0YsPL~Vd1cu6NQ9ZM;_yyRfKs|k9i5FKMG5xw z?GSUe=tT4qJJ3jG8|PY$dAtsumvycc{vu*j81%LGk*^Z7AoOq(sRUBe;#I{!5k#Yz zH5~-QKyR@8jAKX9CpP4u(V7MjlX_7{G8~Z(ua1EW=d<8M6IrtbD+Z3}xpACpFvJf2G+CP;H; zbJ6n8vf^yUAa%NWXWPh;LV%$3zg3z0ZL}TJD&xp9N!#XCnvAxFKWgn zz=kIk+)9VO+yPYw*m%Mdl!->rTXKQGez(YlG13VYru_&4l5CLb%+Z&OqA@?sKRjxS*}QOl4V!8!mWxz4XQE2&^0<9A+wS< zNGBqf7zz5duIQz863U(O#kr?=fsZ?)P7bbezzUy5^3Rx!rDa}I*~0$X7Do!A*ty~v@i=9lIibmed% zv;t?1>=L9soP(@&)C^MetPQ;s=U~4f+QB8L6582^2x*GH_efiR;7%d|Fpg+X$ToDH z(_84N7p9T7FriDS%$M*M%1MZH7_46~^A@I-A%0&i$!!+iLZoeym{CB5ycEn378|ie z!gZublX?NTDhH1Qf<7{H7h+9~Jh_dtaVNX3Ek>@*Otw%PV+jbZ54#azKdSD#kICOv z5y`HoQkvUXsXKyfRzx9MTFdDy)jD@ZAbxOgV?gY`2la%JGIz&=#x(}XYXqY zw*AXclJH}OWGUu(?)1lFFBgwlLc-UY=IK4Fb={=1vAE&*E9NIXVfo1uPfNa8JQ#~L zJUT*!q;1bo`?b|gT=DJI{KTPH4Oe_m+R=0*7Jdb;0YJ&6b-9nL>wGog>aed4b9Ins zwEuZQ%}H1t0ighRGCdFS={ZP)eA4+C89j3(n8?S1q(_1|OeK?`2_`C7{a0(8g%0^(lC!ZY$9hqC)x@u-=5{uje(jGp8euZOPCC-DiR^N-QGTJ8Zk^F zSphMF<#z>(G|hlzM-X0N<5De!5aPWy@JPWt%&pE^ywop?^L`?0){Y7pKzX?034VOQcF zCV8ZTvopcg+Wb8cI`oG#h`uPMMt6!pWY@}Ot;~PR(ENrY+Ljx+-W{IEbju;bjt@Lp za#t>e})HfoUrPl}DpY z^PF}H>?0~ccu_c6;ulQV_o#E`<>2f&f zqFc%_4ZY~-Icx;3o;JrDg_SfA2^c8|+S|#!2mmNGXT;rE`U8mDyHoOsP!QF0vG4&Xok(5x<9Kz}XHlMBbmwH_?srTZQ#*)b zZOdLEUV>WA(5e=7P`b?Av@hLSe~|%SC&j&276m<${8`t;#7CScTw>!Hdy|P{`m}P3 z;b6_EdVQSWuBeUrkap6w1#0MKKajjRf+YqPapjI7j^e8^r`l9~A|a&|_6Wb8^aUHdcM z*J$;0S^dNfq&}|s7`io$f1qI*RUB*TM#=D&fmOW?UHDB;#VFqnc!VfIG43F2R-HuM zGca5GJp-R%0*JXQ{raRk);Kc0HidIWbB^BX5AUf)4=l^)`}oWVdp@xcS~PAuU|mBZ zypecFtnBR=8diDdjtA88xaZ2GyVF;(CXa8$d@JaVbn2h;taN!DAf`D#bT9E%ZEz( zgQMa^nNG=*a3fm-eku0xwI%d2loUX)=!Mc<5Lx%9vf*r2_1?3}k@&m>X#Gib$To1z zsgOAJoX~u^-6X0hQke4N)Ld^ig;xb4p?32SbaSa8*s0-M=R%XrL+97zZunt!^M-rh zMSN|X4KG?)_Qsl~7LC)b@(R|I2>60)jAT-J8J)bIOsj`iy1B;lN$jhPfgD)qXsCAN zw!++2z?Z9=mu<*~$dQx3^Q5K|RB1+=T+k$bIl!ZT@{o#Ic5E);hmH>4j)0&$B=~4{ z-8)_VPCI^g^G;iB6pB?o>qefBie8?!X22|)H3KP0P`G4d=miWn*9`c!jXV^895P9| z#>Zxts2x8!tNhVf<;?1?-AzaJYMMfvHDtWdW06)?J9;Lm-sR>Sz{M{b7j&;#)iwzD z5tj<&i@!|Uc{(B>R*^?rlC9|lu zX8jFO5RhxWIuFtTT<<^du30My+oZre4+fq!b8nLY6|ADaG!`#i3NW6Q0$?9P-L<;; z0236%sgq)N-FE48m-6|Q=wZL`;Zw@KwQCDEz}h>f<)yM^DL;(j+EzEOVqJka<=JA!BTALg>NbUj<$>|wK;@QS zimR(OKZwBvZ;ki>cGQHU&@kI!CXvtE0eCyT=)DCghD_Qm{1cKSL)6^N)yxM{ zuT~!cPUJbkcNo}oqDk|hCO>VGv4T&FJ68Z`YKJ%1m}Bo}X)a4H&E7K|w__yp7)KDA zx74MwVa`QMqB16zhWR%4QE0+(rWu&GR*w{wyL+;f!fv}NItLSxV)(njvxNXOQIr%G zYcb3Sx_+T%3y}lTk_nH>PC2H4HOy>~hLJ6;RcI<0wEI~p2FE_dd7heFB zPv1hzI^Bg;J*MPzy2~>kI%-oPqp8zfe(OU=b-If}@7v-~@#zmafEb7m6~CCTFKFM4 z+@O}VhT0DmkcW=qdm~dG^yYij@O8R}JoH@mm+Bt!@ICs3I7b5_=I*io=_THMbHW~| zPraS(@Kpa!>zuLFZIH18`>RH(iqFO4ZmOqIvtCg>#8m(m3`9U44ly7LgERD z_Y?XXE;qL-v|#vzU8prDhv$+6PIHuiv9Q|Oean#*8530g$}z!k;pTV@V#ds%tTy8g zP+ZXwPnF1Jky_f4F)CS;c-ZAvW<L3w4=~CfNAsl8BaD`BTqxb`$b4f<{PuCy|;-gLTgT* zv(41XeT=ugZh?VUYMdB6A|%K^hl!vJT=PGwi}d}_0deV$a~yzjyn>5*}z@g%n3=Xe)@ajZLOv>$&U$N$yiNZ5u)-u zFxp+9h!&>@l&u=k;tlcGss%9901N&N;`5mAG(RGZwD0gGPUhX@m*`-_N`zT&+$<+S zxGW^FLg_l9^cY3MS$Sc0PaPqos_O;QxW2-$fU1TTb0rQ$`-M2!W1bc6 z!MDkXE@rAFzqr~b$OaDeL2N$8(?09QyJiICtT$%WPvKg1QXYK5V=k z57pyM^vT4VERnTrC$7bTrkF+mm8jo5w^Q2jrb4aaq;q_u`cSJD@#a{>?I^e8M`AJ; zZ(=kdyQ)%DqLK;^=&7u4#GB6F7>l6+0CV3hjv^+O0X>wSV;qR9nl>e}yKJv0#!HDe zmH32lU@udY)d}-gnn|I6vn1@O=MifW$?jWJrEf zlgvOTk@!T5dzZNzjsPI^h_n{r^lWf znr%iLXEpiGg_hIlQXOK{mD$FmjFrQ}2-WfQEadY=b zh2H8!Z=EHE6_N93fz|$BdT~37UF{wDF~4Wj>Kw~a;T;6Lfy-0JzZuhvnc*zpC2lw$ z@N%2m1i<-%w9L4QcADk;nhF~W6YsD5$dgQT15d&2C5ZZ#^?Xo)>^eJQ^tXgjC7$8w zi(>TLK);6&97uH$ok6Pu(W(}U(5is>ygk{>UB<6zm9S%BS5h4ogzOubTnw%mN7n=< z#r-BCsk_kzy>jw*zy(ziPjslh_&8^0`K!dSE`_MX$l`iQvb3`J+g-Gce36Yq5M5tQkfx|U1JqdX4!`U{x zof&_0pKf(56AQN6xgNjsQk-oow{f}Vf8Kd%!pVc2m)ud&fgVmcumA`3cT)XXk&q74%G`|ui z6Nx``S_nE8tf*axSP>sYPMn>tm>G1%8l2EXG!JQMwSqm)E;4)4bLYzs)yP!4wq|A# z+uE(E*7GN+i{oT#PbaC@KqUKmI!V3ObvjAC=8R9Bq)si!UskFZ+AF#zjP>I{8ai;1 zpTG>(gXWyiXat4i7bCQz7NkQAtN~evl~`fzqMwHMrMT!Jt%h(ZS)}RIbj%A}`P6h` z21OjPs1X~Z42q4l1dueL!;`m5F>JIjy^LyrtYg$~UU9cUmbh6>hT zv4c^CDk8H_AN|=T`Jcs_>0d2daa7(5=C(7l9JK0qdr4?;8fs#L!TuLc`W*Whj6=o0 zJL%&*@?iXazGX0eCtqLEUOhJ$%F=lX%j&{toYGwRx_GwZc$~sGQM|MPq0ZS*xJ}KQ zXh(T0QYe&+AC7rK)xZtJloW9AFJtgNjRA$K?4y+iMpX^+7HPiZcm=-HKAd=^+vlrM z5jj8xgS+F6c;-Q7HEjrSkd}?2*7?yoNoo&EJt;zNiieX5`%zooG8NXudss4|h%2ao zX!!cubtBqyeK3k$S{S!d4fKOiI(OZ{W{o>bH&Kha zJRIqyP~jx+DO41$m%dUdhE)AlOo^%dQmhS+=4onQDnLn`np;{nrg*5 z)YYdV>O-MdX1!Ds)m&TM6NE16_u<(}8x^hQ9q5v14W|c4X5q^Yr!TM^tnRtC_^&Da zBMO&O#=fHcWA0X>;b0yPykWT)%tL%m%8SL);f6jFT@uXGULC&%0oPXVl}D<`>O7Nd zu#^0VbF%G)ldV7vcDl0o%gkLN+x{Z65bX4&eEq7*HUQtQaaNmzZfIGa1YEOC7NNgc z8Xb`)CmJt0$-~fW;+|kenG-+@Qm2QgPtOu^l?RIIX#6oL`Q#wlNrL|W`O$Q85Xks9 zajm3h8#Z&a4I+j((-Npj&Sc5U92bRjq~W8%5pPc>(X29w9STc9g++?{eY1PAqKT@~ zb6JBWsnF&mZ9RRc_NyUjub*W&ruNA1Qp!@S^)u5XUC}$+l;={RFrEWk1)(51mO#w? zZCK>WD~id6Oa->Ady!9OHmV5&SCf8E73pFYa`XeEdV&xy?>urG_AVV#hZ!ko}8Je;WsdmEP#il&_8M%9#{fgtRFN z6EyNf-X?5Po+Cx6LnxK_Oso|=Byy2)BN~i&A@T-%BOboRla)YEGGwaX95N#TdoXQ` z9O+BJb0F+FDCE?~j@gZx|JEB~&+4PR&-g#gK`b&bq4ttD3AtL5vRYKY$=2m9?BbSK z-mN%6yT>KyAFdRAtx^oVYL?IV7hHILdbr9W7RXYi>Bu!&#LcM|oi26MGEPz|Y>+yD zA&Y#+0aJU9I7m$!Z~*?glA~d9x=Mo1#CbqPVJ_MuxCAe2 zpy+ES`s3Zhy;nKzr&Nxs+`H~syS~8|IAV&+gG!8#LBw3qv{u4QPPEmwvq z{9ZD-Lf%iPbal%YCIoK5h+08+gJs93Eb%%4#ZHi>#^e@d}YSQ zf@x*%xo*A^=f!bni{r5aZdW^uY*h78ZWvs)J;_fte`s3mL(^(^%BQW#7TFW!w)tNW zEONCb;II68UZ+8UDqwdTTLyFm!+-pTw1rJK!(*Ex%^7biExslWaH7XN#{bNGB8dtx z-{N-#pSST*B$+}L5)kB5xkZ)z{O>O`DrF_w!RPS!$8w|lj%~8DKEa~2#T_hY)WzyQ zT3)IisF0^scy3R|)_}&7PLV}d|2I@P=5n2Qp-zQPugO71gw{u3EN!0nt>QL%Gr09q zjuH9#4FS*Qpym3gdx5oNpjR*>aF()V-41Vb%@4uPTJ0F1#a0E00Ov@HeNZc=bV44_V+7aD-zg%|3( zn$i0hL&k|SP`F(js!==oTamB3pl?p`)m_wlIC_VY2lQ*6GH?sENK;F%u)$R%#4Crj zF;~8CHcmk}t!U=!x8rp6N5|zr3I_hKWlW$*N||9;5r}t|`SvNXY%oOxIEYwmd@l2D8q@E!27jPPoT z$#WIj41is1FJQ`ci*mE4z(Nj$Rt76FYRuke&((RnUkGQ10rap3t7}b>%Na^20Q|iO zp!5gv@c~2yS07;K2c$$U82W*~gP~&IF(U&=gK0$$OGQyb8rK(>wWU=m9#XzLmA7xx zSlxYn@mjsrE`OkX{ap+o1(&sz-`CqO)VIL%dLh65y8L=Bi0{`vfNWt~n7^<29y`@} z0vxd{JHhPygMwJJG6Ui45cl7Dy}#M}f%Z8AwFq|f1F*Y(5OY|ra;Q~h;VA-UKt|!p zx4RG|D`_)B=~T!;954b>xK9==%9v87BUrDar76S0|3yvf7`ipn(;>HD>w#a+)pxI| z?j`C@0|7(!uyDQufwM2Dw^fqqehq((7}6P%=f(;LOPxPfjBjydTbd(%S*)I^%H>&@ z7qffk|CjI(YZTL>WqL<5)Kd?_hzUU6Zf0_c6P~`02mz*gZSZC0c%S6w{ER-(jE;FH z=8A=f(h1RIfo(PQI@K7Zq}cp^MYUc2rqVt(7d2G{C?#OguU3r8PT#nmackMO4ZXXlFLD<_oIBCi&Rah z&GI(oGm~o4LFY-8CHW(;g{W0K=R~bozo%WH6`2{K>Ft%E)8+T^o#=FBM><_KGY&-R zB8DCz%4uan?2)KB0AnOUq;pg}r!Fmbv?_a)X|-Pc;fnRlg4VzYOtdq*XzLHO&%f}( z3ur7SpWzS@W-RXx?&2bzNdZs`_T0L zHJ>n@ykDPeaUzPIKm4!blXe-?sVaQiU3c?Xv+97yTOZ-usPWocSf#qctrM=0{=plY znr+^8*JBTU7?Q&h_3&qZne`_iO+Hw%9C$Qtf4zv?C*pRiirdrab`ZDE#_bW`Ju?bX zDR=q+W@M3}%~U8yD1j&p0HfrHwDm!4muzYEPSP4|RU7D+wWKLVZR4pK9=p6K+FyF$ zZz-;XlW;9!X&>8&p02NIT@YVLgff#zIQuLv*-l zlJOFNOS+8eik-r}q=D!qr=%?R`pHqIKKlrA^TrA6_HTzjtkz-()pSR{p<5b9kGRpn zMGe?v-iV^NQ{*H#z}yV!-$8mzrWmc#84HHQcR2}-IHUK7o7oe_>>a!wIcToqitn%H z=c(V)YWpyqR4~`I)w_HpW8SU4QZV05zM@@asBt5ox#0cc0=##0@CM{-9pqXiY=`_Kza5ab;CSxehd4a?F{` zD<2t@2~D)K;;rTSigLRUf(IOo(1X~kb*H{--EA~ZH zUhslF2kN6D;q`Kj#B7MSk2Z04J?dPGyP!^o59ZO18%Y#~uT6vgx#M}zd8|SIS^Cr` z()Vag28+4`K+dk-@O@sdRNc&LnoRf-wkSY8lHJo1=Unk#>W$6NLWs#Da{?Pws zbJXguT!4C9aq{n8GjBrbRuK(1Rz@XW&oLvQoH$1z}y=(sVhv5iofJ0dOPVk>FxBYJU&F zE#?YDO!U6DV}Y?XLb{ZwuMBNh6iT-XkV^omSRW!?UrP&rid9Qwz{6TSm6tOO1m&^c z(S&n_-g|9!w=ol4S(I-n-@`m=eB-678!q2qbkSKv8{HDR@X*0jV64a)#P4Sgn0&Xy0U!FTMCwr&GPjHvb0&bzIcPG z58g$FSc!3a_NRpulgKi2Ge+rEPVzIwCOVyQL`XZo{aU?qMMtMu;4PAs$TO1_enrI# zqHmR8Q3dCA)R$@SL7D5fik$@WMbxp@bgTasqUXGUcTwBT;FhiwIeT#mi2n?dd@;p$q zyM!iSOo1B(V8vhuD(9GE2XR_CiI@&7?>a-=954bNM}DaTK*dcs?CbY%dGOdZKvZ&| z=v76*e!t`H%(^f{>23>-3Cf8`h@qj2N{+_3R8V3NquS^IbTKWm|I7ye2*fp zN~y(?>RKf#XI6+^VXO z0!g>f>`z#1$Cb$|XC=WSq*>R^Talp19OgmEd`K589uWG&53u}O2J^|w5}59$Kv56m zFD-_6J#JEELVLdoZV!5t$1=-mW9t0#c8O9@v_pNaywT`GX!UB40HKo9@X82VRJNV4 zHLnF>M|;rQks{Vj<5~^d?G8PoHN>yy~Jafn42+7L7}tpVl-zA z4`rv5o;9@X@E!<+CC=SJFOm(2fEgvu1j2UiZ=ZPKQ(j!OU;cm7#mQXq@W*4_(Qf_o z^k^%UI8Ngk=t+SYUmal1s_wT979UlY@OXRV)qnV>bCFl)A61&dUy6t-MKt7nlZ=8H zPGSMPLxgD?pO)9l+RMTQh$Dp@+9we6TV#>!_9e1b;NVwku$dp1oE+LYS73!oDN{n- zF5QFHqerx)>DCf@f^7pq%}&cEWy?>hJ#zcb-o{GC_htey$KIH96Kdlk!TZi>D-jifIMY zZS{f2Smq;5m(r!DGy*ecZMl03O<(|s9x@1ON$;qem>&sol6)u?-~>vpEOR5WfHDYb zDEDw6i&))~ECV~c;;l5w;yDktmr6VL5=xlsV#Hlx=-dbl_`RBLEgLCbJ;lSH%{ zBP=U;{@Tec5U~1yR8T`3>{Z!dZ;E%)*Y#2L%2c9J8S9@!m>M(8@QvVym4YgjuwMg4 z`ppvhs;(*~n;J~4&(9ZkO};AHv+Qez#{-Kf<;Q6cpkmBDDR2w|#@Cv}f()b$lx#B? zHgH;}Ca}Ljpor&IPn3kvnr@VWloXS9`Wl5FRI7(70!j&%`B@hwP~;9fK?8b2#+?BLGJ*$SFPP zw0dmQ8=H7|xdg7n>X1Wz*s*yCMT&n8;~=>7KBg8Xm)o1QTkoFMBw;4#V*LW4L>6vU z$8<9$l*{WnnZVc4ks`;Zvm%O@W!j$Zn*2r8>^inVh8JFu&bUja&0XkRd{MPJ?}{%i zFf_0StAof?D7S8QO;!<-_sg!xs(Pu zrPJ>*Q#;?)I#mo%j)TsqfeXmPMpPS-jOlIyuvgbP4HGOa%IU zLKfjCWZ;H;Il-1qFw><=jpikz`BZ6ro3n>VK~`=MgA@5$h=mraK=aiD4pO#(G@xrDwBAVXK`P&J-IRWk+&30+c0aLJ?%Q(YK;xX z5WVIFq3mJAHxwo@sg;1~kR{nkMnX%ohxN;1?a@3knxpwYc`+FTea*kudB7$=6dYF? zFM}(JCjdqaW`0p4gZ5uAewjBO^0&X%D+zYswI^qVVv1iNy7PM=D#(xYqUM=Ysb`d6 zHIyF1f9U8PI~bVpLnupzg$nQ#U1-4w!A11se)d7fKeU?jcK82(Na}o6XWbM zV_#)~eU*ir;1i1^FJV{{#B6SM;vIQe2JM;Tok*U7RIvJcudC&BS@D($GHDMrk&9i~ z4aRh$0IC!67o#0u5YrE~hXVp0b>Ue1_kZ_EH$%?radZ{6V5Nvuk;(bN`GowrNj1llj(FMDT-6q_i#fx^f>O(CD+q){XCD@kmFnL zPS{OMV4X=lA1fLKAUdBL8UPRVf=wX%4G+OCG> z3<4OJpkV6n!Kg6)U40;B&)OyW3Mf0g&*2%oXFPix!29lbypP&5X^@O~mV2;LO+Xte;M1tyz z#vygslu4Z~?gV=t+$ioOuF=C9{uH4rBLpEkVq`?1N9@I6)@oUmF6&3=*e%4yC_X>5 zp25}^Js9fTf~%X|SC-4uJu<57MS_enmDfj`z0F9Pxq)CRBxoMSZ%8XTW#@>ZUol>c zba22~iE@2fVwo)9EA&|<52dU?1~ z%c-=~nGDew;&JY z!j5r=?I&G`aUKi5wl@shUvddP$1B3q=;P!OfvCFI7ayzmjRTuba481UQMFqt2I2fG z8Tl@JhwT4q($t15i8*cyX7lW~HA;KGz-6Tldq_XRhMlNeaDX7~?9%T;{OTn)6K{Mq z;Sj*sp+x@)^C#&$loTLb?tta%ivtkY8-%a={leD>w-axO^W2=bwc5% z5RuhUb$Y1D1q2ZCyiqb=ccLA*!yFGr#rR?9N=Ip3SBW z6-cG(MhE(DbX-g{gU9+EK=AD8Cn>l|mj?}l(DX%F^WluxyC89+9Wq$pP3z#0d zlFz#2=~)TJ?BePp765_d5CR%34nfl1toKt+hnRBB)ch;93iSi3#g_FG-LRY}K~Kc1 z$!MvO3B-Q1hgfPjV~d3LxDQ*7;ntA6#+GQV(zt%Kl&Tk42QztYH(N@Og1$VxcV*B` zp5Z%*Y|8JbyeqaCqqxT>G1N3kanQQn=4f}&$&?gWXLdRY`nnTuP|~ z56b+DO^ltFS`u)u0DtQ&3D#rl;;OeUvP4rZPnPq%7fX9~;!_D0@9S^MWxcPTfvSe=Fv%0e zhkN)oxPO|Z)XpQfVL_sXslk{Fk%r5fyQPj;T&<1t`XA;f}8ZZBp$4#ksquX|o zvIjTr!VN{F?LpwOh!N+JQ5d&UP@C?xHnFe;az;VA1l=oclur7jc2j0c`{&MLk6sRYbgaU| z?zh4+c=`5brDu;GtI9R3e9(|$&M^>2AOL8cu58LVJNeG_Ixh&&FPw>e$_77t6>PI* z+Z=_%JEvo9&LUHllCG1&-8xF&yNcEHCY7oI)(y@mNo)0*yqA2)e?-8Jl*AnsW;(*( z8b-&V-iS=t==&)hrwCp1uHYu_E&BBS4>zli9hXO@S*8=I zEqXwkvF8VH1ycLKcN2DPbGU$(dWRt8eL-R&qq&P|18R_=B-`Cbn1HLWyK?{o*u7di zFjpSgkj+DyUifbqSkK`;2tuJJL6tNtl9du>8rOOWuty_RA38+&}Woy(w?z}|e zy6ujltEEFHM^RF1T)_NJe0n#9$UH$o=te~$fT8P`?<#t2T zM1XdjoRNeT`eP=1k_yXswhRR-BnpaMk~U#(A%Z|m!#tsj1JbhX#97LAayf4*agmHv zqwUN>V&Y~*9x|9E`x6+EG{l&b*usNau{IlJBIjk1 z!B4Vzu=?9|t-be72yiO)hy+8%QUEW5l^LX44h7e5EUUV#9`A`^_4ZE_}BW76>h;9XbcnGL+YH%}IT8 z8e3k{I)g}$I%0F0$^TO6@Z*U@#Q+0C(4!~lseJO{4SA82U#8)W!=6`R=7nd6K_dAC zkY1)>o=Q;bElFq_O%H4CsMWwqe2n=c!llA^ni%a=5mrr^Z9PD3sfiQ|Yj429z?xp2 z6HrZBIA=zEW>5~<4JG_Qvl5KrOLjoLup<1F+(bGmyREev3+-ZAqrwy`kMvYaKj|4V z-K@xTLq$q49&ZS}+VX8v4bEyMM7=}VhcQsg6P^q=?6GC%mn1FvhK_I5n>z0qQK_R< z(=6_kno=BCr1P%U>#?ZR0*^{ZG4c64(iw0lLjrD1hYZj_-p3;lWuh+l!MjLb^bcMh z29^JAzEsvF0Eu-0ww?!CZP+Mo;_L*#lWRYOE-p(w;+tD8)xYGFTlM}pVsl1%ZPW!vS@63AbWLsUo(h5Q#M3-0J(9X=*6gJo%QO?IyT)CoF`ND5VJu@iIvZipo- z?9QTr&R{_e7wfuRiOCy{5mkCe&l}xvZnCIJQZ-0$J$@Lo4NUMdwSsCZA1h@4>HNn~qgfe8Xv;cJ2bQcWC(Mn zV5U+)##?HCFpT3t_$WxqR$DfF`lL_)VtaF}!b9qOym4HYys`yd(dEu+t63UkPcC1h z_O)9Xs&&nttJtY_y>v(H;$+#Tg2{hTthRXuwMw6zuUpw39Y|!+m+&NHnkYXuPGx~f zmwh~!g*8QG+8+1Nm|vWw$Mwr1a7(`s%vVVVq|oi>^$WTW9;rUUBXyj~4|KXx-Fet% zHfp2!$5?RU;kVU)&_1R+tzl=<&;{)!8+dM2y?p#4>s%&h(% zIfjWXD%TeupN-(dTnhO2AE`aAP*HRNqd#V{SxQU16b2p-R>w=Jj9kk1i-gd%{n6-|+$Qw~3PEY6VIGF`cwFw|)mLrB z5RnHjVa0Iqf7B}mcNdLh^*c&Zb)j7u?Gn(|CVJ6okoq;%;64^pm=$hsma^KfwI!jP z6%f z&ueM8f=v~uQIBde#?YtvS(?R3e&x53NcJonv4;Q~tHAaoI@XU!+3J)F{KZVREdBNK zeh^5sA8~m2;UdhhRRE`Rf1njJ8NiCR<;e!3xgmwqg*jwRDohux2Jy4#5WU#W!5ke5 zH0F{pbUYrBWc@kfRlA;3^Qr~wi8|ysg#4Cl8eV93hEc<|`qV`;+xz3>0UjLy0hY|7 zGZW}^JPU05{O>)T%fj%sDpl_$I@A=f8mt6{~|#U?5K3(~Qg&QRbqk}oZWV3g9UhpYv_kyFoV z+k#}W3yvo(Ef>hwe-kf;CVvB00Cin6Qb@sVvTXas_i_bp$d30OT}5mHtN7BYsxj{f@KfKF%e0rYgtp=U5W)Z4e=2 z)P<9fxfDZbnav%B`r|H{g_FQe4ks~*X~0aKqvVrE=ybkW#Tuv=__^Ip_{qRW(+)53 zXQ*&LVfK2K)tAh9tk%7$L?${yOqPODKFj2qxeYNjYDtlt=7UlDl&>`*^k_)O!*$#@ z-o|~7^3uQv5exwaYY&umFS>VQaUU}rEQC*YJFV(_gEj~VP?qh#urW56h4^D%t zWRIm^sWxK}qsB;4AD}17w}G4mhGm7h+Lq{`d+b4FQ(`IV+i^;e>&m)rpD*OV0!@V_M$XKq{B&v4hDn3GKEnqpv;7= z7%2wGsGPisU&4e<7D@Id*LF7>+AsT`5Z`|75HG(9Y`2K`<(ZI-$x(9hjQKXE#?LZa z%lLQ}&PFJZC8x)&iMgjMbCMB8Cf+v*w~la-fY$|`q)CSeQr-$$A?|nvF=kQgEPP6K z{H11hzYc|+LTp%W`=t+&V(2R}dWQ9GM3968P}x75p056W<-M=TvxJddak2v;H2)zU$+Lh=$5by_ zN#Z4zQds9v+%y(^u{I^wui^rovp|s+v;u_|S=WbfJnxurSm8)>$5Vg~(0yMkk8;tT z`uQiRRTF6UK?_9|kS3M0Jkmctmp0l}jEhX13$MHWR9V-ARv7K)|5=2sK-*5p;bjCf zG7Y4avP!7@VolTh9-Nl?3GLL7@M^O84JVx0t*2xCOG+vxkpBq z&n8Gqpb0J%vP%R$hQ~H{GaH@#Y=QI zBB4@Ie-IOt83(Mj@^qkK8x z&{_M)hVi)$8X?YoFyBE;eyMZxCV@_HF8$IW0!E^j;_6u%Hzg+P<8Gku7PB?boohH8 zAn=AUhzKV(p0-00D$s*vH$?=B8gTH*fLYCqm&ion#uS)L0)Hu)0#py_+%hFt(4tmW zCZ$qP*Z_$Xt|Q0pENOx=FF*uHc*PZ-J!yg#gZPe4E!B#IaORPD(zOyTISEfnAd0eX zoZ9SNnR7vo&Z%*~bj`^QCL;J{36AADzn7>vXc?GO5|Y7V8!NCr-P1%w5L?Pca($r{ z7*r%~`5;tdFq1SS3`1;}DLC77`JwXn}}fnjqq?={QaA z{CXv_jTV9lMXX&#GBrSuFOD7vM?{)I4I;(-6hs=G-(UfnGRzZ0(Q9QMQv^qO1g1{D zBPTcXu3-4=&soy7; z(AWO&Z!Oo$Id{(C?);zYi-s@5S#?$l7JZ%{6&W9~O1DBD>-!*Ir#Eyeo$Cu7 zMhW>|#t-Utk9=2NgnU;-zE|qQD~i{(O(0K~4rh&eCu9`?PFzOB z+4Xp&2k|_Q;2{YfVOfKu+{PnFdx@%MQ}SlMoyyQpiG0E#kV$7vo9rCfNSZzU{P5pb5TJj%=u> zwHRbl4-Yft2BFMjhRW_=$D{Z>VRdSR}E;fAA-BBzr3H79Jg$p3tC2|PN z09L$-%dPlBx`PX@_{Kw*H;&D1A3S)N==HQfWb#gL17pc{wTE zo@ICtGxTVKs?zZA>h{555O)|H4dnR@PU%R^7@Vm*&Or!^qm=U=bfc6b|BQj{qcqN= zq$)*4!tTo+9%%b(GCFwIXQM-Q_Hv_Yzk&3oU)ef^c+-?{wOYnARNIkO%{W7T0XSpC zlOUI52CK8jAj%_jOmrkldG}k&t95m#zT=2YVED5zGDN%4rkbC%tC4r#yWvR93ZV0E zcCy&4$NV>N5swA6`2`CLUX5C@V}1U+`Yq*kKn&HtjUR~qEdf8KxZ*$OvNUAZ^C8B! z`=ycBns(0ctF5gtg_3PS0Fy0>4pvwhS)d%`g$?>}uzEH!oF(6lOv~mu-Q%pO`uAWv zojzWxn5yv!q{=l6LXF&K3j@L6F~O#KyHU$0m3uHGSspK|qmeGjX$ymBjghD~Re>)e zU14y{)oMUxn|u}l9o7YL-^G~L$@BB+Rsuy!EVHSIUC ze1|p=4N347I*Xj$otzkN=W*1*CeVO0sLb_l zAN@X^#xYxc3X({h7YNrIw7>A_Ct;EH^(>ANYjrDXGD3i&_7R^inU=;uOVv>- z2x=X0IOh z$WonV()3oILfF<8B%~iB?;74*KwdV5o2cfI*T%7cKCAcvrKRIfXuY;V4A7*#hGrej zBdzBhMnvI1;sq9+ti0KZXR8JI>y^VE(+`0lPiQ*;XUp=c*-4+kfv)BWKHXLou}(Ww z)#%^|cIWl0+Cx=H8UBR_CT~{*cTD#Ze;(z~3+v(yM*m>-T^kor2&ny+@hB2TzB?YI zxA*C7q=3_Xfdvfj??yMA$kDi$5b-6pJ8;-6f*A6uWw@{IWT*1C5pFK3P+&ElO^qve z5mQY%>Kl)3u<_(uc~rF|ic-?V>yE{nalPZ4r;77_6*Tl}ty*F@Fa*=)PH>=#j#gLO z-}qIt$i9sg)M(&lgUM?9?5ACLk;MF9a)WHXYp+LK5Y+laynjJ{|FvtcbE=YCELDZu zfik*dexp$mDBPi+Ypd@vEd}ZUbMnm;|D^_k!THuuhW^Oo0yT70{Uw*2>XrP3OYrJ; z?+mUlJ}Y7*FTAKJNx9+=R7P`?w~|h){lfrS*>^Aa*7et{T`Xac1Wq-_Gwq+#_4cxO z+?P3>cvcI+HZ9t3B{?9mwEbY~x}$JE4|sw}WF#7V8ygttK9dWEj#mL3>H4n#7&cc3 z7(lbzR%!-d$#q~ZeM#8Dbh!h*GH@9a6Q-DX*yhrM(_KzH zF==)^g5?wA{KQyw^b&^+A?{d*-GdzF@N85j?X^&`Vo;a0*CK_gA>^D!DT~E%Eg}pV zSe{)5mJH*v;*lf?F(wwA&mk3anNzy;Xl=aOe*CAxThzX$ji|V9O27Nl?=|r&o-Ufb z_yK8|B;1V?|wz z74`|Xc9tC3Yv-O`@_pKCPLG3&ykfKJp1H#hP@U7nG+Tf80sNRy6zU-iW`4pu|Ev_? zea(JthTbOvA2s_#;9P4*KG7b|cfNm-z_9=&0@wESmR2OD zicj1?2|QE`b?p72VzO}|Zwy78Y=2cN{FBx@E6s&RiV5V#N?!~uivfo6_7m_5+_vgd z_nKwecya89vVzV(H!NUZN8B@BJ7Av{v|xF?Q^zh#8W1wGu8{Zi+Z zgZtPv;614!DU5m4G;c{3=J(3ymoVS{ITHbj`-KRc3)c6Mn0BUi@zQJ%oRlyRf!a4e1||2xYZf!@j`xRGaVM8gcy+h z#{#*XK3}(?)N~BuSHBliLapUkZ-w*&xvcl?Kh9;b)yv|A-Z`MZ; zCyfM6_6RN7=}14z!(JntMs;pd>>6QlZPyzM)vj!Pg`&PXxS&49+_}>1i}Pz2mCb+n zBdkf@tgJid&-Ug)l)`M{kziV2{XVl*$^>cjcRX2fT;8@3IU9j*xAI8Y&$GH(-jRgn z8KqrVeC=3+I+p(c@8wAKyZ~dQ^zK3NnJovXoN4M)l2D z4RD|a$UvKnWGK2(KB)ye_PANYtxhpK9VZLPe2@DOL{aO~J$GW=(aa#8w`FX)a_7c4 zBp6$+VgXFjXYGDqYUQw?W1N~m4J!aFs*=WsmL`o4XQwqjuO36eb2?7x;aWDXq1<6W z(u$G6!%sVmB!r9vwy_Sy^9t^Z4Z&EsUW7J=fJr0JxJn@jQeaVNl6lb{T(VlF*_%X& z&pK6{pZ1sfsFJq87?nHgJPT}*Q5ULzUqt7nKK9TxRFgvJ6YkeSOYy41*|08HSDbVE z%wK&9v^L{V+4Ih?Gb)8pLl~tMZcloN=Dax3dY2~ls|h6~fFKlP1o5xwtV{BNG2A*> znG{JK`GRY0gX`|0PK9E2_cE@}$bFHzOpiNIm-zvHoujMrPT&dbGAuTy5`&WHYK$c} z=&BT55zBHjrd2k(DM6<6Hzml#WO~y&7B+fm%^j?O*Gm}aQbK+Ox?({Ag{^2QirZ2Z zWxCq7a55*(`nsZtvB%m&(Un5VpsS8ON206IjIJC7S}W|@S|R#lrmK#h_&9eqbzVgI z>XDX$TSZ!dk)Q#VQ3UdEE%HYfV3fm36tk>|)a8tJl*csFm0LyF*?x5gU(mPCsGGGu zl#o|J>m$HKv(p_%X0D@vKLYj(=1nCL&CpNt;;styPw&cDkd}NVSFDHf=_Q{8pORC3 z%VV++!ODE~=tr<}~)ril6Zv>{W|jNhHH)+(B%@C{J&!e~fm z6S})$Kmeb`es~9FB8LJiEeR_b$$JeaYnB`ttlPZK#E#$_*Nim*8gKg-XlyyzSt8Rwk4oy)k^~~N=VaIhE?itH;CW97i*$$Sxz)*A<&JrcBt2%*$o&|z!8Q|Vlgbx#U0X?G&VUu(4T>TbPW!Zc z#czuKm{vG`K%#<>m`?}%ICUf5U2P~?{k|*6^hV~xljO?qnHmz*ukIgo>uo^%db_}6 z7sezUlbksYQ%Fx_MqrXh73-LxI@&r@3v&s|8O*}3Q}d~y(utL=BFvdMYE84^rZHjE zI>(h_Oo0P({o~KUEB;TuWUn|`tF9~_{!&X8`gWOj*l4pv;)wz8Tv?oaTIJjp2aAtA z-CoN(Vpt}AS;QE{%cL#o{K(PfgGBP5VOyHcB_sn4YSQM1DI!sy60v!656QJqPh^k%i1;Jsw7 z2a({Z1zqpv2jTZFn*E=^+H=ULTLY4J%plQLDu6zkAz42UNH9_+NPfBp$&Y79NR)JM zH2pojrr#e;zjxO3cSX~8Ajl|w_0im<70OA7rFTs6f@oQhm z#C)iDGWQ=l0ut4@e?o2jecC?>02mnzz)z|$0q}8^0l>))fPLoy!2S+^-{}GH8yNs> zaY#x7fQmf>;2AXr2A)=70^li?0l=vafD6w9fQvc+{-6iI?`8n74Stn+MSah!t&D-^ z)EEFTRdxV;PGtaaCIA4v7gPD1JTb#1d7|XM$eh;zBnvHM&YyfC$($IGKMr^hL5GSz z%xw(@~6-#v_GpDzG)a{&56F@%qmIZSt?WJ6`Bd5RXZUo^{`|?{DxuPsLCSeP7r2dP3R= zC42QN+(aVDCdkKy4T@4xR&F=|Me3!B9`1#cSQ-3*+Y~5MJr$QeI;DMM@M)E@-Oqw8PLNab@ACyjp>&~h!#dTr@UI{JGSEtUwnSz~Z`8=~v zsF`{V&q%>!@jYV@^WBh}V&rZS*jZY32#nU-X$1h9=~(%|F$D}Qr)-HlAoO{Z_#KLO z_XrUeGO^usFPBCC_erDZOM&^G0Fl59kO>Wq2G{LRq(7v=O>_?OgzmwOD5bA>>yMY| zDyd;gnh$lG!&_yUx3$OrKaLXeR%^0fs`nkuUT z*p#TaC145$&;_|#7*(?dj32;jZu~>`Wv1A?L|A||k^K<6nqKQYMtuAJ(rDko zx}l0k@8iMkc|+NKR!`QEFMRq%J5<3J9&1CI{%=UkOH1GhIfpVl(NePGXuu=zukGTr zXbfl6ME!KzQ(fCbNG2$ny=?iJ;>)YqLk?Bo6@UA(U1z^Qud-iOl5^S9uMD0_k5j0g zly8IgAIsh+%UAXkNwE0-#|FQwApT?@d}{C*okZ~iG%s0IE6Hc_4_+EPPA?CA@P)xI zD~K0a3+UXkdSqqbI{W3TgI`t<2eQXc+X+q%qf2(3{X&kZtSZJJEsISH?itx*`DYYb zAc;rz3uDMXcxmuBy*%{67Y4sDhWvxC3?8Rg?+PuT)fu$#r}+m@SMtZ{CA-c#`?0|< zjKNZ1f=Y3F8zy-9mNy`H{-{XsvX^p#ryRO$pg;zZ=~U=E$=8t7h@sIogyUr>K^+Ln%-Iol4=6Qr4Sty&=5Pu_U3C z{@m|=4&D`|*huaR+Hb@xs}Khv|fdlxu;U8SrO5 zAiAsp4PMIzWKZ~C20d%Wwo2{t>d4({NSCn}aSzcGom7=gYu?$vBn^VhUy_El6uuF4 zz=^LH(f~%=a%_#4Nd4%Z!Y|kBRf~l!b6!L(p39Rg%Z$Wom30qW0z=XN6x__(tm<09 zCUWn2igPxQjwB%|KH7dF_?=IUvQ$6_<=p6zDHHGIMCKw@ij;}1GS=*znOBZMcBp0< zesI9H6IrZY31jAth!11KVwLl1hiWvs@T%$@-@L0L8Lz5N1u$RlesTiEpw3~CzUqD| z{`-3O6R{7l^`yp#D8=kovf0;TLn_TXd7=%Y;4`@bqpFKCK$gH3i7!=@3x-X~Gh*yK z(pjuEuQ12bF)A$cqEM9A^$Cb%)u}Snjq++GhZD|cs#On5(0r39xk7p}El-JEM&YFT z6&b1HSBOQV2i7wrAuV9`B-!dh;Y!Bq-E+`QXyAV*+18AY3Cp5 zV294clt5C(C{K`mZ+o>_PsGiu!S1%=Ga$C^8Do#nT0d4T+wpcG&s8ByPT~e; z-f|FhAFwYB9Da>^3!veenV3cNrkL-cgxTz0K=V8AvNL%$q;;~?FkCCi3D?q)K%h)V zL&BTWda8j^F&V_kj%k^cs^(!gS^=q2HmHE7Qn3tIP_vW_)JZBP9bV^GOt=mV;%qB9 z{JWg#58##J12abAl_gs&HhnC!a+d>{G!WsU5;JATyzs_VUX<<#G($LHE-h)jL-dRl zBDjLSLw1%N(biKVz$G^vOmQT^@}O(P4iwpX1&NCP zzff80E-PR5djSH)cS5Ep9>tTs#@Symx>aSjRr=Rb)Sk(RCNS%0s+WGrm0N{I3dW0s=3Fl<$$p;vLxHJz0~&)@C-A``j-!1W6x zsfV6dZgcp@RS%XvOL8)~ZzXh#m`M9Btv$(+L%bMoSIIrXi7?ASSGuUZ$L(1RV$!siwb5xrO!`>56&#S=-zsW01ThVOhq5i0g zbYe;w#E>-9o8!GNntay7{-h_{EK6l?A#`RFCSQF9AkO1w`#n<$mM2=Jv1%=8H0!O(IE&g+WAyvddvYS?;J$RWGhV!} zo#!4Rl)XQG-hF$sd-glaAd}q_PdTP!FxfqUHgzeiv-<=+t8%Vn_x1Cr=~1p{_uz_U zGtBN==l#I7?7qqV+Dd1jD`RPgXjcTq%^(pr89IX|b&3YrPdWE#oHK;D;$+8;2HH=&$`S?{vC&y?;IVGF*qZrAmq{dBd5AY*d!VZ8`L&RkHotH_E}G&Wjw`=4}TE zRtPlHleo2uGLz#+A3jblD`NrV&#UNATFu4S#(-x?dWy*woiog%$K&*Oj*Ybm&in6fnrLH zi0q&a4UF|~CuNRdabs~3QY$+~)%bl~NA};=0cS_jsxSC!ZISk(MOtIhF?W2ao{fdT zvgYR{4QNMB#0n^i%a=BQjmg?3Bs(p0CZ>7bD|!VkstM+&;}nFHV5JfxP^GAIY#;@J zm>8_YwA3lc)iXwck*h_)=FyZf%a}E7;JvUFIwvD3yxbwS?qlUgff0&&Q9gw%BJdGm zDL4Bv{}j31e*VPjhx)rLa=Q_BJ;%0;Fo1RjBeLvr#CwM=mLW2i2Ixl9lS`4uGDJ`lo0f!B-m99S4lNmXw9LKZqmlVfG7ZlC< zb`Ku__9r__(*L%XBx1V3icO=tLO<+#Tn^h!t3T>1bt=UP3FuApRwHDEldGtla#f$2&0Zy z;H4Ms8vJCsb6`hAG=PJO>i`bhXaGm;GXVHu2l#EC>Z8~a?%8=u;CgI{*bMd3P#$R; zr1PwAN@c^;wwPlxpIA$%m0J1KuJ996yXq7WWDv&<9xfthB;FF&JMxxneX1q31q^gT z@t{50_SL0L2qxLuLwVK6+gqk`+6x?Q&K4CD697g1vtv~as0Pbq(bz?55(}ud3~|MM zo)ji0D9Gr&pr+l9%|*QbELg6|3H+H_*y%uM0hFxYNS4~nbqhF+LnAMAU49g>xzg_> zcJ>PAn4r3VO8n7_zxYS+rDbvTN&3al>sVNkCtcxmY%y#iNVB#lFmARQNygGX8*2#} z(za9Xh3rWOu^_6>2mxv;EIK*csiYtO=buBcPWLdfodKa|XV}50l8b01Pj+^u|C9e5 z_<6hOsr&ZM67R6V`#U>(N%|ZAMAhhx234qMpw!sGQYTdwQY2%eMInR+c@T|r&v5Cg zBti_jNW^>*V~tTMr62#NpMx+}N$G`ZsFiL{cZ9|w-T8O_3_$(g{7<(v*HkCE?A~kI73ohDvP)P)_aA7%w!IkhVp0WSwNx!DeCuS=k2=kx z!Hjf33M!}N!X*0Plq>AgVJ93p>bjj_s#=k5r=Y|6EL<=9HhYWoyaN{Dh03wA$c+>R z>6aVF${H2Qf`NOG>7Pt#1c`Kw(IGxLR(^4~gX5KP%nI7J*M|; z@JPCV09J_WGsJFkth|_lx}UqB^}EGZ`iESlM-&8HyreTjjwh9<9F1q) zIfBr>J9kxewwVoH$QipO+9S3MU~z1ll=W@S2#lVZ%%&gRpmm%*EHRWt?MJ^Z5IqUup!YiqkY)a7iz$@9N{IxPF zGWZmzS>-r1k2xstJVqmhL2(x_p2rEZPSU1%0bHGe#=>c-Kgj3|I8s|}SVnDm!}mw1 zt?!Sq58gTmNN6mcYMXUJgp*DXVQA@FEJywW~=a%|_xw=+Dur zR7zdxv^1zbshQ7o%BJt&H#aXdj4cQYB&R{{qJv{P|2)iLe_`M9?s3!3z#)K&HKzi( zeyE$+GL$d`hGPH|!H;gDU^0|Uj*tFJ70KZk?mRMN9(uCaN3Dj4#pcX{S(KF^P8-kI z#N}|&@3AnLWQculJAXPQZizpbi_q(jJ={qc20s$+Jlbk@Z?;I@VP|GQ=uAGemR4kJ zNV>n05cijz#7%1`fG1q=QPU(BUxRlKoUzrz(CmvFDlASb#hE582kcx{>CUj#6f!%= zr~PSu3t<`6h4-w^F`>gYE%$A@-4=p#79w`WX^QZH;*!XC0k#D3Hj%oB zRAbKYfCa>5o$Pe%4HlHv^LXf;K?_P2p!hk>1iqZ*Gg50(lLwV=7oJwpcCaPEA)V<+ z^TC$Hi~Jj7OG=(UQTa#|(RXM|0=}p9nkBnDYrRnG(v@mm z%4_8{;}MFr)+|%oCi5@E5msFf95ChF^}&I%bmG@Cx0(tQVb{+s{@^yZWT6VfbIXpk z>D)F8bDN`Dot%*tUe3Z6%JjAiJvh_?1{l1T-xo+}OFAqCBO@$aA;i)dLUOnsL5L(n zh=qLW7Bm&oR-u9Ci^P#)kv)RtpwM;*2$+}jP((l(1m{IC8H|+&xa)^l9=0?p**EkT zKwhoCT6#)a;T;8N{7W2j^N!A`qd}NEx2~fBE=nEM!tjn7kcu5Ofx z8R;X9gr&5A{6dH_%C{Z944{}sQBIT)L%jVWkWlGOLO2G5-t^2ol78;9zx^AK0O0n+ z!~1j6u|h@B2Em>ggwRV0u~B)56KP&S3Bm`a3^osU zsys)1?m*1N9~i&fJrGLiuSB_T0jq08-C%}Hsx;^_6kgA{R}IsjW9RqhxvRbjXatYC z%!P8t-|QlDDb@>^DqUtBm}N596yuOAWA~72^4A%B4Xn7R>N8v{XMn7I_SF&(82>Ea z@!(N`;aK_2AQ(9D0C!Btaf&Ze>0wGxD^S29=!?m_NbhHNlKr>?jC2vH6PkS_S!U>p zxN!3rliw)V#<(??1%SzG1uNR{YfyjpY+y;5k^01s60!GH0=5LUFH~}Q1$(t|E)F7i z851-w*=gD)cxL)II`$=2$BF9E)B4lSECS;UF?xhJ^n5%VmGhr5hwll|0y+^D4woRcYH08yl;Z$&e5v1q!DA_$ba(- zR_PHc1q3U}_CBWnNq96goG<_^^~v<_`8!gg@y2ZWL)r-N3gBE66Ea3?AHEN*iHXt< z{;Te&*LLhM0Z!dc|F-woN^Y&kJJ<#xC}8SdXt60(AOLODMW;GjBmkHLi(Mfw0=cr_ zLl7T|6B!Xu=t?k^pu|+`WD_$?NJ+O9@=l|FA~4mgl9lnN&Qji= z{pnKOgy1?~h6v?H2m;Gxk#{RT+QkpsSIR3Xyt+O#%2Q?^;QU zkQ_|0TVO}*)=~zh6qTs5sTzouRJghcNJ-{4a0yc0v;QMPN+r!t6ngfx2q~5Erw)1} z^^BQ|kV2vz=^4@25pV6P05I>_)#q@#ZOY~J*SrI8ETvK*r@&h~3s@n&7t3n?NC|0P zu3hUp!w#m-z#7_Bu`~E`!g^g5p=M)e{(XdoN}$ow%EL&TPYBsCXo=AHodCK?78&hm z=#8gj$||Ryv(GD5ayxEt#^#j%j{VTIGXDW>AJ_jPHmNfH)SK&6OwcD zFJ`^l6vZ!QhrZ~vXY)DUew8`q+~YXMc2yh@b4+yTRR`47fMRFhDoHm6xYc!>m&o5N^x1TXOP{(Gnh)=gUKAKM>FsB`0p^{aLhV#!BkC)W?gqoM(IDYkm9&_eciaq zuX0@Dd4I;Ozve3zQ5B~wgbf9-W@FI!z29u}qhoDpzR+LU3+(>dK9C|gRYx@!9zdvv zAHZu4KfvV>$*>j{VdCUtLs{xCsA%-(aDk(;|JQ3ze+#{iEFr@cAg0;jF>C|s!s6)f z3!@J#wcG*}b56r8r9X<5MJAYAsC`a?0^HCYaU)r_ZV7tw^VK42MoN?!kBP zm0V@zJ^c*w3R4M}EI&y6Q9mjM3*S@(L{m<%Fz{`Kk#dJxHvHyV*otx1cTzDDA5BnW z+RNn&?qVw;hYBzhD1sRwyo`{hds>nx%Tq~ueEWV3I37q$LK9;Wq=Kd0G!!A4LSc?Co9kf8u2g57sfA1WF*t12tA=U;_Uv=<6>$GRLc z0-H<(jK{zSGKkI0EdIh^10z6?a|b(GX0DfP)<+(#A;tD81OCL#CW$;6c2EzjdRoRp z9WVEbmGGx%>oboFG~b!&2Z2=%>-r4wGQ>+{{GDOkITJ`dQlp@IKxAJ64n!y2w`LBk zIQ4MTGfR7=q@8(ioLt~0KTA$F$NUsIiAo5eB<++~*Gwm+Omwz>|5|^$ZR2XlAFZtQ zmqO!E8GqUA5h()ZLp^$g`&;vCeFAlc9+9ygo#xP^h8%HsW{>1IAmiV&LOZUXO_XlT z+|9S@9lL@3-j?5B<6O*dFl5i?H(1e^)JOYfKh8H1SmcUw6~n+_$hZ)gy1!1F2TPB# zsh|eOoy+HtiI&kAFH@NRnqNsrjxxrcTEt`a66)VcBbzO;VE=hx5p;`$lic1<%rm}F*rFv-mLV3L{frQ(clFV6Umbu-Sg%3MjZDU~h+ z=O{(S!eM0#-{^oa5J`C#gqcIYZKYX!PZUAvl?l9x$#G{e6HCqUs}y?Da+XB1McB!U zS3M*;o6=Q1pT2*|c-9v5^)AS}>7yfwv>tx5pdh@@n61d@``5lBi# zM<6K~9f73mj5R<~c4WxKjz#r3IS~cP$%!aPPEJHY^3y3rL2_~;VRsX9(h@l-AQzaF zO^o52k(2r;a*bk=k&|KCVdNyI9afi-lO4hch+pnYaAV0y)L5F9GWscPh+Ish?YdFF z@k|U6Z_0ta6z24JK{!}Sf6X}ru5xWhy4#g<8KyY*F{}__9|Mia5J^j9N|Ar3=?~+^ zkzqbar0pphiE&z24qa)oV%>awtu9#UHY&?KuUhV(XFi&E#ku<0ed0V|Ps3p@;F3)< zg!92){6*!%99$B24 zz%?-peDK86T|sNAC6I^Yn&z~We)ac^^%{aXd9h64V}NP>{J$>Oo17NgA&hC>Lz%vC ziC8A$W3~NDb5SJ$ryfR z_}AM%vB~!tZS%>Kiy@{BrF}KtON++tMRFm@S&oru5yI?K&ct@d{lY62U@P(r@*1T@ z<|28BA*fkTEUFdX#AKO71*}T_Aqgw$f~CspjHyxZUZ4-~fqnTZ^-=0<_q8YE2vqM8 z1ToUZeUny{ma|qZA%}|dl?0_#OLeST;vhu?SgvB2;&LUY`kBtYP%SRkeb$=}r^#z| zrk`ij6orvo<_Tp!p4|2lD;d`bVII@DRo#*m~m;`E*0Z9J9H@zfwe zWA4qe$#^!K8-`@?C=Jifq$jS?>}c=Ye16{Q^YfMngK&Lk2rrdQXXq7b+e)(B6H;mM*ykB?b>*O% zBiA|Iv0wG^Z8&>XL|mZ2wK`?DfH@YlikG(pzwRRPoX7`IFHk0E>-66CjVXCzmgM!8QzoS%DeN5b@P_2#s3C6ozKBQcP8n^2 ziyqxQjQVc4dptgjNslu@3fLHr44<#$sVibqVI>b?(v)x~U&Z$nFzN1mBCctRFihew zup;pP8XXr}!~qwFvbGdu84++0^t&h+*H8Hdze&(SpEVU(iTy zs8q=Zjjvd9HLFR~zuEpiz2=zrq%O_*On{LGoB;D_n3Gp8F!S{l zL}r7D$t=&IK?hR=D_m)x>rDVB+oIY(q<%zZ!97+t>=qJC7EQlwnX_)LlN z#L~oG8UA)*q39DwPMJGGE#2LlZhza2fzO7$FxcpLYb=pVnqqxYo%9d)gek$TY&bd$jTd)0cj zCQM{`1J;Dih5Dm)T7{<3r`HJ^i|awFvey3Y*JVEHMKUfwe1)yUZ?h^*HC6Kv;jJr~%rCrBZs+W3tBW1mJRcAjk=nb-KG z1ztps&{?P`vxs-Y;$k6Na4YmPIqv_+)!n!dEWMP(a=vYx!2yEYzZcQu>KwHSbysBj zo={Hla+pziZ|vSPn7uLmqsqq6BD=mkl{i5b{e7i}NIt_4-nh35-xem;`V;4=!%_#; zJXw(Gi(w4I7-tgUAj~jrZ_OCR)AWJ!;ZLbJ-Z=YG0rx(hmCSB!|$d3uc6VyI^5%1obgkjSwVdpBM=&XsIN zs0i+}{7ASGWU7yQnG{}@`3YtVUmeW^STb8EnuEe=_@X?Mt z)NkPZJSA>;y;-_SCoTX*PG%OiW7X3C9p~>1ECE^7>85(S&3Y@?bmXz%xL3Ed6gke% zg|Ue9Op(52dM5CdH-C?9L3KrckB+QTiew^&44j{jt{%XlXRbT)^uT^3SC1Z^EST(u za2|jJ!i#1}1Z4mQtd>g4_O}LvY#U2QIPb%?)V@=GHa$-A@;;#;%_r4Zm!3bd{X@45?{xlN#;j*1>%}~WH9ccfFTlsl^M1u0FR2t(M9&F$4X`3 zNA?ap#slXR(M}kbp98L=059#n-)}HE$HX3-=n>O?VDsf@A-&2%m!XKIsra|{NxYP> zzNK11;NWdaNtOr|31yRn#T91QxwOG5i|EMWCVZ;_KRn%jn=Q(Fc`@#|sPS_un=ecw ziyArT(di3JMomq|%qDu{vbc18K3KZrQTCMiY_N0*S{7~~q?%?BWI^2rsljzi<1Okf zH98_WX3R(uHzGPz@x9t{-u4PptoK8!4%h1Pr^f2_dYW0I_`Yb9u zi28658wpI4ln_yrCg0beeEtM6I<}MIS_cvVveP)D36*hfQY`5Q*LpaUf~<4BD&S>- zQLj(6MP1@=CH1CW?2pNuvY00Ccd&KAH58c4>m<`JX=^NW$xg;21gbDa5FXfZ6~@J= zRx}JsqaDSI!+=b^um?yDLzco^ybv}DZo_hgHee<2Gs-yN>y?BD#RmOq$m>u5<}8kA z;wJ8OOz@44h4x7ih8kLH0;JQ}=nEz!hBgvuQw>|>%_I~7r#u)#D~SpU z@fhL)cp{^CjJByNl#~?RKrwa{`cn&AuwPI4sjyGsowt`sVZXGbGt^-oU^`e_?`owg zzJ&wtp=+WCA{cU-sKi7{`W&3$H z|2ZZa<6IGtPhq``7S`f%c#LgrM1eT~!Y9P1EW7W(R@JISqf)EDUf`9PFeO9uj8jvJ zjj1USqmi0gj#V`#YC2P-rYze?O<{K6%W~*JO$idusVNcoqNbc_C2FdG9_DV8ni~C3 z&I?gpy#O_h6c+robV@o;2O@qyV~=5IHg|9HDST_oq~f>u-J895*o!xLao&q_UYu>E zi%k7PLip+S8Ksn(76TOPrVHj#$nMv0v>}n7(5US9=~GaM0$OqJXjX~eiSOdkieX;G zN(`=Eg?_5(k!s;)@YFsiKGiq=Vr}r2RabmVmEb&Z%2qWIdVFFTu(rWxUx6n*9x zZDj-9i0ANgiPUqkyNxISiusW!Ur|+Tv#>xHVDuUn*pV+uw78^vZLqZ@5Q3HUj0=hs z;2<#xDsT`mTyj((6Gzr8tV!iUC@X>=!Ac2LiidR7B?wX}`p46<+={o=AzjM;JOQ8} zHCQa!4kXVhK{KZ^u`Qx<;IK`8@K!zbM-$>)my(!IU{M-p#RyohCdiEPTLa$-HeMs} zCgkcwD*U=_*c>lINxl{4#$?vS_S1n5J*{D5OSYATxL(MHIfa|K!iEC${*_8`OY zf#MN}D)$7Dhd47!_-AtS9dEbn3)Bbo7sE^;O4rj;K3VP1JXztVpVkf-!}$#=zdsQw@gDr z{M$jB7LLsm=1*&ONG#S9v8|?c9!=@dRD1+87mt?|2=j)o%!9eq_2>MXNSlt3F-kF9MOeQML}(_Olxljf8I2%aqJ+ zfr@k(DlDqXqOb(tgH<`)!B@N>ujJl}H##`U1dE6$?nd5AvS}VI?FuF3j~wWw`K1(& zmTEjlj!4qIS)R#c;0;z_&2Id@>RYModOfqin(7!CPCFIS&X7)>C<61{wAg``6zhXt zXKc;uQM$)?g5$rmrSJ*TQYpox>xNzL!VS6+u{jXpUO$qLE~I207H+=Jp@yVI;@0R8 zk4!_1u0;ARa?VMqiuzFu0+Q$%oLk|(OrK4b_}mGu@ucaN-3bmptC_kZ9E3S4l$u3t zaL4u@?-dN@B{MMyWM+q_Gt#H(BsAF@q)$cdc>!H1`cwtzm&I#dG6ka&SstAu zdPy?qcB`3=!hR1kn{%NPnN2BM;ZQqgSjeVGCCG?>rlb|KdC*0LZ75Quo!kbq$$~0} z4w*#6Y>Ed$Iilkbq)6pB>mg$%tV#n7Eg#* zRQYwDq(@O-->~BsMrUbAXFsV~@?0$1UAb8XefCrCqAR<|l>_SR;#R05n}eZ_oXaxB zRe#nFR*;X34u#-##l6t!Uf`hQGo8LRuLk;T*Hbn_>~s;eW}c*{xv6Bd!$WArrbx9i z0#wsPCV__9>hlnxWS0~LYpW%xL$|m!z_igieWH9Zz4X)*0WVd+MaaU_oc=&+g|i(U zNdaR$_!k6dFlHDoLjA<^n^rMA7EK8SD4HVQ0Mi`D+$}CrE z9*`~vYuV|}s;z-#v0M9jpR`#GaBn~C=3a%UF824I?CcT7Ew^|fSav3`UzD{PIJ3PJ zb_t^$)qJX!8Nn`fsEJh5({T8cX>PkF3|J(R%QR(On++ya@y$_xO>}CRWN4NaO?sgu zY_*t0sJeaVy0=VSZn=7xtv(w-k9;hw=S6gd9I-5w7(@Ykp|XO*rIEFbJOp|MP(o-v z+}j-j!uoDg{i{zj$`8^tdc(<~GOZpf2T_TzT@@14ul|8Z2W0Qy-yE{y_UBJjGkx)D zt}i|qiA(5-UI5h|P~FXn2C6;M54ZG#YU{ZEYe>Cipp|MfaPoW!Y(%mQv1g`zp>sij zVspYfokRj97Wx^+HzjE96iiUEsZjVnh+pK@Sj2ekZ{de-nAF%fu~p_2iXjEyd}dBL zm@5EpGC-p%kObW&ai9?_nNx%+3=eaP2HL~AQVEmFEJ(#YOS>6%*%@(R*>!*WeRL@K zESaV>xSj!>NYMD;cUThvZ>-Z6ec@2 zw{H>W`bNleB1~dSL3K@n@k{bfP`3`ZZ!XF%;*xB`%=A^)l~Ia3oKQgQFy=6wL!#N6 zx3rI#uyftEF;n^x&9>`^*@;c>oGZLZ@Cd@aW`#HPDoZJysWI)eX07@H7Z>EZZ6#4d z>5{Xen>Y(xj}PYOJFN?ZB5wPAf+Q7FKF0b`G>x zzy1)@dbYoP!1}4>{PnYP%33)hpqX>0G<^qO%2$=ENH+3~ zgWkYHt<#S47>ax?HpQXt50gCxfl3EXFpfsMk-5Lxt|d>;a^*PBdg73)>~cO$#6oFK z3zG%W(GwAe8lxu=#}fQ$YAv5(Pm?M73PZCa>__Q7+1bggVHc4!;Z_JPq6$)H`pI4s z4Ju;GOuP7$vA6b<_*^#REsF2)h6Z2yel}#f+IaA z%3T#(ydbZP?q<9|4Wm0$FDklTAnf-dj9#rNvovKyExGcH>j@{WC{1UA2Z`M!I!(uXTDZk^L~{(YD1w2I zqNpt-SHhp*LRoXx6-5isjMSUaCxQirXq_lqrAE&G1PXa%2o7cl2VIQG92c@IQ$Ixz zQ%_1C8#}eJXvAY8CrNIAXPzza%p`k^J{B_?ozn(VDI3?k4Ym?7OI$P3?=*rhIhD8d zFf~`?EN2NH#UR5z&q2gL_(Yg`5=z*QE;!gSOx!hIdR*KlF?HlhWr+ie87u%W&bcou zumF*ZTpR9wI_$4+sXeYr{)fyiD^$dTWr||Jw%7#q17($mY!|&TOy<`DGuQ5_11OER6MJ*kFdYF6W_s|Ai2Q5qo^)2eC%Tn0>m@r9N?y?tVJvh6Z^N3V z(GC~P_G@jd=0oCGfj0>>)lI`_eU;o9d+>8vu6&O=8{IsOt8ODBZ>pT8z+M%84NS(91DHdd0~ zh*>n1qk73?GDwG>0d7b!oCVo;AwNW~u$O zHbTHXzilK*tZKWGlQ6_Av!F^1VfGDZvVP}(M#?U;5D%4h%T;D?+Px@0Sv#q-;Xb%< zl=#qKf6b_x2a!3A3>{H5kWuC_8Y@aB)_g zhy`cGsqh2oY%foN(FKlrGN(%^u~%JN{UVE(Gg_1MbGq08)Py_I2FDFuJCjHba|w`{ z_OxtTD6_%fTqu&hSdiXd4L2Q)9fp^5#YKSvFWsNP-4yr688QBN2X7RK0UFrJq{enY z#IF3$*^&}NLSYH>0ULuy%+iJd0!EI>b$0T>jtw@bnET|Re8H?heuRS576yokzM2IQ(_+7w^{n_%cUng$MU78GKKR0!_mKD zLmOdEQ)UJSbKqX<&%lO>SV0(1ceWZvTVkO;D$NO~Qy=O?ioOY`Qy;p^mFx|D1uMWg zzE9dpn=*EIP3{C7(}X;3BuPo(+6aAsGG~fcFv^gGA(_i-uCy1Xpg32a)X0olWsxIo z7^ch?>^()Le2pe%GZZmv4`j879(6EASY5_*WRt zK8CfwXZT{&2dvw4O;m4^yr6tS3*s zkGY?L_@P@@L7VfUn9Rq4-c7*t5HLO53Wv2*+)Tkvfdc$yu;v!NJPf=K0r#8ep!Tn( zJDzXqb7~q7fUpsFE{zCdais_sQLDnJqZUOYwO@4+>u{|G3z6<&g;V!jdj2vNJ@#t^ z0^_o)5D}g38v43#_I5#qmKo-5Np8hWaHuAvLs&Sf1!PasJI6fG3RuqqKZ3TPPu$Eq z=Vn1%m`(U6<1R*o+>j$TH+TH6@xIKFaB1+5C`lp*CxOQ~I1@(oo0zyQ$I3{qVeYOH zrq3{QS4qxk6K?f@Yh$BwiGNDGFfsmSv&GmUmJq+~*k?wmF)*!L7?E+C-iJ&NG!RXc zr^SF~%r)-nxW7-C(j3K>YCzYYvra{cYQQA9jH!t*6U*d-hKOe2QHZ+j5yruKQnq?pm9-E&bW-{ z)yS=$?URKh{%ye;iAouqF`OkKaLx2PGvdI+rOrs3)ESH<%wz|g(N(Fm6qAB@jj5E- zJyarM=|JhcB^FU1qwj)Nja4lNSv&Uxe@b{ezRS}5G{w~6^Z=+Q;*PCGcm>7|Ilj1S zSEK_SX&ud#T9;~padLW_GnBNx_$pgZveuK~))VPmM_MOMQK9uMh1R#e%GN7c>%gNp zc15C%whm9N)&a7{K3!erYD-OJR@Tw=XYf!4LK1(gxfO*~JDWS2zOtN+S5yJYAxu3(_@%Q^4a;eRS0Qvj zgpEZf3wr3&2%!V`w-}+j#RjD_01_z+-EO)O)qcgMtU;JWuF=$n{(3aSR{VN2V@i-4 z4m2$_xqg8Ijh-@Fl;v2@mVvIq(zMxfj0R70%3lUKc$??aUV9h{vE!Xt$#Jg(U}$8t z%Mh~}QPgpI4{39GY=*=5bg5X!QI@ls8P!IzR;0R)=sFjn0bTXkCs z63t-e^()s)`POU1i>-GC%^|GnOhBmzD8;NuC16SxY)RS|WC3MgXqYJ!LP!)YLAp`N z;{I%|WHDFCEbJU2QE-(s{R%!&#m!)>K;r3ye1fDg5Pv*X2#m$78u?>b2`Okr+h@~c zz#q#(?X;cP82>G5FlPqNJp(`r*5aJ!h;vWTo1Dx=nnwsT(VR_s;Rt@Cc+Zin zC$_v`#+VTahs^IzkI2bXqc^G_#se2rqnGK!Ksl;@7@qC4^<{CcoFO#2#w^eev>E70 zu`g*w;8~yog_?A!Td#nuqsY7Y{jg4c;2SJ2+p93gW=jFw9EZ z+l&5ojO?~t4nc|oIf)c_>HHR6+U$Dc(yxtct)YI`dYY4YM_$LY$A@Uk#*NcL18wXx zy_dTkEHrZD`hTHXV5a49tED@hE!~bP&zb3+x})j-#F*N^gE7=U)%3#!HHxKFU z9_y_P*aC}s8^MA`(Ig0Zw2_M|evD^z*rlDRoK&hMIkoCA(FqQG6;D!ZQoKGBA}C=q zcL1%ona`wS*gndxGl3N}ok=-;TnBd*5d|~P#-pA`5fVpTmBAp%I;7K8_zjn7`uCs| zq2p3~OOl~mJJi=R^bTdJBM3H7tVEfp=EzdPu^eGaQzQxrR8DnJEb0JE^!U=Tv zj~%uO{1(WC;~uFTc+N2xC7zMo0)2+A@YGxsa+;^6CAS!Z6S=O;cm^y#8qnGC3RIs# zj`H9GzSW!&GV{x8wR0CNqy-+F!_}|EgVSvR1)8M^l0!nSmjOWH%{g>^Gv53TBfNKL zUmI`lihG*#d4n+ygp60rn^RQ`Va|DT=h@88=4|G;*04A3c^%Lkv9x4cneFV6L-@e% zru=h@Fq>QXaUM@QyqS&9ys=#d1=6NP1P?a;8{6WBKx(!L!nn$CO{cTopY9rc0Sl8P zw>LYGR_!s%u{?L`5bUrBcP&Wt4%bXW~HAOK10)7m3}o z(ndvq?7a#5PSMvADD5B(-V8!-Knkf+ZGnL@7S3v^*fbn ztv=S8Y&6IB?4FpO*)_Xmc`o!yW%iJooFvDdz#=F&P}dwo@}Jih@{!=7dGIrMVV>+9 zP4_V1`@tV$a5!97X)aC_jtRlz(~iHka5Jl+#UUJj@fVXHCOD`Rw2kGyg4#}!K?t2R z{g4H7b~}=Gsrb0qdJMov(kbrlV-w9?-v)c7{2J1-#R|be97(5n^FT zczqyai#HmmWye|XEE%*;e0QhpF5_|#mUr#ORkTj93@<(Y;V^Z3Qc_rCu`s=b4P$a2s(PzUGU`f2H}w?zPQwlpGOfB4=kQg009nv20 z-mS`ei+|!`x}7`BQQ{7fD=A>Z#aQRQGsNvb^IT^&UE)O|Bo?BKxti|e0d_4Acr^`N zACgR2P1}z}d&~kPF5qM=Pmm~f${llBUiQ&bFnZ7Y;F@|J({_D7H|}2Z!JGs70LChD zJ56;D6+1ZsfyFdl@%G55DKL5obYoJqjy`YxUb?a+whhdk#^rpl#2VbM(6N)9dDz5h zZKm%1@FA1J3(o)0y zL%@2_W3WoFmWGTV<+{TgbYvj-mXZ3*IonN@%96%DCtT%(Sm7!;CREr#i{_BMi#r^$ zD-`hg!W8zM9t9hr?l4B^j$LSi0#%km;!$O3Dp6xKDNtjHb`o5wqU{APxY}6oy$0DkW^RFVinHbl?Wj#4Z@Fa+S>C&H%VMLvicFZIZNMzfUV`doKD&-jV zGqxYg?t%)4%gUzevE(?jbp`%-O#E@KHftN6k?}d62-1mrSrgMEv{Nj$CC_Ht5KXg0 zqgURvaG=Zf#&w$(EE0OL4Yx~M-=MWdTWrkIQ*F9KT4U_W5W|ti0P$d}HmE;I+u2s_ z!^`N%W^G$i_f6a0e0Sy-4Rm4%mbsO8Xn0p{!iMKo_I1OvCbIF=ZMt6Dcs6e=Yo)4I zz-7{>ZipCH9?VtYl{IsN2P6E<5h6pziE9Gjm65TrDZ6IBY~JQjyy&$f|K{ywoMP)g zcFOgquEbe~5_K=W!I{jj2VNfyDbL?PD%b}X}-ft_)g zK`4SJj**-$#C78 z?P|3s3}QXdD%UzFBEs`Q<%>b{P2JWXU#Qtg6>xkVM#_j{z_IWlF8&DB%?FiS>!7}o zW~w|qC{bd2;zSpx;}Xb=rJ@|lgbIpvH*jf!jp*jYZiu4#;+A1j>sc;DHB=I~xk-yk zhTN(SBQNQ?h{_2%8GQ1 z-A8UoirYY>(AH_I`c-u!Z$}`tx&)i-+Bbn5WUc=+SsCYe(E3xmO6d#b{9I7M-~WY@ zfgpY6fBalYv%sw^o`?f~T5@Bm3u~2>leI}*=viE}fPu|C5xgZ!VPDd7XpEg6Cou_5 z)Q|UMQYweab>zM_8V$_KmLIw#=0Wb_hHjC0mGmzv}{UG<9%`z8nv=TDq;4&OyzWaLKu*)6$u<7RaBBF4r{7P!1aru{yTBi!?^`P@+%r72nx>u zriukHjBy4qozNEn2E-W)6DOFbKafFR9rYp_ia-S~)60-G*|S!X2E{K?Ojb8DEoC8dCl*@@ZFFD+Ju2v*wip|uNaO9Tn-mv{zZhwRVd}Z z)jFW1hOaT;fr_{in6VCA=+`5y7@(@?pr$lZZeA22im%1q7^-TK(jTpXQEZL4noTHb zY2hlny z)Bl)n`aFNSymo@~X|?(Md1=io2AAVK>o5E1Dv zZuY|oj_0`;5*6>ZqH@}c!(OlhW<9E~8}lC3MVq!*f4L^cFhL$0Gu~dKpR+eRoJ$iFI>@n`TAI5u26-FAC6sc`qAzT4h zDpxP;w^x=fq!2o?B(|L?3QL1AsCt)^I3zLjoxbh0PVtzo3!Liy9=gAm?&DY0+u=iy zVvgEY^!7@Mu3{?S$K-t+v=H?nym&=b@s#ux9^$f36)I&m&1**0{0hzQqxlKc?o>qz zJ0gGVf9m}-5bDzW0`{|Qz5Tp@Ak-{Ii+5M`nyJ0o!|%3vca?V!^6n&N0N%Yx@3!oJ z!|y6b#ZA0>h<7Kj74WWj0E)wU`!N3PwBOux_zd3k22;`-_%LtQhfN=*5LUxHOfxq# z49rxH%-9uZL;DNGE&8GnZn5;l1aD@@5+$z;UkF&c9{56oOE3x%*(1&fDodFXVTmzi zKjYl4-^v7B=Xi9h_18zJ<){(f!U##%-GkZ>maC6)%tv{fz8VX+SsJr`7|TbQFT9Af z)&_@{bQ3j20v2M_PAGCZB^{f7e z0lwS|`X75qq}46Gc2-8GxTFW9dTyi$!S+Jh1 zk-%UfoAoz_`YRnKE3p-V4Oh(RywkPK$2>~c#6*Rjh6T(jHa6+d3S;}aBUUzSW!~xA zh$ZoBN~F&$cKhp%`dGIsbbFToEu-x>4z!UDeL05(X|b>g71fiBrKa?X;F6ZI4x-y? z{LwZjt1`}R?=Ogz+0KGnC}KC`dsK9e9vIpJl7d=={ z7|=y_tG#})Hyq-kwb%>cCcjt=2f1i3!kw)8#Vz3g7o9~o_x*lB@&Ya<7TNjs`NbYM zXPDqcnEc&-F^fV1{m7!yGH^l1RuIrhalJ@}jd3pM2Fd^~XnjX$b3voH9C1NgO6-L- zco8kyBp1{?9_oJ1jncF!t4j%vzXZo$>h;nptZNBL0PdS>ap7C}o8wyE?8?ck^lp-5 zl#ghdYpG6wM(;MR5yyK#uXmVhNjw0jcRSaNvIj7Gxb>2Bm5ZbN>0C-sptr=#C5}L* z6&Joqc38^rWF1$`8$(-;)`jXab*rH$nshNBvF?IuzU(j0 zk-otLzwyjq0d!x^2Nps1$Hjr6Jj_9-foXFs4(#h~b1e)E#mz8Iyj&a@YM!BiePhfR zsCG%=QHFG18y;Y}`)?C_jxr0KjV}j#pKD(gQjnYf4Hg{fBkfn$0-NG19Py{r9FF=W zK#Ni6Qp)*Je~Bp|`~Cvx;(_3{3c?-!6s!uj`Xvh`toY>@xwJTyM5@~`?N3>r%0#a2 zu*yQuFImB1r(Z&S!tH*^LJxcW^6r>;ElKZK3&Ee=79(O591(W-v(>e5*soUB!YzKa zjMmbxLOcvMQPhp)sT9%lbovRDAl&Bf;fKA)uSjlbEoY*&u+sBw^_C~Y-~fq(>7 z@yhjsWCyPBl}_9)qaJ9=NxGwAlBz&NRQq%?Oz=PKj>c!1$Ge(61+&o67)WkaeXu_% z3o5y(baVy3s+i=oHuV6|s}}EsZ&|S)zPXvI^0jtlX``-iVy?PEU=7EkSyxtzU9k-_ z>q-#8xGr5exKUSR^PnrrkZn=F4L0BcRPIpgSyybAzAjz4XQQrg#E81mpetnfgkf64 zLV`s>TJAo!ru)vCe@-J1uu1MPlLR;xKzX2UBxXf)vaYFH;GZnrWS*ucpe-J@NCsL9 z3WMmf@In>q|Lf2tY+hZh8^Cr-=j^TTTP`<6PbS%h8vUk!B=d=qwh8X|;!mI|B#oQ0 z!dVWaDRaXo7~;A9q@}Qw2D7Xhti_8ctQTa-N^~Z$o^mohSCd#_8{m?dZcBnqubu>A zHBuAvl;BFgOHdtfSK*Ey5v2j5l1)1VTaztw?uI;w)T#S!nTpOQ3duBlF^eR|R+hLt z_MsA?qI^pb4>=KFgBFd%%|hHz%QQL-jg*VDcFe1IIGe#%>p%1=2O*wiS!@m) z`SeLP%SWk4+=4q(M8OmUXvq3pN>>2@s!3(H!yEpf4iD!@X<5)@>ZNO#xsH@%`K%r( z$^MIbcH=014`V47vLrpIQ%G2X_JuYDbt$^OkELuJ+9~pTHWv|KCtr*R@j|Lnop^%8 zArXbi?XjLBZ;uc}SMlD@`t3T|zA3y74*;PoYZFk-j$$$}#z1~;?nNwCAF~XB8lfW4 zIB!UWG6jxx2p)&%TI#RWIQ#yIs>^^ekupJ|$!!6Hyg>rSL}&>ZycL1LTN>G+3=$I~ zkeC>O#DvEQ6d+;4FkuY6fTCN4qLUi^d{0MF6%uJ@TOqF*x$RGjrw0&(B&VegavQYT z5`_U10VmI&`23004?RadOG1`-L+gVC27=KHi^E_>lfimSlv0U;~88pzpZv+jFZWAjoUm zMArfw3)!0B^dKWF3l5yc8wZ>LiBZhG#0b%t9Rkkj-cFFeoJJ)8D)OtWp*f{q_03mn zh%nfV*U(&H4b5f9f|_b0WNG*s3J#AQ4v(GJ3mz7g95Gg$Nsu;^#7=x+=QOJgu0F^_HL8tAEQ1Y!{)J++-B z8?A3fJj!=w9U@TNsWX5Wa}_D7eS;#U~2{=szhd;4~@J50Y~cadrUxDiE4_}XS~^h=Y^{^=NJ<+-#*50^&R1n*jcbpnX(~RcDM6f1JFXd0 zvlv}815)^L95%qRpUwVYKj;1)%7_~ebThA<6@yRM=R>fSz9;OBXVUG-hmdQ0m9oh{ z=|s^b8<(6puEV(Ke{|;P0AyP8;YGiGP*FJwvLTq~)*kNFd4ct@W=Xd@7C7_q z>w6Zk2bV0xGJO|IOCfG01ljVNq|+}unrvi@GLuD9K1zlX@_s0VoemCJP^rrp!A1Nu zq!1hniy1gf5uw*Lq1SEZqQ_dq#;kfeG(2q!`eo7kiSTwRY)i}UdqNLoKc&~xdPph- zf4IdTPU<0P7W|?7mv~byj}-1OCL0?j$xT7Vi&wOF`MaGWtq=`WN~ysdxbjeZhJ z6Mw(_P^tJ|S^rfk)oQI)uaAv28qMa}@$pux-R^YGou8PPoa}a|rlzN7W@cx%Y}vYX zZf<^l+qQ*;#l`L0mzH+y*ts)=H}!h`{=>U=Eib=$_wGG=_U>I-*|%^1{udx%V!0KUOrmp^oboBq}Kt@u~xevCh~V%Pkq1O*%YY4Xeb zRpOuSNB^$$JDGyhSMxW?clw)%Wp+PWPVxIRe;WS`f3y6le@UU7Xk8)_*tBzwg`lf> z9x4{%%m7*Oa*v8nX*?^^+~Dsmet_$XI=-8KHTZ$LX*|awKQI3z6z)X>;fDd$@kOF8T-p*|J zL>z?j1@6t;orCyXtw)YNd0mt5FkWe#W;ttpvR0{$=qJS#Q0cO12hI1Jm!jgU_qX61T;_}22+?19cY-M)gi9oj!Xhcg=`WKY4wjDx%|RK z6jMe$2YJJIuC(~$zfOjkdfevBDMzOClFGf>QnKrGI8kjvYytARlM>e6(b=Hy0)0sGe1?XHbKzzsR|azeucGCNiQ`oq>nz)uPm2F(a7)9 zu12SAj(8{JjWlr2wx=Zb+;=Gmdm+M$u)xw~vi9hQgAz=L6k&eT7i&>rOdo4GW6SYn z3ItIoh}8`b%*M*mp9BpsdN83sCN(!pQfx_sU0CO35B^oCO}(h4Z`bLGO_Zf5(ou%5 z^;>Ml<7&y6T9z>Zi_a1abGe3f!?;#TCr)-`iG^-qmN-K`eXcL|sfT~#;K#U8AxpHv zk7Q0qeScc7$_H|B0M37EI^$_$+bEnL{&#>CLVc5I0*N-K8D=WdQC7;TpkMUae86aAKB{Y z8zu+bXUFMJL$)aVvrLE_QwQ|`UoJgJyG|X`5KAn0_M-Y0y#%!IWcHER2aZ}tO%C#= z)oZ5z1=0*@Moj5fJMqH|yL%LMDAOaMly~+emuoVt=&&kqLI9`umS zO5ZUW9j_N@5e>4ETA0%b5_~{LDNUQ)_Am8UY+yBXu#wS|i@NA~I<#TjfC^j7!ZQtD-D?W>|QSSNueVfy3}si-MaB)TuN;`J)Ho8WrcaP;7~%VX9+;r zVjTRmmLL&{g2+~BFvbD(tnTI{4M1Py4M7ELp`-AXb`kh?fNx^}-zb(3!BG!p9P+4GxrB`F?) zO7CnP(P+8*MdG?wl9y@>lJYVnP>v8=v~0B*UL!N_C46IO5Nxs|xsv zL>sqPQf|>1h>Q_Q4J9qDls^Aw=@B*sE$g(juXOp((xZ0E&c^MpX186teIdI=3&XFU z&ThGW)~*$Vu&#+u3^(!9*;n4gN3&aR;_2+xoA~pWV}EGkWxK{0p6(coVypG!53{el zk}qYqUdbP1w^Z`Gc75WL(7-QOdTp83oxD{Dx(i6EnBUntv3m-9TRkCklmOG!)K6>5 zN@A!)kxzVv+Ai06B;c}89l)ur*LM681w>k@+{Ba2g{?s@dK@v7zEIVn7(L=b(-+89 zz2H+XAAm(JKgA;g=hJ5?mnc6*xr6d)O4667mnZ|}%k{NhkMgUOeaf#;?xOrMuTtJbDasGcI212g zr-!-JSXis$T>ddH-c0!wN>0&8zeag0TB%43vYq`aH*4=C@U{A0>{DZfT}ALTOu-U{?BLA}jXB18lcOmLLYhM9uF+ARaDKKsyQ*HmiEE zKf|7tH>%KXRw}shu_QnRacZ*ttY141+0f<-0aUZ5rrYjb97`#OVwJ*<^k12q!%p8% zgR^p|uC-0}(`mi4%b9}Z)b#PYjV+WDx_;Z6K5YTOE9p_)a$cT3-0#&K@M>1QnuC6K zlQ(=Q{g+mOPdtEm(0g#$KLt~rztDM}iMRk^LhhAOQI(gWU#jyZSSSr|7TCa0ZPhuK zF{Xct=OT0V^}MLrg8Jw8_z$6B(mgv|0Ho6pwZ5@A6(#I`LHx3sZLjrD^M*ni`e)Yq z59t%FE>PBL3$tPCh5p$i$!BqUw=^r$OisU*eg?`~(l!STpC<5H8wmtldY$M2WHhzF z7^6MaR2grqC=s!^!CJ9Xd&T&gd!SWrL|^r4SA+4Xg@;Zd8sqPPXAET7UWU1Oh^!(l zZ6joY(f2}?l8`Jky`T8ziI@5e4v1w*cX1=xxL+O17vO$P;jFgbt>J-{WL9}m368)s z!ywZ~(5Sv2dAuQ~BaT?>{!9EMHBYs0S_P-}HkB1$i2wj>?E;&b=1XwWlmT7bs}?xO z6bPOZYn$PUBpyv7Z!kB-JLvLPKKY`>I`bxBJ88QY-!R%bzP@ znZ}Q#mA(|U5pXEyP+5>^{2b&vty3^-U zE7h^a#MJcc*14H2^V@dzcP;PUvv+0R>cN{19lrUt+m9T*lxeAjn>=U@G{Z~rUrdDpui`Q~@L^Q~`t_|50epLyuPQ};h`JiX`MyN=y*>;41f z68WQ-cJxA1S@XIm+(L(CzzXG z4`Hu!5fxkzPwI}sP>UvNeD^%xsYzD1r4xyZ`y@XLcR$0=r}VSb{{3lPaTN3gZD8+B z|5q*Fzt0=9Ebab7VfIYtm&)lM>gg}=6l!%5+Wip!W|4en3nKV0meW7dYyT~;Ap<`o z8Tf@VK^Hvxv_3uA`T27CA9VX1x8ks=4gvikMB^5}wZFxmk|+8*T0C9s^T{LW|E4cK zr7v)L*%+qPSfk&1u=8zclh1yR z&sgwlYFs^Va%LSea@Gtpr#j!>{vOI&+mJT27Mx{TW=tL8i760I0~M`HjREm6rZgySrV7oN*L$# z8bUFTKUL{5e?2y+lb!dFbNpQUZ&Rh=1kQGA{j>Ul?yW#d*@m6EHrcH&AZ}E@uTOTV z_oV+?^YXX&Zfj_*_0I&h^1oM3|BashtVSnH*&5F9Z!4IxwSXzlmeVikwU6@}m~uv# z@^{PWztywd!8NUB7V?Th(*0tW* z?BgEmgbAPJjgRpLevprlLHS(!Z*t=+HDQKmsFFEml27PRseG)=RM~#M#n$^HN`@EZ$9K=5y^Iw{D96 z_}2Ej`I$E8XU>0oD_kmX{g}R_pZr9^`~{voV^7qsXy;qW%6_i>qda@)WanL^IX~C_ z2seabrb}G^b*_gPkOz55d+pQup~xE*_@Z}_^ZZ=I`1L!}f1=+n za{MvB=bybZ{ik~TzE-%!KU?AM$yT^2e)bMHCZ0Ue3bz(Ndq?_vdi;1R9Q4ojard9K z!fO2N?dfmp_rFGLZSk|Wr@y1e-^-cT{@H%+9&3gD@w2xPH^`FWS^_it~7yNaK^IsFYi{s z`b?g@rxorle)e$sIX(U>t#FTjc8I%gZH49d*_+aPdB9@4xA@hY())PI64>P*9p(;t z*^eKcPw(czH@Cul#gERX_we))(hT@VH*@z*tq|fz=hC})@Xl5^Ui|1>dW@&76`%Yb%`ak8b7eE#yCmA3c;F;lZ0*;r`-B52Z(W z`Y=J`{?TpRy-BQjO)Pl(ycQN2(CRK_Vm3I>&*350o`*A0i$1}tXD|*^oYtOwu6;^! z*tzzDEu%gsp{LwE;5`5RI#=Ty2YwjSk@~~q%5r~><2j5E;OGret$UQo{u~Ev7%e^4 z;slR#?YpqhQrzhe32oMPakQ2GFKU-#DZZ$Z^C3iUZ)+J@ywwX%9@WE}{qC^e9cm$s z^YkWvdQe&O&v9mh6$iW@`&};C=Tgc_i$Ff!+3UA^T1M`6d$Fvv`R6#Mz(^CjqXTHva8`hpGiL>;;H&_xQj!X(;22mfK3rN=a8`iU6lVpf;H&^G z70wD!f&8Tvz*zw*I4eMijp7R9&I(Y$Sph;G^o}af z4GJp|*i;~}eOZG?Vl)0AX{GB?;|p zTTzi}{FXg64y|AU#wu;bU^Eb*XMa0tK5<#P-kDp;5boJh)>+5YXl@;|RCqK^&}1}j z+#$W1yvUrp;L*v1@5g`V{s+z|xZ&>uya(skfURD2dxeI-+E*N0P^3(>X&1rCc*`dbPQT zo#t2H7ki{j==DM!o_4W^xY2unzx`Y#Xo)Bz_Ji{}ab+pKOHK~q0BjV;P$=SZ z0nmxZ11!=DiZ?^mCRHV?jO}mmUE<$WfZcw%baJ#Q-$utpW#{2UM12dJ1)SB9CP!PK z2Ybe7ytlbngvcy z5#f)a^e}XyH{Z=brey{}i!PnLe=O~wz7ld|h)~0dgpy8+5uMrxLl?cignPZpJP4H5 z#la`BFZ#^ZbNs9dX<|6`nJ~^q)&WeMV#1$rS-n{QSx1V!L*cZ}v#ely35U90GW*U- zpR+(FXs$cfeb`W8m&E7rA~)zws8Vsy@nq*f^)sVX3;Dj=!wE$2m3VSCPtsKTS27g2@tJ1-+I z4GJIoX#zyzByk_O2N+uFnCXxQ94rQZT!XB3_-?*V^rpVp^lcn~dgmGP_17o;|E0!o ze&WsN&|2Z{)t#E2K{2*~Dr;w0?C;x;R_yT2x7>Q$?RVaF?CwMN+_&9~{5`fs?0Coq|0*+4&n~M*$>4CQ4*e05ac|J4^8k#ZO%+&#LjWPa}EX7`SyRoj2BEDSWJI{6u|r-q48!JG2fLQ<5m(Q zUZu)`I(0_x+|5IYj6A$ZG_Fhs4U`Kv+bPTLfI*A*@RnrB%q8T<%dp4iO{65#+YiDO zpEogb7xg6WAhO)~K{!E2P)={{?FSJdZ|r{Xr-ruKQ}lvP5VJROWKXCTsgmaeuv%Ct z6f;`@Cp&L}r95v!W?T(LNOj&~zsUUqhv@qy1)P_>x!l{u-yDBi;X%(!zT9fPM%s5a zguPH?;e)2ihg0ePn!|^GVmuvkMnU3#E8`OdTin6ESX8TKJlw#*4gPuBA zYC}t@El8BZjR z_PJL2(-nFJ?i@poIFHN<`u%_Gy$QVC#dYWT?*HEZy>Gc!5(r^7+xH1gK>IGCec#c(A%TQ;5C|6-n#-RcKn&oeBh#2r_QPR*M6$%oKsZ~=WG3azc{L%TDH%mtMx+9r1I-C z@eFB@yL?Y`dIxfk}5qc6B53HR0uXp5}Lp2YuR74)Am;Pi^IqCSt_blcLCo| zKpOlXx$~$6f!OR)QEgfHx6@WvDs>GEyAa-lu}|h(avMB(j<^9;C*D6G)M8dnf9D zDz|H*{%3OAC+dIh^PbT?@oiZ&x6`&+rDBn*jI^#+@!3jQHGrhSpKkpmNN;fIZ{DbN z-&TZb7e--m@jr>*2b0~9yKFa9X#^z+=mW?$G&yZ)?Q&-=>` zLVX7mJO1nh1SsDCX20L2A@?6$8(?<&-^l$1F?e1xW9`pP%TpBT&4aXm2X$6(_+eLL6`c+`G+HoK|!7RgZ%wvC>sBV z`LD+))h6a(N#voebeH;%+_$I$#2MC0=nlnRB9GQ25BiMi;_%i_s=quG_m>At`U^S< z>n|;drT$W#e<Q_re@1VKYP$&lLSzY~4#_w#=kLEp}QuQZ9? zf#vf-t6{hgA4@ZN@RGnI2yWXUcyg=7j4^P$4>?FX$(*YFSiw;vVB{S$;w56lY)M+e z8pT{4THlr>gXMmFrDLRJ*%)c*&PO9g!-SxWkCtlBht%yd8X+>FP!f-lDkG$&jgU|c z4f0zc;p$*#@YmiUFt!HiF?ym69)^|%58U~Oh@9IYGh=EA^N%qPd>JniGplS2{roNV zcIO5boHBiRl3^)B(Z_Q?aCrhFNGp!L;*hI6(jG2!qWcSd=j%C-ALWVqBj7{%$E+Ug^#Ij)>xc3WYMO$Qkw*{k+Or5x76$A?`A2Nh*0TtY zxCbc|a>ka5HaMwS^y^@dG1^v4Gc@(w%3q^z16|q%nhAFFc&Mkm>#O5i#!$J3id?EDXjX9x!bRMoR-7uXk6Lzuh58VC^y8CCuo;T+ z3HYRaLRqd=mCy>x6_=O%-BWmIo+sg+RwJwd3i)}`*9b*=l4VY7%8w8gj`@`PIH0$= zd%>_kjk{x1G*Rny=SV;9Wx41VcHas5!}@GJN4~$qLfqDFDR8U@e@W%p z3K#8_xQ%8w>Q0vicz&ho)$IwMXPJ+?#*A&5hmj9+gmdB3vPv_CT~8L;_}99F&)Ga; zlX;$YNo&SckAedT*(UeLsxcc^QHQh6L=*cJV(TZ>IT$ccb0jue97TP|hE#3Tkrdi@ zq=*0MT}W&$;x5HeMc1@ZMSr%e_&&sJSm;Bwz7Ms^SN{xF@l9IkPc^DovU*nOM^~+T z7|N3s`;v{Wh`&)Yur>+0wL!AYKZ11a`F|og#N!T?Pdlwr^>P?WeB=>7K>|^ajTkq{ z$V8_>dYX1#;9ie3;wSvO%cK&al+_A%kJ?2t4!t64@~bBZ_5{Ix%m9A^VaShJaySn?P zoo3MZ`}%evr?)tktSoc<(Vj~GWeuP0lv>`Eo5FO=Z>`g$a!BZx^e zEt=}3G@4Q_M*AZ@6rOZD*xN)VR-20;w)!Q;RoMAqT!k5^_KI4bsB3t| z{n>r~jHaD)HMzCU%u0M2wwNWk=GVo;YcQWK9Gj+$cJqN^>#%ITD*t$6(^}4g@ND}x zrrC4rn0P%Z6R$_jlsBaVoOE}8Zi3m_&Qr8IzBplaag< zoy_jpCJl5l@}ZNFgHA?sD>|94;GmNcFGnY%?GQQ{Ip|~_z(FUY z{SrDEIp}1>H4q)jhfYQg0>qW7ifT^H%0+}|vcq&yhG>3dh~^?gT(59Jos`e*=ugr% zw=;=ki8UU5>7ea%0sMxS#iR9O@%dkVH~F{adWqnXxQa;6HH42~|_vOJecMwaKYOqb>P zPjC<7=5b|tE{pUPxcA}8^872fBXMPkF3WRCWn_7NKdvm#e~jB6w+*f=&cBAM8bOpI zV|0OtVPqFSpB3M|xSLrY%6?s&F-}}O7=ibBtMw&N9|JWNw=M2&zWHrj8KuhzT}J6L zLYGmxjL&71E~9f9rOOCiM(Hv-mr=Tm&}Eb^qjMRh%LrXY=`uc-QM!!HWt9F1u8h(h zu8h(j#g$RIjNxUJ-heBk^zXv?ZfDCvL9k=fen{+;o(>m;h5ozx>SFVWNfLsGr_9Pe zt#wh32?z_Me~fR}BMe4erdZOF*$bYc^|Qf7P3=-{no$@AseivHwgP z{~6ywzWr3|FMIUYd=9=I*|6W^bMUy28r!7DHtJ-)nzbfluTE#2?%|A6OC(3B_>5Ca zWQA1zlWG)k7B&U!d$IdU=FMnMNB*Q8;mP}ahT1a@#NVe~bIwtVvf-47P+G^Ie&9(6P=71l+8l?24`EH?n(>Fv>SJ@loZHu(uJ*3` zzEIQh&iXGmZ}ye1Chy3kbFFW?H@GGBr7%&|s?Gf^nDLdf1daS)eTGGW)wzaxZNBCY zg6jIL`x^MKRlt7*ykgTvW#PXFzD))E{owDffPVn|S1aIAqO#^_`u#71zpo7M^UnjQ zjqpDIw}Ee65}q|p1|yQPp z=dud@gP=;Q-E2o{vWA?rD#=Og0TF)~dl^|mG{N5kJ_PSO=r`~&_Z331uJ#CD3A{B6S(Zasn|-f}=~lPt zG8stvll8{>uvK(S5`CiBVHwJ#0?RbRTTTRsZ^o>MaUnh`ektBr2KWd8cyT+ z#ygoBG}lM`-t)~sjZufWM^Ip&)OMYWA#Q~`!#?4=x-7tF_Fi-;ra@u-$QkkPQWh3z zUR6$-EzMlzd8!cDWbI|4tZ=9i z5&kgmG3ah{?f?6)&|?486h`gaKhmM~PZ@0apZ%y!=Z+qyp+{v}T`1Ra+LGf(xoVm= zgP%?xT^@!_Sm_-LcQxR z-6L;%N>5i-A?`PgoJZ1IZ9SIM(Fzk0AWATeM4^^jEW|=3+EIXvlSgH$JJxQIj^#E= zRwhbnpE%e)H;zOtvUq<1v_X+DG#8$yo z<<`K63JO7D3*f49%ik)Ugp0m%e<5dOR=!nw0VxXd)k2Umi{7fp09d>|w&JZSx8ALa zjC~d4zQR|^Om(Xw!(Ii6?Q^Tj4Rfm^J6Q#Zt#PZ$&2X#oKPhB4w!N(?H@dB|^L)PQ zVoTeqaueIC{5K0zaLqj1*Yq zsw^fI;yF2uZ5DODv&G#k9z_sZ%(J~Lbag|24T-J5>0k>|m_Hyp`a8^vV*8+cOY#n{ zm--G4+9;{V8CnanTmXlcm z7mAS0@;z9lxCisQ5%R24keX(+S=3P}`EJu@LiT)YL6H8!ZAh-HWYuxWuD`n^#EtDO zHBVe`ZwU{N_Ll52EAB02AQ-n#!t%;>=%E>Znw4h0StLp3vRR7DX$-3sJx9h#Jq{?T zs&opYNf9LzYPyBC=KE*ZLaX_1d<$LDeAUd_8Y6jL)QT?K+DKryMyqm@RQ*rZpk^xtDq1~QOX%$RMw9WmA z;AdKASt4Sqg9HIV$`iRC=mM~Z>`Ayh_dFpifJc5q)@N~I#rsd}(m2arR;6JJPFhXU z%=t8N+UCCJ)8qzzei_otD9!IH&3ocBb)yt%eo;rD;xtugD}-G@Wgq1;}5hRJajK z??OZw&^0}Fi5LrFH7s*3^V#()xwPClYgqqkMqKVM$63kwa_4n~D=zmxsgi$EvD{Cp z-1#`MsFLet2-Y+)UR95}>}{V_GCE3mm$erCV{@R-cs^9i>8IKUQM*HcIS1nH9x}72E7H5^JUeqLKfd ziiv$!iG8(EV)yGvTbx)8kgrA!5nr;3y|Fa0CTzyq%-GERjS_1kGn@GB4-JR=jJart zcw;6d>z__hi+awea(m9GVUxAvy|)ATj4I1Mqq?TrAY7w~AC_kHPb=0+JJm{?Mj3rT z$M51=DRwSp*(X+!H%LN8dS2c zHA?J3o#%^7p(muus|?|}?unx#F>SQX{m=`cxs{J!fzxo#2CGj0VV0wmg8PWSF6##s zj3;{jeFW9X;?Zz*GO3Fo&RIs#Ul$-Ol_DG#IuV4)j6pe__l$6VT7cRXpvMZ(qXp=Z z2+Cq=!4-x)ER@6a2_=oKsIn5C_q#AU2g>T~>KOWpWqn_8-qJ%GA{R#Z3=HHNmVGJcm*titm{HncN- z8>%*y!jKm77x&ja#c*x^kH6;cwW?q7H}emzvv*6RsDa0>D_ak5V113BeXAHSIx}wN zWvsFitgE*-4Sg={h7!LgE8Yj2)=I3}^8^l#@iYCA7Drs=t*y026AY+^p{qxV5$M|Z zGO1?``9BNF;1VUw%8L@#do{Oly(C>vpF=~fM=9MB|TBqx?zT3xtH8lNCm8bz~a~G}D7J)SIGl(}*{4{r2N21L%0NAAe zLQymWM>lMPq1_Psr|3-tV!&d5;caHDFPN0~7Zt{V+OO$2$k{lEKcSwEM#07q5*%2F z4Gv{q`FJ{?=Keb}ie{OvCCg{(OHNW+yH+d* z{I)_lYAcq5CbL#7EeARNZImM#BbIs9cGRR+@lVTMTwM>la_f3JIc*%ctm`3VE!4d_ znQf~BjMw6>2jsh+*m=Z%)8(#pI=-$>hXtM-Eb!#Oy5to4rLX5t?~s<|LU)8m88g;- zJ9|*ExjJNvJWoWzxiU=}uvw+4KJKEwTlYo=M80B2s;}6Qq~{YmDD6mav)^7v`t0gq zZfv1>sRb5IE$Y!cAUO_NXQjktd8U5H{aiZ1pN-aLFglZ}fA*(uGz5z@gl{<=@qov~ z=CyHb>`*dQVUSFuGgTT5p3%29hU9%&A}gc3*ldey-HMWJn|qRPF*;HieLU0`f@XC(88CSdz0%=&2#CO+g1EB zT3HF8Z7PiOd`tGxo60las8Aa})0b~8|8h&2Y2QR`G*tZZWBT%K^9`k9&2F`*T!8pP#dLRrrZ^3y9AoRU!xzmk7ctCW5fr(GwW#3D~Kklku}Elj|@1Yf9Kh zARvflRl40%POqspW@_ zyuDIiY^Q%&v7P>^Vml#ti26;jov=N-k^KBN+Uc(=w$tBKY$uxEvRc|sWWO*^{3}Y0?<%GJaQ$LA6&HG;J$3M%-^onVa>SXjlAC zXKoml78(OCawCOz!3{PB)n1`7Sg}=T3`*0aG2pE?k{{~vH(n7??G+m1Clwnb?l+~4 zVg2SeZ;VW_F>LO-f#sRReK*3USO`~WjK8SZ7?h?-W3X`iT{XsER&0!aS+OzVepA{Q z)^C3E#*lSbG-ur4n#UfLx{=19+AB21Ush}kO4Fn%A`*2X;EZ+_r1P1gPA?cCo2C#( zLKsPAS|gk0=(}>E0!TI;4K}3eN+Xu6|AlW~%W;W-@UNmQ*Xb?~FCawO8w&_|`GlH$ zsET8}&-@y@!z9(u)hYG2tAN)hCO(B|eLsu7Op-q-3}|Dn16Lcj;L>Oo{ZY4&Noj>< z4jv&Fh_9iV85~<_B#B^=19KOG{uJbkVA*`pQ%p;N9!NJO(E@rajv9l{V(W)lJ(nc@ zgZHp|yIltc>}k%BXQPOTS{k*Ane3y3YV5}H)_-n)oKEbYXRO^Aqp1 z_0ALCdE7f(S)d3F-ubb29`(+TyyLv{hpFVmxGR64k~gvXvpQDAeV!FTn_4SIcUe_pd6QjZd?wkaXDzl z<)9dsgI-(?YH>Me#pR$BmxE4R4tg^=Fk?BNE^l{j2qNy{b(Z1+Uie;+&w7SnT%aIx z518yqR6v20pHkP+g*94k(`dO(qvf_d(s-S#x;ee1w3)Hb1leIgf%C2D>}_f5sf&L#9JeVJIm zc}q2f(NjwBVMIH6#mw~YNE}sJmHDq%5TeE<0^FMECKgUx!lqSI;T-x4PX5%VU}UL? zJ!c*F-^wBvexkQ!$sbdec$TlP7Rw<@Hk1{6LIX+#N`%C>=pE0%v2*~7k7jfMg;ALp zqsrv=6RCHVoR-}wWq>)zTfJxWCG?QGrPoi8m@#vijI=HPJQJj;?6{4oe1c@=QRW&= zkVrh6Opp}pw=+TB(Bz1oOpBjJlOwhqC~AFf3zK6~!dS~LcaAom(J(EiLHXaNLoGA1 znBV$#^y?NCUkys6UP70QZ*}BFoD1IYu z)I!{df8t7-WHrHxSp@vEiPde_WXkgR=6I9D3*3yPC+c`LHR3#Cf10&9da4l=|BUOf z{-#yLVI}|8(n&Vib`VjwyBMEgTybRYuGW$1P;_r7d!bXyD zs!bi9;_#E5g%v4Dk?8Uq#VsikYr3dNFrC|V6^<{Ls?xGA4#l_ZJP(#mzF-kEC*Rfe z*a5-5ts=F!_3Kd-CAJhT)ThjG;0{Whz)^iti&5fQJ6Bv0M;uwnRx{YGT9r&0i#Bry zO>>?@(lAs$qh7Y#s2fu(G)W$gW38=B%1n&$oi+w0-GS8*E7Q2q2^?h-8-OU2C~gu|=0zLME4z8BAE8(h=mSHrWpG`KL@m ztF47t7Djn7T7x+*0w1>&ZH-`^jNp2<8o2Z{g*753zdq}6KQm(-4hAWaC~cYIXhon5 zP&1idVQupFBuKHg7u$vO%$O}|C(j*kf{PkAg^R}R+^U{q=%j;Q zp0U)z-!-h!ul~xz*zu011*-^63@zA;wYGfudERzCtwaf!mY8me28nUqdACHIp*wqR zLt0|sW9EsP%Bapp=85!pRc9mfM212W^F*4q+&r=AuJ^{w6P0Bv2|307MMV?Du9wSw ztJF;+E`zE;~i2 zc$B+OH%G(*hABuq&bV-$3_9!y^J(VFV(R{WiB|PFMu?s>U>=}jWm_{mwB80zaeBx4TCMe9 zn6F+ypv&+r@H~2^$Yhe9qZvR+Q3B&2m?ZMk3}8j!q`#l0$Z?@4tX89xqn%%-aj<00ng zXrsfb+H%7FK>IzWo7~gnOjDqjifHw31Iea*mJxRC2KI>hhG*Y7WdNAjozi;lZ?$lX zMU0vhZ8$?nO$x(|>H(I>>k!HU7dW=?vz~80zGm%NxxQPnC{TSDx{eOo+p?gvz8RlU zI@G+CvWZ3Wr*$3HBsunaFmJ!3YE{n%@p~p)?ahwjMS-p*r>Cg*iZP0nR_koBk8j7h z8!=gb;ErC%@?NF%KX3Idv7)S#q8SoS)Rv95F{v6R8{Q$Iqt$39+p3I7$?7{(!lN>p zt7P@fgh(|bE!Cbiviepcn!JqrnenGhV@>*GY*E2vTeIuOtPC=#6DY92t4{22n2Xe(pPt!yj9ra_%e!f3xF zN_+OKwUBls>Pb{X6a8D+Rwm+UrDBoj;vc)`2Qq?PFR?e{9VJ!ZwZ`jMzL#$abiCQd zerdi~SVZ|^A$aroqW0*;Toz2)Hh8(VfJ)V{RAc$FHvWosmE-?YJW{XypG zT)}DKY&aCxPSH6GKj^3r8+0m#s)QUqrN)m2oz_5wwNv_fgD#dG#A~P5H3(T=-`pUS zRvfX+b@jKrIh_&p?E8!-n)h(rSMiIZh1 z66GS(m2$<%N>00!ox0-Ez65tvTAgcPQ|El~4lPmqek`8VZq#+!yqO-Rl{>X+?i7io zD#zu15ZwsE(C4aZfc&k9IGQt?HnSz~7s%M%kdlw(?gV72^b1zVrQ@~9Lhe>u`Dp}1 zs|zy$Zt3?fEPjxR-^KO2c9m2Loe)eKy)l#2#l=|Z2H)X5qy8s%gSD_gt# zw2{dCRUPyz>+ettLf2Dpch%=iK!ZfaHgt&8Y%NXz zJ@3ZWRtNgH=tZB@ATY}=**OMh$W<}z&nKTf&(35VK2jwPU;X#p$gfrSYObJI;z4- zV!_bw56B}zkbI~P6v>j&JtpBenj|>NlK;YYf@(09Y2}oCRR@n`-<^Ainr}DRmxyI=>Gf%#`PnUPaE2T?X#grA- zSGcO%%+!C($hAt+!srX6dpG~?0H%Z1OBKlyHfL%qKJzcoD3fD!$bY8BiVXYrSJiXJN4Wxdv|)~e7V3`?~LjS=gV<5hg5dv;M}+=Q-E>QJ-|a>#)(!%BTDpkGzd z&zQYR`dZx2Qo8QYZuYs|ZuWuA_ycG33s?P2KK!-1JmNA*hB*1epDK5?2ChGbD=VG8E+XX$GOL zpe9cy)k3&r!;S1jkCEyes#GK5C^tRwG=tHv^@V5>RA=MRQh~EDh0;G+p4_b>tAkm8 zOmYW@Kl5#`P?&9z%^4iL`B6u73M+VKR`W-zMtnSIu@1GfuEP8?TV@nll5WX-T*F&4 zOTlDDeA{$$I;jE|ejxdXZqQ@|X>DqQi*G%Sy^LlVn#ef41_ex@f|<ph4Duib^SKtAI1^at^0)p z3(H@qq4}b1;z-~r-Zk)B8YC*bvqDd|>=aBPa^4hz(IlRgl_>;&vfTLvHvjz6jO zO=Jq8b7^H}ft5`mtfg2o&{<8~pa!M;nkj_l4qBNR(G^S~3T?w!D`_3EM|CyvMiyV* z6e8#O50-nMZVDkbBqmnpI>}^#jh45C(3BrdTJdrvHj#siX)^P23LXhDc?GkXxlCu~ zGM|~t{@Pp?0_O5mh`BI1#1kS>S7XbhZ!j6LCwi}z1}4kO2~wNqWDORzxo;zKZ*A2m`=5HPh}f7~)?`uY zR#j|yY>}iLgF2g^{5Gpen77eLsS~JdvG^sf7xl`r*-rHg8JpK%6!4k~)sU!jZ%`e! zJ}PhX&wZcQz~?pac@2DC1E1Hx=QZ$o4SZe$pVz?WHSl>2d|m@LRs;Dvo2}1ORVRYv z*i0(S%*>=~YB{NLYpdHQhLgg{;goP{I4ztWz8ua9XNPmbx#7HUez+i97%mDIhfBhN z;r{SIcrZMbdOLh4JQThg9uAL$N5d=ON8!ieC*i2f=*-pdTG%7gGt(>ceCCBr?@XUe z-%P(u|IC2Qz|5e`;LMQB(9E#R@XUzJi?UDG|%J=49?&!=BV z_fGdo_f2<8cTXP+-wTh2C&H8A`{AkZbofDdE<7K87+wf3hG)XF;iB~7^pf<_^s@Bw z^s4kL>DB2q>9y%~>GkOi=@sdf>F$}0=}qa)=`HE4=~vU+(o@sZ($mu~r)Q*Rrst&R zrst*Srx&Cbre~#RrzfQ+r>CUbr=Lwfm%bEU4*RA1rw615rU#`5r-!76riZ16r$?k; zOuv*KnI4rMogR}On;w@QpPrDOn0_;SE1VI|48L&47xVRBec)>k9uH0gCxiEc4}uSa z3&F?1C&AU=T5vphB6%|Te)3fEbn;B{Z1RKTx#aoehsn#yE6I z4M+`44N4tNA4?BT4M}ZJzm|SIy(7Id{YH9MdUtwHdT)APdVl&r`pxuP>4WLF)9<7Y zrQb~-P9I5+NWGYPDK#=RDm6MaE;T+iAvG~IDK$AYB{elQCN(zoZ0fmGhg8Q@r&Q-u zmsHnOk5tc8uhjFY7gD`b-BR6CJ5z6@cBOWw_N4Zv4y4{py_GtcdOP(_>QL(4)V|dI z)cdK!sUxYQsbi`4QpZy#QYTaEQtMM2QX5m7Qkzq+rnaTFr(R3Fp4ySxlG>VDom!Jx zn;M!LmKvVwlj@u5mztKEo_aYoBQ-NMD>XYcCp9-UFEu~4Ahj^HD784XB(*fPEVVqf zBDFHLD)mb0Lh@qrQu1PODYzV52|fz;guBC2!Rg>ka5gv}EXbS-THkx$SK2Jg+<)g? zci;2nX_+rIYu@6P+ooh%?hg(GZw7A#2ZOhRcZ0*hk>F@>EO;+?CpZ-B3$7%d3qDGG zocJU$CUZ4$E%9tHH`6}o5OfSW1)YN~!3#mxpj*&A=n?b`o)0EudIi0MK0)80U(i1o z5)2PU1fzp-!T4ZOFfo`MObMn2(}L;2%fZHAQ?NOBHP{wx4_*si4|W6>)0fhh(^t|T zr9V!8lD?XLHuGGjL#AVJsKOQvh4TV_CbE!{q|GuV;bnS3L;E4e@UR`Ou-Nb+d% zSn|E(+sSv5hm!9m4<}y_Uki69_ayfw_a)y<&dVG~ZV9#qGlKcSf?#2=C|Dk>3SJ4; z2fKqk!QNnXuqId=tP6GpOEYf-i-RS>(qLJzGMJoM5o`!%1+#;B!JJ@jFf({Dcqtee zj0(mEFK5OC1A>9UpkQz?EEt~|8cYb*Cf6m`CpRQFCO0KFC$}WGCATMEOTM1mntV06 zCi(SmKlF`nKKy&XKP&UCKlsjf|L~7~;C{3;Tox`5SA;9WRpBe)>Tq4SKHLy)3^#?F z!!6;~@YQfzxIOG2t_jzMkN&vrpSJty&wlq()SU5a=%v*UkooNK1zL@`XqHV)gkO0b_sih&xbFBy~D0yx3GKIBkURO3f~B?rP_zj zhR=na!bO>m;n~CoiF1kbiHnI9nG1>c62}uK5+@U<6U#HF5~ovVQfE^iq|T+zr!J;0 zr7owgq&`etNUcu(>wo`0|1W?0zy6zlH#_rh|F{4BKm5n1{;yyE{eSs?{@efi-#a8a zC%PnhCSFMNPV`CiP4r8QNlZzsOsq<*OKePRN=#3_oSc!InVgqgm|T=xkzAQvm3$?+ zIJqRbG`TFfJh?O65zb1^PR>crO)f~z&&*H0l31NslUSSBkeHEKpBS4Mml&UzkXVse zm06zXpO~Cjm{^v0EwL-HH}QI6M`CBdfxMqQv6FlEl))_QWfhZHWPifr&wh z!HETlm6`d8A&H5J>52E!C((7h9!n4 zMkJ;s)?}t8UQA3%%uLKnY)u?bznYkpn4OrDn48#=SeMzHcquV5F)A@SF(a`y^KznV zqFbVSqDSKS#F9*}#6PxAJeznf(J3)0(=qYPfBJ|2{9hMm{_m&%?*I5de>E}l%kjwx z$%)BH$;rtn$*IX{$#MK5)l@dSO*(4Xm_&vbk}KOG0JH4enlb71cvM-a2&9t7m}(m) zqsT1BdE_&Cu8?0CTTbrJIN9=z6}cgIB;zFD91|(SOfak)=8k2uM@iaDC>wHzc}t5> zqZBI2h?fN?Wo#T@G=~88&g@9Sm{P`cX2_Wmu(U zCF50&y0tIN9k0p0hZ5S9j$!s4sy8yiI#T1hDn@@|a22svKiV;G(}bpY@bk`WKZqv& zw~DQNilFpf^aB|l*t|2_SGm9@%PhQ*vP&_A^3n{Sd}Fr2?yPW(`>l*ypl0ktv}%+l z3+3spe3jPI2i5MA0Ky9pq!jV>L~~vh_IZzOQcuvYiQY@}hTNVS*IuRWiMOnt_SIzf z7VGI0YN4o}cGb9N6{8z5D%R6t<+dx-o2jVxs@)RB>!Ppv@ntW;rJmNMBqypJk73@K z?F`kfC$TQED&sB++X<|x+p$35S5WCdza)A`(HnA`YusgdJK(jV(jVy(+1%Ee?3TEw z+3Zn@Dn$=5HrBW+iqW1JC{%oxu(1|(iDk<2HI#rpTc)RzW+%EYA&sHHq5pPrxX1ksHq&E988pnv=T&Z zan2D3mP0xl73s&Shx|i6PPo3MW zNT)54i0zc!O3r78$;9ZCeU{-wi?_|4uW`eLecxkCO**(F{|V7Yh<;M^hTP;j_oBQf zluVKB zH@ev@<~w90_d%_DRq>7}A2H)W*>`=$V@4C_Yuyn=J502~nGt$wojWS@yUL?jkQDf0 z)z8+s{>uCz2*!e}&Q8?00m8oHu}$g>`asd&7QG=itj-OR_aNS~IvY`!9bT-nPl|Om zq|Oaij041|SZD7kxBH>qOr2e-b;lKNAMr3zqg$SkcQ0OEk9H^J*&`Z-r$*kFe>eWJ z8X;CMWo;LPVvW3AmeokFx@^y4ja(?!NVhuI zM=`b&qhgJmR&KXJy_p(0TkFm!-mAnb9)USs>&^~S^{Q3;;y|h2&uz?R08QeJPPwS=i9@~V$L4QH?b)q-qHc)@^ zuElHhCr!IJ{ieF?M(QtOaOAuC#Q- z;EGF0Ox$lnV?I#y70|0WG1|sne|f0t4h*L_jk<;LA@Xv_b?&~W+Ei85bC^>vX#w2@ z#7kO0*kZc7bU8u&7l7`3>gzz9BZ&B-OuPK?)mB<*WwErzN!9Zxw)%5(IXcstb%T}I zG7_`ZhM1?$FOiD{TBI(uT-a)ZvkAj$+(KcOcx;o^2J}UuFBZKaHz(^B%ex4#HH_Gx zR%P?D*|`x8`_v7zQMB5am32!LV?NaK)kehChbp)8pvnfw+laB&eu~Z`_E_>iQbT# zkact9or$-s4^GNvCq_7)#93ABj^na!u3}7wN>3|UZA3*Kp)5~>N>Ry{Uu{s-=8QX? z*5$0k3g#b$no1~4KHW?5Ou-`?=aKSE*4JrMn-$ft%j?`^B|8a%YS5RqM~#~ztg;HW zNy9>)D*6P`8*+oQZkoK~@s>60&}?={gri{>7aMk9)=gK8F;FWu>}ch7G}N1E*m-qs zjN*;bSJiW2ch-TQ&IdosEr6;tM?$4aqM~-Jabtyj32dc?g+5O77e$9TXWe*tN8l}M z*k0Le&j?4u&M7u*x2&6>7(<~}Y}j$ivZ_f98x$M11uI51EN7r*)w%HsHJDJ`QRpVf zGYF5_GtaDZ6NMOP2n;zvOcG*%A(D>^v0I4#Aj+D5J2ROG{UBKL!zt|}(QV|A{(ygeGH_+DN1SmP9r*SX;e+^sCdv(;{duwAc{BJ>wU@8VND z!$M8o&W%$%TbDi4IK|O*Zo4X^V_AyFtKDnDcDPQ8&|eq*IiKR{pA@|zH@nWgC+`WoWhIzXmz^EqD8XdF zs08Ec+)l-?0a2+0Q$;;WghnNheYKk=;t_~tMd@7UHi~cj&y+r$py0=N9r3UJah6~Sw zl$tyjgg%dvFOD|eZevVhGmh_pxjlc6Du^L?cl|x8xn(RZm8iO`<@iu-_MKvm;XB7w zpk3F?@qSU?Xp&V+$h27z?O&TBi z+oHcNdP9z;d`I5b@Rl|Hpt|h92uI`h11vWFA;owVRK>=BQ`D_c8#VqH+_l87T-D>U z^0wOATbtceOU^lOFtM1_DcSaxEXw`DLET;pq?4h4@J>62;+AA}wVSIQm)5GbYG@?k zg+5R8^`bZA`qaAl@~(?gWis_!l76+>zO-MoCFx!37AV*n1^bjO$t(q0O`sdylJu-~ zixuY;;;^|Toh9;W`N_`i86B+ENu`uqD)dTA-fkr{i)*tr_LGG!j{9y>Qr?_hgcj)B z2&G%5cq@n}gM4j5I1J$)*1d)Z#IK+U&e|vl?c50k&Z3#58+$t-GQa3;6)2HhpnSKJ1S(xD}!_q&n zZZ#Eebu-Qym#asuJFQR5_a%r{r*o^_8DZyntZt1^xe8alKtC(`T+thHlh}>RtL0}j zxO9_5n440Yom?ze7eL(vL%Al@x^s##lNh<^G??a!NB~vmR*5JXKy)1l72jQwI=(Cm&x7-FW6BSpw??NFpK(^ z*Fygq=2T@-8yK9nxh|~UB&L?stlf)AG61_Cm%V|m*n(~9sZ;E5-4)L<1Iws2!mcIC7nr1 zXOwcTgY&uU3JKKVu9A}>RE@j)vT8R~AzvaS2Qt)bTpcyD+D#MoMUU0Klgck%rS)>P zn=ZOmnjFyJBQMJv$q9d~3a7j0ax1E{%cEu^7_B=)!G;nGZsEr+Le?KgN0HoQQMK|Y z_Hn-SDO$6I)o!-p3?>ezD<4x5bA%WKLVR?tJetm=1e3}PzS%miL(NJ^c8D`i!3J2c zJGl1oKf#5m&^k9?`2OI_q>DtDAn}^!#-em_S?DGT+t*{8NEe|`61|V;4Y_VLZnC_+ z@v4cKH2n*kJ!-Pu{g_j;Eu{J)8Fd$g0gBO!7^Tw1sQOZFp>o?3>di_Qg#NsZy#!k*JRD4$RPB~3vKF)f?;~c|kXL7CkT$0g-ExuI8;KVRrd7LTLR^DIXCA83$U*UI zT}YR0G5}VHd=)YWjq$FOSJH6_d{)ULB~G(^E9Ujqc0n8RgXz`o6_Gv?NvuIt%cP&l zH>0zz7U>G4lxA*b0f;#xQ*tr5OiRrUP@m*lyr+_XZfYZT=&QEZk+mcl(^g$T)S zCaS-mc$kQ(=xz<;Qe1i!-8P^R2t)g3;^FU;0++T>i-p)6%HtT4v=(A?jV`VDnm=(= z&5lziw8+Ud<>V4Mk${tOWqi4cbIH`|>=dfHnP!&9a(k-XP&Kop=PE9%Ufv8iR_%rf z`=NbjYU1(S>($xUh!x$o?XK}(@>dPHqs%J`cuvv%*;%T6xKJM$DxSf%SG)GYo&}3! zZb!9yR^Bssn-SwVc~0X|*XJoy>yP&Q<0E3e#F=Thb(H+=W z^;MAf31VXfPSZ9wJaqkpJ?XK}wC1`fegTUiX6+|L?=SiZ(b*eUy8-eZw{+}0Fias} zxMXtss$2;uBg8Em%`Hh?%E3&iOF5eR zj!GMqT*|>Ene29|-8yy91D37-!tzFaE~7pNX}w7MA!Qg>kLLzeX9tp$mc)e)H>lcO zRj9r8f&Zq{kaV97La~*JJH2|l)=j;u-A0jiL!#FWU|%lpF1+e>o8@@}k9u80u79=L zBFs)O>VSmUD!l~BrOcX_s!CVMoKJwmeLmpzoH%@9$aKbD)F zc0GmI#J;YVfQ_QaK!s)9th9SxxDCQZnh@^Kq@5@~izmXhsOJ_uh7<^0$}l41UQmqn z#9(|s14H44Y}Z@3b;8kn4y`@m1_`&;!rAuEWs0RFI5qrd2rpWRVWu7p%zzNPhvQBI07O%%UaRZbc` z(~%t>*Giq+pd3$8aPnzcDvYt%5{3K0hNay`1=KcBmMEL#nZ&4J#z!JjxH~^PlrJ~O zOl!1uXA=}UU;CIC<`^Ny6JxA^aiT=yY!mwz;l>JA7-#X}?NH$~&Vu4NLp(cPF~$(1 zWSmV9ZnSXGI3wJ2;YL}w@^J?3Wzk0ZZ$#s4qEIgxs&t&a!_GvM7ojlD-mP|%a^q{<3L%~)=1KwWMPcc#fx+ex zn}=0GUt`Nw9qr?__pq6aS*vgd@yA$yDd1HFqz1^+YWXE!p+|gFLbars289XyZXtr zTP^H|9^0g=Lti8MdC?nGL2KnbhqtV&PpHX`k8n&W!vUkNKBmU4Q;ajBR_f~WL_H1l zX1e;I8aH3@PU)-HnNo(-xFrhnK4FSo{czeX74{_9N?jfLGSN?n-jL%X%jG?;gvz=) zlog`L^7T`?`hX}R`;LVQepLQX>+0A%EK1mNXI~63) z8hlK~y{kpv4iH>9hWD_%uj9Rgz(?eH4NoMZq>lU&?>_BU+64LHJBDAkbuZ5tx}%D; zok&fGe1Nj?gcOzEyPO%o%rCUYXjK4aZ5D>_k@f!Z93Q z1dN8`xQx4^7#kI%(r|oF)D2K?W;n9mKCXD{_0{VPM;76y6=oe_io@~aq&p+*TCkOd zBlNSPuMyo=@*l{%S_zd6M?QZ}lvhN#{>(Edu9Z4>Qo&a$_@@oWff@I{0>RRLk$nxfVXc~r<5hBWC$i#r(_ z2dkdCuZlaUXsWp>w?~OiFO4@lbbE!IRvORk6KblVOp2~O5r!&de=9;aNEA)OS+Tzqj%g(ta;ri&ShQhA zvxN;6IYg+T`jAeP(*(askFd+vUvT3uU6q%KBn-yeWX*`fygw$l1 z@cf~yRgfwSPr0|%aQ&hnzVo679TvKGMCc0vMrnvcLi7Th%mVmv2w7olY}TId)ZgzgMF?id8^DO@Mv8g&e4y+rG1w76q*6sm)vN;}4g z&~*~!IVj?KHe_B3U1uSmHDvsSE<&|86ni&yAnVc%xfes%RkUk<4KKsFZt`EnU+6sp zL)TqMX$1v1ifK`3UbDR6v{IVHYoJzV$5Rm?-NCbg9_y#_E9IPgnc+_VCwxXA&(ofX+BYoc4zb{$g$FR6B&6z>hw-w)Vf1L9WhkYBf6&CyFwl| zq*ZU(Xv3iWqoiA_Acso74|1K5@05POgjaJI?n2TnP>_Qb#Md8_L*LLX6#A`VOdD-_ zPB7;diS#BUh84Eo7JRXA2Ru&qoJTx(iO~B&$3u-Tzarc|;TjD!Xsbn&>^^E6I{#9k z_86+PC7uu6GEsIz5%aYnWOYxk2;Fkgc8TWObA|kG=qoV;?iRY0Lhb}v=yE5LZk3Qb z4B50P1B5V1_mYB0(Ne;oE~nf`p|=-fmN2MMB5i|I!k~yTT4*UJ${Excp|^sLYmJ~& zg_DH8ajij{Cfa7BMOk)Zh1z7O(pvj4<;ID!5lVqUT}-+0LT)f*{DlcZNr{k^aH)hr zT}Zi!qG`uNzQv#>$uCh%p>|KD++-owfGpJRuB4kHMg7Gqi`yG;ygmMEsN_fua(j^ML}lsY{c&~xOMRfG;*S=_%9;~}4OMOkVejt2Dh zq?;$CBua&WSu$`EEoKGoYXn$Cfa0Rew0G`l>Xm5Kwmd^3q!5ziL|Zx@&vefTH%GW=OE(KqnsBo%oaMi;rh(Q~ zH0g_rg-BvPaP-6Rqi{u5ZR26Lk{Q;-+p==-v}{qQ^Gb)ImQk`UKG% za)UDNguLVNs@7SLd9nSFOm=X*eF?MA7dLeSI7y`#V-%y(rf#38qoLl+rmkDY?N_`} z`s#Hybv-ifZG{<0nBt~xG!uugFM+MJse^t<^cO{M$nlYPu>71#I;iA-c<0R3J&wOEL9TQch0!C6mSRuwW&KO&tL|FzbLzGQ^y{z@Z@c_XG(iI zgvJu+p;p8bxYrbWfO#mGgbMx5lXeHSS?p(?8uwM;z6RH3-w)_@4^`E9U1trFgiJxn znZ+!Leb-SWbNX;^@~Dx^VUsoTzhH$kLqVAd5^Sx|&kL=g$`fN6sy1S6s1jnGLiDl^ znf8sl>D_wadI}c}Rl>b4Tn`IZK2)LY5UsoahTm4X4MKG@ROwJXgi=J5u27<(%C-x^ z+9qMUfaRG6w^^Rf3ZkKUAnmpY(FsK0U!P#a@};f9b_A;t`>H%0@L){A%Lb(bw;}gV z+HDj4Ip_#vxRls!m;YJ(45G%D6H}*^-f6D=4x->HS~b3$IJz%A`!*UJYcknbRMp75 zfL1AKwOe&^Z!4M_(!55GRL5!sd{qNgTGcIqyB+^0TyFaX+>eE)#bj~;=?+jI2^C4& zP^9|xhjgh@^;Cl>tbmAcClRg?p@jY31?sX;QIisCo;E9&ELeGyLYptzMgNJYN$&=8 z!7!yQx&Z|agbyLGSlkr2FXB6oPdxWaz~_J?Whz{GW8l6F@&l071jqxQRRF0{R|c*g z{~7$Xg?3&axYi&~gH$u$3w#O~W4b1-ye@F}L6*8aYUHorJ&Cu_#>Ka|uhYi2`Zkux z6f;I<=%|fx)$Y34Ih|b_4^ix9uHW8QLbqKb{x})XNzK>fc@K~2_b!L-bs>(?WNst2XUuxQo+aiJ+yj-MmPN)1}4QuC&n9!ahMoUt4oi*OSpH1i<+Hq?+SOw!j(5W zw8Nt5mWJY_yIZKY4OQCiABJv^CgdfWEm?{3~l?)i-qsxEad^Jv(p@5@KCxw3C7RI=Ho^vD`yo))=NBuR9UAZ-CXU z3kgI{OhFAfaNh*?3OGsY9tK`z^!q%0df37W`hdW_qz343LHsxb z{eIv^3f-?5)3&ZAmm4KYUno)WE%<05`v~cW;TZXQTcAiT2g4aFJ2Y^MRWnWKTmjEl(^Jp#a36q@dl4LG9xvpr0&CH%rq#V!@{f z*;PnifT{9p17d4*Wy~zl4hL?UD4p%Y*3%nuT?02=$WDfAnlZ%ST>>{lK{}MiI~2H? zLOxd-&&?9*SwlsFxK4qaEo6H`HWkFNtGJSIgB0W{tJy+@fgCKPjKV6(6M}}^hY8nB zK|Zn|z5_74SVVRg`bsgT4KFW<>mkx*Nc2YXuwaF;x;L=e|Y=!>9Z220TX!d(!q z5rc&`K(r5y7S*GBUa0eiDji#_U0)F89F)d_xJ`lUE!qd7`S$E1|5<${=B}#)*H_3h zAPZG?JmLBYdD@Uoo06r_y9swz!|HttQm8Vfv=4+nS&Ui2kpV(05;4vTeO%}= zj`X3>?}3hMji6VBJ0@JCT7z~?w4+9gYwdziM+{Y3Ycm3OQIx|_3LFWk(j_6^HDvsS z%R(J8R5?eQ8MrH=y(60ENFT|som8QACk5_fArFEq)b6f?`$WjM4B51HOGfatz&)pi zI8Y2~BiJNw9Yoo$8y3`>-!i7>$lP&Jb}CKsAfsABpAc?`aB*fqo)q$RkXmoQFVAZhB6^^Q zXPD}8Z?YB)Er6tvkJPk7*zM3p{3+)HTQu? zTOfu0wKa}$Xw&NBofC00#F97H_}qD+H-YAzAr<#S`8VQ^i%Xab!fg;PE-uK6Laqm? z;$D(xorNeZ?%u#%7G*7z!ZU6A>1#r+F=X5|KN4y+C{EZsp4&lJ6XF#Rg?iddR}*rT zAuH9B;b3(McUS>eSiq)hm$Ea+96N3#9k@ppXdJXmXM6JjvqtNac9*n=SemYLmjx^l zrD%-?{ff|w4Q=e49#p{^jes91;35U|o%&<>7viU#dZ*nd@-DzD)10gF%(sum)@VJ_ z?wYXkz+#Q|eA=~_gljHdS))BG&m24@lG27;ue5tkgxMl^flCMZXW_5P-~Iin1Ws`? zes^Vo%RPQGu1z?XeGt_Qlg^Toc3v~6o9zN#7Da=FSsUVO!c7-05|>=pFp0pgEATV| ztMohMnTm&+Ig@ld<((pL(J<)^;U)_gE%XTYws4ayoV9&HiVf`@(I)zDL~@i}LQODK zDO)|6bh||v52a|BbSmlg2s;j}I{sdH#wv&mlMW}{J|SeM9f`)UPvT4ag&hr6_DKii z8HI;u&b-hhKGw-TEa~19c_d^S>OO+MCI3tK3w!2j*^E?iM2VWHC>d+z8%oa+HQ6(R z3$w?$-BYTE3S5RpTc2>>Crz1HN9?=E4*wX!FbFYwAnc!jlF@X5JAnHExFO(FM?VA} zZ1hszusXpZPAG$*6oz=`gj*@(Ktom<;)Pu-@n2EU{>7jrtZ=nR{U9}Ag~VGUVqb_Q ztPu2Cq5FW2Sm8SP#RB585@x+{F9;X2LXaDTd>*7qyHTEA7NWGcD-v##C>k~eR=6tR zHVfIqkTEOVB2;%!#tIiD+*TpFfhg3|e|E15*VS;9swv`x|HXZmV4W>k6F%7Di&b^{ zm#3eYyd-uR;AQ?8A6y3?(_+#@zUOpXDOFxA33kHvUdQ-V?>gu+qMR)UYfc zaei*lb=}2h-@;JLu0VSeV5USr2LS8_g8cx?B+=RjVD~^`$mxb^yzT+8W6-++)Kt50 zH7C7+E6LJMTz!nQ-R8a?xvxd;_Q>59xvxg<*2vuwxtk+*Q{--p+zpYtK62MZ?%K#* z6S=D+_m#+96}c-TcSYnbkKAREyA-#U{4c?+!Cf4=i*R*M??T)ms)+>vD^>FO0J=zb z9ubxL?5?hx=9BvAFl+j=^oOoQ?)~S->cOi2_CfyeQx$fZ+mO z1Q;S<1i(N6!vVSq7zXgHfS~~P!65)=)C&d!9277JV4Hw}0N=tLfcpS$e_ZK<`$cZw z$n6uky(9O9$bCL?dqr-~$n6oi-6OYK4QWA#y*A-1CupE^qOcFU^CLj7}x+{f!70=glQdsiPzQwm~d+ifQisn1DGJ}l^9qBV1lic04B9s z0bnxC+h5KHu+8;60NdKm1+WeD z901z}&yImv0Jg2231EBH8348&d>O#DmD2%i>o^U-1O!t7Oyn^Iz+?`S0eWfBP69Cb z#Kahw0AR9)@c<^n8V4{+fyV-vTx<-$IAKNuOcO8)V6uRb0492R31F5mF9IwSFalta zfZ+g(1q=gNDqtwUG66#XRtOjjV2pH73=9OYGoJ$hUQw9-0ILP`16U)VFTh#>eE`-A z=nb$zzzYDI1UwJ0SwJsz`U=2Kg;@n)c9Sas%>Hr(fZ13s2RNiK z%K%OZSPEczyd?l9g;@;np@2mI=LIZ`fdv5PgqaWUv4D919|@Qn19Jeb2s0a?gO)e5 z0G<;tGX`b=JS)u00Nn*l2k0hXS`17Du282D-&S*BIy$1D#`_Qw(&Bfetb7Tns!L z1MOqrS`by{)fo6B20o5~k7D3T3|x+ZOEGXU1}?W_ z1K1+@<~|89Rvq93z!(9?W8gi2(ZU=9SgPI0Q2;wHbp*g}NID#2-iks45%Vg5eQ+zlDuvks@RAbU4A5S{CIGwM zWh1~4VKxA)Rp9jib~nX30J}8;I}-PaNNZxuY5==y;*}U!1z^`mtOT&zB31yrs#wbb zO#HJ9z$9TyW6Tl&lV&XjFtO4i025v<1TYcQf*6<&U~;8-046M&3t(cPIRFQh)@%T4 z(^)Yv6Tr>|&H%6@a4!Scv9{>|#}sQCfSnqf3UET0DFAl5YBGQwn3@Fep-2+}%%oxh zfF0Nx5Ad-_;{ZMqFg6Cp0N81@(EwKSqX6t)n2`WORr4>!q!(k%h!`^*;5mgE24I)I z3~Q3@LsF|;vB#hkv;&}D&Q=@HUVb<%r@#YfY|_@0x+AX_hZaS05dl_0boW= z#{tYV>Ae^@24H4KM*+;Z=m@|;C2<(QOo847Ff+_U07pf72jG~1w*lT0a1h|EfVTkb z8G<(f-WTQoz$pRy0Zt3p2XIcnUI43vJu$EwV65tA7r+IDc?000fSmxB1ndB~EZ}v3 zj|991@UejH09OTU1L&mhyb55pKwAOqEd3UMo+51q=pkTJ3~U6jiv%_R^b=`4Kwkmt zVqh&mA7R!23>B~%V2FTMVqg`3z5cKgV3bHJ07eQ}9s|n&>{X4W0Fy*o0x&_qVgS1# zVo?k%1ehYy0syYN48O>(mT!QQ)o*>zoYp7&X| z9`~xQURK$X?Q^f?s4CGbu`M}v;`k_*Y{gFO*d}Ew`m%mo2pXKG(^m2xmvwHa?FQ3-S z&+zgYz5Fv?eqAp=&5OmCKFy1T(LNPZ{wXgOuKG`Sv7p#b@bYg|>VJ(d{|he`uliHG zSP<%yy!;=^^Ko7*0Qe_)F;IVk7YnNYSWNlHyjZ;bkH?fB7ggbp z@?!DYKf=qGmGTi@EUx*7c{!()f5gjw*2{-^v1qf$dHG|de2AAn)yog@@+W%v!T9n) zUMx=h2YC6qK7BtgU(?I?#h25({JB!TmzQtqMrTTpWnWROehfqBF{UB0Q&*S0u zvG997{GJQHXQ2j_djLvS{-e;io-+`=p3}%)J&z!a^_+s5^*jun>v;&m*K-n~rsqNU zTF(PWXg&8s>w0#WMXH?%FsI-9uw(Sx3&HC-j14$Q0uuH0@w4l@VpgCuHU;5$$IXD%JsY@oP+(= z@OuYztn?Hz*7IhlSkJfM57P4{h*{4!L(6);33}D@MobPpZ$M`2`Nr`3dT3R@w_{W2 zxh!`G#<^`0K;(t&q6Vw;-1F+zeCdxe1}H=f?2+bz$xGwc+;| zWUud|u&kaNn0IMBUISt4c{L=j=X&I|o>$>5(X$PG>)Ap^>&beL{k{@QLBFrShS2kJ z=v>cr(7m2(;Rii0!?myHrO>OMBhas&Yr^kKpiBK;4V~(_Dx3wsGW=eFP*(bKM6sUD z@EnG2^?Mm~r)L8?)UzI*L(r#wb0W$w={W#>>DeEiHRw*iS%>|Uo_K11RZsjY_GF%8 zmx*9+*a;}`{cq@dVQA>58vT`%)klgai;tA;S$*WH0xs*r?c(|Z%TA+qT5)LyXCL!Z zkJ0o$edW`Ibi_V3i##}|m3_ww1hEGLIZ;o+(*XJBoKVcuTLhK>jLkXAAb)$Ln+cTH}=i6BX&- z&+7~RI>0Nj6s$IN~o8UJ`y6xdHxUKYV9_4MN z`*;j&FW<$3lbmnkQPWYs#iVb0`Fb8z9q(LBhQLt0IJ85jeVoD`9^|c`zcv2$@wduf zj=WqNvrqou*+RP3K6Ww7*|Cdoo4?;&3(*Tq>6?6FQ zhTpA*zG1_8tEoN|T220PR6y_ef9d~Z{Fg^4&kNmo;nD%Sqdfpsj2?=I(u#pHS{mh` z2B`Fp*v=*}yfM1j?uFz}1j(uh$$2SJ*g7vXLeEQJ$;gyLA%!K#g`>SiWB>$_w^j&C zt6M7s<4OZ#F^qrsLB@0;jO}GhkLkAy6KyrN@gr zkymfxfxNn&2lDD#9>}Y$JdjtTJdjrj59HMd59C#o2lA?)2l9%LlH}6u<F zv#oxHFZWCD&zDR;_9GgA(Lw3wRP62L=Q$JE;2ntYsurXiEZhU~QqY?2DQ+qDrKR~p z>8SxzbHyZ7mDO-zPy+`cPy@ZdheYk(TevBN7z2?WNL!rz1LK`}#)oUe2bcNKURUb*DKVI9wQ^M_;mBk1LWD1l1WgokL7g=atDo29J_xJ4r6-Ndo3el98CCX7AfxK3Aki zr(gg>%G&tVlBi=OxvVFNIxb5tjY+EGdgM_l8(xg5yKP{BA-OzR*Blr3)|`$wY2PV^ z%S6TJ+*4|d$`&PzG;ugaTI6t!5zKD`P z_LKKti0>^6Jm?H{-OlFJ_Z4nCQSyYiLTE`aY-5$188$6%KLATj*Blx$0a5%=ivil7NrV6 zC`Xt$QCOIBj}~~cl&nmyP!jgA9%X01)y}y!33-&UG;k39kmQpZc&ddxoN$_(Kn5Fc zpJ&TU0g#d5=WX#BA)J!FKi9z1FWAhEpO;;)-xgbnEm2}Q+JHyt=V5pT7|xm)O5hby zzDkV*CV}*;&LO;Uk42trVJKJg&MI~uMTV2JR13ctNqC+7OUC9GBAuATK|0gj7bUSU zKCJW(ua=3amuv1;7S2inaDXxFw96i7UWl|)hR_^!UlZ!I7n*QZNyos3e;3_SN7^Ej z7Y);388HC74wCVLfk6(0M01n(1sf}vRn3icHhrI$3N!i=IlcsmDFij!`sFWp|X{(oP8V9)Aqh(~+S^nSQ)Xci?_;VN+Y-xs`p zm(Ylr5DuFdRmQM>dt(rGt1N322Ks8{!FvC)YNJ%K*+PEgWhgM-6}uCFs{(d6PC9mZ zKP(!>Y~k7fy`cg=SM&yUHiorY#8i!mph={fAM4mlR*Nftq+59#+d5X?W_Dx^{CsGD zNmTjv#?Ke&LUmcCuq{rXE~{Z?6xe)k`aK-$qYR!=ppc|F)fHO)R2)We-Cw557# zU7&Qc3XEs!RY27;pz@UsE~=~xlvf6bswZHsTTd@g2$2f`ihEvO8mQ3{j%<^U^b|}j zsI&`Q!+OfWLP_Irn>n9`l`|qkCwqZo+Owb@W^|g>fw6iQV-2KiJ%=%FUorIe_n=>M zCnRZ(CaTZ`f3soa=0Xi4ehLRllN-H5UpaE%9+d_4a54Zh8P#K=(8-n_2A-f1e}DNDI_-;KrJ=WD|A zOWfMGBRTyP96xAJ&X{?s)t?ML#U7<{tE@HZiy5shYQjkU8ej>`os9u4g}SPq-GceD^6IgU9hKvu4!dm{ay;;8SB# z-qTveDiWo>JsvRrga>eSM3P%BlH1kbcFB~Bz2pPQS1m0NZ5Cu27Q*+T3K(%S6G&J< zX63BzR>Tt1T?MO-nhIZl~pZVdFk2_(^+O;H9uu2hME~h)^|0V-~&!OwqgaT z*Vxsdru1A@AITEFu(ZTn8|D5H300f9Xcw60jCo4zu3PuYdvYZ7q%W=B-Z;W|*62;& zvcAHk)o>ekJOK7q)gc_8YzmMW-jSGH&#AfdTM9mO(Z^1G9H3s z$I7^eh7tLFEJ0tqh4tR9g|$dleWEKv`fqQ1Le^Df*+Ai%t*_s5?Y1{;HzY6zjpKWk ziJFRxmOfi*uhtOHCLCG&?qoFt2^0M!t9wXeaT&t2(87&?09f7XXI`ws5+u2MMogp1 zf}+hZ++>3sb~oN%nVi|NS7wxkNVrn4ArdZMyKc4N_(k^6MydNEh$J`Bi$(xQ@3Ar`_(KSp;D;8V zMb``x{>mOCykt0H9e<#twW$IdV^jkY-^4tfA(JbI?d4}l*0Repda}ZE7AeUTz(hGA z2;_We7JIplV@XA!Efs+ZlWip#SWXlD-QBKTsGV?L0bXnDR;L!&3E;@=1gNFQPLRG^ z(oS$Ifyma3;?FS{R6SZE$W^XQM$`yd+B1)rK*%a9;tqUodw3YS|_3jCkZam$)cQ z*3dv%uf!Eq^Eb0&gTyr*X%aUoM=R$>E%|S4Y^xJv2TaB0(*TBkM^LGCu9Ajpu=2#B z1uTWQQrCZI2Og!~$zardX7qtpx8|0Vs$6Z2O*y2fy+ANUY@UUrABmgUh!MMp>)Ww= z2;#^%@MbxobarC2XZV=6fNoRB1X}FILW2(5g^PuBnDW^!c&%41llQQo=#XTUzg~X` z2D8Mi+`Q;-cKriGTEpZHhByk)JB{2{$q26w7aQ&K*;|q}EDXt2!K{;)c4JU`wMd-l@tT3$W)lJ_Q!ze5 zQmpk%U%TSd3eNh3$pTB(0!!lg4HJX1ly8QBc0(wj3ZB1JO(29D3IjeIrb{>x!C8TE ztoleXj%IR%aWopRk+(Ni8*PSVG+?vk0v=*5r8CL`^tY-v79{`UFy}^sb{BbEdW7pM z#WNP@B0Pg%!?WSl@oD%r{4((ZRW>0Lk_^v=-2inS=b#Vs2PG`!m-gAru5=o;{oSNL zQ8fj~swNgtRkJ*Tqm@+zH(L4zqK<5MU8=TJ`l5ZaneU7K2{&$~%@V~OjlG&ezdPxZ zB?=RKNVa8HF4`4}{gTsm!?nwAOI$4>PFzESgC(O7w{kAW$$x9(A1a_1*q#mD5NyxV zg^xmwLo0Ch<5(IG1vYplPN_{r<;N60DiH{-fqH!$(kJOBvlTG& z2`1wjk#UX4cV{C4jxSi=M$K)&%@7rwEGR7<={1XI} zQ|>tv>n?hqD`r_8yUdy~Sj*z@G#g8)I*wU&c&vR5a5y zO)TX;i06TUA;55?NnzHFtCG zPh#hnz~u$_xFR0A>l3i0uTLbk#-^9UW%Oy~d|eTznJViMv0VFoPB`RgA~tWThFNmX zN^AJSMb^16!R6iOk#_!@_2;stew0*em___B`r&!1hKYgYI-FUqgZ_qv zLNLcXUH(?_fmyRvGK;j34tfG6(12$bphR?3GqbmkDTM!!Z5w{%Y#i%EZ}-mExg6*L z;6*kOZ3HJ(BFPSkt#?s>mqh)>Ow=DwF2YCk;7bbnO?9@$XbidzlxJ|Dj3AaUSVuW| znY97V-Q*zm47ibVYCPf7;k3%_ zsq8PJBTsj``ZQf-3OicjnioYX2OGs^8F_JJMvOcIIBeYogn-)Jn3QbD^bUSN<3h{` z>NFX|nhsN9&fN}d-F2uU_?Dbdnww5Ba!YGo$lwSH?mS*P>i~!9%b|sE%dO>D2eee! z+kxqXPSJtr4MM2EcH#;;k$JMy((R3vIL(k^Jwt&2%7&u5Y$$RIa)}fE4I?%bRF@4! zANwqT5RMJ>e*MnI4voW`+LxT!G4hBT2#vR4AUKV^Ez%fX7*r7sN;|BoloB};>v)pE zT%n1aD&k;0w9AKAOjRJ5%EH|_7|xA0oBe0Y3O9B8OS`txvi%0-Ea>67J8LH zRP?pNv=PzZ+z`zql|)}+GlM_|Lg`;pk7BeUJ1JJoKp;d)!}(nI({uI-VPObgjbmDC zmGxj`HL|r!b4@rN)p<4u0?laY^QAMkOJ)FOT~nXe7!Vs2+kKq5?@?v@NI5?Swbq&; zc0rPN0WOUGSVC6U0&>&-)|xJY9X*b$%v63vz*WmtOiPv-{q zX$>r^N%U=rfgKdcY|vyEQ_8}?uExU_JN5_@N^KlPoxh2{1eBRI?_9T(tK_-va`|(x z@2KIBZBf8?w)^R9{PbDc;}cQapj51cnJK>)LtMM9&cfFcMX$-eWGlzSvf;v(I?nNz4qn?2s{X9{f zON@oDf5V6?*pWz%C%a%i37A(4%ui%sR>@|n{>5s<9>*}j%#8(Mu8n?Xu1(ScjDmf>cVVI`rJy z(@$a94ezLaAgDUbyq%3pAq=Uy%MfaQE@Q7gUyka{0-*4p>~7p1r*AO;YI))TP_WY# z8UU=IOE`sag{`OI$4@^No1?cnKzz47p%ul6@D;g+Qo#eyIJ{hW4tl|1?4}y0d{P zIa=E2?ktA{mlib$5>`d8qiU4E31Ih>dy#^p;hX< zR>uIt2|F9t=!{nk^qSLx?vrBO0c@}YlD$C-t33_NrhG>F-~-9vW17O{R!{3%JyooV z-67nMdLsl`i>O3vL)B|E$h0Qx4JT{PJcbECu!{D;!z_{3-TQ(7t?g>uoul>N6_G>2 z!DI{0^+4p@;4=o1i|R9{dmwViJrFcDV3^3pEk5RSx6UrG`hK_9>E0#ZcS6298+Q=B zWP9R^tuh_!_l`k}yP%V2gH#$$`p-PpM#7m><5>h0u9MLc2apLxvXx}#V+)y{w?+On z?4#FZZacMK9+v6y2lZlD*ft=1!?y7U$FS{2)p|RhKg7>Vd481VWr3agxmZi<@MYL( z1a?{>tDQ}J{#fph-pPl}Xd1R+k45J$+Zf^IDq02`*76_wuIfFcJ z%jA5jah2Pg5cpNf>I7a($60L&G`@kcavFb)Xk1~I`iwwCUZoGoJ7I4}!;)JiJ*Y)G zOPgS$p_beL=Uf&15y0rh_Co*K%aSAeev!SF4B3&zOoiNid9okL$i4#Ek3jaBc~D1{ z1?x_R6?;Ad!7rY{B$s5Qzrsn}MRK|^3h|_VWAU{~LH!H75YFgE^oJ!Tcp*@G4==27 ze+}$D;%~6~O1XEcUH6VKv2ZC0hXqpQWi2g}jH{K+Mu|({pz9!#TE()&xWptvQuT=d zJx6xZG>N`zLUm|AK0KqrYF8{0p5x82N(_!g3u2YV_Bv-n7@z7YQyj+zjy53Z@QLih zP4?khbjhU>j)=tO29BnF10fm^z25(}pMDIsw@V1DnMg*`x;G)@pu5&&R(19Qd0P?2AhzXoU+nMIv3z)< zkPXIe=lr(@YmouZ5fn-c^sJTk;B34;TWP;GBYdogVCkSDf+GO72owG;TVN3dwE=?! zwb3t8fTA-MVP4O2mo20tnWlXpS$$^5x4!kQ+M_%AKaf;-FFyL1smGjCQ!EtL7If9R ztW*jPOAT@lr-CGV()viNFYb3flV*DI_~dHVG(tZ$?ZH1kWU)<0ALRw`zBT;lV=V~% zOnaG{UiKLKPFL9^vp-oS4}LXxcLKMohVy6U4*H(9p$9lj69g5PeJY)8K@k0C)L!42 z$2_!wA@aZn-S-d_dWdTna#Smb!bEXF7T_{3hNug15K{D6Y{Za%WyC_{1Y;7SDG+2; z%O{8yDD_1YwK$<WLrQCrB;sZ^t{zDBl<f|1&ioaZPK*J8Hp-?U~!k55dCa# z_bv=d`S~B)<)@olS(M7areFrPcABx*3@Zp*dLh_D0vo7lJ3w91^(8>fx|w#(8(R%J zpytUY=K=tW>8X>msMl{59^l{FahB@@Zy(B*ox@VubU~o0cO(i2m_0TYL%EJD6s1xQ$grf z%%WqOc90R)5ri}y!PVUD2!@#%42ASEdN%AAPhbO>!W{7D$NGzd+8TG3bB8$EAr8;^ zo`Rv@H_O%A#`qxVhJxZ%-gL-GpGyz3H+TVON%}`W`59c^TZPbVrHxAX&0i-0PZICL z&`e@)32%gJNXL|z+cZ`54SKf=Gq)8B$~9JQZpZFZ$<2qxiiPb(GsDM<9DGzjpxa6# znpx&K@eR9BGvHx2dkTa;sI+1>IrjwN`I4PwCL)stoNKKCMjaA@i6L2Rl3QVdln{r* z*swTD6^yGQEluyLOfVEq(7^3Ur75l}>}IXYn<#&H{l! zszq6*F&OH&;D+ro~6M&zxYuF#t>^tMV`n&eGEWOp)F$1rVuufH)G1oN_(G`7Xy1+sJW^l?_iO z6G3)qtk}0*BPl((9-`zriaz(UK}QM;`gZB4xsZ;iOGE@sz%vC6vy@8^&&V@ey@mq6a$?Y^f&6TLCyEYSBu0Ge@lHah-mg=`+^oRV^e1CC>Hd| zVC6HH4ZlSqo`n}r{e?Z3zU#9nL@Zr9Q(*BnE|gUX{EQcfjKJ4u?~DCssUof@-8j5jEr9@H0=rUP$- zQAp)<3G^;PRp(CdLvANlo&01Lv+pEF2RT<~>QKtci*}PB)HfB@w+B-;)S%{oo(uSB zHeCD0kL6WMgv}w&AQ^x_`k*ZO0ID~~lRnB?fvlw0b$@Tw?@ifneq8N8MpGmU5(yL_ z)!JG}9MzjR1+&A_2~j|XDBa>5vUEZjRFZUya&6q`qwsgQ2qH`3RNpw}A4|dK0yM;to{oy#S z6^00Cn&UP`TPvk8M9!w_ohCTuh8jizokP!>t<~yb>E;wEmg+!<6_4H39$cH0*0zVW zLkusC5j1eHkFCYoAgxPq%&vNDM}c$vIJ=M!=N5c;XT#1-8i2ujOT4oISLwPvI~F8% zP1QC38;p{0B9~}}SkbZa$a~wXI9Ou!yOLFR&9(>DLXf4KrKSq$|MfecMy;mp*078< zI#X~nXsLlW(VPu@7)@wtJ_(x|$7@js zg~f5Z-Nc zdA)k3!>|y~bX|Tf;Q$NAr#~`6-Bx_@SAV_G94id{)o`({S&L3fHLJu0&$0NB z(Xx(jeYf&cgAPe8i;BG39lFReQ5+`E^_WCry!x;-ZbwI77q}4i;`$^O8TWQB1QYS_)gJD1AHNMuv;J6RR#?W(pZyS`}Bn~KB-62 zb`bAu{*=X4K9NqZ^{09mJk!4oTCg`cYQiwY>(C~5r_t3dg{d2h_X21=msY&@#^RK~ zqzGhz!I3Xfq{LQO-_WJ}m`W4@BDHx@U7cq92G<~`<1D95uSsQ`;|VM`lt#3GKu zl2yE|N#ENULG68|TCMbJcHJ=c`OC;M&P`vBKjEf7iSMh^>ztb?7Px6O6>M6-O;<1A zrpuS+CLLELR*Bqn9i8aqrrJVoay%{MBG_*c7lpcvDzWbf64k*#HBlw{P1a;hRLO)x ztkFZ2tUY$Ah-HJ?BC4$AsFG<@SyYJ=n!k7vT0=O%F(sfz2tHEx64Y3`Rc-*0NiDrB z>08SRBbN>T$4@iZYg_d=Zjb;#ijtX*)B&c{EeoFS-bXp4z#v<6h;t^WH3e}W=H;F;$A5R3gs7762T=4cAixOR* zw^SJwGG5?2kW%KVJ$n_@XZ=-`y~z?~VrC3Us#Ec@JR{r(6+>l=oP-ZkOy>!$k|IY3^SJyS(T=JiZ(40c@EMq}i*$orD~{e+xE#s| z?h+KD%}gyO)evgoH(@6!NDeC?xK+YZ6pF!UuE6p+-FR(AE>2HFf4#y^rCrIXwC1{e zW+=EWlLB-D!57k#8aTNsS)As<%8ed{RuP}jXQ4xeKsj*S@B;^${m^j#3VuZ>hL|Wo zc(x=~3N)j6;RT#iYZVX$b*qYF`1G7qOQ=Ndq}uq41they^kMFJSIXKsmm>jUCb$l< zO5q8BR(gS665jI7%+xOEq}mID8(4^0i-*-l_+zU4?k{;-t>Po$1fW-Zgmu{t1N4sI zEgX?2!@k6YN&7+0(0SfsEDJkW8Bs6F9#s6sXajkh<#y!QWg!j-tvWxbRv%s{wZjp$ za^x}5FKB5+@g$))TKS@nG!xILRX)YeD#O)&V(nk!36^^gkAR(6dyc10toAB&6sYuiaByRnE?K z^>4g(4|zpcI*~Ma$QDIgnwL^l^x?(GrcIto;Toyg#K}{WL+y2>CT7eRV-4*??aN7R zN47MCKg;g-gWw+HoW^cWmZN`ln5`aHCMyxjtt46HVtut9t>h9t+JME*YHDj=m0TWV zwTDbu8>LjXm&qaS;li2ne>!Naj!3~)?ZP49pM{N7RQpad^(y1p= z$2!fd0-7}Z&S5c0lygu=>Y6+-k3?U3`d2?)kk3U+h3d-X(%h%Cc7xU}VNd~pXw4`vktbxn*6VQ^e=-?9Ya=}XuaVE2{Tueq|-z^CY z^(X6kl8lSvq{XnT12>;3ChJ_HJ8F^YW8%@OFU)dslLCgdE-DwEkAwX{5!eXW59TU3 zm&`ejQ+HeGkJM*yc&?aSmRuoXzBIW~k2OgmucvbWv!Axw8cAAutabHmG0LYoTvxMQ zn%tm@?FUW1Ci_8?S7$${X}t)~vb7H-S4F~P#l4JJ_W`h0oA+HN=TDzx0hpI}&`xRz z=OuIRgy8HGxU6o%cLu*kBQeW?RU>_-8|(S}<}MU{_>(jE`eZ3b$omjO!lQLcgC^0y z0&Gwb#QduJC1Js&dMjunBi@#1pd}i>M{0-FuztyzJE9k((o0*VUPQv%oS_3-SY5A2x7_d*khCfHkQbp4cTp!wL+)u zR9Aggr@JF=%5bgsz`sRXPA4RT4!V`E=6Qx?!9Z?eOql7MBfy&xfeQ>f&JqmUBI;+t zD}rHk^VDBTpEe2IJ4$F(#jEO1Urg)=oN+e7xr#`r-SnZZZ%rqV7rnI zi{@2%y%zlp$F@o!I6ZFiPT0b)r`WlwpoALn87+)35jA##`lxY=D1DDZb0`5EwzKmWI zrMVqk-eVLCKotzOh2mBc%f&6Wa|sbCv)jaNFz#e^Q$2?Sri;X_w7zU*CM;$E)YKAW ztD|c3<9kdFUdg4ckRncfw=EE;5jH>^ zRmh513xs9K;4307pKP5Ij@`j$Xk$fZk1YntW)bwPg|!CL0s+ukHuO}ehzVRpa^0uV z6|TxYWcU@mV*Fyds;@ks=BZ3i>bFK<8wV`wtQcmQX91dYXp`+oSqs$ZG>tdYf%rra4(MG!W2j=vCM$@2miXdMAKZ=QIpEde(2SG zpkeJNRAkbT`+=~Rt_0q(P+Sq&EiFF>4Seax21 zGPq-+mX~V+mi}u7N1rpzSk%N_KsfYCF!zd@zvp`tQNWma$Cw|F+67W24s4e-wADy} znvv3W;})a-dwm4&_ypHa6tSgr>h=EP$msbAW z^$=VW$)Lgj3@TP--@KiM@q4MYrt~zuq%YZhvINF|=62l3eN}7Y> z`Dzir69>rS3|ySlxHy28NGqivT%tDQ@FG-W~}C! zcd~fEZzf1K##+2A8hi|W9}x4~7R?OgL9Lke0rH^K6%=ar$K{Yw^f}=%6|lmd&7L9z z>WhFe2$X}`WnI~U7a3W3jI{#eNXmuY;~5(oI#(+;EGka%3xvhNQPT2^7TQRoWjq$g zYVi}}h}sY_Kzr&Y zbu;g{O{pS=21OJS*?X&cnpceak&g1Q;UB%AY0}v|9HEgCeax)x`ItBL~xTG zUC4x4zXlVgI=XX_V6(DxPe}n%*byYZ~G1U%fpkTiAuV=PpkfQep9}i^jO8csla7qvRL~|x ztiM#YsQ1rWKH(*x!9qCyh5vq%hq_mQWi@>z+xEiGP=csU-^)o$;Dc`k;if=DIIvOE z&rvcgs6r)u2|H>?jeR4MZNS3Tph`uuNvwrPH~VcX>@4S-pE?#B`e%LRDh}l0$w;jJ zOnkbPo&c@1!E#Nj3~yA*H+S4k>#tnHQ$Sp=m)4HHG-8{nz|gN1Z$}%{i1T%ahkjKZZ`Q7a z`-jLQWjlW>kL=?+wC1X?TSrRPa=-z3flU^uDH^)OG;INvibPf~=m37R1s&Mq9oX}L z0r;e*dJ8&$5>gkg^ezl7>H^*EOFteudc>?Ni-urzB6bsP z(9;Q9>%)wY{Dh)3HU&+IBn~76jcH5>3_GcbY&32<<@eNCMlaG3hKX>Ye`LvehI6?L zsu|Vv7<+Em%%cXxl0)B!+K{^hy2_9#rj(&97&xS_%O4BhAkM#cWoX(jYQ%n1h#ocV zJy@s<;rFNuxe@>^i2mXq*MzJ*xM>qKA%@~0vVyVb(S&j@L{u!)gv^$5nowrZg=oU+ z%WFarBDxUy#C@(9a?*Yabz#*;KiEiI5z+iN$YW*+S^<{bkBmj%xP3%GcO(Oe+UwINeNBtAg0f1@?^1x0mgg~R7$oya(T#+2+mzB&xldJ!r5K-8#T{V_;`q1Z zfs`gErzPRx&~}e}QW*P~Bx`{D&B#f5A}qC}@2?_O&1_KIKquPQ)C%#21;wPNYJqGt z9Y6>!G*71a07g$TAXswdS%X2f?F6B~h7Gx&>@mRu>AQ!_TU7!N0srE~;S#Y3t~Bx1 zHX44kbUhQbg;#JRIk%N=^XhK#>S#lv#Hu4Sih>pz#gh#;9)#jSX$nGNek->p5fjX= z`XGNEOb1npdPYmP2p`O%O8RV}Q9P3hK`6QF1uQfwkPBt5ZPawVIXi{B)ucERy&c-{ zh$!qAX=kBd`&DxhQND>d7+i6(#vpk_AEt01Q?pjpASM&iNCKxCmiSNgvF#1A)2^g4 z^ixjpob)=AEr|il`I0RO+({_~`eDjrZ%G^wJ@HG%fWRI9>G%J)fB!Fj=*z!!171It z((GQxV#3U4tenUZDEBqyM*u)%Vu`kl8bHVrF|rg*2dGXtFQ zmM*G-%<|B)zU&8ms)Zjo_a&KiIH?3QGeDafn{!V7p|U)J3D9b4m>l9Ny0W6hEv{!h zmJz=azc)a`WJ?7Bytds<4q}mv)KE#OOf{%#x={sEU)#X*AxxAJ0XZfMT{fj>t03wI zz*_Af%v_#f*g#ddrLwn8g-2PNXj37XDP?R^p3iuL<5Hl6aRQ$vi{dzex9<2*sk@bJ zyr7CGtO|t^-b*1wK`xR%=~f>hxH^mwG5hJL2r1|2WyB(_#X*aNrY7ipVaGEvx%$j> z^2u0PQo*)4p^?=*}fadR@aUi!&Q2(;8YZJ+P!wv z-0X$y+EL^|cI{{-^=n66g1BrgtfaHtIvQoOb?&OJV7A}fJ*vSDbQxmE+9gp>Afm0* zat%n{>O^ErplP1x&^Y12Oq>nL#`lH6c%m2lz$4Purb_tH%zj)S-}IFLEUUpwBq=hf zZC9R4BXdB90>&Vz5bfqm305V zxy^;cs96b|S7-^}BtsCQt#+|VDGaU0iHEzF1KxB{C1eyyT671DyKP7L5@~t|w zqvD2Q^HBQLZ>W%xu^Qpz!qBz)@gM$hL0!>VWFD9oKNIVskd9?IKLEB6P>{j=`CpHP zUIu`b0>HIr`pJK7g@*olwNk}0>#@#6E+*&Yu1Hwz`AE4Xs$l`f4h{+5`Q|J6no2Tr zlgTfy2d_nUbAVzkS;&ctU}H5D{$Puns7pIlueCR3cTa}iVj1lau5tM&^LQl&zQ@xPi?{{@JIhs!Jp8t^BGVEidqu{+FM#2ih!wF6Mnbv#Q?ycw~mHG*Pd# z1XE513GqVcJnP7?D_kr#Q-|Upg9OPqhROvNqnZ$iDJ+xhC5Gw+qY7&Jp3=~V%cZ_- zX0gP+b5Xp;g>@K6slQ!ep~m6>yn(*MY2|pkCi-C5B))M+BeUgMhD2rKYMJ58j>-qx zHuQY#*THx=y2vIUohXz771oT={v?%bja;-qjIRRzZBMhN7G(`1GD~{drb!fZ84*_= z;v#G4KXmEf+x~H6vPMUoqCLuZC|Lk&{+>vJbD;{XzAFZZApsa@8f0SUNxvY}Ld;my zOGYI&nox!}p|Y~ttZLd}v~W4gUuVqP6qld}X)m^hdrCee1f1I_B^%M9=LX8UD0iVp zR879Re}a^v>*(x9SZYf*vr+;!%FDJCuDojN*44?STdx?}x^-FO@(q{OFIl&~y<++3 zSl`;gf#%g~UQ=CFYxP&kBd>ey%3*L>+*E+>;Du6si+c4*sq5jP`s=b!uj3OjFaci@ z8rNYz*0AT~HkI$N0+rH_!#;Yy*pO86D4i>23)KDb2bHtFm`TvY3N(mA;# zOHWsjz$$!}5G!6wI;*ma($|rW7aL8VBH zv5!!1K^hNz<&EWKCdqOh1kIn3|M&TNd((7FU%GLsReN=X+uvnvXbOu&sHOKRE~mc1Cb8`I)qgR$7q`HCrCV^M2zP*`g$W6_$F5o>a6 zmSMwtQhd8qu1x%*0^fA9jWo5ik7r?Pk~BTX>|>EIOtgR^R6ZU0U`|t2LRf~BvwI6j zj&n~~Lq0KlmwiLJOnlvqSC4-?+T!%o7 zHl_(wGtpG69^hA)qDoyJYCD)}v`drPH7?^!@DnAa#d$5v*UBhhVP=F?^M1MYm4kn@ zFQWM$kW}~>Ws~wXW+Um^O@;be&|z4E$smwB8#lc&`g9+oHavq9De!9gGg|cmzUs11 z7FS(StJSVpxuQOD>FVXn8bfO?8E#g3{;S6S1~2R5zy3n@U+y(ag7o9fP*s#wOI=jn_d59Kr;3$-E~PNwiA(mC~$B)v#e< z4Y<~ptl^6KmH8Tq7Z1bb(&t?mx-|f_$fethjpu=3oizMXHBg|phE3o`m5oNB!^I`x*NBJNyuC;knMqFw4 zYufGH+q`p7d>F0U&jZ9t**RJLX*S#q?P!lusax+&3z2r)d62e3s9K_iosHr8)(gQ- zQ})x66*NSLS{E{f#1zfNmm^LwL$4E%9G`*el&FU+NQs?6Tw5}VDZ}B7p;xk}8Ylv7 zXhS5t^*nuBrc=+m7522BAGkN z#}J6SUinAGOLloc7IQYZ-5OY#(=0Ok63LEuHw(?q4}43FiBDT{8=1wU8H&cpydbRs zY&P2>+^tT#AM>SBq-PC?-?pKXw2fK4t!yJ%ay>1G&ck{Kpf zaQW6`nQXD@12V=)5k;dJf-zQkmVj1_be+?p6Ff1Pxo{R%jP6I8`cN3%7bxwJ#ekSz}r;#*%wopuR5Pzt3024 zG1bO21(|DQ=MyicTK~c@9V>jy-_3XZ!#6 z%T@Ius(R6b6)&`^&*iH6)J0WwwL|qrdUUx#^<4rTWWs*=9XNkc^esx*+->h$OcuFW6Q)8{bjCSF>(g!RykIW!K4f(6LXS%oJUd;N~A?QO5P?YGr$r|kisW z5d(Hp{Vf-f`^|N(a=2hA^(I|dd%?MHtiS0Za^FzDF~iyGGMs(8lK+kM8!n>l>+5eM z_l3$0yCWm8#MrCN65HzAGc>63SH=?8)wjKhwOw1k?jn$S4L5^C$uatBqv;LxYc2wm z*Vo^05xKY4Uw;v~x5&Y8!920qmKiV98roFfoDJVqub3D%);GP1wY`p2(J13yIc%?G z#r4&zZH$%KNP2?pRaIJ}Ow3Pq%;#7KW_` zwjN&4Gn7qZ{xvUC?tI_Rmmcel&zH*=z6WQ4+!N+47<#5eoPAu)j0!gue*4eOX`u*OIW2zc&&_F}09rNoZ)0=b`e))#KK*j8^?yw3 z&y;O;7+S}ZR8n{+t+{JVtM&6Nu4(?Nc_~gKO%C$e`w_L7o}oZakajo zL8$X+0maiqe;Rg#Rutd_mf_mnYXVrZEV*~iC%hgA6&faU42<#t@kk|G(&YRSe3Yz> z$}3s7(J)|hWr$)w_hjMe(&>2&<*<8~_k^l|&fpBWJu3@`e7)>vfLz?NUHm4-av>s*ZK z7r`VJ*uLb#Jn>PboAG-Z#3d~{YojDf+*;{oiJOoXt@swwxadq2eZTwoN5~_;8sP&L z5QU=>7?avs{GzrLt`HCl1*qAU41F2A(B^zaUHy#BH3_<*xm8^4Yt7+o?QMmFYEFHI z-B=vd>9mpm_d>eJot&(zhvNY?h7dzKswI7$Y6Oq9=%20Zvr_<^?DQ}Pkfmk*`&hSB zc|z&go7oGSw@!%IOCZ==w$V zVz%>w)KT78&awlo-uNE*zOLqaJokIXVDOKMM##E%aa2C^*u#z9Lqd&YEl{^)uR9Zwj@%Pr zuo#R(m&&mxC174cNgJXU<>MdvNpoINc=3wA9er?XLkn|&kYy-zGkCh) z+R&z`zE~#=P{r_8d@W#SL*eY^42iXBx$S(llGp0o$vT;~ZRCKlwKEGrt6FK-<%Sts zixVCz^I{fZ%{vm&CV&))-cqKcAqtrWLdOSfy(7YBt86dR5X^nPhOBji+*%K-Sq1>| zMgSmhEDX8}0LyW?p4y^Y2Ap<7^^A(GsAZoOwbb*uU!iE(XYF_E`K--rmS&NF@oF?1 zLfasxjg?poA*x1t+2hogz%i7S4oGXu6as$Rf1w@zN(qfFg?DWpY!$#03&&1*D1Pfd zxsh&YBFXbyFE|z@haX#6dzk@Rb^ZYYIO2#j5Cj=57>G*GK-dDDHKeG?rE#?mX7mW8 zYA`P&Nmi_lE=hiy=rTM7LIqD<#OjdafX2WxhQ_85`;urRq%(&`kKd-gm!JgVu(IAQ z94iCNB|z+Q{nhC*y+qA9g=Cx*(0l&g5jCFcosMRBIXeFzY3#5|a=nvobWv}8bQzC@ zAkJe&yOpf5H z%&angQ+bQp%gNwy887XL?X*s9{H--wvP)p-79;B)wqYWnV(cFVpHqSCn`@;ovQ$QF zDm}}QpaLbWiEj&>pl~z;P(=}07Id58Qku@779pCJRMf5QK?3ARmDf!tf4PcDlIu_)K-ncP(XFlOmYsv4*)`IpifO7{9PsNQ zER&6gI7+q~W^4kujnbpm_Q2s(C$SK-VezU&$tkkbjz`jYXxX6;kFB5KDP6*(FP_%s>@?Y|Og!Hi-ndvKUDD|}mD*Dv+8aQ@+Yb#d6YBo0aa9|MOP z%=6-KXeiv{Nm!x08;q(w|E}^Rbzm&~eS^8i4!Qlj(3W0JsUre4A3yI`?H}RLe&l9SxqtFJ~vo)yDOj7N%GMWGt zI{mN4ZY<)g7M0hXYm3X1s>!IaODx}KI~%M6w#mTXm<;MbLE>$UaR@b6Zg+NY56!k~H`IB}D1pCpW(Yd7&af*~@VA@+G;M)clT{ zhB`s`6q>93ammnVQCoM3m0qpg%oxoHvI!wwOiH(}wc}>t0tT~Q|Vuz9rK2ETau^hDuGUAUWAJC)PRKa6Zm2j{hH@ljEU3h-6tPOqWcjuhU zQw)<*P@e0ja2J;`U*(ub~=Y+*`&n* zM;4`vAx?m>%mMBCGI=bcTH+tCb|qn;HWd=zVMZ#^y)-8ajO}6Cztta2Bc+Y7`9vYv zfWIQ;@W%oV7BEW5a^Z8OSqMs9o~#5;*%d2=h_$+$i#KX0v{s;zrIa;^qljEf?G<<8 zQEc!=xiS;bSc+?6N#uV@5l3wk$Q3%>3H53yz}jD-W;m;r$3k$MuO_(ZLq;@Ri0c;u zv6pH^pobmYrh#i@pxy<0iFqPFm|aDj^m_~a!igPw=XmBUPV(u3^yRjyLeFIvtk-0- zl)f9EGZS`xxvdMO+UN^kkp!08v>qRf&5RtO(7PX;xI(64;t39+FR_3?SVGDNl+SS5B(T zegrH+hy#s_wtV34S~UIO^S`c{;R;_<|Jc9tdp6T=@}i4|J-O%C<3;31*kN1Hlq0=H zlwU}n{HB%}B(z3t5n`RlOUU)L2|F<*u2~ec6tR)7zBVz!8(s#9xzBzBaYf1z_QYVzpYic&G*Y;*aKOai7S=j@Ii22qD!xKWP`vGW%OjXWzH zu*z~7(;614biyb?X^_mm?Z8YuZ=P}N6YCFdDiqSUJb=(*pE{D4Eull{l@B1jtT=U@ zW0zYvnS+aisB6*pJ2lp@SK2o}d*1dqDMRhq*{*|##ELh}lA21@srALs5RGt5bkB#Z zh5GqgK%`jx1UVc6#$};fcEce@k_!pINLzrpVxA?^7Yh%}CPTAy@YJc#!kuUW+nND8 z*);5Mf_DYaiB@qFEyJ2aA?8M;GDh&8=vb~oWEm$;>p0zF0tX+`LAN(^&@F0CE%PO* zurVFG8{2!WcA4PT3oFK~Jc?bYfoUA3>k52#2^M88+{yE#M|+f$vqghfL&F>kyxHIl@~%69iL+>6L?j^xjANdFFH3T zoWy05X0fAWJFMs~N@~Rki7m@fo++?b{4hLZcW`bMT7`UHy6;H+Q$@K{fv(>>hNRG; z0oZWRzwS@qT{lkX0D9dxQITvWb*VmKC6#2PI+;^o{VL>xTY2_eGvHM(> z>If-hDd{FlWe?`*r@T;>cJoIH>=qEMSb^Re7EquaT9t1{6j<(|z@AFH)&&&Ur>TaB z%SINh?P5?$n1PTQ71yc%`ps-k!>TV4JDy+E;xpu=jKK3(2KPscKDt}O=xP8lEiV_@ zl=R@v22D4m>t%tKW_D*8y}F+o+{ZPJ7{64vqfD%P+aQO&zsqDVpB zxjHS-!&aw|z7Lu><@ni0i0?rfbUqefP@mGL$c3mvQUa`-f?*f zRz|sve_W9i+|i)xLk7}k&@_1c)6*aM3>PaEC~c7WVR=@B%Eiqs`Q6Rf>!$})L*Nv1 zEmp+%(r@MEFO`R7L88ns1OEZ6m|yx)KrS&H)|Bcss-%DZ#Ak#=M%%1eXu@WRfWRd!X+Ouv(al*a!x?ixnil7Puw(_JttxP8 z9Cij=U2Ll6SAb1se_TDF>3=Q#g&(_MY}S^-rphnErYH7b^WXpYw~tM5Q%RryiHpFd zR6)e13fk(qI7`X8a6=J6<@E7y-g=0ChPWevUw`-moQCj+Ke*9)hY{pN>xA5@StO=&q|X|@?k%X}up6q50KNYbAx z*+nGXgr6)bAs!niFQ*T4f_yvs;;tbOTg4T=4t&%XrJY4?L6v|23Wav{N zC_LQu6!9;yE$Q2Qz-S}URVoG6YQCq`(kPtL-8xAyz%gh*W}(aoBt&6;i*A+G&5F8N zv2Iq>O*dBvdKI;ChNTXegN&(*hTaDo7wJYZ{r&gj!r;V4)y21zb`CcmyZCmuV>!L* z%_6*tM(OcoK$x|2JvX{<8Cgz}1#x2EnQK&HQ{f*XR+}LghPEx087Z2}uTyqcqr5t8@4H0FL)tGXbL7@1n4bc>ST@phFJ|T zeyW=}1=8H!Shtgbq>)VQqLx&SHPHvee|YF7H&vL!R3RJOQ;e=Ar-kO<;BDZ%Px`6& zw{X@c{ETBo!z3QM!-2+nHlTIp+6WxTquK2OKsOJCUNpTI z;V$>A3$l}kzOz_-M7#x(&K8WPeB|iWVXWCRr-c!{v@0KYti=Q;seGVi6Co)~(m&8D z?Epw^$PEm(+CBdU|GGVTO3XA;mrAZU#OPKC;N0BH}+-U z`hsA8=|2hZy;H*Ct_Hy0rNFckPbH-jPsuKL3ziFlA*mg<(0ItKrt@wpcL@s?JzrMo zy5kogHV7!cpHZ;c)?FxgpnRw5L_l%^Q039P2p7sVaMRlxC_*`|R8}(@>~0VwoY`S5 zUam|z$Sx_Lcq-*OssJ89q2ny8#nn@dM6pebs3xfZiDtt|es-ts6z zB_MTdc?^eyrU{8aqyYPf~f9-z1hSaeySglpjtS_nvup$6LOaAC*VnOZQ29w7u-! zGw-F5fn?cxTLU{FS(PlRq-ea(Ytg8(v7`8CyMf!)uS}I*0G(wJ3mgr>lT^*nE$B-! z;N#1M8Z65YhA!97O4d%4t?ayWfo0zaN^L1K3&J ztux1_=l70JBr~&<2PUU)NIDN4?d+TPdiHjxV0LC^K74)2d~=frrYYw2yj0F4U#HOf-}pROIyx^DPD~!3oaiKbPbBZ@%+7>tTfSqi zGds8CXy@pO@xznTTP8Zkw;Uax1;Jb9j_qYg#^*a*=4OvfZ5cl{JI>p_EmM-X@U@|ua%K0|e8K1hL6Nl>l$?1vCL$o_N zJ~jCsP|e8BG1fE3rX~`G>geo@Am#l;GJmj>%+fbnyK!(}U|`?O>@34Nb%Hvx@)O`W zSAL=szm4ym@?sBw>iL=3@dMN*GB|Q z2#RR&aZV;hn=jFb4|p=OpHUHESb@2hDiMbIu5rO@t*8$kB1b_vCD{ztfp}iEE!$`h8pXPVC>icVc4S)(9HdgKDNG_jR@$nVEo{?wn@8W~O0JV-f+Wiv1+f7&7@D3 zEIHSeX-?Z+Ld~+7JaY!2W`Egfa_wE6eQ&b2yE|ZJ;!S+EpEuo<+$&l;2Gb*D9XEkY z_I4(x4@g$*>&(r;x5+)oAtc5gXUoq0mV3|U9ph8ukmy|U*4d8rdsnBEr5WMw@67h3 z&CHKa?Vg)Ereaynoexc-a1cb}Q@3=E&dg2DXP267`eG6tkU zOM#}HmK~Kj>@Pt2;?c~f_#hfpA|xd>VV|SplM~5)WWy2Z&;tmI`R=&iXyOD0-n5s( z$<;BL2NZm^kNfHMH>gRZJ0ChB-4ZrEO$vNqX&g}H~6f$NukeI;Y z3o;;qY|teKV4t}uq;qFtW3uQC);6sPG-sc%;C=T96+Is(QyH&4Koj7i&3jv0+Hws&P-8( zgZbdWNh}R3a%}D>8cphKb24f`0^G#pei&Th1FI`}kfLDW*z|12)V+WZ68G$wq2z(i zp2R^Fq!R*FAF*?6ToKjBsCz8=&VwM?@E5VLAH;x@&eY63m8Zs%+mI0B1G89WI0LT(MV@=vKuo>{gxWF;RF5& z@Hl&9k`y%&YkyGa4}-gJW*TnYNB`WMqr%Sg@yXel=_3%$=2va3JIRKq#{wCjf2ey0 zYjd*e*eu}B9>ErX3htcF4dp*z0Qbm#o!UE&{S5-p0U!h>Mi#g<+Q&HUGhr140caE{ zgZPU{KCT8xwfgP|1Td$<#%fOV)}y3tdhgId&uo zH8O@X4|;`%JDsCB_(kwRWz0)A#uD&@WRrNu=-Y)s*W}5m!5z^I>go2kZ~w}2>`c!b zJ8;kkX8*D22~8KL=Rg!AcYowH?3O(5851wiQ=9J|e=wbxK!?o9^h+IkyCLD+FBzgY zi3WnInMm#pttE4aq-1Im0zeImN@Cm4!Z?7M5)z(fH@~CvV5t7?&iK*JMEH@b>)5`1 zOw1XE(fzYCM-bIB8#RMD2IoO%b7Rm_Mpt1_RT0U|S|02UJ;UvEII%f)NL}axaObgk z$FF?^y&vYhYq26yhr;)3-plDCr#bkYE;;l0?Q#1Sb z`;UbmH3t}Fylr~%4x0+v_-n2^b`u|B8}SJyptNp_AVTGpzlU%p#(H5~)QDQn5!%E} zV~MvfePgo-WX1_h2N@csQ|J-IPv@i}lxt2@GdH*Y*wjYNh&LUZ9*4DOj?Hb_=NR84 z|JLLI6RfixGe{=j{G$=sn~#G>vCTfm(fw#RFs2kAr;y;_#A5erHhr&*gSSe;PnrC& z-*BB*W@NXHMPPh^GK?gWgo9 zB%3d)YD`T)bQlFvXEPI%Ew5m{k)JOKBzz zLI*Ol?MV+@dQd>de?2IV&D_$NlS;lvS!0@1 z(k?XR)Z|@XBunuAVYwQ4;i1e^w#m&*%Qh% zA9LQ(8E4wCcV>Jxjxk2S0nO`YcTex1$wXTMH%&}p59KQhDLoYmke-B4aNh|{CvH79 zdn`fOPkJx*hhE#9%Z*)J8}KB2803CnQ792Uo25saUoHNKK7hZg`Tr8_U7UZd2b16# zwiZqUS=^&(Dg14e&>iTdh-SCsG}L}8Mt;Xdf=Zb)AWwLCV(sCNsFr!c+=3RK~N(Q4~$^SD1~8 zRc!M-6e%WL!ZcrVi=#7>Xi%H&>F04UfM&(~3bwYJf@mye{F3a-WTMB*JSfk_UYv#) zfM)pxL)az^rtiF-0GU|N85?tPj>+A<0>PoSwr6wc=JL?wNV5t9%)Dt4Sg8w*m)U@p z*XfL&dA+$Jv}zUmf=JfeE;M_XDeMW>qzfe4L}%<_K95fVMALDcejrW?EKDTLofET5 z8>>??N7VG3DfiAeHjBZzQLY~?iA6NN(*F5Og!vjvSKUUfbGEvW85y!MoJe4f13(dG zb#Xep&-HCK)rLGYhjN@BfItqQT;(&7T=Z2UcUhtGY@RPGCR>a_&zjf32f^&6xUw)h z2c<9+I7Q5G3uHTg?C4ZyO!{Bcr@ZYT` zpvN2zN)3HQEg0G~DFhl@rxcNpg%+WzBT01AGvVl3qvMeu48HD?8SZEs*FgRmMsH(I zfj{IxVsx-XPe9$~M7eAcwo9^*&ot8@85ReyEg(IgnV_LqhQ){x=`%`3L{@BXhq}zo za>6tmgTpkOnNgr#`i0f$($VPQ2n%uEwn3bOAsylPHff`BI~b4gymN!W6dl&tgM*(%YS$s_h+R;XYPM+(y&QYI67q0-ETs8 zwsVB3>-|p5YAE0N`y&PGgGf3{u%#N|I-flwcpQ1gK@u5sB&_`eaS&I1OwoWvXl^5( zDzt#Ry^=lA%(4#QA-yLkt_yDqvHEhYiNWSE9@Tx>@)&EAT0q9iH^!DQ_UV?v=AsY~ z(S*}lydH&qB*@377?BA@KiG^QuRd-5Hzo$$ukHz5!nr8V(2f`A2#z}mt)NT8&;$@* zkf1G&bW9_GO#biS4L5rznLHxf6eD-)#Aeh_hN#|ZOk&O7sAlDzLO99kD`?`#7%qZK z+f}pmIZU)5a}#h9piv4kd4A|9RAeLVPE9Hl3gkf%Rr-*^6TuEv^K$Fbfdy#ms+70N zwdUB^<4fP>=2o#Fk|kB{=}hhaf7yEzIJv4aZM>?x)7eRfHSEPAbRg-}zBEn9P9oV% zLI7E+Z{2$<-K4v#>FOqlB6I)+7ZjIK-0>3?#RX>^WfV1zqUflg;xg(C%!s2iqa)6Y zii+fWo^#H7@2T6>olcPXzW?|87j(`&+k3Y6yxV!tz1`g|bpzX;P1}1FlPDYFzWl;y{bVofPF|w7XF>+rvJo-Z5}k{CdtuC1 zC-yjl(8NMfEG#Z$5F9d#=%V=U>e?XuU`Bg(VzQJdyF9U7lMRd)1hT5Qf3S~%kH#da zltu;ESntGUH=@XoGUE{)L4Zhhq1|$=D`1;l>hw6kc||+`7r4nsjc#a=IzBe0;btmt z1m;o2d$@j}H)A8PJ#>ZJ$ADS~HjZYwz-XETQMC&b$`JS}#ekvO(%LZ05NK1AG&B^< z3wrHAlQv!yL*Quu;o~?GNXzpc5tJxbSur#PHC-lGw z(w|{&G+TEiHt7R=qu!B!4(-FraL^pS7B$qkgSkOR1Od86FkjIBMzpI8cBg)Tbspw% zPob$!QM)$meL(23FhPINd!mL%I7)}`ee0T8VO$lNmiUfQj#lYy|s z)mp$-X1$e)_=lzrtSQDr)mlmk;y{Nrpg9{;3|x>^`y!})%i)ZK)1daW;TKI{?xJdL zX3@x(#1$i_z!xnzqf*q1EvQjQkDI9Y^xHF_)Iu;G^i!n-{ZQhM=1pc*F(Hv$E{7VE zk(QJ?zy(Gp)ux(|KGpAiLs7BfKqu30a7~J7iuQ7nJRV~p+t%4bIaE;03{_y%#zxhFJho<2Bz741g5eDm_;*b=w`@@>SI;eXA86=2ZIINRhWX{UckdJin37saa67 ziRpFOGk*`NL(aPldjd=Z*ui8YZel95re~x%%8GOrM7DOOxn5RCai)q7LDf(am}vCG z697aT3t&KP#Cl)3v@es5C*Y%*J(Zw1ZSk(dm6~NCF-qF`~cRwuv(0)dhoeQQ{`06ST4H)_0 z5Cnv&L+-Ajk$yTH;;1B$ry*+q4y-lcn0=6zF^?E}{~*-C&ONB9yxuV%T3%AhTD3Mt zW{PbO=0MU~U#!4^tif4VeB>d*j}8SM7X|^i8HlEugaj%&mrkKBCMGmaY4w&8II5YQ zVYUigqtI=N(lFd}^Hm^^LkvcuHGk07nQtsD!2&1^7X#&{A5vA=scJvG(A8dLAGL85 zL!}i>X%E5P+~n+4ZWbeoWJZ8faRvGVy0PVGXIo&5KRl}VkU?^d0^z*ClR)AniKrCQV8*(A#aGKQ(2yHMOgwiCIaQMh!iKm9xwcYf{ zrty-dW>%3!NwKM};uMn6gepr`NcknDImW9(#r_MU+~_*ouAGYMmfic z0O=jLOXuPXDD4jHE05810w+e=gX;*IhFy?Q_W(3g zUS~508O%gp$pPriE@hhWHq|-PM?;u=7$7x?f<0U7o-~gMbEQ#CFotLQWndB0%vK8w z1567DjJ8-{&$xaWs*uz%m|j+!tE{AHR%_VuN>Svt34meVVD&N5AH+pf8*4(_6tvaF zT~^8M#)u}nT9r-Mayy*V*ez~FY;(N>wLJ#| zEvqYW>99I57Y2^3CGxB#UBz=Y>n(xJZN#-MU0-+AXl$^ND3468g|bQ-G{Y(i#+Fm!FvP;#SeG025%)ZmBm=I%-y9w<{+`0P?>1FA!v#2v~I`iP7I z4=@vn=#$#7u$$~a+hB0mMxM=4$a=xNu~A{3;K2k=x^X{Gi&4QK={*F?g^`1)gaAsz zfQ+Ph7%CkRqX0I*F-hGU9EB8M8-a*CMXLTi&`=2;3gICv`O z7BLqDBc}(96yHGG-txc~mI9zUT2Q(|NdF+B-~gEP5BFtgc-jZ~z|l03N~Q6n#fAho z3absmg~nE#00d$zq@(5qcPN){Z4Yp+huo{w5=cDCBSL%fYk`6b3u1?+eQ<4f&*8o+ z*j^o22(C!uVIbYCILkYc}^LZfh|p#^8>ssTupAsom` zT7%;jG_$MCGvI{Krg>Kad<~55TJ3xh6fzf>yL5tI)??rAE!0n~<}{R+O>ZsN^lmh4 zH+y!arWzz$quX!;i&p{?lBq0@aBP4litm}5dl(A4Z1$eoawDh*;|ptQe-d8!O zr;i*BGf*@1#tI3NA_35DlpCEQ6JcI}k?_xg$%(R`KApo-SoA_or#bk?JqClux+Ty$ za73Bhu7JgCHT#D|-O!SzdAgkPHxj(zdm~`;oKRfJW}A5;qPM1218CqOML%MHb2Xl2 z*ZVGSr^;3G#F~CjYduEbQz|fU5u-IJVOcp_7*lEz?1980EtzXm+F|g2>3}5wgbi)R ztVn^xD%zJdtCv0+kymjzNi*R_W%ZTBK;Au!%e?h5uV(dX`eUkV0pF^NMKrQkFq+_X z8<;m`ehddne5k_x207I+Y*b}}&@4d4L*+n^(3~OYCKF~tAQq0u!2|F$ID}}N6lPrF z?^{{o+zg+rtHnL`C+mw6zWtwM`d9~0^C+=glnALg64>mWannZG!-Ki zXU9ybFxN~_GXvQb|acd0Wy(l2wufTQsB4sLfS$EW4p-8-P{ zuzAe~rOQMuOh9jFH0`Ab(95j>Z$M>-l$X>fT~s^7P13(E)B-`Z$Y?CJz-=bZ6$I%yiUaT78`Lp5VKWz$kwvrgs%1qr%qN;72?VT@|5JT zI1FO)UKq%gczKEH2(5ZzUxbcpgmTQgLM3z0+;Vo-PJZg>QZ)y})rElZ#@w@G#OWW! zLTuQycKeQ%o3@s>uia7Jx@G%@9UHc6hU?>XJ7U~*Ip6S|3}{7NcQ;)XU`nsI37&zGn(Kz##2x$1@!fU`VerLta03u-h3pyqA| z`W7x}xZ&Zru7!8;e}w6jMq6G%hnQ|&P@vz;&@fZIYWj>2+}njyPGYtuy7a}GfYjT^ z;3sm4zfZF%+;c^b$XGGl5R`$6#PW7wm3hZa>F z*3|XDBX{d{=gm9)d+zoqyc1^>QV|cewc^H;8NRz<5c{L<+bi4B>NcProlG6tR?S zDZ3xb3lUXcZsb`q+-{U)OoW5uI-KXA>Ke&e>L|&O_ZyADSRKh513$pAD(xy54-cu0 z`q8y2q)b?^S_12(&ZSsfHlvz)E(uIVY8|F7VQ3*CNX;DqZBg+79i4!j<5@dM(Gu{rk-8FL9%nFzzX*@|%B5%Qxm0%~ep-$C~2Xvu{P3kMYL z&qdz^;QuZ9MYxn|>ba&$gACK_>IPwup=_*-(Xbi4O&H*Sy2q#;lbT&$w9yJY)1tY? zTwnk(PeZX#32q-71MRnNJ!0{(dKy_n6j9>}qiS>k4%+FwC=8>R;0aMHBC0lwefi=B z?BpzMQM!P7+d()(Hbj^z7B63J_Go~stcsDE(~1q=a^^((f|`-ZW})Er=Jkv~G!?~b zBp3#T<_2#q7Bz1?fuj(}7s(oLoM7(oo&!id5XyK2tqRu5AX&I?G2{-6;mB5TO_c#% z3&vy0b`V&MG|HP{GJT0o+@m@dqNyC;dw$hnYrQ+sfnKAMsdsqnfxwK@%MJSKm8aB; zJ@BNVe6PrTLthlp9#Xfo$bOaYfi6YjTJImkr9Z6`!uN(3P9P|&Hn-q@h}IQ*wU1F( z!}Q_KzoO0-pC2}8PC*u;pb{X!okN$pUS98v`t*q_pCVeE{_rId!Ti8wQ28=>hQLvz zBf>%5RJRf7Asjr2&zQQ@6fOmIOQH&t9=1JbytP93d>x8W zp4HSs2>_d+3yH=s`rE-Vg#?-oeIVcP6Ge;o2Z!D)gQE(~e}S1)4lOF7bVBuxBXwf~ zQ%n0MR1PI7a;2#^4J%F-E{o}^@$(WJtXe8{BNd`R<5>r`RwD@OGB7!`2J`4j z7FXYDADVgjU5`Wt}ZBAcYfG?6eFoa$iWaUsng()%a4a1=Iy>oHaB zFe2BWwgt^Ax{b?FO4YPqZPK->wwL5{t7%tJ&mDNj3HHDMJmvXL7m^%J9<9bma1@d2 z>aUlbeLk*gX{!-2ODPi&R*5lcTgb33NCY&CmzqF3&7DHvsCv5-_Ymf86bj^ZW3?_B z3A<;;pnJ+wB;2Z}aLx-O+F@2x1==r$x^~c(&4U9XqDfa88NY z=PFavJz@}adUarLt)EEz$W_9-MrJK8D2jngcTke_A)YfZ!EL1rmj!p#mT4!x5xf@} zFZFIY9GRdDwo3aMfqBy_vr<3cB3?jO0rJ#;^Xp$PS%fA#9;GT!-jMlYC;i}xWKV-6^}da(has|@u9 zY5;0%3fVYOZVvoxoV+`O^Uv9gD#n%f$u^zM2MCPzQ$5fBoYU87en6isH>q9qH3uS&gqa=a9SSTNUHP$ z_w)?~OdBsAX^4CxVdFJD94i3QR~va6>SUfG9*|G5 z&&X-Pa0N_VJVMBDBvDDyHs_|YtGTykCqCZ*6cBYOiI??2x!c>*e4>}bwz*Qh_!~43 z9YWN+2%I+|Y4k@=wFR4IFbeHl&dzY1u`K!QVzaQ|{phi`(zq%?88uz=)~c-lWM7HP zB1)Z5uOl(37bJSwdA$?qagA9M{}M&Duv@i5GOf%O02;HT2_dDjewbOq;3Aa{t3s#d z_gpZ`xt0sVt;sfxcdYj7Tf$9iUWH0E2d`fM?r5Duxh>$f3@hUT7gijqBHmM+Nz;Z$ zJ3g^s0N(K7Ae%R@aRNQ)jJChn5czQM2?K&Jfa=<6&|Kk712IB`y9F<7+@#rKux++f z?F)$FJ*H+}zeLpZhJMI6aS2{cHwiekCnw31_o+!2fK8wSvIDe8rGz|AVYEHD1&e7> zdnN2OODDjxNy4l_|GDgE@QfO$?Q8H~d|uyouHRGH#5bN41QvT**P&Ak4kMR3!&u#z#p;GQ zKuci5fdFsT+yr`QO~kCXVL;+&v)V|FJoDfe258sEb!NW#b<|(VSS!{>jv z?vAS-N>?7^GX&n+$UbAa=gEY+{y5b>vx=lmdf49N9K1UF&lz-9=~ym?^&RYY_6B=Lg@aaRNCKhZgWz z(62{R|5E({wK5VPHk3%5c1dyubsH)ahqqwf6fDYo;A>JX(W_@q2~2w0jC@8>M(08H zR97T;R}-6?YLZ?Q9$`@O9#JQ1+7_kH{eXTr@Q3Avhh@!+7})Hqi1zCC7yT%PmYxeq z{M^Kl15CynPOvC^QFTyImr?WvqY4HSB1yL?Y6fjhoq`_Jr1-lH+Z6jn5hw6kj4m`f z4dZkqP&w3=*6&x~6q1|idIpi8uc{k{)2oinsoh9%EnQdaIs^bnvPNex3*vR@t3c3D zct7+d*wfZzV?cV^)RB6y;QA5|a822MG=&Ui5Ecq<9?8|AHh3w_%Ll4Z|dP?j`umu*Ms>|r4JM)^D;iT@KAc&gHKJ+uo#?59^vj( z^kJlKPV8h!fcnFukQK3EISTzMXN3p)RSet#*in2z4nNGGW*@d_zE4S=*2!Dt<(`9@ zyLxi~AfD>A*{m3Ga8w2gNch?g-e8|$mhKjPoxwpyL5jgR^lr4_@S-?N%Ueej7!X+e ztn;Pkl|N2ByXHOXMAzmsq^4M7v+rxm2h>wxMv04^`gUL&Ui7M|E)%x$U^PfkM@LBA z$OBrWYVMfWqOQd`1D3ok3s%9^R3fg#2gi6F7^`j4j}Y7R*Ru|*vhJ&8VhKjI8oXmY zq+q_z#f+Ru=2KUS$6)txO4Y^apb+MUn1bm6mYZkAh`8B;;EaT+&0d@HF`I(=Bw*?_?jhbPZlwXi(xWjP zeo+KTVE{el&K)E9#$K$_XL?V)JF!&Nv$q1y4hQ@{bD*0>uX_b_Fl{?%##aa-cLl`zDFOEmOec?zz;f$g zdqO9SpBIKLU@%X$JvZSb6`85;{Ry4aNsHEP{WaCm7k-bp}=u&eFRzWixLs=m355jvi~IQgNF^FE#t}0#)25se)x`7jcghSa z6RHx}EUZvF>12x&8W=J-OO&_O{P7`33=S8y9A?(%GQYACI@BQPu=SA^2m|a`mnsX> zhsGS$6G$y^>p^urhAx;6ITmpZQ?Dq}UVQ4<7Lb4(`h`4j_~Ka#JBee&+Azf?ybKgJ z81j9kv=cp5y)H9Toc#^P=g8a?-lksV#tqOk0~he=M!2^&JJ z#9O;Gy~hcV!2ped{5(cKZpsin)e$`BI&e%A%*5U{&Rt!wMc}IvVv$z(8~A%Fs)&EI z)k!0L7k4ab7`~&$Ni+uQhY(zloJKf8CRgh1yTST~hj{Jb1)g{lL@!_J(mTp`BJ*5c z+huyyzQwB*ag*LSk~+|0G|^g0G6A}WcP48}8hrUJ=;CVaT`lv3uEDyF8Hk7+G(mER z+^lNSFe$`M*=g1((j@!TOmomMr293LCW8cdSm%cl%4+m~6}VDEnxX-P~CAP7YbP9t9N(%k@v_pu%Yy+O6HqD10fGQd?EwKs*D0D$wTE{^~rM6eeRb5@nh-ffrVto7_Bd7~_82nW)g^Fc;AN8;g z1F7RL#aBWH>PwSd`L2{|4xrJ7`D!R8vF4h)MH9VfDf??L+KG9}q-Jt^sf*#h-rnF% z84ymOitx26y?m8(8CH&=-EtJwki<OsP-R6DP_r13Re9#Ezotg$++YfQz? zSz4S#^I4BtSstmS@w-(>DQ;7gg}DBO5w3)1TN)k0M=_W z1Xdo&57iT&=Y9XiN^>5UG%c&VP6vw-T+CSi;l#U^C(2koKAgziRqD zZ{dJY{b3Ek`Bq(XC5SmNnk?hXaYpLqJlz<4Avp9oxO}2U022rgC?+zb-p&EPI-0of zLVaGoxOYwhs8Jp5PW1LJnWGc=+>Pz2KjR*J`mBK&jyQYDu>PSJFo-K>N47^}0bQv$ zWn@6w4iM_^(U?8bMLhpy;AK=IwJ{Nja9Rx8|n{bjJ<~?p=^=1v5K_`;QWGb0XW|G-tE}2gj zlEq{xl}x2l=~O0_P32PgR3TMNmD0&{DxFSe(%Ez_olh6i#dIl?%%n2uOeT}fpNxL1t8u-sIjZySlor#yoQ! z_)DmNk9@rdr)3&&*i3@|;CH0BG2ONZKf#9Zo2)J7CHN11la*n62^PR_vNF>d`*ixl z-IQQM_%&;*0Xs%V4Bb&*kZ$B~u#ffO-n)`9@Lh18jd0(fhj>rw{(|;K744b^O?8&v-UA z56_%0{I;H!7-xJ%yN-9fqQsoDVxK!B#`I@Qxkpb+98mQPwOJ8IJ^mJ|e`5!}aAB_v z_s%s*9XE4$xoIaByY;GZU4{St=gje&!WiNw$1V!usCu_){@I%zf8yY?7{=)O{bD?JTFgrX%l3pWatZ?eakTv7@BWKcJi8#F9*gSVST6(9%5CvB%-#5GowMSm zpPv5oyY=(In--{tM^8}We|mw!jh+ik$@iL3KJ^F^es}OsXLPipul)Tn)}hP9VvNRh zWZaZTV@zO<%6LZoYnB4f_Kdx*w)D@BD%qa&m>rPGGI^Tfu+W6Vn?;+2NL8BQPcM!+gw;q@d&I#H`tK zVsq!sKMM2KvGC|v?3iPZJ3baWVbO^vovc>nR8#4+(-Z3HjM$m6v(A12pU+VV|8xJG z+c}}F#S>Bvop9d7BIhrO#gU5nNn`Kbzz)je~;cxsq zD-aof8imbHxjc@oa^Q5S7dv>B!B<`B_wSn@)<(^q`_WfxVxRs%*mo4{{5(rP@u1$+ z+&t~ivSYEQ_l?JH)b#V2n@rP8zX=tdIe74yK}PVq@e>MydVa6^SO2rfJWD@s0&E4C z>Afa1cJ~)&KK(Pc-J>ZK(@6sk9=z#k6<|+vpfk@NM9T*c{{BY_1YqI!Q~*xus2b)U z6o|LZn9<(eIBlEp&u?GSvUF}&JlUFRNw<8kdKVU&+fZfAwqb zJmu7XIBLNq8~^xB*RqSQy1M+=|9tBmuYLU+KKSuZf99btfAwqs_~cIy#@ZGhy*QOE zbYF1ch8JFa>uZtuiBEs#%U}EEBTxP`);9krmD_#6+I1UVc#Y@Z`uexO^Q+%{Wd6d% zYd2ix`FFhjgDCvaS08`!r%$!bU$}OI=a28d^)Da%+~>dh{il9?%gbN!%2&VUuDkDf z|Ggjl@TWib`G>yp%}0LtqxE-v_8VXR<|7+6Z@KJ>Ys#;D?dv}N$xnU$3t#@q_ZJ?2 z!j)J3_IJ-79G^dU-9J8l)PmE8YNwo9e%Xy5{n%$7{KN4loOb%Ui#Kn%{KZ#YbK^~a z{m^6I{qa-3{>@1Jb)#c%e#=)6E-RnYwd?~Q`_$*Z^2qlef7^<;+?9OY=?A}gaPyWI zUpaHuf{t^S{l~9{YK03gTDA7h*FSr3`>wHvzxwF6e(?7{!-6HsXWsmH+s$ico!r*G zaQ}yo8ow`h+HvDgw4OLC-nOhQ+cvW`KC^x1!Z}+P96j^WSuJg+%$eOft952;3ncq_ zZ8KWuw#Sb;Zboa+ z56`&y{??P)Z~jy36*G^Ud&2Bv=N&um+V(l^C$(QO^ZXg><}7KO*A{P0&0W%VQv2N2 z@ed>G^pzXimbQ-0>S%8`x4=!9ZYuUo3t%;5^7L329?dG?fIQO{Q-!x;{ zj0m*7-u~q|-%fVidPi$v_WrAm9e-ff_@^(- zwasZS&RREXUi;|W(^_BLcE#-RTNa%%=lI#{=8V6p{l0tVozRwgPuu<9*NwdNnloQIqZO0yx5bxrjo*A~YihwMZD-FuZN~XC*0ddU-uQ>w&u%-rt#ej( zZhZXC{e{`b&zUuTSE<#VH9L9yj5AtKo)KSBY`bK}vbH%hXU|-bIJa%y?0jqYjFV=z z&6~M(Lm@LiGqY>foc-sVKEA(m)_LRa-`sZEg4IWzICD<>#k0?yJvR5EmFKlzFk?>p zi`wHeI$CFpzq)+J`dM?v-+#@SYv;~spMOko)|~v3wvO=wJ>K?t@%^#&v$mgF+COvM zoKssb-cV>gYSx_g(#$#g^C#|~dCS|XV{^y9^r{DMUG}de51& zZcgWnV{X3xN`LL#WgQDww4C;q|2*pE|9ap2{inZZ|7%{^wtL3>*4Z;V-q<_-+d1`F zLno{of7`M1E}MPg_-*?yZhiTx1;@R7>-o2Rcl`T{FPSl?t>u=5YxZB#(;jcTbjHcq zmizww{c~_h}uMMMU@0@kows~#4 zS{Kis)80Bi*?ZK>-=K~}@Z~Rk#kaeAY-kVeDB#K%op7Cm_OR2=JhrHw-^S)X_1XAwU=3%Z!t5J6VkaQH1e}%uW+{IUo+0# zyjgtUZye8W0;`rE;_{Qa??ZW8BYRc7L-j|>1tIGG{EcCK!jAs_3b44=0{gseA?!QK z9kD<*K;6V4`t=}SQD_oacE66rcx_luPtq@``&Gc=oXW4EFOtY`8vXhXUVT*mn8$QXZzIM;Q;5A&5g#5%^>8|SMX@slP1LIPl| zm;x4Q1%I47im!G&5s9CHcmnOLillQt+V#$A5@let^_W!;s+)qD#%S2o`6R@DC2EXaT zda?=E|s7foQT1gyD1uVS(3_Upf!z}k3(u%2lG>#_)}3gV(qS>085*JjQAv3QpC zlkhs!CB2cj4Qt8v4lyz*Sf^O9mNbF2*YrzZ*|fW1?jksm1uU6ose6kVlfotHy z{=uKreFI<}34Z;e$r$fBLRf8YZJhfh3p!$p(Z{Ec>WF0#eiR}11288yW zrp#~#(xWtjdwnj_VdaT^f3D{7+;{vvi}-egFPhg8dojZM5MIiR`5mz>2(}>HitybC zk7K&2_X)%=L-Y-(zZPL~c1P@Lgm)mM3=xz={7OU@%;|{1Fc8~~kmHd2zeb$(js_gk z6iL6x^h@CX9`jm2wmn|X!zYoxn$<90lo^CZodnrS!9&_NktcG&t(a$I1;0;N^Dc?s zLwUis2a!)1MSg8>Yg{L$`{2oxllW`z(CfzMF{IDn1Ad>Xf$t-{0Qs>0sNZd8gs|;; z%TPw(Nj+A`AYH~G>Hmbjavt~_M!wM4JJC8R1_cq+BfJB)n==(-;YFL%Ag=cm7xh z%-v`s!e4~%tXb(}MW@Eesu!u7P+m@X=0ax|`>pn0E zENL%;@|44x!HV*VL-lJVU~wG<)@H~p((66vC&oV;G^(Hzriq|2<0qyN$_^X^7m#>x10lofd?TK0ac>}Tp4j_7C6@Uwuk z0`UF(lw!Xw;ZSK1eXH_*XxNB49`Qj9&zD$2@@B6dKmE& zk$_up z0EdD#Y{43D0&7jAU$Sn5+wdFjh}~|%x~mDS&5?dhr4v7F!MeK%tO{TqV|8E*ahuKu zS?Jfj7OV&GEch#Pe>l9$?$`J?Ca&X+=*M*V;18^R{k+K-UloBh<=lTD#IL8CzjLYxPUg%BUNbh{bA%3y+a9Dg>y#fg;T+`CzV=DvN5{eWxy00a zKSHj>_fG1Fl@aC;r*3TbgXQ0h{1pgqM9AY~JD+r>g7i}&>1Rjc#Fvv$j{MoKPxwz@ z-8ddQo#pREI_>%VRj?*P-mNFSJYAQER<4dsQ0Jc@jwbIePADAY#EDbVt?+d~?wrTz6dc*YM zSz4A}fwGk4?m{SYdIFwhzJ7^1!gp<3!H-tx{lF$)fbzn(?DAbm7kORU`y<+Ad)v>} z`{rW^iEl#tzK{3{#__ZJD{${e{Y!Lq?8A7LHIw`oB2D4)xE@U(;%iL#^YASFwELey zx~!$xG@|WG|6h1!N9+n@z87IX!g zMzsj#w<7FA$bHJ64PW#M2jzDnZv#Tohu;8Kc35#d#y)~|5L$i1lOcXFZ|jE}@%sUk z6+DRAWG;`CeHdj0H|_ykd*Aj(%07m&f>V9S6C7tB_F83cKS$g6_8}y1>On}me%}?k zzJ&h_c$`nsSE70evSRV`!!{Y8iVv^W=9Se>XZzhVLTP_TL}Si?Ng9%Tyk!#dt?_3JdWu)Ca?|y zmdHLVH(gl6O<*0pB;=ojH5Go@b3Y5~AoIj}{GAP0cE6^AW#ejx1xsKS0L#Yvm63kx z7V$6UYmtQ$olRh!vR%_Ffo}LiTG~B??s%pYrCBk;;%sZnFy~&$bRGyQXcC-NWIH0PkrN& zr4#iUmb(w>XCtg5q~2iHOCw%DI{aB1($7Hr513c-ce^~{yaMT?k#x#I14tKI_?2`h zZ*d*$-|e3a<#b8^I?4-gyc_v~C(M7qDlh5ZL3xp>AB~i^+Y`L_5z5QH_<6Mar$YP@ z{o$u5Pa4Kwhn3Ix3dE(H$hg0^%6ngG?EmE`FZ~u-c77&=A1&W&l^4C_43rld(P!ne zKjT(h<}i!$vPW)>^yhYzmwAynT#52>eiDU$mjz#B^vh9RWQe=1eD>!7E6zE8X&&@} z83qs5AYNb`zu{ac(~4Yv>=fmXLY~ZtttYe~UF0Ky^K!tZe(_a=CDmH<_Lwz}GO{+p z(;v%f`Ca;b9?Gmk*^eTf`}t;sOIR7dxg#M?Nc$D!Cy@6w%oXh%CnCN9;rkKiKH~2k zcow`A-q??{jLweTXN~vi&xLrz>@^QG#y^g-BFAq;o~$v;UKNSk^5j4y?*XG`!lNbQ^N5hNRL&e$AkMWK zH|cU_@l;WllQRp^EuwIxy*U?X+Qs!}dv_yFxKAKtdjc1avCf_lcNotiF8he_;0OGD z>@y)PyA{te$FjdKKwa6VtT&a6@t_6kO?Va<5^e@8(G3Z!f#)(oe(2XbELb0I0_zIE z5?aM-(;ed{n!vgmu!Q~*)^x}C^(L_XtsK%R!fJIJ<4jY($lO2K1eTn8%lz4}deP@I zEm*%mefd3O!IHF_QC?^r(_W3Z*h{303em5&2SZrL;#t~fc+_$&6I2kA<~?{}M{FBH zo2PQGzYXc^-%faGwcJISXl|Uqc8tA^Z$Nu`!&2XPF1FN&V^~ zAga>^X@ovN=U($tFy$1OSy3*o5lM?q3ryTG&@;TRYR_i@>1D?5l!js;Ibn+m|_S_?q{*Oo}Z={T1 zrwbhVzcKy58Y9Q7oyf!1Bh8+7TUSHX@HY;B!2_~ukc_ze*oI9ngkG-nLp+?0ugN9o zi{Qh9Xp3-zU!*;z+rAyUFAw*$EmPU!*#`I`GqJwNO?+eo`u4)3SAFyN}9}3p(4~6~mn!p;1z}krK`eNAWB)RLZ>_u)>~CJzqAgTdjTxtos0q>nLksukl|aFIX3>qYdjdOzesUxDx%#NUOm7hwm&B*I^ye`h1K;gdgq z2k9pwwWJrSL42jbDSxEXEBK8Wg&H(2#$eqV#~f(KEZ@EulpY3FYEM+r@l^|%OW zJR^DwLcvFSp9=pvfVSw@%imw&S=Lf;@102FnJRzpwc25Py10JVLlgJ&`vFUM;-O&O zjr#JtzX`05TVrH7>ATbkLg42E7OaOOuCES^ z2X$plVqXr&&%8y5i$2ddfB*Tyu>5cEOn4UohMIfyo4-pDr!My)gj};3C`X=CK}dU- z@QBwV?l6wuv6qB={QgKk9*D$GL|MVp=(*LyR#}{xLE&}m?+}iIMO#Dd_55RR4e`gJX1c9{Ey<9dzHW9#<0)cR~qMe z0CCwPe}i(ww^ax^hi^f6CPI-RqC8*HqdZ^IqdfnOn>789^xc3>nPNB6I}yHiOz$np zA29i+BcHO2q+e&!Pui@@A4EQVuD^(obK8bF#Q(8#kx#5BAfzn54k7i~D@?o(A?;!} zAS4cn40F?#M&HB4i?poLi_q4$AKj|swol=`C?j$|K*m0WxX>2HgCExQ&ToW!b`hT0 zXZ|ESfV%en|2xFb*F_rt1+1qmScxXEerx(6uwL>~8&`TSmk|L*Vo4#x? zY{6P#!IFLy0ZZ&Wgg=%3z21U#c@tP$0n47Rsrcp(ELgowU|kvMSAPVy%mwMmtZ#0z>r==R zn$P*V7xm@$fCWp^o;b?!V8MFSf+cki=iJA}iJv!tb=G!0Ujo}6 zV}sm|em!OND+c_KIuc$8ShW30d^O^-2P=3MT{((hivUY_ChOjGnYIm<5hf6~`7LSc za-^Sua0Wu^Yj!^Mz6W+{o4_pybBNDJczvWCWyHrX)#p90N4PnXPg$^xbe_N1@Hw6| z(z*6_I{94-(vy*N_Vb%N^c}Eh`S&4xail!qS20&(2!Did1mPx>qfE!2eXn5aBO#w- z-Zj2?K_aa33)$6sN^y{+i-2&`N`f8?n_Z##&|oPWh_D?E<>7}bv5hH8OT45 zox*Pso@MT&KGRRJ;K~`nQ zeE?+z&lD`s6#KUmWo51pRknN>Wp8jox%`>w_B{WgiN#YWUTr4tTRMrw1 zZ0nW!e2TLBEc{9On~_c#@8kI6{7Cw@k-h@)H6~r)N6UZXnvPf=W#0H=?GO7$JQIiR zMEZqRdJBLHZY?W^IENy!9>huOCj78QU;4JSPLVaUX`0~DZP$hS=NJFnxaMs?X^gWy zITw(&_n}=bJp|<-Pi>a~s0w`2%^$Y@~09)FW^E z9r`ac&gLmkqP?m1GpaVwzGJ^TIjxX2v1y&0y%LU18-I^}Qs3dvPPgaW_GuM+I?GRX z$Lv__dy&I$M?a-MtaGOoUx#wUi!%{&Zuqlp@uS}hX)5#Hgt!gMLp|A7??9eBv+S1; zx977TWx4nHd()GRa2|`my$)qX_K%kRaipwGi39=!wip^Emom2#3V zG*0kV!t+sn6~;1%khJCx=re634I+l-WZ$t2b=2wpwj83M>{%Au zdWf=i_KWODlV{oQ%-Yr@f3l?QlVzB6p%skoI7C@H`%*j7ajoM#gSgP&@7F>YPvH3! z1qI_m8R?t6Tka)DlYMHx+r~b>ZDtQ4$jRF2XwuHfND~_RQLBHp@62TIp0Uc$036}v z&D!|~%&npiW?qs*+WsfDh8H1D8ulK9T?ijRNW44`ZE&CNN4OLre-+F%&r9SthPdcK zlBPnm^&r+Q_?fmPZtnr=S^OQY-uqUxEpp1dh+cfQ6&IX*AIb}kEwS?1_8KcLIC&q+ ziyXGm%4d1ciVIHu4ay5n4p{jtf2$Q2eER~*%euYB%4hj|thmUN=hQ);K1(%1de5rpa(nN3EglB1M8=g6?qY#SRJ=dhMEvf%|j6v4_XLy$S zzrZu)+pi-O_)F1OnV+kkY@{)xh|4+=ehy`2ZKL-FUlS?25@kisjp}*th?KnqW#z0S zdT;Q9Y+v z2bKJ90T%H{XuQ0$@HV7TABd*kY0~e$Uf=P&9dYXH3-)MQ_zcpyugd_+`sX8^dsNbQ z0vVY8EYi8&9ed6C?8EyF5Pukd3-R{^;_DHLA9Ke`^<9v&u(&56{oh`q?{=)cLBqKW zA=hIOLayPN2x+U$oAfs!ls)oUJO>mdLQmHGOC$b#!_)_;n9w=(jDI#-Wq*xwFF@Ll z5z+>ne3|C4TM?2rQwBQ|e-9!~8u+gWiI=}Y$o=s&LXKPBdHWj>5AK2C8?~)+KgP{@ z_3+2_;-8PdD*kriPx^NI>oiZ@j(Y6JuK`@`C5$tHcmg5k-KLv;h#$RQ)3ikh*-!Be zSc=7B{cfalowp+7ew6%-$?v*F&u<#-v)t7v$9=d6>5QL0ORswe@<|I%L&!0liI8g% zEx!!q+3usS)p+|ygdC3xpbVwG65yYMco`w8#C9PhZH~h0G4N!bUV(C?&%+4Wzbnxh z&cDRBAl`}i|HRLJy}k8eibpS74<$X}6nuDe;!pwi)d+XU(29M|}tbpTRf=uQESgeFNi^ zQ}N-8@KaA`gpYhW6JNqOr{&z1PCPF@@BEe}OYxbAmX;KvY3B2nX=%yor)mG2Yst41 zq;#>RB#-}p`2W%jbYIZJ;au3#vizbID_5;vvvwV#7yrLB#Q*8BthXB6pq?*iiN*QQ z%75BgX0$W>|MYL>VfOw`(7go6T?&6E;!omfJSVI;ZQ6Ez4sq(x4Oz{S7mke;Ss;uzjx-*EUUjRDiCKK z#WZ}n5ntdP8?6>+t9WI=+3lyx>0Ex!{4l@I-#hns)tvs;ae2_kCtvrm%zbtJW zt;g)8bGcLrUx6IyukJhMELI7}SoVj;2Jx9ne2!9mm`qLIvDUzmecT+@8RVxr-Q#ER zxjN$eC-n8;+u`_XZdLncX#*Y(q6Ju&E(u_rIPk5*+sh#(GtGJJEp!ddnApy)oKo(JH!VHlj&U1JMpM; zc?6&5EPK8h@JSNK_pvzvC(kqaDt5{&Rkl_eJT7QxoXy_rjn=KIN8v`FN$_|ujYqeeQ#rbee^QSxIfafVM$`g@*@~+rc$XS3#CG( z>ZH89mpZ*Ro%VM+BO8WB@l|{Mz4*gf%XBVVC}bTsUCE{K9Z4r~7!BsLN6?^CbTjyZ zWwz*gzK>0O#=vAFoGzNK@dM-pqIzKr>zOPSeXm$erHYP|%a)uoCmo(?Z91qrRfDeM z`T3;h_(^;gGh3~mwWe`+{k86H_5Be}9Y5UK-HneEc6YDwD`UIReHH1ert|oCW;&lQ zIr&t{sh<4;gS;wRe}7T}Wdl*&aPp?ux0JcD-uKaolPuQ*cxGTWgM^M6ufjcdEWC$4U72lY9&{3GD$b>gHD}a z=`on$)&>Ujr{b~Bl~FK&?rwax9&5e>&zqd#o=cV_b}E{rhoTVP8>ykl8vM(xqauCD zLbX!zli5lZWImb8FFAA@pgy$?qMJHwrApP!V}0CoGUaqV4+F{*05_6Gj+nHW2;Q;i+2) z0oubZrSak83_jAFbMsXnpHyBqiOf~kdy}$)=WmxtrRMdMF88I9)lw25(gm+l$fi=c z4^3~xYd0V6h}RBr1`d0~zN%Ip1^entr%K7RpYk$(G3oklG2bN=WwgJB#nj)LSESVU zP(GJ-u?2yDz&*E8a0<1a`pDn_q~dqpsM0us1ZA&6dD=-HPiMfr`0ev7j5QE7;xL zn`++JfDc}T>Z(q;&#Cuu8C(#22%B!kbFw+#E#36z?5Q(6Jg^U=#s`M+&0@DaRKx$k z=so?TePu8obigh6$pSvsU2?17{YkI;p*VWbfb+Zbx9j=AHMh@qcSA9NrZegclwG}b z!xp-`FO@QzR1vee*Gd<9R(c*j9A96O*g(#S>Bg>HlGxtAYseYJZd4Q?(!TmMJ#cn4 z8+R(0N3%wpP1Pfeqm(Zs-4YNb?PZIVQsIKzI1a3N#TjshT;hDN2$X~-X=4*qJ+tsV zJv($k0FiavG2--(qSckIO9^~~$1V(_PI*{k3wlzi6x@8Wn8^|qiupoM(s1%o@Cxb- zWwJdGq4My6a74LW&961Ix>0Kq-AEU91+DcTbL(o7v}^ zb*p-hsL>=nKa;9di`5)d(uzupCaZmC@yUs=*AH73^)?kk z<{aGSS9{KNmL%4Ll|aN98||yn`U0ZFt<+Tdh^!K}PqLb+LT!Y;0t!?uiU<{+usl+@ufLy->;(^KR*d8NKD5u@T3jyI7q;f7J1uQKa^jvY13jm2Ntda|%xC zlH%m#MM%>?4SG-?kk-khlbKx6&E}yYZrl{1mm6!lraJ(D^HXll_i_cVkO8<%VbcYZ zcZ4L#hp8_Z1$Is~TLGy9sVr8#%4VT|YVrIws9u4312cU5`ew399 zKk4Ays+WYA1N9k;kzFJLsxoWlG zUKZ#o(^R4{(~#hNa{WH2mar^&*;GF5RlRij@@>NKCIz|pUe@YX}WH#MmwN$JW-9jbng9P}=7hj}z zT@!f?J%#mL*_cI~!#otRkl4DgoEB2~Y&w6X*|yCA&_Hcfc3spgR7x%kXCCy&t9qtt zeY8et*8oP-6&P*71d#vak_F$$)XjT7;_t!X5US;|EsOc2U%|#t7G2QKsTwobf_hFm zSxG0cO|sQW(l3^FxjmhiFG*anI2d%;@Y*4oLyTs#vH!ZUey^uN&+%1(GS~xkpYnhz z!ZB6A_lhv$VP!$1-M%STBV=@a)l8=3rNEe|FF+vfHxfYDCmSKghQe``d>Hd!w8UlOKHc=!T{@*s!3a_8>mFJnSh2$9Iy07fvB5LZGN)%i&CrIs-8gYy#}NR0RJlLbCUVHb-PH(N&v5 zooL1@y2)h5&-w)%faQ{zd~JnZNe`!~?ug^=Ym^`L2`&zB{Skb{eGI3JeNM5G&!?TF zU-GLd7>I^fP6?rZ=vo-VKv69ap68^hekENhCSgaYl&)K&K}^2pBv4V3n#8G=mvd9F zcshQ?tB#CK0wqFOcPfP1iu2BzcLZcL=a;fs4~n)|&BJzCtuLRX*#KeDd21IIaqx#T z9j99KDlmTfqlOzz7<{m$sBlEKO}>!BxgO4DJ%y(J*p^8;LG&<#G&0;kZHOig2Iv^9 zvW)gs3ovfxoJs*lDL8+qUcW&ALJk5UqCIGupi;1^_|QWOnS8baL2i#(-TIgZVhNFFb(lcE^ke(nxr7Njw zCJ$Mr`jX8uNrqO{!7>kHraU*7_S1QsDP=rxRqv&SL%XnvVlRS&PPb<`HG`-N0-6S$ z_A}KR)=WYsrbGfzsB8(O3UX<-;`@b{d6Dr6Ew;MV$jU=g*yJ{{QW|1J6^rUryh^p2 zx^c1%U~i!QI;@{+mIrtS)R*(qPSLBDK% z+Jl3J3QSi{0SH_yW^Roi9*@kYD@7*_CmTPV0#)^19)FHJ8z;#rw}cJlr;EVR>?;np zLtYBpy8>+iY_jT=Zi^d=6JTd_JxPgiyw?v~4eZeVE|{yU>Ldn7Dyb|uMy>*}H{;$O zk8YMGkS1_Sob{ISMNCf0FBH>W?v?R+WMdmB5l*?$hqJ>-r3Rt+2pDB01$@q?a2Sa- z1fS%|a>{_L-&$a@5B;@}G8rR0|?NvPNb|JCu)X^nJ;KQg!m)-#@O9Z9n| zfc7g@_%CHW5B8$h#9unCW;YCh%Hw?OVo-bk$R!f6?J7ii$YtQ(1^P$sVT%a9i6xzSg_zJQla78-o1TFF)4G#wZ?OC70Q?+ny6!v-yeQ$sG3 z#iExSH}eeDiZ<6jjI(l~mGm^EkSKVe2h%W7i5q zOM6;|YJ<=-p~lq9@bDtz&tl(#GUFr~RHKx>Ys%^q$a*nVggFdSd(MMNJfC}O{E$bV z$z(p0PQw~@|uZlgc(5wzyvgfff6V4U&5lANr*LukWft-+0ioVPXt;-u76oL?V7 zyH3VQJ6_IDWs-R>pDVpH?uc2J>UV71IaaZRS*9hWl~(VrqXv!z-c=pXVGi9dpA%vEtPmh~Y%q#!l; zxx3>-Qx9=F92~&6w<+u05j5zKw&7f^kjcT=k}16>e*M%9Zh}k7;Mib*Hb=@smHjRW z0W+V(fV1xZ0#VcYl+3J6K47P+>6tBqE^34Y5lLo?@O>>o{%~Pe@xAxP8yz6^88&Do zWlSiR4o)^u4dfVJr8yk!6^c0G%G?tdHN9Ee?$`(nK%;PHiI6bQEdei*8HfN*F_rP( z_dKf#1sB?U+QZ>(p;*kO-XE94!)CqK{y1aw;n%(k@Gr-qOWseXi#&S#K-}1M1Hxd> zx5c${$$Sp(169{8W+7O*_r{GiBB&U!Yh&gNt)Ef8orC)q4lyz=6yPEb@;(^f*3-ES zJ~^S0xULbpyL-!!!R>(ZViAD{rT{cZl1QwkUo1eAhJ8GhrlYs>p}08`6z^H(!7>7O ztdY7p*K~65wymTqX}ZJbz54>rBTd^g!PB4s<%m2`vZ^r4qzbTZ=G>g~;rI)AjD10( zJPnQ)1g54M=w-yE#7^Bl?7KMKg;kOchZ|@gtB%wL%i3EM z-jFygs3f7t0nKrV;iJzlUZ$%l7>Ar(9%8YNlhcpIKW~|9)F8= zw1K0tgM$v(l_$8`Y=vJ|t?t0ae;9r?Av~#WA30cu41wQG4hI%hoSEQA$A!>W`OCQY zs)euuY=3?YE404T(2*`Av%c?F|LVC4ps7N!fWx&M4hKM-lF3iR&6!S93DOqRx7SEG8A+ z55XBOICL^u`OINjv*5o`%3-0>kQY49Ej)PG^_^_d&sO2u2nYRQ;j@QX-^Wo4jwE0R zt3o=jc%OUDo2FVQW^y=Rz_CK6n$CXyxdP1Lj2kEguc~a?D;ARn;>Xx`)XFdMM{2(J zh4|;<5hJs4oH9oF+7PY?!XUa1dj@m@%jOo)dR)6&l4$Nx?}*=8 zxgW@}R^Lsuo!Nww5_90In9CKaPN|XyiKzVTbDbzq3O5I=_i#xAUIC>qimW<3ZD-vs zxPE^rzK+)yNUNtd&qqZKoNeUc50K7OOCJ9GheZ7ikH8)6Fb$t${a|w!F~#sedvd*P z;-M>qM-n*4OT!ZZ#QMwsGtCy^_LX&@B;vrTP^zZB65pdq)}M2k}KhvTmhacF{k`TTNRSSItd0i6W z${O^7+#q^z?iA9gbQK<**}Ri>Guf}hPGOGmctRUtxR?0*Y=JdoiBmdGX3{W9!?iI} zO%<~xulkL+@ln;Mz;^#ah{{Jb>A^t-_w3*q;(ar|rty4{W5MlnI$rWd2VEq#>m)dy zt4m^ZQNYbpI4qSM+_m-KVdpI_i8GbZdnUbH)mAq^w1M6I}oFz|dYZd^PYDuAr>&JT{k=!FU6PT5q? zgMq-c+{bmJQXUO|{}76zk|m zI6iMR-KQZ{&_4DL@eUQWh}u8Kk5)P;wcI>G^u9||ZD?c6H$e8#-2Q-(0-jK?J|HJu#7bX5V z;2zCb(G<=68Jygp0pXG;+*mxEmZn_iCqZ8<_nLr4KfirR;@VOQUgFr$K96^v3}l5} zBRH%Zwr?~%zdb4BD>&LK!CN?w(^Nn8)A;(H4O29!F37FDZp;|~YAR=rvd6^5{5YJNtuRLij0&ED+^DDUPf^&bkEd4xwoZ9Bmo0R{m&TJbnKF~8jvT^p`-L3awk9L=o%P--j zn8Oi+afud(iP=iUfzl7_?Z3qrZZhYY!4;2xKN2fM0g4xRkmo~5hp6lRLXJX1;;4o4 zHT_j}zBAghYDr?tPQgDt>aq(8LQ@ zU-SKS{80Df^4Y^&K^Ge+UBT-daKQys!b&xBWwX^mFBFip&+>`hP{HUvG0M zSpV<%qJ|-mV!;SqhobPC`1w1WUAug52NLV_^QaBIXv`l2Kh~!=cu!E6^V|3tZ~`H@ zTRGfcHk7YSTNnL-wVnTW@za`=vDo?3@#9v)iG>jA12w!s$9S~-K3-H}bm&*O%Yg|H zj1Yck<*}i$I_?;&q&}yFw>IFS1LWpBF3^djME!Kp#s8%O3}SBanYg)?GD+poi&z|_;I)dw99&Al3lm^P ztp4c`%`2Y-Ie)L_Aw1yF3K#p+j$d$|6>H!m&9kz0M@W`Dx^TeX5654wlQ|gwSECAA zRmBBTt-7s4{TYn@3hRU@+onKXz}4KOHmq;!Z&6`Sr*$}BbrRUAu2_pTeMthAmBlb4 zVy(=v8U2iL)jpGf!!!I}v*RsBt+Bua!UC#IP&nZb3@?B9(`O;8IevD3i#fEm07SIT zN$1Wc=~G89rdxnDJH;0Fq8DE4%j+g+>x!myk&z` z4|1f4)K;pI57Y}D_zn-b6zKaf^Fmngup^-T7G81aZWrLjpT>2jte=MF=~iw#+~z@n zrFp209{z(bQr?I9nYq2?Lfz>xyiiA7fUeYP1L_rLyh2zT*fG)%J$|58+dT%eNgv*b z<$G=gdSMP%6urVLTSSqhX;3MLWq)L(7QFYT;<-3MDbkm!;^MOXt6Ik6x<$N41h`AQ z27%H?OD2Qw5Q4>kfx1oCgQCmTOzHyal{p~8v@mQ_-Y2ji;`L}4rMie0eUHiiF7CX3 zBs;1w&Xx?=h!_6{D_M9!^4d2CWXW1@uofGEc3=@NwCkqnmM3X- zFl}c?_)dn8FIq9I3%2+{j^V5kYA_1{LnXvQMBsTIK4njPAw)YC+|a9_nrWEbIr0%~ zi%(S#Gpnh4N(t0kF_rbT!$v%%CYe$NKY7*uo6K4z8EI4t<+dn#1)fx;;j>ZyeA-?< z+^G_o5fMJAGEi=QQlf!?2bMceSC8AfiEfknF#EtwffEm@!zS>}o}rq|bT`Pmw%$f- z8)H`8`UchTVVLCz){&hGDjk6ZedgZxL~I*9Nda1=%t;!d^@FO;vs6@eQ(kNTs_yHxK+t3l z5cSJS5{6Lt#bfcGvzLP*K$|wjJ*3*~rT9x>3c3p}?{igCZ|Fv2*VgK3*nlE0W>;%m z76r4CW}crokP)8u|LBWduUIpzHI++5-wI@1p08T8eZ!mDm0__Fl7<{Cs$h}^z)HUW zzhl}=?@IH{j>T(|BjkXJNP??X21)F{P(66M3)|Z%WC!GaWHZuOA~*A2L3}&c;2@i8`(J?5JAkgR)nV%=O?X)KiupewH<`4xwAdmXBs+{!_TpS}L(&%ZW zn297nAUeOD2btPzjrn^7s?;Y}XK%^ILh+4y7dGZZ)=plC)Ib8t3WSK4#CIr57MQk1 zce8;>Day&`A`sT~zPbF`8}w;; z5sOA4tfKCm!P&%7X$3b89o!@H?p{qzVcvQUDHe_Mczh-us>xEMcxXh1RY--jX=Lsow)EZ-xwn;MAp2{Eyyzv z)sjWapb1BKWWimmgZ?uRhv&BphUI8^2(Zs;VXTZ+ElOP&vWUV`kU$DFcguHS>L$j$ zdmS#|&6y2?sf@$M$_v5Q0BZvlP+9+#_WKI9u?e|QpXq+-SGQ))?+w1^7jnFjAo%iCCOiB>S zHr6vBlN_tfJA6fQkrXNUht!S9MZ8blI%}}W5rI}gh6M#LGJz$5hiHA?BolYK*W|R# znlm+hCtkw6c$Lw^|^UNhi9*#vBpxXjWC-y!-^HWy7KO;L9Rhzu8Xx>r; z&&juhWrVQX2bD9`x^V^Sav1elCLfVRiaHSrFQnnoO8JnQu3(v=mljClu^&q+xn8W4 z?wz1Qz8(cu2(sme)uVU)VcSKEQXEAGv_=bHro3n$*_^`L#z^z>NhZL;H01>ZGzFTH zbUj2|VziGg-tTe;(h_3`(gb1s%=?&{sWI1@mctyovA()^Yo4{tMZtl64Infydmx}6 zS4X#L%}!Xf0SB{GKLxQ7*&@XDsiC)9ynX1}KS$Z;`zvvd*MiV>tki3q8L_>&~j zW;EHNq}fv@_$JdYaqms4w>9e}unQ653EohCGDXG2K@^W$?T53n7t4UJj$u?SOW6u$rqZc zELU!cY@UX>A_D24_yn5LOVM`?zSxvVXWXFIwo3>ofDDInTuo`c|LGR|#7SBXoN7R3yh0GSI0q*E8pGdof1+@IQ#Pm*zV9x;iw+>s-~hwjQV`$dBs`4NKk+FxI5Z5K)S&Z>VG2 zyvLIGwBp5c!Wf-NA`j(0Dz{V*0DC*%R5xDOjW$qc2NE-`&q)A$0xA>uZ3&+;ul#SR z>*n0834z2Tuj3&4gTQvi(FJ5hH8|>2e|yd*v@9SzG@cO$UMlS$byv7g4B<&bX$%1Z zvxA1;QO9OXdoycnEL$x)k_u=%P}S4u(r}K%chxny>gW7&G{I-T$%el zWu-m3?-=*?qVQ}m(6E06QdJsh)iVA5uC#)dA|g_p8G`(5ifG*rcBPfbPf<@U-3)aL zKpXmp>hk(ru&jj00mA7V<@+D0`@qUt9@KB?kChxFw%i;t_7nRjrC4De|5RPxebv&p zex|N46I~-Xn?z?>LimkCn8t_)7#cBJL-slvfMNI+cCdK0G00F^YV77br zT`X=~p(YuKpfZAS38MeMR9E$`pTwH5j0-p7oP&bIDH&PR?|!w|b#z&D8Y!}z!x6xb z`oC6#ei!Q#&}^#LC`=zJ^oGdz92hjGqV;-Ie;w;pj~LZ0aql^WgR^bO^!u4l0?z-9 zx_QT104pa=ps)y006mVx%L+<1zum!yFtXYlpCofw0RVxm66L>Bp@CSLhu3R3Hiyq zJS2yp)lRj+)v$}m*=R%3)hHoGBy?aUo6W=C*Z4N z5<9ScoYeh`x)-NH5<300{w3cy|2K7SJ`pvdznhO%H~yh68w|$9=ij?3yTjPrp?)PQ4FpC=bLhJyh5KKzNYc%^OTj%Jc^TyGVw}U}P?vJV%JLW<)V@nj z5VBpunOEU``8TpPAUO|a=l9)HI+)+jz1sJ$b`Gvd`f26-{`+h4+#D(v7yG#+Ip}%^ I-RJ@T10q}bKmY&$ literal 791154 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 jdhjVir6C?qAgb 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�&dP7H{mI73W#OZ+Hm{ra@q{UoPcc#q2R#&88E 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 j&K289eoA>D$7ryQ_`oL-mA1x+#!WTN(* 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

    mj5;6><^ua@O7HS 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%0A%hu7J4T9;><< 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�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 Nr8ryDXKU^;{|ASC(%t|7 diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index d6d095dc72c55..79c8e83a000e2 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -574,7 +574,7 @@ where mod tests { use super::{ ExecFeeToken, ExecutionContext, Ext, Loader, EmptyOutputBuf, TransferFeeKind, TransferFeeToken, - Vm, VmExecResult, + Vm, VmExecResult, InstantiateReceipt, RawEvent, }; use account_db::AccountDb; use gas::GasMeter; @@ -676,12 +676,6 @@ mod tests { } } - // TODO: Tests to add: - // - Instantiate accounts in a proper way (i.e. via `instantiate`) - // - Verify sanity of initial setup. I.e. no active account should have a zero balance. - // - test events acruing in success and failure cases. - // - test instantiation yields an instantiation event. - #[test] fn it_works() { let value = Default::default(); @@ -1153,4 +1147,138 @@ mod tests { } ); } + + #[test] + fn instantiation() { + let vm = MockVm::new(); + + let mut loader = MockLoader::empty(); + let dummy_ch = loader.insert(|_| VmExecResult::Ok); + + with_externalities( + &mut ExtBuilder::default().existential_deposit(15).build(), + || { + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + ctx.overlay.set_balance(&ALICE, 1000); + + let created_contract_address = assert_matches!( + ctx.instantiate( + 100, + &mut GasMeter::::with_limit(10000, 1), + &dummy_ch, + &[], + ), + Ok(InstantiateReceipt { address }) => address + ); + + // Check that the newly created account has the expected code hash and + // there are instantiation event. + assert_eq!(ctx.overlay.get_code(&created_contract_address).unwrap(), dummy_ch); + assert_eq!(&ctx.events, &[ + RawEvent::Transfer(ALICE, created_contract_address, 100), + RawEvent::Instantiated(ALICE, created_contract_address), + ]); + } + ); + } + + #[test] + fn instantiation_from_contract() { + let vm = MockVm::new(); + + let mut loader = MockLoader::empty(); + let dummy_ch = loader.insert(|_| VmExecResult::Ok); + let created_contract_address = Rc::new(RefCell::new(None::)); + let creator_ch = loader.insert({ + let dummy_ch = dummy_ch.clone(); + let created_contract_address = Rc::clone(&created_contract_address); + move |ctx| { + // Instantiate a contract and save it's address in `created_contract_address`. + *created_contract_address.borrow_mut() = + ctx.ext.instantiate( + &dummy_ch, + 15u64, + ctx.gas_meter, + &[] + ) + .unwrap() + .address.into(); + + VmExecResult::Ok + } + }); + + with_externalities( + &mut ExtBuilder::default().existential_deposit(15).build(), + || { + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + ctx.overlay.set_balance(&ALICE, 1000); + ctx.overlay.set_code(&BOB, Some(creator_ch)); + + assert_matches!( + ctx.call(BOB, 20, &mut GasMeter::::with_limit(1000, 1), &[], EmptyOutputBuf::new()), + Ok(_) + ); + + let created_contract_address = created_contract_address.borrow().as_ref().unwrap().clone(); + + // Check that the newly created account has the expected code hash and + // there are instantiation event. + assert_eq!(ctx.overlay.get_code(&created_contract_address).unwrap(), dummy_ch); + assert_eq!(&ctx.events, &[ + RawEvent::Transfer(ALICE, BOB, 20), + RawEvent::Transfer(BOB, created_contract_address, 15), + RawEvent::Instantiated(BOB, created_contract_address), + ]); + } + ); + } + + #[test] + fn instantiation_fails() { + let vm = MockVm::new(); + + let mut loader = MockLoader::empty(); + let dummy_ch = loader.insert(|_| VmExecResult::Trap("It's a trap!")); + let creator_ch = loader.insert({ + let dummy_ch = dummy_ch.clone(); + move |ctx| { + // Instantiate a contract and save it's address in `created_contract_address`. + assert_matches!( + ctx.ext.instantiate( + &dummy_ch, + 15u64, + ctx.gas_meter, + &[] + ), + Err("It's a trap!") + ); + + VmExecResult::Ok + } + }); + + with_externalities( + &mut ExtBuilder::default().existential_deposit(15).build(), + || { + let cfg = Config::preload(); + let mut ctx = ExecutionContext::top_level(ALICE, &cfg, &vm, &loader); + ctx.overlay.set_balance(&ALICE, 1000); + ctx.overlay.set_code(&BOB, Some(creator_ch)); + + assert_matches!( + ctx.call(BOB, 20, &mut GasMeter::::with_limit(1000, 1), &[], EmptyOutputBuf::new()), + Ok(_) + ); + + // The contract wasn't created so we don't expect to see an instantiation + // event here. + assert_eq!(&ctx.events, &[ + RawEvent::Transfer(ALICE, BOB, 20), + ]); + } + ); + } } From 1401dec1305e29cb865f03a29e0567017342df71 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 14 Jan 2019 15:04:39 +0100 Subject: [PATCH 103/108] Attach an issue to a TODO --- srml/contract/src/wasm/code_cache.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srml/contract/src/wasm/code_cache.rs b/srml/contract/src/wasm/code_cache.rs index 086a4407d7ea0..92dea3ee1df55 100644 --- a/srml/contract/src/wasm/code_cache.rs +++ b/srml/contract/src/wasm/code_cache.rs @@ -72,7 +72,7 @@ pub fn save( let prefab_module = prepare::prepare_contract::(&original_code, schedule)?; let code_hash = T::Hashing::hash(&original_code); - // TODO: validate the code. If the code is not valid, then don't store it. + // TODO: #1416 validate the code. If the code is not valid, then don't store it. >::insert(code_hash, prefab_module); >::insert(code_hash, original_code); From 449f5ad09321b0fea420563755d8ae33ccf444f1 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Mon, 14 Jan 2019 15:11:09 +0100 Subject: [PATCH 104/108] Attach another issue --- srml/contract/src/tests.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index 7472e138fa2e7..dddbba4e5b3c7 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -14,10 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -// TODO: Tests to add -// - Block gas limit -// - top_level_call_refunds_even_if_fails -// - test commit/discard of a tx. +// TODO: #1417 Add more integration tests +// also remove the #![allow(unused)] below. #![allow(unused)] From 34a1698a7c9f6fd878d05b153cc58f0292a80c7e Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Tue, 15 Jan 2019 12:32:09 +0100 Subject: [PATCH 105/108] Apply suggestions from code review Co-Authored-By: pepyakin --- srml/contract/src/lib.rs | 2 +- srml/contract/src/wasm/code_cache.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 75f749d72afa9..2cd5ffc1d26bf 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -157,7 +157,7 @@ decl_module! { /// Updates the schedule for metering contracts. /// - /// The schedule should have a greater version than the stored schedule. + /// The schedule must have a greater version than the stored schedule. fn update_schedule(schedule: Schedule) -> Result { if >::current_schedule().version >= schedule.version { return Err("new schedule must have a greater version than current"); diff --git a/srml/contract/src/wasm/code_cache.rs b/srml/contract/src/wasm/code_cache.rs index 92dea3ee1df55..e0c5bd4b97ae4 100644 --- a/srml/contract/src/wasm/code_cache.rs +++ b/srml/contract/src/wasm/code_cache.rs @@ -17,11 +17,11 @@ //! A module that implements instrumented code cache. //! //! - In order to run contract code we need to instrument it with gas metering. -//! To do that we need provide the schedule which will supply exact gas costs values. +//! To do that we need to provide the schedule which will supply exact gas costs values. //! We cache this code in the storage saving the schedule version. //! - Before running contract code we check if the cached code has the schedule version that is equal to the current saved schedule. //! If it is equal then run the code, if it isn't reinstrument with the current schedule. -//! - When we update the schedule we want it to have stricly greater version than the current saved one: +//! - When we update the schedule we want it to have strictly greater version than the current saved one: //! this guarantees that every instrumented contract code in cache cannot have the version equal to the current one. //! Thus, before executing a contract it should be reinstrument with new schedule. From 8108d87ed85c88b7c4a00b156dbad0966ad73065 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Tue, 15 Jan 2019 12:32:23 +0100 Subject: [PATCH 106/108] Update srml/contract/src/exec.rs Co-Authored-By: pepyakin --- srml/contract/src/exec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 79c8e83a000e2..9349e9fed20e9 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -57,7 +57,7 @@ pub trait Ext { /// Instantiate a contract from the given code. /// - /// The newly created account will be associated with the `code`. `value` specifies the amount of value + /// The newly created account will be associated with `code`. `value` specifies the amount of value /// transfered from this to the newly created account (also known as endowment). fn instantiate( &mut self, From 930cbf2f939a894b2a0b0ec41862aba61a8ae14d Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Tue, 15 Jan 2019 12:32:51 +0100 Subject: [PATCH 107/108] Update srml/contract/src/exec.rs Co-Authored-By: pepyakin --- srml/contract/src/exec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 9349e9fed20e9..7b5cede5cfd89 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -36,7 +36,7 @@ pub struct CallReceipt { pub output_data: Vec, } -/// An interface that provides an access to the external environment in which the +/// An interface that provides access to the external environment in which the /// smart-contract is executed. /// /// This interface is specialised to an account of the executing code, so all From 40cf826c39e64a29b69ffee8673d8ac4a8fa35f4 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Tue, 15 Jan 2019 12:38:03 +0100 Subject: [PATCH 108/108] Recompile node_runtime --- .../release/node_runtime.compact.wasm | Bin 812145 -> 812145 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index b9e68a0b47c33f0e0acf6865f2a580ca04523e09..bc999dc226d067c25ac1dc9dcf26e1c2213c4080 100644 GIT binary patch delta 2430 zcmaJ@eN2^A7(eH|U+;U5_wt4oDK_B(;*Aukl++Ag@#4f5q;r7eFsZevX@0Yr-KIH| z{G%!3ncri6u##@InP=dbkju}k)J&9CA^}Zc&2cyTSk!ag_dR$+=h>e9&iOqb?{l8# zId}K&xvabAvflrI9#wuq8?@rAHuAu0*BP z(qd&izxIZ*T%$Mn%oWNqO26lkl}f!z|Kz0=%Iq}dn>$dyPZ?d=yk9|apg2)nC~n@o z-!tP)UrnDem5?N#K{81-_#A2^>wi?AF^v$zp(h6XA)lJ$H84+*}&rB*yFlGlnf z93!b1DU*ENBht4LXo3NkTKEXJ#|PcMi*Y*(VfQ255(eFF#JF9q@u-C|ZL>_(u*jn( zjPC5Q3vOlDVfkSFgQN{U@~CApL(Oc7RewKT%op;F#y+{t67^aoGTpi$NxlCq%MCWE zSpUCbtfEl+pw)n|s_HenWX9SI0qucUVGXVJ#8~a*hcxw-aq@bKH9P}ZXl4(FnFa8` zv+4nzRrj@!JReEYjB2$`g4iKar=^-;{6l+ca-7-=6HfLFr8> zPw{T2J-jc)+eYcXfcP}@r+LfWyYArge*(}r4VqHDPw@j|z0=>L*ZEI}z1^4K?e#2~ zcdcg0POfcWh15xK!OO2PgYT(e6{F}jSQ%l7Fku&amu}<7cCohj%imgBf1buud?jdWn01pI(Z2{TP#0q zr&L&~lRV@Wp{OYG3N^@!RKGxpy}}jbXCODr=7Z3GmDSO$eD4n|1v|q}U1J-RIkL*K zUPFiHlO;MS!4T3;>TfL`GGq{L#Zhj6x>lBh1?g^OztbXq{RZoIkCeGKF1IFjx1Cb} zI&QHxU(PDsyb`ixHe76Hi8L1qZnH7meVa|B@rzMETqy0eW)Onbr68mvArM);h#jZT*TE zz4V`tT%xU?i+h*7FT}lgd&3aLBf~Y5Xf`QMGQd5&Tf87}b>dzIxPyB!zZVeY2Qpwy zCqA_2;GlpUxF}!_-0NiNVc8#va_;}Z3yP7Eyu>Et@oxc<{rnKm6YwlwV=LU2X2t(-Ce9|(|@_FQW*dM delta 2436 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 Date: Tue, 8 Jan 2019 16:42:39 +0100 Subject: [PATCH 075/108] Fix typo --- srml/contract/src/lib.rs | 2 +- srml/contract/src/wasm/code.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 512fa60f92060..152d261a29284 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -326,7 +326,7 @@ decl_storage! { /// The code associated with a given account. pub CodeHashOf: map T::AccountId => Option>; /// A mapping from an original code hash to the original code, untouched by instrumentation. - pub PrestineCode: map CodeHash => Option>; + pub PristineCode: map CodeHash => Option>; /// A mapping between an original code hash and instrumented wasm code, ready for the execution. pub CodeStorage: map CodeHash => Option; } diff --git a/srml/contract/src/wasm/code.rs b/srml/contract/src/wasm/code.rs index 29a47f74dc810..8d08de4a47a8b 100644 --- a/srml/contract/src/wasm/code.rs +++ b/srml/contract/src/wasm/code.rs @@ -19,7 +19,7 @@ use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul, Hash}; use runtime_support::StorageMap; use wasm::{prepare, runtime::Env, PrefabWasmModule}; -use {CodeHash, CodeStorage, PrestineCode, Schedule, Trait}; +use {CodeHash, CodeStorage, PristineCode, Schedule, Trait}; /// Gas metering token that used for charging storing code into the code storage. /// @@ -65,7 +65,7 @@ pub fn save( // TODO: validate the code. If the code is not valid, then don't store it. >::insert(code_hash, prefab_module); - >::insert(code_hash, original_code); + >::insert(code_hash, original_code); Ok(code_hash) } @@ -88,7 +88,7 @@ pub fn load( // // We need to re-instrument the code with the latest schedule here. let original_code = - >::get(code_hash).ok_or_else(|| "prestine code is not found")?; + >::get(code_hash).ok_or_else(|| "pristine code is not found")?; prefab_module = prepare::prepare_contract::(&original_code, schedule)?; >::insert(code_hash, prefab_module.clone()); } From e58fa2c60969ebace8ce4f3ede7742f537b6b59d Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Tue, 8 Jan 2019 16:46:48 +0100 Subject: [PATCH 076/108] Fix fmt --- srml/contract/src/wasm/prepare.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/srml/contract/src/wasm/prepare.rs b/srml/contract/src/wasm/prepare.rs index 879348b36a479..2eec8509129d6 100644 --- a/srml/contract/src/wasm/prepare.rs +++ b/srml/contract/src/wasm/prepare.rs @@ -68,12 +68,13 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { } fn inject_gas_metering(&mut self) -> Result<(), &'static str> { - let gas_rules = rules::Set::new( - self.schedule.regular_op_cost.clone().as_(), - Default::default(), - ) - .with_grow_cost(self.schedule.grow_mem_cost.clone().as_()) - .with_forbidden_floats(); + let gas_rules = + rules::Set::new( + self.schedule.regular_op_cost.clone().as_(), + Default::default(), + ) + .with_grow_cost(self.schedule.grow_mem_cost.clone().as_()) + .with_forbidden_floats(); let module = self .module From 2cbf62237949c2bc984f1c0a1757c58e78926025 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Wed, 9 Jan 2019 18:54:58 +0100 Subject: [PATCH 077/108] Update srml/contract/src/account_db.rs Co-Authored-By: pepyakin --- srml/contract/src/account_db.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srml/contract/src/account_db.rs b/srml/contract/src/account_db.rs index cb8fe66d99f0e..09557f09deaa0 100644 --- a/srml/contract/src/account_db.rs +++ b/srml/contract/src/account_db.rs @@ -26,7 +26,7 @@ use {balances, system}; pub struct ChangeEntry { balance: Option, - /// In the case the outer option is None, the code_hash will be untouched. + /// In the case the outer option is None, the code_hash remains untouched, while providing `Some(None)` signifies a removing of the code in question code: Option>>, storage: BTreeMap, Option>>, } From 785bbb9d672bf07ef9cbe37970bef5b6ade52568 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Wed, 9 Jan 2019 19:02:28 +0100 Subject: [PATCH 078/108] Update srml/contract/src/lib.rs Co-Authored-By: pepyakin --- srml/contract/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 152d261a29284..36f2005892d9e 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -39,7 +39,7 @@ //! This module requires performing some finalization steps at the end of the block. If not performed //! the module will have incorrect behavior. //! -//! Thus [`Module::on_finalise`] should be called at the end of the block. The order in relation to +//! Thus [`Module::on_finalise`] must be called at the end of the block. The order in relation to //! the other module doesn't matter. //! //! ## Account killing From 4e2e443e8952b32c4a9f0cfc5d81ce420a642cf7 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 9 Jan 2019 19:15:21 +0100 Subject: [PATCH 079/108] Line wraps --- srml/contract/src/wasm/runtime.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/srml/contract/src/wasm/runtime.rs b/srml/contract/src/wasm/runtime.rs index 231c6f5ab3283..fa9dbb5657b2e 100644 --- a/srml/contract/src/wasm/runtime.rs +++ b/srml/contract/src/wasm/runtime.rs @@ -297,7 +297,16 @@ define_env!(Env, , let ext = &mut ctx.ext; let call_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { match nested_meter { - Some(nested_meter) => ext.call(&callee, value, nested_meter, &input_data, empty_output_buf).map_err(|_| ()), + Some(nested_meter) => { + ext.call( + &callee, + value, + nested_meter, + &input_data, + empty_output_buf + ) + .map_err(|_| ()) + } // there is not enough gas to allocate for the nested call. None => Err(()), } @@ -361,7 +370,15 @@ define_env!(Env, , let ext = &mut ctx.ext; let instantiate_outcome = ctx.gas_meter.with_nested(nested_gas_limit, |nested_meter| { match nested_meter { - Some(nested_meter) => ext.instantiate(&code_hash, value, nested_meter, &input_data).map_err(|_| ()), + Some(nested_meter) => { + ext.instantiate( + &code_hash, + value, + nested_meter, + &input_data + ) + .map_err(|_| ()) + } // there is not enough gas to allocate for the nested call. None => Err(()), } From a2fada6d5a0a63ab8159bad5a3b3ffd0595f056e Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 9 Jan 2019 19:18:05 +0100 Subject: [PATCH 080/108] Wrapping macros --- srml/contract/src/wasm/env_def/macros.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/srml/contract/src/wasm/env_def/macros.rs b/srml/contract/src/wasm/env_def/macros.rs index 60b3f02e44564..bd123c43604c8 100644 --- a/srml/contract/src/wasm/env_def/macros.rs +++ b/srml/contract/src/wasm/env_def/macros.rs @@ -44,7 +44,11 @@ macro_rules! gen_signature { #[macro_export] macro_rules! gen_signature_dispatch { - ( $needle_name:ident, $needle_sig:ident ; $name:ident ( $ctx:ident $( , $names:ident : $params:ty )* ) $( -> $returns:ty )* , $($rest:tt)* ) => { + ( + $needle_name:ident, + $needle_sig:ident ; + $name:ident + ( $ctx:ident $( , $names:ident : $params:ty )* ) $( -> $returns:ty )* , $($rest:tt)* ) => { if stringify!($name).as_bytes() == $needle_name { let signature = gen_signature!( ( $( $params ),* ) $( -> $returns )* ); if $needle_sig == &signature { @@ -140,7 +144,10 @@ macro_rules! define_func { macro_rules! register_func { ( $reg_cb:ident, < E: $ext_ty:tt > ; ) => {}; - ( $reg_cb:ident, < E: $ext_ty:tt > ; $name:ident ( $ctx:ident $( , $names:ident : $params:ty )* ) $( -> $returns:ty )* => $body:tt $($rest:tt)* ) => { + ( $reg_cb:ident, < E: $ext_ty:tt > ; + $name:ident ( $ctx:ident $( , $names:ident : $params:ty )* ) + $( -> $returns:ty )* => $body:tt $($rest:tt)* + ) => { $reg_cb( stringify!($name).as_bytes(), { From d8f433f0b18ee113ba890e10de65efea9beb0c2f Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 9 Jan 2019 19:18:58 +0100 Subject: [PATCH 081/108] Add _ prefix --- srml/contract/src/tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index cba75a4991ade..d76a09ee8a0ec 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -83,7 +83,7 @@ type System = system::Module; pub struct DummyContractAddressFor; impl ContractAddressFor for DummyContractAddressFor { - fn contract_address_for(code_hash: &H256, data: &[u8], origin: &u64) -> u64 { + fn contract_address_for(code_hash: &H256, _data: &[u8], _origin: &u64) -> u64 { *origin + 1 } } From bf2c8ae1197bf6e692bcedcb1041a37d501d2418 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 9 Jan 2019 20:46:03 +0100 Subject: [PATCH 082/108] Grumbles --- srml/contract/src/exec.rs | 16 ++++++++-------- srml/contract/src/tests.rs | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index b995627965718..7896f039edfd7 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -59,7 +59,7 @@ pub trait Ext { code: &CodeHash, value: BalanceOf, gas_meter: &mut GasMeter, - data: &[u8], + input_data: &[u8], ) -> Result>, &'static str>; /// Call (possibly transfering some amount of funds) into the specified account. @@ -68,7 +68,7 @@ pub trait Ext { to: &AccountIdOf, value: BalanceOf, gas_meter: &mut GasMeter, - data: &[u8], + input_data: &[u8], empty_output_buf: EmptyOutputBuf, ) -> Result; @@ -522,9 +522,9 @@ where code_hash: &CodeHash, endowment: T::Balance, gas_meter: &mut GasMeter, - data: &[u8], + input_data: &[u8], ) -> Result>, &'static str> { - self.ctx.instantiate(endowment, gas_meter, code_hash, &data) + self.ctx.instantiate(endowment, gas_meter, code_hash, input_data) } fn call( @@ -532,11 +532,11 @@ where to: &T::AccountId, value: T::Balance, gas_meter: &mut GasMeter, - data: &[u8], + input_data: &[u8], empty_output_buf: EmptyOutputBuf, ) -> Result { self.ctx - .call(to.clone(), value, gas_meter, data, empty_output_buf) + .call(to.clone(), value, gas_meter, input_data, empty_output_buf) } fn address(&self) -> &T::AccountId { @@ -618,12 +618,12 @@ mod tests { } struct MockVm<'a> { - _data: PhantomData<&'a ()>, + _marker: PhantomData<&'a ()>, } impl<'a> MockVm<'a> { fn new() -> Self { - MockVm { _data: PhantomData } + MockVm { _marker: PhantomData } } } diff --git a/srml/contract/src/tests.rs b/srml/contract/src/tests.rs index d76a09ee8a0ec..a42f59c9c39aa 100644 --- a/srml/contract/src/tests.rs +++ b/srml/contract/src/tests.rs @@ -83,7 +83,7 @@ type System = system::Module; pub struct DummyContractAddressFor; impl ContractAddressFor for DummyContractAddressFor { - fn contract_address_for(code_hash: &H256, _data: &[u8], _origin: &u64) -> u64 { + fn contract_address_for(_code_hash: &H256, _data: &[u8], origin: &u64) -> u64 { *origin + 1 } } From 7c8d4878bed0596e0851325099ced8ae16579c9d Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Wed, 9 Jan 2019 21:03:11 +0100 Subject: [PATCH 083/108] Doc updates. --- srml/contract/src/exec.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 7896f039edfd7..560703c1f7411 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -44,16 +44,21 @@ pub struct CallReceipt { pub trait Ext { type T: Trait; - /// Returns the storage entry of the executing account by the given key. + /// Returns the storage entry of the executing account by the given `key`. + /// + /// Returns `None` if the `key` wasn't previously set by `set_storage` or + /// was deleted. fn get_storage(&self, key: &[u8]) -> Option>; /// Sets the storage entry by the given key to the specified value. + /// + /// If `value` is `None` then the storage entry is deleted. fn set_storage(&mut self, key: &[u8], value: Option>); /// Instantiate a contract from the given code. /// /// The newly created account will be associated with the `code`. `value` specifies the amount of value - /// transfered from this to the newly created account. + /// transfered from this to the newly created account (also known as endowment). fn instantiate( &mut self, code: &CodeHash, @@ -79,13 +84,16 @@ pub trait Ext { fn address(&self) -> &AccountIdOf; } +/// Loader is a companion of the `Vm` trait. It loads an appropriate abstract +/// executable to be executed by an accompanying `Vm` implementation. pub trait Loader { type Executable; - // TODO: We need to support the case with empty constructor. - // I think we don't want to require every binary to contain a `deploy` function. - // Anyway, we will have to have validation of this. + /// Load the initializer portion of the code specified by the `code_hash`. This + /// executable is called upon instantiation. fn load_init(&self, code_hash: &CodeHash) -> Result; + /// Load the main portion of the code specified by the `code_hash`. This executable + /// is called for each call to a contract. fn load_main(&self, code_hash: &CodeHash) -> Result; } From 25cce895a95e3ddd2f1fab9b8a4104247695cb63 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Thu, 10 Jan 2019 13:41:51 +0100 Subject: [PATCH 084/108] Update srml/contract/src/wasm/mod.rs Co-Authored-By: pepyakin --- srml/contract/src/wasm/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index 00d4dff108455..d3a91bfbf8c4b 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -112,6 +112,8 @@ impl<'a, T: Trait> ::exec::Vm for WasmVm<'a, T> { let memory = sandbox::Memory::new(exec.prefab_module.initial, Some(exec.prefab_module.maximum)) .unwrap_or_else(|_| { + // unlike `.expect`, explicit panic preserves the source location. + // Needed as we can't use `RUST_BACKTRACE` in here. panic!( "exec.prefab_module.initial can't be greater than exec.prefab_module.maximum; thus Memory::new must not fail; From a9fc6ef4cc46272feac6790480f44e57ed96d268 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Thu, 10 Jan 2019 14:03:49 +0100 Subject: [PATCH 085/108] Update srml/contract/src/lib.rs Co-Authored-By: pepyakin --- srml/contract/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 36f2005892d9e..7798fc66f5deb 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -157,7 +157,7 @@ decl_module! { /// The schedule should have a greater version than the stored schedule. fn update_schedule(schedule: Schedule) -> Result { if >::current_schedule().version >= schedule.version { - return Err("Schedule should have a greater version"); + return Err("new schedule must have a greater version than current"); } Self::deposit_event(RawEvent::ScheduleUpdated(schedule.version)); From cad39fe4fea6d1ca461f311cb8348f846d7fa092 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 14:13:25 +0100 Subject: [PATCH 086/108] Add comment --- srml/contract/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index 7798fc66f5deb..a48b33596d7ef 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -166,6 +166,7 @@ decl_module! { Ok(()) } + /// Stores code in the storage. You can instantiate contracts only with stored code. fn put_code( origin, gas_limit: ::Type, From bbbac911261053b18ce3e65209feb1128a87883d Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 16:17:08 +0100 Subject: [PATCH 087/108] Use saturation to signal overflow --- srml/contract/src/exec.rs | 10 +++++----- srml/contract/src/gas.rs | 28 +++++++++++++--------------- srml/contract/src/lib.rs | 4 ++-- srml/contract/src/wasm/code.rs | 11 +++++------ srml/contract/src/wasm/runtime.rs | 14 +++++++------- 5 files changed, 32 insertions(+), 35 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index 560703c1f7411..acfe4d01194d8 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -193,11 +193,11 @@ pub enum ExecFeeToken { impl Token for ExecFeeToken { type Metadata = Config; #[inline] - fn calculate_amount(&self, metadata: &Config) -> Option { - Some(match *self { + fn calculate_amount(&self, metadata: &Config) -> T::Gas { + match *self { ExecFeeToken::Call => metadata.call_base_fee, ExecFeeToken::Instantiate => metadata.instantiate_base_fee, - }) + } } } @@ -400,7 +400,7 @@ impl Token for TransferFeeToken { type Metadata = Config; #[inline] - fn calculate_amount(&self, metadata: &Config) -> Option { + fn calculate_amount(&self, metadata: &Config) -> T::Gas { let balance_fee = match self.kind { TransferFeeKind::ContractInstantiate => metadata.contract_account_instantiate_fee, TransferFeeKind::AccountCreate => metadata.account_create_fee, @@ -410,7 +410,7 @@ impl Token for TransferFeeToken { let amount_in_gas: T::Balance = balance_fee / self.gas_price; let amount_in_gas: T::Gas = >::sa(amount_in_gas); - Some(amount_in_gas) + amount_in_gas } } diff --git a/srml/contract/src/gas.rs b/srml/contract/src/gas.rs index 51e09ff840d98..afec6dfcb7290 100644 --- a/srml/contract/src/gas.rs +++ b/srml/contract/src/gas.rs @@ -62,9 +62,13 @@ pub trait Token: Copy + Clone + TestAuxiliaries { /// Calculate amount of gas that should be taken by this token. /// - /// Returns `None` if the amount can't be calculated e.g. because of overflow. - /// This situation is treated as if out of gas happened. - fn calculate_amount(&self, metadata: &Self::Metadata) -> Option; + /// This function should be really lightweight and must not fail. It is not + /// expected that implementors will query the storage or do any kinds of heavy operations. + /// + /// That said, implementors of this function still can run into overflows + /// while calculating the amount. In this case it is ok to use saturating operations + /// since on overflow they will return `max_value` which should consume all gas. + fn calculate_amount(&self, metadata: &Self::Metadata) -> T::Gas; } /// A wrapper around a type-erased trait object of what used to be a `Token`. @@ -97,8 +101,7 @@ impl GasMeter { /// Account for used gas. /// - /// Amount is calculated by the given `token`. If `token::calculate_amount` returns - /// `None` then all available gas is consumed and `OutOfGas` is returned. + /// Amount is calculated by the given `token`. /// /// Returns `OutOfGas` if there is not enough gas or addition of the specified /// amount of gas has lead to overflow. On success returns `Proceed`. @@ -121,11 +124,7 @@ impl GasMeter { self.tokens.push(erased_tok); } - let amount = match token.calculate_amount(metadata) { - Some(amount_in_gas) => amount_in_gas, - None => self.gas_left, // Consume everything - }; - + let amount = token.calculate_amount(metadata); let new_value = match self.gas_left.checked_sub(&amount) { None => None, Some(val) if val.is_zero() => None, @@ -296,9 +295,7 @@ mod tests { struct UnitToken; impl Token for UnitToken { type Metadata = (); - fn calculate_amount(&self, _metadata: &()) -> Option { - Some(1) - } + fn calculate_amount(&self, _metadata: &()) -> u64 { 1 } } struct DoubleTokenMetadata { @@ -311,8 +308,9 @@ mod tests { impl Token for DoubleToken { type Metadata = DoubleTokenMetadata; - fn calculate_amount(&self, metadata: &DoubleTokenMetadata) -> Option { - Some(self.0 * metadata.multiplier) + fn calculate_amount(&self, metadata: &DoubleTokenMetadata) -> u64 { + // Probably you want to use saturating mul in producation code. + self.0 * metadata.multiplier } } diff --git a/srml/contract/src/lib.rs b/srml/contract/src/lib.rs index a48b33596d7ef..9f44de0d17765 100644 --- a/srml/contract/src/lib.rs +++ b/srml/contract/src/lib.rs @@ -101,7 +101,7 @@ use double_map::StorageDoubleMap; use rstd::prelude::*; use rstd::marker::PhantomData; use codec::{Codec, HasCompact}; -use runtime_primitives::traits::{Hash, As, SimpleArithmetic}; +use runtime_primitives::traits::{Hash, As, SimpleArithmetic, Bounded}; use runtime_support::dispatch::Result; use runtime_support::{Parameter, StorageMap, StorageValue}; use system::ensure_signed; @@ -113,7 +113,7 @@ pub trait Trait: balances::Trait { type DetermineContractAddress: ContractAddressFor, Self::AccountId>; // As is needed for wasm-utils - type Gas: Parameter + Default + Codec + SimpleArithmetic + Copy + As + As + As; + type Gas: Parameter + Default + Codec + SimpleArithmetic + Bounded + Copy + As + As + As; /// The overarching event type. type Event: From> + Into<::Event>; diff --git a/srml/contract/src/wasm/code.rs b/srml/contract/src/wasm/code.rs index 8d08de4a47a8b..45a5a0d545fe2 100644 --- a/srml/contract/src/wasm/code.rs +++ b/srml/contract/src/wasm/code.rs @@ -16,7 +16,7 @@ use gas::{GasMeter, Token}; use rstd::prelude::*; -use runtime_primitives::traits::{As, CheckedMul, Hash}; +use runtime_primitives::traits::{As, CheckedMul, Hash, Bounded}; use runtime_support::StorageMap; use wasm::{prepare, runtime::Env, PrefabWasmModule}; use {CodeHash, CodeStorage, PristineCode, Schedule, Trait}; @@ -31,13 +31,12 @@ pub struct PutCodeToken(u64); impl Token for PutCodeToken { type Metadata = Schedule; - fn calculate_amount(&self, metadata: &Schedule) -> Option { + fn calculate_amount(&self, metadata: &Schedule) -> T::Gas { let code_len_in_gas = >::sa(self.0); - let cost = metadata + metadata .put_code_per_byte_cost - .checked_mul(&code_len_in_gas)?; - - Some(cost) + .checked_mul(&code_len_in_gas) + .unwrap_or_else(|| Bounded::max_value()) } } diff --git a/srml/contract/src/wasm/runtime.rs b/srml/contract/src/wasm/runtime.rs index fa9dbb5657b2e..33154fc429e57 100644 --- a/srml/contract/src/wasm/runtime.rs +++ b/srml/contract/src/wasm/runtime.rs @@ -22,7 +22,7 @@ use rstd::prelude::*; use rstd::mem; use codec::{Decode, Encode}; use gas::{GasMeter, Token, GasMeterResult}; -use runtime_primitives::traits::{As, CheckedMul}; +use runtime_primitives::traits::{As, CheckedMul, Bounded}; use sandbox; use system; use {Trait, CodeHash}; @@ -112,22 +112,22 @@ pub enum RuntimeToken { impl Token for RuntimeToken { type Metadata = Schedule; - fn calculate_amount(&self, metadata: &Schedule) -> Option { + fn calculate_amount(&self, metadata: &Schedule) -> T::Gas { use self::RuntimeToken::*; let value = match *self { - Explicit(amount) => >::sa(amount), + Explicit(amount) => Some(>::sa(amount)), ReadMemory(byte_count) => metadata .sandbox_data_read_cost - .checked_mul(&>::sa(byte_count))?, + .checked_mul(&>::sa(byte_count)), WriteMemory(byte_count) => metadata .sandbox_data_write_cost - .checked_mul(&>::sa(byte_count))?, + .checked_mul(&>::sa(byte_count)), ReturnData(byte_count) => metadata .return_data_per_byte_cost - .checked_mul(&>::sa(byte_count))?, + .checked_mul(&>::sa(byte_count)), }; - Some(value) + value.unwrap_or_else(|| Bounded::max_value()) } } From 09e4a9964ddd7033d33e9f41a1ace239dd6ae705 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 16:52:33 +0100 Subject: [PATCH 088/108] Add prepare_test! macro --- srml/contract/src/wasm/prepare.rs | 98 +++++++++++++++++++------------ 1 file changed, 61 insertions(+), 37 deletions(-) diff --git a/srml/contract/src/wasm/prepare.rs b/srml/contract/src/wasm/prepare.rs index 2eec8509129d6..479fb22f191c9 100644 --- a/srml/contract/src/wasm/prepare.rs +++ b/srml/contract/src/wasm/prepare.rs @@ -241,59 +241,83 @@ mod tests { prepare_contract::(wasm.as_ref(), &schedule) } - #[test] - fn internal_memory_declaration() { - let r = parse_and_prepare_wat(r#"(module (memory 1 1))"#); - assert_matches!(r, Err("module declares internal memory")); + macro_rules! prepare_test { + ($name:ident, $wat:expr, $($expected:tt)*) => { + #[test] + fn $name() { + let wasm = wabt::Wat2Wasm::new().validate(false).convert($wat).unwrap(); + let schedule = Schedule::::default(); + let r = prepare_contract::(wasm.as_ref(), &schedule); + assert_matches!(r, $($expected)*); + } + }; } - #[test] - fn memory() { - // This test assumes that maximum page number is configured to a certain number. - assert_eq!(Schedule::::default().max_memory_pages, 16); + prepare_test!(internal_memory_declaration, + r#"(module (memory 1 1))"#, + Err("module declares internal memory") + ); + + mod memories { + use super::*; + + // Tests below assumes that maximum page number is configured to a certain number. + #[test] + fn assume_memory_size() { + assert_eq!(Schedule::::default().max_memory_pages, 16); + } - let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 1)))"#); - assert_matches!(r, Ok(_)); + prepare_test!(it_works, + r#"(module (import "env" "memory" (memory 1 1)))"#, + Ok(_) + ); - // No memory import - let r = parse_and_prepare_wat(r#"(module)"#); - assert_matches!(r, Ok(_)); + prepare_test!(no_memory_import, + r#"(module)"#, + Ok(_) + ); - // initial exceed maximum - let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 16 1)))"#); - assert_matches!( - r, + prepare_test!(initial_exceeds_maximum, + r#"(module (import "env" "memory" (memory 16 1)))"#, Err("Requested initial number of pages should not exceed the requested maximum") ); - // no maximum - let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1)))"#); - assert_matches!(r, Err("Maximum number of pages should be always declared.")); + prepare_test!(no_maximum, + r#"(module (import "env" "memory" (memory 1)))"#, + Err("Maximum number of pages should be always declared.") + ); - // requested maximum exceed configured maximum - let r = parse_and_prepare_wat(r#"(module (import "env" "memory" (memory 1 17)))"#); - assert_matches!( - r, + prepare_test!(requested_maximum_exceeds_configured_maximum, + r#"(module (import "env" "memory" (memory 1 17)))"#, Err("Maximum number of pages should not exceed the configured maximum.") ); } - #[test] - fn imports() { - // nothing can be imported from non-"env" module for now. - let r = - parse_and_prepare_wat(r#"(module (import "another_module" "memory" (memory 1 1)))"#); - assert_matches!(r, Err("module has imports from a non-'env' namespace")); + mod imports { + use super::*; - let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i32))))"#); - assert_matches!(r, Ok(_)); + prepare_test!(can_import_legit_function, + r#"(module (import "env" "gas" (func (param i32))))"#, + Ok(_) + ); + + // nothing can be imported from non-"env" module for now. + prepare_test!(non_env_import, + r#"(module (import "another_module" "memory" (memory 1 1)))"#, + Err("module has imports from a non-'env' namespace") + ); // wrong signature - let r = parse_and_prepare_wat(r#"(module (import "env" "gas" (func (param i64))))"#); - assert_matches!(r, Err("module imports a non-existent function")); + prepare_test!(wrong_signature, + r#"(module (import "env" "gas" (func (param i64))))"#, + Err("module imports a non-existent function") + ); - // unknown function name - let r = parse_and_prepare_wat(r#"(module (import "env" "unknown_func" (func)))"#); - assert_matches!(r, Err("module imports a non-existent function")); + prepare_test!(unknown_func_name, + r#"(module (import "env" "unknown_func" (func)))"#, + Err("module imports a non-existent function") + ); } + + // TODO: call & deploy } From 0087a6379292663763218041c184f3da1dc83ac3 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 16:59:43 +0100 Subject: [PATCH 089/108] Require deploy function. --- srml/contract/src/wasm/mod.rs | 16 ++- srml/contract/src/wasm/prepare.rs | 207 ++++++++++++++++++++++++++---- 2 files changed, 198 insertions(+), 25 deletions(-) diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index d3a91bfbf8c4b..f75af72d7e8f7 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -308,6 +308,8 @@ mod tests { ) ) ) + (func (export "deploy")) + ;; Destination AccountId to transfer the funds. ;; Represented by u64 (8 bytes long) in little endian. (data (i32.const 4) "\09\00\00\00\00\00\00\00") @@ -368,6 +370,8 @@ mod tests { ) ) ) + (func (export "deploy")) + ;; Amount of value to transfer. ;; Represented by u64 (8 bytes long) in little endian. (data (i32.const 4) "\03\00\00\00\00\00\00\00") @@ -427,6 +431,8 @@ mod tests { ) ) ) + (func (export "deploy")) + ;; Destination AccountId to transfer the funds. ;; Represented by u64 (8 bytes long) in little endian. (data (i32.const 4) "\09\00\00\00\00\00\00\00") @@ -520,6 +526,8 @@ mod tests { (unreachable) ) + (func (export "deploy")) + (data (i32.const 4) "\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11\11") ) "#; @@ -591,6 +599,8 @@ mod tests { ) ) ) + + (func (export "deploy")) ) "#; @@ -654,6 +664,8 @@ mod tests { ) ) ) + + (func (export "deploy")) ) "#; @@ -684,8 +696,8 @@ mod tests { (unreachable) ) - (func (export "call") - ) + (func (export "call")) + (func (export "deploy")) (data (i32.const 8) "\01\02\03\04") ) diff --git a/srml/contract/src/wasm/prepare.rs b/srml/contract/src/wasm/prepare.rs index 479fb22f191c9..203bcdac0381a 100644 --- a/srml/contract/src/wasm/prepare.rs +++ b/srml/contract/src/wasm/prepare.rs @@ -18,7 +18,7 @@ //! wasm module before execution. It also extracts some essential information //! from a module. -use parity_wasm::elements::{self, External, MemoryType, Type}; +use parity_wasm::elements::{self, Internal, External, MemoryType, Type}; use pwasm_utils; use pwasm_utils::rules; use rstd::prelude::*; @@ -102,6 +102,91 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { Ok(()) } + /// Check that the module has required exported functions. For now + /// these are just entrypoints: + /// + /// - 'call' + /// - 'deploy' + fn scan_exports(&self) -> Result<(), &'static str> { + let mut deploy_found = false; + let mut call_found = false; + + let module = self + .module + .as_ref() + .expect("On entry to the function `module` can't be `None`; qed"); + + let types = module.type_section().map(|ts| ts.types()).unwrap_or(&[]); + let export_entries = module + .export_section() + .map(|is| is.entries()) + .unwrap_or(&[]); + let func_entries = module + .function_section() + .map(|fs| fs.entries()) + .unwrap_or(&[]); + + // Function index space consists of imported function following by + // declared functions. + let fn_space_offset = module + .import_section() + .map(|is| is.entries()) + .unwrap_or(&[]) + .iter() + .filter(|entry| { + match *entry.external() { + External::Function(_) => true, + _ => false, + } + }) + .count(); + + for export in export_entries { + match export.field() { + "call" => call_found = true, + "deploy" => deploy_found = true, + _ => continue, + } + + // Then check the export kind. "call" and "deploy" are + // functions. + let fn_idx = match export.internal() { + Internal::Function(ref fn_idx) => *fn_idx, + _ => return Err("expected a function"), + }; + + // convert index from function index space to declared index space. + let fn_idx = match fn_idx.checked_sub(fn_space_offset as u32) { + Some(fn_idx) => fn_idx, + None => { + // Underflow here means fn_idx points to imported function which we don't allow! + return Err("entry point points to an imported function"); + } + }; + + // Then check the signature. + // Both "call" and "deploy" has a () -> () function type. + let func_ty_idx = func_entries.get(fn_idx as usize) + .ok_or_else(|| "export refers to non-existent function")? + .type_ref(); + let Type::Function(ref func_ty) = types + .get(func_ty_idx as usize) + .ok_or_else(|| "function has a non-existent type")?; + if !(func_ty.params().is_empty() && func_ty.return_type().is_none()) { + return Err("entry point has wrong signature"); + } + } + + if !deploy_found { + return Err("deploy function isn't exported"); + } + if !call_found { + return Err("call function isn't exported"); + } + + Ok(()) + } + /// Scan an import section if any. /// /// This accomplishes two tasks: @@ -175,6 +260,7 @@ pub fn prepare_contract( schedule: &Schedule, ) -> Result { let mut contract_module = ContractModule::new(original_code, schedule)?; + contract_module.scan_exports()?; contract_module.ensure_no_internal_memory()?; contract_module.inject_gas_metering()?; contract_module.inject_stack_height_metering()?; @@ -235,12 +321,6 @@ mod tests { } } - fn parse_and_prepare_wat(wat: &str) -> Result { - let wasm = wabt::Wat2Wasm::new().validate(false).convert(wat).unwrap(); - let schedule = Schedule::::default(); - prepare_contract::(wasm.as_ref(), &schedule) - } - macro_rules! prepare_test { ($name:ident, $wat:expr, $($expected:tt)*) => { #[test] @@ -253,11 +333,6 @@ mod tests { }; } - prepare_test!(internal_memory_declaration, - r#"(module (memory 1 1))"#, - Err("module declares internal memory") - ); - mod memories { use super::*; @@ -267,28 +342,74 @@ mod tests { assert_eq!(Schedule::::default().max_memory_pages, 16); } - prepare_test!(it_works, - r#"(module (import "env" "memory" (memory 1 1)))"#, + prepare_test!(memory_with_one_page, + r#" + (module + (import "env" "memory" (memory 1 1)) + + (func (export "call")) + (func (export "deploy")) + ) + "#, Ok(_) ); + prepare_test!(internal_memory_declaration, + r#" + (module + (memory 1 1) + + (func (export "call")) + (func (export "deploy")) + ) + "#, + Err("module declares internal memory") + ); + prepare_test!(no_memory_import, - r#"(module)"#, + r#" + (module + ;; no memory imported + + (func (export "call")) + (func (export "deploy")) + )"#, Ok(_) ); prepare_test!(initial_exceeds_maximum, - r#"(module (import "env" "memory" (memory 16 1)))"#, + r#" + (module + (import "env" "memory" (memory 16 1)) + + (func (export "call")) + (func (export "deploy")) + ) + "#, Err("Requested initial number of pages should not exceed the requested maximum") ); prepare_test!(no_maximum, - r#"(module (import "env" "memory" (memory 1)))"#, + r#" + (module + (import "env" "memory" (memory 1)) + + (func (export "call")) + (func (export "deploy")) + ) + "#, Err("Maximum number of pages should be always declared.") ); prepare_test!(requested_maximum_exceeds_configured_maximum, - r#"(module (import "env" "memory" (memory 1 17)))"#, + r#" + (module + (import "env" "memory" (memory 1 17)) + + (func (export "call")) + (func (export "deploy")) + ) + "#, Err("Maximum number of pages should not exceed the configured maximum.") ); } @@ -297,27 +418,67 @@ mod tests { use super::*; prepare_test!(can_import_legit_function, - r#"(module (import "env" "gas" (func (param i32))))"#, + r#" + (module + (import "env" "gas" (func (param i32))) + + (func (export "call")) + (func (export "deploy")) + ) + "#, Ok(_) ); // nothing can be imported from non-"env" module for now. prepare_test!(non_env_import, - r#"(module (import "another_module" "memory" (memory 1 1)))"#, + r#" + (module + (import "another_module" "memory" (memory 1 1)) + + (func (export "call")) + (func (export "deploy")) + ) + "#, Err("module has imports from a non-'env' namespace") ); // wrong signature prepare_test!(wrong_signature, - r#"(module (import "env" "gas" (func (param i64))))"#, + r#" + (module + (import "env" "gas" (func (param i64))) + + (func (export "call")) + (func (export "deploy")) + ) + "#, Err("module imports a non-existent function") ); prepare_test!(unknown_func_name, - r#"(module (import "env" "unknown_func" (func)))"#, + r#" + (module + (import "env" "unknown_func" (func)) + + (func (export "call")) + (func (export "deploy")) + ) + "#, Err("module imports a non-existent function") ); } - // TODO: call & deploy + mod entrypoints { + use super::*; + + prepare_test!(it_works, + r#" + (module + (func (export "call")) + (func (export "deploy")) + ) + "#, + Ok(_) + ); + } } From 260665d0bfc16dc55575c3b890d5fd3827c342df Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 17:14:04 +0100 Subject: [PATCH 090/108] Add entry point tests --- srml/contract/src/wasm/prepare.rs | 63 ++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/srml/contract/src/wasm/prepare.rs b/srml/contract/src/wasm/prepare.rs index 203bcdac0381a..bedc6fe70e8c8 100644 --- a/srml/contract/src/wasm/prepare.rs +++ b/srml/contract/src/wasm/prepare.rs @@ -313,6 +313,7 @@ mod tests { use super::*; use std::fmt; use tests::Test; + use exec::Ext; use wabt; impl fmt::Debug for PrefabWasmModule { @@ -321,13 +322,20 @@ mod tests { } } + // Define test environment for tests. We need ImportSatisfyCheck + // implementation from it. So actual implementations doesn't matter. + define_env!(TestEnv, , + panic(_ctx) => { unreachable!(); }, + gas(_ctx, _amount: u32) => { unreachable!(); }, + ); + macro_rules! prepare_test { ($name:ident, $wat:expr, $($expected:tt)*) => { #[test] fn $name() { let wasm = wabt::Wat2Wasm::new().validate(false).convert($wat).unwrap(); let schedule = Schedule::::default(); - let r = prepare_contract::(wasm.as_ref(), &schedule); + let r = prepare_contract::(wasm.as_ref(), &schedule); assert_matches!(r, $($expected)*); } }; @@ -480,5 +488,58 @@ mod tests { "#, Ok(_) ); + + prepare_test!(omit_deploy, + r#" + (module + (func (export "call")) + ) + "#, + Err("deploy function isn't exported") + ); + + prepare_test!(omit_call, + r#" + (module + (func (export "deploy")) + ) + "#, + Err("call function isn't exported") + ); + + // Try to use imported function as an entry point. + prepare_test!(try_sneak_export_as_entrypoint, + r#" + (module + (import "env" "panic" (func)) + + (func (export "deploy")) + + (export "call" (func 0)) + ) + "#, + Err("entry point points to an imported function") + ); + + // Try to use imported function as an entry point. + prepare_test!(try_sneak_export_as_global, + r#" + (module + (func (export "deploy")) + (global (export "call") i32 (i32.const 0)) + ) + "#, + Err("expected a function") + ); + + prepare_test!(wrong_signature, + r#" + (module + (func (export "deploy")) + (func (export "call") (param i32)) + ) + "#, + Err("entry point has wrong signature") + ); } } From 59a2a760c4da878ed3a8417e8ec301337026eb7c Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 17:16:20 +0100 Subject: [PATCH 091/108] Add comment. --- srml/contract/src/wasm/prepare.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/srml/contract/src/wasm/prepare.rs b/srml/contract/src/wasm/prepare.rs index bedc6fe70e8c8..622e48e686307 100644 --- a/srml/contract/src/wasm/prepare.rs +++ b/srml/contract/src/wasm/prepare.rs @@ -127,7 +127,8 @@ impl<'a, Gas: 'a + As + Clone> ContractModule<'a, Gas> { .unwrap_or(&[]); // Function index space consists of imported function following by - // declared functions. + // declared functions. Calculate the total number of imported functions so + // we can use it to convert indexes from function space to declared function space. let fn_space_offset = module .import_section() .map(|is| is.entries()) From b666bd6e77dd23058d4b2d4ec4d9f9405c281d0e Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 17:28:59 +0100 Subject: [PATCH 092/108] =?UTF-8?q?Rename=20code=20=E2=86=92=20code=5Fcach?= =?UTF-8?q?e=20to=20better=20describe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- srml/contract/src/wasm/{code.rs => code_cache.rs} | 11 +++++++++++ srml/contract/src/wasm/mod.rs | 9 +++++---- 2 files changed, 16 insertions(+), 4 deletions(-) rename srml/contract/src/wasm/{code.rs => code_cache.rs} (81%) diff --git a/srml/contract/src/wasm/code.rs b/srml/contract/src/wasm/code_cache.rs similarity index 81% rename from srml/contract/src/wasm/code.rs rename to srml/contract/src/wasm/code_cache.rs index 45a5a0d545fe2..086a4407d7ea0 100644 --- a/srml/contract/src/wasm/code.rs +++ b/srml/contract/src/wasm/code_cache.rs @@ -14,6 +14,17 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +//! A module that implements instrumented code cache. +//! +//! - In order to run contract code we need to instrument it with gas metering. +//! To do that we need provide the schedule which will supply exact gas costs values. +//! We cache this code in the storage saving the schedule version. +//! - Before running contract code we check if the cached code has the schedule version that is equal to the current saved schedule. +//! If it is equal then run the code, if it isn't reinstrument with the current schedule. +//! - When we update the schedule we want it to have stricly greater version than the current saved one: +//! this guarantees that every instrumented contract code in cache cannot have the version equal to the current one. +//! Thus, before executing a contract it should be reinstrument with new schedule. + use gas::{GasMeter, Token}; use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul, Hash, Bounded}; diff --git a/srml/contract/src/wasm/mod.rs b/srml/contract/src/wasm/mod.rs index f75af72d7e8f7..fbbb2c96b9683 100644 --- a/srml/contract/src/wasm/mod.rs +++ b/srml/contract/src/wasm/mod.rs @@ -27,13 +27,14 @@ use {CodeHash, Schedule, Trait}; #[macro_use] mod env_def; -mod code; +mod code_cache; mod prepare; mod runtime; use self::runtime::{to_execution_result, Runtime}; +use self::code_cache::load as load_code; -pub use self::code::save as save_code; +pub use self::code_cache::save as save_code; /// A prepared wasm module ready for execution. #[derive(Clone, Encode, Decode)] @@ -73,14 +74,14 @@ impl<'a, T: Trait> ::exec::Loader for WasmLoader<'a, T> { type Executable = WasmExecutable; fn load_init(&self, code_hash: &CodeHash) -> Result { - let prefab_module = code::load::(code_hash, self.schedule)?; + let prefab_module = load_code::(code_hash, self.schedule)?; Ok(WasmExecutable { entrypoint_name: b"deploy", prefab_module, }) } fn load_main(&self, code_hash: &CodeHash) -> Result { - let prefab_module = code::load::(code_hash, self.schedule)?; + let prefab_module = load_code::(code_hash, self.schedule)?; Ok(WasmExecutable { entrypoint_name: b"call", prefab_module, From 9b13600d0969998c34bbf9103015ef5da14ba601 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 17:32:18 +0100 Subject: [PATCH 093/108] Get rid of weird match! --- srml/contract/src/exec.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/srml/contract/src/exec.rs b/srml/contract/src/exec.rs index acfe4d01194d8..36a55350b9a5f 100644 --- a/srml/contract/src/exec.rs +++ b/srml/contract/src/exec.rs @@ -425,8 +425,8 @@ enum TransferCause { /// All balance changes are performed in the `overlay`. /// /// This function also handles charging the fee. The fee depends -/// on whether the transfer happening because of contract instantiation, -/// transfering endowment, or because of a transfer via `call`. This +/// on whether the transfer happening because of contract instantiation +/// (transfering endowment) or because of a transfer via `call`. This /// is specified using the `cause` parameter. /// /// NOTE: that the fee is denominated in `T::Balance` units, but @@ -445,6 +445,7 @@ fn transfer<'a, T: Trait, V: Vm, L: Loader>( ctx: &mut ExecutionContext<'a, T, V, L>, ) -> Result<(), &'static str> { use self::TransferCause::*; + use self::TransferFeeKind::*; let to_balance = ctx.overlay.get_balance(dest); @@ -456,15 +457,18 @@ fn transfer<'a, T: Trait, V: Vm, L: Loader>( let would_create = to_balance.is_zero(); let token = { - let kind: TransferFeeKind = match (cause, would_create) { + let kind: TransferFeeKind = match cause { // If this function is called from `Instantiate` routine, then we always // charge contract account creation fee. - (Instantiate, _) => TransferFeeKind::ContractInstantiate, + Instantiate => ContractInstantiate, // Otherwise the fee depends on whether we create a new account or transfer // to an existing one. - (Call, true) => TransferFeeKind::AccountCreate, - (Call, false) => TransferFeeKind::Transfer, + Call => if would_create { + TransferFeeKind::AccountCreate + } else { + TransferFeeKind::Transfer + }, }; TransferFeeToken { kind, From c351d9e8a10b66026066a7c7cc18a0207e864796 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 10 Jan 2019 17:36:04 +0100 Subject: [PATCH 094/108] Recompile binaries --- .../release/node_runtime.compact.wasm | Bin 810138 -> 812812 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 0b2c7b254c2353fe8220ef3c5699b3dab1542380..0f9b20bc3f4fc2a56d70aeeeb5424ebd8bc9f3b8 100644 GIT binary patch delta 213875 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 z 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 z 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 V4L+KMCBy~J568bUxGz)l{~zHNT^axY delta 214937 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