From dfe38979c3089b96887f5a161f51e6c2f8836615 Mon Sep 17 00:00:00 2001 From: Gav Date: Wed, 31 Jan 2018 08:16:22 +0100 Subject: [PATCH 01/13] Convenient block creation logic --- Cargo.lock | 1 + executor/Cargo.toml | 1 + executor/src/lib.rs | 4 + executor/src/native_executor.rs | 97 +++++++++++++++++- executor/src/wasm_executor.rs | 2 +- primitives/src/ed25519.rs | 5 + wasm-runtime/std/src/lib.rs | 4 +- .../release/runtime_polkadot.compact.wasm | Bin 67405 -> 66916 bytes .../release/runtime_polkadot.wasm | Bin 67454 -> 66965 bytes .../release/runtime_test.compact.wasm | Bin 14114 -> 14104 bytes .../release/runtime_test.wasm | Bin 14239 -> 14229 bytes 11 files changed, 109 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c139749441f71..93f09afe025b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -986,6 +986,7 @@ dependencies = [ "assert_matches 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "native-runtime 0.1.0", "parity-wasm 0.15.4 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", diff --git a/executor/Cargo.toml b/executor/Cargo.toml index 41fdef97057f6..18e7aa61bc2eb 100644 --- a/executor/Cargo.toml +++ b/executor/Cargo.toml @@ -16,6 +16,7 @@ rustc-hex = "1.0.0" native-runtime = { path = "../native-runtime", version = "0.1" } runtime-std = { path = "../native-runtime/std", version = "0.1" } triehash = "0.1.0" +hex-literal = "0.1.0" [dev-dependencies] assert_matches = "1.1" diff --git a/executor/src/lib.rs b/executor/src/lib.rs index e4ed7f95b0e8a..f82518f03b38f 100644 --- a/executor/src/lib.rs +++ b/executor/src/lib.rs @@ -38,6 +38,10 @@ extern crate native_runtime; extern crate runtime_std; extern crate triehash; +#[cfg(test)] +#[macro_use] +extern crate hex_literal; + #[macro_use] extern crate error_chain; diff --git a/executor/src/native_executor.rs b/executor/src/native_executor.rs index 6cf7ac6c313c6..afa72e7aaaff0 100644 --- a/executor/src/native_executor.rs +++ b/executor/src/native_executor.rs @@ -42,8 +42,9 @@ impl CodeExecutor for NativeExecutor { mod tests { use super::*; use runtime_std::TestExternalities; - use native_runtime::codec::KeyedVec; - use native_runtime::support::{one, two, StaticHexInto}; + use native_runtime::codec::{KeyedVec, Joiner, Slicable}; + use native_runtime::support::{one, two, StaticHexInto, Hashable}; + use native_runtime::primitives::*; use native_runtime::runtime::staking::balance; use primitives::twox_128; @@ -108,4 +109,96 @@ mod tests { assert_eq!(balance(&two), 69); }); } + + fn new_test_ext() -> TestExternalities { + let one = one(); + let two = two(); + let three = [3u8; 32]; + + TestExternalities { storage: map![ + twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => [69u8; 32].to_vec(), + twox_128(b"gov:apr").to_vec() => vec![].join(&667u32), + twox_128(b"ses:len").to_vec() => vec![].join(&2u64), + twox_128(b"ses:val:len").to_vec() => vec![].join(&3u32), + twox_128(&0u32.to_keyed_vec(b"ses:val:")).to_vec() => one.to_vec(), + twox_128(&1u32.to_keyed_vec(b"ses:val:")).to_vec() => two.to_vec(), + twox_128(&2u32.to_keyed_vec(b"ses:val:")).to_vec() => three.to_vec(), + twox_128(b"sta:wil:len").to_vec() => vec![].join(&3u32), + twox_128(&0u32.to_keyed_vec(b"sta:wil:")).to_vec() => one.to_vec(), + twox_128(&1u32.to_keyed_vec(b"sta:wil:")).to_vec() => two.to_vec(), + twox_128(&2u32.to_keyed_vec(b"sta:wil:")).to_vec() => three.to_vec(), + twox_128(b"sta:spe").to_vec() => vec![].join(&2u64), + twox_128(b"sta:vac").to_vec() => vec![].join(&3u64), + twox_128(b"sta:era").to_vec() => vec![].join(&0u64), + twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] + ], } + } + + use primitives::ed25519::Pair; + fn secret_for(who: &AccountID) -> Option { + match who { + x if *x == one() => Some(Pair::from_seed(b"12345678901234567890123456789012")), + x if *x == two() => Some("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60".into()), + _ => None, + } + } + + fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { + use triehash::ordered_trie_root; + let one = one(); + let two = two(); + + let transactions = txs.into_iter().map(|transaction| { + let signature = secret_for(&transaction.signed).unwrap() + .sign(&transaction.to_vec()) + .inner(); + UncheckedTransaction { transaction, signature } + }).collect::>(); + + let transaction_root = ordered_trie_root(transactions.iter().map(Slicable::to_vec)).0; + + let header = Header { + parent_hash, + number, + state_root, + transaction_root, + digest: Digest { logs: vec![], }, + }; + let hash = header.blake2_256(); + + (Block { header, transactions }.to_vec(), hash) + } + + fn block1() -> Vec { + construct_block(1, [69u8; 32], hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db"), vec![Transaction { + signed: one(), + nonce: 0, + function: Function::StakingTransfer, + input_data: vec![].join(&two()).join(&69u64), + }]).0 + } + + #[test] + fn full_native_block_import_works() { + let mut t = new_test_ext(); + + NativeExecutor.call(&mut t, COMPACT_CODE, "execute_block", &CallData(block1())).unwrap(); + + runtime_std::with_externalities(&mut t, || { + assert_eq!(balance(&one()), 42); + assert_eq!(balance(&two()), 69); + }); + } + + #[test] + fn full_wasm_block_import_works() { + let mut t = new_test_ext(); + + WasmExecutor.call(&mut t, COMPACT_CODE, "execute_block", &CallData(block1())).unwrap(); + + runtime_std::with_externalities(&mut t, || { + assert_eq!(balance(&one()), 42); + assert_eq!(balance(&two()), 69); + }); + } } diff --git a/executor/src/wasm_executor.rs b/executor/src/wasm_executor.rs index e1e4f0b6d9273..ff1b35250e20c 100644 --- a/executor/src/wasm_executor.rs +++ b/executor/src/wasm_executor.rs @@ -169,7 +169,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, let r = this.ext.storage_root(); this.memory.set(result, &r[..]).map_err(|_| DummyUserError)?; }, - ext_enumerated_trie_root(values_data: *const u8, values_len: u32, lens_data: *const u32, lens_len: u32, result: *mut u8) => { + ext_enumerated_trie_root(values_data: *const u8, lens_data: *const u32, lens_len: u32, result: *mut u8) => { let values = (0..lens_len) .map(|i| this.memory.read_primitive(lens_data + i * 4)) .collect::<::std::result::Result, DummyUserError>>()? diff --git a/primitives/src/ed25519.rs b/primitives/src/ed25519.rs index b28e0bde6e2cc..b44d59c0b3206 100644 --- a/primitives/src/ed25519.rs +++ b/primitives/src/ed25519.rs @@ -55,6 +55,11 @@ impl Signature { r.copy_from_slice(data); Signature(r) } + + /// Get the inner part. + pub fn inner(self) -> [u8; 64] { + self.0 + } } impl AsRef<[u8; 64]> for Signature { diff --git a/wasm-runtime/std/src/lib.rs b/wasm-runtime/std/src/lib.rs index 3feb8c5544644..7bf583af7d4ee 100644 --- a/wasm-runtime/std/src/lib.rs +++ b/wasm-runtime/std/src/lib.rs @@ -43,7 +43,7 @@ extern "C" { fn ext_get_allocated_storage(key_data: *const u8, key_len: u32, written_out: *mut u32) -> *mut u8; fn ext_get_storage_into(key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32, value_offset: u32) -> u32; fn ext_storage_root(result: *mut u8); - fn ext_enumerated_trie_root(values_data: *const u8, values_len: u32, lens_data: *const u32, lens_len: u32, result: *mut u8); + fn ext_enumerated_trie_root(values_data: *const u8, lens_data: *const u32, lens_len: u32, result: *mut u8); fn ext_chain_id() -> u64; fn ext_blake2_256(data: *const u8, len: u32, out: *mut u8); fn ext_twox_128(data: *const u8, len: u32, out: *mut u8); @@ -90,7 +90,7 @@ pub fn enumerated_trie_root(values: &[&[u8]]) -> [u8; 32] { let mut result: [u8; 32] = Default::default(); unsafe { ext_enumerated_trie_root( - values.as_ptr(), values.len() as u32, + values.as_ptr(), lens.as_ptr(), lens.len() as u32, result.as_mut_ptr() ); diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 36fe893442daba09d8a56b0e97829c475e9426de..112a5c0223c49219fec1b962d9a9aacbddd90d17 100644 GIT binary patch delta 17575 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 N>dezmyXs@v{|~QYWb^<4 delta 18097 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 delta 18046 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 AqW}N^ diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index 3905e9d9113959f2da7e70433a3943645341db65..fde5fdad98d95d6b27bd4f30dbaa0ab961481346 100644 GIT binary patch delta 115 zcmZ3KHzSXmA+b1@k%57M(UWH)w~Q!DJrFP?FoH2-eF9@0Lju!8m+y=$lWiC^OQQ F0RXB<8bJU6 delta 126 zcmbP{wgr&ZIqRn?k&dDZ> znsS^BY^;nRz`@DL%EZCS!NJYM0|Q)>s~LYWe%V~c)Tqq(Zu1Y-$Bc~JlW(cp07-ET MYew$P!5T;T07Y0H8UO$Q diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm index 3a909f06b3487c624a82991ec51b467cfa9996f9..3011f185a3443eb2d284bc066905bc28c7b5e59d 100644 GIT binary patch delta 121 zcmbQAKQ*75A+b1@k%57M(UWH)w~Q!DJrFP?FoH2-eF9@0Lju!A7i~sHmdOQ-nu;ty zr3`GWj3B_l!pO?R!OFqG#l#H*oSSzs$}=)f-h7K`kuu|(&9!Qe87C)cSTk}?o(Cc~ J-_khB2LRRt8d?AV delta 131 zcmbQ5KR=(FA+b1@k%57MF_3p6w~Q=nJqR!)FoH2-eF9@0Ljn^>gr&ZIqm4ErBj@A{ zMomRdpcV!;Rz?uu;ACWF;$Y?A;AY~10j|xP808rmr*6K)v`Crp-R4rY$Bc~JlfyM^ RfaDYnYew$P7c`FY0RU5~9Wwv` From b78722d2478cd7fca6899cd86aa54c1c22759835 Mon Sep 17 00:00:00 2001 From: Gav Date: Wed, 31 Jan 2018 12:33:40 +0000 Subject: [PATCH 02/13] Test multiple blocks/txs per block. Better debug tracing. --- executor/src/native_executor.rs | 69 +++++++++++++++--- executor/src/wasm_executor.rs | 30 +++++--- wasm-runtime/polkadot/src/codec/slicable.rs | 5 +- wasm-runtime/polkadot/src/lib.rs | 13 +++- wasm-runtime/polkadot/src/runtime/staking.rs | 1 + wasm-runtime/polkadot/src/runtime/system.rs | 26 +++++-- wasm-runtime/std/src/lib.rs | 2 + .../release/runtime_polkadot.compact.wasm | Bin 66916 -> 68080 bytes .../release/runtime_polkadot.wasm | Bin 66965 -> 68130 bytes 9 files changed, 116 insertions(+), 30 deletions(-) diff --git a/executor/src/native_executor.rs b/executor/src/native_executor.rs index afa72e7aaaff0..92045ee976167 100644 --- a/executor/src/native_executor.rs +++ b/executor/src/native_executor.rs @@ -145,8 +145,6 @@ mod tests { fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { use triehash::ordered_trie_root; - let one = one(); - let two = two(); let transactions = txs.into_iter().map(|transaction| { let signature = secret_for(&transaction.signed).unwrap() @@ -169,36 +167,85 @@ mod tests { (Block { header, transactions }.to_vec(), hash) } - fn block1() -> Vec { - construct_block(1, [69u8; 32], hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db"), vec![Transaction { - signed: one(), - nonce: 0, - function: Function::StakingTransfer, - input_data: vec![].join(&two()).join(&69u64), - }]).0 + fn block1() -> (Vec, Hash) { + construct_block( + 1, + [69u8; 32], + hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db"), + vec![Transaction { + signed: one(), + nonce: 0, + function: Function::StakingTransfer, + input_data: vec![].join(&two()).join(&69u64), + }] + ) + } + + fn block2() -> (Vec, Hash) { + construct_block( + 2, + block1().1, + hex!("244289aaa48ad6aa39db860d8ec09295ee7f06d1addac3dc02aa993db8644008"), + vec![ + Transaction { + signed: two(), + nonce: 0, + function: Function::StakingTransfer, + input_data: vec![].join(&one()).join(&5u64), + }, + Transaction { + signed: one(), + nonce: 1, + function: Function::StakingTransfer, + input_data: vec![].join(&two()).join(&15u64), + } + ] + ) + } + + #[test] + fn test_execution_works() { + let mut t = new_test_ext(); + println!("Testing Wasm..."); + let r = WasmExecutor.call(&mut t, COMPACT_CODE, "run_tests", &CallData(block2().0)); + assert!(r.is_ok()); } #[test] fn full_native_block_import_works() { let mut t = new_test_ext(); - NativeExecutor.call(&mut t, COMPACT_CODE, "execute_block", &CallData(block1())).unwrap(); + NativeExecutor.call(&mut t, COMPACT_CODE, "execute_block", &CallData(block1().0)).unwrap(); runtime_std::with_externalities(&mut t, || { assert_eq!(balance(&one()), 42); assert_eq!(balance(&two()), 69); }); + + NativeExecutor.call(&mut t, COMPACT_CODE, "execute_block", &CallData(block2().0)).unwrap(); + + runtime_std::with_externalities(&mut t, || { + assert_eq!(balance(&one()), 32); + assert_eq!(balance(&two()), 79); + }); } #[test] fn full_wasm_block_import_works() { let mut t = new_test_ext(); - WasmExecutor.call(&mut t, COMPACT_CODE, "execute_block", &CallData(block1())).unwrap(); + WasmExecutor.call(&mut t, COMPACT_CODE, "execute_block", &CallData(block1().0)).unwrap(); runtime_std::with_externalities(&mut t, || { assert_eq!(balance(&one()), 42); assert_eq!(balance(&two()), 69); }); + + WasmExecutor.call(&mut t, COMPACT_CODE, "execute_block", &CallData(block2().0)).unwrap(); + + runtime_std::with_externalities(&mut t, || { + assert_eq!(balance(&one()), 32); + assert_eq!(balance(&two()), 79); + }); } } diff --git a/executor/src/wasm_executor.rs b/executor/src/wasm_executor.rs index ff1b35250e20c..d1875b6371443 100644 --- a/executor/src/wasm_executor.rs +++ b/executor/src/wasm_executor.rs @@ -38,7 +38,7 @@ struct Heap { impl Heap { fn new() -> Self { Heap { - end: 1024, + end: 32768, } } fn allocate(&mut self, size: u32) -> u32 { @@ -118,34 +118,35 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, ext_memcpy(dest: *mut u8, src: *const u8, count: usize) -> *mut u8 => { this.memory.copy_nonoverlapping(src as usize, dest as usize, count as usize) .map_err(|_| DummyUserError)?; - println!("memcpy {} from {}, {} bytes", dest, src, count); +// println!("memcpy {} from {}, {} bytes", dest, src, count); dest }, ext_memmove(dest: *mut u8, src: *const u8, count: usize) -> *mut u8 => { this.memory.copy(src as usize, dest as usize, count as usize) .map_err(|_| DummyUserError)?; - println!("memmove {} from {}, {} bytes", dest, src, count); +// println!("memmove {} from {}, {} bytes", dest, src, count); dest }, ext_memset(dest: *mut u8, val: u32, count: usize) -> *mut u8 => { this.memory.clear(dest as usize, val as u8, count as usize) .map_err(|_| DummyUserError)?; - println!("memset {} with {}, {} bytes", dest, val, count); +// println!("memset {} with {}, {} bytes", dest, val, count); dest }, ext_malloc(size: usize) -> *mut u8 => { let r = this.heap.allocate(size); - println!("malloc {} bytes at {}", size, r); +// println!("malloc {} bytes at {}", size, r); r }, ext_free(addr: *mut u8) => { this.heap.deallocate(addr); - println!("free {}", addr) +// println!("free {}", addr) }, ext_set_storage(key_data: *const u8, key_len: u32, value_data: *const u8, value_len: u32) => { - if let (Ok(key), Ok(value)) = (this.memory.get(key_data, key_len as usize), this.memory.get(value_data, value_len as usize)) { - this.ext.set_storage(key, value); - } + let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; + let value = this.memory.get(value_data, value_len as usize).map_err(|_| DummyUserError)?; + println!("Runtime: Setting storage: {} -> {}", HexDisplay::from(&key), HexDisplay::from(&value)); + this.ext.set_storage(key, value); }, ext_get_allocated_storage(key_data: *const u8, key_len: u32, written_out: *mut u32) -> *mut u8 => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; @@ -160,6 +161,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, ext_get_storage_into(key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32, value_offset: u32) -> u32 => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; let value = this.ext.storage(&key).map_err(|_| DummyUserError)?; + println!("Runtime: Getting storage: {} ( -> {})", HexDisplay::from(&key), HexDisplay::from(&value)); let value = &value[value_offset as usize..]; let written = ::std::cmp::min(value_len as usize, value.len()); this.memory.set(value_data, &value[..written]).map_err(|_| DummyUserError)?; @@ -188,9 +190,17 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, }, ext_twox_128(data: *const u8, len: u32, out: *mut u8) => { let result = if len == 0 { + println!("Runtime: XXhash: ''"); twox_128(&[0u8; 0]) } else { - twox_128(&this.memory.get(data, len as usize).map_err(|_| DummyUserError)?) + let key = this.memory.get(data, len as usize).map_err(|_| DummyUserError)?; + let hashed_key = twox_128(&key); + if let Ok(skey) = ::std::str::from_utf8(&key) { + println!("Runtime: XXhash: {} -> {}", skey, HexDisplay::from(&hashed_key)); + } else { + println!("Runtime: XXhash: {} -> {}", HexDisplay::from(&key), HexDisplay::from(&hashed_key)); + } + hashed_key }; this.memory.set(out, &result).map_err(|_| DummyUserError)?; }, diff --git a/wasm-runtime/polkadot/src/codec/slicable.rs b/wasm-runtime/polkadot/src/codec/slicable.rs index 0f1ef812a67a9..8f062bc6541f8 100644 --- a/wasm-runtime/polkadot/src/codec/slicable.rs +++ b/wasm-runtime/polkadot/src/codec/slicable.rs @@ -84,7 +84,8 @@ impl Slicable for Vec { fn set_as_slice bool>(fill_slice: &F) -> Option { u32::set_as_slice(fill_slice).and_then(|len| { let mut v = Vec::with_capacity(len as usize); - unsafe { v.set_len(len as usize); } + v.resize(len as usize, 0); +// unsafe { v.set_len(len as usize); } if fill_slice(&mut v, 4) { Some(v) } else { @@ -106,7 +107,7 @@ impl NonTrivialSlicable for Vec where Vec: Slicable {} impl Slicable for Vec { fn from_slice(value: &[u8]) -> Option { - let len = Self::size_of(&value[0..4])?; + let len = Self::size_of(value)?; let mut off = 4; let mut r = Vec::new(); while off < len { diff --git a/wasm-runtime/polkadot/src/lib.rs b/wasm-runtime/polkadot/src/lib.rs index 677272e93f472..33bf5546766e8 100644 --- a/wasm-runtime/polkadot/src/lib.rs +++ b/wasm-runtime/polkadot/src/lib.rs @@ -37,6 +37,7 @@ pub mod runtime; use runtime_std::prelude::*; use codec::Slicable; +use runtime_std::print; use primitives::{Block, UncheckedTransaction}; /// Execute a block, with `input` being the canonical serialisation of the block. Returns the @@ -53,4 +54,14 @@ pub fn execute_transaction(input: &[u8]) -> Vec { Vec::new() } -impl_stubs!(execute_block, execute_transaction); +/// Run whatever tests we have. +pub fn run_tests(input: &[u8]) -> Vec { + print("run_tests..."); + let block = Block::from_slice(input).unwrap(); + print("deserialised block."); + let stxs = block.transactions.iter().map(Slicable::to_vec).collect::>(); + print("reserialised transactions."); + [stxs.len() as u8].to_vec() +} + +impl_stubs!(execute_block, execute_transaction, run_tests); diff --git a/wasm-runtime/polkadot/src/runtime/staking.rs b/wasm-runtime/polkadot/src/runtime/staking.rs index df8d4d632fe5f..004480b91b81b 100644 --- a/wasm-runtime/polkadot/src/runtime/staking.rs +++ b/wasm-runtime/polkadot/src/runtime/staking.rs @@ -18,6 +18,7 @@ use runtime_std::prelude::*; use runtime_std::cell::RefCell; +use runtime_std::print; use codec::KeyedVec; use support::{storage, StorageVec}; use primitives::{BlockNumber, AccountID}; diff --git a/wasm-runtime/polkadot/src/runtime/system.rs b/wasm-runtime/polkadot/src/runtime/system.rs index 8df20f138e7eb..1847a7b3112ae 100644 --- a/wasm-runtime/polkadot/src/runtime/system.rs +++ b/wasm-runtime/polkadot/src/runtime/system.rs @@ -18,7 +18,7 @@ //! and depositing logs. use runtime_std::prelude::*; -use runtime_std::{mem, print, storage_root, enumerated_trie_root}; +use runtime_std::{mem, storage_root, enumerated_trie_root}; use codec::{KeyedVec, Slicable}; use support::{Hashable, storage, with_env}; use primitives::{Block, BlockNumber, Hash, UncheckedTransaction, TxOrder}; @@ -76,12 +76,14 @@ pub mod internal { // check transaction trie root represents the transactions. let txs = block.transactions.iter().map(Slicable::to_vec).collect::>(); - let txs_root = enumerated_trie_root(&txs.iter().map(Vec::as_slice).collect::>()); -// println!("TR: {}", ::support::HexDisplay::from(&txs_root)); + let txs = txs.iter().map(Vec::as_slice).collect::>(); + let txs_root = enumerated_trie_root(&txs); assert!(header.transaction_root == txs_root, "Transaction trie root must be valid."); // execute transactions - block.transactions.iter().for_each(execute_transaction); + for tx in &block.transactions { + execute_transaction(tx); + } staking::internal::check_new_era(); session::internal::check_rotate_session(); @@ -89,9 +91,10 @@ pub mod internal { // any final checks final_checks(&block); - // check storage root. - assert!(header.state_root == storage_root(), "Storage root must match that calculated."); + let storage_root = storage_root(); + debug_assert_hash(&header.state_root, &storage_root); + assert!(header.state_root == storage_root, "Storage root must match that calculated."); // store the header hash in storage; we can't do it before otherwise there would be a // cyclic dependency. @@ -117,6 +120,17 @@ pub mod internal { // decode parameters and dispatch tx.function.dispatch(&tx.signed, &tx.input_data); } + + #[cfg(feature = "with-std")] + fn debug_assert_hash(given: &Hash, expected: &Hash) { + use support::HexDisplay; + if given != expected { + println!("Hash: given={}, expected={}", HexDisplay::from(given), HexDisplay::from(expected)); + } + } + + #[cfg(not(feature = "with-std"))] + fn debug_assert_hash(_given: &Hash, _expected: &Hash) {} } fn final_checks(_block: &Block) { diff --git a/wasm-runtime/std/src/lib.rs b/wasm-runtime/std/src/lib.rs index 7bf583af7d4ee..d04fbd532d220 100644 --- a/wasm-runtime/std/src/lib.rs +++ b/wasm-runtime/std/src/lib.rs @@ -4,6 +4,8 @@ #![feature(alloc)] #![cfg_attr(feature = "strict", deny(warnings))] +#[macro_use] +#[macro_export] extern crate alloc; pub use alloc::vec; diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 112a5c0223c49219fec1b962d9a9aacbddd90d17..4981abe023ba02771458483d19be3a1fac13e9ef 100644 GIT binary patch literal 68080 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 delta 26667 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

J6?RbwQx<|-}vBsyWG48B{pXOc;3f&HY<&v zZjd3HOsO zpKx)LnefskGhy=DrgC_RMuPP@e$cMK{N(0t>E|ifW=cOv=>uz5uJ75N(wS`4=Qfv{ zA#KOin{=4;k61Ng#`rI%;|sP=&}qUHU)o&WxbU&OKVCk0{DkG``D+&5-S0=i;x!8o z_xsJ@;xz_A$!ph?xlL=w*WhB-AK}Nc(NkNXZQb)WX;@eLo~-s+YA*uQWKZqSWVIKz zKzUTe@gpCC@)x(1Cx86Z@e>CgIvAZee*9E)^pTVNTKE^f-^kBR_R2(ZX0qH|V%BSW z#yymcdw$Z6d(3du5^d*cdqYp#hqJb?P`is-@yx@d%Sm{7(rS%|PaH=-&@`mU76J&~ z12C20KKfanoS!N;FHwrw$!hP+YM-Zeky>elwC_Dx?Gm+f)M`Cx?Vhamm8o*k>aK^u z)1|5Mre;WELTy>&y;Li$#BDaPiuO>Hus$ciqCR1O5%c;&lrL2mBj@ zOV=$tJ>YK*=C5D)=72wyN9|m1*!A-DRzBvpF8sOg-xMruT_^-}yu5YcV*!`K&fKu@ J+kwCS{{g@OgCYO` diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm index c0a1caa639953c6c95e73fc03694f5daea48e9a1..65624ef9865c0ee6fe11fddd1c679a987d70e300 100644 GIT binary patch delta 27906 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 delta 26674 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 Date: Wed, 31 Jan 2018 13:50:29 +0000 Subject: [PATCH 03/13] Test improvements, --- wasm-runtime/polkadot/src/runtime/system.rs | 47 +++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/wasm-runtime/polkadot/src/runtime/system.rs b/wasm-runtime/polkadot/src/runtime/system.rs index 1847a7b3112ae..bfede1f875602 100644 --- a/wasm-runtime/polkadot/src/runtime/system.rs +++ b/wasm-runtime/polkadot/src/runtime/system.rs @@ -24,6 +24,7 @@ use support::{Hashable, storage, with_env}; use primitives::{Block, BlockNumber, Hash, UncheckedTransaction, TxOrder}; use runtime::{staking, session}; +const NONCE_OF: &[u8] = b"sys:non:"; const BLOCK_HASH_AT: &[u8] = b"sys:old:"; const CODE: &[u8] = b"sys:cod"; @@ -110,8 +111,8 @@ pub mod internal { let ref tx = utx.transaction; // check nonce - let nonce_key = tx.signed.to_keyed_vec(b"sys:non:"); - let expected_nonce: TxOrder = storage::get_or_default(&nonce_key); + let nonce_key = tx.signed.to_keyed_vec(NONCE_OF); + let expected_nonce: TxOrder = storage::get_or(&nonce_key, 0); assert!(tx.nonce == expected_nonce, "All transactions should have the correct nonce"); // increment nonce in storage @@ -265,7 +266,47 @@ mod tests { parent_hash: [69u8; 32], number: 1, state_root: [0u8; 32], - transaction_root: [0u8; 32], // Unchecked currently. + transaction_root: hex!("91fab88ad8c30a6d05ad8e0cf9ab139bf1b8cdddc69abd51cdfa6d2699038af1"), + digest: Digest { logs: vec![], }, + }; + + let b = Block { + header: h, + transactions: vec![tx], + }; + + with_externalities(&mut t, || { + execute_block(b); + assert_eq!(staking::balance(&one), 42); + assert_eq!(staking::balance(&two), 69); + }); + } + + #[test] + #[should_panic] + fn block_import_of_bad_transaction_root_fails() { + let one = one(); + let two = two(); + + let mut t = new_test_ext(); + + let tx = UncheckedTransaction { + transaction: Transaction { + signed: one.clone(), + nonce: 0, + function: Function::StakingTransfer, + input_data: vec![].join(&two).join(&69u64), + }, + signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(), + }; + // tx: 2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000 + // sig: 679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a + + let h = Header { + parent_hash: [69u8; 32], + number: 1, + state_root: hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db"), + transaction_root: [0u8; 32], digest: Digest { logs: vec![], }, }; From a6cb5e861d5c7d16a4a3ea4326274fa0f9603fda Mon Sep 17 00:00:00 2001 From: Gav Date: Fri, 2 Feb 2018 22:17:16 +0100 Subject: [PATCH 04/13] Genesis creation utilities. --- Cargo.lock | 2 + client/Cargo.toml | 2 + client/src/genesis.rs | 37 ++++++++ client/src/lib.rs | 6 ++ primitives/src/ed25519.rs | 5 +- state_machine/src/backend.rs | 17 +--- .../polkadot/src/primitives/function.rs | 20 ++--- .../polkadot/src/primitives/proposal.rs | 41 +++++---- wasm-runtime/polkadot/src/primitives/tests.rs | 12 +-- .../polkadot/src/runtime/genesismap.rs | 85 ++++++++++++++++++ wasm-runtime/polkadot/src/runtime/mod.rs | 4 + wasm-runtime/polkadot/src/runtime/session.rs | 5 ++ wasm-runtime/polkadot/src/runtime/staking.rs | 6 ++ wasm-runtime/polkadot/src/runtime/system.rs | 59 ++---------- .../release/runtime_polkadot.compact.wasm | Bin 68080 -> 69084 bytes .../release/runtime_polkadot.wasm | Bin 68130 -> 69134 bytes 16 files changed, 201 insertions(+), 100 deletions(-) create mode 100644 client/src/genesis.rs create mode 100644 wasm-runtime/polkadot/src/runtime/genesismap.rs diff --git a/Cargo.lock b/Cargo.lock index 93f09afe025b8..ad94382aa2360 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -965,10 +965,12 @@ version = "0.1.0" dependencies = [ "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "native-runtime 0.1.0", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", "polkadot-serializer 0.1.0", "polkadot-state-machine 0.1.0", + "triehash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] diff --git a/client/Cargo.toml b/client/Cargo.toml index 468cf42de10c8..524429d1af010 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -10,3 +10,5 @@ parking_lot = "0.4" polkadot-primitives = { path = "../primitives", version = "0.1" } polkadot-state-machine = { path = "../state_machine", version = "0.1" } polkadot-serializer = { path = "../serializer" } +native-runtime = { path = "../native-runtime" } +triehash = "0.1" diff --git a/client/src/genesis.rs b/client/src/genesis.rs new file mode 100644 index 0000000000000..8aa6d9409a8b3 --- /dev/null +++ b/client/src/genesis.rs @@ -0,0 +1,37 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot 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. + +// Polkadot 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 Polkadot. If not, see . + +//! Tool for creating the genesis block. + +use std::collections::HashMap; +use native_runtime::primitives::{Block, Header}; +use triehash::trie_root; + +/// Create a genesis block, given the initial storage. +pub fn construct_genesis_block(storage: &HashMap, Vec>) -> Block { + let state_root = trie_root(storage.clone().into_iter()).0; + let header = Header { + parent_hash: Default::default(), + number: 0, + state_root, + transaction_root: trie_root(vec![].into_iter()).0, + digest: Default::default(), + }; + Block { + header, + transactions: vec![], + } +} diff --git a/client/src/lib.rs b/client/src/lib.rs index 2773085ecee54..13f881167bf74 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -21,7 +21,9 @@ extern crate polkadot_primitives as primitives; extern crate polkadot_state_machine as state_machine; extern crate polkadot_serializer as ser; +extern crate native_runtime; +extern crate triehash; extern crate parking_lot; #[macro_use] extern crate error_chain; #[macro_use] extern crate log; @@ -31,6 +33,10 @@ pub mod blockchain; pub mod backend; pub mod in_mem; +mod genesis; + +pub use genesis::construct_genesis_block; + pub use blockchain::Info as ChainInfo; pub use blockchain::BlockId; diff --git a/primitives/src/ed25519.rs b/primitives/src/ed25519.rs index b44d59c0b3206..e190c4f018943 100644 --- a/primitives/src/ed25519.rs +++ b/primitives/src/ed25519.rs @@ -233,8 +233,11 @@ mod test { let pair = Pair::from_seed(b"12345678901234567890123456789012"); let public = pair.public(); assert_eq!(public, "2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee".into()); - let message = FromHex::from_hex("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000").unwrap(); + let message = FromHex::from_hex("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000002228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000").unwrap(); let signature = pair.sign(&message[..]); + use hexdisplay::HexDisplay; + println!("Correct signature: {}", HexDisplay::from(&signature.0)); assert!(signature.verify(&message[..], &public)); + panic!(); } } diff --git a/state_machine/src/backend.rs b/state_machine/src/backend.rs index 5057339ce943e..4f5ff5d18fb2a 100644 --- a/state_machine/src/backend.rs +++ b/state_machine/src/backend.rs @@ -23,10 +23,7 @@ use triehash::sec_trie_root; use super::{Update, MemoryState}; /// Output of a commit. -pub struct Committed { - /// Root of the storage tree after changes committed. - pub storage_tree_root: H256, -} +pub struct Committed {} /// A state backend is used to read state data and can have changes committed /// to it. @@ -90,17 +87,7 @@ impl Backend for InMemory { where I: IntoIterator { self.inner.update(changes); - - // fully recalculate trie roots. - let storage_tree_root = H256(sec_trie_root( - self.inner.storage.iter() - .map(|(k, v)| (k.to_vec(), v.clone())) - .collect() - ).0); - - Committed { - storage_tree_root, - } + Committed {} } fn pairs(&self) -> Vec<(&[u8], &[u8])> { diff --git a/wasm-runtime/polkadot/src/primitives/function.rs b/wasm-runtime/polkadot/src/primitives/function.rs index e906cdc7186aa..8d45a71df79d2 100644 --- a/wasm-runtime/polkadot/src/primitives/function.rs +++ b/wasm-runtime/polkadot/src/primitives/function.rs @@ -25,13 +25,13 @@ use runtime::{staking, session, timestamp, governance}; #[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] #[repr(u8)] pub enum Function { - StakingStake = 0, - StakingUnstake = 1, - StakingTransfer = 2, - SessionSetKey = 3, - TimestampSet = 4, - GovernancePropose = 5, - GovernanceApprove = 6, + TimestampSet = 0x00, + SessionSetKey = 0x10, + StakingStake = 0x20, + StakingUnstake = 0x21, + StakingTransfer = 0x22, + GovernancePropose = 0x30, + GovernanceApprove = 0x31, } impl Function { @@ -41,11 +41,7 @@ impl Function { let functions = [Function::StakingStake, Function::StakingUnstake, Function::StakingTransfer, Function::SessionSetKey, Function::TimestampSet, Function::GovernancePropose, Function::GovernanceApprove]; - if (value as usize) < functions.len() { - Some(functions[value as usize]) - } else { - None - } + functions.iter().map(|&f| f).find(|&f| value == f as u8) } } diff --git a/wasm-runtime/polkadot/src/primitives/proposal.rs b/wasm-runtime/polkadot/src/primitives/proposal.rs index 1b8aa6b13e7d3..d6b26bb8e327c 100644 --- a/wasm-runtime/polkadot/src/primitives/proposal.rs +++ b/wasm-runtime/polkadot/src/primitives/proposal.rs @@ -27,12 +27,17 @@ use runtime::{system, governance, staking, session}; #[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] #[repr(u8)] pub enum InternalFunction { - SystemSetCode = 0, - StakingSetSessionsPerEra = 1, - StakingSetBondingDuration = 2, - StakingSetValidatorCount = 3, - GovernanceSetApprovalPpmRequired = 4, - SessionSetLength = 5, + SystemSetCode = 0x00, + + SessionSetLength = 0x10, + SessionForceNewSession = 0x11, + + StakingSetSessionsPerEra = 0x20, + StakingSetBondingDuration = 0x21, + StakingSetValidatorCount = 0x22, + StakingForceNewEra = 0x23, + + GovernanceSetApprovalPpmRequired = 0x30, } impl InternalFunction { @@ -41,17 +46,15 @@ impl InternalFunction { use self::*; let functions = [ InternalFunction::SystemSetCode, + InternalFunction::SessionSetLength, + InternalFunction::SessionForceNewSession, InternalFunction::StakingSetSessionsPerEra, InternalFunction::StakingSetBondingDuration, InternalFunction::StakingSetValidatorCount, + InternalFunction::StakingForceNewEra, InternalFunction::GovernanceSetApprovalPpmRequired, - InternalFunction::SessionSetLength ]; - if (value as usize) < functions.len() { - Some(functions[value as usize]) - } else { - None - } + functions.iter().map(|&f| f).find(|&f| value == f as u8) } } @@ -93,6 +96,13 @@ impl Proposal { let code: Vec = params.read().unwrap(); system::privileged::set_code(&code); } + InternalFunction::SessionSetLength => { + let value = params.read().unwrap(); + session::privileged::set_length(value); + } + InternalFunction::SessionForceNewSession => { + session::privileged::force_new_session(); + } InternalFunction::StakingSetSessionsPerEra => { let value = params.read().unwrap(); staking::privileged::set_sessions_per_era(value); @@ -105,14 +115,13 @@ impl Proposal { let value = params.read().unwrap(); staking::privileged::set_validator_count(value); } + InternalFunction::StakingForceNewEra => { + staking::privileged::force_new_era(); + } InternalFunction::GovernanceSetApprovalPpmRequired => { let value = params.read().unwrap(); governance::privileged::set_approval_ppm_required(value); } - InternalFunction::SessionSetLength => { - let value = params.read().unwrap(); - session::privileged::set_length(value); - } } } } diff --git a/wasm-runtime/polkadot/src/primitives/tests.rs b/wasm-runtime/polkadot/src/primitives/tests.rs index fdb600a5bbd29..9b17672eb1b7e 100644 --- a/wasm-runtime/polkadot/src/primitives/tests.rs +++ b/wasm-runtime/polkadot/src/primitives/tests.rs @@ -35,7 +35,7 @@ fn serialise_transaction_works() { assert_eq!(serialised, vec![ 1u8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 0, 0, 0, 0, 0, 0, 0, - 2, + 34, 40, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 69, 0, 0, 0, 0, 0, 0, 0 @@ -55,7 +55,7 @@ fn deserialise_transaction_works() { let data = [ 1u8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 0, 0, 0, 0, 0, 0, 0, - 2, + 34, 40, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 69, 0, 0, 0, 0, 0, 0, 0 @@ -162,7 +162,7 @@ fn serialise_block_works() { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 0, 0, 0, 0, 0, 0, 0, - 2, + 34, 40, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 69, 0, 0, 0, 0, 0, 0, 0, @@ -170,7 +170,7 @@ fn serialise_block_works() { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 42, 0, 0, 0, 0, 0, 0, 0, - 0, + 32, 0, 0, 0, 0 ]); } @@ -225,7 +225,7 @@ fn deserialise_block_works() { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 0, 0, 0, 0, 0, 0, 0, - 2, + 34, 40, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 69, 0, 0, 0, 0, 0, 0, 0, @@ -233,7 +233,7 @@ fn deserialise_block_works() { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 42, 0, 0, 0, 0, 0, 0, 0, - 0, + 32, 0, 0, 0, 0 ]; let deserialised = Block::from_slice(&data).unwrap(); diff --git a/wasm-runtime/polkadot/src/runtime/genesismap.rs b/wasm-runtime/polkadot/src/runtime/genesismap.rs new file mode 100644 index 0000000000000..e10b5e4557e03 --- /dev/null +++ b/wasm-runtime/polkadot/src/runtime/genesismap.rs @@ -0,0 +1,85 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot 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. + +// Polkadot 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 Polkadot. If not, see . + +//! Tool for creating the genesis block. + +use std::collections::HashMap; +use runtime_std::twox_128; +use codec::{KeyedVec, Slicable}; +use support::Hashable; +use primitives::{AccountID, BlockNumber, Block}; +use runtime::staking::Balance; + +/// Configuration of a general Polkadot genesis block. +pub struct GenesisConfig { + pub validators: Vec, + pub authorities: Vec, + pub balances: Vec<(AccountID, Balance)>, + pub block_time: u64, + pub session_length: BlockNumber, + pub sessions_per_era: BlockNumber, + pub bonding_duration: u64, + pub approval_ratio: u32, +} + +impl GenesisConfig { + pub fn new_simple(authorities_validators: Vec, balance: Balance) -> Self { + GenesisConfig { + validators: authorities_validators.clone(), + authorities: authorities_validators.clone(), + balances: authorities_validators.iter().map(|v| (v.clone(), balance)).collect(), + block_time: 5, // 5 second block time. + session_length: 720, // that's 1 hour per session. + sessions_per_era: 24, // 24 hours per era. + bonding_duration: 90, // 90 days per bond. + approval_ratio: 667, // 66.7% approvals required for legislation. + } + } + + pub fn genesis_map(&self) -> HashMap, Vec> { + let wasm_runtime = include_bytes!("../../../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm"); + vec![ + (&b":code"[..], wasm_runtime.to_vec()), + (&b"gov:apr"[..], self.approval_ratio.to_vec()), + (&b"ses:len"[..], self.session_length.to_vec()), + (&b"ses:val:len"[..], (self.validators.len() as u32).to_vec()), + (&b"con:aut:len"[..], (self.authorities.len() as u32).to_vec()), + (&b"sta:wil:len"[..], 0u32.to_vec()), + (&b"sta:spe"[..], self.sessions_per_era.to_vec()), + (&b"sta:vac"[..], (self.validators.len() as u32).to_vec()), + (&b"sta:era"[..], 0u64.to_vec()), + ].into_iter() + .map(|(k, v)| (k.to_vec(), v)) + .chain(self.validators.iter() + .enumerate() + .map(|(i, account)| ((i as u32).to_keyed_vec(b"ses:val:"), account.to_vec())) + ).chain(self.authorities.iter() + .enumerate() + .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), account.to_vec())) + ).chain(self.balances.iter() + .map(|&(account, balance)| (account.to_keyed_vec(b"sta:bal:"), balance.to_vec())) + ) + .map(|(k, v)| (twox_128(&k[..])[..].to_vec(), v.to_vec())) + .collect() + } +} + +pub fn additional_storage_with_genesis(genesis_block: &[u8]) -> Result, Vec>, ()> { + let h = Block::from_slice(genesis_block).ok_or(())?.header.blake2_256(); + Ok(map![ + twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => h.to_vec() + ]) +} diff --git a/wasm-runtime/polkadot/src/runtime/mod.rs b/wasm-runtime/polkadot/src/runtime/mod.rs index 9befa9bd42df8..664cbac8c095b 100644 --- a/wasm-runtime/polkadot/src/runtime/mod.rs +++ b/wasm-runtime/polkadot/src/runtime/mod.rs @@ -31,3 +31,7 @@ pub mod governance; // TODO: polkadao // TODO: parachains + + +#[cfg(feature = "with-std")] +pub mod genesismap; diff --git a/wasm-runtime/polkadot/src/runtime/session.rs b/wasm-runtime/polkadot/src/runtime/session.rs index 6cda783beb608..495c60701a619 100644 --- a/wasm-runtime/polkadot/src/runtime/session.rs +++ b/wasm-runtime/polkadot/src/runtime/session.rs @@ -78,6 +78,11 @@ pub mod privileged { pub fn set_length(new: BlockNumber) { storage::put(NEXT_SESSION_LENGTH, &new); } + + /// Forces a new session. + pub fn force_new_session() { + rotate_session(); + } } // INTERNAL API (available to other runtime modules) diff --git a/wasm-runtime/polkadot/src/runtime/staking.rs b/wasm-runtime/polkadot/src/runtime/staking.rs index 004480b91b81b..5f71b608f2660 100644 --- a/wasm-runtime/polkadot/src/runtime/staking.rs +++ b/wasm-runtime/polkadot/src/runtime/staking.rs @@ -151,6 +151,12 @@ pub mod privileged { pub fn set_validator_count(new: usize) { storage::put(VALIDATOR_COUNT, &(new as u32)); } + + /// Force there to be a new era. This also forces a new session immediately after. + pub fn force_new_era() { + new_era(); + session::privileged::force_new_session(); + } } pub mod internal { diff --git a/wasm-runtime/polkadot/src/runtime/system.rs b/wasm-runtime/polkadot/src/runtime/system.rs index bfede1f875602..a3d3a3a03beec 100644 --- a/wasm-runtime/polkadot/src/runtime/system.rs +++ b/wasm-runtime/polkadot/src/runtime/system.rs @@ -79,6 +79,7 @@ pub mod internal { let txs = block.transactions.iter().map(Slicable::to_vec).collect::>(); let txs = txs.iter().map(Vec::as_slice).collect::>(); let txs_root = enumerated_trie_root(&txs); + debug_assert_hash(&header.transaction_root, &txs_root); assert!(header.transaction_root == txs_root, "Transaction trie root must be valid."); // execute transactions @@ -167,10 +168,8 @@ mod tests { function: Function::StakingTransfer, input_data: vec![].join(&two).join(&69u64), }, - signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(), + signature: "13590ae48241e29780407687b86c331a9f40f3ab7f2cc2441787628bcafab6645dc81863b138a358e2a1ed1ffa940a4584ba94837f022f0cd162791530320904".convert(), }; - // tx: 2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000 - // sig: 679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a println!("tx is {}", HexDisplay::from(&tx.transaction.to_vec())); @@ -212,33 +211,21 @@ mod tests { let mut t = new_test_ext(); - let tx = UncheckedTransaction { - transaction: Transaction { - signed: one.clone(), - nonce: 0, - function: Function::StakingTransfer, - input_data: vec![].join(&two).join(&69u64), - }, - signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(), - }; - let h = Header { parent_hash: [69u8; 32], number: 1, - state_root: hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db"), - transaction_root: hex!("91fab88ad8c30a6d05ad8e0cf9ab139bf1b8cdddc69abd51cdfa6d2699038af1"), + state_root: hex!("1ab2dbb7d4868a670b181327b0b6a58dc64b10cfb9876f737a5aa014b8da31e0"), + transaction_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"), digest: Digest { logs: vec![], }, }; let b = Block { header: h, - transactions: vec![tx], + transactions: vec![], }; with_externalities(&mut t, || { execute_block(b); - assert_eq!(staking::balance(&one), 42); - assert_eq!(staking::balance(&two), 69); }); } @@ -250,35 +237,21 @@ mod tests { let mut t = new_test_ext(); - let tx = UncheckedTransaction { - transaction: Transaction { - signed: one.clone(), - nonce: 0, - function: Function::StakingTransfer, - input_data: vec![].join(&two).join(&69u64), - }, - signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(), - }; - // tx: 2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000 - // sig: 679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a - let h = Header { parent_hash: [69u8; 32], number: 1, state_root: [0u8; 32], - transaction_root: hex!("91fab88ad8c30a6d05ad8e0cf9ab139bf1b8cdddc69abd51cdfa6d2699038af1"), + transaction_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"), digest: Digest { logs: vec![], }, }; let b = Block { header: h, - transactions: vec![tx], + transactions: vec![], }; with_externalities(&mut t, || { execute_block(b); - assert_eq!(staking::balance(&one), 42); - assert_eq!(staking::balance(&two), 69); }); } @@ -290,35 +263,21 @@ mod tests { let mut t = new_test_ext(); - let tx = UncheckedTransaction { - transaction: Transaction { - signed: one.clone(), - nonce: 0, - function: Function::StakingTransfer, - input_data: vec![].join(&two).join(&69u64), - }, - signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(), - }; - // tx: 2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000 - // sig: 679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a - let h = Header { parent_hash: [69u8; 32], number: 1, - state_root: hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db"), + state_root: hex!("1ab2dbb7d4868a670b181327b0b6a58dc64b10cfb9876f737a5aa014b8da31e0"), transaction_root: [0u8; 32], digest: Digest { logs: vec![], }, }; let b = Block { header: h, - transactions: vec![tx], + transactions: vec![], }; with_externalities(&mut t, || { execute_block(b); - assert_eq!(staking::balance(&one), 42); - assert_eq!(staking::balance(&two), 69); }); } } diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 4981abe023ba02771458483d19be3a1fac13e9ef..4ff597b8c79dab280c2276d8a7debe6e61882b6e 100644 GIT binary patch literal 69084 zcmeFad5~S#edl-YeM`T!`}KlG1C8apN04j~0K2hug8(JsB9=s$;*fEvW>^zB1Vup- zA4q@%n-o=%#rA|zA!FHw9mZxn8XJ~nld{P%#wEwfM9Cl%#=|&_gUTqetD?9VN15Rt zniOj6sZwTaE1&Q0oVz?M1VC+0MFd};d(S<~@BGehJHN9cby-{E-vK_dL93|8kTla!QfMKe}iC{@r&y{Os}5kA3V@QAHo-?8C`to;ZH` zk=5fLeR%csW5*vped^R|RMqE(K7Z`=@#9fVuQPi6`0>?;pI$w6`jL+xfB3PJtEZy6 zKDG4eiANrP{M4h-SP^mjiASG!GKxkbp8S-LXj_)!Pdstz+2f;0o<6?nBf3iR@%b&^`GMv7*)l{7m^GCon8m}n(&+-+5xt!gcPGH$hM zl{lIlJ2qB-;`kG%PJb$iCQm=}G+lB0n4TmSl>SKf2Jo4oh=_%kWr7LsauAwDs!RtHb_Ql3a*}>D;hi;c+b#fu z+8YjTDZe*{gKgnm!C_ZTqeD^TYIGSv-M@|bppixgiBxw+Yq4wk*Thkk(A~?hN}(YN zSO)FwQ8YO0L3oR9C9326ySryQ1?i)jq{w5*VSuubR4}q7v)Yx#0k8 zY)>LzsHlQ=4csjus_nLAAE_as*fn8FWI)#2TtEA2QDnW-4MJ4QwX=`Px)yuT3?A~{ z;%>`6dk{gNyE8;}Tr2yiyywV!%=L4q202u1*C{7FX7CkYT@RY>t|;oa-ME5|n^4eq zJp}_dso)kjrC^(zR&cAkO~Gw$M#1fFoq`27t6;lZuiy?hr(lQMpkSxls9=}7Q^B19 za}z_oErz#ods}kzirgI{I~KXeZBpdk5ZSWGeQvWN_q&#YmfNCWIV7oDl9ljQv$q4` zt!i&j_O9sH;{HK}Ux@pM6#i=5zgywCxc{C`+=fLu{QCR`{BGg5jo+>OZsT`5zXg8V z`Q5>92fv;CcJaHD-y**ye!KbY;kTFHK7RZ8wfHUbTj6(r-(CC;@;k)uZhr6K*KRwP z#>2i7{VpW?B-D~#rR}!5_lRq@^3mPxpOT?Fjnclf7uL$}>O%?{mye_B6uxBI8Lp}WmLZ5X;+{nN&w+vcC< zhwc{tv}x!D{%P~j_5IV9q3igktwY!LPfiNKxfu3uyZ1U?-`j>ZkRn^%dzVeHiLpV; zR>a<5tD+)%wI?{Sl8GM#OyyjhN{n2HhiInu|5HzzC5?44Ix%QVV?j*PSnVTKX{@$O zTzn$^R`f(~uWL(fwdmy7CGV$?d5>Hx?L3aIsT?Nfl8LyAO5m$>-ja`vkY>I8uHq^J zbWE~MNybzJQanx%43%R2Mv_bJ(Zp&$7VpqOoGuja&`+FhE8d~IICaH49TQV%ULJHF zQ)u?i%S`qXS_}LjjxyBRF*S!*-&&sY)}jE_T7qr9(GUrJjYw2pHwKc^1}z=4$3dOa zR8n0f@x8MGQ&z(_eW;Xba>8Y(Y1^QvX`ioY38?p(V4^f>VD)Gk7iew3>?#uyvc9d0 zmP7L@`Y`4!2+iU-Zx-FAW)Y}ad~u!}e5+zw(Oaid4`cAOAqiI#0ais)6#%Hw4#fib}EUCU3snn*c3C3oMRn>&Hk!mfmzz1MK zAXc};uB9Xyp}JUA#)>lD^G_5A?{!opDsQE77}jg27e)5f_79E4@4d13){Y+kJ-EjfoW=haLs^m8Hw&PZ5> zkxxch=zgz|{j;SX@a%k1GXpBx=If(u)t>2SRJOgiDry=f4Fpw;8Co^bPD$C@0nit= z_O?gue^XCdB|CYoc4E-6*3)QfdyGBT*AQ&XF$h!BI!78Sl}1|aH-wDxKWu>Na8OBW z8qs&sGnHYwUrwD)dKN>TM;g?xR}N!6CHHl~glk}yr}y07#hOVE<6KA=?(f!k{>A5U zF9?7-);Ly4b0K;x{g;v454^Qq>u47vNu@M=>6kXH-jDEnks+9`Z=aAF9?hg{@pgvK z)%3rWF`n*G3$TLr$l5n>`AhyZsJ***69g{9JuY?Q_PtkxI0I2T9ut^^mlmRAn-@#}fINxuv zAUK1)VYEMnNve?#<|J6gNiiIuwv<^9M;#nAGHe}T zxq6A^WWeLnsKRGe+B&t{*kjB!dQ*Og zQ5Q}%f^Z#IpYL}_0zmkIMMdr2Zr2j=SX9)nN)XmGXl6Le0D%`j`f6D+b*~?S;NWdu z-n}X{>L;o|b*dPKDT$gwoLU-sxE^}Au7L~%rK>cj zo$9%)LcEkhT16>9sy+Rg8{iSDEJqNpwNo0R5eCW>qy&bx289gjeiYZR+=_SPBF&6A zXB*E1Wb&yJp|qxAd0?ctpGGkt7Ba?AYQhJ7ZMb2?>4%cMR>>1HrldLzfoX5y-!KiP zY#JL54N2=aW}OCOi3H3Of`SsZV|=26X3j|#+i=a5iUZjVubA2!NvDeVQ|-Yhuk~84 z!k>uQ2rC2-#)`*A@z`wFNzkkLpwezw^4{k5EA4o^tkx$$OL}`BxeKsNWJH4~J^P0d z%1W`Qr3uK>wPB0&GefwZZ%@KD--w<}?>M zA+C?%JK;|}426u}568h`PjwThVf;kDmO?wbqNM>{kyhS6pH`j%*Lc;c4hfAP!yLM` zPR(?nc-=fnP-GXjM^`*Rhl6&RV(<@LLO~)P z>mTtk{X_M1FeHz~3D#AB|In>;s;avqqJ>nR#j{61*FM{?>4Qj_-d`|Al|X=az8&31 zb0!=URSO_$oV=co)3x3MkU-KOC%TUR7Y(?zKUVs_R#k!u2~Z^@YNu~05e82>(eE1P z(3q)b(@XJbm0l%fg_H>?*OW3Qs{-qFvZaLqga5LF?WTbjYRoHD z8`ogd%kw#7c}OvXikAB7$WLyz@<8VCCX=7# zD+nHdLUG>?$(sIS2CKB6S>krLj)V)3wT`TN>Y?ql*4Ma;^!GeP=`Gp*&Gg&xQ*a1s zQ3$8wYc@WDfz?iBs)rm^*W}E499Qx?j0osWo3>4eLLx zuTsp^DoDQ+J#`u>L0P9m7bI#)i}@QSbVO6Uw?ls$k;-(GDX5M{BbjdT9VYNE(8#s; z{iu6*q!v0+eN}nKzDi6!(F6V;z1cqDnvyS+54OxTaC0@%{SW}9uqpzsh@>~MmNUKC zlHR0S-v^6HDnSOoC~ChtHSw(?Ns5^lWU4G-vYEWskO#W9p}WecGUoQ86mCR&B-Dxy^~SY4EhRyhqAhLAFdR-`^DO>~OI zT=g`flPNbuXDt)0HNG>duRFplEz+GfI+*)*)T~UtJOPW;^}ANsFkWvad&&YI^wgw=4IFh0+V->Gt&8M0!3+ zFHWYvpY(Qi6KU~(r95WF#jquIK}6znGig7)G?V^9oSvOc-&W#SG|TH>d|=3*_EAt4 zr+@lWtHbpF`01VZ@%$^V@chejdi;|=<*}=$zxwvKqo>kezSQ~vFJJndXNKv5qW_1V zYLr`N+rC8pKu<<>Cs6MRZs^hh&TB}#2)<~43 zf5}jbetMtDUh$r@cnz>DT5{Mj3v_)$0$|4Zk1~&_D0XA>6gHM7t9?dW)C!RhHAeYM z=^vqWMcz+6n@-5MZXKO>nEk$l1Z+bgg5=+3kjRe$?#A8`4+2F0=8DX_tN@ z6Ct#vlpCewb5qW)$dnR;SqMz%vF?*f(ZCutAjIn*3L;lnpd@q{(8#3p<<&xAIHV{H zJ<))drHdNEiF(IMud5&mw=W}wdxiGSh35r#ih{9bHQYiIsZ=VxT$M4@R04>M9v5O! z`m#EpPza)O0@v^fH->>)ESq7RcT3yMV~@6 zgLN;{3Bf4`aWh2&K&i{gCY~=<(lut|d7JY%rCyl-z5zpGJQ1kW}5qc{U&oc%bQ-aqiV)5Nb+-ym#FG@xzZ>clg}7-}9nA-}9n@(Vi!Z z$l()&-z>=Co3ORW0WuIdyohuz$brbKl7o*IIlR#jIiz2!Yo^IN_~z2H?Q|SGmxe&? z|7C2%5q=SY){;QO5*(^-Y$F9kNWkz$uW1zw;!CEUKKF){$mCim*yq7@blA0y$Pid# zy;qNPll=ZpKTOH=}!_&G0#|Xa=5zQZv*K zrq;b%B1+Hr`Vx;e29DnOPJe(lFZ{AT5$2!}-zQ^;08b(E9kDF0AJYj0MkbyEj9|>X z48CTgF(Wl-jF608Bec>5A=4n!AJP0y#du1SCPYNVbdIE;hAXYGy355(A%8L|Cb11Qx;_-AG=SB*1BB+=u5KNleL5wUnmgns zyg*FPVkE~LG28OIkk2>Uk~L@I(K->5u#mhyvNd2~-k^8M731fMf^B>v;R2t&dWR~p z*p6aN%s9exc%rb+!C#S=SBY8X^3{w`9%LK|k}t<46YT;L%_e2Qbq8BRjElcTm`9%x zfMt{zfU#y>W_@p{b>tPSC`HoY```V1Ph-dP~@ z-DV#;`XKs9QUM@KuheJC2E%L3ep(9#n&dZ%K!%#rG{1`F^n(Gu9i6zrpCTq zd5SzT?E18#->n>01D%Fw7=m-F>D)88r0`xwjzO6jgRX5lNm;PhNr*I(U!Z|Wg*^s* zIErOMCa#;tPqQ6}$!HA;d@Y?wW0gq$dp=-@z}_JNu^pVN7R8V zNyqM|PqhBW{ue92S=%FI!o3Diw4mTnw9~)c>EHJFV4s46(XtO#(zTr_5(1geMxLq` zqr>vm?YJ3hk^ogKKgIYLeOSMHB5ZhiYA$wja~4ON0dl&uuweKE)Rr33g@41 z_^$P|;6w(9stvr}kIG;=Fp%rbVj)hmZV^&^xEuW?e!eO8`DO`R?6I3=90Ya`V?vT! z%aSmrs==5-6rrDNCCTL>Imb3iL9S#$5XjUbpf$AjeznZrnlnaAESzCalTVv zTlokNMK8qu{j(MxivDg0KWE{==x0LsvvK;Sqid#9cHSW?rc=KGhrJrp+oLn_fQ@ge z;VlUQtse64`nYBv&ry&fkA*}%LNqrfL66yJ)pCKX%+SBJqj$HPW(b6iA~?)mOhJs= zewTo|DRfW<_XxN*3?+2YtMm=u1^J0ho*@0bS`njmM-b@Qaekh$x|%Q561cN1BR@>8%w zU-v>B8a+I9ikwR4JPnH4E(1|f)YK}0sVJ(#AShP_sIr%`3L1Gcn?+Vtb=c5}hf|p= z^2!_Xcw%)-h_kkXvx@be2#8^J5@-oSp@;J^fij#nB~PZuhJ#7Xmji%_4ed5eU!0c& zC`XYW&@uYH=6dfD>D}w8H*k{|125nNZ}?rl)9GhpydawV z%g^wFK_w?c!Hz#mq?r{k0(i-IEte5BA0!!c4(MGy|;e%JLH-2w(GW&dzkC!g8 zdU`IG$fKrT_J%I~7m;67{u1*@xJ$Hn3YGtfK}D`NBt&xmfc1}Pnsn>^xQ6D^^A#iG z))B}*3h!dm@;hkn_;(HSa}gtFK`vQj$>#!PPN~mRytgauF@2i_$}mhbC-ymu8ete8 zHNr4+Zf-jTtR!z&0q>Frw-6aV%J@6mNbRF2q>vX@$lKMG> z6f&7}zZG%`NG__7v%U~kq6E(NQ4}(k%Mc$$Aq_W~rBZV)Qpni~D~>Yh*~Ug-M!CBV)YXWu&?z~CBE*fCD z%%m?2tXyFF2*wqeNH4kuQ!Kq*i;=78KZO@+qCm$93OS|M%apC&D!;3%{CgdGMgp2% zL}BxGAbUaUJ2C`e%am2`DpPRMlu+?JaSPi?op+=TPV zO_Tar1FQs=BJi_iwgIR%psobztfaW)ecc6`4y0V7;I~F7m@OcIYDL0qsl6Hv-)l5n z7PLcMW;Q^=V@%wAo(7L-;H*k4b&x@6r~GDT57)`26cL{Zlep`xqni_n{= ztBVF$iLMkeLRX5ost9GqJpHt054_RPG$O-ei=duA>%UCRf~2f2dGERA~jCb^&2t$Y;P2;X?DWZ$H$&wAv0g8&0&N^tn{GfC#Z zQRqzg#$zTd{5J}n4c~Yi5gHdMAB$o-9|aXc>MDZhV&W!qq026%04X~^$}r2+K|Zt@ z*m(?hb6Go)3onm785m(UhE=V3E3KETm07uFHqkIk#1}u0U`FFb-$T}WeDRYB`eMe8 zZ(pu}yHw))ColQD?|t>KzLZMV7Z5fPzKoWvo;hE##nkhjvhtG8`jRKZmr}|4Ldl{C zRkGHA~n6{-(Jd-*g9b!`67|p zj^y9Y=1IaltMCTTd`m661e6@E!IE5`+HF{=7_sXEtB2>(uT?a;W<`k!FEZQof-L2) zQf$FPU*;`0meN;w8{r`t9bZ(guk$4v0sGon!BJ@R^i95JG-tglt^K-kN-FpqEE)KQ zok%jLL5KeoVm8_uxu)CravyiTdG+z0GXm4JU|xt;31lVE&XE%4=&4YTPr`7f%e+ig zetO0`%>O%fpLOwbBAf>H!r0_!7wzNNg(eyis9ii~(?M!+mRRg*wIsE0#%G8o3vOs% z9TNod(nsnDoNkVp!w$n_B&#j1(t7X_@S^lDz=07=q&uIzzt)&SQ;UR#8oX))qD==SdZ%{g z7xlY;zPFxvrD~67QVCD-swQ#pn}|JBsbQb7cbyLNLvO!TIbt3sYX9y{Lq2ykz&oRG zFMY4U{?Bh3?E30e@LgLSLHAnxy@vZA$2KW;1y#`bw$>MSM!ZT7Glsi=eo%YuNar(y zx&+7|))FdLf7!+JOzc58i7&*@VcJp>raH)9bOp0%Py|g%kUGrY*rO2-bH}Ox;(^p4 z9*9zFWV2205RJ&Ejhp60L?aB5lguB*NrhRxtO0OqM%a{cLYpRFS}hZ#McT&lXY&>%qb&-`C;0Z^eA_fx!SOp_b8PHtEY%M!;-mmgnW;tW;-F2mBX3d7 zw}=+AN+D+hW*4nRZ*A?}MvE?Q*l))iT97sC<{CxEFj?yJmVg&ffthclCzweAZXA@C z^#nq>40qlW|5Z2HQkq}A#QZ8}dQ~|;4Z+Qvz^jfq0gn38QUiiUe+!?GzY7*b_bNCP zebB%C4gdCIKKPJ=gVEpg!QXOQ=)J9)uVfNqtM=kcA#L3rJveZ(3buwhQ2(M2_v*t# zoajbyz<=)%EU>W7W(5qQ1$v*EFlGfdK}LYcPV&fYL8SA#iQeRGYszVo6#~weRMR+d zvPQrelyw45r5q#RoXQ3PCs#HJaQe0g`kEl$nhu6ck8e$H(W#bOwZKO$xK*cFZcT5~ zNtRpF+jWX%+}~0G2;mOX*c`X^Qs+hfU3+Pjzp#FyNH)%k{JX+%Bw#3KB9G&RB{i0y z;)CF0Wnr&!u?s~3iw+dvs#SoiRzb@LxN7wlT(w>QHtvH7AM|`M=>x-dP6k3fmLKle zh~qNB^@6BEIijc<{-9Z6hP|5qcWTi+sT8J5ZF&CQnkdOz%|=q26MAzY*(s8;(*?KK z5(#2AyDgrwbV4XJsslnlOt3J7&W*Y`AGD09EiND?;3J?Rw0^YFp{-j=ZJlvN%Wj}W z(28SzGlO01;1YOulVgRU7JwLS~vmP}ou{Hf#@%X>$ zQRHRhtFHT_EavL0Zxxv9d!)y%-(Qd+Q_Q|^%IqGjBBuC6Bmm4|v0GE1<)l~xwZEPa zI5{KMpzDM8f@O1bi0`1KDbe|~kf^2TM&|`u1~VQ7^r|?UUKK)$UM(RabS_g%6arF9 z@^7%wN2$8`D@b?KjiJJXp}{F(IBk?WUBZqim)GfQkStQTAlcD2e@AWH=!zCywi{KYhTnx=zR5O><%*FI2 z8`nGk=J?|DWr?~8UWzjVM`1|aBYc}&pi`>~C}bCqp&1vCtety(?dM;AHlZ4h_^^_x_!5)7c1B2zWqM$q zVH(>fl)rKq+bS~-dRk=&`cPGa3T0CWdl=i(}ey?0Wi@z$stQf^EDL54Gv$uHJza8|!-3ksy@Abhw8OtqsmJ4kHo&y=riF?Y;OqTTJu;)2r za;50mp%J|fWE4Oj2pG|1(F(ascpb#rw+s-ZpkXxXP^^OVtVTX({7Zu{2`J+p`9>Dg z_iBylV)`Cg%!}-@F!nqo%2`Yg%3@wj?~=v5h`o-*yqK=YVqQ#_Wic=6Krz9#PZqO@ zmda_2W_wCbV>jDVe7Zlu6IcjjCRTWm7^YS*_H2o(2b<%NKkOlX?ojmOJndddK19MG zFBINPFW4eCfnb8q_ks{u>IbK880;wMZKNX{b(5mte=Sb}ZDM}In>qx(w{KflSi3rN=ZZQr8BEQ6a(3MUE{1Ng6@bO0+|S<~at* zA#2e%zuc0SD!!d(B~z>gmqaJXS>K{Vk!dX6f8SboDEfmCzG>mX=nq5qKcNMjo`J{u zA&@?L=8ZUGhbvUj1^Z<5Yf6axnIyi1>)YG!lnTxh+T|M`yB!X1SOhvw_NRO!U$o^r zp^;RLj5U#mWS9&lDcF#Bpz3YrVHqpkj2)SX{(rw6WLG3@ko7i7)I!! z*qi{%1TFuj^;*0ICxCJC5{vLnPe4i(J1QQ9U$cY<>gJ3;O-x=(NJ_DYX)?hhMn%}< zmf=e=vgA7f4sUe{mdjPDK|H3B6=?UV zz0rk=3@)eOfC}!Y;GC-XB#93o0y6kvR!(P`#?8n~lh2;aw7rUHV@3{RoEize z{kv)=MEir_ta3A_ZRvt1yLC6nM7>V$y@MG%UftNufC|}n$TUY(Bq36FXgz3g{u2$ZB>Ip@dFPv#?6UmgMQMqIw2rd`LEfRtzbv z+G?nlaUFOy>H330?(0|5P)0!`BI|~6EsY@Am3bazycSkyF<_YR()0TzpE1upYhaz< zqyV_NAqH)CJ9-QS)ozB?%+c*g-4p#=6@xv#Ng)HPd2dhzvtmcO^>liVgvqV19a;Fy zU`bP(jP#dYCO31M70Rp)2HjYmm#BYh+UO5Z&nA#^3x0418a%B%i>ufhvYd_4bBu)C zpue+nm`GWR*p!nDkxFK|VlgYHh%K4vibZZr6KftNZ>H}sGu>>X4Ox`buWZ+|T1T}p#7^aK7c+uXXnb&Gv7)=z5TYbM6 zva>Z|y(=4aLB`ZY->B()!A(A%nk=DLsc6(xzEH<7qd~+)VMd$?dS^WLa}yi@Lb-Vq zg@pDfN|?FG{%JGJu|-2sFZ9^};!RJ|Pa@NphJcoFY6u7-|US924X+Kj8H1qQ|8)MtE;OU`8C&KO IkO24;oq>=i6c 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 diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm index 65624ef9865c0ee6fe11fddd1c679a987d70e300..b02b09b63d8dbc4bfda896d0256d33823ece1c85 100644 GIT binary patch literal 69134 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 Kc@V-a=Kli#IOkIU From 6eec20b04631b5a1943200aa83ce80f97cee10ec Mon Sep 17 00:00:00 2001 From: Gav Date: Fri, 2 Feb 2018 22:40:20 +0100 Subject: [PATCH 05/13] Fix all tests. --- executor/src/native_executor.rs | 15 ++++++++-- executor/src/wasm_executor.rs | 26 +++++++++++++++++- primitives/src/ed25519.rs | 8 ------ .../release/runtime_polkadot.compact.wasm | Bin 69084 -> 69324 bytes .../release/runtime_polkadot.wasm | Bin 69134 -> 69374 bytes 5 files changed, 38 insertions(+), 11 deletions(-) diff --git a/executor/src/native_executor.rs b/executor/src/native_executor.rs index 92045ee976167..d9426be1cb3e0 100644 --- a/executor/src/native_executor.rs +++ b/executor/src/native_executor.rs @@ -50,7 +50,18 @@ mod tests { const BLOATY_CODE: &[u8] = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm"); const COMPACT_CODE: &[u8] = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm"); - fn tx() -> Vec { "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000".convert() } + fn tx() -> Vec { + let transaction = Transaction { + signed: one(), + nonce: 0, + function: Function::StakingTransfer, + input_data: two().to_vec().join(&69u64), + }; + let signature = secret_for(&transaction.signed).unwrap() + .sign(&transaction.to_vec()) + .inner(); + UncheckedTransaction { transaction, signature }.to_vec() + } #[test] fn panic_execution_with_foreign_code_gives_error() { @@ -185,7 +196,7 @@ mod tests { construct_block( 2, block1().1, - hex!("244289aaa48ad6aa39db860d8ec09295ee7f06d1addac3dc02aa993db8644008"), + hex!("2e69e4405a13981224078ad5355c68401bf56d0fe3f14a3536734666e6a8a047"), vec![ Transaction { signed: two(), diff --git a/executor/src/wasm_executor.rs b/executor/src/wasm_executor.rs index d1875b6371443..5b87270724ef7 100644 --- a/executor/src/wasm_executor.rs +++ b/executor/src/wasm_executor.rs @@ -293,6 +293,7 @@ mod tests { use primitives::{blake2_256, twox_128}; use runtime_std::{self, TestExternalities}; use native_runtime::support::{one, two, StaticHexInto}; + use native_runtime::primitives::AccountID; use native_runtime::codec::KeyedVec; use native_runtime::runtime::staking::balance; @@ -402,7 +403,30 @@ mod tests { ); } - fn tx() -> Vec { "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000".convert() } + use primitives::ed25519::Pair; + fn secret_for(who: &AccountID) -> Option { + match who { + x if *x == one() => Some(Pair::from_seed(b"12345678901234567890123456789012")), + x if *x == two() => Some("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60".into()), + _ => None, + } + } + + fn tx() -> Vec { + use native_runtime::codec::{Joiner, Slicable}; + use native_runtime::support::{one, two}; + use native_runtime::primitives::*; + let transaction = Transaction { + signed: one(), + nonce: 0, + function: Function::StakingTransfer, + input_data: two().to_vec().join(&69u64), + }; + let signature = secret_for(&transaction.signed).unwrap() + .sign(&transaction.to_vec()) + .inner(); + UncheckedTransaction { transaction, signature }.to_vec() + } #[test] fn panic_execution_gives_error() { diff --git a/primitives/src/ed25519.rs b/primitives/src/ed25519.rs index e190c4f018943..5bfffc2411d43 100644 --- a/primitives/src/ed25519.rs +++ b/primitives/src/ed25519.rs @@ -224,13 +224,6 @@ mod test { let public = pair.public(); assert_eq!(public, "2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee".into()); let message = b"Something important"; - let signature = pair.sign(&message[..]); - assert!(signature.verify(&message[..], &public)); - } - - #[test] - fn can_sign_transaction() { - let pair = Pair::from_seed(b"12345678901234567890123456789012"); let public = pair.public(); assert_eq!(public, "2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee".into()); let message = FromHex::from_hex("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000002228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000").unwrap(); @@ -238,6 +231,5 @@ mod test { use hexdisplay::HexDisplay; println!("Correct signature: {}", HexDisplay::from(&signature.0)); assert!(signature.verify(&message[..], &public)); - panic!(); } } diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 4ff597b8c79dab280c2276d8a7debe6e61882b6e..745c95ccf5be004e450d5c6df6f60cf55901bbc4 100644 GIT binary patch delta 21746 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ȪFl#8SXA}muNWrC0lX(VBh@~RaGNXmpY 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 bU2exU)KcJXUz{g~lSww0ogZ#ZvXTD}*Rn0i diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm index b02b09b63d8dbc4bfda896d0256d33823ece1c85..afb2e9471182c38c6edb769cf918f0daaeca009b 100644 GIT binary patch delta 21959 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 oxD5I@0Bs670_Y^#PL Date: Sat, 3 Feb 2018 19:00:23 +0100 Subject: [PATCH 06/13] Genesis block builder and test. --- Cargo.lock | 2 + client/Cargo.toml | 2 + client/src/genesis.rs | 84 ++++++++++++ client/src/lib.rs | 2 + state_machine/src/backend.rs | 1 - state_machine/src/lib.rs | 13 +- .../polkadot/src/runtime/consensus.rs | 2 +- .../polkadot/src/runtime/genesismap.rs | 48 ++++--- wasm-runtime/polkadot/src/runtime/system.rs | 2 +- wasm-runtime/polkadot/src/support/storage.rs | 124 ++++++++++++++++++ .../release/runtime_polkadot.compact.wasm | Bin 69324 -> 67817 bytes .../release/runtime_polkadot.wasm | Bin 69374 -> 67867 bytes 12 files changed, 253 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ad94382aa2360..bf903c9e45aaa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -964,9 +964,11 @@ name = "polkadot-client" version = "0.1.0" dependencies = [ "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "native-runtime 0.1.0", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "polkadot-executor 0.1.0", "polkadot-primitives 0.1.0", "polkadot-serializer 0.1.0", "polkadot-state-machine 0.1.0", diff --git a/client/Cargo.toml b/client/Cargo.toml index 524429d1af010..8e2f3f699ba3d 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -10,5 +10,7 @@ parking_lot = "0.4" polkadot-primitives = { path = "../primitives", version = "0.1" } polkadot-state-machine = { path = "../state_machine", version = "0.1" } polkadot-serializer = { path = "../serializer" } +polkadot-executor = { path = "../executor" } native-runtime = { path = "../native-runtime" } triehash = "0.1" +hex-literal = "0.1" diff --git a/client/src/genesis.rs b/client/src/genesis.rs index 8aa6d9409a8b3..9e7974abb5087 100644 --- a/client/src/genesis.rs +++ b/client/src/genesis.rs @@ -35,3 +35,87 @@ pub fn construct_genesis_block(storage: &HashMap, Vec>) -> Block { transactions: vec![], } } + +#[cfg(test)] +mod tests { + use super::*; + use native_runtime::codec::{Slicable, Joiner}; + use native_runtime::support::{one, two, Hashable}; + use native_runtime::runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; + use native_runtime::primitives::{AccountID, Hash, BlockNumber, Transaction, + UncheckedTransaction, Digest, Function}; + use state_machine::execute; + use state_machine::OverlayedChanges; + use state_machine::backend::InMemory; + use polkadot_executor::executor; + use primitives::contract::CallData; + use primitives::ed25519::Pair; + + fn secret_for(who: &AccountID) -> Option { + match who { + x if *x == one() => Some(Pair::from_seed(b"12345678901234567890123456789012")), + x if *x == two() => Some("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60".into()), + _ => None, + } + } + + fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { + use triehash::ordered_trie_root; + + let transactions = txs.into_iter().map(|transaction| { + let signature = secret_for(&transaction.signed).unwrap() + .sign(&transaction.to_vec()) + .inner(); + UncheckedTransaction { transaction, signature } + }).collect::>(); + + let transaction_root = ordered_trie_root(transactions.iter().map(Slicable::to_vec)).0; + + let header = Header { + parent_hash, + number, + state_root, + transaction_root, + digest: Digest { logs: vec![], }, + }; + let hash = header.blake2_256(); + + (Block { header, transactions }.to_vec(), hash) + } + + fn block1(genesis_hash: Hash) -> (Vec, Hash) { + construct_block( + 1, + genesis_hash, + hex!("25e5b37074063ab75c889326246640729b40d0c86932edc527bc80db0e04fe5c"), + vec![Transaction { + signed: one(), + nonce: 0, + function: Function::StakingTransfer, + input_data: vec![].join(&two()).join(&69u64), + }] + ) + } + + #[test] + fn construct_genesis_should_work() { + let mut storage = GenesisConfig::new_simple( + vec![one(), two()], 1000 + ).genesis_map(); + let block = construct_genesis_block(&storage); + let genesis_hash = block.header.blake2_256(); + storage.extend(additional_storage_with_genesis(&block).into_iter()); + + let mut overlay = OverlayedChanges::default(); + let backend = InMemory::from(storage); + let (b1data, _b1hash) = block1(genesis_hash); + + let _ = execute( + &backend, + &mut overlay, + &executor(), + "execute_block", + &CallData(b1data) + ).unwrap(); + } +} diff --git a/client/src/lib.rs b/client/src/lib.rs index 13f881167bf74..c20c01e44e925 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -21,12 +21,14 @@ extern crate polkadot_primitives as primitives; extern crate polkadot_state_machine as state_machine; extern crate polkadot_serializer as ser; +extern crate polkadot_executor; extern crate native_runtime; extern crate triehash; extern crate parking_lot; #[macro_use] extern crate error_chain; #[macro_use] extern crate log; +#[macro_use] extern crate hex_literal; pub mod error; pub mod blockchain; diff --git a/state_machine/src/backend.rs b/state_machine/src/backend.rs index 4f5ff5d18fb2a..3efaf67953c70 100644 --- a/state_machine/src/backend.rs +++ b/state_machine/src/backend.rs @@ -64,7 +64,6 @@ pub struct InMemory { inner: MemoryState, // keeps all the state in memory. } -#[cfg(test)] impl InMemory { /// Create a new instance from a given storage map. pub fn from(storage: ::std::collections::HashMap, Vec>) -> Self { diff --git a/state_machine/src/lib.rs b/state_machine/src/lib.rs index e497a20474b55..f5db30206325f 100644 --- a/state_machine/src/lib.rs +++ b/state_machine/src/lib.rs @@ -33,13 +33,14 @@ extern crate byteorder; use std::collections::HashMap; use std::fmt; -use primitives::contract::{CallData}; +use primitives::contract::CallData; pub mod backend; mod ext; mod testing; pub use testing::TestExternalities; +pub use ext::Ext; /// Updates to be committed to the state. pub enum Update { @@ -151,12 +152,17 @@ pub trait Externalities { /// Get the current set of authorities from storage. fn authorities(&self) -> Result, ExternalitiesError> { - (0..self.storage(b"con:aut:len")?.into_iter() + (0..self.storage(b":aut:len")?.into_iter() .rev() .fold(0, |acc, &i| (acc << 8) + (i as u32))) - .map(|i| self.storage(&to_keyed_vec(i, b"con:aut:".to_vec()))) + .map(|i| self.storage(&to_keyed_vec(i, b":aut:".to_vec()))) .collect() } + + /// Get the runtime code. + fn code(&self) -> Result<&[u8], ExternalitiesError> { + self.storage(b":code") + } } /// Code execution engine. @@ -195,6 +201,7 @@ pub fn execute( }; // make a copy. let code = externalities.storage(b":code").unwrap_or(&[]).to_vec(); + use primitives::hexdisplay::HexDisplay; exec.call( &mut externalities, diff --git a/wasm-runtime/polkadot/src/runtime/consensus.rs b/wasm-runtime/polkadot/src/runtime/consensus.rs index 51666666cf165..abaa24b240934 100644 --- a/wasm-runtime/polkadot/src/runtime/consensus.rs +++ b/wasm-runtime/polkadot/src/runtime/consensus.rs @@ -17,7 +17,7 @@ //! Conensus module for runtime; manages the authority set ready for the native code. use runtime_std::prelude::*; -use support::StorageVec; +use support::storage::unhashed::StorageVec; use primitives::SessionKey; struct AuthorityStorageVec {} diff --git a/wasm-runtime/polkadot/src/runtime/genesismap.rs b/wasm-runtime/polkadot/src/runtime/genesismap.rs index e10b5e4557e03..20448eb09365d 100644 --- a/wasm-runtime/polkadot/src/runtime/genesismap.rs +++ b/wasm-runtime/polkadot/src/runtime/genesismap.rs @@ -18,7 +18,7 @@ use std::collections::HashMap; use runtime_std::twox_128; -use codec::{KeyedVec, Slicable}; +use codec::{KeyedVec, Joiner}; use support::Hashable; use primitives::{AccountID, BlockNumber, Block}; use runtime::staking::Balance; @@ -31,7 +31,7 @@ pub struct GenesisConfig { pub block_time: u64, pub session_length: BlockNumber, pub sessions_per_era: BlockNumber, - pub bonding_duration: u64, + pub bonding_duration: BlockNumber, pub approval_ratio: u32, } @@ -50,36 +50,42 @@ impl GenesisConfig { } pub fn genesis_map(&self) -> HashMap, Vec> { - let wasm_runtime = include_bytes!("../../../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm"); + let wasm_runtime = include_bytes!("../../../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm").to_vec(); vec![ - (&b":code"[..], wasm_runtime.to_vec()), - (&b"gov:apr"[..], self.approval_ratio.to_vec()), - (&b"ses:len"[..], self.session_length.to_vec()), - (&b"ses:val:len"[..], (self.validators.len() as u32).to_vec()), - (&b"con:aut:len"[..], (self.authorities.len() as u32).to_vec()), - (&b"sta:wil:len"[..], 0u32.to_vec()), - (&b"sta:spe"[..], self.sessions_per_era.to_vec()), - (&b"sta:vac"[..], (self.validators.len() as u32).to_vec()), - (&b"sta:era"[..], 0u64.to_vec()), + (&b"gov:apr"[..], vec![].join(&self.approval_ratio)), + (&b"ses:len"[..], vec![].join(&self.session_length)), + (&b"ses:val:len"[..], vec![].join(&(self.validators.len() as u32))), + (&b"sta:wil:len"[..], vec![].join(&0u32)), + (&b"sta:spe"[..], vec![].join(&self.sessions_per_era)), + (&b"sta:vac"[..], vec![].join(&(self.validators.len() as u32))), + (&b"sta:era"[..], vec![].join(&0u64)), ].into_iter() - .map(|(k, v)| (k.to_vec(), v)) + .map(|(k, v)| (k.into(), v)) .chain(self.validators.iter() .enumerate() - .map(|(i, account)| ((i as u32).to_keyed_vec(b"ses:val:"), account.to_vec())) + .map(|(i, account)| ((i as u32).to_keyed_vec(b"ses:val:"), vec![].join(account))) ).chain(self.authorities.iter() .enumerate() - .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), account.to_vec())) + .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), vec![].join(account))) ).chain(self.balances.iter() - .map(|&(account, balance)| (account.to_keyed_vec(b"sta:bal:"), balance.to_vec())) + .map(|&(account, balance)| (account.to_keyed_vec(b"sta:bal:"), vec![].join(&balance))) ) .map(|(k, v)| (twox_128(&k[..])[..].to_vec(), v.to_vec())) + .chain(vec![ + (b":code"[..].into(), wasm_runtime), + (b"con:aut:len"[..].into(), vec![].join(&(self.authorities.len() as u32))), + ].into_iter()) + .chain(self.authorities.iter() + .enumerate() + .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), vec![].join(account))) + ) .collect() } } -pub fn additional_storage_with_genesis(genesis_block: &[u8]) -> Result, Vec>, ()> { - let h = Block::from_slice(genesis_block).ok_or(())?.header.blake2_256(); - Ok(map![ - twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => h.to_vec() - ]) +pub fn additional_storage_with_genesis(genesis_block: &Block) -> HashMap, Vec> { + use codec::Slicable; + map![ + twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => genesis_block.header.blake2_256().to_vec() + ] } diff --git a/wasm-runtime/polkadot/src/runtime/system.rs b/wasm-runtime/polkadot/src/runtime/system.rs index a3d3a3a03beec..3bad5413621f7 100644 --- a/wasm-runtime/polkadot/src/runtime/system.rs +++ b/wasm-runtime/polkadot/src/runtime/system.rs @@ -43,7 +43,7 @@ pub mod privileged { /// Set the new code. pub fn set_code(new: &[u8]) { - storage::put_raw(CODE, new); + storage::unhashed::put_raw(b":code", new); } } diff --git a/wasm-runtime/polkadot/src/support/storage.rs b/wasm-runtime/polkadot/src/support/storage.rs index a0f2a93b495b6..aada8c8ae0546 100644 --- a/wasm-runtime/polkadot/src/support/storage.rs +++ b/wasm-runtime/polkadot/src/support/storage.rs @@ -142,6 +142,130 @@ pub trait StorageVec { } } +pub mod unhashed { + use super::{runtime_std, Slicable, KeyedVec, Vec}; + + /// Return the value of the item in storage under `key`, or `None` if there is no explicit entry. + pub fn get(key: &[u8]) -> Option { + Slicable::set_as_slice(&|out, offset| + runtime_std::read_storage(key, out, offset) >= out.len() + ) + } + + /// Return the value of the item in storage under `key`, or the type's default if there is no + /// explicit entry. + pub fn get_or_default(key: &[u8]) -> T { + get(key).unwrap_or_else(Default::default) + } + + /// Return the value of the item in storage under `key`, or `default_value` if there is no + /// explicit entry. + pub fn get_or(key: &[u8], default_value: T) -> T { + get(key).unwrap_or(default_value) + } + + /// Return the value of the item in storage under `key`, or `default_value()` if there is no + /// explicit entry. + pub fn get_or_else T>(key: &[u8], default_value: F) -> T { + get(key).unwrap_or_else(default_value) + } + + /// Please `value` in storage under `key`. + pub fn put(key: &[u8], value: &T) { + value.as_slice_then(|slice| runtime_std::set_storage(key, slice)); + } + + /// Please `value` in storage under `key`. + pub fn place(key: &[u8], value: T) { + value.as_slice_then(|slice| runtime_std::set_storage(key, slice)); + } + + /// Remove `key` from storage, returning its value if it had an explicit entry or `None` otherwise. + pub fn take(key: &[u8]) -> Option { + let r = get(key); + if r.is_some() { + kill(key); + } + r + } + + /// Remove `key` from storage, returning its value, or, if there was no explicit entry in storage, + /// the default for its type. + pub fn take_or_default(key: &[u8]) -> T { + take(key).unwrap_or_else(Default::default) + } + + /// Return the value of the item in storage under `key`, or `default_value` if there is no + /// explicit entry. Ensure there is no explicit entry on return. + pub fn take_or(key: &[u8], default_value: T) -> T { + take(key).unwrap_or(default_value) + } + + /// Return the value of the item in storage under `key`, or `default_value()` if there is no + /// explicit entry. Ensure there is no explicit entry on return. + pub fn take_or_else T>(key: &[u8], default_value: F) -> T { + take(key).unwrap_or_else(default_value) + } + + /// Check to see if `key` has an explicit entry in storage. + pub fn exists(key: &[u8]) -> bool { + let mut x = [0u8; 1]; + runtime_std::read_storage(key, &mut x[..], 0) >= 1 + } + + /// Ensure `key` has no explicit entry in storage. + pub fn kill(key: &[u8]) { + runtime_std::set_storage(key, b""); + } + + /// Get a Vec of bytes from storage. + pub fn get_raw(key: &[u8]) -> Vec { + runtime_std::storage(key) + } + + /// Put a raw byte slice into storage. + pub fn put_raw(key: &[u8], value: &[u8]) { + runtime_std::set_storage(key, value) + } + + /// A trait to conveniently store a vector of storable data. + // TODO: add iterator support + pub trait StorageVec { + type Item: Default + Sized + Slicable; + const PREFIX: &'static [u8]; + + /// Get the current set of items. + fn items() -> Vec { + (0..Self::count()).into_iter().map(Self::item).collect() + } + + /// Set the current set of items. + fn set_items(items: &[Self::Item]) { + Self::set_count(items.len() as u32); + items.iter().enumerate().for_each(|(v, ref i)| Self::set_item(v as u32, i)); + } + + fn set_item(index: u32, item: &Self::Item) { + if index < Self::count() { + put(&index.to_keyed_vec(Self::PREFIX), item); + } + } + + fn item(index: u32) -> Self::Item { + get_or_default(&index.to_keyed_vec(Self::PREFIX)) + } + + fn set_count(count: u32) { + (count..Self::count()).for_each(|i| Self::set_item(i, &Self::Item::default())); + put(&b"len".to_keyed_vec(Self::PREFIX), &count); + } + + fn count() -> u32 { + get_or_default(&b"len".to_keyed_vec(Self::PREFIX)) + } + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 745c95ccf5be004e450d5c6df6f60cf55901bbc4..16c8ade8e383ac81198c7957453b3791865dee29 100644 GIT binary patch delta 24622 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

00^}6mn_hCbRT+Wq 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 TCiJo|47!=Sk%e7HMppelC}||Q delta 26020 zcmd6Q3v?V;nPye>L)~57Qb}q_t%s#sEn9BcvLri>?8r&%N@B+*F?j+eB;c2vxGl?$ zB`403Nokk>Aqj(^%-9n`P{0s#2w4Srb_`=cK$b~D$OsY^?+yn%i)W9S1A~UiLSO>y z_uX4n-IDD*fHP;Av2NYhfB*Zx|68{@KlyO3=F7DRaV8S zs*(npy;FL(T^rxMWpHrMHmxDLW8c7lmdgwr7}&OdWZ+#}(Yi}p?e!RS3!LP>{X_2> z85kZJ)-Fq0y5?wR>P_~l)~0#+#^(Oi*Uv;Q{-75hYF#tY)@LMy<`jxfy6EVAhK7pK zXLJcZtSt5!y(mv&R8DndWk&)X1vF&6fuTjwr!;GU_olC1?AA94%b7BYLU*P#D=TY} zqG}6UMx(MNQY^K|F=!84?$bGD^sF&x564WYS!HA1ayICvH3_H;w3>$Y5YXAP66KR7 zZ~FRwiRv3BzxU1S4L$1>p6S8gP0w6~zek?w!{2|DE#|XqU-fK9CHAdx&%kWCmG$;K z+r2Z}WID1f3c^LJOsp*oYoTU3oubMrpp2qq9UZbkRQUshh{%qDUv{eUu@0l&HSTf1 z+JX^v#w&K^a{%q>ZS~&QhnDA$V#~Q=K6;t90zAz*tXsu=x>Waadsezfqar8tP7R~@ z=u7}=xK>O8Nr+_7Et>$uEQ8BYE}%4& z029hY1gOLSLdgxNj_OY)Bopusy>@fHRs?{?K$~$^YD52^rldzURL6eEt4rWfoyeUGQ}p4 zt^RD8df96oSrC62!Z2F`hDR=<1UxZvT_(_|_2iV7hQKJjC>NN`Y?UJF-S0~jz0{o@mB*p_ zmqk}ZCL&JMj(eBhxzIQs@ov3y?d8yPkrJl0PUH$8Q$D#i1C!KgJRTEGBH3&=8EZs> zea9kKvWKE#Qyo6t4Q;%1DCtUBAlPLBCx4;JY8cF*0G4)l-9#XLYs)> z<7+c)3oKF+kJE4=G>m~p1g0tN_kot7Rg-<7BtdW<9veEB`G%3JPV2t0^6h2{1ILt% z!McP7)Dw3#5&Mhpvc0|Uj=8>RtHx+W_Iyn^nti~b*6+h(c2*y7sPp^qSReEen;95j zSiPFi?q);NT3_O$$ia|P`eve{LZrN(-6dQ~!I&YUqS}X-5VihOgQzQCgVt|aPs4?g z_LZi9tMDCIntlrPH0vUbb~>~(^mNL@CFOuv=-6VuV~e@+;b~2%7EDnOQ2|*h24IpB zZc_Du1U?nXR7J%A&%jU6p(!bz)dRAT*-D&cj|-tIBVcHiA$&eNLjb-Xr9_a?R&iDj z1;p=3ggt~j29qHjtnZL0C`uAJ-DA#w z(?!vweEdo1nIcO|5xT=*F6X?6#$;HV4u@n*L!LupG#v7DI3yho5%E4_f=-!EyQL`H zbTC{ru82r?&7K_BKN>GhgBBja)DxWg65y6J>!+xdy!dIvriL}M&+ z8X=uq(yn_kAasHxHC^>9oC=*JI+&8>EXJcb=ckyh!W`AobeXvCF}qSUJ!V&lct%ef zQnDS*w;T!xW`z&{P`KqFaOqEDGcVCmSpi`7gaPF`HW13hI88cu^G1Q4}%;^3i7Zz>T-=Bl$3MXNw zB5R<$$qktb7Q6BZXZ6NRLL{6uFkVh!V^HNa?Fc!sK|76!DWA`AwC+u{;Uv!!`Oe}(f6lGs^hCt=P_XW6;b9aVB<|bKtqy#35=S=(tEK$moD$R)gH2A3B2;S^~McFl}T`YcR!M zUIC;-_W>$?Qq|N1iGTtc3?YLRe}f@v|HL%dKk-tC$}w0HG%FYf4duXK8mz?_KogOm zI*_jgSOGgldMT`EfM#J;+Qw^PwGCWIL1Oto0Ev&9Bw1QIRYJ6*A_c6y>+WfBU)G9J{O*J7L^GNR?77Re2xU`N1XGa&LR=Gk zg6?VpMJ#h*e6tr>EimZu1ku=&Aq@FY&$TdY(pOFSIL>!eW3(aB={ZbZ`R%y;F z&|PWjG@uEyfN@+%VSp`EatoDCnmdRC{jS|rY>CTA0T_%|sO&5BSyP~c^i7=*bmgNG z(noAV>;$l-fP#Mh;XbkCZ{;ZW2kxm zGk3k-4M3!}R5e$@U@%~;mybY`;7gyD=g zINvm^PVa&F%{4QPj_ph}Ie(=)r<$EJXr4Si|Ael$Oz!Wv)QC+bo#~`^yfE#VU6qLl znVEE=-Xon2*)z#LV)=s8EyWJr@H^n#IdPFdc6@9Iue5Om6^@cyIg{nowJea6+O zy<}l~I5zPpjtTFEo?sj* zAM9Cf91-3(dcLvXcmh5qY0U>>;|V1x$haY>Y#H+(z0dWoXvW^Ua3pgW$RXLslRCc9 zov~`~x4rYCC#rFN)4Fs?uOvG{u0CVFhzLx>p@Tg9u~6bvD9u)Qus#E)63$Gu_wJ=# z`U3Ch(!bGby>~8qvvI7(dtzBTnr^wkhX(&eXokQ8<`q!#G|56K0iuJ@30hNmV6ZSSEIn^?SbqM#r5 zKJdk*-iG5FaEkM$FD{E7wyh5Dnd777)zL5hd3kl^mkyyi{UzHxjlrP0ob$?;KD|6^ z!{u8Mp|8!vz;2R~=V@@0*sW$FdY-VYcFZWB_`Sco7vOF>VY_}O!D*(ZnP1KrtvEpp z4tr*_U3t(jD%!wF2Ug}4+gc&o3WjAHEE0Arx?q+Ive4GESfyR9YHwDx>s4_hi+=5` zs(71d1*_aP>Y-JMwv$i|L^o}n+O>JXD6XF(B>U7OQUw29WjqFpU? zyA=VGq#it{G@`PCFhc9oG`}lV-UXvn8dr%5;};THBQ{_|RoDjC`Th5fxFA5t8d3wf zK`kx7JZ`^0vXDiCC}`#o7S;tTupUQlCz0{{Q;65f`_sid0!5mCHNUc$Z!AMpan_*!_y#N5OFtea6iw3Pnht6gg|TC?l13;QfoQSugx;w3clnD@sVe4rIY4VL?C& zMwj=m@6X}zvBaU-$|Ge{I4;prTe<(YRcfU~%A|oY)BE%mK!B9ZH~U*P{fkb^}TvYUeJ&1MssU zHzj>2i7coCsi>jI)+(#wi>xAyxBLT3-1Wj2IzwR0T;Xa`O$5_CcZd0w*SAM$Lge~1 zA+=JrYJ+WG;>#B5wdWBkn5vRc&EAZ6(FY3EXYIhd^!}E%bJ{d5ke;-6*Zm#(j5mJ& zTaANx@8$akjemTXx8ngDao>Fp+@!Zp{`i3*L+_ou{x9#*l_PoaLu=95G)~K!Q`UHnMP2m#uu21$w$@f_zj2gl4jP3DcOMLU<6jf z2sEpPuF`O?;>aZx>rsaZ^saqq*mykeO&xjLWZkDf7io`)-pBHb9rx-?+|lhW{96JJ zFQ#NKwqp4uYcr9_A0Hiv>OJ0u&;L9i+vMse))`^t!HHJA^=NyaF{NV_SeU0+5+MsE zP_mYL$DaIAIR2q8B=oTI*~y02oc!#u)2@>MIu`K?mk@~jF6rks74IH6JN(T}v#uq}3wyJ}0c z&$QE^VZ_6_T?1Iy7gnsIo%4==VYgoG{oAAKynp#{%9U`==ulI@hNoW)rqz%*mU8op zMHlUU4}2Yba1UIZ1ehwqzVsmKx3efJX|Q_WwqUP%kPX_4P*l@u^*A*!S}1B^vQT7; zHpQ~8Xg8y%FS>RM%7!8gUk^fi#6Ud^DB4gUo)9PyPuM6BPvlV`o@hsbcw#;Z#1jid zmu(>~sD@?NHTs)A6t$|BRRw&sBnQc$33zDM7RjPPz(KPLzs$n7j7^?3af1t?vn~Xs zEhgX=4hc;2KT~+zb4bsBrtqXGJ&+I41?lmg{KAM585ycP8j6)Jf4Mm z&gNy-6Bj6O77>h!PzR$}4`~!0^D&td@f-~6!QSc&F0d&3{FDK9AmaVoxAU${E;RF} zQ6pZK3QQptKn5B`MnhW^rMlrjkSQ0A0*OxrH(Nk~Jt#X=QD8G-(0p``6~YwkN)7Lo zTaKuKMxTpqR*+!WbyQ|CSb&i7$Y^@i^L$cZIi68uQJ}|?ljP~LG(I>eQ5%Qxkx6-s zK&-q`1TjL}6PsmwFd)klPq`Cfff!8gYn6swvev<3m9|I~T`c;wZdLSvpm973CN$Vi zr&h=(n8`$iEU=4CO|Xf(K%r1}Sg6PruSp7qt3gzv(yoEnB1S?pti^Lw;FT`%I+mBD zAo)oJHub{KaC!pqJ_-$aO$8DYV$1FhJdx)W&Z4lbD}3t46DegD z`Y-QrDRlDxsY_9H9U-zF)CO$|ELLe z_2%)ii_FVOLa7QaB0v!Eyi&M0k6!_;mji&Gipi~Xy27+BNykkjt`!@3vi>JR^GJR+ zng}EC{^hmtJRh2{Z+{eq?kb!a&!*(Pb5Q&vF~s38lK*lVLLelo3mQZlCxLI6*N^|{ zFm&O8a4KhA0B##Trm);Tx63j8Ll8X--T>IE2&LrzSyFi}ZWB=)cvH3|e%1z>)0KI= ztRlklWF{|tq0Wwrahmcv2n+oy*P<7-62f>T{6^&x*(Y*rdAzMDYZ7HHA+3pnBTM-< zcUE~Jyfh4&>dv$y(M+3&=w^_yBSVr0_uVgkOJD2#=Ecp?X&%nM^Lrfz^RV}Q|3yS9?>Kpd`J`?{ zVCsxD)*|oT3qKvL(#)TGL)Xs(JX=Fr4Q3h6eTcrfhiduuc4{c(95a4-P90axS1oF!Fr94>nP8FMtsW$Jo z#a?$@$V2-H1+na)RUWD0b+lX}MCJqihULb>GuBi3t~^q?C?a-vt#Msgm+31a$fhir zit#J}sTA`j{vFrz2xusuT9*D?cUrsyefwR`bB?Rv8=%xcZonejU|}#v26{3nLk@<@ zam?Y+hxI((iJf2#<=rUIc|d5L5e+Gl1i%*&DyGxrBf?>ZZ-{9L;6QPUsAF;omr9Qd zC|uajBqM~1x*W;AVBNbJ(aB{|B8`;GW1GkYm)lhefDBO`9nSx2E9yW4@B1s-wgP=P z^#Bae2fh*xN}`X>1DFnS_}ByWqID$^IIbh8L^*|JXxwnK6r{0qJ7TP1`w4lh74@!J zx!jE))?%^@A|GF1tz@?aLx&=P=*q&yxd@j*>;R-uuF|*()*tcfpY+Qkvh3GBFDJV?oP#gpU*+%lTxf^+@UQGkjz`SlZlUK~p*2Ko>jkp1i2B<<-#g z{`W=8y=?z=H#T5AvBj+@4b+oDBC$tIUS4P9@7Gyu5|A@YLd3~A$ej>z`jx0RwI=J5 z43sti=H3k-Hk)wPfD00{nq)c^T+1R+jZG`0dPxNWjF<>+HY&~l2Ci9zFd$b{C?MrG zA?XH?!?>bFzDPy@3bK=M3Uv@r;^8%^P%Sehdr4L`&N$?WVMe@;#JLFJXLMM4=vZTGR_cwMBjl zH!(-z+&@C(a0sOM3soV$NIaxIL|?aB2+K_qv6i)&MevVOhtrwG=`It1DS^RZG{$UJ zd)Qm8#-`KkPA-%%;?drCw z3f?55M}P>#MA}=t=E8L^FQE5EblbKuLuW|(K{MytFaH{~>W5Zh32EPa`{jM2zfq6R zwN*w*_oexQewTDqSu|;9g1h49vQ;Hj4sBIQdqc-kvWn-nRhc=437C}I9>p{mpU^Iz zZL4610y9K81%%Rt`oLD<;)NRw3T>4U-l~g*7x1+3%AVYFPTJ?vR!ci9ZLHjWm9|sb zg^xUsm*h}oX`{R?Ur(bVWUPabKzI0pf~^G2B`g`AaqXJ4`U3s*z&!4+F6Mbsg9SX89rN4d!t zMQnxC26R{jEZiB%T}BzMxT-l{E$VK}(C6aiBL0$z;~lQr+O>G$jjgTc9JMunQ~q}R zjrdy#koR%-v8F4YtL?NkQkK;LkwRZ84J6sXb^`jpp8ZtF{ov4^djwx*{3uM=(wa** zL*!4&uh8u{{+dmhMkp9$@6SpKgI6^?hGgi8+_9=$V|=kw8Ux`|x)xKUy_(X(gAD5B#cMMQ@k)S!%0?rdDWp5$g4TkvQHRMlkGPtc zLKHN-fk(rJOfyhMq$1NOq(QVWO0IeHfsb%pNQ=C-E1TkEy))%qdSwHozD}AfmW3lj%q=q|d`?B;m4WMdSb`{fV*&=S3YyKY`j=&RbMSty;jpkc0Ty8cr4r1IZN<>0t+RSL$08-iN+kriWk9Uf~|E2IeNtU^W^0$uhW zpw&Ytxh@k=3sclRX5-Ki-ym$1rj{GQDo8m%zSv07MW&28PX7G`IRL&9?}=DYU=$*X z0$7rnH9idS+ZFAptO!WR`zk`s(?!5vF|W<1`CNl%z)SL(Z$vb%TG^?&8uRiDq!~p5 zCQT}jOx7z^N`nSJslXHVLH~>=5JzSsc=WxuO5+irSW6Y*K%KybjUs_2RSwv?wTzCG zW_dk^x%8J>pw`Gd{{-6a+{+``KzinC{cM-xa?j+nul1-%!-uk5ba?$n`OqYW0{_m) z`pbBc6SnVe?!@1MZ@LV%p;xsGP$=&Iu*~q^xM`3W$$K{->)oLzq2#U2w8=YvcuphI zu}x>Gt>GO4zWMvTe!Cq-R0|=f7Zx_;RC#ktfZA*RZkG<*^OURB%xotyTPnp$^5nc^nYgfcOrly*$9eeS7(yRYJ-u zEIV=LBSSxI7kB&>)&{>gklsgFJ=$@7m5z6{AhKcNV!B2$J4@H$qY4%47^J2m*sO_q zZk2wRwwB6`7mpx(8CZ0!(xousObo`AHjbxPSodB|qB*O=@q76cV4}U3ofwou;YXu* zu|hSadg0|}c(lXVRP`_%^+P(#p>y@!SLuKUa>^@w2>7sV=OkZn1sWDQSniSId;_Io zRPq4Xy)>7vN7X=P2#giQw5iWvLm>?i{J%<(erXbLG89T~o00tFa8DBC&q9NaPxP&cTnlq&e0kL=a z{Tm-x;zgz`k9Np&=P6a3R0T<|zAw-?NbtOXlM-{vu@2BPEpK?MLv!aPc|`6&hUElx zW!RxRC}^$;V<$f=_a#KSz~FdH2@SkcWKO;dnZf#V62een0Hc)gDH#L|Tv`YwNVSr3 z2Y(2!MH4}<A@Unlx+i5J;dnTVquh8f5e(ty~R`Wsw&dOKg zrhyPB#(8^g@?SH{VqQhE7jJ`BCfDFi&s|9yZ+$+N+=l1hCx3#!KS>SZ?_13s`jy_7 z%|<+b-)zO0Uz!i#)m_<2yr}nTD;%H`=6U}H?<0G? zyK^nT_OEkJ_rEVOn#zA}A+jsq0)|SrsylUXm2|=Qmw=m3c;7yGg`2?FIChqvPj`$v zaMGZUQ`!m`nE(dQO#y(3?HJ6a(h0;4xH@50dy zX2wN}a}?a<^|QhtuZhe1nDuB#$p-wj>Y7|kk^@zDmQ$0sl!iqc&#|a@jkU6`w$_}b z9DQHD9-H7U&$HlbE%&Nho4p*PCL8$~K5ZPdK`y(|SVICX+mLTY?v?^oK=j&>JoV0| zBHp3pTSYyKwj1%2DES;lfu^+>-q_3=!zefc@9q6TP0fIiBNfnq{#Mb{d}AKR2Pu&i zK3_FFkR`QP!c}Y3`qOKh@pWF7l*x&D%&1kXpt-dSF0sjRA^3~ZLOCo{hh!g_LV|l~ zz<`8Y$PD*l`s>s;=QHTki>_$E_3#dOTOB`y;amWIPM6=x> zwW^*g;u}DClB{E11x{wy2I>Tc*BfNAen%dk88R)>2?*2xl{Be@uF?|FNh&xwW7UBI z*kZP%7;1);kQCpYW7iG4>;^}-vnE!EiR|r;&Tl$3USdEXEZ?)^dlZc`aU0aG#n^zhM!A7hIYZT$nUJA*^}0ldBLQsq6)*d~lFKCykL*zC?M8lpfxMkunxAgCgi#3sblhb0vao z0}ObSSxo>^rqcuh5%i@;O$B%T8Mw|L%;ms2!UIzo^umyFEv#QcSV>PB$;BLmNg)UT zJ|nPk%q63~eD<15Eq~JnM<)o}CA0iM4n9XRfacrh9UAK3jLIAuZmVMz@JIPSG6479 z$)Jj0^}qxt(2nlttacCuwu)Pb1?`0R#`)tSmI@(&WVFO(3~CBVt9W)k{)A#x&YwV} zO8kNHlrIMUxaHOy?+t=(pF!0)1PJ6q@u%i&d`Thj2VZj7l~5l><@tK*P@{C~Nx7kOoX>%8S5hILXcEvs%D*mQUm4z zBMM>xDvuz`&Do7W1rD)aLtKK*kwZ5z{%Vv&B_IlC1E{4;m7JTfn+OodA?(6K9Wi3e zZsQXieE1{nP99-5fP?D<9#HN^5>Z)C(dZI-qhM+lK!;(nv|IvNRUQJMkjH)FEPL~b|)fi)4=;U)vA zBv~Z8NAKCkAzTo_E>QNDMG7Io))HFSGaDqfYVg}BNyjv3U(26xfyr-Xn2wi6O)Q%z zL;)(K9*m&`-Hg?23}S&nIb~BMCW&>;Ha$PW*j*AmB9TI4y?_8IUjmU}oU1q^)KAbT zGBKBO@rorC>;?R0fCDx#Jp~snbkg|4c(=T8my%fGGoZhcpex7weHs(2~?$ zlc`JBBjy7P9LKrnXtco~e0hQsifb}i98wCMRtT~vQzx1-iXuVQtCI^JQXm@HC*Lfm zcsefA4uk?KY9NC2-`EbQf=9VCJl+WVLB*2esP8VK44kL=Tc;~PMP;qDyejg9MzW1$ zlD=?G$^x$02?zp2m^=gWKpY87g9)@%(x%Xo6fgIW%zr>}DR7{1xr3zPlp&cskwHwX zHrvR}HcCOmaL8K)1y<^gzgd9s_g&g7<&vmhgPhLq&(qEcoPWIPW~GcO5oNq2Nf2xn zbiW3PU=CT~!(D_f4}9gLE*~H7f~2U&6C9u(AM7IHasVD(a6&#~L@@X?epK(QR?xWK zbN~{f7)#kCy=}0Q+2*JjZ^#3tyFKa$ek?2VQ}^^S~a%+lDV|=2a%6 zv5G`o!##N%(I__6`;;LGq*-8G1G7Nm8`8p0ju8!+4gurqWq%$n)>ohbKRw5IO0?dX zNjM2Kz*_=P5h5SV-QeN_VxW`e#eT&+OxDo=iGpLoff#;WYhD^D77uV>9hlYQ)LMa! z^W~kNd*SE!(8_SKDU8KoX8pEQxn)4K7FY(#0DT;OWyy(PA;ji%P>?5JDfM1zWhtuHdy7db;y0Bf_VPer9-NpHLmwz?pwJN8^Z%4WK(}Z~8L03)Li$Fm?8=o)VaDuaA3o+>$=^AWebTBd`9oZV*sv`5YZ75#@3>?qBD?00dWyp`d=K+~KeChY ze;B?8A)d0}fRQeP%Ta)V-$C>lP@e0TF~|)$l*6wWmIdE);&((cL9ZVkmhVD^hh=*p z!VG7b>?`X9!$)((0HT%wj-Tkej5@{nGJPecFl;0#1Q*hQFo`mjC{OtkO!)%*5+G+t z2>6jw$_M$a4I(SVn$+eERRr!(ug3XdYt;MDKfKdj2UWruy8pf@PQB*&IP36K@-v(W z-UOJB_I^so*Q#bzG*}w0F_=a_q%3P%XR0;%KeTEFpPXK^dT{5~ZF}|&^z0iL-ak0f zy>D1^p29aBz3ArfCjl}h$5y?lnH9r#4fk)`vmHNrrG2zfZ#PDD?|=RNk|if}GdGG+ z7vbM#{AMGiF^`Vw&>V&=xs zi#LYhsLR7qry_^W==xGI7BzFHFba`LIBH!uY9e~*I6j&YKftJ7P;61zs14z$(b%CI zbbXb3Jccb{6yAx2ur`LHremfKww#KY)!Vl0-Lh@x$X#O39RvGz4DPv8!$&Q^19M68 zUXZ*NWg7KHl$!Hk{OsOm(VLXL6LGT^Ts-uD484ZG8}@^lZ*Lzm-aWtA>%5qPh@p}AeIA3< zPENz1Tc}l{RiFeCS}#fpYzf4@ra7j2qrVvR_P!MLKJoAQTMwp7(4NG2C9p@*W^M{= zaJMrkNrTdEPo&MlwP+=pn^AV497Boe+BixIVrk9OY4ce5nnJF9;-$QExU#hNSHiU? zDoa!w9@!UCZMxDlx85}}Aa)LIA2=W&50zfq|6SBRR%Iqcfjz@$9IrCtonp@pu~~B_ zs!SclR29hGt5<>A^{!=BZXLLF=a9Jg5-~8eT@*0Ig1)1Q36^PfiaT!`7!t#SJGbo| zx|Lw2EVEwh92R@_j}Y+IJ^P2Yqb8R)1$dY3*|%@cog4R$tVIc>n}ONr?uK9j+8Akq z|LsKysnfF1vT8Fi<2P&gfiiPG7&5;JzmHaJTGQwtu|EnyR;-w=rj+Dn&`DMcbPAN@ zzUGY9cu)Rv{`&D6vqo$MdLy?5}KeqYSAMlqNS8AF+ulb%BBX4JB%Rfp@Gsxh;N zzLL=ED@SY1ctGQ^TF?1a$1TTdP3sh*DEFGq<@)$>kWz*>ZWRRqEAP8!5JOqRq6n4DK7)vi&abj4T>}@ttae zia{x8wMJ2f}+h%S8fQaifO4_F~3uK?us7>34{>jiA z+|%cnTrzI2*k%Ic?Z0#9V84dDXmB#9@jsQ|Jm^=3_YP>zLBBGvZ;R$U91I)4up@qD zXc)sD_bYd7LC>+gnb_93XQ+S6{t*B_kq70m1zLnLlyfMbSCnrj<=rFgW@K<+NW%xE zz;9rf-U}cm+JPTxvg>$I8N^yseg#se;fr=PY-kV=rhN!Q2Z+Q;bkVo%-M0tok1plt z_M+=dJM1%zG4OM>aXidMaCAP{j@A~SKMLI;S2y6F;_6}a3iQq|>%AfDo#0%|DU|hY z3wx*Mn}r)j_Uzko>wws|XU~Y(?LGC|7Jc;4e~swv?)U;THv>hZ`wP|`3g;eQ0Qw*- z7y_9=1&p1-*zU5i`@^v((L0V_dix2;5X+IUcZQI_`>hhv%NV;CV;8t(gWrQ^dIgAR zhiR=rH_gFCuuAQ+b-cp|A(?fw!^~M2vk-m3aszl)1e-$dG?3^k>%A@PJ&E4E=v_+h z7);(7cF!F8a1`G~PAp^?q)#9ESyW%8j~(ia>0QQD;m{Kay~CI(94f~3PGh|D&|k## z_UKfn+3o%GcR6qRcR6FG)BBg-bsOW0yr$n5jOj(*6~7n8%p&Df7gGegrWTv&@V^HF z=L$($Y}Rfc7#`TSbIah);eqW!{>MYmF>~mvalOrbunV>l_Kn1N4F7P*22wp-*7^h* zdS&b5Xq~~>*#taM*4iJE^|>ynKgLq>rcr{X+B2{=%7mT{;8R>bj7jt40;5aJ_Cpg1 zy`^V(&ps7dPAoB7whRORk)3;n#EvaH2M4zIi`_f7({)LenqJ~taARf(sW|`t0aOSw AKL7v# diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm index afb2e9471182c38c6edb769cf918f0daaeca009b..9aa36684060125bbb17071c326801c0143fab754 100644 GIT binary patch delta 24592 zcmd6vdzc(ob>OS2yQh1)x@TJR?0NR>mNcG`MkCqC8d;Jhm2AnDWg!PYRuBV{<-ykI zX=yCv#Bm7_;3NhHmxvrRIwVs+(5j*jfQe{AI4cTu{>y0SUSj~&{%|M1RTW4jORx2~!`bpQT$kBuB2J8ZqB zzF=FP(2bc|GFv_ z{L`N;v#$-V_{MsBU2yL=%641uYv0(#^WT5tZ~6V!OMCg<_|5m&Ey3w;cJTbQZ}!sW zufF-~mw|eEP(wYDqTPr7vP8Sj{pCJ?vE_Qt%r6XB?myQ#S;*^wWWSU2j-~cgax0vq zvtBt~Vr$+~cE4qnUC%0~RnD_kI0cp4kQq*7ykt4!te^c)xn6R#lJHWS>6r5#PK

1E1wiS@q9C}&GPp&XUjQ*pg@Tk}c!t{<&rz5cEF6wfF9Q7XWoPT49m zTB+~1c6;BqXdyXQWjE*3$`vRX176juY+(b>)6Qr(;POISXY@F_glS~SJxsNq^uB6Q z>0KprP+9M)O%cKdfERX^87v=F*;SUMWEynVJuL(L^}_%HDFujjVUZ;bbU71p9VwuKH0b)y zD%R#5-#N_h^WRY`kPL87vTST+GiD{hOlY}IC6qi?(#l~-=Fi%65VATd+XD4nFL+?# zopw*~=L@%W{?Hm-YFn!<=-@p#s_MO0to@!n=KatL*7d#3Aqo06N%Ft@{?R!-82srK z$0fPF|Dz;l{;Ge#k!)e{QQ-aR;wS7%aK+$ayK?5%!K;(@{NPuYeRADYgE!z!GIaWc-Xq0nSI5$(6Sm7*Znb&&-=6?(6W62fHN?p=V z$&Hi%ol4Y8_38C@=5mITC09!E@ zx-=)HEX@^;BAv(u3)c?X{lVMT{=VHBWY)dac_kNYUpJqk2iJwr90Ltpb-#X615j7w zm;$3IO6mITb&HZe%z?|#(K~N?=i&3C>)&Osy;u~IsGM25Dyx#RR9%+8tU|lc;}%Fv zPAq1j>?-txd`v|abtd#;k z9BWMl2FO?>cbXx$D{G0hyxeFerj?avSM`>IS{G1`MmyO2h0>kdE67-kJm?BQ5<#At zm4*xkchSFv7U_Ewq)3jz2APzFrYP8D8;wKhgQENsX#U{EFAN6blSyCMloaT#TUKoE z;jY3aX<8_2IGHju-e3(UinOv;SlcC8Z80gyz02h8GRfVNtg_x?l6#;PAcT#D2GWpa zOmM*3QE3&cQSh!cJWD}bL&pJYyVS|FNo0<+fS2eGFXLH-Boq{;0VPok{>SgO`GVNX zA}XTL3*L9+afN>TKh@G#s*isykK(h$^ZA>oq!wZD)DoB(9k48e?q#uToP%aCI=MWU znB3;K0YK(lL`)%|p04Bzqm{XaR%Skpc zvQkmMQ!w$}2{Wx64g9!Gwj%Kj(ze`gCT=%$o3J=DX(& zblRJnu;}YcCY%!1F=3YpR~kplx!|Y2-~mgslLPu4=T|x+=KmnN~j&D;;BC*h4NG-6H44cx$^oWp5B^OmFeKD)Ut9ZFw=3r@&b=Awql7W|xPMpR&vJiqS^T zBJ@>bUy;B|WbP~Zs0M>ysf#k0{7U*#qhIkGOrcC-?t&JT5;_2tjA&sq%TO|%pJmcn zNCVBw%|J9ZWU61Y#%BeW>t&M0h{z8vJOR>?q=&P27`k#AScH1V_2rqZNZAFQ;frtSG6kdeq= z373e-njHxdj%B5>R@R)TMr17(Ns%=sJ=eh$$&|9%RaAI;8-farW4wXU~0n*|2q#CdX_nzII_!-oM%Rm6I4h@!p+_Ran#GonWv_Jh)h^)bKfaeCaOqj@X1FUTzne*2Hs`lpQX*2@rEn7}WM&9E-S8nSY$=2#aZOi2oBwh%Vx81Ea> zoV7RQ>vAPmwLVo&5{OgDty(pQn*#?enH2x3lJLa<=X77$M@a()%xn9vCD?3tq+E|F z+m=c?Y9DS~wu>twV$rC9T2y1bWG7p3<++Jxpf<>J3x2;PgNj-hwtNe>y+!upX%w+u zR(f|Hnn?;8jL**#(-70ilNcX18$5+3Y1C}rQ>w8rOj%Lf`$(xNv;QrY?ZQeis-l}u zg^qs3w<1CK577$V1QR0YNLElj+v^j3VRvVu>WvIL*b zFEx&;WNq`KtF499&;Vq#My)`gFfij|8B?_eG`5*yK(U#oofy#2NX1)GnL?v>=)lbT z)*KCMR!bMcVK!;XI2joSm{w^WbSIB zP80>p&b2hJlu#I3Y-1(Gpt!-?&-MAUjZP|76|DT%vpiTGziM@&1@f~;IPdl15NEAo zH+lpK)@DZQck7L$LT}W>A92=;RL;@w!RT{WWTqvOopk?i@I=tldU~*Ip?A@Oj`uLq zE!&B!1G}>)xDXT5(|6?57!eAQaLD3@z0!n7Yg2Z@F&k-4V{x;UtwnrX~6fR!N;6lZ-Rre46a}Q zs0S&`xwBUcLYg zcrkZNWfDMz_t8t^EDh>c(*m*SxkQp;}CJrWI|+yXXCm$8F9we4QA}Q4bC)P14_Z)H}*t)X{ho+ z^CgT=YQ8KfTod!9e=c95qk|g0L}wv2d|^jmX7>L%U*=uPm!`|`rTMaa`7Ru|EMJzz zGBnA$Mx0w}WJro&e`}2lO$JMwTDgz_t%J=?3+pDGxeWYNlV;$zn|>i5t(Y5yGr=%8 zOkN@ozfP%un@$A3&*L|{{;R(BHR{oXdaZ5rdrU5xT|zfEGn=<*c=?oc_BPkHHS}G z)jDeokx)C=Xvo~a-5LB-{7es3ul>w=Qu1sLjsN;8u6o#@UN=aQ7spny{gt#|rF{Kx zjzFA#po@8sv8e%9$cN+p4 z!>2vnh@UZlNyDCYKntfikB;~(H6kEk4Uwf9bvh1YQ3Bq$L0Tk5q>V@wt;*WANflVv zg;h16(F1?pQS!$Vv#(L=jXTmTt7C@Fxlz?=4D|$;`3!-&B^n_6ucG%jh4pdnvA9V~ zwaEzzCFWo{jK@uK(!|%Liff-2WhOFWH#gm)=Bi^jp%;Tx;O-Z_ml82#S$fli1da<& zo&|1ojXg~+Rv+GJaf%)yUw4Z^0C5(GqNu_MHSyo` z8};Q?F3WN&O)jqzm%w@Hw=Couhlva;XtUg8Ra{XO)(fuf+`B>nh>jDzXdCJDFC;7Q z7X?{VxP1|=>BD72Gb=Qp_7Q~_66C{4%;EZ>u?hN!m)J5JKg;_GRM0|WN$f}9T3n%| zB{Gl^-D#ds#z`${NiVk-BISa&mIjw+syY`erlT8 zO?D~Rs_sg2D$V8Njlq}HAKLTI++RNEluk)#!ez{a4B*J2OEdQ+aiP5_RoHYUxnQmB zoL9m13(NjRv-=&_UA%KT`CiWHt+}jx-r7?s$+fCdd<0&S%d3tevC6%aGh3w-YmFqU zt@S3i!Q?iXi!H$wcV$CDfgl)UVyw^)a&O0pvfpBi|QFpv;cCyh}-@XU>4 zK68!kA?S&tGMj}9Ju*`zJP~HxNwNm2VC*8eWa}_^5md5SmQqb^ZnRRY$u^8uI%+Tx zzS74hcGhHy9mSZlnTOM-TY*$3`W)l5A&eA8lrxFK@A2D#vOZ|W|+meg>{B`|~U-&FKtn$8w%xgDn> zT1LeA3Rs4``I7^i-j-QB> z2YDz}q@Qn^S9B4yYb3S~TNvAj(pM$JMJD-t6;^T$XRMW_q(>x-8%MT8oiyR=s-tMgmZSbkMhT z@s`Ws*{P~%y&*bsO;pQ8GI(NZpM5?!yY&v|)cm0Pt$Up>zCHN0x0cbnr{DSxu2iSD z?RSVZ9QlQZ?4-m-f{Sn4NafmFZ;;E~AHH?9?M#<~v$x$H>*%Goe>Hyo@$Ki)*MD)x zA2>;^lz;Q>SJ-kH{44Kx(Du%(`^Bs+!*03rdy)*j^S?PK21(WijqgqcgYWvNM5La5 z*I!BUt{v;^)Y8Jz;Y2X=z@daUDMdHRKyp7T`23C^*^R-IJBQA^xbwd_Nx2kp#=rXp zXBP%`sW**TSn9osFV!y=S3jEKs6eiO%xWQ_<)t3QQ44xgAVF^pW3bvh7`W$J`=;RU z9yprvKFi5e@Pqp{1r4`n?Zsz?@BMtjO{!&2RTj(XOe*-no_0HZCcSqgX|E0T9sEH= zsWZFo+vLQV$-}*NRt7AH*}E>dF!tTJ?$7Se*m352N7`pKY&-gjA0h^2ULE4*+ER8- zcG;5jRU4JPR8*%NHz>;Ve2g;EEvAStV?f2OSO_A0F6aa6f-x+X8Wh1?iq0)BCaD`O z+ay_zc1Ut!ZI=38gIJrT96(@gmf}}nZI+5DN|RuTG9*}{dJ-&AmIO=Wl3gna)GKUJq!N)Xu;t|J$Vkm=QdvgT-L7T|)r5 zy`b;C%bo3vN(5i~;Cp;I_16CjN??eZ9ZuY++gtJy0ETDKKY^JbG7g1XRjd2HcNzA z<5##rUWiy(VcQA9{mz=Q;~nqiI8VfzJrLdv_T7<z41N?sZ1OJ)doyX<*#pBNfcl^^kD^0vg$cwSzM!QZ1 zCSRu!lQ;bqS;2E#f5CZrFgX2d&pKxZgVA6AZAsime%X0Jl4Zd&kK8ZyOFy#JUK;$$ zN3NFRz(pTj865bC8~o@aS4y)*AH9ZiOAnEAF_bf~0BfkX>qkHOb$ecL{l|7B0S zr#{xFUj>~0_)GSd;K@g?ANtgg(^YfCG?Ca-=|MrVs9C8m0O+lLcpswSDMf( z#6pGW-7$Hx-u6*mG^&&c&5@|vDy>}{!4+|p2uKuFYnOyHNTdb&J8aa|1%!5?0tM8U zR9Dw+m9{Q6a?Na!G+$+}BrNG>2;Yp+9d_^TVmsa}lxbI4dUTsnC@$5&6>QpNpqAQ! z+8L;$3r{l5BpFE7cUlkB63?Y294FgF5Ki7D_BnY-tE?G@(vrZ8CetEg5Us9GriC#& zyKsFwJ;$@9UsknrK@kFYqpE|qJVq5+T;EpWS3nL?FtZFNUd5qX@%~nthP4QU0vfhz z796^3acBmIv_33xct2f6Y$ixbNX2uvz{%!~(Q<;}S(@0MeWX&<#)D@j12v!$?{g>C zE8naV=p;KSP?1#u1(;%UbzztuT0)B2OU|m!J>^c1OWhKnN~z}iJX?-zEHO)L5G;A4 zx||_pEZMtv(>Cp_PvBZ=ZNLl4^7e0sZ&*}r2A5{0EC?_ao^IpbTeEOeoO7DX^)oqv zXjV;xM=|s=x@yW}>TQ+YM8s5cT`&G5R3N|_X#lg}Wopcknd>ntT@pL;MG4fd6iu?U z=g4OYq~Svne-ddeYV3q7rFT%*1D?2^$Z0dNJc=dyste`#hC;&pHHE|(B%n!vKP;5l z@~s5FKcq6CT8W8AT~1*_0o1NUVhw010!#~W^aw`JK%!sYkm>O*nnNXSuST`H2pG8< zu+j<``53IcTO)l+?9+#%UQb_q=lQLHN#zW!twC!^=V0UI7%3;b`skEubo3Q zRt7GJ{%z}Iv!U9MP0vy3Jt&C`%co2bB@zc{ZEKm3AI-i<7Lf`giy|@QBBy(*B!nu$ zj(8qLkc=r(1izRTsC{98pUAi@FYZuF;1wC#gJsd-)-2OD+ONNs-$k_DCHzKNUCQqk z3TyZcJosJ1Zb&eY@N1Y0^@=fm#wfw78W9kb=kOazi`WzKyG`JRU_*YpRj?5YV0SZ8 z;G333)fV!9YfpqKx$7OV^fY>5xYmT#65f8rk8s?yBL&gDzYI~Y~ODAgFWPRiNJ;Y@r^)1d*;}934;opzD9Cs_`?N;s6;>rzPv^#{ON{2c~PR;%M*X2 zTbuRTHLcfiUeUNzg@dwc*mhM}3q!m;)&aiQ)-Jh9BaRN2EI707SYmNG5tmZyJgrwuT~u(2W=7rU7S$e5zmv{B zy8!=i41zIvlYrNCy@xowf&N7qzf+#FAqrc%_LRFQ!elqohD7|>R*X1sjy-fpV1ZdW z#Eg?aJu+{(sby zVN1mq5;ki8RRl^@I;F-v>QHG}T_6ikJz}|C_So%AHOoBd%TUmb{dWi$i8F&mMwia` z$C@`d%CVmujss0ZK4DHclx)~K!=YqRYpYEBB-9ouPU(#%Y2e0@d8+erFt&#`yCg8e zj-7){i67f?8v;=KRUQs(&F8@ksT4IM)2`zmgJYFt+fpodvr1#ji)`aC5(L=D+aKr< z`P+Y1d zmRU!fju6b)mT%$yzp_PP0Z8w%vaAh=niYtUnMdSm4C>j3wB9Jnn<#pRg4duO42eI; zjzn)!APbLrYCPVCu8~Ek8={Y-J#SQmQx`2v1_}rr$QUP8$Rt$Jo4FdUi80fq&E+(L zfXWo{u*>W}ZQ1O!yCAD6q0!5P6lZY@C>cp(s2#YX=#MJJMaSx`otZ4|vzctGOcogu znTE>Sh_$l>A#khUEa(Hq51*@()$MVLwz2=y0?z!zYLR)}$pTfja;-Ip!A3J#=)R3T zW04Kyg+VA;)bCQrBk>pg{F6Z#VICh@BDB_}FAoal)yKF&)b{Bm$p73@hRwPj5D`V) z7l>gil~)-ZuEQfXaYO20ux|GF5`AU;C&b=}zR4$->dL(^3;OoDiQs*cCD|?YHq<9m z=}eu)r-g{;n3WOHMu-5v%*Niu9JaGG%@VQOA2X*;%cA%xJ>D`e1@;_ z_2w|G02)Q;O4OIjOL+;R-3nMvX3KK!}j9Z_*xvV(om}_JkjZ}%i)^Yj* zp|x)4jyEM;vE$wpd+kNJ+7_t>RFhT>e6c{b`C<Xon8W=3NG zVF}vmxurB20_}f{oleeEo<)T$-$M2wTp?~A_GQ$L1ocL;%#)Jv0Fuf`Y=K7#9k{bV8j&FCgLaVlL)1jwsh_OFpakxEk4!C|#r&%>DT$o(mERQ`+k*U~&acg2mmy;CnxAy?udOBxB9vZwG(P z{N)_W>L9heHJ4UCPi4KXJa4(pdw1WZzkj;)(9ZY1`^dPQIA2mvX-}_}zbLT|AR;Q@=PgH1tk-B;DdM`nz;Ln6j)k((~jQ2zZYr zgCG3MLGO6VE$pCB5d3^5n$`)9T-Vd3fzn$@X<+Rj6)IIhJe_jK?cg8&Wp9xC*S>qs z)>R>W5lA#=n3w9@;tbtos*0l7Q@v2<_8+5GP#h=iBb_3pyERQ(M_L{4MB05i8gD@` z@Y6o;T&6naAI4*z&s0fucH%Nwr`#(%nK{#3o2QThRv(yLRutM*z)a-8QxRusU%6n1H_P!2SF0CZ`7(cin~!2M!%N@ZPQW zk8LD9WO);=>kJK9eA3V@OleA5)&wbnXSHw-)CFT9j{L``2i*m*VL_+mU7)>CP00KS z1l};=SWaZ4IFWM;%cxXT-a;xox4g;RCo1-WP18BIN!T_RBh4Eylty6M zt6&=3HlbaF$KkP^hsF-8onxRg+2H0inh-uLnrb+CwQb+wOf-J^Bes1t*S6+;`K)7a zv7L#Qlk<}HCTFJQZ#m;_U;d}0z0Xz`i*9i|XQXn9bhcEEcNlh0bqLw+e5r%g z%1Y=4@7src0)o9Pf6APQIM8izlb}ai+RY{zc9na%Q?uX7hXoaiZts^1QA5XXV?D zjR2JYNJS#iXq27@4;kT$F(c3Sxbq^Nb!g=9{d>o>$~xBTI;-I2@m@EzYS)3gM=bA= zUbnamXxGsHAZdy86n`RhFum8kX6M-0$i9PP!GRwwcV>D6??>~OjF;T>*zSF+j_llv zJ}XrrOokBlR3Vh;QS?U+ALiTB8i{E--*e!|s+|W}Zr=(s2M--!1q10I6S;!klW07V zc)<&O1TGh;T~F-*nW*-0D*nH$>Z0D-??%oUViTQ3?a)%E>{8M3Oi}l<$GygSg;BoBg+}>5YI9-%=;Tn&?sFy=oxCGw544?=ou{RW+}@G> zyww|J_R{Wbn8EU(kiyLVy)=6%gs}hU7!Y0_bPLnq<_kfd;*XFZgt-tFOX(N*Tc%5Y zLh1VUxkP+qNwsuUOxnknAUL!YL!n5auJs&(iwFS!Y5K^p0{`Rm>8aPn(@Wg>Czs{y uZujtkL!o{gI{B#vTR9U$+MGI5Lz)Y%uMD{fJ?&SA+{`W{Vdwp0tNtIUgfp}N delta 26056 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 KW|jzj7W_Z%pf@J~ From e105d90622c8f515c346673ce58cce888eb4eb03 Mon Sep 17 00:00:00 2001 From: Gav Date: Sun, 4 Feb 2018 14:35:00 +0100 Subject: [PATCH 07/13] Fix most tests, introduce split-block processing tools for authoring. --- executor/src/native_executor.rs | 12 ++-- executor/src/wasm_executor.rs | 14 ++-- wasm-runtime/polkadot/src/lib.rs | 7 +- .../polkadot/src/primitives/header.rs | 12 ++++ wasm-runtime/polkadot/src/runtime/session.rs | 6 +- wasm-runtime/polkadot/src/runtime/system.rs | 69 +++++++++++++------ 6 files changed, 81 insertions(+), 39 deletions(-) diff --git a/executor/src/native_executor.rs b/executor/src/native_executor.rs index d9426be1cb3e0..94c5dd51ac6c3 100644 --- a/executor/src/native_executor.rs +++ b/executor/src/native_executor.rs @@ -50,7 +50,7 @@ mod tests { const BLOATY_CODE: &[u8] = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm"); const COMPACT_CODE: &[u8] = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm"); - fn tx() -> Vec { + fn tx() -> UncheckedTransaction { let transaction = Transaction { signed: one(), nonce: 0, @@ -60,7 +60,7 @@ mod tests { let signature = secret_for(&transaction.signed).unwrap() .sign(&transaction.to_vec()) .inner(); - UncheckedTransaction { transaction, signature }.to_vec() + UncheckedTransaction { transaction, signature } } #[test] @@ -70,7 +70,7 @@ mod tests { twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = NativeExecutor.call(&mut t, BLOATY_CODE, "execute_transaction", &CallData(tx())); + let r = NativeExecutor.call(&mut t, BLOATY_CODE, "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); assert!(r.is_err()); } @@ -81,7 +81,7 @@ mod tests { twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = NativeExecutor.call(&mut t, COMPACT_CODE, "execute_transaction", &CallData(tx())); + let r = NativeExecutor.call(&mut t, COMPACT_CODE, "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); assert!(r.is_err()); } @@ -94,7 +94,7 @@ mod tests { twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = NativeExecutor.call(&mut t, COMPACT_CODE, "execute_transaction", &CallData(tx())); + let r = NativeExecutor.call(&mut t, COMPACT_CODE, "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); assert!(r.is_ok()); runtime_std::with_externalities(&mut t, || { @@ -112,7 +112,7 @@ mod tests { twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = NativeExecutor.call(&mut t, BLOATY_CODE, "execute_transaction", &CallData(tx())); + let r = NativeExecutor.call(&mut t, BLOATY_CODE, "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); assert!(r.is_ok()); runtime_std::with_externalities(&mut t, || { diff --git a/executor/src/wasm_executor.rs b/executor/src/wasm_executor.rs index 5b87270724ef7..a9e8a85647669 100644 --- a/executor/src/wasm_executor.rs +++ b/executor/src/wasm_executor.rs @@ -292,9 +292,9 @@ mod tests { use rustc_hex::FromHex; use primitives::{blake2_256, twox_128}; use runtime_std::{self, TestExternalities}; - use native_runtime::support::{one, two, StaticHexInto}; - use native_runtime::primitives::AccountID; - use native_runtime::codec::KeyedVec; + use native_runtime::support::{one, two}; + use native_runtime::primitives::{UncheckedTransaction, AccountID}; + use native_runtime::codec::{Joiner, KeyedVec}; use native_runtime::runtime::staking::balance; #[test] @@ -412,7 +412,7 @@ mod tests { } } - fn tx() -> Vec { + fn tx() -> UncheckedTransaction { use native_runtime::codec::{Joiner, Slicable}; use native_runtime::support::{one, two}; use native_runtime::primitives::*; @@ -425,7 +425,7 @@ mod tests { let signature = secret_for(&transaction.signed).unwrap() .sign(&transaction.to_vec()) .inner(); - UncheckedTransaction { transaction, signature }.to_vec() + UncheckedTransaction { transaction, signature } } #[test] @@ -436,7 +436,7 @@ mod tests { ], }; let foreign_code = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm"); - let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &CallData(tx())); + let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); assert!(r.is_err()); } @@ -450,7 +450,7 @@ mod tests { ], }; let foreign_code = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm"); - let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &CallData(tx())); + let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); assert!(r.is_ok()); runtime_std::with_externalities(&mut t, || { diff --git a/wasm-runtime/polkadot/src/lib.rs b/wasm-runtime/polkadot/src/lib.rs index 33bf5546766e8..32d026e42f464 100644 --- a/wasm-runtime/polkadot/src/lib.rs +++ b/wasm-runtime/polkadot/src/lib.rs @@ -38,7 +38,7 @@ pub mod runtime; use runtime_std::prelude::*; use codec::Slicable; use runtime_std::print; -use primitives::{Block, UncheckedTransaction}; +use primitives::{Block, Header, BlockNumber, UncheckedTransaction}; /// Execute a block, with `input` being the canonical serialisation of the block. Returns the /// empty vector. @@ -49,8 +49,9 @@ pub fn execute_block(input: &[u8]) -> Vec { /// Execute a given, serialised, transaction. Returns the empty vector. pub fn execute_transaction(input: &[u8]) -> Vec { - let utx = UncheckedTransaction::from_slice(input).unwrap(); - runtime::system::internal::execute_transaction(&utx); + let number = BlockNumber::from_slice(&input[0..8]).unwrap(); + let utx = UncheckedTransaction::from_slice(&input[8..]).unwrap(); + runtime::system::internal::execute_transaction(&utx, Header::from_block_number(number)); Vec::new() } diff --git a/wasm-runtime/polkadot/src/primitives/header.rs b/wasm-runtime/polkadot/src/primitives/header.rs index c97d5ebf29743..c37634cff58ce 100644 --- a/wasm-runtime/polkadot/src/primitives/header.rs +++ b/wasm-runtime/polkadot/src/primitives/header.rs @@ -37,6 +37,18 @@ pub struct Header { pub digest: Digest, } +impl Header { + pub fn from_block_number(number: BlockNumber) -> Self { + Header { + parent_hash: Default::default(), + number, + state_root: Default::default(), + transaction_root: Default::default(), + digest: Default::default(), + } + } +} + impl Slicable for Header { fn from_slice(value: &[u8]) -> Option { let mut reader = StreamReader::new(value); diff --git a/wasm-runtime/polkadot/src/runtime/session.rs b/wasm-runtime/polkadot/src/runtime/session.rs index 495c60701a619..2c195dbb72d3c 100644 --- a/wasm-runtime/polkadot/src/runtime/session.rs +++ b/wasm-runtime/polkadot/src/runtime/session.rs @@ -151,9 +151,9 @@ mod tests { twox_128(&0u32.to_keyed_vec(ValidatorStorageVec::PREFIX)).to_vec() => vec![10; 32], twox_128(&1u32.to_keyed_vec(ValidatorStorageVec::PREFIX)).to_vec() => vec![20; 32], // initial session keys (11, 21, ...) - twox_128(b"con:aut:len").to_vec() => vec![].join(&2u32), - twox_128(&0u32.to_keyed_vec(b"con:aut:")).to_vec() => vec![11; 32], - twox_128(&1u32.to_keyed_vec(b"con:aut:")).to_vec() => vec![21; 32] + b"con:aut:len".to_vec() => vec![].join(&2u32), + 0u32.to_keyed_vec(b"con:aut:") => vec![11; 32], + 1u32.to_keyed_vec(b"con:aut:") => vec![21; 32] ], } } diff --git a/wasm-runtime/polkadot/src/runtime/system.rs b/wasm-runtime/polkadot/src/runtime/system.rs index 3bad5413621f7..e6d93e9492329 100644 --- a/wasm-runtime/polkadot/src/runtime/system.rs +++ b/wasm-runtime/polkadot/src/runtime/system.rs @@ -21,7 +21,7 @@ use runtime_std::prelude::*; use runtime_std::{mem, storage_root, enumerated_trie_root}; use codec::{KeyedVec, Slicable}; use support::{Hashable, storage, with_env}; -use primitives::{Block, BlockNumber, Hash, UncheckedTransaction, TxOrder}; +use primitives::{Block, BlockNumber, Header, Hash, UncheckedTransaction, TxOrder}; use runtime::{staking, session}; const NONCE_OF: &[u8] = b"sys:non:"; @@ -84,7 +84,7 @@ pub mod internal { // execute transactions for tx in &block.transactions { - execute_transaction(tx); + super::execute_transaction(tx); } staking::internal::check_new_era(); @@ -98,29 +98,34 @@ pub mod internal { debug_assert_hash(&header.state_root, &storage_root); assert!(header.state_root == storage_root, "Storage root must match that calculated."); - // store the header hash in storage; we can't do it before otherwise there would be a - // cyclic dependency. - let header_hash_key = header.number.to_keyed_vec(BLOCK_HASH_AT); - storage::put(&header_hash_key, &header.blake2_256()); + // any stuff that we do after taking the storage root. + post_finalise(header); } - /// Execute a given transaction. - pub fn execute_transaction(utx: &UncheckedTransaction) { - // Verify the signature is good. - assert!(utx.ed25519_verify(), "All transactions should be properly signed"); + /// Execute a transaction outside of the block execution function. + /// This doesn't attempt to validate anything regarding the block. + pub fn execute_transaction(utx: &UncheckedTransaction, mut header: Header) { + // populate environment from header. + with_env(|e| { + e.block_number = header.number; + mem::swap(&mut e.digest, &mut header.digest); + e.next_log_index = 0; + }); - let ref tx = utx.transaction; + super::execute_transaction(utx); + } + + /// Finalise the block - it is up the caller to ensure that all header fields are valid + /// except state-root. + pub fn finalise_block(mut header: Header) -> Header { + staking::internal::check_new_era(); + session::internal::check_rotate_session(); - // check nonce - let nonce_key = tx.signed.to_keyed_vec(NONCE_OF); - let expected_nonce: TxOrder = storage::get_or(&nonce_key, 0); - assert!(tx.nonce == expected_nonce, "All transactions should have the correct nonce"); + header.state_root = storage_root(); - // increment nonce in storage - storage::put(&nonce_key, &(expected_nonce + 1)); + post_finalise(&header); - // decode parameters and dispatch - tx.function.dispatch(&tx.signed, &tx.input_data); + header } #[cfg(feature = "with-std")] @@ -135,12 +140,36 @@ pub mod internal { fn debug_assert_hash(_given: &Hash, _expected: &Hash) {} } +fn execute_transaction(utx: &UncheckedTransaction) { + // Verify the signature is good. + assert!(utx.ed25519_verify(), "All transactions should be properly signed"); + + let ref tx = utx.transaction; + + // check nonce + let nonce_key = tx.signed.to_keyed_vec(NONCE_OF); + let expected_nonce: TxOrder = storage::get_or(&nonce_key, 0); + assert!(tx.nonce == expected_nonce, "All transactions should have the correct nonce"); + + // increment nonce in storage + storage::put(&nonce_key, &(expected_nonce + 1)); + + // decode parameters and dispatch + tx.function.dispatch(&tx.signed, &tx.input_data); +} + fn final_checks(_block: &Block) { with_env(|e| { assert_eq!(e.next_log_index, e.digest.logs.len()); }); } +fn post_finalise(header: &Header) { + // store the header hash in storage; we can't do it before otherwise there would be a + // cyclic dependency. + storage::put(&header.number.to_keyed_vec(BLOCK_HASH_AT), &header.blake2_256()); +} + #[cfg(test)] mod tests { use super::*; @@ -174,7 +203,7 @@ mod tests { println!("tx is {}", HexDisplay::from(&tx.transaction.to_vec())); with_externalities(&mut t, || { - execute_transaction(&tx); + internal::execute_transaction(&tx, Header::from_block_number(1)); assert_eq!(staking::balance(&one), 42); assert_eq!(staking::balance(&two), 69); }); From c7835f83c1cafcb31d660dbf6d13f9aeb8701c18 Mon Sep 17 00:00:00 2001 From: Gav Date: Sun, 4 Feb 2018 15:53:54 +0100 Subject: [PATCH 08/13] Block-creation using new infrastructure --- client/src/genesis.rs | 29 +++++++++++++++--- executor/src/native_executor.rs | 1 + wasm-runtime/polkadot/src/lib.rs | 11 +++++-- .../release/runtime_polkadot.compact.wasm | Bin 67817 -> 69566 bytes .../release/runtime_polkadot.wasm | Bin 67867 -> 69616 bytes 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/client/src/genesis.rs b/client/src/genesis.rs index 9e7974abb5087..c774ff8601a2c 100644 --- a/client/src/genesis.rs +++ b/client/src/genesis.rs @@ -59,7 +59,7 @@ mod tests { } } - fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { + fn construct_block(backend: &InMemory, number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { use triehash::ordered_trie_root; let transactions = txs.into_iter().map(|transaction| { @@ -80,11 +80,32 @@ mod tests { }; let hash = header.blake2_256(); - (Block { header, transactions }.to_vec(), hash) + let mut overlay = OverlayedChanges::default(); + + for tx in transactions.iter() { + let _ = execute( + backend, + &mut overlay, + &executor(), + "execute_transaction", + &CallData(vec![].join(&number).join(tx)) + ).unwrap(); + } + + let header = Header::from_slice(&execute( + backend, + &mut overlay, + &executor(), + "finalise_block", + &CallData(vec![].join(&header)) + ).unwrap()).unwrap(); + + (vec![].join(&Block { header, transactions }), hash) } - fn block1(genesis_hash: Hash) -> (Vec, Hash) { + fn block1(genesis_hash: Hash, backend: &InMemory) -> (Vec, Hash) { construct_block( + backend, 1, genesis_hash, hex!("25e5b37074063ab75c889326246640729b40d0c86932edc527bc80db0e04fe5c"), @@ -108,7 +129,7 @@ mod tests { let mut overlay = OverlayedChanges::default(); let backend = InMemory::from(storage); - let (b1data, _b1hash) = block1(genesis_hash); + let (b1data, _b1hash) = block1(genesis_hash, &backend); let _ = execute( &backend, diff --git a/executor/src/native_executor.rs b/executor/src/native_executor.rs index 94c5dd51ac6c3..78ae257603576 100644 --- a/executor/src/native_executor.rs +++ b/executor/src/native_executor.rs @@ -29,6 +29,7 @@ impl CodeExecutor for NativeExecutor { runtime_std::with_externalities(ext, || match method { "execute_block" => safe_call(|| runtime::execute_block(&data.0)), "execute_transaction" => safe_call(|| runtime::execute_transaction(&data.0)), + "finalise_block" => safe_call(|| runtime::finalise_block(&data.0)), _ => Err(ErrorKind::MethodNotFound(method.to_owned()).into()), }) } else { diff --git a/wasm-runtime/polkadot/src/lib.rs b/wasm-runtime/polkadot/src/lib.rs index 32d026e42f464..2585c013b00a0 100644 --- a/wasm-runtime/polkadot/src/lib.rs +++ b/wasm-runtime/polkadot/src/lib.rs @@ -36,7 +36,7 @@ pub mod primitives; pub mod runtime; use runtime_std::prelude::*; -use codec::Slicable; +use codec::{Slicable, Joiner}; use runtime_std::print; use primitives::{Block, Header, BlockNumber, UncheckedTransaction}; @@ -55,6 +55,13 @@ pub fn execute_transaction(input: &[u8]) -> Vec { Vec::new() } +/// Execute a given, serialised, transaction. Returns the empty vector. +pub fn finalise_block(input: &[u8]) -> Vec { + let header = Header::from_slice(input).unwrap(); + let header = runtime::system::internal::finalise_block(header); + Vec::new().join(&header) +} + /// Run whatever tests we have. pub fn run_tests(input: &[u8]) -> Vec { print("run_tests..."); @@ -65,4 +72,4 @@ pub fn run_tests(input: &[u8]) -> Vec { [stxs.len() as u8].to_vec() } -impl_stubs!(execute_block, execute_transaction, run_tests); +impl_stubs!(execute_block, execute_transaction, finalise_block, run_tests); diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 16c8ade8e383ac81198c7957453b3791865dee29..2ea4d55786392d88789f4558c8f01f70334b5754 100644 GIT binary patch literal 69566 zcmeFae~ca1b>~@C??=CWKe`{gn`Dzsk@r2(Qd1<=&EFI$TP((sCCiF517qQx%|KLS z+R>v#Nfaf^SdY}1(Kt%tB+9IJB5Vu~g3-0_Z~QyWXhaT=E+a)J#b*pE%!fl^2|e@`fO6ugL!*! z`pHL5o_XNx$xq&Y_RK>k??3bCqi2)49=G)PQ)f<|Od7hK)9t5Ep1uExvyYy6;L|7X zf9UktN0X)=we{$c2OfU-(Fc=>amL9<9(?4nBw3a5*k?VXV^vN*^2no4om^eyiIZnN zqo*Q|ouQlifiY>R9UGwMJ$d$1hm%QVPOBi*3dkJ%zU4+(ZB#aluCmX5=Fz9`-?R5H z2>S5POlFfA|J5PXL?cbpBuyvlY1+sp8y7lWwB2sh(q!GlE-=iK4?cPJBy@Z9!Bffc+2a1}nFmfk@xX&;AA0n3@-tJPdg$~64?pxoQS8H$ zXP!KL|JjpIoP8p>eX^e>dD3bBoxyeC16#IkKYXbD#s8!BGhgauA9^-@Cg<5=R?p9; zr-rv3%qmnP@p5i7*cdNo zM}zrzIWrn;ikIs~gU#`>HySL&%g$)9C0mlR>B*BV&0KLjLBB{SVo7 z-Wq|oL0jls9%P|*JUIj&9e@4N@cQa~Yc$**@0A=2^*lM6B%uL$NSb~(;Ylk`j*uzR zB`ax|^xG`Zl~CI+Fi4{@3s{Do9Z51g<{(^vgk*Jt--p|F(2yRUOT%r-Jdqs(h}&`% z6zWCukSG0m9_|uH7zyV`Lq@(MOT1BW0OJ~l>tj|YY%dJ4E~Jhd#U z-W-N8s~tMULseZ#9W;Z7y4QyripLHj=nFT;tZrx*4^{UZbx(vr3DvNKsuQ}^f+q~V zF<9>fO>cLS3_4*-NjFR@8HB!)VOXc+`Y@wpdze-7fpCM88^WBD8^d}fi(!M39bu!A zo5H-3one!bU1775-Qi{>H%H7(k94;b@22c-IV>o1Pt5FE=H9SHnfqd9+cNiu>y&vQ zw3W2ORwV~xk){{#cR1eF?e3Ov+wSC_r-LI(zmg7)D*c^waI4aD>EMIiw1YTw z`3?9D`CZR%JHHR`yMf=0{1*A`;CBuuhx&k4!_zk3X6WVaTIR! ztNBs5!LK%r!Uz0n^C)chtA$ax-mkWd!qBg-8-;;iZ5@TKUu_$Oj$Z{S{}58dzY{(b zxcyKE-aw0N3m-aYicPv4v}{A|4Yw&Pv0J-B5^II}LBZ6{rMc9|`E-O8>ipl$Y_ejV z-cC*pJF-qNldMzccwN@16S9z=%DQ+Ijb3>`LtzHJ44r z)zkt{W#5)PH$j{A4~AN(3D61YHWisr6R7YsKRi;2jhiVhy~hyiv8*+Pl2cwIOxUee z8*)vjy52u*9?U+>HOU+aPx|4qV1z0Zp$Y_0L6?*Wpqb1qygN8|< zH7Zec!vsjqTa0wVE{9E8Q%g;?#PjYUgt8u==|Qd1QxGm=Puqv%o*=(UEd%v_Q%tlb z^DBzx=@_jogk5dILPp!BcsUNQrUw(jk~l1`%V9w_5s^g0;z@9J@KL3VqQ73P9>clm zz!IS$2CR#vY5>q+9LgEi4S>3e_J^nxdK7D=u<>Y+s=vkT!%|WcQc{z+Q!;&XGO3fH zAs8ofJg7-{8?Dxs2z&$)1Y(gT4Q&-E7&WBoGF6tzo?p=*ve#9Un7l)^V~AcSe_L!{ z@BFP}_!Dvrzj58)I)>5R`di2FZym$GbqxR3F_f8l563V~vuE?fgBHuDhILGqO--}B zc8@&!{BxsWmOuNk9;Osynz_5*7}k1el63NPfKjc7Os*JqU#=K4>x0=m32vOG1_yb7 z*`6QPLWV`0$8d9N?i98-ld)#jD<{Z{(H3^zjjvx@`61WAo0=Qa(RS~Tw$*!Kk1@}7 z6Y7{`3^EYZaaHLqiRX%ZWmsn%;p{KZR0|EntTvoZs!b9jB1S__I_@(L2{-QT zwXGN)&d^;Rf=82~c2_U$X1F?_Nm#QcGIgLn)eLS?rlF9hkq$ux5f%$qgc>H2i13#Gdc4_kRx^PR5Eca$W9 z8sjxiuf-Wp1~t3UQ#bxjXoMM0VDNI@RSATv1e7gUo&ke2jk&3IamE`56KeX@NnD*c zIl6Jm1G!YXYo+yQ*{`wAPdCv z-f4AsA|j;A+igw1&?K`Vu~kuA-0h*O)vYOPL*Jtm+t!(yRl_Ou&+0R^vsY z8=67r*&LG>(8MevqDegghXzJNLZG_!naL_tA(!JOBAn`M(CSd%ltN9_Qf4}EprKrh zH)#zH0n}*EY=-tnOwj7UN6iWK*;35{sj50OJSI#mx$bEqW0D!M+hb~vV0L{bU+?^R zmNhE^huL7}SPz6vrQTZ-j6MwI@!1;rvIHg;Ek+RdGe0EcQxlQVfktHN74qc;OcGie zThpbYrF^D%G6Qx!r=Y-gu1V6-K)@tYRO7ae z_(oJ}jte!%0Sq%+s^+MaRx(tYmTU@@)fsO@;$(?LY?X#NiM9ZVEw@IU&6HC|{HgZ| zyu8|PhZ=t{s%_~=>ClPsWovvn*=bUs-|(c?X<709b)8o_=~UI0PlJ~H#sT~S-C31L zhDrXy|D0f|l#85BBkag28t|DB1n1df*s1R%kLBsv{Cml0DYY1R3m*WE{Z4Xvb$*9@ zWIV}#_}~A<(%mdPSQDp*lLLm?OPqtzz+zZczZ1^$F6j>$vdlGoSvOY2DouWLT<6)* z5JsK^e*_t1UB+!$eii0Ueq%^Zp^$dwD=Tj}s)u+hj}Kc5EUa|$>?v*#eQSe20akDA zKaqy`hRke=SR2bAUNGd;JxDY*?eQL_JxrY%G;(-ncd|T$6nX8Ag}nASxF&2?56C!y z3X9k_x(%VCB?+`p5k><6mJVtG2*R@~Oo!T$WLKUFh2-rT(K2SayDmw3Ci$4x#2#C4 z2?ytSg1tp^WkE6sJ;7cX5XZj!;UMWw{8&&}?W=)eg0Z~|6iqpgf;>HvD9*GDw_Y7~ zF2zh!BN9wSkC(#=9VT>GAUY>PyvxbgDyqQ{5m{Jn)Nz^}s~roF;$8?2+Tq%O{6G>K z67v{+B*)N)?jbNr8_xr*s{wz|t99$@yDO%JRh}YrM*?Y|8Z`7ktSqZ&f+~do^ZYQm zo8e3cR-zU`)D(4Hj`NlNy|6$wm?FDLfESl@+hC&de5I}eH45OnQK*w&P@!ZnkxvhL zCOHgd=BfN*dPc3+DOsarM#&YGOeuNWpeL{vF>Pl;kMiB89uIBGCtl{Z0ra)!2=WBa zo5gd_MY|^XZI4q}bt0R~n@&m;PYA{Bh~n<$P~7ykrp$SbD3)Cu^NDf!xXl8Ug&;w@ zH9{mbz9*|dC$v076o?Z1mgFxH^fmEA<6b0x%nzCILkX-3!wel`aL}!4`~ec1h=gRU zvVS<4wo8@G48;6aRCQl?dG~+P=q>3qDX2D%e7j?=h7>Z9W^_v%&xZhI*Ik+vGgf$; zFdJU5+_^b-Pr6hQ3(Ck72$!?hAIgE*V*2xr9&Swj>=T1F!+JzgC-Wbsk0T+N zMIju*H?-V=uU!Jyj5X@2;RMA~A6LGp$~3g?ai$w}wTC~fR-0$fXfE;Ytv0;H20?Ht z(9FzPkbW_F{0v%xR?b8cWEx4E1saGap5nfPYbkmglWM9XS5t(>BAIP*f(iWdfU}a` z;cj^&5>d3Oy(_IU(@#*q|3S^psW2)1Li>!%W=Yr9BjkqxXoW2fNJS#M$@H|an{C-m z$a*^>CanY;0OOUpiDxxwQrx_#Q#JLZn(2GFx#D(#uQuw#c2uq4@<@VxA52o*9=A)? zI!Sg*s)ylk|l2Nsy^(kqp)8ZWOmiPq;h0o39gZ$!L{!i2Vg$?;TDx8XEx&6UMM*QjA1$*!~DNU;X1JNBN?%|IKf5)xP_2 z{fAh{t~5JhHuUG2Pv`iu6HmN)e1-qsPM$N4L$ATSD7WL``IiT5VR?BlA;iH8X~7qc zNYot8Dh)~Lp(iDKXrq=m#{ufwX zvG?Oo<Hp+Xo- zr8Y*%Ytzo|#EcS?Sr|;{G4jczXkv{S5aRU@10mC51`Cu#f+@IDLeq$iHLWr11hap$ zMJ?e()Uno^YKX>VrB*lY2JPJ&Z_t)C+*NgN7;je7Ei92*rPH;hjH#vyz+_Ndh>ej4 zI24AcogyB5Doj}9qQxwbGK3)Noj;yTo28p{k@%i+RYiUbaZD^b!G&Uvn^a-tmP{#w{th|1fySs|8B+6h(x4v>lrF)#;9oql;>g#67zyF z;PPpX-6=HHWaw?ELDn`?DZwb;NxH74fmuxr43=uTKcu1Qi3Zmqu^vQH$WJ^}A*2*j zEL`B!Ac3GsO3MflTEM@^Xx?OhMt79kI=A29D8@Um|1pYy{r%LMB+7FzyN~omVq=Fb zXOWyc$yp(1*>dK|`2;y^9-&zaji@T!XlsDw(}Cx!&~uIcBEDn^hy`#i4+w>{^MU@j z>T(4vTnQ?AO;D`ksc?DFRM+4Bd8``VFED%GOi^)&{B0T-Y`B#q)%wAz2{eWokkmDB@qZpEjXJ zAt2UP72;FNnsIf23;>EWz2>0esJdDp7#tOXymAxzh6z1D>W+CJ9s!l%Nc<72I1y{W zfGUfX7>lx1I)j~-D1QXI2-hGi)}#$bH_{3P<8DWCWZtPEPg%BH*L_{razLe}`dtey zS%eZ{Jdhz`?t&PR1tU-B4i1Sla2BMHoC~M?cCMWA;y$OmcwjZ6H6Z#K2Oxvm^zhDUX(mr0e7$LF2X}s#{oiDjK#@IiVwbz2kBOR@l(hryTX? zJqh00A_<)>dmG!e^-8UIH#|7Z?XB={Zj#o{zs^3fkCFEh>7DsEw+_<$^=AtZ*rnX$ z*?9tJ@?#I9X$qZJq_txTf#G{DW_J>mCi&PM%<-7MMQOD-t)jMCsPRB*3}a<5V+v(q zMM4NvVf1hZQ&zHV%7gYjZu5|$H<&EOoM2Dasd-HP`UUqIS% zzy$?feD><`@cGbrj=gu68Ajhae4mH$+S+0Cu67t+^O9k(SW+2==wN2u!xBk;&il(8 zZA=_J_zpcln=8M9Cc>Q7El3n^zz#W0fe3R4ze}%}JlB+L=Me=LdGyV#>cn!p$~83;NY4?8 z!aoOp6VZ`=e<3x~rJ*~KCT7tDj8F1aj*O1^6ZxQCPXCz=5BL-k>N|#&T zA8F@O4KGTWw&s(N6qzBht009S6@^7RnB7WYz=HuBzSi&e0Msn*!^DnSIK)8M8@Z!) zSW7ah!!5|^Z%8^%Wa+cD@}-S}X!O;CnE(z^ywdIIHQmQFm25cbBZTpoiWe$w74+CmFVEB~qXc;0%7 z0JS#2nlocdS&Hy6?MQbgDLTaC%G8HncFW_!g-0E9?@}ByXeJ8-D87$%a-UjWGRUVe z&6;bShHmJ{^|zQl4QUSF=IJE7%LIoIrDi~@ae(FgI?{J z1{gF&!x5Z6o6kQ$%$lfbWAJPDp`XN8x2K^i_n12>~aQ8O1eF^56ohZ1`x z?o63sb_GnKt5$&ZaJs`9!C$P;W}nSUX}pk~8m>ng1mgG~ys%9hlh)@KSV7@cl?mX= zihI;at9p+nne=-INa-Dk6_zGO<@k*j$WS$YvtFeyq+vZv;mXlvelD|~@VljktTScN z8P;r77X7utWRVrt@1OzRtjTEPyf=bpTRgTb8fjPBRVf-_Qd*Q!Bj>V1*?Bdx;*G$B z#be8&kzV;yj+dg5DQz2ac-6>x8d)(&9C1iM@mQ}3XgKxITa`s4jWAVYsgV^yBGD*b zOX{)H$~&1t4_CWm;B?2%mzX4Y8^Raf@9&q9ZBFFx{|MJ$0MtW&qbT+y$Iv? zSXKGok$q*34i`6?-Ypk5s~CH6En^qdbY7=7ENnqcV}Cj%7E)yW&1UTBlI4&(M_#|= zJn>$NW9;cT$X@8jtEsTAI`H#d;V=ZQ0+cdV@whTB$LAQ>{NE+_Fy)I39r?JzzKo{AzTYbE z#J{{maXHO=r!g=~KIKpgcD+28UcDTTb;?+mTtVS?og+gF>vlc2R0@v54N z=-{K-*4!qA?qxPlakkgGEypWt_Gjf%g!PMnJhYdv*Gs9rlnpl?%HF_A$`LPP z{}2saVY(;C^|_0A1<`u9$o0vKa@8)X+!{MqI02|36REO6JweLbRCU=}^#r5o8YdO3$dGblvpxIdxz)lx;kC)@3M?oe= zMzGP31-UejNtj;SraQk`EDG4h1kc;fGz`zrZ-NTEm1#=u8N8jRO?rOwmiBi=u#@}^ z?h4zQ5UVPcV8Xj<0!!YKK!6QOOOPn)TN;6cwWv|4|C9Wi+)+`^jqNN;%==Xw0CTKO z>)JgYm@?uv=S;vXeG?OI7w;4ogldb7)I4ptP8rXp4Rf@O)5);*k! zQ=1xx8pa+*X10g-#SL*`ISBYtccDh*toojA!n>i-pJ6>qv)P@176IVCY5h07|1YI! zt&B|ceUm?-;Wuu~pIhh?EB4vB0x!&gY;!f-U{-S?F)nc>7#a z%2rd)YJ$Z|qw^h$YH&ZyfG#mu;R1hmfY}QF|H(B&K7TpD*@Iq%d-<;$>_5F`u$yNu zgYU-KRba2Af8B8Z%QUOAS3pu^l2mX7#J6>LEJAt~3Zw1sSr|56J>Gq0*wg~}FxB!# zXucfM1t#50w&QkBk1s?XN~u34MW)HUhLkbSXC>V(jd?V^r307;R)cx49$LRv6h>M{ zE3sU4;FXuIvtVJ#GJla~waNexnqmmFa!MPTY*MTVvQ}iorW%nh(t8(%#914kFGrNE z9uX3$f3_0sQX!*P<4}i*w5wGrOTa-q`4lBmQILZ+Oa zbou`qX_i&Cw=0-QJ3z#Yt0rZ}8{d-QagOd7^kOD;765sdT?l*dgcvTVj<(KvB~PCO3JqONpSjWGVlqpx@xoZ;(F@Ah;UQ4QEI$facMvE%9Ij$`=*{ErP_6|SoX z2ix?cV&{7m>|9;v2#8~B6*h8S0t1zX5XS;bbH-vq@C{7=L^oaE#Jo@B()BLf_2T;G z(Qw)isxhJl9xsiCGnVBn7>Nj&P*YS~&(z9kcx|}q-yskqbP=!!Qv_!D4xo_q!eNC9cI?;uZ5_VZ&nfG^ZhvJT?$#CreRY9&I zZ&&&BX0EiNSs|2Xq=9x_)JiH{8;#H|?yymx6B)1(Y^=m#Ym4m`v$GaY*DEU<2nMfH zRx(KZSu5_Z#bj{q(*`Lj)^{_mSaz$C+@Q?}VnD*u;yu=WH{>^K=~t|#@caN~7|hk^ z3Z)fh^A~sabGwGy)YFtY?1MGbm8%XqVRABExfNf=TP4fbFhi>RQgFsr8=;tep-NZ= zs2~!(qPsNE&l-g_X*ptgOmbxUQgOAfsJOCYnFb>TCvgSZAl>C5XlD!Jkn2JgXD6P; zh}avyDvOS%<3td;Bj(xiq3p5PG)=58V@$C(MK_D+PJ7&#YCaZKs&p|`nc0I=;3?hEV6i4c>@_;|XUVHtGy3A!H#^OJ`MEsr+VUqkcKfC7- zTIMz8iPmZASm0B7{aFjUXdV`C&6AObqD3u=wDgu+SDah@r+wDl{4s5m4QxTHKBDhr zYLKK8tNzPs^+q+L$qG`IPu!!mGw^Hw%Rj_*h0up;cN##+qI1nIzq{G*_Ik2k$&rLN z>y#YIO*Pk8o5wM#=~N)xpxO?$gV&`TY7ksGexnDAdT^K?Nwf;hb1hzLOHixdW!HcI zh#Xskk|o~v3Ci!^hy(QgL5XMmJ_Gpn`wO790xGCB#-MGsg3bgbw9872cTIF&S$y9x zSclHFPXBHw&1}Zt)W(13#~&BY3p?LeIJJ2bt~T)cOIqhVti@H}UCeGBWchP9`(H@mJ z52nDEwrOSmcV@Gx%CheH`l%tHtO@a;gR=ZK1(5m{N#uoJ?=?dm!U5iT3-#H;-*|D zhs%(&_=J6ThqC9@duBPh6mh6a^rG;6Jd4g4PxLc9i~gp{6~?~I>hpLe=W8?~?9vFm zl{J(_BfMa@DvL%Y#_g(+^EK9-L6or&jj->%tfBZcjf_`bb zG#A9`tek7N^rAT+`J(m<;)R^x=-Ph%En3>42kGwQ7nq|!qCbEB7gLUM6=$qmVB+wc zt~e|5^Gbh72kbI$(Tb6FWKS2qQH>b4Y9P?sv~o&Pno3da#<88s_iBSRjLmjdxo;UR z-4z~WmwA9J({D<(nmx^m_SmNyw=+g?0E6I&_V*O9Fe!^$lnj(rRkZ`jHgy|#CT-M1 zCt!j4i}26TjEtf4joNVLP$pz3c60`&i3$cZxrA?~hOv~ql^#tm*yhc> z+CpARzd-d~%RZwL5U6@m8HAoN2oc=jDC!6bQ%=IacaGZep&DTeIDp}3`c|6n9f(O* z5kU%!^CCgE2L75`2s$j+%li4($ehLtaGm{%75QelAlA=cB4?_6ey(gH?t>O8pyBh8 zVQJYGV63&U?oh2lTp)O3+^{hPHNPk>;P}R`tA#&f>4^=R6(lpTqsgD>S+tXkXuq4= za}0#nPTeG>s>`9;zPd+WV~z1p^y`K z`?WEy?0ei+>|2!fW~+_92|XMH$JV%-C~P3>P~lZTxE(V_6VW2bD?UVQW3~MAw2y); zz!C>pdF)@c*a~B_W~E5_Fj;gJ#0s*Q)Iq8^1z|sLh#w*l94j-ZB`O|G4v>!<>4J7% zPLAe>RMtBITA4hbL`QH(n2zg!)8-iRz%t}PSVrK$6JNvhbcf&nBTi(m#EjVo>x*zq zt87P~;w`rGzA0w|K9TP+PlA(&^Qc2si0kMNr+hI2xdaK7(A4r9RWg`(*-0$(et3=! zD%Ap^c(iE^C_ni1oL*Jm&b7S<(JV@7-@Y9rgI(fMuO-sHRvq;kftKs&mi0V6gQ>+m zXcWJ)ZNb9{$sjxV4%GrkY!cEj9I~4C`HW@SVwSxc1vW1)Q2>{#`#P)RSwoL_P`BXLa8%;K zP|cv(9z8@Y3lBQOY7HJ<{Qng*=!Bn=8ERE#0H^6v5@Ux*w6+LG(fScNU_wWK`U>n3OBs9U^yA1L8RDn<#&()P_*`B*B1>U!Co#9Td)a6V z^|r;=X4p?f_>>tGaiD_u)ZOa|>IZK&Fk^S`yGpRaS@>nvxil6u>;THpCTP z()z2%{tz?uKnrv!oD8S$BV#I;6El7M+0XTF)39FC>*S=b)CYR_ZLF(C?z2$8$GvP< z??GcH-YfZboqCM?#Z2kZz?jYfFwH9DaVGL5v#cGGfhXmwxId=of}m^tTRmvs>d1eUe_Vur~Z1jR%3 z3sY&0b}E0}X~LF(;<05>7fZe>3*dRnqR3JsT3L8q?_?L7gnQ*&u3b)84b<0tnB&pC z*PzB@dCws%W?!rOdl|+lHYzyfiy9rA^G_{3n*290{gS0ek}t>fpT+cCOn)b)Uy12I zkLgP>{cmIXyD@z^rmw{Gt1K`*2QlSx--Q%GSR`b`rn zsH9RWDK5I|;mjhI+Ws`^!;_1UftNJdvV}_2Yw?-Hl9^w9$ZOFL50ktz$~S7Y8Ex>0 zHkH&qPjHBBGDP;LUmo_fKL-AF&#x_^p0wqQKwPS)HbYH1#P+K3%8l)KF^%tf3Z+&k zcLcqwg$}(@!?}oQ=;6?FED{F<0H2Oc(Obb?UIj#bPMpc7?X8f!^~kXK>hY|Ailwxd zff}f~;Ka6c^?<7QhtET38V~A@VUI!S6*d%&HQLRe=3Vlq1{_af5Tgaal%Ny5loIR) z+Ij53EmE6 z{|@irgbw?6IvNA7hv*F%xL-5+PG3hAPU<#vY)=ty7O|6Ma@gX%Y7Rh9bDY_gbyRf7 z(Q&*4-qFbj>_cH2Bx)D4)w7`>lQ_af^dQ1badE!umE>p|b!HlMW*T*7dKsNby(7sh zQHOptroR`{-;e3nV)|-K{~)G+7}M8c`bRPSyOf$um7J)#iD6Txv+SJYyATN*u37@A-MFDuLNwrQf6^ zzfI8Eg+T{sa&5f~ROw-y{$NiSv+G7o+}1U`P8{0lCj( z!_D^gf3|;b;cVzoQbxq_Smt7I$9E@SIOzHVY$EsCEOHRj>Ou*M===wo8leH{jMH3T zMRyu5?<)KRy#zq}5>sWEQ55{LE)Uw}SH`(7jW2&!mztxG`S|5=7R(_Az$5Y^UmZXC zz47Jmk1xMAzI=6j`3K|6KOA4GaqMtXH2z29M}IuN{1@ZPua7VPWPJIj3cy{u5Vw?_>URaH!f6JTfTri^rA0GMrr@qOYIJXOpRPq zPJz1k>ya&$>W5tyYpGow>Vq_oM0b_cbnFlDQA zugKdY9PpC7Q**YXmj50LeC7&@jcCW_gepS22ea2y?dv@8Y-6l1Y}Ptm{v4rBlC_&V z^X-;hK>tg%Rk5NAY+hH4rZmTqAJ`~>;vo=31im2zqugw2`1Gj%LB0O^H6o?{(&|Ml znH8a!%vpmYw3I`Bk>h!GH%L&69Kz6IVT{*oH6P+`o*haJUQK1{#9ctc;$CQ*W&_uW z?er*J-`bvN3sEs|Y5U_OVQx=8(x$T3J%|N&h317&E?{gN89a zAc*0_4r)(@IYwO@rcxb&%|xjqyHN@h*YWf|Rng`R=N^`670Yn$!Cq($IJL;#m}!2y zmo+ML;uly~g{Cr5bW@oVXO4a9->k0XIjXZPC#uO`NE5Nl3pEPfDZj|!jy$^?jw?VU znI|5C;-{4yO+M#$&-mRxOg(+hQWjcb`b#l=KBm7M(_e|{ug3HXG5xie{(4M*Bc_-& zdOec-W=#J{O#iEx;_%z^|2n2P{&xRcN*OVl*GGnWCu>Kd>5Fip(V9a+o}&Im9=ewp zjK1P$dAfX>*&2bQ{QIDbW{9OlrRrI<(kOMhXPE*o=2ir)a7yqhzR#86T(7wl>tCLu zS6zzvl;@zL%Wl-b_i=FWq3mJ*P9H#Q&V|W_>-hyyp<4ERMy+$YFA5>tKTjLFUnzh| zm~RkSgIma1YM<7aXC1q-t3q(Q2_Vk%E=Ndgkcc&U;>=qSt2RWk6hviwVx41z}n zpgT0)3|hkTe09W{X3FDv7J^VYLRl8n0&oap05XgupmdZN&?}i-BoRp^o?{5;Qr(gM zfIJly_IK2t#^I*}1VZ-8BCDxgV*C}kWq4{r1tt_)bw^9BlW)X>w#`b{-(S`B4>IXU z>zeer*!2pj>RQa!&~0IG{5l(1?2`gR>-=j~yuVpNqTyX)3g*?{oV}Dm{SB6~0_886LuoBH4p)AnsLw>6|wmo0SY3=i6mQq_G7k5$=+!AT2iqS3z31z(`AKq~)oR zw$!GOS%?>l^ykD!FV=9DGBa>C;B&R1KB`7o*0?O?J7(JBhmbauaWU1$8{lmeZ+1*M zU($ht*dgo-ci-czM`NOR%9c9w(}Tt~ieUe{IX9O^{@9;ns8C0K$o;FKrUQ$fvjfKL z@Oxgmkgt>FFW6F4n84R@1NE!*jMv`EvmDOp$coDtr+j5g-sSjvJBL&QyeB)x2nkpA zeVw`+p}>pK$;1$kJ;*98jOtEjn7Utw2vcuvP|IJ~lFwSBFUYgt-vp%<9m!wYl5f@% zNRSdF(JL?*YlRCS8c|J2Fef8RBYIpnPwaDdRA>>@Gq|+Oq{#+_i4^G52NcygH_XNt znQ#qc;j4)6TpQwP;!w-fC+L7b)ZcTyQ0kS=w zjsnMcvOD=|XgMeJ$hT9OC!G_zQup$edL<{|@cvQp-V>gid>pZ^Na(7{BHZ%4%p*;9 z)cXGY6$@cgJh;Qo)x2$d01;_TT%z-EU;%SxNKF{zY-x8y#o3By;+nuX3#lX^Xg95Q ziv=mfsWxpM`EMV|`p-5>{=ESIYSS94uCT_rH1uUGUnI?6#7lK!$@U86Eb@FfCBGtB zOy;DGwZ6iLmy1OZt*>y;2~>%pKt~I4&ly$4y}}WAspUP&OGcr*M|athi1I$VhKJOF7)UN1tUxjCL6b|n8B?pd4MN|9atzc2*@YI6Y0^34HnP0(7O_a#Vl zSf{qz)dUs%0yaol{;-tgk9hx;n7(8w%O5c%D6RRUp^oK`k|V$t%OB}*y*ygBO}T|? zKsDX#AsoStVT$wug z9se}Jd2Yo+<pYOzSm$z}j+qZxLtA z^l7)ZqkEG!Ux{IP2ky-q`^Qw~gw)bv_6aE|8O3=^eiZG*F5?pHLOVgTif$60pc=0< z3UP+95-HU87vK!KdGk*70$i3E)ITRTU`h^vin1$;T~?3*)+Pz;#Mb-Lav>V75YTAh zk-YB9WpjEDt}&?Bj$vx*Lw0^jA*DItQXR}Jql=u`>C7ZWHZ5F3wxU!je@gw<&@ze$ zuCO9Ch0lVyvEJ!RTV9F%>zvC70&blkfF8DhkbiHWxE}~P=DGKe zcrF|euMQ3t2KCDluYLvMiAFNWRnl>MAk%Z+zT7xrWn#uaoE0Z3>)a5y4nPA#iB z_-o2nV!xo*A@v>&Mrk&(3JP|uQHt*dI4hxCn^!hU+M`h#B{24`MyWQ|@@A*dW0)kenk4_2lK-kGgfZImhoCmN-8 zX>Lp{fw%FVhp|y&k5BBHud>7|zARXPBWT?yjR!g&U&X3dhBY3|*iv2=b~}P@PL?8= zQ;$oV=HIx{-OpoE4!pA@1rNPB@zg98-uBp)Lt&1cxgl@kx|4@HrxPmu28WJg|1Wjv zSkLrDyNdePc(7WwQJRCys#c2|^F&EM5jhnk3e|p`01hL2tnfkY7zEzvT>o+Nv;3VM zQLq@;eFO~{*qsBa_`u?j;$Y%1;sDlw9)Z^4Kw)YtOjhu0IfznZYS%Uzc9?6&m}C+& z#gR9WD1l96GFSsVD#89O(jReBkg_Yd7y|m%?5$z^>OlP#PK#k4mtR2b0G7dwD{A}) z1#_^nGZ18Yf%nO69B!t6LSwP7o7RFQ5;sj}xG^Rotuj$L7I|eF2vFNpW-xcjfWq8= z*4q$fDKTM_of#|yC-KdEqPLMb4{Y}j#-hTqbUEu`(ohkVQivof@ZDHc;J!;{KO7Hr ziKvuZ7o8_LysZL{kzf{6SbRfphO5L2T$+qpP3(X@x2dSy7ZW5C8_TyI<;e_N zMR~`!WJ#`mMcafe}F4lIeOJ)bSgZOhTGJ?%aI9g3JtqLWJ)-BdXV-%Dhn@@aVN##5#;B6 zRZh9RhFDT}w?k1m5GXYy|FeJ>O$*9ia&U!U% zHxVRp!rR|hu#F;L(UoX)H)-c1(qhq8i-i)4e;w;3_R-}2e5%-(FGaYlU?5qsV(5j& z9O}&zzOn3Q1KP(oRNqwRR1E3yMN&;fH16RvZ38AV>ke`;t%(_LI#XS5&6~B;cWx+X z0bJ|I9nz=mi+sR^F6T>m0!uyfQhgmaAM}j050eUt#->d1?Nju;DWtetJ^wE?8K1ff z8_w}+RHQs6MlX(AeAiZ6kg;!Y6p7=C1zI0+`T7WkWC=@gG-b01xXn8Hj*`8x2CX84 z>HRWYVp&(!OXrWKFUrU$T4wK{$qbpr*ZW>C(yGY#c+l&WIV6nIXRq${ThTU4t6 zNb-;MkV5k$l5H?Jc06n+jPwNo*Rii5$D?%E<)cSaK6WQx1j1=^m>kBS&^G2#+Y%R=91nm^#4t0gy`GPeSfD5WwkM%{)z4q~D~>CD z%clDIcRcxlC&IfQ9GYl%Q2=SS%V_OM6E6+H=Cpn9fMV9OwLEBPPXoHwr@w714)n+A7v;ozNQfecH zpJRZ;tbS==W$L}nM9Nqj0#sEus=C_D>Pz9Si|`!Z-PXdn&z5$!B8im=K#_Zu3m>cP zmd%mft&bM>I#{9Ze2RTlSGSR7>)oaj2J zukno}UijhgUaec{3}2?I%oFw5mX-v1nLEzWVmT9W<~jE|7-d2{QY@I(*DRRUC76{3 z)B2hPQynGC^K!vd2iJ06E|}{5I_}v}{%$g>Q}m&(;g;uMY7+!a)kQ+Md8%9GNRjkM~!v0taTT#yI(7B6OLWZ3XABNaP(^X zkmF~<@e9M08HQkO9V$u~hR;_r48?34Dhe2i4;S}1-sK>#jK}fdE`vu6F22yXYH;Wh z8{Ee$gX0je5)k7Z4udW;Y_zF<{L2zHIxI!ZsM7Gtv>UTY zg?4~yA^}6P&dj*wuN&1K!{kVG5|J2#P9@zTHo80F$*oF`Bp>nw$Ao5cLEgmGu~PRG{xLvtZ_cnBNFMf+g3uiP=k6{$)4Y zTG5pkIFD(Ybmg{kEp3~tN|I!-m3&lXuq3%v$x(=@%;dP=-QmfdN{%ES_2llbmC4grUa4*Q zCVe7lTfSL~G28M5-g6?^q8ZV){5qY1v@PE{8VIUwBTjZn2U}}G1uy4-6m{I>N;1DK zZ|o$i+aHiIXOs_N?s*6jn+1@%YM; z-P!w6%+>wQ-0>u=^E*Rqv3P1X==fPt{5qjEU@8SBuBd3p5QpoFVQ|aNTRSRLpmWk4JnR0jyH~T z_4wkrwvNX&7skW53h=e)T|g<`4jFQ|CFmd?CU#d8RBaRrj<_*P{yC_KJo&G5>12`T z6)*p_E}aV_b^c9}b6F7<@qCL*l`8K|lK@FfH?5J{xG|A4Ud0B0%QSae4y=O>qyReD zND7pLc~W2-fbA%GV+Mv(X2iX-LY!8SjeARM6ekozM9C*a6duMztc*X>GUMdiwOqN` zav1$^;S#Rga&;Kcw9^X2M2DMOqNW+@k`Hw$4s}UG#Vbj8;GvD+cY!BCPnPMQIY26S!p2Hv3jLpr(O_^XO2Zs0E5kl3Rf1e3=(os z-qco)Fn254VF#|ZPC3v(XoEmmrd3EHYrU+b+jE`k=v@;P&m~Rp2b*9J1c+1Sf zh}tT?u9tZ{btmyuBBtv)FalQKyJAkh^ZE`%w*fNvi^d$j58OFIE20OzWjf~NHjkJ# z+#se!#Iz6YiJlk3RK(O#KdcM+L0{0;_qL%VOBqTC+-8m?y=q6h>{JFh8Uk(;>3sw# zIZ$9JM`Q+y@<528wm%P2yQYIBCeH=Ve?*D^8qJv2xH3h~W9(2Tmlr6PA{Eg>YCmuE z34AM<%NV{36|%67h!?|Mr@-#g4l)OO=u<=_O6zDYqpj$RB}C7{t+l~U>cx+@$a&o< zksERdpqB28TM=pyknXp;6hi6lh$puy(HzT?+X}T|a|e`?j|q4V7ka}*dpyi+Sx=6+ z-YA8iqvjU#L?_G_pbrI%4+klenOw4%FM(o6Rb(-+RDohOq-zcGY12Ur2vMfeZQ8%T zlz&L-WhwulJoF`82|V=AP;?s zt*?0KM$_6EoOHX&&furpReEMH%@tUPY$j2-j~q<~309{i*gKCTKj#oXeKh&|TEdleOi2y=xFLEHvXOMY8Lh(ONh$^=Q>78XEOu6uI)4 zFEdP#6^Ge3TyWrF;6qTXOiY}%jVG5GbLjJt1Ixz?Bt;|Q&Drii)kBp!u6V<$FJq0) zIcuT<%S#-P1BnBoB5^=|giC}<;(&4TrPHd9Q3kS+v1N$5v(028O7}QX4PuR;x+I3yux8P8N@I zWzk5rU1iZorCl|0o-N-m2n!dz5u$2kBg&$YYP-s!kxIJ;2^hJkMqcwqDt%a%p=8{y zO3_HAT{Uu%MqXoCp+v>b5(6BPSpcPyek_Sgo1%_-R+B8r9uUqlu;mO<6My z5GGc6dly^rw7NS$-^i63s4?sU%OV6Ojv{~rCM2P4zhhpY%ov!6@)+Y2uo9J5YfGWV zL~_A@p>rpe>6Jp}?(;Q;o1l)&owWDFe|I?z5eb^#W=SKnE36Y@-M2O+?eMrcR zf5_^mHKcDTbg_ovV3o*l`W*5QpA#k%!_DD;jv3Cb%_Y4o!>td?k>T`FP`K^yFk11a zboNi0>8it=v9CNk)6HF_2#M+R5wD*D=y>KEqbzZ<>!_x zh9Tc?efgPl&qAKrm5qR#3oIKVx6NGH==*IfKZ5S=AdSqIpTF`f8rh`JWQ`k*V}y5J%%zBHMCgpvO;Mwt-=lA7i)T z+Nuxp-s<-?;nEBz4enql$F)3yITX96OVRr`d)|@Rx9wEE91xvF~ zI^L?)cOVT2wm=efD>%0->Z>_e5i+bBlT8F6&zx#)G^A>5*eIwh>v~3gm089a>xwLO z&z39Oh|Zx09=-B|d;rN_0?|630+fAiGVucCXTdc;4s&GzwqbaI@mCH&dC>BVg*at? z(e!9dUOz8qTGWvQENWAyMWOgBCXE?fdUla9=Dk>g+LX}DV^x*1(Ou&PIkaK0E8L_R z!%d3IUgt6LEj|TNG?<-xOg|RT-6+*vVaT|XJcRzIPxU`WI}GHfV1-xoMXvXSp@mov zob5DAVYX*D&}?a^zc)LyF)uzm8eZ?gR^icDdI*CTjAJA-oiXI$s$4j1E)3y}A~y`} zI2&xY#}jzv~|PUVY_!1V*Y88A=1dA@?aQ|m$N(DFO)S{QD! z4~V~m?=GpLShN9+B1fCQvshnGX(iF zE=#{ju**W3_(pV#utJ}#ma+_0>sDo5imDhP+znKYtt1J%sp<%`8;phFOg9m`TrLHU z$ow$L?t|GedSnUjPA=vdeE!UU?KuPXshB(459q8ETq-maxmqhzrH0arjTOZN$MQ)4 zMmE+PV|B4{tfPSC674fTmYc#%ZyL*-Wq|`ZpcSECt9`bNb%HG%fynDhjo`MFMgpE_ zr4cvSrS@3}TZ*TJ_Sq7yTa`r{*M(4IX*8~V=GpGx4R0zN**vbRf@`%;s6ZUGkKE@7 zUa=i_)1?sK2U!Xb)|HLSjO(g5*FM)mjkjF^L~2yEPozefHKvBL)SKAad}8E8<0@Dh zDpaNfl6s9NKBc1kVA_~vJf1mMR+c`m6f9KCYXy|$lqXjf9c?Q0MLDP0yjpQc#o$Ai zda4TPMQ@}Et+FnK_%#~2sHF=WAcaHmi59aDdqng+J6d;{Vsf3dISj(K(Qtd%9JZsA zHcKaM58U3h&_AGh#|FD`k;>7FiG9rC-OA{t^00BUa9M$;E%9nSTvjQmDGs`Lci0N* zs|sSisvzbWSg9c9MF?;s1yQW&q8G7`@-?@iRR`PHh=WhQmGSIis2v4{KOmJkw5d4= z7~HJy7rQbopWyi2T!~uPSHu}LQ492{&D9kY{pmz42vyK`H9~8*AO>`fqqFZlvyoR9 z9YGDs)+2Z3TD05%mdMcxK3+eV;vVNj`~Q{{;J%53VE9H7g5;1v!ShWdybUG~p8cf@ zB5U}pFI^;If9Z~}D=y&`E1)+)5!O<)YmG!(4@owa;c+p==Hjl;LaD;$3!ZH8Q-p_${a@gziH& zar7-Qpr`*6k0NMSOGJzNhK`1-z<~Azt`ecJ6ZkP}riEx!&RNL~YgJ1?gW;1*JL~+U zR)3h5zn`kbHnXn60Yu&zfM4>c&bKM%glnB}>3y*Pqi$T-QtG=)NV%HRe!LDi97rUl4U+h|&1iL1nv1wf9gGAOW?x zdyv$Q(O*J;#hzC2O+v&9hS?b%yPKt3c3a#IRK8~C@pG!}s?Q_j7q{4_9sKoI7EbnkUlYN=j)ydZKaK~N;l!46FnGx`l;dU0}0xxWBBT)&aP%2BI%?q?JFC37;^Q~d?!pDc*1ysUZ zh(u)_STcsy)jmrg#Win7mS9);l44Yo%G0oL4`cYCrSzvwi{H!3%F1%0>#b zte;NVPbc=XVS&>%VY^Y-NbwEc3z=KhWHFSEy69EA=+MQ+1$5oUJj;oYEC6I@0ep-C z0i5-tuxS)F^VKDMe}+NJ5d!t90obs|AP9{u%2oT1tQiZ<353}y2y=kYS{Q6JDcYb8 zS%Q#Dns+#9G0fdw2ol8Btc6Y4PYvySYotRBfeUbynDn}MfFy|pkVqUf8x~NdNO%R~ zjRGKpP?eaq0AWkQ@DnPrG=iv~-GZ84&lmNu2KAIG`{Tg0p0GCEAN4nD$GWGOPW zc&PSDN*jF9LD2NdsF7#U##E(Qm7L6FRSbCKT_Bn+yv3Efg_?Jcl zzg1ed(Q%j18Xa{htvh5^XiY<_X$=AjyvjHUb?p*5C;z3mTSIG@tZYMsrHyW-*+}c& zxY-J==Sr$@*nezgzC_#>m0UyXYHv>KYG+RC%k+g_HN${viUi-3*CbmLMr$@VwvFCf zZ7@#nPoT~UdP7|?i|8FTnFipQl$TVikzC?ejz(fv4oKowjtN~hCOIb$#rK3vb8JL~ z!2$L)qm5Ea(%BnL>P;o_VHLEI#LOHChs`uqf8I=*Q_NUYbk%E@Mpk4*&<9LvNvcS0 zeV>uXMf|#?xp){#7UAbDqA0v$LcVBHhe<3OBgdq!Rn0NZ(Fqo&I0~vu(?l%+cNR}A zizYB4tFmaLqL0)D+=r4FGY*uEHHan^buYs>D9GZeR04hBeN=Pks%r;stO8f~f%rJp z1NIr1hc}$Nw>R6JLEYcp_YaBN6E&1CS#xrc*ogim;k0xuT zPUx9uMaC->b1h>f#x+3w0+lscd!lTCE?Ht=FNIKKc92KwWC<-Jh9gNcCPbuNj09S1Bp{g!{7*56bThf` z;oy=Q*c-%5*5P1YQ{#C_3Cu#@bR|wwyDi#fp~3qqOlM_`;K;g(MZ9y99sFlFT?hh1 z=&qp+<~w*|W?Sv_UNa;0aWk8bfPVsucRderrDhTp|1|5v^7afr*+2Y+&#UX zP@M90Fz=UdgK5}!)S7bWXyBF?&|}bv^fPn6o%83!iu~?bKws3Jx|hh4)B~f}Ow%T= zJk|I$H2|4ft*)^dX>K45vi{!Q`tAlCJlf#ZWb!u+AP&(i;urV!<~VUIq*6Yxq0Nt^ zz{G`Waf8P-^wndWk29tO+OQTDz-BELAHYP>whT6-L5#VyfpPh9^oB&r%1O|v#cND) z;8OqG_`FoM(49;nshoz<=$e@cY%*xU1aPki2JFDiJY{1CsGYyucX4!AETREu9@snx zu3AKCOY^@JeSuBlP&a9)n~cXO4y#RwSB<0MP-!NPdOTFIBts?1DC#tpdgJC@hg#uI zP~cor3>Bo`%Vck!ncs_xYTV9lv&+;jUs;3-e)+lz_~rA9g4+t%Wm%vodtp)jgB74! z%mu+4Iyo)Eg~g*-iq~YO?L@fgu)z+BqZY)qQg1HW5pu7vvXv*6(;Qr<TJ+B`O+R>cRDwh4mo-^=C!NZ0=KQy76!=NU3{jzMn6o+WUi!#@cN_+Ok7(A00`fi zbZle|LvOe437ZlHGH**YNI-o?l3+gd&&33ZlWvvIqELicN-289N1_ZPA`DFeX&%Sw zi9ROha+ANyO!S4R%H$6Z3m>sE(briT)mc3rF z%<`QAbBH4cL|Oln>UOEqp9|PKmhe9_)ia@r7X> zK=Or7)~y7+Uzj+hgAy(1T@~Mu<^L|xS_z+7l~vCC7~2nH1`98&FO^>wfh6>^d{`)p|?OdqOU zAk8l{RNtGkR#<46$}cwTlTbB%$xmMzW>fk1DE%G#I5B0|-D3GMr-7bDfH+D# z*S7@qy%vFQ1W4tT#@Ht*WLp=F2`S|{@VK`71l+KEtIeGXc0Wjd;;pU0Xa)qcVg z?)p3GRg*DJ<=<)+c#NgR9+|hym_kKke_|OFibc8{pMjKRMep7o)rtyEORAM^ zI!jdA923_DM29|l3Kp$6(`qDEL~AL_mi6+rkFljErB_bY4_QOX9lv@H z;{Y%K`(|cMpWEbY_jel<@!`YiSiW7uFq-pZyDBnh`eq;9%3yH@rZ_)j)!>8PJ8}pC!Kj#&N@d2 zvBUe+aFzkOx$S>6q~L~S0pJfx4kjz9(xW=L-0nXg?|&txU$FE@^6N4Ejnog;nI#4# zMw`vgp{C)g3AT49&!tcqkFu{Q*WWS`NYDmwe zGOk|qm2@~`rL|vbUC0JAHJUIaD`?BR+pN9$;Uu1`kS)3R2wMkJ?)z>9WOiblHSryQ-3 zl}LZ;_Xxlig#loS$yISny=i7x@m8ImaA08_NS&|lc{xq;dZ+%{#(siR)LHl71CKrM z;6rCW8yG!3%X^mhF7I33zkFc%;PRp6!^^kqS>Cf} z&)z-z_UzwtV9&ulhxQ!abIac4y?gfV-Meq^{=EnG9^89q@8P|->|5TqXW!m^`}XbM zcVOSaeTViP-gnFX<^6m1@7=#||Ni|4_8;7TX#e5;w;WhLu;;+u1N#o_KXBl{!2^d5 z96oT%!R3Q{4(>g;@8JG}2M!)Qcf&bp$Z zN3DXjbFtQG{1-RheDmL@t9oaCg^oM)`&c7MHjrN69tZ*C#d_yqyW%D&hyP$1`>&d+ zjDEqMT)7N9@vdc({JBP_e}evn#8+Dd3w^QC3CDnLiro81DUh5X6-SPt{d%MGLMkxy zU$DPd21VuGtIT_Wt2Ts&cWWof-)N49^hXQ{xIyhVo1OWKj6-}8$Xd-8-)(jlS9mJ2 zyg+&b>3LGBCvTHBNyh{K;zZ}`f8z!&d@A_Dm@NE0dkh z&wuvp$?(wWPo8`_B>4-Iog2bKPlVHto`v}z{DlY3gr9%($F;LK-_hKJ7T(L<-7 zc<7TSDSLjh(+Z2K{seb#Pj;F+!lR!GCpdp-vXhcroV-TyI@i9ec%5%|rhfk9ryn{U zZv9|5dHR!Kk?z`^x^C&L-RbWLpZSH8r^6EuKlI>3r#~$aF19-x1nr|wo)u6w2<{BL z7doA(!Ua*{SJeK%<@rKRaJWkm|X0ufuNB2-yG5os^&EsbrH zY;wzEchs9wRHQ)JofQUGH?EbJ59*E&7OP}u1i?`#J0h;@N@oXW{lnEdvhJ?C(*2#A zN86>Wa3?n>=lj0nZc%0YB{Vy#s)~8iX@kMS&e%D z2i?)#nJ^WXAh$_E2PTb4VmZttRal3)QfQQ1gINd*aEh#0n^{dd|vHK9nPn^DZ>9Y|)YwKGiCDilV!MBc|zcBLkmaUI$ z+upl3+`s?ep%;$5b^OFTXU=~7r^S2UeE;N`v-L}tt-5z@pI%H#&iDFk_QnSvdg;h_8JT(cb&HlRyJz*9wGTb~>WL4|e=_p* z-vhy2a@P}kPCFZ?S2_cpQ=-fwt{Ogrb=w1priGr}Pp!*`*eH)+4aVen}lIC*lH|J$2 z7ny8c%N8&ub|!0Jv_Vo3(XuJ}WV4I47g_X6giiK>BIOj$<=_Y$^(k@;JgWagG?o-fsRkEUet&XfxLfZWt%rI+pA zlTFeeUCm@#soa#*G+nwbhp};Xwov;3 z)24{ppbXkkEdd+LE_iTO2Slze#puseEp0DxCuU4!UHcEb_kP%rol{VB;v_3fE1K@OX|`+e?MoV# zuUJX-t*KdRZ4YjG@Zrb%4<8wb3_0f`%4Cqwb!!WL#xd9riPbtQm2NvTBiY6l8uPd^ z?lv~5R5`3KWD8jbKa*&czEHI>!^A6l=P=E@u_}X`%H(p|1+&>ZI0wtHM&4*xAQZD^ z<1EI-`f4VLH+Apdvahv^ zC~rSL*yG%Fu6xllzw4f3C}nj`(@k|I2RCJlzm_>z6UtCFuP8IKkX!HI^X@jYHHjSE&Vhm`!NXqCs_%O|ljs z3RIxuM+-qT3R*Rix_fg7s(+0p571|EBR1ffa1P1y`#Rdi7N6`422k#Fd1X(h%$Qaq(kMBI zA_C@NBU4%=%*Z2lc!DTS)}hjC2V%fRasuNKG9qwLY^F000{@uQXs<-XLKzj)P5F_5{XhvQh>mYy7xIY0) zO>%TatI$qd(aSMXZwHttc{jMc19_7!@7sCAI)tIWPjoH;3zLsR76q3L>>AKg&99HMc7Fk^ zAJD>a*yRaqk3jH~lhN`v{%mss8y1LTx$FywNX`O2Wb&O|LA;4_a~twQWL2nno4Yzh zS!#jO3<*DMVkfM@#3u8+UADrb4YY2VGuRA@l{b3qVsjj&^T?_A;;nu=#)tLzQSN<5oAx z-CKZy5IJgRjFE&#L`*!Xx7 zK1av91T4+jacZ5wwk5Ft0X7VFGsa;(32b;8nQ^rblYNaiPA|FHl0usW=$!M=n9#Q%H)hezrB>>r6;C zuO@ytGE#Vh78@=aGmvqoDUl*l;B0P_n%hzFs9t~as$`^y6fG3Jv{dc#qGV`C< z@$?mw(rfXBUHAh&zZB@$ECfC4y)s9LKF7%90{eLGxoeHzzON;p@uuLTR%TS~I3aOOA% zQu@(S-*XT*EwmA+OUWEjMuy@?MeZB(x2g&Sq)w4m(*a?l2c@zow0JgnFb`Tj|5OV2 zuu-MgVb^_S#DH9g24HMXSu`4ZH_^l;Ts9_LBqm&YLbyoTwYW>cATkNnYYcg(?8SC3AZjQPKKPCcu z7FFBx1x48WMx1xx^Z|#yk^sv=B#Ts#f=Qh#gpdMW>Xy}&8mS_`lJ%(4t4fv}TUQf56vx=Z${O4dupC=S z{K=MVx$HP=f>ksoBbty1mIplG4gw5zASQwpnk+g))Qky+PA6Jx!b;XO18$a?_F9vk zrS7I@GITed-+!NT?{}*tS(0NCX02HM>YRJ-dF-?IK6~%8&*Mh-J@#-MMNxcj`%vk` zi4*aOLy7&>Lv*OjU!_?X9g0b+C`oCt{dp=EF98r8C`MqSg zbol5KLx-PSy!ZVN-FM{hj(d0Po{thGjwtc)13Px_-hRWqPaHn};0HbumGolLUL1Y= z;ls!8TRi;0y^F^mJbdr*W5*VwvR)7B^#_h0J{(o_IHt!B9$vinvBhJ@@B854dmlWy zcr2>wRb8(hzVD%jj@=&(^b-z0eE-9bMA5Q@M?T^c8dl`+!w(;O;_&h;j~!n02`y!L zah;`w8s}euqUc1aab8CmOJI>isM>2jw?y6QmZxMxLIknTJ>b8)~r`56|xRjl4K}JcrMrKK*&L$PD`ABpBhv**R*_Z@xgzWWy+Ja#nNUOWEy(R&vUKeqT-w4>IJqcm#N?{Mp; zH%_hJa?RHI-~Q{;JD+PMH=T%|N_jVvl+&~Ek?zg&N!i_;M)S#_yZJ!8P>S^A;`Te; z%`?eh=cZ)8i*IR>I+H~1rnIuy>r9j7Y}899dz})|rMQ=tdmUAyXtmd=glN6jsfK8? z*BJ=Wpa+Urb)=t!@#CPY{DI%`9;)$2@!XrtFz7oxRZ zXMKnc^g0{TsN+ieNto+7mp*$<`+&vM!5(<))P=sePU1=jq6P5i@z?HkuPHtc_PQIx zvx5DuoJRYi$Ws)M>aO1x+`spyS#Kx^9(%Yut!} zjc!!IweC6v*SRqT?{MP^X555=O>VV<>)oV+&2Ei?EpDxXt!|rwZ2@z`Jw45ary+Zq zb5ly(9uk|DxWlbe;?9s*x5Qm;y%Kl3x`MjfpkO{^salqW@KmvjWrPdB)mw?@Aj zclIj$mAJD{;V;LX8x@|8JMV194TeLLUx#0p-!=R;^1GJbb^PAJZ-(C{e%JHc%x??7 zt^Bs}o8>phZ#%yo{C4u&#cwyiI=^{-3;g!*yMfOHs1#~MAi)5n@Ux5LL;J-6M*hI($!$A)`u*2mgCx6Q{^_1sn;8|k?%J~rBO zn|*Ao=dSm$@t)h{V-r0$<72CP?j1fh*>l(V*qWZZ*2mWN+(sXp>bYxtY+cWFeQbTt zb$o0?&ozB)y5|}`<|O=`iy8h6ca!7srUtx$6q$B6&6{A8EC(&qh`sK#k|KMw7$dQi zi5~<^>2#b*jGT>oXradcTTN;O?Q||W(rrjP!A#OljRR$Ar-n;hd?fu=^l; zL*&>cw?bo{BUewG5205|`zbkRBCezwcq{!j=Tjr3S^FkeawP#eAlarY1F8ZM9;bVH z$}zE)?2>zQu^jSRRR}qyRos9*TCpy18dZE(w>qD^i#Wj;0dLywqF}fp6s`yaP(hcN zKFma>00z*wJa6eg!v}FX(|?A4;&fyG8NQ2C*MEjEF_q@^!RIlRX3so~We=gZzz^c6 zL%khPcX;%@C7$wPCoE*Nt%{dJ_ey#(;4BE;BA#~( zvWbWU>K1RDX9wS_m|nD@?o6^Dam|Nd748La>e$O!co?$38 zbs57jj*}B<U+I=waTGPuxPwwH zyF{iKdS9j(Gwb6C8Lmmpp4-{uZ9~bIosC*^yjZ>&qR&CttRz? zO}tb&(rsGr>9qAd#&+vyx;5aKaH(s}1A_~t!L-~N6f%nc(D&tDx0F^idvB&EOTBcr zoHfn#6h=EyI@GC__G2j}ceKES8^i=pZ@#mI<&y5lk&w>Z*{Tr#`4hMj1V9zb8w;d1 z6Fr#zyGX7Eo*J%xu!TXSS_XaXm@)NsO8gwtE#KZQAvHwJe5>8(D-21xUY^e!EfoZ3un!vV4`6<3 zmV@aCma&Krw&G@j9SRSVst%YHt9pS~W`1X|1QUYEvO1x+gM>132hI8&1d5Ze(}3Bt z>isRP*j3vlya<8}7#MWIhDU=Y0FoHZO{KwZOXjQ@xt7{=t%cIb62pN4OBFw&#LYIM z&H}YXHo=P;VsLePQv@JBT@0&d8-j#?m?YK0*hBEpNExtAbPQ@T*=87e;*?02EJ@4A z5_;IypUEyxgVKCNpTUJD0h46&b15oP1~cvlsia%=hW?BkEHu!ertmrc%tAc<2rw3x%Qq6^;Y}(-4g{9?O)8nRd{eW=Zt7KLs|yr(&8u^r%l# z56V?UGw2}^YLjK;ng|eM$8~Et0W5XU)fP$)^bdM@)>unEHN>BC8~nc1uDcR{5X*I| zgjNRn(ZPPS)~J%9UGYJwF=*M_>l!aM;-R887zQorJ30(kfW@yJb))puS0ZGbQjuoE za`rTO-NE#!9?ZhKN4mB2wdj#FUQGWc>dnUHWgSF|FwJ@`I=Vc)K{_73D1GB!e0}x~ z*xsr*+O2iyW-EgIVWFr~le|#z+d-FalJ>gzfG*OOHDg7rQ0?9QG7JT%F48bVmdJ^j zV+wy&q%|BebSDFm3Ff1%1a25Q(y65I&emwI3n|jlty5{~QE-jprR*5kOm)rYS7}yE zbc$`v*#M_D)XF5d8`j|2;)Y#mZ?q+ig+kJ{^r)FBaC21@wM_7qDQ&OKJ%Nh+4DP|K zx;!HZI4@wY1c*ah{$(d>4t!fsSm`T)Vt~HA2^3YCAA&sI8_82K=e76X<*{=iW~%Cu zV9Hv&7*=R7qQMN&DL%$6o_vE@F&H8s3r7rYg*e$?+V3F6T@W0!OM^3hAPE(Td5k_9 z$Iyr7AuueDp#s)bfq&5|HOp$dDW-*0p1}D-0BN7-RP;iu4E6Dr&hA0RPP)KV=(~Op}1BV{O#2F0l~cQ28p6Ep^v)xVW0AeA(-$F|Sn3 z9L5xsb8O7YkYfxLE%nuuE7eS_j;yM6CO>b*XsxFw9_!TUzC3MRS}I*UFW@u>P4Xky z)GF}cSWN&|Qmj*NVihqFDGNHQN+8BtSbnReC*CdVT78PangnMRH3G!|Wm1jORqxOy zxC;)&!`Gu|`bFkA^q+;qMyra13(-nbMj`FccY5nv+)DnNAEoxXOvYOJM*Juv1hpuH zL->lB)eKPa0JKR$o)6wi%7Z(~y02CcDB&fJ9zV8;_o;Gdwe1Zc0AJl9daW%;o>IYjkqrAEnAwLX2Ei95VDkAC4IsgT|S(n~~ zthX@4B$Z$TU=+7soSS%8k|f2<3o=y(GQ~{Z%Tk7~ZN{fM%1qU~Xa$#hBlLTxMt1cM z5HitPBY9AwwSs6Z7v5*0wT7@%Sre_obs5nr87vazqE&Ov8lrVD6Rk*na+>JW5Od|@ zh)z~z5S^7wv{rau7TCN;w8C>HTJ610x!}L5QmVB^`hSrZQAJ~a9$~5}^2QsbJ2ZsSvqR~o^z?9gCP~k& zO23q}H@6aL@&BMQX2!(~OYDM(%%{iFPI`VU{kb?jHIcrq%&~Zu$NzF$k3Wrrpe#=R z>ZcZa>A(5uEq4(Ar5A~RYEsd^_$#6<#s2P%H=;+=Po1yd#>1z7=kZ=TqvU`2GsNn5 zJgWZ~7Sb!#hL{ccdHjPZw(P)TFCAFozjM*k#&L)ym>2nUz@2=d!zPFqIs-x+ybx!6 z;Sq_L!&s#v2|eVb#$KG3Zfl8oV;E}S(G<(OoR)D}fT)gK59OgsRIXG@Qfp*N(*Md- z3p(9mvR7lzS-K`zmMl4Jg$26aAptPs{7acfG!(mmDJmOClf@3REn0<1NE)F2x%BI3 zU9tD0Po%>#uImS<9A>|-ApzTPh#>jT86=v1Gxn7BpRzR5$uOW;OeH14tBp1tH%`)@ za(hGLlcjj@gh|~_joz9?Rst(Fq3wbqVG6HFNgBc?{UtP0YPcbP$?Gzk@0fP!3}zyP zz7$HMlzeIG*&3NrVloSZ2|Y$WsT57DQ3FD}{-Gdpg#}6i!GK04rLV6ND#MRKW$1}P z#;}#y?Nz%#m#=jShJdLp@~#0jjmK>Of{7OCWGQaEJ|Ni z2OJ7Rl#bw0JmLlr6xiI%0?EVca^rVuaWyxS&a?cjR29+kcTJ8i6*&J zdjxU2gs2whgE|a-jaVuVM#H-qO~87B?N}*RFHyz;l8+2H1ggx-z^b&Q#G=n3p2518 z>4e~vU$K^=0pQg6WF7JIrF4k}Tb?F8PHC6He@B-oF`kH6W<6a+%osJjOV-)&Bb!;l zC~(;{`)?PTN>cRJRVQtms4~GQ+exy{I%Xx+F<7eV?ICqdO{;S_di($vNg@9rc2ZTg zgD^~2s~UlzNkYpA;RbT&ifc;&Rs$pc#CwCJ*iyL~6 zrOc3WJ1I+~%vs7LDff`V_5-Rl*NBSJj24$Iod$fmGCf^szk}IB4v0B$E)EEpw02H= z#G1r_g_xkCMPh3E5aDa|DRki(yh#9-0v~-yKgT1G2k1zI|9D&holjS$m#YRHXzvP( z!Z*?ljI#Y9#z&09>DI2-ohE*rXoIjd(SWvLR40D00Rt*8TB1LctYY z`|R*dhPBuMHV`{JgLLk*1Bn-92cIr>cx6!RkbbSI1q$!rn@mqN(jo9%m;yEaY~X_Z zJaw~;)K9Cft^i|60!C9Fyr)2m_>!qdf;_70a8+g%Tdow>5w_j|83Ide32Kv%@{>Mr zzP1?x8k_TVY}Do*)#jVw#U37Sgnv^TY4!AT>@<20Y0nehp1!iN6Q`d)k%7QI*DCMM z;y{xfy9Y^=$-FEq?UxG-+jAzly^GyAlf36v=6Fos!e})=t-Q95Ki-iV+*k?Bs7*Ss zA}$1q(0jOpDJ#ilnj(D<*gPa_4JHddC)m@=)U+g%CP@=G6&OLBV_2Hz(aMx8KSZjR z9ncpT(&}xjPf~cB6Hr-S8zZ=mwsJLN`PQQ|sO>5v9-g z_7aaaCXU|u4n07d7k(K{ggH3G(_{b<;5kITBX(|eVu(OsY~n|NF^rj)!Pjg&W~>H} z5mL}=gnG(WFgQ#GhyIA?w#P zUyySsv6O!FcpT?O3Tq;$m@*KoGPi>UvfPa8g6ctgi<2$bLhuU1OY>U~@eJWvQreax zIp#>&n3sipzS)qhITPDy!HjV_z=i-8ib`}%O7G=P76I(+A7k`T|k3J&+%P27b zV_UP#`gTuyUrJa}O0+efh#*UJk;R+@ffto;2t8GD@yU1dPaD`YRq0$3sUjt>H zVA3q`nJcm6Ly#<#ASfAKPni126*My{(VEJDD%F_?3mMH2U7{I0Xw;b@^klOaO}!9* zB&h(9rB|St3VE6(In6A?-!%VzL1|qDC@q0>pNcexuk*GB?=r!`MX9OPvJ~c*W>?D`3QJ>elpdvw47(1! z=(I}v)j_8z8iwHHVmkRaE-Ad1kz-P3#-MAMPErxR8{J_b~1+8q_E1iW1(6(U}4%6Ri%Qp zcACKGmI*Z)%WJMGVAhZ=@=Hj{Y0Z{HvkVf!r1a8oqrEd~d~r|GK2gaB^Et58)?jLD zfF5#fElc0SllCe^sdg8)XRr_XbEsR=UeRbK8dLWqr2!$|T`Y@&XB0+c-IpZb8I_Vf zBZH)z@@IAz(?b7QLQ-AI@-thve)(q!U=31W)WSb#?gF)eC7ICHj%(78C-!JyYY)wn zuC4g{x-9g5lsLhS1iaaU&?-e7?@?Kkx35lxm< zC(o8q??RI|ituWZ;C;U3d*sO7#hD~4e8E;@c;DJg4EmlMmPO~SJ#_`7FY6srFz+3& z)f9nxXY$|hWUDbfc@l65mLQ~htyPeA+=*c)Qa>t|E5R*A@p2_`2T#(HQE&_* zq$j7^x2Q%~Ucn%$0V7ljL5vpNqhMbIR`m2E{^|WbctFA4=mS3Zp!!b~TyrKVCp{S2 z6dmf0OIc;4uRtSDhfUEvdL`r#?D09E4=kDvrkp^60-`;YlqL^o&1v9{sqXmqw_=qz z5P#GI`sW%0IziP=|3Xo*eLMZDeyZlkA;bTnsK}M~@84!A#SQ>>V4F>dHiP#H!EQGp zmRY;tQo_csnOvGWWVe0oa)Lk7>kg+KoGQiaZg{90RhR#VKwFkjt{@W2>GYkg2_V`_95&8b}@KZ1`K6~^Y&2= z#rkOXN&EpB$_8>&4Vi70jSQh^lKydM1`+C^ju4te-I3AE*MoDf${hAzUwytk(Zg}#%woT_G-=#cG5>;xHeVGzC(q(7Wk*gLp zK{6La&4q&I^3a3a6i`gg7*sngi~Vi+!g zVNvxhVi;XXVb2noF#r3*uvFOv7_Nu_V7LK>yPP0q44PdwEc}+WMlGe-Y2j=b=hZMI zXu07o4ibFm9!o6rM7O=<#y?69Hq?-wG>J6j7<$-L}Y4Unb=1(CU2?+B>8hSp!%;=4XhCQG{kH!lYGJI zV|JXSNCqS0r1XOt=!;gLL=8o`u3U)mfxfa(6?=+mU?>;5nHpf{WY(Zm1?AZWlclIU z;&{?=us5XP2MaNLX2pDy0<{leAFzwT(-;1%OoUpPtQYH}-6!2pF8rD4hPSl~P^A6q z@3^xyF2(E241U&>!pZBrQaBxy!n16E_tx86k*N|b*@(wFlGQdMWmIt%Natd$5l8VW zNraQOCy*HR=9&tY&c+AC$}-hfx$*a!Me-sL8%;8x&#;{M81Q{# zPE*6&oa?r-HyCv6Y3rMGoT0qHsOt{-G<6~CSSHFOzJq<&9hAQFeGFWhTuqnjzRTQ6 zkSXi4Gr6*^sf%7&tBaq13%X9z^9+2T&gpUmKz=@>3$(zU0BJrScSgKsle*Sy8NoXO zxoT6~ui!giWO~y+1Of%p1fm3TEGI-D!SX&B!tKyw;w%WfMO?f^P~fe+4>BFp0f4n> zKxgd2j<~V^uC>~YlBI6!H-hNzj=7P0T9Z@^GyZ6S&2V+)a|W#L0-Gh-8?jl=jm#Xx zjVtF4VoIeI$4|~?VMs~tRCBW`n+FYCnSnAW`wFaRfCQKWv;odOISQ}^sEW+b+FK68 zmACD&{2A{8F+Dw#Jjc^@nt+PEo2_>=XPA840+P+2!7|vLtu=^~(o7Vm73LWSTWje8 zriiB3OnvVmFrJqGRZ;mEndZwxDs7Fl<-L7i>GaD>Kl}14KQp%wJxLbnN;-^)vwdWp zvYA|lX_;No5w%(aT4wId{L}5WV(5l%Z8fA}Bc|+^c#&M>1$qxHTcTLW-bPt{ED=U* zPPEz9z@7AqsXkb3@Ajy;wt1cAVfH4>luC5*ZL-wUQ`6~y$J{c@H;A&Fx`D$k&tFoB z-h6MiHa4%-@@Qod>xF6e5i@EbqI_}K0loC0o|e93y z$z;h52}?wwD}QcKSRzBCOk!bv8Pg9xIfJ`i#>T2PryEXImG;_|{S-IY47dqFHzqiK zAk8GLCN<)fw>`g)6U&U8#bM)ZD&1 zr1UXtI{Cd!fyn7pWsnjKpgjmQc_IjkomenVh|vitdt%a;m>|T07R8q&|53#ax93U2 zRma*%&?ipnU9+dSy&y9{8s)`IX-1jM!UOW{OSAO3Ef--l%&{^(U#=|GT_6rJ{G#>& z%0Ji#c!nI1ZvyTEU_?S19}b-e;9t35W7y>bA%JCGnkx`&22Q(~>=!m|hG%NfnC+I< z23N`C+H?~`e7l`7CBO!WIh=nUD_;`fA5)ggIrq(k-`2Y&thcvUyT_U(PW&I=v}{oiW^;)Y=~d#T=;e zG_tnzWPi536w9-us>O2O!lXu>dgpNvvfY+Er}APepDjD9cu5mngn-v|TAvW??9pn# zl?V*xWAe$fAy;cS1gs_`K6i`ll4LZ;DE)tuk_3AI7XQC^yfZ8bJ*;-MYL0ORa(dd^ zL_U0-_$T~1vEh`_KL%9)Jv{C>mBzHrT<>J}ho4k`*Y|EyqG_KWR~$F=y){{HYSOi5 zqbK*pDAfuSw#`GfeFQSee<}IG_9HQw%-dz2xKATLFpzw2FiaIcC zRx*I4-?*6Ku-++Okc7(zcKPxHTbRKlX_s5WlF!21#a1VDNe6@hV>7Hy$ocGX#r`x~ zC@`^hs7q0K(JernP(VpSCGq#^RG#>m;6~w72191B;vg4lz32Run6))ZFdT4Zc@za4 z_AMphZ8^rUUoSvZi8&kc&IC*Oa@rJGp9vLjT-$OEvKrf9=oVOY7$zQPmcG^&-A_$f z;QaDcnuRmr`P6mx`b8g{^?`8hPc%kM1hj@^YhNilBK4eyCpUq|hArs7=$mF>dQR3jPz`-YI8h|gM8v1CP}oN<&hGz`LQ21s6@to_A=AN#X1Ae zLF+7+s@S8cJl>C7oqHcJl#&y|*JuxLP^Lg(os|ky>xN#~AR^vOi=shK^fhQUmcE@8 zgrZXN^2R{TSSY$23$@cX*G-buHdvZ|xfU+hFkQcD2=jJ&PJ^o4_&>KN!-d@d zr#Vv2`j&R)#cWjj%$5!+R|~L7dQ#i;ms45+c_!?e1l1x&50 zDw*u)7ujG^7kZ>lDxZ%gQ9GjxrDx^2WZA`Pz;N9}3g_f8qkL}dJMp#K<|b)h7U81A z(86CJbzNK1C5EYmWx{%IRNAi`{q#Nq6*a5)z$eX8wBOqwW7j-8xyJZo(y06fa-p+&Y6R`1AZTn2;feLC#8|v^@5&lWV`3iFrOqEYjlUsiMeR1 zoxAGP8vR>HtZ#6ja5I!Iz<7|Uq@LG{dd;d+*;C0vA~+2)6Iz)UFaRsDmt8Mdb2kVJ3OH;>C$^iuDRk`M7!q=X}D#ebLW`@EHsDMn4zApAX@)A^e|0_zNNY z#SlIh!hagVPlfQ8LU=lazZ}9}3E{7X@c9t_S_pqVgf9@P3nmA{9t=segv9|2YZhK? zV4Y@{0{Nco#>Uoo6Bw5mzz_A>Fy%~gn)4x?5z*4NV6QKe)n)C)i zg;bOAqlqRXoda98{Ri0sxWnGL&sHAb!%DFo(b}kq{2Vx*%JNoK4|fM%I*?>gwFFh9 zc?3&(K*j2ljO^?m6U>T}@qTM}nBo;VI}p#Rw3a@}mh~q(ZC5pjsXPEFc*!N$4ag@M z_=voeb9ty8K<13M?Yzd^w-dT%TGMHX<4!woTU&mt7LvO4M%r2OLkX7d_ z*=s)3X|lbEK4Ux9q_l>uD-25Je256*#VONLPMH5N-H6|`7aH~xtwaR;xpbbv1g%eFu#Xn*^T{jYG6t!nzd0tqm zt`#xe+up`~!3k=wb)iQx=ERv#xpG`jiT~_*rxeu;Fv%^GUkXX-7vy(ZiG7~{!ZjHSmWQXn)#AU< z)$YjMtwHOb)(fo9Kk7z8|88$!v|@)2vc9WRr4sPgC7##`hulIuh{il~>HrH8L(614 zEqKb$%RYc2dxSJ~@Ef7L!sIk-lQ(b8+HCf%O`Ue90okS2)N*UHsdR5zVY49C zL;z1Li+W;NRJIlyc0-i$YU`m6n@D(B2g$o^~n7r)+* zzR-^%pV=E)f?D}A^KebZ^Jn&kmNYfX>Z3<;tmn@Ft(BDUtl^@)p}+|SJv_2|yuA%F z*`{pI9%S8tW)lgrK9lJ7g6A}?Ae3>ctS4V`0E``y9=7!-Z`k%*xvq+#Jnz&Rw=*UO#A-Sr(qLoYX&?<|2Xe{xLNZ zlL&_%qx8oxN@y76tuU$ykw>Na7f?xOt$$F=`z)sc-g7|7!jI zscSsvY{V2>&w2mUHJ&`rlR(b82^r~@b(8QJ$!y-9 zl79BPG_6B}SQ0jbPVz!GP-hApyfz<7o4SQs{brw$LMG%Tbcac9a}W$U{0`*AGR8jf zQWkz@Dq%o|K`9H`+#6WTJ`Y_3#pWA`SZekc2s7M`h2V6!)r%%!L_~%8m1HJ`Y$yNh z3+QFmZN>{nZmipcMqS=QUDHx(UPM-vrj)u(1B3GbYNXLqD+UH*f;-PKw`DUMA&^ra zXW|+;7(m%Xy$*v)GXU*{GKa`eibG^b4iQ=ky4qH@gd}D|bnxj)N9Le8>m@Uoe=$pN zwS1oB+C82x@UT!JNWF-t6DAFD`irQee{HX{<+$-hf&kBQ6p<;m0JXk~A_sxW0tXo? z$?82D0enq3z^PnhbgtBiVFE+6oK=Qs`eC!ZZX_uC^wTH;<7iMrrp-mc`4GB;i5oaq z|B;Jz%>vcJ$78HWkjBJNsEmATAoB9wDVyWub!5;IV*Cw>7Tmx>eZfw^6UD1%*#{+v zeH=hEQv;VwAC+{fqHD~CY)VB1X6FxC1&Hj52%TaY+Db(%zQx|?YLUPmusF0y$6F#8 zh~0YjfXSha7nzZm8y!sOL!z|XRhb>n_f`It+8pd@@(^6s=J-s%^2-<;(mpoyxu+pF zI)?LIXZh?5kL5Bu#FS$$SF*j$kfkt5lTbkN<|c)48KO4Z(w4DZzv|5B5Hq`)sPC;u z=n%=5Y~o!c;z`6ID3C>7#Xt})fehW^crd&0-nyaAc4A~lrMb|wZH)K+nM}`;7n6#KQAvoA{wffCZ4ytGk>gC4B7nChHWR7oMX6MRmDRKJ7OP}_uWlwK3ko>xp zfcMW?U!IE#Cr4i`U2>@d-@SZe# z>L%@3LwldT`2q~RE}?A7hH;PEpDHJf!VRORb>i(JOEKxI*QZTx&-CUUP}+iw)N{Mb zc48ED`n2&4rhk~~v6Qad0vtwT8vr+{`Yd*f>{zFip1(dFwMun$tlWP7HrRGMJ+(Pq zt2Z+VJ4ZPsh_4KT1`}LIL770xa?~BW1Y9?)W+F1(qymFj9tIcqZ>j+;(NK=L{uh$5B z&LtBklKw$M)(Iz#ITJ+a%72W3e;fI`xSz$1fx}prhsHC}htSMiJ;7O^I=5A_vDhlt>ZiD_AHwwAYA9|_7tNCs*t>NXn#5fJMkes1< zbeZxhn!aw6Zdfy0nf6IE)<2iylVpbHYH`v{ZlZ#PMTi+oClI~s^pZfg!>}1*Oo*j z!};ov&qXD;>$6;{{#4(^QLK;>zv>l&26VpFt zEMN$4iX0!5%Q-!)zvi4C)@%K;J;T^KZ9)mtB)0U zN=bBKyuejTf(0fn_#63?SeUO41wp=yhi^9?uH~YM-Gg~&FUF`>E^zvC zrY~kME?xVa)@QJPn0$5K$hTaC8UdH766Lyt2o+ylR<@tNdcHbmfED;k3Cs9O2^Zt5 zbDB1ORJZ4NqoHO@#_e>jcCdxZjD_S$S)J$6$MVI!&V7v?W`)cDQMim|*OpLB`t)^H z1FMuf&+7DQ@(=KmH%zO(b^KYTs>$`o_9iUMDRxeriO$hV1rDsq>g4NHft! z?}+v#h~B||tHV2@8ONE%IfsHayC_&_1LQkp?8DCdB-nv^N2NpI9nnlI69QNi? zyU;Iu@gY`PZgIiyPs%V8U6)3$BGJ+_S# z9|O(!+t86(SO(+6r6Yv~QsfsA3!c&4j|H_Q#f z8`Z3x3ug*ev{=rwbe1bKrX@5yLoa&+%wk2oSzfc4`4ry&mH)i+(~lw6GZ^m@3#VC{ zp%y^3OJFqmC)4Lh)Zq0`&*oX|rgNY842ilt%s-vVvzW)h615ujE%i`?j|CWg2E@Nu zvrw|prWa`b$@FU_xd;491j9KzG*63EU!dClApRUrxebthhNoqN_zV+;=T+*@d6TiX zZ=KEPeVZ)(GVe2{&!-qKt0Y65zXFQ|;MdI2GO1~!e-%>J+AY6jxAp}Dso&@-#!uy& z5P$eebkAW{0~Ic-VNzNrgG}BWCZt;QVrpwMR_2(FV`-~{27td!4Mbe6B;ageF zOdfF|aV+^CGut$=*@d>~fk_GT4AB(9LE<4oqT3|iK?r8w+On>xJ-V?h8fc|&8F*2O z`_40r_PD?sWYhMgNLod~-DJ8sK(0%2RYMHJHpC2ea8@$vF{m6@gR&!AT!AoQQ;B?ZBjAOB zuqr*&>#hohW9}wRU*uRpBwI31qCCB!{8`5lci8auj&W}oO|AdEn_U7X}Ad9r5G@5>bhj6x9qmsc*;wMRDh{(OnB#i_=)^cvG_#_eC4mNw) zkjV<>1Xm#|Kt_N$KpWr;5UzmjB2eijAr`%?%`0d+ebwPhmyKT>>j(ibY))fcbm!0P zoH8<`uUPPJn#qR3Qo^hFkNNs`nJ=AZm%#8vZe5724|8`mkZv+gL3E>@_C@mN_)e|3*G$xa~ zX+FdU!%e3X+G{+WuGXw)n(@YJ!*sevcN9*iYjpx~I-TNX7=m>@PNhw!>$NpuI^CcR z1=Hzt4>1{cHXtUav35NZPN!93V$|uho~PkNHx`{vhlq(44V4Op^8|e9_NwHAz#VKQ zSAKu44B>81VM!S#)4RG4U@|=gCJV>X!qo}G{vAuP%CgD_hS;3o!ZKq3Mv6M?g;po} zi}3FwxDgUCv&p)_W0l!W)>9tqSVD!j>^5NXtzl_phkD&LS)+l6D8s?R5uchknq1B( z_`s|vFs;>?D6&jcK+ zJg!F~*G(PJxXRJ7!G->Zeuw^selG7{=+}mRzs6j@8&?3n?!(HU6mO%DH^AN8*sR?! zmmH|te&Rgh`Yic}pd#?(mlXA6(KYrV`lpJDGmI@Y!vAHKa?v3yb}$XUj4GF>iGw62 zu2ziNu(XHaAvOS9j@(YCz}lH01klcELZIwS5&~NXY=@E8XJ9yGMC2M3;-ZXub8K|S ze0L$D#wSD+9{NNq^gqxNO-FOf#8-E%rD&u~UBH#=t_%aVhueUZC>u4V9EJTdq=ePQ z(ZG!vD=zQbx6_%mt`GZVVV0UVRx~kd1BRqtC-UP44wv3vFSevN(^8zMlExR}Bq^vE zEm6XnWygvA{2-mf;RX>lDwvP1^H10NV2gsi(Ka8;m9S(o(`AM( z#~sp>6#rmrDS9#IVkOCo%zFjQt`MH=p{ESr1nnfiYzruYEjgfR6*ZHUGeXvD= zx@v){rmM5QtFxi2v+C-cx;mS3Z-T%U`fR2w$sKo0r{@vRQlH{dt-U6u{upQ5m2aES-oHgg2$tVz@QI7qwdxHv6*v z)&!wGQ773_Q0j8nRa`*ei6z+-1mbLZ9We=s+4TB64P(V5#%#Kcn52c#Qk0zy3BbXV z@n}vs9zm#N#g&nd3Pj+HWPGiHGmdz5VLn_4v5vdG2R{TNlO=ODTdZm&+R3uLvl+K< z8h2JTU<8KRH^rP>wEj9o_uPn^!I;DEr0^U8_p=wnYNp}y*vj@<*os$(Z0F$q8@}Ka~y~7|!UBGN2yt`u`ES;4DtwUiQ z@9Of$zOW>s2$dUioWDhi0NUj#au#KG$pHobQ-iYT?x%KIX>;*}j+@bkZ$gE{t>Q#J z-CZS$%;Fo5JKHHCBC`3%qdC9$0eLaY(AyVt(6I!`lI+{vGF~@p$g#1}E*&y%Wl+O( z@h%1P@w|W9>w_B=?2VwFf}1n3F((P>0j5vDvnOLbKeYRDBbn11dZ(m(@VD(dp>58& zWuSLO3Ev$?nP+_MabkC6Yy;1d=op>a7po%0)yXF%J;2#^EpE)FH|wO;Y4Gfu*>qkO`m8=ZF4%U-Lbp*?I*yTU zvE(>*y2aw-onc~-EwGt}!ri2>ny9-o;;bib^Ik3{Hi)@GU^BjG6mD*7AT5G+fD9d#8^?zEf5Q>9X@LCwk$1rdXbX;w9$>+?s7#@heu+Yp~? znM*8zTvyrt^&CEl@|8k$%4N;xRjLkZlR+i=sg7#yF!V{(!N!@aQOiXgXr3%db!eZ4 zF^(2|sD#bM+3T?C53ubiPqN7B(8s9%H|vcd^aQmN;%I20*L8ZxUrLHB~e5PEFTyx z^8}QHpB&Aq1Xfna0fr_xnty}Fy{kDL^h$+CbQdTTe zouDB|il90*#-Ay%4v%(cd#QiKI>5;BUMl~IG5e?(U#ymMiIbr?ompVgT~^GlkjI)< zm4XSZ(Jc#MRN`Sw(sTO@It$O4i4m_`(QEDfk_$|YxaL?OUAdm63^u<+4Y7fXXaI}X!Y_b{Sp+L4xB7<_Si%K7I~I=_z=+g5N86!GcdLc*sgV zXW|2xfO3AinDd#}xKfYS)2>EBg5hA5z;Idu>S9>JWMa56jLbg6S={W-i!$7}!~Rr14{-C7xb44HH(}ZD#<(hW zleN!$9F1M!5E9e1w|!SYw<{R}h29$I60g#snafd@VBe$@wY~K{>_yRcO4zZkg;@!w zVd`GxXzJVR2*+Trx6NLcav?=C+^~XdeaCcXUZs9BPvu7a&0M43xz^|GtW(JRe#&d- z>@PEb>Er3m8lBg^bYSMG?wnnDleoDTC~w}3%{Vf;tyqqXsB>*P*y*C}OvC2}arb%@ zVp@3u7qK@2(O7NA#KLtuTS@?%nP{tMuVD2CD{X|-g4G)gwNX+FR_|uBdd*Y|*6Ucl zu`0J-$McQBK8f)>5!QG$E`zCN=4-I`R_8l%y$OiDH<@qF@<~*(Cf}oLmB@U>-lGj~ zG_K8e)%YYTVK);4Fj(8(Xq}zEQ#?yjr(~0#6K1@Di!_xS z(#mya;<7!@_QT~#R1*55Bvo>bFVLBti)k0iozzYE-jXB#DjB>J;%ID1#3F3=pZhk<<;CwA;nEZ*6>g#{sFMk)lg^wU>bj0Q40T3zPsYBcO(T%E z6qpS12-(>qSQ>@W;Ze1|ZY$Rwhm62F-m2w%+*+ z`A#|e-j&v1%#SJc3nL>nH5YuTgmXA-j8ybSNOfHnjg0cS^x-oW+1oI|#y?_Xq$qtPB(pkT8AMnveZ=i{n{{Aq zQ6F$7FzGW`lmsl-Bh?C(FxZw2nJs=S=Hr7(RwI71N;Dp*WYS%qCH04l*JJ>)#%;;o zW;hXyac_r8P%c?PSnul0kSXwJWtRx^FFF>p$AfC7o z;=8eVGC=#1Vys_Qt=%1lXhxqtSuRD5pp~R==n0a-yV8s~j2d~8afVStNoq}^&$N<} zv#-M_?5#~-9|cGI3X_7;L{{x71T)yF8x;pCeaAuYFWSXMgWu3>P@up#b9I`c4G-;onzl5&%GPGQ-x zIb!+C6cM)uzPxb>L>vXphnWXdSQyn(sbl8ky=4{&`v*cWsJ1C4R zEkETFN*`J&2qrkz3#Pu@=!=WheHjHT7f7GU{`%1T%VDd6)t?Rhy zUUws>tu`W))=DOAbUYrMYQIzE_II{oBIUgo6Z<}kcMH8gPowC#QMfF_)4C8Fhsz2% zHE%-}Z*?0$eNjM676pVIF31GLqzD0SBp|}BUU~tjTV!iaBUL-o?6$!s-#~x1(A9>V z!PiP;cFoHQ0y^8+;U9!){szNuTfu8#+t=weUJK;viZ#RG@37YbR|VY-3#Cq!wnswH zc{MW|S!%%$RHq7yjuT*s6z{~)dK}LfC)(sU%Lc~I^#pZoE}PZaH^{*LOwM4>%7ZQo zo=v1v1Z*P3wV_R<@;$JLbOQmKNT&(dMCu6GMA{)>6KR)#O{CWlu!&R~e%M5cheVr5 zweN>br0*bL6X^^An@BggEn(Tt_MfnDay_;=fwra*Xn!HW8c&{C+3k^An?1GJAt6Wk zln>VVV7(7E_<&t~%Hn*`@j=%I*Z5$g53cpWbv}594`zI@$p>Do;sW!`lqp%;oo1_? zIDkZ0z(mh}r>u$u~kWdwKi)I+D;^< zB0$jg9H#l6wo|Z=bQya1s)xtrcg#bmtt$a7-Zu1TxB?7l^WU-|H={b~V`G=%!u@Ke}ufgjk9B51?7wSS)qLW&cVL8u^fg`_C;!s4H(QZ z8Z;UF=P}C4te6Ugre$9gnoKMdns!j2(6qe@g{JLQ+=Zy^Rp>P>R-xCl=8Im__7e13 zodCTipwVj#eCajqtwOJ9V-Ioct+CrJOk94aP%2r^)T8eHeKoVuQ+?|gf;&a2SzpzC|0*VdL zPWPcd)a6USd@ZX}(FTTBOH9i79D#06(2fSqOz_N!bDf3dXIJO5TcS;zT>6+vyx57^ z>)yV;+6wC^qJ?53^}gGR(t~oSbRIK8=-p55Igp zPD+IiB>VF&P~#DogkES*8~c)hhrKlPNRgOtK_upj%6gP6?@>6B?++_lk17sGwbaQC z9r_f7?e$fUw85w9d&Jj7=@b3PdsJaK&?9=xRj7H7)Hn4gjNN4envQ)oj*}A}rB~Z2 z2y=TYBZqB2%*heB>q;oWH~4^?;wvbj;ah+^AH1K8b^kPOY_Ru21 zq<^nHWjgf52j-dsjrQ&0UV~BVB+7_IAO)60O+lABixxamIVlRlR4ZQZP8qj-m zjVSQWBsX@F^yv+0MWR&hF@`XcQm=EokyMhi)*DHDw#M$ASs7y7Sb7$IX0wi^|MF-u zR5<5#wtPhAR94tc$l@fuS*A8$io_+!!S$#;$+xKWgt@~L>%Ba&W7g-$QkJ->#M1LT zOO}W9JmsW02}sXVd>+#C6kqeQJQvi=$fm7g&AyaI{H5VRW)ur0>3+7MrZc*aGf975 zds4+VD9)MaL2lXpcadfQL+Mt16l?!oEqx}Bt4=r(V|YL=&nM?%s)YH!K`80{HR(@o z@vM;S@4@L-QYUfPPSr`)yoON>`7`Czwi=>G8Uo|zP6cHBCev6{*4zt7nRiWt=(4164Lyvw(6gz1eNq} zyzog>(!cS-Cs9fNstXSZzUxUd0;VN+k|V z?TtRB@PA-x&m6fEGj-B&%;C%uDd|c&V@M}!$Ua*iOHgg)py80ej~d1fM=}#krc1o= zM>3a}U@X(FB!EAXnPm0p^f|f&>n4B$7<}`{f5;lP2Nrw}OaQI4T3l8XZ-|xi)!AsH z56Fb}tvZK!w&X9UHgvvR(szV~49y5UdKg#myu^zLfF#I9au|es=+WLF7K(3RAAM8U z6D@nAas4Xe+G_S_ImIPrtY$PpJN+`b@}qv_nT@{8DY#c- zt<3D`U~c83U!eL{Gk{Dk!2AMLZwj3_>&Jiy?%~MF`L9H$+|z2$yzrlm269Vq&VN;!Sy3op;g2Wg zuE?fzbD3w0X^c%33w&lKC=P7jm0P5K#z8t?SN} z(-t53N~`5D!1$b%Qnn0 z6#dt;48OvIngzGQgQ3pw;A0*Sh-CrB_O_LHc=rES%uvccc_U_!7dK}HOvrdPvg-uO zjCN#7t~TBxhkWbJFmu&BQWz#H*&_@Sz_ZfjW=f9B7a6@>!y$V8NH?tALY-CH~WB6RzE_|zV70m zu@c3Ta(4N#>0_50nDJe_c=;Ib8d8lwcBC#}yij|54VEzC=2nT$uJRn96 zGQpzz2boR@JcsKZ2tZJ!Ju=M17y;=oSFB1f@?5nWRjXcbzTG#id`_OG@7PT%UmZ?X z7w(BU!{v|@5~~wT;!2NbiDo`>{<5Bp{^>gZbiEI@DA4687R;tE3;GFo3P0IIwuh_E z>K-1k)sia{=_xcU;=Shlv)(zqyPIWgf>UwG!!mbzUjDMwAHko{Hn~Uqu|NCL=eG@D z5w0r-2j|CI#g2Iq19q;g@nrwSu;I_zd4zZ@Y{V*)GgAn@jy3&_GwPyS(Z#KDK!@CgBcX`IJ0?A!>hxU&YL{~M;mkjumDp4XE`JR2>Xa^4#Zn* z{Hj}BPNA!5HNUsRb8WUKV`3(Gk_B3VM>^tctfM&sY#waLoM3%&Wog-UHxv1FHw8j@ z%5lA-)x=PPnLL%Qjz&6GY@>_vGszrQPu-Tg>tef^WKj#DF+M&bR4 zax1@W!I;pQ7*?qh;Mk~@Z*d_jnqoj!z9+b9km2%*Wl-xj09ex2n7}Ai5RNei zL?Tx-$lATmBo}b$at=Z-Gp^AFHGL?KJh*WK{rD&^PuZd?` zAJ6?y{cj9dqo=S0?`G>#c3WyAFWYxSS;o5s-M54J8dK>E(U-<=KtOgyP8xT{HMNgA z<8Ww(8&T6^I!CFnCcX)8@~OQ>jcJ(7VPTzFfv|S&b@1##MXPcQUkqW4k8uqRJP84U z;hbFc+<}+j4Ry!42?5`JxAy74@?-h18)Z-W`Gj`)> z<5Sy`se()WH0BRqlQNe&GI$)D2()plRcC;K$4$VGb}A*N)mQS*R%MOHDgUSenI=zk z2ejc}RI_l*X#a@*!FOHPiZ*}J)}o6aV>j-qC)}jM%A&$?HVSi!q4&Wjy6Ya*b(IW7 zz65n}if>n`WR){jFXEk-kkKI`{>rORCt=bO_}gB+mNJ&lzvUk3yZGGqxY``QNSp35 zO^sefQ)zrW>*FQbyIgBm(Xo=YAtQ;oU;3dA$m)#41bCDVYM&E0m=wlY&JDP!r}yaC zLU)?`hY8$!yW>-K{XPg~m$e(8(lxIH%E7W`$TT%Y4XcF%5_muDrl#K8otR>CE|(E| zqUz2>(PLfSgiZ~piFH$)a~Ty{Rzs#yx6U_0@^qnECkeIL?*R7Mi?pq;oT2*FU8B-H{C86JyF`8IAg#uceCTXm4bvHHz zKDaTz=hkpyq~~~K>lN}ufCLECsyblZ?t>sSa-s3E_5=Durcr^gt_Z>?APm@dN0R-t zPJ^TPv1P9{Sn1||k!&DAY$;)UxleR;JcWv4RRk`;QDmdn4-b%}VWF#)84lW&FQD=v z;R_gdOxlLHx?6js!%qCpsKgD|FF%^b-kFAmKuJgGNg78zt0cRgJL||hknGQ-1TEP{ zl{KC`ozW7T3+b@hrz6DP%Y157l!QX~L+x@pNonpPXKR7KCXaZFRZ%>NI%Z=Ow?SXl z9V?Z53^Hyy+@YGW0*Kb# z-!ro6Jn1qvgd;o~>TPF|PeHh8p>+~kiLb)Y$4Aah7uht&6RBS{EDhv~KjfkhR6d^`;mQ zO@ZL!sd-eYMr$rsnlyS(+tBj#zNbKMs4Hd>y`8KM7N16q2_#yLwDk=dUT4SMd^+?J4@1f9wCj3R2=Caao3T-cO3W)G z#YWvgF~vq*l%-^pkfaGx0`AP-W}KtX3}p-%IHxd{RR`R+jB(JIp#&G&WM!3c1>+zf zv$yc0z#U`BHEYW=&IH$+g_I0jeIp3s*Ae*4x6H!pj^5Q8)u*f2lE=4djZ*cMM9B#U zl~$vN3Oa19`2d#_N6QA>SC)Yj#v+%ti8z&I>7dmwNOXs?bX9ou#Oa^0%!g!wIG7Vz z^>0d?oTG}w$=In+99>aTK!_yNqCKxTsgXAl4b8s}`MXvxKDLtLLr!-PPx2ic&(Plki72112vqMD`~ zI^*e5+`$uMyuyhpGi%orm4H+n&PhFR(n z4#3%zxONJa0>PS!bAp0nwV2Xf!P;4eF}1uQgfvRkx@I7)^&qW5?=f@spuiKiPIXr6 zBLi-X6ZODH-(8(V3@lnRz9X0RH+u@Y$zX>gc-0xflJ|&Nm9&jWXr`)oNdlTwZwz5T zYgo|=m0E+H)tW`Grl)nyQe2&;z*=4}%;st5buyIJx9&V)iWYHb28@U`p-gB=v$D0J zCH8`NHLMSJdO5=mu@D=|Z@Q>zbHaMQ1+Fy_X5=iaX!mYRcWcyi)U`nWovjvt!H|+J z>a@PjNZY7k%}!Qxd^2#mUc=Q03MTotwD?vO%**f2DMU-@iMwzaN|Mlf(8oLsPLm!6 zubM^BU8ZfUPakA{Az?FqS8KdEfh|ZbR(ePu?=XNm+62S9u_hC_SaOPbY$_$6B^a%% zMsRG%jTgZk7ZyuiOls}lCL&k~-k=bC((UvH>=3n%5q&QrMx)R2A%>Klqa2~*HtUdZ zGAxkY+oM8~Z~~HKNUWU1K(fvNOn{&iYXCcNGo@MG08~GT^H6zo=N3%>(2TX!Ah@VJ zC1=c3WB4q}Q1)FNS6AU5u`@W z-p_4?^H-*V;CdsaM!3+*Qe(*FT5ix*_ON|z3k0tquH|}etM;o>P8%UCrP|rxosS!! zjn_(-{_8dj)!3sxSdBP5ffvV++exRBpSEEi%XtKbD z>!1Mu!nN9}o>k;E*w8Hd06(Wd=1f$D0KYGvWNAk1hSNVkOc~fy~*ScJ6o_GHu7t9kg ztI%r>>X;~08?5~`{c1B49CQC-)IqD$ZSTam(A*!(Z}37~?yt!ZKLe`di0$!kj zV@W7)O(IOL#3A4r6j3M6lNlv`G)5aJ&JG7OJIs(V0OE5rpjY~{Ls)m6#Fx%MVxGe5 zneT}Kb=uDHHJ*#(Qofakb9!uiVJC!+P}@;Mwjd0$e5IWTXb~32^wmclwBu`y*E-uUqC7!JB<$p>wqS`YY*4Yub7)tTz_YOw${ab!@NjT$938#R7n z`>)4rP-v7NS>2BK;$&mh{r5d`-~A6Re#9Mn;_&egJap{CQM$1)$;)UJzeD^+`8AU$ zT0R(T5&<|9uZVbnO1wZ9lLh!+O=!@Pzi0l2g}H_83p*Be zF6>&^y)eJ9u&`(0hCOq8w(r@oXXl<>dv@=c-?Ol1&z>7@0K^+;{syYPfnqn16s2EC z8ttVxibm-5&1H|ODE)HMm^@ADW>U`)3W0YKjvH=XE0ozunHfu6Dm6yH*!{Sw+XJfYo!p)TsQ>wr$&fIAUjEV{(ax8#Me#C5k2pU*#DHq3g5d z#zPk4!6}9RU>WG*_M!b;rEw}282ZoI-%Ep{e3#2}IdD~n(C}vUMCr@bewTimE&(^F{aUp#d7gfV zFC0nB`Qn?^#>^6LMV3>9*Abp2q7w*ht#O@u@G*Dv*dok-|A+27?%sdw@uLsi zcl;y!+=GjH_2ALR9(>?1dC%4wgKkE}ALHpH0;7 z*V%ew=>3O3_~21@<2&8qqYtqrJ&}_(O+}y2l=R@csvneo!EsuQw(H z?Xkxf1(bDyCj;+PqcL>g*zx1XK78lni?Nls?~Rw9gtxMbT+Ou`FF} z&{gq>{!3qJG&YJF`p?r|^TmI*gu@^H>3XIhPF#vx~0jc$h3WHW5*5ihlO4s`rzV+fatYWqun0x z0&tG7`>$TqqtP53|316 z<-x&PyFS%e)0}9H3{4Dk0(WF&v^Ej1u1qFtN^1w!$I}z8w7Ie++1l6^&y}{9b|f#v zFD9Q(exv-GgMXX+=gNOA|6S>g8ay!EIFr2e)pW{eS+YKmE#AU;FE*+#0gCd-vUP>%n*b$ODI;{+VC=r+@O5ua;Y@Hr;aY2YCMJ zpZPS||L9Nt^0mJ{PwFiPA2_`9V^9Ci7yjUjfA;nB|Nh5+;$uJgQy+i!^z*;|;-^3J z`+xAoKllfV7Xe(#I_;!A)0^;HwA zf9QSx_y6;EZ!EPQe)KQ?a%gz^=&^O{@BPuIe(SS;JF$Ah^sTpj-(C0o;QM~$sT05Z zM_>E1KR^HP|I_iuKDqe#&;9(L%-(z5w%Hdx`+Hyf6QsGRdLr2@~Di2DV*P+mB|Ze`jT8(Yd3%RaWIv5?=b zjI+lY&D-3>4CCS_{=+;Yl#>;XGPz7X#!I}5|AyGg^-FE6%-WdMq>Xj)gfVXbRNJ?k zZD$Pe38t8NqDvIL{KUgjr`TEAjt{4;EH=-x6E9bi^0Nn+ib}S`{0G;`Z4~T9PKSAY zy&;<)xMa?J$eC|(4f3nEq(8KlPrkr(IpPP)%(q4J?ak|0iQgdhi!yHzH*c;n*aq7%X3T!me#d@SzUTPB{-OP2+Z=b_{y>>$ z|8DyiqR;s<@&lXPym8Z>r(U{r>4&`FSl_d0|7Wvz*fQt-r+>BXcfX%ocJ}!fFD;bP zJx>j52M)gVi^(&uJG!PWObgP+P2s~2K0R>c;;YS`eXl1j|LDrK>7TrF6Fyijukmf( zzW3_2_kWuZDqVGrzq!RK^^HxQH5+_8zp{H^aNm9^Z$o}Sp(p|Q5k4s)W0SzTPsHaOf|E4Pg;@|xHA2DX9qh--<>oQiijDkRZ- zrJM1Kj#U--8i6X#*1LgylJl?(>ku76uhPuQj`fU>a|x_04D9M!Q@BRp<3qLa_#W0> zytSxOkoawKvm-_}_j&n^oW$?tZTO-A&iwA7x}BnAUOiN|ok)D)@(rT2-o?O_#D@lD zTfAVWI9Ssi7y6|dX2-5Brbv_~uAaU)5+mlj=Wb4RzI10|$K_v6bPHbAKGY=jOCE0d z>Bx4{SyI|-cfb6%3f7C zG~|7)G7GwSkLdoI%=R$VWloQ+c*V1o_-FP`;+&FGp-~d;!q8}{@-e-1vT{-Pb+;0M zIReUR82SNNdpFu$cwprV;0XbZ0NQ{~20EC9PP&Lw!5U8<)SrbWT*NbIgrh2)O*D+i zWIU$hMK%1R@OSVMh~fRQplWEt@Zhs9;*NxaW9o3&=+vV~kzyeuFs^m#r*uObPX+AQ zuNTyK^Y#m6_j|62h?wjPAs>LSRv{U~+>X4tvFzMwK$D=HhMn_h7xFe)^_aY!uUeG1 zQ`MxSFBnt|cwAle(@aHI^wDrEIIN7S$2H6CBfW`gegm;v$d6nlSxvl4tvRA8k!U!g zMT4glJ#aLn4Z~tolZLP7@MEt)KD)65Nl<`tI8j5Y2h^w*GO)Qmnjs`_#?2bUJ;h)N z{Xv_GqTa{o95_jN^z*FqpR36oIjZTgpkZB+=_Ym`{Qsnza6W%{7$-XKCeBsB){XTM zw6$ob@zCG~fr6WKs|Id3f+#4QlL?DAQEgnM5lmD$5kPpND#L-}0Ud!0LY8l8(J+qh zCbf%;jiHVqsI-WhswDzs$p=m#nXAo_Gm|D~EJsf5Qus7o$NgFOW`XZ$__$AvAO!s= z-NDTuss-{07}X4fGf2y5;6~3)GXQ8bpuK>$pp$`a%|fRXNGzc3dC>kWbQ;h(V5G92 zSxfaag*mAZF-1`XvVR+MBbbYi9A)QzH9L1sA;^;Y<`vSF5lnD&Ts@UaA0jviL{qgy zEv%~$-xG)`5#u4X))XzOLY8J$lDb9N4kEN@NQEd{oSIuny!o3@3jl#rQ$nf2I?zj3 zQ+opMR2^wYEF9HR#=@FPMc$%=QV^xWuwY5DjHA&*%j7|H4t*3n^oL0`3){Y_MpBZ%9@KA~&&=ve zH2!~Uo@^xTs;+BMY8RCeHGqPSPZ{zAwGl(<=~1GAqoYR4kfb0x88HBX%r+8vs7*?N ztP!)x%31MUIhG>eU35*UD?_1;dVwb5r1=un#{@2d+8!-Sjay%9c)jj8x6t*PphvI*jv8H5ZqFJ)iy>{YUvtbY{ukuVbaqnanD zPc1Z+&I}K0y3vA4mWMPyx^^TQ9?uY=Z0gAr#-=^QIRN%hwq)32WRIBiq*-Y>)L9Ry z-KvIYi2+J527@r7WJJ#zpgv|E2v?z|*O-TJ0)MBh)N?KHFMwKB5zeI^5E$eZ;+z2y z)ECd8rFxSq4bHSYrZ1jr$vLLHVxQ?Hb)EiE%|C{O+zK$3NSeK*F@4NfD0@(=u#(oZ z>|y7;L`IZy7?l)5M;#Hz_mbtf2Q3KNdp-E)J95XaVUD-*YM!o7P$7m=8gUo1FNjj ze`B`q$F0NWSvBR7+p3Mw!*I33aE?t52Iif z237^UEwS+eF6yrP`99CN_q{VDCDK;x6o{yI&OPUzAJ2Kt^Xok4$4wr3>ajFQlJvp; z$=b8eKAS#!GPA#mBq!_qRhos#$&{pql9ZO(pU);Lkep1ClN0vF-X*+G($DhB->09= z{ydwmojUXM)Tw9AJ@`|PK6Lujfd>y9I-F!moKfPbj~_U6X#Z^wK7H!!BcJ%0q^1}1 z_TtQ^9y@jRp>wA`{@}T@kDPk&?BkE0OX_;v((6y0J#{K+C_1O;Cr_Pw@Tqf;pMB_) zryhLd%(=&tre3x6>am9&ef05%lZkP{smC6E?1>~R3&JRvzlNtZj8K`8Uk)~;qrjzwFZDf;;$;nPPo1APk8stgSUc1rGvZ*Ya=D!|^ zy>>lox2M|mM*2kBZZ~RavT5Si(r)vyQ;$7<_GhwW)7eiw#gLr(jcI`>p^*JM9U@}$%LiQ&${jW;a5 z|F$FT-}*mlAN*o3`@pm5XLH^yW%c|*dU|-r;jA9+$dkiaE8KA+U9BaGg|vS-+_99k z1|P_dhxE=KsY_WBK9D!gjRuQkxsZ(V`O%=p<61h(>!X3H(PMKoXvD|%XwZz0-O*qo zK2D7Wv}JjxM}tWo&r@u1H0Z_0ouk22e7s>an2wJ-MuUEQTo?^D#mDWV!AyMIHX6*v z$E~BmTzuRz8f=b_n@58!@o{c6*cu;aM}ztJI5Qe-i;tT|gYEILHySL&$IfW5BR)=! z1~fd3{d20mT25q5lWsrs1iDVT#I{x~j;rpub)@ZmZ z#uXe7^*lM2B%#6Z5HvkD;Xx};j*_UMOV-jb>Cr6Elu+9*Fi52_30Q`m-AOV$?jT%b z2ubP&kB2*UQ;}YtPs1HbJeeH_h&ys+6zVnRAy4}CJlrFSupyiu4e9yrEb&T30rYDa z-WQWPVOQ~z7BZ?`qk0>1iryFo#am0F=q+IwliHzEyj0P()Il?NDEq!}WAWNS1byL_ znA8pJ;-$)-r|iivD4`mbP<2ALn(?H;HwNq7py};Pl0hd-Dd>i21%uF6Fbta%yf4fs z*cE0Kyg%Hi;Kneg;HI!y!BW_wV0YN6;N~!|U{BblU~ky2U|+aJ!7UMU(<8-}V{FP| zD`7#2`(t9)5)XtOO1w2Dwk`2sxIu}BLR&#Q>{I~1+Xyr*%W8}@EOsQu>K3~#+_5kD z=jq_6!rw^;#}xi{I=Efo`E>AO-LwNcbomYV4f(x~-!6Xd=XWE&oA@p9+s*H0etY=s z<+qRDE&P`Gt?=8=?*PAB`5okUh+muEVScOpj_|vU-%)(@GAG5nagW|5cSc7Mu7;g~W;zzf9j3Get()8g%y9A9))Fp>W{)L{8<4Sup{jRF-bdhPSmBHIw1?`>HIs%WBo&+ zBNf$VkkgRe#TXM$LObt1ie9N5r{s!>xSDFRxeD6389i;ivI1c@!`L1ysx=Zsgjx#VRm6r8E=P8vIaUyd?B=#2g zK^%3cw-f3PQSU9!Wp7*FTY_EQX^4ceMkK0im;lLni=Ix{s;Q}(c;8)xDeLi_ zUeqcr1>rKbv}-tS>7ci?0@MdhFj1S-uSPUa$7pTA?5YzIvaxN7mSgv7dNC0!h~473 z>=whOK_pPOcoUo)yjLl`=xN0w00}fmp+mhPJX4gc?#c znJUS6&!4Ce-s`GLRNiXsIIP#n-xAr^JAY>w{*VmAuio%?hG8_f{?0J`JHznr48y-O z45g;t#V}0M?AbhVr^U+YVI7raQ`0Q3-6zXF|IBEZ<{>lo8bY&~jLxt1c6p>DU8cv3Ej|K7<9=3K=_!j zQbMPHYiQGF!Kk3F!Dz@x$9%>hA>!6v+p=Nd4Bh0xc{CYn_w>?khN%OZgf*)oQv+&K z)nFE7>I!M%;z+f2Z9XD`)+keRCWMdK>WP)5e4C~|BrnGqEY zUks-{h$gd4b;e8hv+=5j$^M>1@kzynE5&U*3IDHV)~-x$E-<<2QbEXs5%OvxlWFD} zm^W*>)Ai|2myzy1I&9@#&3C#s-%*eZYV_AAy%uLY8Kc>amb%e*LM6<20-cxfu0kMO zIT+c3UUv zGzz__DmU>btnmr2yg6>XkD&}POo-hwppt9GjNmN5^YE$05*L>n!Ow_K=|TKUo7h&7lX=xA(n8i)@(*=_?)0E;nT)d z<0JVs9v+aT#11o7H4H^*)&XWFAW1N*{=(4>%^>t{j>!vXVipn6q?Uj~9it*4P|fj$c6}ya@BBrUH7g8<+F<5b54cSw-dkdfJ_P0d*&6B6 z1jZIEdJyc2v(gGy5TpM+^lTQutr{2f$@=CuQYWzW|wk0DaLnp?M&GBPv{5aWZ zlDFURpw?+w$^OpH%bj$ps@A8$P=3<@(t!k6ph$*E{=)y9ptY0=%TB}huq?vxvm?fy zcTb?QzL`9cr|0r-C!^)m+~qCI0f_gT$(i-(9nxX&!j|Ch`6vIb#QoEc6I=y5M` zVn!H?c2)dth|rs)J=n<-H?(EVSP?5U`QdSyXGcS5dJWVjO1L_taZ@hz$ILq_|Ol_5is*X~-#Yfpk}JZSX*yW_Jk=WV0g5GqKj3AFqZWX` zM|;C`s2xrA=BZFf+TIa0qoKQ-lB8!s08N|NYx6T<>pYL&x2UenNCI9cC@llx*p|N> zB;AQ02ns8GEl^C*w|9V|DLYb-r$-aHoK~RLYs1dvm}#mt0 zQzSR>^`AdID<+Eq6Bb$lrbX$6o_K{miR9b z^fl2#<9;}QOb?mSLkX-hLkt}waL}z{`~ec1lZ0d}vcET(wo8%CWW-EZM0HS593&ptJ1(|uWsL+qQ{mGc5lwkkzB>_( zKxb76#B?v~sFV4#AJ)`KeM-Ta1ZNX9!idQjQloU$S0)JVhe9#3MikBeC6iV9k5Ss` zHIZ=fvC(Z}^Uw}`r?=kXKJwr3B(=8(yq(Oymp%!HpcaL22EL({56tcoxMnO-R|y|b zjP`NiODar7i%&B1sH;9qW7XO`cUIGicdoVJH8${vQ-Eq_&Vlqx$&+W164Y`w4nd}# zv{|cR@I+I@J6M?-ZzEF8dSrEKpwURCTYSI-{sq8UOYd?Ey%7gdV^w>{vC2$7F#`UN z(d?WKlaepgPrq!!bbT!{{15=Ou-gHyNTfHJsTO*(ExpOG-U*9IDnSOocy(&xT}_e{ zi!aJl%|a<=@?I9Ns9oTzj{2}2MJu>GnxNkYlVrEo?NYQ(lH8JLZ6I3fmG^~cokUow ztch0Px{hd-4Au~pqP2x+#RWjlC|Z&F*$}L?^QZL}#NAtqtBYqqp~nR%p&d ztG)MB&B>~wRg7i>-i8#6)rNJ6*2Kq5EE}2l343KOg z98WhDDnh1zZBwe&QDxqp>R$tVnC73xG|YFRFtJ((4UP2F;$)I#HSJE?_+L{A&B;#w zf07qbMPuJcFxB+%z32C!17Pc@Qyqgj($BU6_Dzs$NAr#nsdiuZ!0Yp!LlK-cGL{2VvPigCk!PL+4j&Y3o^&x`Ro2YZh4z zthhf56bVy!Q)%tNUj&6FE%$X|0^X7e4>E`wGfLg-7SG)l=!Q_sG{loIn=2u$d) z;gd?y92+$t#OoglLaN0S7AT1WCO=OJO(Ry;w93#EI08%;wS*Imj@8~&MN}>=wZ3v! zXzyHkgSxEZu8MobShJdLp@~#0jc!zBOf{7OB4fmb*yx0SLLrFSXsE>Gh^T2ikE5LKt)b=>|q|#HXQk8sF1hL)V=q zeuKsaVQZoRZ39?v`4P$zMRE&8b76FB!NbC_SI1x)gfXa)O7_+h!I*XnbD}M;R z2-UzWR;6`E5lMxDaCgBuQty~yO?qx6{2}YVw z3<`;3;3P;U85chCyLj@E7xnqbiw4$@JVitfKTY_pF*$q-wuVk~$N-YgzkqZelLLu~ z(a{EC^>mTL8!eGT{ zH09CCkz}0=B*wTc=jsmDpo)quSB~olTknJnfi?Da^~p#1c@KiuwnRW0n%T!1Z2^O#>>PCBOg1`Xp240-cITAL#a|HGh= zcap!hs5z|M{0f+RcFmzo!I~DrVlk9bSuE>ROTr8%m@mNX7~p~eD?WSWMEG3jJjXV? zD|Dl84Zg?Scy(hpde_2;7AH;y3&q2xkAbk@;9Y)C;LnA_M4e_JO8SjLz$(FAJ3*~X{4|`f{LjF z!6tJ%h>_)H+!0j|+FO)t!CrzlU@v(~9O5Oy3#9ZdMRF{Vva2i$`FyJ*S@V3lzDJm6&BMU)_lH zLB@$7`AS+b(X<+C>oefGi>)EX#or>#qt6JyGD-}<*q<)5zCY3?rW#h15^eb>At(|< zVoyN=K_Uu`b~wA8%zy_0HhkIN;{enw;$dQUEv(WJwn^@;9ntEH$`A!P{Vhr7sVsfA zR-WG|294JGKusX1)wZB6U1VuMxH4E8LZ!!{{U#{$0h4Bd&O(jVAA)SP#(I0sS%fGoYrn5mGDSyqmjW%zdY zZx)o^b%4?nD3`Ky;#rumHx}ix807Jj^iGi$T3}lHPqioW*3&qswHMZm8C%MdhmUDT zx-UtQA?{bEJoK_p78fQw;-Gtv{Fp&ASqMP>eYBI?)UuL6KAEZ3OzSjsLr12+`Shts zbNDuIC!t*?IJhV^16r4&9i+0WWe&xqvG3KMq>K!^0lgUXYRA>VpeY)L;QYCK{!_T5 z@Lnc?Ntqdgp<_BpMX=Y&h%}O4poK|=JqCO@ie*D)p_ivmam-fc+cR-z$_%l~Vam8_F<39B zJFF4><>qYm*{tNoi`nVnX1GBhj{iXmi`t{KIlssX3a3^kfGaEFh?7<|jwG4%I0H!T z-HBzEBu3EwTbD$8tuR?6h0VLE zfI~JJm0a*juxyLhmP94(O1;WOB}__-T&m=Jwwhf~C2L*@L|DAGBr55Z=W{$4l}u>| zk;AJ>E>OvuLE?ym1B%x=F`(|$LvLLYl{CUsk)%r21c_LqIHA;I)0H~B0SVz+fC@Hj*8>ylCgV{-D;4LZ zHcR7NHWILVev{UbGbT9Z9^9P-j?7X*3huUU>f<;Aij_y>2Eh-PnRSI*E#a~CGB|<-Pv?G5gK7n$4>S_ zKR!)`P1TNH_?sl`i-}S8Oofz`#E8sR2uewGfrBvX0E0JALfbPjaU#sdr&gG&W;}V_ zv<-#9a224Gu#U!+a3wlN!RG%ixsNGdBY)oB$JBjMN3;c1{U~}h-aUVSiqPjw7&!^WSF?A&L zI>q>!0ahU^C9ESWC0vQD)+9JzWMP8k3)^CwznvhpmawXt^5|fr*)H8CneJycPj+_N zx-Q2mZ1!hmQiRP*fIPJG*qbHPzLX8Ou4b>JC1r?TsOW8##eRqiu29_*r25>&tb(Y$ zTcrBrMX9P6QEru;FN^@hkg-%*q29pdZHhW?t$V|`bmE)!6(2X8R}2Fl4XI^unG96i zqqt*t-5VQlf3v>gHJ5T&X|m*#utl@8B!HbR<{szdqD4U>N=C5JjybtBk4czb+x|O` zEEO4SV}hscVj70!=aHZcZ)Td3djbdbv|rC7Z)$&61Ut!JCsydz1YcDt1QU*}2`pJl z0s%58H9;b;Z>a?)5u>1t8{1iynDr|^0P0x#*R_#6FlEGS&Y6H&_y#K6 z9^NhqvsvwNj{p#FTKi3J|BGo_D?Jl^-|vrW`1PCe=N9_8 zJT98&%JIS+$aXqwR!NHHpv3!if6b(Wxqt0mw$Q;lp>Nx;9e6SmBe&GV>oKaK!)sGJCcmj^*^XX?d*yE$>_5A1u$$+ufbYh+bzrZhf75XP%QUOAS3q23 zoK#Q+gKz8bXoU0}BaF1aZ(-PYk4vK_a3x_=?kP)hmn zP-L3it4kU4d{)x!(TGRWTN;3PAT@{w?VLDq_l$W%SjLwf(h5I<|3 zY>8D84n@6JfLpI+vKX*;*X(o)sTd1_EjuCFo49wO^S?}ITPx7NinC~oa%>UwPlPQF zJ%OON*o_K~B{zGpSAn3nU^)Mqpx@%qZ;?F?Aebpz)B&skEQ9<7GtyWa@wnavy?Y>R zQPK-(%+n{lqzbGXq>{7t#EJAXC(wKX{s#uI3fHxRgKqkMvGeT;cCM{)7{oEQ4jVb= z!9b-U#IeBAoROFid?V98jhmitX5Oda((_)-_2T)K(Qw-Dtg%52yj~s+XDrD{Fb*PM zGMXC2%}lL)46hGY{SOJm2wem$!W6+-4@m^#&2_l?J{!O8R@aZv^|Wf6$ot(6_!8A( zE^*pC4_lV9XSf)N;E91K8zXhaQCermk`K&{JQc%Lr0p%=-olesG%Ew;32C5SXSH&a zu5XNxE^e?{4*XRvV$1eW40i2B;tsxuRGaXlH}KnzR%VJ&O&I z=u5%XzN+BLj%VtO1f19vXoF;zyP%yc@I!72S)84C5o{kei#vL}#R#vko zV%1c!x%4r`*5utRygTi2Wh(hZ6seNM6lG>tHl-w5-(1dnxZ$FBsiH41t9u}9Dknlr zD&y6Z83@}{V)#l3g9bK>ai&U_;B+}$?aT0nx|?(0`};L9g5>8) zwwr}65gv0|+?fkA`AI~yjtY1_n@{OrU=ESwulhAUf7mjsF;BEkQ%3`z)=6kB>>_zs zyfsTk7K#?N$kNh*x2`C+`cM0;yZIB^C>z*B>N_*6ucdk|n2_y&k*8V+TAqsNiUF*n`#FM01U`c?_ePE(pR5s_kYw zcwNGw#(*ouBYLr<7e{E3K&#Na*W$Id1hx8IcK!E{$*?sjS>k<ta#g z{7M@`%zjHR!f)7o^Ow`go)Ar57&Lih`r3$+mUZy%7|9%}G_O#fIIsQ`e z2=@HH$9p{;rt*EdW8(PzxcsK&ysigL0wEQN_qS52WL&>asA>AwG}UKayg~9?J{xP~ zLE_mvi587Emd8Tnp)&X^zG2_pYWBQZ&n!ic8XU^v zy(nxSPogpU6YUI7qP?kdg|RQS`aG7&g&LIzyHrAJWeFuw2?y-fB~i)5xL#Fqp~jjs zh%yqQ68629CFGx`lJQEA=c1DFa&tSUCnwF3H-b90#5ng@fN#B1PLyAXnK44Hh6g$SH{d}@8}Oi{ zE8}79ngCn7e!wo8X;&E@B`{|wHb?Yrdk36TY`G|h=AuZQm2>TuUNQqDU($X-tdNu3 zV%yKZPEEV@BHfq#G; zRKv%u5-_wjt(+E@rV>>9Fl?vt1KMB>VY8i8=39nIca;~}6<)y0w3||_W^c2iKK7}` z?Tir|z`!}8{XGRNOv>UGB?Dz$QSCsoP2C2baU1233231H67(}PC1dD(y*8X#&4dg& zFC9J3ed1;xqJjX8FQJ?1_@*?uons*%tm8OnMHvyT_P-$>#_-1cZD3P@U(I; z;-#ceaWSLG7D1CqkiKaTU|Lf>y0M(RnI20o+UCsz+CpA(zd-d?%QmAB5U6@n>4e_U z2@SZzQIruBCY*$SZyd4XUA2KN-~fhW>6>YOU?3t{HwY47TpbCr)$vzdL(pKkUe?dQ zOyV?FfXnQcEz8%+1+jkqB~qr!_vgzh;y!4hf-!tP5-c^_0*uubHm%kwg9`+&k1IB! zpyU@s1>EHL71i+PEIqM7vw~zgb}ac*y^DI19vyUbd!CMP>;#&u4S$_0iHQO3}vuY(s`Vd(( z6+{Zsn3RF5xCP-LC&X8A1joX3YMFw^l0&3pMmnQikddSLA%%4&Kr53Ml4uC-4%2ZR zaM}z*URZ)G2uldued24F9`5$|Kj9AdiqDvRu)YY#w90n$$=_l-@0&6~Md1;38|aN!p{kV%kG2uUrwQ8|OLmtD#-@Av5F&QdK9ibk7OfzpFN&*`Z8E}rci zM6<}HefxH&40?%29ZRHstvc!$ftKrNmi0WngQ!J4NECmvZNb9{@gO_-R%-zyHgV|~ z4q46nT*fkOG0R?$0-KkYC;-ZLMnQda;;;Y1|Mb89^)LO#pB!~O=w`Dj9$3pYTv^|R z2d48CJn(!KJj7gDt2MmWeVx_utgc5qs9A7pI4bdAsHW3wj~*hHg$G?{wE+(={{M;? zblFcy47DmTfYWq2iM~TPT3du8Yki*-@|}0W%yrX9g-te+M`RPDTVoS!z6yEpd=>JD zxr{t?5ppDt4E9rbBRkC?d@e50$U9HA#uC&n>fMUz^WbKdl)cjL{UU&wkD0kzgRJ)E*RWJuYy{MOT7p*ZJt?OSLmK%`wU1>_DLex=e-!EPUPs}WFA-J z^lI&VO*gOT9W_j;z4II?&@|8rck^9ZW>D?AA0uH8yCF71f6BwB#2}9Y8FX$e1>@aE z2T9E}YU<69<}-=#&(|ytX<-6`s@DtH<_WGqpesG%1`6ryn3;Dwh#6 zed5{A^hsXIUe$4O!k6mNxKuae@#miIvLO+A04o`UcP8A83qjp&U2@w zm=`y)^&;fu7aW{&=+2(s*`WrP{;g)#H&GjvaO^c2p$;;Yw90zZ za&Bm4U(|dPI18USS7VoDVF?(PwfR$yrwhR#U|liIhSjf6IKKDHSgxQckkAzabMoG3rpFT>wYf7D8+gOrF=oX zgK~b&!ehyQ6T>fBcr^LV82(la&&Tk$WB5BU{O2+JQVjpw82)YyUy9+&G5oz4{(cPq zAckL#;VUux!x;V%p}L?0X~B5X1=7HICfaju(^oE~gM`g>Z+_yISbbi5jj*OhXTYo@cR31(_?$SKPur=Gy!F_y`O1l`fQqHGmw+0my5PjNboGF$_=nAdYZ?pcu3?W( z=?EKw#wzXR&v2If=>gZ17{o{cFeT^&FS!J}0r?Dk4`_KhXoa>w=CFbtiJnvvfZ}xU zDyU$5HxuNZp0-*@9&&{hHFK^AUT6OfRd70#{X3k)2_5$Dbkqlqhv|QJ zClw7H+f&5JB6hM&4qKe7<^lv&$DLgncjnM_u8!jnctR?oTuPhtoc z-h&7?*+uy-SCV6Cl$mLinQ4@n=@n!q<&GvVM;ZEiG5q}){y_}C9K%;)_=hq4qZqy# z!#|GUpTzKA#PBOI{L>izSq%SNzB6tv1$s$srADa;$?wiyMchedD-H3)O`N}9=W zi8fEu>rz6x<{67X6XIAkI_KxLDhFzRoqUs!{02^IX9nG+$+O+a$&M)@*>;q=LV!_4 z*ad643Z9}$eV#xBB+7$dosIf;Lyq>{0#ctxhnw#0-`{_rFgA2QDLvwPEHg2P@d*kD zj&c1iI+3_GiyTI^I#Yro8vm}QMo2&!<2Dya(T#>Hn+iWfD*@2H$W$3()Cm5j9uM2& z?~GHwG=BVDJ!+0VrsJ2!Nf3t!0E@`8{NDK0?~fnaYl~i4-Y0Cu(NZt#oa((+s z%709_zHy;S+Oh>?p%-n5GfMr>UTQZWq-tcEatqu&5VCm;?c!P2E-Wtd68D3M&`fFM zJJcMyI#J0>Gx*(Vd?(|Q+P-Sjrowo13p4VI?-aRylQo*x(pgiQsF=xW5WA)x=g4{Q`b z@Zbo-1K$vW5pFg$d}h@DfR4X@8BeJnTD^oOvn*tjI%{x+mQqMBQasIKg9Ne2B@8VV z#yDoH`4F*rb|^JCn#$CPSU|#JUTB+U1JjA^^ax$w+MZ|&Q89070FsMEb`6t9Ga5Nb z7}+}HV~IA+A(5%Hk|gYt{@vsl6TXath7mp>h~PvHs!y4@QC%CRQr(8lM5!aaQ8EtCcHd-1{OgMOB#$7h(W;YiBA1G=aNUs@EZob)%%xcW@)R9)Ddtn2f`~4gQ3c<@z`=&Hm;HOZ1F<@1 zChM-J7lX>EW#6IKy0ZI{5JLQU>QH>G048C+foBbBA!Uj8T%C=b#pCDA$*P+MDf+UB zJeeg4NFd=$l>}TzS$@8ffR&ZyU#ukHJTd^?pz&&u5}xL(BUUw29#1nDg!19aGN%@R zGcX1q-ADpLM}YyomdQlYASuUlbOBka7~ywGQ&wSrckLMrej0!wq_51gn%X1EU!GgK zrz(_TLatRev{XCkHh7F}v(of;);0azOfu4%CVVb7y+)|A=Cd_)n;RUv&UzNxB*V}e z|8f=YZ&Z+Ico!Q(KtS(UG~8dPi1|?Gl1WYTv9RSa&a060E!5s3cfdSsO0nhL+HVmbW&vr8H%jg?N!je@=AtVhv*{GX-ZIK3^N^ z`)asljmlC!X{J4XFlj>xmr{Ml0oq3JX2+HCMO`?E9zwqm`!;ty8WF`?w$zy49yHcb zIQ!qpxVhZ($NnTkg&Okv?q3NtU0C#-T`*?%;B)9gwoaD6U`tV90$axw)GyXEj=hz4 zIh@y(6<1JB`Pz=W%T4%p52-q6Zd*-J`o2!xjZk1k=w@ODk3GoBEsQFrJ51fKgM}$K zH>l+=?8s-W(idb|@Na_L@{Z)M?#Q?64MULPB+(HVl(pOi3>scdaWFR{OCq{oH&5)# zcNA#h)HArW%%sT%nei0pD+pxOJvYq8mzZ!3q~WWG?_3|^spJb*yaRTr$}D7#;yo&w zxxT85O5*uE`v!y|f_h~5yi-*mcK~mXr=!3zp6pJ(5?W3PJ<{z~=1Hf7uEf1;rCv!1 z7`%U6oO{A@lZ_+N)eyR+&Euu{u7!b?h_j3c|OTSb0}2ldV4@=Qyd3eFtqF3H0>wF4$O)-U7{^GS>A<%>Xl zID3sUihU88b2$5|VuYU|;N>$IG_{29KU)Qt=}Ju)RUO+ama=C!QtPXbQmMY=>(~Ms zHh-1vKBIR;~_M$=hNe*j~Q2pfPGmf{|P0=c!rKC@<>2e{$3jm}gc^!mCa&tXDYI6X@^0fh{CaA5?c?kkt)~W4wH9-ZvfDJ;HKP+VVBgTIxhF`Lf<&PNR zl-B&wP{;B|NfBU+<&Si@Sr#qZrd&fc7&XQ95{e*Vm?HdG%)~1vpIirn*;xunkh}KG z3G5=B;u>!L2}Ei?Z02N_LygHNh}Fz*>QPM5&wpo}iq%+T_+33}{KlPqsYt5!1MrRa zY)hhd;yPewv#s{9LLgvQGD$;t^?zixPonDD?I)NDqXkV_d<A7nw1Mgp6jW zWTMh4YDTlI@jk{FUs~cBPyu>2VxJM<1N@+ z;Id88n3-!Vu92s8Odqgz+}T^g7&Cd=?d|T~tj$*qwfdc47z!}&pOhIeB?CZN z*%ieuD~18mCJ5}r)_G}}5DgayNVM=+Uiam)Ih})R4C=MxsG9naou3j&Dd@m9;t{0_ zpV{rq1Vu76Tt~9JRLXx^?beVo@(8Z6A~l80g1WKRX-ivP@%`(b%LoEyogiR5Yylzv z_CS6+`gz&F8R;=_xrE;jJa}W8d+!F%nS;TrgM)=Z{fdKEzslfgjHHmOL&x=jOwWbC z34)JmO)|;9qN}k_$ey79gUV`?&>HcH!z=mFD`E3zc#p%5OJm||knE#-Sq}DZSOxh7 zO%g-^mu2DZGtY9d%mTeyJHyQ{F&>!v+#hq|d;B;3PiR{HTE>4kHKvFTo#Vum_8&V* zFvSt&LZ0-(sDfr90134RE=NSosb*CNeNFjF?B|C@BX+0WY$O!~>_(*&&jvUtAzYhR zS4!HWQ7R=c_Kr%aHkR_Hr;y}h(OanZA@k2d++RT{jU{xcl*U52pvbEFyOL63(?`*S zOOo|U#^n!Mrf}Ywu2`>>DhekmrFN-qOe}%7@t%jVQeux!Y?`mK#3w#7Sb!sFT`7$_ zI__UZt5>=;?#)S(1Qfyt(nzG!@qN*px$H zj*Yn?r*YlL!<^F%l^(&MgBD1R2B4U;(;m0DSf<&R( zuM@yvWRDd#s9l4=iO$U*H9O1C>}Ujwjy-_WfR5cgpon)Yb}4oyb|ZFR1LzTGEe;f_ zwnAhD&6b@gS*CVkUH#NC;UDq1u46Ni!LBE zuMO0%W3(9NG5H15?%LPW!Hf%P><2k>(6TcO$n*l|$*mu*rhiC%u@9Zrf(2qXO=pN0 z5fN62sO*cZGIa!~Z7MUEyR1WD?mz2o3A5ywu*uF08iJenWhRkQ=~@fK}N+8^a1PuBUa!^heB3V+I%Ck15w^Zlep>qUJbYI{zZv;WVx<0q7B1$lMrra#U_=AFGqF z@rkwbudn^H*WdWnmDNPZ$uD4T(Q5>seSm9_)nxD)!UK+-#7+WD054t%?Lpr!O^oKg zt7qT3OmIhB<%R7)-cSM^iN%T47Eb~tMSX1Bh@Vok1H;<_rXHB>|9wZtuI~GF0+xkV z_1Y$UwP%3xJ(^AAFX%LEAs`BB^8{Dw>nZJ;=*$$U&oR2a_jPy4JXIPthwPPdY8&l& za7}7yPIxMGE)QR2vdhsgX132ro-ud1i;oZmE;hiJV(VDQ?h|7cQ&?<6aE7VG0WM8O zt)zSnn!MUnROX8@lCh1YTZ^(}hOHvM<6FEW(@V?7R;ev`Z)PaTJ562$pWF?gc)c>#}6WkOM zb`8&zaPrI`?cXa6FLie}*`N{l=RFlpxgA3<=w+i&a#cPSN*<3=nTQD`!m3cRbN#uT zOk5_xJ&H)?yAivS61zB-?gp9HE2lJB8iRPfa>@YeceCTd>1RqEC!)Kvx2U}V&YA3k z>E!zd`qFAef%h>_58ooWPIu#bU4?mQIPzo7#$op|E{gJz++$KDiX&P3$)(l^7sgf zWEo9yEM>C^xXn8Hj*^{NW2_>9>3o?U(X8vrrSr$q7o}t*aO@14)R1X>o%ec?T8$U* zi6hJ zu{rr75KfyR4|w_8S5gPoMdgdK(JlAV=*_Ox=!Mk!^&U6myd+*1#hs@|8`fB~M9Lru zd$yF(!vXJzjaa3^7C6 zoB0@tIePMMco52?etzVyxUTd~o9gG^^x(T52=9JzXrkRk0i@Y3qm4IBd}#%{Zhe7)q9pA@C44rP-Nh z7C}3|-_BZ<#r-uFM_C2OyAJAWd?TrUT$lH1-AZ@(GF4@ssL!^v#Lz3mxJQfSOxT(C z#C0*sglME#Fs*M`Fs+L*D+{Le4GX5aN|yKKf~hX9C0;I=>UHWc{+sg8{jFBeR4 zlaSd!EN(dDsEL6kLDHgnkrtozv#5cs58OOJm&tZeyL&#$Gr=4IZ~9iqG*k7QroKL- zD(ovrz&t5pgRV_=dQ;$rrr5JkHr1~*HK#pHYKq{XH{}TR{fok>Z)HTb`;HoGYDMcV zVE3R_-X2DH9CA+B#I^FbrR)Bp8a>HdJIV6dx(#7~W+k zua3uY=dOT9buJ!gT-P~diFNLymCkVqSP6*H4wpff3AWn)b|t|&#|6=44(r^-N`iHc zE&gQ=>m8aRCRE4p>SH%1lgiius<8wF$vQLrmc4GH_5>?6AjHz*Cp`Fj9(>S)J3Y9|gAaLdw+Hul@L><`_245O+~>iMdvJd+Vuqvp zf)$#Qv?9pg87xR{S8yyj?y(ad zyUT;S6&y`I?7_WZC%swZHgtNksEvT?!Q$@ZgTtV1EV9`|DIU>_+x6ljVNpqY{e7Px zjF-;65SC}-Pg33Z^CFNn86w+nAL9QMXj_n2{y~FU(C1Y zddS6mtG>~+$Uw7KYBArYPb4ko+qD?8m@jb7iC~9jM2qKmEyQG7i zHKBsTIcD50=1rc&^NV@AOk=})d|OO9gi*^h%`4f9iy}6As(FB;OX-+(3Zfww9bLvp znsnN`wg-%`a=MMjSC%Yh=cSmdd(6!7By94SA+}gNwFokPRwI6c&>B#cHt;`5a63c5 z6^=zWh_dt6t_l_CMBAg`*2-JXo3YF(bKlu{VUBPCQ{mB5TTb zgep3Aa`C=(DfT<|H}-RV|6;#(j{7wi#@)CE@U`e&Kq=Y|8GN`S=pr5_c2{LoZ4?TQ zxG_oo1*nMR_OJBl!y?NoKK^SxIu*vz`8P$%6E!tn@#QWya078>w=;rO^A~!evysmm-?YP&@AZATwP``Se1=!xVq(E_m1sREw$t5 zajPLEPL znOmh@NGx-)w9AQQ87n3+mbqTqrKKuNG_uPv0XVECXtW$SRqV3z+J=vk8sK8c_*gbq zJL8dr_?CcPcY1t;Q)cEy)K>9Lz0Ccod+?{?G2PUG5YPhO5^?gK*S8sT>mZ%KWW?e7 zz?~wrBD(4|(=dnI++*5sg_sr|(>}PzdtP)?9#cpCurA~WeL-8_+h!zL%20sgHghcL zs2%mPQyJu_3z$uW58$NaLV@KRmKn&)!$1tR{dthuGYu>=c`k7NeU1pAQH@EBtB=S9 zlpW&a$_(XPq%2xU?dOd?j&C`0>BF}eg)D5s<3)Ej$+5e+SDN8rFAry-d5zr zGOTCr*4khX<>JR%WW4SX%MG~%P)m14tuQqRNDo>pJ?ycg9^9@#b1Vz)D8z=%9S}<1 zC*V0!$PH)haW}ISy*ci3qhx-rnp?^f-7sH(J`^zC9k@(ta@l;oIEopnB8iTraull~ zJ*$(?m<*yrurh`2(Ek19`~wm%%lVJVLSM#|z(QZnkBM@Y^P{rRm-E|Xp)a$W84G=x z`^T`*m-EB2(3kT=ve1{=`ig~aV_G|lk#0}fS?qLsO3x0ac>)WO%)|;0kfO;T&g!%T zd(YA2CmrHvjwSz)r~Rw=GQg?J3We7*3Kv~?uN#FS%v>3VAZi1tCB3a1h(O!qpoocV zrU6(Bpv^cZioWvNe^M`*9JjZ79PA51^7Vlo5R?=$sH?zU9mp(yTl!ejFf|t;MirJj z9f9ovvM0{fG7*|{OcM6Up!NP0A27IjPtf%ym{XAuktQXq_g0l6p%FheB3JM86}kzsVmJGS3obkidUe=ut;QKII5yZiS-j4bL?zXFl|&_#dR5564XT&sx9Fn#|_VjJeg0ZWEbw3br*fbSb zRDIQ8SSP?iLp0%{CKZ;xpzm9u>@yeTU*Hg2ip}FrE5BGYlh%)`@3wnm`c4dL_%O)8 zt!b83ix#oCTL#0d#KW9~>He1naz0Ll8CSKax&G~v3nukUMDxS~zmOX>F9{q>t0-R* z+UxW$3Csl~b9iDEU1EnPJ|kXH#3W$vU861zCeg5%fbE3S*0h_6(Nh)aA`(mVX+cPC zb`Y!-Zm;MBi!QO~AdBv@=sc@=xy%Cyf?9H$Nva=arMohgwzbX<#SKvpi0d{%aY+)O za6XPgI?p!E3KXblX<$K1&&ZD04Zrx;qh_=x#MtLY*~PvwxOeGVd&7kPM>RV3VT(9A z-w)_M5E-&S12J5A01lb)4_W=Fy7YCqE;bMxq!I~EpFH2$UA3Dt_LXNRy18p)ArYNE;`Ji{{q4#KeSe@!)JmTg z-bh3~hIwJ$X|yrOF+YCDgA(XXL3-E8O=DC3G8~O{I{L8}1OO!W9#~yqf!(J*MM>2SS z-Wm+ie5UP7<9K*8$}w*|jrZ7XM3h!PEMT7u2YYJ(TbOH`Xs==cM~iKS)QSZhjkZ}* zD;Dq`vw+QPi- z=dV18O19}US>sA%%3}M`h8vLE!`9-pB~i)NFuyK|O6J41B1w?QEPMgy1Dsy-K1}n=0s45}jfX zf3*_X=Whu!;zec(bB_Jex}}m>Z<$0Tu|G;uf8WZY&5M~AtFluXZq<>0lZ@XjqG;?& zcw2@HQUTeV@{UHrZ(T$d!#^yDI8OnWg0rOBb0 z$GReArF+K}a%sb0Z@5`AhMVP=y}^CtJA4WvZ!kOen0_oEyAi5;!;pR_c?kVap6=gA zJ#^$ppoQ1;MXvXRpoLg>ob549VY+8H&}?aspPL<8pO+pT4d3U^R^ib|dI*6RgkwWy zGGoZgb*WI;To^(bMQRw@&D)H8DSi6LtAZ*85;g5{9x*~ylB9`qk&;9*h%lKz6-Hr; zc_eL(K9y|2q^~AX$<0X1n50TzwskDC*Lktz4=UM;_$?|C7g5Q4xVcCgvy5vpP_r%U zE#As!FF^L9GKxB)=SGUB0tgI%y4#HE@x(19p^2=e7ZA{tohx;xtA4}DOi{p8KXp{9q;ctX)O=|IRa(d| zQ7v^;t5p(pRG?HH(E{kZSO%m$C7hfsD*#Z=OF+zu)3f1yFvk+BKBx1g$DsOwP6o_V zZl158@6meDCZznHdlrV<>;vL%_ti_gk0qnQUVi&fKzodDF$4G6O~a)dP+CYl1ZGN0 zqTpB@toDxX-CV$D?+iiyj>pn&6714Y#=a5V8d#xET1!cWs!i*XE=N`L5bgsi$5xVr zeH3+sSp;QaI8!8Im&fJ66`3C-*mpQPPKzwz-Oa;1ozFizV0+GheJW1|`4vm|gJ1GK{Q8>P>V zu}rXqBM^B*DG^+kQc1uPtyJO)yOcf)VMp<{kUl%Y4eOGqXbgYqN>r6ZNYgX-1(kB@oxEKk+REWd~EoEdBAsxw5e2c_m{ZVqPtvET=rV zl4xjKDKE-7&Gz+zLm~znx|CB@NH2LMRcMuTImEA0$t5jaU;xP-icPeXeb7Ck7ueCd z*94Qxr0ro47DvNfVSCtxOxiA)v?~z3XQ9tR>r!@nun!Zd?7fKC`z+e6^j;zl9XAV= z6?obapEg5fm7JR5AdB~fouIxdAm*zAVxEqb0%BeR0d6E9iZxy2BKlFb<|0ycu*gOn zZ1SD-XD?mt$T9qWiOiu*%|XE67Ja|ig=zT)!|#@g*TTLcPOtG=AXja!E~n^^#%qDA zg0`z3T8n}h&^h+bzWdBZR$Vj%)hSz#+>>k3atl}@MJxDN{a}hX#)(Uy5r(`%C3}V1MaO0``|K60pBC5U{^=K*0XeAp!eK z-$%gy(p?1XFU3Qm{iWIx#QxHo2-sh`M8N*i-C=KB!YfulZ)QYTOVO@10&P7c*jBp7 zMHJhMSf7Pbxy=_m*x|tq9_;jhEpo~dJQ#Q|^x%CS?DF9K9^B}`O&%B}kCS>>3jm_RqVz{l}zbT{F_!WTdqztB{s0 zb=xK-rXoPlcM8L9K}^APci6k4z+d_BxzE^uRx@kZAYVPXyt#)Tr6am5C_{IJP{ z31Pt%nsyfbf7h;WvfZ-lI>>f=)Uyn9+o?Dsx6F+6^q51QTfmg35Xu+zvqAa#royqf zu^fg`woIbQ5-?ac7&RI6=NM&WRz!tDlS=`GCKC&Vrri`MG%fz3(6sZa?<>FPH929> zYg+b2uW8K}z1Ai`uL)@M8jLT!rfpZ~HSM`Vui^cdUXwUMuW8K#y(ToG*X9V&YoaOi z8j99m6dwdKco_~mY^k-cHu?0t(kPX!e*d49_6R5vG$SsJ; z)!!i3t~_c{u2n|uU4#TkKy2wTm(X6Zr&V;5;IV>W_C&+(7Ri=<=C=ctuiAb5 z+-ke-^9cE+9rkGlKmN+X$zSiwwpVsDpJzAo4t6t}Yb?z-v-*N@$VSsa3lR7`^^^YL z0AFT#=f6R>`C3Jke^S7udG<6{E2ZZKbK2ioM%jLk3t&q~@9(uq?VSthQ^R(?>FLl` z*f^(f8wNVwgV86S9?m{VD%AyY-?MOfNN|6z8Fu6^qdGM}a^CS*4%ICrv@Lyky$G zKn?T40SUa{8MZHcbl6=$B+P|4sO&;9B+ZshXemIYXZgewFF^~FR|?E}BP8#vRI8lx zYNu0eXP$O8FCaTO@TRV8B}2>F>6GnsVmn(FxLp&n8-=Z8-{P&1xKmXYUFoQaUbTr1 zO>A92)@{wR91qC?Kz0_u$0*>y**pr{MqxW&UBdRK8`K;jP^;>Ib$bkg(AXkhwf#t% zG1Httn5}{^2MDc&!B*pz80ge*m zUS|)GB(?w&v4dvA0;*&QFJRQsHbt~0Y&|{LnzIj4>bMc+p3GCtn)zZ!B7I3@R=8z*=8dCeRt!v3g*(W`xk(3}MxAu!`?O`q~uoU4t z*Lm)-kD85Ia&Os)8`Iap0XHKRobQaTp3z16ZEX&>^W{Qyb{+2;UmM*p(>MSm{rHEo`+E)60 z9P8$65v_X7$S}=1_y}8(B+t~+YVGBeI{2c4py`!fBTu4^sY+hSb*lR7jtahHuXGV1cN?vPj+Ybshl)*zt3tCW*a*Dj&+ z;lCVr8^#(UE9=m}Qb)H^Z5->~xZ28C&y}OXW&g33`4VwElyk#aS6lP3t~TaleTBA= ztELzbO>w}tVVg++-br{#wAzr1{mR~m z?aB^`-O4^8%f>^_%|r2=kV%fMh%hL?zGk#lVo5T4t8u-FBtEQyG!mPcA>pu@r0Q=o zmF6R6B&u=Mu}d3Pctp?#RBAa?ak%w;MqU^G>vGIR!;EC%e%_%Gg?5a|myGLBiDhM^ z7}vF`DMmTE!NLSbG3t^uq6r#>I*YfKL=`BJbxG7wkw>Zn>O)A335Su5CGaK{Wv@Uu z2*~2CL;`JLeNIOmMO6oalYazV-?9BWrOCwWVojX{RY0V z%C&P&B5T}n1t>CSaa@XC2HSHIx1!UgjEyG;^C*=qVg9rP(HU92#`1IdOK&Cj+6Py+ z;}x@S0hcG$s`L^5>LH}+j&ic%?ypL*D=Tp#M$K`vRfm{^!Zn>(JI z$}HL{k43*y<1ySVq9CDl6Ztuab^(&Jd@hI@$&Cv!NrRqX72! z0yPqB7yT5F2z5mV7AU1m3dl6?qQn4c-L-&6A88aevpfxSf}u^~7Cx|>xc-0~WYPMt zgq974BS|wRSfpL_gt1mnG}>l=ia;crNp%YclhnZ8B4V-z2lJX5&x=bS7TTsMQIhIy zQ7;P(-d3SHD}4k<)=bRejT`S^KSSw45Fj${>e^twgC%CV)o$-KHBv7(i!{pB-==OS z+QI!wT0&r&&HW$x>QG8ulhkxZcZ|;6*Xs$zDPITkcKJ4#x{XDxDaSSjtK}K=8g#<_ z%-rwf{yC8%zxx)D7qzGF$MYodK<_ovw23Qk)qhP5K&Do!YivfE8%Tm|zQ4D*y9EP} zIyjn4`nCasgEtHR#r?fGZX64#gb!qB^CJl`QK4$w;(iT%^%&#htO@Rs=Ad}eDZR+YaqcO5WY7?SW zqo~+bs)@ZGcU2@wR|zt*`WQ>R5qZb1R;UvcIF%G#1?l%Q*_&tP_u`T&x4YZyF}25+ zmly?qd`%hr@%bgeZ5iyb%uwXLxFq|*GEgk0g5WKkoEo9R;#JJWF_~$*5pFtcv5Vp; z#o$`5HPm75t534P*tKN`7k=$aVPEROXPeN@hsCVy9$=nGSo$sZOLHezL>ue&s= zvwAGbg%Wi>y4acD{VR=*c92&l43|y* z#;v&xU+n`av{mUs(H7(r1sXV(gp$=VD_iGUX8BH_h&tgDl7%ubm^4XfRi}I{P5BD& zbl+Bq2K35!$_MGr7B&_(r&wHi5AuPb_`sFlJFHD@)MTzG0uCi~)@_(0T zt%T34N~`BwUYmw=Df#J~+u2YN*?q&Fe@Nw3u2;hy-Cx!>yk4ubYJz9w)jI1QeEb-3 zKb4aM#-O0NL#oZJe-8GcLT>VApDne7>DAgr!u(=G<-Izqg@u->{8Ga{302dV{Pd+k zzH*IeHkE&y+~2g16O)JCEtVcr8pv4~h^xeNeM?Z^YZ3UCu`EP$o?fP~^TeU>dg(Z~ zJcst_VNZDBGh~5#o|;P-e_am!anzS+PsrcI717zfy%|nE-|Dku5*B#2>+N3J0pOrrhLfF9&*dC1i49rrPT@8!o~iG1lk-1xox z*BK{+M@}YmTW2YGB>(peR#!1Td7()KP~FR3uQv-k#@r&0%xmWLcWQb~ zrlPVxwFEN7EM2b8fXlL?b+3 z<(hoI-(M9 zc6>OJ8qqNja7$0z6Z_@bfFtpPNm=e(bgOIcElsF!Tq8Q2ZCI|9?aZ}n5^x;R)@M9* z<$B=zfl^&K_`Pc}fBs$Ax3ArHi8e?EePvzkH~@6OzL{Cm=Qg?9{hd0+j7UsYd}-1z z$L11MiAFxwJ|WSFVL={Kz865EJ?w@<{LbB;-MI^56&HHVLV6nk88fsk1A?&(s|DL- zLBF)O?iKvUj1RQe%1>8b;Ko64QSW~Uc~(2YtmH_jf$d~o!LekA$98&b=)o=pN0S>p zxGA?&do?r$2YG8K6)CQiI~m#e))X#lBq)tfD_c~r=Jjfc%Pt7`?vQfmZ1oW`V(#fe zpxW-*5k&j<3zVILj6hX^xgH=?4j`J@@&3`kXN?$84&!`w*yJ!P#K3(4q}dl`{!wWD z;}gkG^pgHZG{QA)5wsD`KYz3A*uP4%Yy;ZaS1hzc0YW=Aw$L6F=z1!P-RQBKJ=m*2 z*Hc-roWFSk$26{V6IWeWE^gxTh_2`gL!MWV=LBdF*Z`F4Qwb%?Q#89ir`10?ta%qX zZa?l~Eq3vkx|oi;c;0S%{=H5*^Q??@t`1^{_vzs*9dvcuzc-}dhGhZZ4+;(^YpKFx zy1CrqpNsKdh~eigJevG+41Xo{i*;u4L5a|2^Ye&lsA_`k-O2Om(2h0D>e@4VPV^(gH;vCZ5Y`Gvf&JGGemdrq$ zjIQYM7xbum>}K=Nj~{`(_P?2y~;%;-SSh8R>@i%f6Di8z!sSSV2a6A5vANTGpra@<0ls`-MGrwDNah)SZRb_Gl& z(G)gSwF*Ez&N@)h0F(Rpc5+-)ARRY!a@n$8*U*%>sQszwI3umVSKP%n{lMXM}JAY*&Da54D#tTtn0OCAOg3t|rh|@;bs94BG|6>_~dv@SmUe;OiFD z*o)Npz5OqxNnY>NU)|bIFp4^x9)9SFhaP_9+|Pu^pFVZ=6OTUrX)aCg%=0qY#P1}( zS$^FtNwyIt`R$j#{MWpkw3io?&g`R){M18_KKl5>%V!_@^n*{Idia*JPbK-clg=CI z%F4?Al>;lct{hxBv~qZ5b>+y)ZTnaD@85r5|E>EE?mx8u@cz~PNA}-#VCBI60|yS= zdf?!JLkA8YSUqs$z-_m#+`9kP1GnCK>%m(O-Fo=e)mx9;dfUO3gZmF2IC$&9g9i^C zJbZBV;E{v39a=fG|ImR$w;nop=+L3VhgJ_AIdt3MmBafFA2@vL;e&?{9X@<`_3)9y zx2>+M?q5Bydh6=J)kCX?S65e$tloBH<;eac2aeo&&0TZBU3{e+thH{Yz3xs@`^<3Q(H ztuq709)A4nspU^Rc5eBx$3JceJ74SUc^EvN`gk~b{}bmPdHl@Lqn|qS>9Y?#v9$YS zc>GLwD4hK9$IqNP8J>RV(NCR%uWFr5MMaNW0juXyt<(4~Zn@=_e@IjH&ion;cWC#C zMv`nHyht1f0p!Jc=TUni5|qM!kc|CT4V6c~U~jIT2by@tJW2jsqtic0`$FO?t%8KU z(CCEYKsQC|1B7HqP7;bD$IyPI(Rm>i82T^R->ZY7eD9X$-N02HLc=@NljN^A$6fkk zx&+*y_G`_~{3ZG!x(Fn#r;BejJ4AN83jn)`B|6Pfki>)yOJaz7D$pCAUoz74F%(+wHkux7Z^-M_e7bZJ5hDV+XXC6NX z@jv|251kD^_4udGeEgxaKXWWRa!#)vIrG#bA3sIj3zMBzSW@w)h`lx0Y3>e>e0)H^*-*88_T!%KO zaYqnbD=RhbeT3Mfszzxv5wuigF;#-8QXQd}`!pd1bT{ZFsPB`Tg~t6kxKZ7r%J@rY zc1%?j^Q6;^n2Eg##FS+tT57Ty_W%yMW4kk9DlS28mxNAC8k59wm`Sp*4s)f@7`Y0+ z44wnvg_kCZw|tf76+rvZOF=IwAy&VIq{N*YT}dgSCIc3tk84QOLh|FQ8WeqPlF;f8 zsw*$i<%L9TayultY$0~LA?5(9&{|?60~#MWeQabaNmEB06+I-2K{+IdGWZNwiA9|m zHhvTowUWCuT886zJ!4>b-e@;vlT34(CE1#0!;kYMCr>e^Y16q3T_%%d$kFEEd$uyJ zTvtIVwN=av=0~~%+Jm}7y2I>q{I|M)bKkL7nGqv&z(xjiFKpbjZToMkR^8qF=(fIo zN6w$Ew%eCfI_Iysuj!S)^lsm=>*t4FI`;a>Q)k}!YcOaE`O?FEmjrlnp;=jaNF7zsdv{CPo6n@jQ|V%=ha}`Yiq3d>L17Dre2CmYG4y*(^O_l;?rUb1z{l7@5C?u`#z) z^L(kkXCx_ucP3Tf2jr&Ols>j+cP2@FWHpnP$=a1GoRgbt&{;E#%HdhES@|H#%qb(B z@+wzge&Uqr4`r#n+nH)(cuk6Olvj?;g6;p%p9jYn-uP{Z!9j=FJYDKtnwz4&Dij#1(6i8K%>`cF=ZVzTW4a3 z&aO>jlesC$DY{f$7USS@*aGeSOo#5c?!4}O^9ADvx{JDxv_sryx-W!b_ABkbkbMrP zkjJ&=qPg>yF5CIkQ@_?5jI(Oyt^9iMJe!iSa@89*pFKB}{K(cFPfgU)rOR5R)oWgT zt#`|l#_IlE2MwmV^ZZR;e7Snv-Y1HRS3DVc`k8$P4!&^gIAX9lHODo-?#}%O-hD4( z$jr(wJb8*0rWH;vzG=2=@oh^Qm#wRVIyKJd_E`wkx&hz>gEBg&+a&va|^ zf5tJ`4~f+}E0vxcW`@nd78rB6GVWH^TB;n@7qA6vF+Y=NmHu$GG0ns)d*(16-dL5! zO=YqaCs{!YCX2Zx-pZEgNy-lXhbn_ovvddrmAylGYz16LAmUT)TgHH-P> zIdj5>dQ%RwsG*v%@}{2soAG}FuOE~Y&aNkz8gR?M3gZ&rH$~UGE?@O;&j;%5#D?7rAm@NxzsaqP$ z9=V`gEV-RCvAW*KEqX1xg3F$%3tP+C7V}Dzg;~Sa%*nBovqos9UfH|(0-+3L^NKPv z3%T{heC}OlwuW(}WE5*{=?`b(yfuSl^qXU;Q55aO)Tlr62BUN|bJFlNlu7JjXHXJb zHX+>7=qj~94>Ji(S~RFmGD$`)qCf>Y0kjZAqo7qIsk<+Wp!(Nnashn?H(~>xiDZ%7 zfWNatZ1Ky^P!Q!#w@>zVNzTxwkSukn$#*o1REVLF6r}mP&?;!dem7HVpQ zptr4EE@?Iih)u0BFc2z>n48N@F_a2Xvek^GH=FPtQ~_eQj9>BT%O)8Ekcp<0Lue)dr0b?Qh#AvrLK-E9P(;8y9Arw1gc*6oPHzas$vRYe9Y72?NLFw>LPi7* zi5@!h5b*ChNJaoTJr%ScEiEd?>c(Nmq=jgI&UMPkeL2^18!J(d=MX+5g+idLbWxT04^NqwDQqU7G-@($!qy1Z}Y68j*A zq8Dvr3Elg-WbqG4;V2Eg1>E#f)$)H^_pkDhWsOefC6L6@yn(zifv{`cowBO0gLy>f z60k6NC}dG^Il!(FE!F&nIBWOkzy<&<7>8Y+!1f9RKRFpIZ{yE;64;19ikHj&poruw z=tm~s)g8i{D0|wGA0n$l&Fksz6lJLeN;4>Yzl{wGq~OP6x+cg$?|9bhBw8SQDYwW} z;%F3ul1~=e#ZbEtYWH_{LW9RBj!%U*f@YRN-T+!U?_Ib@H)bl-YE#JNgB3zwKwAr% z%5k)N60}!<6@bkHWC*H6TN$^yN$$RU6okm33&&x5@L6?7?tS^l^MR!a@f-|24Xwug zGM)(lN-aKucA|d13v4Z*MZm_#lkhn<-eq8E&W=;-1hzea{SUAau$wUs>rG%I)5wf# zeVFWT!YPmF^GHHj>;yuXCyW76`b;Bvle_8!;>YGwPW?jpBogYPAn^YY4ApT$p zEvMpOxF5L$bx#2)y7t-Dpua02*}R(g;mB~o4O(oZaLho)ou)(!Nxsw5E_pgo@u*&Z z@~ULGkQ6QyeY8~V_Mv3xK;_dKt6WFJkP1|_ayrQyB~1{Y1hU~cW7W3)Ig0Xy z@Q_j*W4B%e-J`|C9zbnKZQ=lKe9Z#e*fS3LA^=q?^dO)^pq*$(N5?^33F|st3>yF~ z^>|UVcxleSyCSrL|Ij%8yYNho3LP#c)Bc|_g#5vnTaA#N&pqPf6U*iDioBu zL|RP;g$-Vm%A(NXUGK#_X!-n8Dd@*WmHq&`?k^(-@_UkCu~+ zMqo<-iDMTgun}MdU@OL9>l4_czz%~WjSTT;X+(^19xNw(Orij$_#tQ&&{mJ5y(2+8 zTuyL)=T<66b=;b9YuG-9& zW`^0#GBad9-`_d+{%^M=OL9!YR>kta&$;KG$M5{k?{$9XaijYldpM4wD89FSxODR5 z$@t{q#Qy3bI$Y+j(kzS)$0Svhq_o)nJQb-xbU2C*57--f7sXFmJ^D+IC_b6|ellD- za_otrBTp{g`@VdNFA)jy?YH zkrVeV9(my2#S;%6x%b5J-9=0j#dr)MBJ!8eB|NdCqA4+t4=)r7=v--0}md%_wi#Ndhpl-(YRjT4+rW!E0wrt3s0uM*-e|+%>1AF}bqtW)!?0NCTea9ZV@BYOHj~|P6)J{Bp z?B2yAk1akH?X0!qD2*ERcX!si>(_1Ax^Y|mC%#^K`*W@2?I+`>Qr^uZ<@8*9w7Y*k zDZBk?G@lH*{RiWPQluvrx8Lse&m@DLwUC(#@(%YpHKJ!IHr?yALUco~GZdohd!6AB zUDxZhLv*UwSrwvdd!3OGUDNA~hUn^EXDmb~dY$nQ9q)A}LUgRxSskLIz0PEaj`TWf zLUdKHvo=Iqz0OpKHhP_PAzJH!TMzm`ud^YII<9npgt?w`>9g0hzt7_7U=O@?>O$XK zCvl~N(E@n%_-psN*A<@!d)(cX0N#rXP1<RT%kkoYb?4`<{q3mJT$)W1zP&Hh$nDMZ|*9YrL(6qKj zQK#XC6g1tif{tq|=(<%3u5%*_Ho8#-*Si}O+~CF(+~~#?%(w{!o7`#zH@Qg#o81}( zTijX&TirGV+XCi>dwQA;Peb-J=cbgnJtQ_Qafe%{#GN6rZi&0xdL{05bp>^|LBV{; zQnf4#;i+Ozd%{!Mo^E#gw?@AjclIj$mAJD{;V;LXTNIv&J8x^o4cMW{ufwm)?>c@P z`CZTN27Wj4o8h;K-%b2B^V`C2E5B|0X8FzW+s&TpRI0>3@{Zsxa_ z-#&h~@OvA-Mgt~{dmShGok?~{fF2C3{r04eeSgGgs`dGQ=ZuYTC z&+YNCYR@hB*g((C``BR5)qSkibGv=4-gCQrtkH8jeXQAYJAACwbK8AvsORQw2#1W9xga<6|3ouIXdbJ=gFtC*kj04Es0S+Z~T@Z$KMJk!kn# zc@u1s<)CF6vDckeQe=-7gA+@c_(8yw&cvz2$ho+O7Ha&z)udL?PUoYe-G;Oi#3b$1 zI9Qf;YPiJ3N7HXc54Ydu8d6bp203=gZHzI`k*lZ8htMmf1C*RI5m!S6+%vF6*pjyR;){$Mit-HtpwFv zF_q@^LFX}*X3so~We=gZzz^c6L%khPcX;%@C7$!Xc9fa9c zCnRKJTNN#b?v?anz*!KwMLh2o!=^zbP`7yFJURGY#q^@h=*}buFm4)@GVl8pC!j0)ksrm95cEtC$xdX4nF$iCe8o?-YMG7LYx z<$H!J;P9H>I#No949B!$U80Oj&{qaESs7pY3WW`_UT7@-6TEv z?iQ*PWtw<%ztSzW;wWmQaR;SZc8N?e^uA0nX4dn`BmrierUv_Yf!dzzmRy2HoJ4W+ zXyz2UIFYhu)+-~(XQM9kyjQ+HZuz^!ov&)FOG6udd(^GgGkuJDwg*>6C8Lmmpp4-{ zuZ9~bIoq27`m@)yH${!VttRz?O}tb&+HG3z>9qAd#&+vyx;5aKaH(s}gM$mD!L-~N z6f%nc(D&tDx0F^idvB(vO1*TqoHfn#G)6m7I@GC_4qz!IceKES8^i=p_utvVa!C*1 zNJwYyY*mQ={7GC10-%cJjRjJhi5^V<)31UzyGv(_Er zzV8CF0FwvOvd|!-IFmH7?Z}RCxz_?>kc>uH)14~jTj*W^86KW~2d)C3svE%md`M6R zm^6HQqg~*9x21yM4E8~z{Q=BR&2lgu!7>){p;p{XutT9?Qq=*oVpT8j%FOQ!mLNhf zSym_Xc92kJ?x0z}gFtZ#avCsuR=vNq6}xJ?gcm`O0Rv1YY)1+8RH=lYLjK;ng$@oj_cO)0kG6TS6e7K&_C$q zSz|5v)DVBlZSeb2yY5Q-K`hs;5?UGPN2~qlU_V-GRLR?}_@LAnw36-hjTam7P*E`q zgQ4`s4x9_zxVWQkl%D=lgt${Gf^ArSpGL1cm_F5mZg}@dx0b#ZJ(9+Y>EA@X+1MPe zgD4bcT(3pPmZvvJ$JrO9-};wdoxKANuquvqYaM#rir@sODeBZDI#m32Fz1`3y)N#c zOSEOpSP?5!dsn{%@zEAH>`Hs1Eom$ilD4Hs z&CG_ItD>l7GPq1>du^TywB@Jq6lT@s8A-s80i`8C9NO|PJ5h7s+k(PMUkwxk^z99x zsLB!%3p# zlLMs#j-j}V0SE0;=I{?gLPa7T8y~SW<3sZdFeH!70@hW5f6*#6%WAtRqJ>nRzz;;g z&_2^iS$BzLbaF4St4gb&L!oH$+^GN5?C{MXHK{l z`I}EX>gwc=e4hOs#@F7%$OF8uX77C}f;LL`KT2km31rTi4T#H7JRlU;1B#oMLUGmC zHRS4j6icdrra&h~<^4J{RA!9C*sWk9q4A2O!Z;!D8AO3d)7?SwUnJ;DqKC>|aDJa2 z5~GJ4SY?J78b;utTgCVTBxcpRs4ud=Rg3Gn$adbEm8fnDFK_%$*#;%kB%taT9(4>& zj0GrEZcAiK-8CKFt|r=FraKzV>sPaku?poU8?!Rx7(-i2lQrd4HEXLY18beh&)cwH z>*>kII(51)r(2hnN|(+HIL$$m{0KI+3Ox8&6Tp=e>(rYKG~ca=Mxe8*1Y*2}mAG1Z z@?A2t)u$M&NpMzCBa9fJOsY}3>V4Y;cR`^z`+5{jKhJcB{Vu1179%<8wOTCRj3+DlvTnHXj!0Tg)gWu6-_^i zPqM7~T*+#!E}rO=u2gHq*I2=ROsk7jGqMQMFGP=?KuS>8i7*6-dQ!*RkNaOV#d9N! zw-G6AgVtCmXBtBWu;T|z;Gd(DOYv=}d(tam5H(h%Hyo?PPz&qja784&SqGq?H|x@y4C}41n4}V90F0vcOH&i?N|K~ld_ktlR;HNA zdl}8pwN3t1N10ih7p>rOZ-jpD)X1*h0YWBPYa|a!v{n$U<-+?+wAK)oDr=%uxGp1F zC4)6YxoFk2vxaCL%tR|vpPVK-#bT~}0@29=4WhG>iPj45%L1GCh*oIMM612`sl2Ec zMXOL_173H5)w*Sg*2s^USk_e~UX62YIw}oThYYNhnh=v|Ff-a@7AH`$7k+wW18&^! zN)mqkswDi1RTYF^-48@v!mo*;FN?iCET&CJskg6-8vmq{3}{w?Dq{p>3*oxBF;fv* zA1JMg)jF!occ=K*0Pn`>hcFG(4Jb^k)=q_rqM_+plq4lKvRw3ERVme4BmKX~i>RWp zuSb|_ihS!^r8~qz>A9hFQ+j4NJ)5NGSEXM_+FM$QwD^Be88hQz*b=)SBJ-KCw3A*K zOMfm-Pfw(;D|0NG5P*9)z1*C-|?vagDs?2stpkv^7F(8Qf%3Q$6h+P#DC|b zr;XweO%N~g>7YCHLWlhjFLVZkIA|fx=)xlsF^92AMG|_*N%3BsmfqPC@x~C;z@sUa zcR4NNy#P@ic_GR}m8e{)mZa9ml%)TaSr_AUtI1yRp0jk#wJce3*a{1Dy+ZACSJ4(k&rY%{d4J8(YhkDK*@XzvOk9&38<@bOtjKLSG7{QA)lv^=yqyDKW2wz=R$fKB*MVu~7p; zy#Apea)kv-!hivdOiEv0B~*q>gUZkogYdF+(V%dm(XraAs))+%&9ch9LVM%N^NO4O zim_%j-9i(oRvKNY%9v^@14PD%3$ZADSshR)1W`JQbMdGfKu}TL-aG4z{m5okFbZ5Y&4Js6rjiuBb=67RCaO#@%65{hvyNFw zbqtcKdV5G+Q`71kJ|EBE8d8RT5IdvdpF$U&!LbBjDe%#U z^fNpHd4P^Y=#R%0(D`&_dbw)Qf%dMjD10N`z$iN*V%){}o^I=U-D%?2X>1U-CK}K- zaCPFD9S^=NPsY?mQ}`K7OvnO-{WJ5^Ce#Q7c`8+u!Kai}TCv_zkkt~*$Ov~MoFny430cb0<%+izFQtG=P31#Vp0n^OLUJE%=Q%1`>h`Pya(Xl%~cu~GYYRGV*x7khZT1^P{m)9UGG z*mU%6(w-;0J$+?kCr&?mG6R7vuT|ci!+|C{b`O#!lX+QKIv^Jqw&zT8dl$QLCVBU5 z%<-7M1#UH$tsJ5v9-g_7aaaCXU_@&v<|~FZ{AG5$2!}KPCf+08b(E z9kGe46Eg?|MkbyEj9|>X48CTgF(Wl-jF5s}Bh*uNg+XC5IP^y}zeOpY(xeH~xDzut zl7gD9)WcpN7qbZYnv`y>eIva6#YDWFeooGz#8Udv6LFjyDJ+kmV#+|U%G?fOWVspF z1=WN07A0G-h2Ry~OY>U~@eJWPQreaxIp#>&n3siozR{4ZITbH&6U7M&$?GFq0~Y29 zdY4==el984$SX3=@amO~YQ$2TN;NU#2+y#tihU0L`ek{Pm}NCs-3awT#*rZTOk6P0 z&S9e2`V6>kVrz(T@wW)`=raPaj1mJdb~wwdZ}+qfri2xxL|gue2(m;MSkfm1`GZpey7MPa)uJmX+_yi7W?WQzi#+I_=;bYnnZ;fJPi1#Z~ z9(vg-iwhGTanRH{eBEg#3jxT#k9P7lwX9^2PiCq$(>iwS)|BaQK7A_E9KO!m8nnv< z2N$KLR?AYDUz%Mlb0{p0eXH~+Wn|cO=tZYhI-m|ZP0=s}Cl}Mn$8kyFy^I`_GBXBU z!*r60V6T%AX(YeEASM;|81UgJmJOM>RvJIXK@m0~XiDH)X-1l>MDpMB`cdT9Hzy^u zC}<14!hjZb8JW96DKA7GRcAVfiAf;cM(HE>wx16f-=9f8f_}I<>qvW zT&Swlb?uN0u}NW-9mqnpazMhgsZo^*)-q}Wp<5=@Xe_U}s(@HSw#Y9bDW^4C4$ZTPxJ}@T6@EQL2r`?HTMt{v7U>v~4t+ ziN@4DNohdHHyX>L;2DJxS@$Igct)jU&&VJtr~H|X#q-!hw-YyHhA0bX~3juHTAhb#mCw)}bxJmG|%8W+}xE0CympO^7yw_bS0|HyJFmcEP2DjbAgl{OFL~wz$g){z$JooOW=k z6tlbGp>9-N{vQHuSwgvjNGzw*ceW;gTztnNsxl*Kc-J$w$#C%*hQLm@_X?iW_)&=N zDvgzUnKAwWT7zW51GH-~22HF?GZpr_C7~r!Xo$7cVv6ye89iaxlPCRXi!rGHjgn_q z5;e5)<6+r2pa`>*Xi&(e1p7zS38hd&H9zQODO51vT6vwKCiXeFBui2Gdls<$&}<=% zg8(5`azn*@lLEC5VIQzd!NW3OC_9|Dk8&v1N4rnr56Dn9kfUnIY_p6rgrZ6M$N3pV z_*b@gHhqN^7xC#iL;)|~BErW6q%trM=L*`4;!9V>s1Aw;q?b{Wn^3*1yOUcpt&;iAU6dRlQV|ZR5GS?$5dxH zIUq>aNzj(1miitZLWBLrE0X zh&p@|$)$7&3yPhqzA`Mi0WEbJxnByyB`~Z}eUlhQS5nxML?+Dt{xB?6b`gdv8UQfd z0K;7l6T^dMmkkTQWvx+5DRx>o8^(Dx%n-EPa2E#&K6H;I7J8z0zU0O~LJl_6ke=h8 zrR|VsxSwZOdHQ2?g*?L=#~O&T;q4}&p6>VyU>-xfj*9vg{|)~*&2xTKZ4Z0uK*DRG z*M<}&F8f^$PV3OH4B(uqpsCxaDeF)~BhC(FV|LeozB_(dv_^p(xjt3o$;> zR~D*bPf-mF`_95&8b}4xJ z!k?9iPz#gwVtusxq#MeGKQrC%wssMUw3YqFJ6q#Yyw1$vXH6-by1^@jGeIdl%U*bI zy}cQkD$$a0Jl2t{wh<|#inBmE7i*0;ieE_@IB9zViBWH^sbJ|`d{Cq;Q*D(Se~(!t zF9NZRNe1*;R&>SSFUB1TL6H3Ie| zQ0L=v6+nJA8yChxplkww&WP7+QrDU-BX~y`uG$n=E%*-DFuh?P!T^P#34;=bWBEXY zAz0oAL%5xPOq>OQwupI{@Y*;imi3=&`t&;~gB!%=`OKvg7u*4}a$uD)%Lm{N;6TMR+wiTYOSRUm?D~9GxfcPz-U_jS4HJxWSTD%skAlH z?)Ub=r86%t{p`!H{LI`!^dwoNE9o#I&i0XY%4TvIre$_TN7ZT#XqmY)^G~8qedmCl-u|ycLInicY19#FdrutyDJ?~L*ee(v*!|Y9% zDV6BrTV$!Hr>D~akGW-*ZxChq=mrYAGJQ!Udh@;6+St5a%cGS=tQV%;N6n~Z5ao-* z4(O#1^|bUQBNvff!kQ6&yzyh^$BW+lF!{lpOeRZiNLV5YUHNl^!V+PPGKq!xWlTT( zQR)ZSyZ7p}lzt25#?3RhkkyIlntskwc3Na8HpgjmQc_Ijk zomenVh|vitdt%a;m>|T07R8q&|53#aw--pmRoB-iPU>B=r?|aGW`H!xi<#1lGMR-3 z2q5yL1>s`WqQ6`S*p809Ax+NEUHE6_kYion6WO8k~i6Oq-&KMMg4um6?$Rv;Pf=$g# z@GKJ)*yI%VWhFpR2aI2rMZq%k%27R$A=Flq?3%E}LPRFRhX;MNV>ZH^vR&zxTO~G~ z8zk90sg3v0+g)-kds7NKW4Jk~wLcie9H<{5U~TEi{%m_GmS;&-i{!qENsT)7&f_3t zyDfQ6<;7M$TXt6Qk|wwa0k7+{J|WoIqt$>a5g5$JV)p=U|_)54674zK6_lTKg|{jOspO5QdC}a3lJw1P?Atd{JlD$CweA; z_LXZ7%>e;_agYnO-gA!GJ*X0}1I{duqJYD`r6jy9#~AkOMTjafXG7kZU@2conQ3Op<6j%OfRb^JC98Q~>X1FEdSCtTWIY-NU--OvjgM8q3uQ8ehuz6Q;B>DyUBC@Li{Zw%CogrX~vP&<8N-6UCU%+mDB zwNSZE)FMS$XTUZ`n77mOVybfE|JCG zti8Lq=&&*_F?-r30ZDoqacadVs>7#A`fN!lq-QBU%|Ef|%5IoJ#5lW5Sk2L1F6~fa z`RSx2n-$kH(@^=yI2~g$pvIyP)9RWQFtx6#WU`}QWP?dv=#e_9d_I~)?Tjvzo|Wg4 zWf!Xf!*vrW9GS40+d*L$_R zsL7DFZdoQQ&`4IWs_3uxYF}Q+$<|ABTWAl97wuM~2J#Ch-O;;ANOZ87`RmD#wBMm_ zovKhb;Swr}m#=b!9p(!DJpT+PWC$WT{WEAB3eO5&ML(+Nr?qziZSjnS^U=?R=U)in za~AH6J{iJaN*p9X8OD^UMm|I&ZHk^vx}&~DNJj%#1M`AFFHhS`hC#!ToHBbuofMhj zE%H!0DUH-_8uVmCxA2e#Y2cGI#^UbKIT064wR2aUTBCmpiS-Q%6mEv{1sD%9mDKZk zQLkBbDtkIvNCc-rWYffjPvtCk8eWUC-KPI?rv)7hHyBy(JmIUzZ z1Iv;Gz$q>+Jg1Xm+49$L?k#NR-a_lx! zA$&fBzZSw@58(@h>VnC^um?jDEn#s0!1w~`(0sUCe(7N8quo&*N5Kg{`hvIEae!m2 z14vU`jbIiBv6*yOb;`=bhPK^eO@s>IXwn-56;e&ck0zRMItR9F`wy}OaEHBfpRGK= zhm~SGqP0;I`8jYRmF2Cf9_|jjbTG-FY6+@H^9YvofQr>88QIxCCYTi`{zeFYGlZWG;Y%U>tq}e;Te`H>9Oxysl^Vn%JhCZy5qT#yp)}+ZQSMGHq?sTm z?OC6u*SU!FVy-U(gOJM&I4=mXc9sb^Ny&3!C1VE0NQ_~(h}fMIN%|EgE+}xTO`KZg zJxb7+(`(^GlT^`<2v0YUMB<{h&e-$9Qgy?K>E8A%R|hAky^Xnbqi*z{9E^UT6}4|}tibg%XlI*@Ch5;9>g~E;=%+r{kA6~7%>a|! zGWn&DlzvWrrt z*w=nYf4M)pztWHXYCo#VIr9>-|62dWulJ)b^rOm-aTa9-KGlEq8~x~S_MWNh@+oD8_c-=2DOi{>4z<0Z+W($E1G60I`7?V%ON>_j%sgC^@%)*+p(Rbtvij(e z9P9ZrKx-u>Jd0hlHxxL*pod3xkGHo$Cfk(l*@LX>&})@KskUhtfz6@)TQmGzV{ zbi^#tsxTHTZVnaiszT&0vniDSsC?~M8e(B<3L_$K@l;%F@ndnZMcDw#nxWPWiIs)j zA&X)ss%N1oaL;^(Ex3keu_)RrN3-2ZQP?u8`zm;!quFk_uuX(ndE0`UquI{6%T~iT??6s0W9$oN?Fk6-oRq^dFUD_Hs3(RQnSBH7fVRrh&nE z05#I+sTBhQp5Xd(%x&4sHW0|Ek1=tL90Z_j8odror5S+sLYYHkD8(T%B!>ts1zl|` zTS5}EAv*YUr6Y6Dob{3!%)gi=xLQ6>a_t_^7kOBy5Tss0)CrS@IQ>P`(Z9A=+H&0Z zB0+#>If}>>S%6w!MUjF)Wr2bWm1OmvjR3wT9N<(gGCEi4#1MfYTFxp%H2tvIUN;hy z{qYkQfpIjbA=Bof;Cu+(!Nd)mtN+Nwx@LiD;bSpYBuHaoC{#wiH4u4a@087P@;WkT z2{HbLG#1>zLVdwbz!Sx*XW0iOhJz#NYla9AUFc7=->;aQQ8!s{=F*iDx(1%26w`(#xp6{#ttF<}U z)8rwzqRsK?e&ts%IHY}y^|_}ZH#&y%U1$0143Fh9JH(V@E?2U>%?wLnk|v>m z)t&icy<*7bpT@SGSaJ?_yQYez(!%*5&;7n5NJKxw4M5wpmah1ju8G3SH*?Xf*Rb$k zY?7=2%&MWOR8ME@s?38r`PpvYfRE!AtpsU3`73K|P3YN83UuZu{f1BZ*arW?){OLm zYQ%3$3G9ZCM1dJZMo~es>KNY{xl>u_HN9i@Yp|Hk@=~hFx>&tU-;pFJ6rOPgLfIP=!uYFKR+Zug3PVEBP zgi8aEb{YVFeo5nX^sl97DLj#8Pu-+FXK3$_Z@vISuS+PKvSHlg_NU58qj1^i8J&2$ z#8OQ9>P=~ri!{A?2b8uTBlXTdC_C0E zr5A2WN3BxbA}hC_zZkaNPET)6*Xj*IK1TV*_{uP7Fu`>clnJCPM_so|z|F&ICL+^* z6&S?wFu1@cHy+CBj*bRKjz```x;uP6KeRG83wMjzwWz1e^nlnSf=hkZkWMGS1 zjh$4^AG(h4RfIHU_~LqT*mEwKIGOYh8nR9}X~dZzLRbES2mWp3ujPIgHwF%4T^<_G zL?1*mbM*vgfs#ABEp1%kvavf`B{!L#g_)Vahr>wz8O`0)@>CSwqumDmGj0@eqd)Xg zhgb96Vp_w?cZqQtY#}*I_2@F?RWyCwCf$%`wleLLXsmxO$0x}Q&(-3jo7_YN3(4zc zD!Jgn9n3wMK8Z@gwk-o%xu|4yKEt<4UT2x+f*?8XE8)uJpu~L=m2h?TvLq_0y46{d zAh`e}=T*sRUkUd`X0I)YN`~{*A)kv%aMx$KRLOZNIjxH+GWSIPoKZDj1v8jW`{tNQ zgz{YX6Jp#IxUx=A)W=L8A(z7gVpU^b#DkJn;6X{3#=`~d%_{?Tf$7LK0(Rb;N`>Ju zu!@6YKwV;JSk=&WeC|w4{{&vZ5Z)9yzAcwidRTwWDLt&$`ezN5r*z$;axTh9T{EXW z*@I?1bJ@c(QlD8#>e=`fNIkRv3Z$N`d;S9_^;P*;d%A{BMsjM*NqzKUvNTd(6^NA` zi6K^XqeTM#dnNU=*andLSb^o0L>I;jRHY&qG3q!k zRRI>9i~%mS#ALSHG%({#=c7Fv?GZOQgG%n&JHzl`Lr)AcX3ovJrZ~M_Leu)*LJ5Z%l~P!q_G!qNCB5Q|t)SvCG@ivU7-rVk5B{+QjnJVz_sB|>EBbrHD|Bgz>!#kqO zr0#j@$0QrcZNk2kzl0=*yt&ja^b22nh?SPxU9uGsuw|F2twye_I5?VNC9~zu$4w>? z>;Y*G=~BaT*aq6PZJSV!ZR3Q7YyTZw98l0i!aYy%<>b27DUXm^{edSl2vabJIzUc*4kX z+4O;$MOu2pbRZ*`v!3Yc;SFi zENykr0MNIo0jUXGU3Z`%d@HMAAH;>kvE+ZuY}3SMm$5|;OiGw%h^7b*5)Tm)-6rvl zfnfHnE$f=vqZ`W_1FiHe120N(-+6-39v5hXY}&pQNek+_-4H{rn@l$c$hD~iuS>KC z0IwhfnSDS|@o0`=X~~ z|NK!4_eK9Sge;y|b~Y7S_=(t`Oc<3%lzpb7a+yez3?K|6)r1N>FyC}cf$!E4_&3?=XJ)L@Jy`pIX>%)ad*UW>+BvI zpgJQZsxVB-@8U)f0>KXVsfbffbxV|bH%pH7Dyg}PWt3@@-V4R*re-(XU=f6*PogHw zwq;2S6Zf5FNz!ThKKGI;(Eyn@Ad?mJ!msFNQ`Tm)Fk(o4#!w}5oCEP+5YG?0Zu^s1WP}H^p zL?zJ@#$=Y?Xp*Mzy=F;j3Q*Y{mp3q&ceB#hohW9}wRU!>QOY{@){^7MxC=Un?Xk>Twf zqu#(xUJT%)=3;DHD;iBd%7YfcqlmKql!tou=3_h{i?pOPntq&zaJE`p33HS92@+uu zxtE!wk>GhPr`C#3(xBVHW-l8uS;3s(8e|2?2rvg|1DpZE6|h|bD%~W+qL;OK6-}qF zI(+G}@r%5U5CFsGG}c9T{>;v48;0~13;s3%O~xsRZqd`e=zt|g2mRA+KDb@M-soLExWjEgT~2d#E;4yK{UQ{MMxEXiy`u}A z>l5o+EX6_(>1!Ia5`P96NuC4 z6gR^Vtm|xpnWtr8QVPN(%e4JW#h=yWu{=EdZFa*qOvTpELWpNH>z2m z98mW*O4(^4$8FG_6Z9Z3Z1BY6dL(k))c1+6a&&BPq5q-Zp}(P@%ljAlwV~gyG1u?L zRe-Piureq`+bHA>P&YR=Yd6eg8CBa)oJU-rB>xCh1e*MUqJCI(jeUsznWCZ$BTI4k zzsgcB$-*KB)9}ki<;r8?7!ng#E4Vf+?O}L`3;>rSx6>)Gb|we`w6mHJC_9scz}5lV zf%EzV45f@{xJHGzD5KsS8{IMAT?SG7$sh_3{Xs1BKa3@sj^>t$ukKn)5vNRDM3w8V z4gUXBUBhQd5Ygs7?7(9Vs;9 z??{RLohF-gjhU(72ywbqM$E-8{2eLFU$8$2U#nJ|m)()FS$p37d72Cqz~ItR8K4;~ zorn~KH>K5LxHZ8SwObQ5`?CJl1ff1rC)rX^>T=jsR6yVdOR^~l#M$%)ViFRw=}mbW z#)?Ud*>oE*NedfGjqGel01lpvM)QH=5rj%sT;1?dfd)7mGQL*98ArUj5FajtSjS!8 zjUNJ$$&xvnEmpM>?PS^B*^JvajXSFv5CW|B4G||7t-sEoduqhZV8r2fQh17h`q_(N zHPi3~Y-RgGY{e@?wsUa*jmjGdWEM(W7dLp+cgsS)(8u=R9SZAsSC>Ebg(VG&P`NS3`I{UOK)dpYoI}}NmZ6}3YETy4 z{nSn?Z7!bBaWnex4Mrhxt2mKQcUNgdX7P>3o$Zv+AhP+#qdC9$0eLYC>+Op<=vZRN zlI%0yGF~@}<=EJ0mkt@V!qgC5yi37+Jnx_O`rsA?d!x7eV1Fhy<|H9K!1M`t_GEv=(8+kW1-Kc3$oB> z(|K9wv-%3TVA~}N-MFlD0wdjG$qDRqi^V58!^9Z2KxSfvyGda+QFmv=Sx?;Nyi5CRM1;6!cR&6gPnN89A+^S`teXfw_UqAzzv zk$S=8xV=>wz&$4nWX)6fQpQH82)}6I-snpq{Blf(6bByT zhCur0%2(oy9WGL%=j@fyuPIW>XOj2=YX*KYL9O6Cp!1PoC|Tctyu{|X3=;98W;UT_@aM!L-Y^B2zhXk z=pUYHxslGW>T_czs3CG&R)NHHp9!kR+YL%Ze}fx>WvP&(t|H2vcC+#lP>MCESvjH@ z#Nc9@RSoF+{E?!u_W$}eMCV%O5=kJ}RknXUhfkt>rBI!6S@U_7s)O2OP-*;BM>TgC z`XuUL<4o45<)RKWPnM)Qv`@nbM+-hw!sg=abyx#hRDv>uab+UkMu@ z^GcKiB*l7_L?s1y4H7VNL6w~Kl@!{rBtuERUge^aLcOX)YwKqd*S|1jbB+PN8PcOz?gnW{f5ZqCL76O3;#}&jAjB0)S z9E#FY@N@;gSMY)bpIGpam3+>`2M__}{B$v=Gp})_9<8TcaeyZ?9TMYyS#F1n98|r@ z29~(lM2-RlRqQ8@BgQ85i4O-HjB$Q5U;M6jv29H4yL7d^VOIa$8l7i!K0A!gn*m*n z?v?E(2BJHsTW?r%(j6AxtuCFBe_{o}K`MdZv;@?}u!P7&aAO#meS)*N*`1dpxN(R5 zseT^h<|k3xf1_?fvfmB9Dt42#&zz6Ou9AgBbnV&i3g~tvLl~hq2fDx3i@Lu$hUriuMXtZ?MuvNG({s z!B86|wP5vbHmlc6wP3xDvcTe80?ea=ZUb!E4~b-nwhV`-dmmT$n_>5_TFT^ zIm;(e$(nqRu2mxQ6?>01ywSKe-&Nz2sD#~2FkrB@z0o-7)?`V7M5f?rJQS=w_>3cY zEo@0C<~;3f)P8^a-Mn1yf^oj8&^sjo7&m5zy4x3b%53uUzEh(G^eTz6+!T_*l`09$ zaHn{dq)y2uKQGL90~cv3Ii!{A%*17Tp6!Rrlc*&0M@g#WJYS$QI~UU~lsl!H@VzBR z{#7z~Cq&WMlJK?+8OGx~&)dM@dE1N;`EF}spU$>QOk3-59aPFtlzB)fx>_o|i zO#=dY&5)L7iK3xm8$l&m(<5ptPcq6_l_jb9XW6R2O`qDwHmfaA{oQh!2-{+wypU~e zo$?v-y>glpyD`SxXJG4{&yeqwv+rGL4aWSKQoj%~Qgc)3$(-~kBMz9+ZZUH;@mE9| z5{UZbETK<(AqS<&q1nc=B6+1-`W12-tFy&PD0Xj>^L4#*Va zKqZszrYxz?GG3Db$QrjLdzImK%DV_o#FaYXq9M$6!C-O>e>X%hx=rj+p zys)%Zgjh*HJYIlUNkBYtF~oOc^JIYbCB<03tXjJ}uxK_u{b9M>Xaub!eM3)>6yB9) z#9^b6CmChfXeddoN%Wakvf=FOFbaEX)7MAA(Z0f@pfr(Hdl~^v*|A)A=6b%bihUAw z6slAm@|P97RD~AO3segX#cGvA9ffLDN3a0c`)KvSMLC>&^CG0>_6^HQC*5^0#|#_d zj;1pYL-idwF(xTDdFK?C9g9h;Fg-ROn(D53>0srf!R{;Pb{}`_cDC@_3ioa{zQqjO zY8UP0yecge^nA9N-oK+yI8`&2yD5V&a|X&9S2_Bb?M61(HB4rK1axBo=0%lcsLD3e z=jdL6s^Ase%6NHfMUmS|QI9ZtKu;Ua^boL1bk?nzPu@YWbv`)&gsjuuPGpkKr%!d* zkker^ikY)*hs=_5S?-{~S6Y6`C6qq2QV>i~tQSmuxzQIFtNStvST2%2lYPF))byG@ z&sh>^lmS{``jygWU0)`c>IISObBW+}DU~=Z(LyC&Vdv6k%B{=ZX3}S!TfZ!cI@UXv zC8;-F`b@H?!B@N{uVih%tTL{YKCS?9kUlb>19-MlL~Cm zTXPzz+L>mz4L11(`m=?uHslPxULvz=URDs$*~Sk4AWZW&7=GIdUJKj4POtG=AXitc z84iDky%xAC=x$gjbsA}VBm|w;GP9AT77Rgks<7xd0hUPdP7JNb@r-ezO@6a%VC>vP zP}keGy$7P9RZt2I|OVZ z?Gmtw^g04Ik!r&an@I7HXcMXS{jiDjMglgG&JeJPbd%c>mhEi+2@5ATVVe_ZYZ`&} z7ZR-T!!s+pJ#uTar#3qzpfQMuR4U{yaumnH5o?(6sD}LX(MwLemZk6q>eIq0qFwin|cC zy$Zdi#VYig)_l=x+FpWQs}rEt1T=aL#+P2x-YWE(Hddk6h6&JX5+~?2&9cyILL+)@ zi~zkRnnJIkXpJW}d;JxArIz@ok`KZX?yOg8Z|PZwaL6HS#J6*TES-C~%NB4cM7Dq{ zz=_ws!^tg($<?FvEyBp^1o>gG4vi)b&~xGK6~t}TMu91Oc{k}X?d zn-nt8(Pg$CbCPG-?Pclt>)N`9Ex*g`vvFKKiGxpDDAV@QZk0mW3QSl_(M<(NqU@Ht z3-LpIZkY8Kw&+Meu>soYKJ8`NjaY*(CrD@(ZHDro;h)@v#|W^ z>U?%fw26~TA2W#;J2875Tt$|O-S){m7sxop(hhye!Dh+l_pTZ8$x8vw2NsHO&;5Oa z{m-u%?CRnr@XaDx5$q-H>HT{}_vhoJ%+CCbHf(@I6%4-ribA3+ii^PD=Nyso35Htlg0R&)?$ z(8mY$H7m|fF8`-Z&CT=?T^H}}(B{nIKNk&kqIh80e@UraDJE1|kKuaDJNe{DiTSMk zFCu^@w8C7v-2jSa6zq$(_@{0DX@?JXDcBp$`(PpcqSj4H_&iwTFZqwB@nxWBuFC}= zRE&n!1lm97#f)C;p+$m8|6Y5_bm)r@%ryrZ?L(qogHjd0HBj2dp0^H4*yk+<(7s6e z)&U5ga1`}UyMxGM(C%hnoM*VSJb4r2Z0loh4S*cA<48#RW=2|STX6CRz0UDQQc2EQZzS>A8oPI9 zWr%TO=~?*c%{rF;%cIFq;hfjG@=={rSz$LJi<5M}Ol`gtiA$1$>rs0R-=fwN<_=G+ z_wvM!S)U_IS>mP=OV9HxSsv2!lvCy;AU#j5hQ z6bmKk0k)y0GrEs6Nq=5@Qbjf>&Y9>zZrT2Kk!Aox=~jId>%d(teI}2qPB;-`ct9@C zC+B0Tg!sQkDCzwb=}&I)tdQ*Q!Rb~~Cvn(L)k)U8hEWXpGcN0JPn>^`2RPjNsXMRp zojv-TT)v@)QH8E;_YT#nwo_`I@7aW?21hNifrELTZ%j!v*1ucH4;AeV<@?R`L1OA+ z&4`Pa47*f9Yk4I?IF(cj^(u)<2J)*Ntdev1g_l5-kr0*ewavT|Q5BW+Z@loisHC26 z?Y2smkml#KRsRensHA`6g-@cA{*4ztiAwrcU3f_FWuM`ug8V)RZhi`&)bo2IET_Kf zM04Z~?}zj2H2U|6=5>OiK4$s|xf~vrd>4v%P|^xKDCyF8Sh^~}mehr71MF2J%EIs{ zfyKS-_&_^V0-TfWy3dE^RgpTkdg{pAj4Awd<~EcATK}*)2fjwZO?tukqYp9_XNdmj z)Q`pUkx|Cdt5^eEslQzY1Sl&0Y-Ur&_$+VZ{5gLOB@m?6Q`8#3g2|W;8)N z{UW*YqkiO>jlRe!xL0GX%i>7+M zl4O^GwbSQG(YIp!`!n`lF!%RPX$(&Vg4OP<>`pTL(tIQ(d%D>i_} zMLFuuB>Uo5U_g8t;y%b5PE2>e3QSsd?2UHmX05#KeqEt$jkK?}00I?eAb4!`i)n-n zCdb&eUm8D5+GSE5tyX|-ow_|HZI zxg|K~zbehFC={^p#}ji`WK+7i%(KNb#-@t$DseU17}pkIY(OWnJthgXGGO6FaGOaGQ3y$`>&}(a79aUatK~7nm?}jzKCbk3m$;)8@v$zRiH*bw$^;>oPDt5z zc&4~dMGMI)O6Wj!enb#+#&&Z@v*`u9-#(Y_gI(0-G4!2J-N6PaecCLmnZQ zk%ztr7RV!k{e&4KyU1kq40C7Eh%|*hE|))}Aat*P{>(Psn01T%8I`S@KJsVunm&A# zKf`bK0i~>dgr0rf#Xn;uiYDdk^1SI|SK`f+ux4hKF;7a$QaAdzMM)kioR3H>O`>9@ zA_15`01(0fA1e=tkwZ+d=>8$5Qv%Q7x(5OfRB4Y4GciU$ZpPJ*Adz6?xoS76R=wbS zt8ZHQj66->v71)DJe;g9+!J$_%ONKuRwtOml^)R&&3xqiWj!1H(+&RVCLe53pvzM% zm`z_6^b^n&ezJ*d4_BSlJv?HoC08cW(`Z=4d(HW0y>ohZH_O@tr{j=^W$yHX{AH;> zf|9;r$$?8@!=JVD2=Q3hh*c(MrVxAs zdt5bcir>W6(=2@p)@>HwCf9=5r}+@ivSeyWsgYnG%%Gshna%q#yf$3vyxAjAv_TgD z3or$6mO~PNu#d>*K)lJuuesIbBXljT=J$4Zs?GLfOw1%tvOr7lNJo^7bu>qS&4Ue@ z4_JS=vb5~Fn~D6oo5Dc(k>h$rs|i+vnEWVR+ZgFsv2hpWXOcOrp1Lh}*F|bR4ax1@W!I;pQ7*?qh;Mk~@Z&4vDnj%0}z9+b9km2%* zWl-zJ04!;XCooDCgk#JBk;oNIGW13AKxVnXs#%JplrCaeA-L+76Q+siZX_(AmVVzlluy*cs@Z>>7 zt8xrq3SscaxL5;ELV#d6AFg`tz{~K4y5ro0fN$TSeL9f*Sk88%Fg3zsOdg#vj#y{A zT6{h;D|MwoD(X6GH;y(wxh$+C7`IEL5UHllkaaTRzCKXl|6^^q} zm{SbB4?NLb_o%L`gcbP`)S)T9U8Ry$&Q!gKcV0q9hluzquR@)KNlV~wdvYyhET4bN zJ<@max$kkcIev*Y-4&V|y@saJ_(ayn%d~f;)~=yrC2d1S5_7-wLmiOS8HWh)C>_#1 zCvY$+jI*2@a8pn3(XoZ@H1`h^xc79&r|kND5XvrVH$J6nUI~+&XaYCuh_o8p|ysL-;SVH$Pod?O@J7phgx)oN#~ z*v@L&Su+K(570%rvX%@3*3MYoj?QqYbbShm3E6SoI@#;K6%waaW!9B3HNjUB`dt~L ziM3NGptWg|#wu5LV^iRR8}oZ^4JSr=jz_j$Ax{KIfIzLP1J><62tp$l8ZT=U7_62_PNL|4aCs3=xN-~t>)#=V|B zK$6%(S1ZE~+LbS$a+dG~j5;Q5LtNdhJ=$R>erHtThU=FfO=Is&LqnjXqx2Mwqn=fg zUC*6$~w1^${m z;w@H1@g(Y)jg7c5eOY&`RC3PujIN&1Mfz=RcBizpe65bxFlrWE070M3v0SR#^L+bIvS#^HsGBSiBJQ?b3XOd4rxM`tvlCj9UVdpk7eAu~-48h2H z!~S3czCtPL3TnvbD9Xexp03krNi^_V9P3GB+(l!JjJkNN$4D%UH5Dx%YaQFq#z_MU z>Lv@Q3uCGc`@8Eb7H_wDyjjjhfRXE|4lb+I)+ z*2TvBSU37z$lBuKdQ%LDrZC{+sd-eYHr8CMG-=~KZLHdrR8E0GlIMvDe)=rh@f|9xd2nn+WH0!ue0NBKArIr4KtG2 zY1j3t5ZW=Wn=!6KCFYfpVq7;+OfjyDvXpEjBx!<_fI73c8Rh6RLm5E^$|>-&>VW!| z5e^zNl;A>}tgJGwARGi__7-{+xMM82W^H-Gnc#Y}kdlF`Zv-*;bp$^1Ewk{tqj$AN z_30|M#xrLCFV>QJO>#6?E8I^8qd&94#AgUs(oD;6*NN)8JH=rGr+#AkiJl z(pBNL4^ID#WzLd?!NHu!s(-`5$tkKhI2k$h2S-2sc;trl5qZLk6nOVC=i4)kUEo0+aXEjO%isqv=>C7=1 zBF6Hg=?mwhJGu=(A4r!@Vnjh!^+S#?cpmDmJJFrOl%#`G>KhlRV2V;H!c&nk<$7n! zc9P1f#l)I8+8Jy3WGyp#8TT{3&6CF zY~wuQA>rm4H+oTfhFR(n4#3%zsCEjK!hkgu=L7}EYB8m|g0-^_V`_Or2x*k6bp@zB-eczML4hW2o9e9AM+V#&C+dNZzPmb!7+ADsbVn}jZ}ubTCW9T0;8kY?OWq@9 zRnj&ZLNirGOA^qedSeI!T5LrtRB8=&R%;f$nx57*OL29Y0&97_5St%6uag;Ree2E- zOwl3^&43Y+CL7yp42hMK7>2Af01+T4MH;{k+)Qa!HvrX7 z;yhFy-MK{*05oH55(F2Or{s*8YOv3u3}xTdadj2?5jlfneaI8u1HI!}SB-S7*Zr|y)b76@K3xR&d= zt=g|jIc6Hc))qXt>R(O zD9g8Vnh=^*UE_4ohGtzhI+`1TM?`hATB~eVm&(&TZCyT7n96PUk=$^fEJ_Q6RW2dRCFwU_-O)1N@uGh_^a_#6%B zmHzAy(p@L z!s3{|`ly3;e62BCEVI{Kp391d&W3VkN%_qiAHE&KK^HCgpbb>(_xX(tw&w=bnddu3WKf%p8YMOxHGX3Iug7dqXp|pW-H!O;WMkF+_dRmo{SPjF*d2f3$cgtqbo@h6 zy0J0I%V-t9!~911HIpb>Ll~vET>SFScv-WTuSSj0haP<2eGff!{QlV!_kHNzCyv~| z?ZjhI`ZrPIm3VG$Zu{Jhxt(*n=627`&n?XDnY(%W-1hC;cWmFeeb@Hg+vm40Y~Qo} z<{fi8w(r=nW9N=tJ9h7w-?6Y`&yJgS&h6a3bH~n|J9q8ey>ou&!p=QAZ{9VxYx}Mp zyLRr{wQKjT`CSXU_UyWO_uTI7yLar~xqH{{-Mi;^FYMm4`{wz%`R(&N=6BBTn%_M? zKff@)Xa44exrOZuI~H~>>{{5pFu$;{uxH`sJ#%}u@7b|u=bl}AcJG?4L7e9%Iu`f zjHND>8Y5ur{^KW(%)bBO#o33CKVS$uQ)+C!A3Pp;z#YEpk;Mm(AKSb4@nau4ao-~| zn-06<$J~AH@b@1-cI2>o;=YF-KN9f;*~Y4@qT^P;>bX#ARQ~a{ZQFi0VrOAva*2i; zH2g>_L1|4IdWbd>@&b)izjjhSgJJ|@B8rL5%=J+2aY`HqV#mFaf5sCF?a0v zBE*0H2k$%K-go@*V-MVS;=}vggNu6g;IYRZeBcOq&(#`(Zbro) z(pPJZnBYR~8rkbi{gUi;uHG1W-;obIc+B1MHh1LM18#=q>W#7`dv;>7U}-TC<9t%N6{^h~3XY}*#4 z&o>(Fb4F27bcRqQOII6oRWzdi(pMUdjT#O8=j`vL*&<56L2aTf5##>=WqVRxYF@IN zXPS-n9GO++-GpM9x$hlUdn_>0DeaAj<#J&Ic3B&vm zp%;igu=qhBdac!Hw+FlcoFi=cmPyT8Ufpkbs4-zJ2GAc{yzj)~WA461>Nz{qXj#t~ z_>gpNsPO|)T&h$CtEGYR;9#v?pK7dWPP9gbCWbkIJ2Em_n}}CeCX+R#wFB$p=?Pcb zT-lOrZETC@O5002k{99^lTRhTQU1-rzfJyg<-eByuJo-MG%(yao4oYohkxp)e`W3m z?>T(xr#^Oi-TME1X!wqIZ=2o!-XFgA_x|eXpZ@sI{OqTG=MVnHAAjLb|LiYb`|I+m zkxkooE$rR*wnOjw;io^&tIzzwzxcwRed)`u{dH7s4cXhh`)C1<{|E?eWM?Z4!Pk#Ip zzw^(3|MUOy3xD#}RTHcK@q7R8|L5<%wbXj}(ZBf1q2cLc$JedD_eY=lt>6CJiPamX zZ+qwW-*wLqz4u3+I{ABl{FOid`h|c0pH4jXiN(i%?&tq>_TC$|&A#y4zyJ9^`SMr) z@)r*L{ImaGW!E0t)OE(O@6-3(ydVjVlQ@?=9p?q&5n>uhcm!A(gk{i`A;`tKAtsJ( z+1ETaO}jQ>w2YRZO>0G4W;6;BV{0Z=U01Qme{_gST^A;3yJ}MN$E5McMl*GqG-)II zo$F^xvXv;;C+B?UeCIpg`QEafj+GZ`=H7TT_rcumJqNxih(*Os9S=VX1UtJoZQeF< z@zLDC(deD`rtg0I$G<$9gY1=%+bAv^u8n`n#>5^JECMeSlm4Qm!amW;R!KHSWCR8o6(h48LwHMJ8Rub21fDAv_X}2`te~IW!n83K zwuCQ|J#2MD0l!NbV~;f$cewZzD|S)F}nB^Q^Y*gDT;1BK38HFJ4)K{;j|S+#(6gWQUxhHdw?mgV2h1^ za2?zR!CGjy88_DHvhkrq=8QScc#Er-U%4&)p`~p61*X#$J6LMGEgElcTFXlOda+NG zd7U_!1MIUlD!27X#yS3{SLNmGsw-^llSV=2IOFw_*jVvNmz&?k8ZWTMZt&nW1#1Lz-rG#C|En8Y@Eweh9Dz2KXw;W?et+%Xqt@q^nwhyfz zSwFGNa1X2xm09-hmVY7ooGm3kvdB#vHtybY;qv7l^MY+%_s0F7Pv2!r?fakk_1X`9 zKeP1g^DkbWFQvQp3~2`rzV*xTGq2e?CoWD3(uR$}!w)|@aOBb}O|E^fC9eGB>h;N= zy>kmbST3vfY}&T>+V%H;mk=r(wGF?$%_?;bjjq+}Jv+X#tAAkMekyN+UTt_Za`HRh zJ$LoS8&k>Yj!p0~<>Z0&Q0=!l2KS+{mX3BKUd^m3s$%PHPOgR9$`-nf8+<)m&$`4l z#9~auI&I~WXuRCTctzXFa(seb&pyq$ScbKUHlaspVrAPp#=|)TRu=kqcCId1 zE%33ynpkW%>nz$*SRqLKR=LR*C7XKP{02_q_wp8e(Ew+B|4{7?Q8KO_s@+B;zF^sU zQCjCp5t9X~- zX03ybQlI4FmYoi5BOS#hJyz#Se_Iy+{PluZ&EDAg=h;!NfUyb1KNvLrDMiG<@;>98 zXKYK27h~I*GnEQf{4^)A*73wsyoKGzRj#qd3R~GBdB0S^9Avw@sta0K z8zhrAE}gzlC_-J{*CMl^n|F!MugPpTQ&nnrS&Ei_uLA$f-cIZjaw;@RqMaWaO;kLg zmrhnJ=)Ue%ATUQjSp`Gi4{Ps4yAuzr{1SLVKtq7mqmzLSWTE2@Vpp)nl?U}^p$P|Z z4d}tJ3TG1zA~G3^M)0EQ-VyjacnQSt-l$*IwIO)$X$NtJg8or;D5!Tt!bp*#0o^yI zbwo}@bZsmZuw%a-P~*q z+hpYv@^-dzLEcVOk@jA{U(w-lBdV8XDiI|z5{&wXlo9o~X1aZ(H(|}IBX$dTk*g%D zhHiA4u-U_|CAE(9SvwhuozXO{_8pX*vpsCZY)6(ilYq_uBbEKkTB@fh%t?iaDT+dn{X3W&!d!ghC_DG7*|{?cL6+1ztB}r&V1lD# z>Zw%v5W+zqnyM*k!H5d+J%OkaF&AJ)_%9K+0ws7;u{nk4cNDoL|w;XF(-%0dOdg;8&mODT2j>~Wh2BjGYA=KTFk!W*{fs| zS@$^ZBS9qeM>SVYpPFeZof#g|B6>3_SuWD__}bxca4bWFvavf;7@Kqvdq3Di*^*(8 zo;_mHm1d>sP^Vp_W{Vo2B?c(LC=9}|k`X;~fcltOAY6%>UPB(jIQ~vqspp#EUjQ|& zBAiPdATY?y#6ATgs4t#DOZ6sK8k}l=LSH=7oO4Wh#XiGLYCF6mns*clxfx(Ak~F(X zL;9G}K=zB@`frT(EdQd2oNvpGda{D^Y8#Xrb7|i(A)Ah<{eGVP@5aXlLI4N;vld68&etniX-|8lbS=XS!Fs2;Qv(F-k8 Hqq^t6jYyP+ From b916179b819382873852fabd5c18cd7228696de9 Mon Sep 17 00:00:00 2001 From: Gav Date: Sun, 4 Feb 2018 16:01:14 +0100 Subject: [PATCH 09/13] Rename con:aut to be in line with :code. --- state_machine/src/lib.rs | 14 +++++++------- .../polkadot/src/runtime/consensus.rs | 2 +- .../polkadot/src/runtime/genesismap.rs | 6 +++--- wasm-runtime/polkadot/src/runtime/session.rs | 6 +++--- .../release/runtime_polkadot.compact.wasm | Bin 69566 -> 69666 bytes .../release/runtime_polkadot.wasm | Bin 69616 -> 69716 bytes 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/state_machine/src/lib.rs b/state_machine/src/lib.rs index f5db30206325f..dcb8a3b4c88d6 100644 --- a/state_machine/src/lib.rs +++ b/state_machine/src/lib.rs @@ -152,10 +152,10 @@ pub trait Externalities { /// Get the current set of authorities from storage. fn authorities(&self) -> Result, ExternalitiesError> { - (0..self.storage(b":aut:len")?.into_iter() + (0..self.storage(b":auth:len")?.into_iter() .rev() .fold(0, |acc, &i| (acc << 8) + (i as u32))) - .map(|i| self.storage(&to_keyed_vec(i, b":aut:".to_vec()))) + .map(|i| self.storage(&to_keyed_vec(i, b":auth:".to_vec()))) .collect() } @@ -260,17 +260,17 @@ mod tests { assert_eq!(ext.authorities(), Ok(vec![])); - ext.set_storage(b"con:aut:len".to_vec(), vec![0u8; 4]); + ext.set_storage(b":auth:len".to_vec(), vec![0u8; 4]); assert_eq!(ext.authorities(), Ok(vec![])); - ext.set_storage(b"con:aut:len".to_vec(), vec![1u8, 0, 0, 0]); + ext.set_storage(b":auth:len".to_vec(), vec![1u8, 0, 0, 0]); assert_eq!(ext.authorities(), Ok(vec![&[][..]])); - ext.set_storage(b"con:aut:\0\0\0\0".to_vec(), b"first".to_vec()); + ext.set_storage(b":auth:\0\0\0\0".to_vec(), b"first".to_vec()); assert_eq!(ext.authorities(), Ok(vec![&b"first"[..]])); - ext.set_storage(b"con:aut:len".to_vec(), vec![2u8, 0, 0, 0]); - ext.set_storage(b"con:aut:\x01\0\0\0".to_vec(), b"second".to_vec()); + ext.set_storage(b":auth:len".to_vec(), vec![2u8, 0, 0, 0]); + ext.set_storage(b":auth:\x01\0\0\0".to_vec(), b"second".to_vec()); assert_eq!(ext.authorities(), Ok(vec![&b"first"[..], &b"second"[..]])); } diff --git a/wasm-runtime/polkadot/src/runtime/consensus.rs b/wasm-runtime/polkadot/src/runtime/consensus.rs index abaa24b240934..83e59d0684025 100644 --- a/wasm-runtime/polkadot/src/runtime/consensus.rs +++ b/wasm-runtime/polkadot/src/runtime/consensus.rs @@ -23,7 +23,7 @@ use primitives::SessionKey; struct AuthorityStorageVec {} impl StorageVec for AuthorityStorageVec { type Item = SessionKey; - const PREFIX: &'static[u8] = b"con:aut:"; + const PREFIX: &'static[u8] = b":auth:"; } /// Get the current set of authorities. These are the session keys. diff --git a/wasm-runtime/polkadot/src/runtime/genesismap.rs b/wasm-runtime/polkadot/src/runtime/genesismap.rs index 20448eb09365d..a56d03bd044b7 100644 --- a/wasm-runtime/polkadot/src/runtime/genesismap.rs +++ b/wasm-runtime/polkadot/src/runtime/genesismap.rs @@ -66,18 +66,18 @@ impl GenesisConfig { .map(|(i, account)| ((i as u32).to_keyed_vec(b"ses:val:"), vec![].join(account))) ).chain(self.authorities.iter() .enumerate() - .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), vec![].join(account))) + .map(|(i, account)| ((i as u32).to_keyed_vec(b":auth:"), vec![].join(account))) ).chain(self.balances.iter() .map(|&(account, balance)| (account.to_keyed_vec(b"sta:bal:"), vec![].join(&balance))) ) .map(|(k, v)| (twox_128(&k[..])[..].to_vec(), v.to_vec())) .chain(vec![ (b":code"[..].into(), wasm_runtime), - (b"con:aut:len"[..].into(), vec![].join(&(self.authorities.len() as u32))), + (b":auth:len"[..].into(), vec![].join(&(self.authorities.len() as u32))), ].into_iter()) .chain(self.authorities.iter() .enumerate() - .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), vec![].join(account))) + .map(|(i, account)| ((i as u32).to_keyed_vec(b":auth:"), vec![].join(account))) ) .collect() } diff --git a/wasm-runtime/polkadot/src/runtime/session.rs b/wasm-runtime/polkadot/src/runtime/session.rs index 2c195dbb72d3c..5ebc444f8f3b4 100644 --- a/wasm-runtime/polkadot/src/runtime/session.rs +++ b/wasm-runtime/polkadot/src/runtime/session.rs @@ -151,9 +151,9 @@ mod tests { twox_128(&0u32.to_keyed_vec(ValidatorStorageVec::PREFIX)).to_vec() => vec![10; 32], twox_128(&1u32.to_keyed_vec(ValidatorStorageVec::PREFIX)).to_vec() => vec![20; 32], // initial session keys (11, 21, ...) - b"con:aut:len".to_vec() => vec![].join(&2u32), - 0u32.to_keyed_vec(b"con:aut:") => vec![11; 32], - 1u32.to_keyed_vec(b"con:aut:") => vec![21; 32] + b":auth:len".to_vec() => vec![].join(&2u32), + 0u32.to_keyed_vec(b":auth:") => vec![11; 32], + 1u32.to_keyed_vec(b":auth:") => vec![21; 32] ], } } diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index 2ea4d55786392d88789f4558c8f01f70334b5754..e422068474f03a8d8b572bc08de121267e5ad904 100644 GIT binary patch delta 3685 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 Date: Sun, 4 Feb 2018 22:29:58 +0100 Subject: [PATCH 10/13] Make digest compilation work. --- client/src/genesis.rs | 10 ++++---- executor/src/native_executor.rs | 10 ++++---- executor/src/wasm_executor.rs | 6 ++--- wasm-runtime/polkadot/src/lib.rs | 10 ++++---- .../polkadot/src/primitives/digest.rs | 4 +-- wasm-runtime/polkadot/src/runtime/system.rs | 24 ++++++++++-------- .../polkadot/src/support/environment.rs | 2 -- .../release/runtime_polkadot.compact.wasm | Bin 69666 -> 71347 bytes .../release/runtime_polkadot.wasm | Bin 69716 -> 71397 bytes 9 files changed, 33 insertions(+), 33 deletions(-) diff --git a/client/src/genesis.rs b/client/src/genesis.rs index c774ff8601a2c..cb6f5a6df3a0c 100644 --- a/client/src/genesis.rs +++ b/client/src/genesis.rs @@ -71,7 +71,7 @@ mod tests { let transaction_root = ordered_trie_root(transactions.iter().map(Slicable::to_vec)).0; - let header = Header { + let mut header = Header { parent_hash, number, state_root, @@ -83,16 +83,16 @@ mod tests { let mut overlay = OverlayedChanges::default(); for tx in transactions.iter() { - let _ = execute( + header = Header::from_slice(&execute( backend, &mut overlay, &executor(), "execute_transaction", - &CallData(vec![].join(&number).join(tx)) - ).unwrap(); + &CallData(vec![].join(&header).join(tx)) + ).unwrap()).unwrap(); } - let header = Header::from_slice(&execute( + header = Header::from_slice(&execute( backend, &mut overlay, &executor(), diff --git a/executor/src/native_executor.rs b/executor/src/native_executor.rs index 78ae257603576..d45efd9031dc4 100644 --- a/executor/src/native_executor.rs +++ b/executor/src/native_executor.rs @@ -44,7 +44,7 @@ mod tests { use super::*; use runtime_std::TestExternalities; use native_runtime::codec::{KeyedVec, Joiner, Slicable}; - use native_runtime::support::{one, two, StaticHexInto, Hashable}; + use native_runtime::support::{one, two, Hashable}; use native_runtime::primitives::*; use native_runtime::runtime::staking::balance; use primitives::twox_128; @@ -71,7 +71,7 @@ mod tests { twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = NativeExecutor.call(&mut t, BLOATY_CODE, "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); + let r = NativeExecutor.call(&mut t, BLOATY_CODE, "execute_transaction", &CallData(vec![].join(&Header::from_block_number(1u64)).join(&tx()))); assert!(r.is_err()); } @@ -82,7 +82,7 @@ mod tests { twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = NativeExecutor.call(&mut t, COMPACT_CODE, "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); + let r = NativeExecutor.call(&mut t, COMPACT_CODE, "execute_transaction", &CallData(vec![].join(&Header::from_block_number(1u64)).join(&tx()))); assert!(r.is_err()); } @@ -95,7 +95,7 @@ mod tests { twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = NativeExecutor.call(&mut t, COMPACT_CODE, "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); + let r = NativeExecutor.call(&mut t, COMPACT_CODE, "execute_transaction", &CallData(vec![].join(&Header::from_block_number(1u64)).join(&tx()))); assert!(r.is_ok()); runtime_std::with_externalities(&mut t, || { @@ -113,7 +113,7 @@ mod tests { twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = NativeExecutor.call(&mut t, BLOATY_CODE, "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); + let r = NativeExecutor.call(&mut t, BLOATY_CODE, "execute_transaction", &CallData(vec![].join(&Header::from_block_number(1u64)).join(&tx()))); assert!(r.is_ok()); runtime_std::with_externalities(&mut t, || { diff --git a/executor/src/wasm_executor.rs b/executor/src/wasm_executor.rs index a9e8a85647669..5ab95c3648553 100644 --- a/executor/src/wasm_executor.rs +++ b/executor/src/wasm_executor.rs @@ -293,7 +293,7 @@ mod tests { use primitives::{blake2_256, twox_128}; use runtime_std::{self, TestExternalities}; use native_runtime::support::{one, two}; - use native_runtime::primitives::{UncheckedTransaction, AccountID}; + use native_runtime::primitives::{UncheckedTransaction, AccountID, Header}; use native_runtime::codec::{Joiner, KeyedVec}; use native_runtime::runtime::staking::balance; @@ -436,7 +436,7 @@ mod tests { ], }; let foreign_code = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm"); - let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); + let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &CallData(vec![].join(&Header::from_block_number(1u64)).join(&tx()))); assert!(r.is_err()); } @@ -450,7 +450,7 @@ mod tests { ], }; let foreign_code = include_bytes!("../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm"); - let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &CallData(vec![].join(&1u64).join(&tx()))); + let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &CallData(vec![].join(&Header::from_block_number(1u64)).join(&tx()))); assert!(r.is_ok()); runtime_std::with_externalities(&mut t, || { diff --git a/wasm-runtime/polkadot/src/lib.rs b/wasm-runtime/polkadot/src/lib.rs index 2585c013b00a0..eefa6e44a875b 100644 --- a/wasm-runtime/polkadot/src/lib.rs +++ b/wasm-runtime/polkadot/src/lib.rs @@ -38,7 +38,7 @@ pub mod runtime; use runtime_std::prelude::*; use codec::{Slicable, Joiner}; use runtime_std::print; -use primitives::{Block, Header, BlockNumber, UncheckedTransaction}; +use primitives::{Block, Header, UncheckedTransaction}; /// Execute a block, with `input` being the canonical serialisation of the block. Returns the /// empty vector. @@ -49,10 +49,10 @@ pub fn execute_block(input: &[u8]) -> Vec { /// Execute a given, serialised, transaction. Returns the empty vector. pub fn execute_transaction(input: &[u8]) -> Vec { - let number = BlockNumber::from_slice(&input[0..8]).unwrap(); - let utx = UncheckedTransaction::from_slice(&input[8..]).unwrap(); - runtime::system::internal::execute_transaction(&utx, Header::from_block_number(number)); - Vec::new() + let header = Header::from_slice(input).unwrap(); + let utx = UncheckedTransaction::from_slice(&input[Header::size_of(input).unwrap()..]).unwrap(); + let header = runtime::system::internal::execute_transaction(&utx, header); + Vec::new().join(&header) } /// Execute a given, serialised, transaction. Returns the empty vector. diff --git a/wasm-runtime/polkadot/src/primitives/digest.rs b/wasm-runtime/polkadot/src/primitives/digest.rs index 18107460b0771..5ce92774200a3 100644 --- a/wasm-runtime/polkadot/src/primitives/digest.rs +++ b/wasm-runtime/polkadot/src/primitives/digest.rs @@ -18,8 +18,8 @@ use runtime_std::prelude::*; -#[derive(Clone, Default)] -#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))] +#[derive(Clone, Default, PartialEq)] +#[cfg_attr(feature = "with-std", derive(Debug))] /// The digest of a block, useful for light-clients. pub struct Digest { /// All logs that have happened in the block. diff --git a/wasm-runtime/polkadot/src/runtime/system.rs b/wasm-runtime/polkadot/src/runtime/system.rs index e6d93e9492329..5daf530cb4707 100644 --- a/wasm-runtime/polkadot/src/runtime/system.rs +++ b/wasm-runtime/polkadot/src/runtime/system.rs @@ -51,11 +51,8 @@ pub mod internal { use super::*; /// Deposits a log and ensures it matches the blocks log data. - pub fn deposit_log(log: &[u8]) { - with_env(|e| { - assert_eq!(log, &e.digest.logs[e.next_log_index][..]); - e.next_log_index += 1; - }); + pub fn deposit_log(log: Vec) { + with_env(|e| e.digest.logs.push(log)); } /// Actually execute all transitioning for `block`. @@ -63,8 +60,6 @@ pub mod internal { // populate environment from header. with_env(|e| { e.block_number = block.header.number; - mem::swap(&mut e.digest, &mut block.header.digest); - e.next_log_index = 0; }); let ref header = block.header; @@ -104,15 +99,19 @@ pub mod internal { /// Execute a transaction outside of the block execution function. /// This doesn't attempt to validate anything regarding the block. - pub fn execute_transaction(utx: &UncheckedTransaction, mut header: Header) { + pub fn execute_transaction(utx: &UncheckedTransaction, mut header: Header) -> Header { // populate environment from header. with_env(|e| { e.block_number = header.number; - mem::swap(&mut e.digest, &mut header.digest); - e.next_log_index = 0; + mem::swap(&mut header.digest, &mut e.digest); }); super::execute_transaction(utx); + + with_env(|e| { + mem::swap(&mut header.digest, &mut e.digest); + }); + header } /// Finalise the block - it is up the caller to ensure that all header fields are valid @@ -122,6 +121,9 @@ pub mod internal { session::internal::check_rotate_session(); header.state_root = storage_root(); + with_env(|e| { + mem::swap(&mut header.digest, &mut e.digest); + }); post_finalise(&header); @@ -160,7 +162,7 @@ fn execute_transaction(utx: &UncheckedTransaction) { fn final_checks(_block: &Block) { with_env(|e| { - assert_eq!(e.next_log_index, e.digest.logs.len()); + assert!(_block.header.digest == e.digest); }); } diff --git a/wasm-runtime/polkadot/src/support/environment.rs b/wasm-runtime/polkadot/src/support/environment.rs index 7670a4801f29a..3f652530a2b3e 100644 --- a/wasm-runtime/polkadot/src/support/environment.rs +++ b/wasm-runtime/polkadot/src/support/environment.rs @@ -30,8 +30,6 @@ pub struct Environment { pub block_number: BlockNumber, /// The current block digest. pub digest: Digest, - /// The number of log items in this block that have been accounted for so far. - pub next_log_index: usize, } /// Do something with the environment and return its value. Keep the function short. diff --git a/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index e422068474f03a8d8b572bc08de121267e5ad904..c1b383b49ecabb9b591677c90db2cd2d68d63a4f 100644 GIT binary patch delta 18006 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 delta 16545 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 Date: Sun, 4 Feb 2018 22:51:50 +0100 Subject: [PATCH 11/13] Doc comment. --- wasm-runtime/polkadot/src/primitives/header.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/wasm-runtime/polkadot/src/primitives/header.rs b/wasm-runtime/polkadot/src/primitives/header.rs index c37634cff58ce..2f624cadd6fab 100644 --- a/wasm-runtime/polkadot/src/primitives/header.rs +++ b/wasm-runtime/polkadot/src/primitives/header.rs @@ -38,6 +38,7 @@ pub struct Header { } impl Header { + /// Create a new instance with default fields except `number`, which is given as an argument. pub fn from_block_number(number: BlockNumber) -> Self { Header { parent_hash: Default::default(), From a731b5603ebda6bc48e2b4709c37d7a02d33854c Mon Sep 17 00:00:00 2001 From: Gav Date: Sun, 4 Feb 2018 23:03:13 +0100 Subject: [PATCH 12/13] Replace errant printlns with logging. --- Cargo.lock | 1 + executor/Cargo.toml | 1 + executor/src/lib.rs | 1 + executor/src/wasm_executor.rs | 16 ++++++++-------- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bf903c9e45aaa..8291eb6d15c1e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -991,6 +991,7 @@ dependencies = [ "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", "native-runtime 0.1.0", "parity-wasm 0.15.4 (registry+https://github.com/rust-lang/crates.io-index)", "polkadot-primitives 0.1.0", diff --git a/executor/Cargo.toml b/executor/Cargo.toml index 18e7aa61bc2eb..0e535f1eba9f0 100644 --- a/executor/Cargo.toml +++ b/executor/Cargo.toml @@ -17,6 +17,7 @@ native-runtime = { path = "../native-runtime", version = "0.1" } runtime-std = { path = "../native-runtime/std", version = "0.1" } triehash = "0.1.0" hex-literal = "0.1.0" +log = "0.3" [dev-dependencies] assert_matches = "1.1" diff --git a/executor/src/lib.rs b/executor/src/lib.rs index f82518f03b38f..d93f46052a197 100644 --- a/executor/src/lib.rs +++ b/executor/src/lib.rs @@ -37,6 +37,7 @@ extern crate rustc_hex; extern crate native_runtime; extern crate runtime_std; extern crate triehash; +#[macro_use] extern crate log; #[cfg(test)] #[macro_use] diff --git a/executor/src/wasm_executor.rs b/executor/src/wasm_executor.rs index 5ab95c3648553..c4ed861ffbd73 100644 --- a/executor/src/wasm_executor.rs +++ b/executor/src/wasm_executor.rs @@ -94,17 +94,17 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, ext_print_utf8(utf8_data: *const u8, utf8_len: u32) => { if let Ok(utf8) = this.memory.get(utf8_data, utf8_len as usize) { if let Ok(message) = String::from_utf8(utf8) { - println!("Runtime: {}", message); + info!(target: "runtime", "{}", message); } } }, ext_print_hex(data: *const u8, len: u32) => { if let Ok(hex) = this.memory.get(data, len as usize) { - println!("Runtime: {}", HexDisplay::from(&hex)); + info!(target: "runtime", "{}", HexDisplay::from(&hex)); } }, ext_print_num(number: u64) => { - println!("Runtime: {}", number); + info!(target: "runtime", "{}", number); }, ext_memcmp(s1: *const u8, s2: *const u8, n: usize) -> i32 => { let sl1 = this.memory.get(s1, n as usize).map_err(|_| DummyUserError)?; @@ -145,7 +145,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, ext_set_storage(key_data: *const u8, key_len: u32, value_data: *const u8, value_len: u32) => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; let value = this.memory.get(value_data, value_len as usize).map_err(|_| DummyUserError)?; - println!("Runtime: Setting storage: {} -> {}", HexDisplay::from(&key), HexDisplay::from(&value)); + info!(target: "runtime", "Setting storage: {} -> {}", HexDisplay::from(&key), HexDisplay::from(&value)); this.ext.set_storage(key, value); }, ext_get_allocated_storage(key_data: *const u8, key_len: u32, written_out: *mut u32) -> *mut u8 => { @@ -161,7 +161,7 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, ext_get_storage_into(key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32, value_offset: u32) -> u32 => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; let value = this.ext.storage(&key).map_err(|_| DummyUserError)?; - println!("Runtime: Getting storage: {} ( -> {})", HexDisplay::from(&key), HexDisplay::from(&value)); + info!(target: "runtime", "Getting storage: {} ( -> {})", HexDisplay::from(&key), HexDisplay::from(&value)); let value = &value[value_offset as usize..]; let written = ::std::cmp::min(value_len as usize, value.len()); this.memory.set(value_data, &value[..written]).map_err(|_| DummyUserError)?; @@ -190,15 +190,15 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, }, ext_twox_128(data: *const u8, len: u32, out: *mut u8) => { let result = if len == 0 { - println!("Runtime: XXhash: ''"); + info!(target: "runtime", "XXhash: ''"); twox_128(&[0u8; 0]) } else { let key = this.memory.get(data, len as usize).map_err(|_| DummyUserError)?; let hashed_key = twox_128(&key); if let Ok(skey) = ::std::str::from_utf8(&key) { - println!("Runtime: XXhash: {} -> {}", skey, HexDisplay::from(&hashed_key)); + info!(target: "runtime", "XXhash: {} -> {}", skey, HexDisplay::from(&hashed_key)); } else { - println!("Runtime: XXhash: {} -> {}", HexDisplay::from(&key), HexDisplay::from(&hashed_key)); + info!(target: "runtime", "XXhash: {} -> {}", HexDisplay::from(&key), HexDisplay::from(&hashed_key)); } hashed_key }; From d9456f73a987b6120097fad8b1a58a0b7ba00f47 Mon Sep 17 00:00:00 2001 From: Gav Date: Sun, 4 Feb 2018 23:05:54 +0100 Subject: [PATCH 13/13] Replace more printlns. --- executor/src/wasm_executor.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/executor/src/wasm_executor.rs b/executor/src/wasm_executor.rs index c4ed861ffbd73..6ad896dfbea6c 100644 --- a/executor/src/wasm_executor.rs +++ b/executor/src/wasm_executor.rs @@ -118,29 +118,29 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, ext_memcpy(dest: *mut u8, src: *const u8, count: usize) -> *mut u8 => { this.memory.copy_nonoverlapping(src as usize, dest as usize, count as usize) .map_err(|_| DummyUserError)?; -// println!("memcpy {} from {}, {} bytes", dest, src, count); + trace!(target: "runtime-std", "memcpy {} from {}, {} bytes", dest, src, count); dest }, ext_memmove(dest: *mut u8, src: *const u8, count: usize) -> *mut u8 => { this.memory.copy(src as usize, dest as usize, count as usize) .map_err(|_| DummyUserError)?; -// println!("memmove {} from {}, {} bytes", dest, src, count); + trace!(target: "runtime-std", "memmove {} from {}, {} bytes", dest, src, count); dest }, ext_memset(dest: *mut u8, val: u32, count: usize) -> *mut u8 => { this.memory.clear(dest as usize, val as u8, count as usize) .map_err(|_| DummyUserError)?; -// println!("memset {} with {}, {} bytes", dest, val, count); + trace!(target: "runtime-std", "memset {} with {}, {} bytes", dest, val, count); dest }, ext_malloc(size: usize) -> *mut u8 => { let r = this.heap.allocate(size); -// println!("malloc {} bytes at {}", size, r); + trace!(target: "runtime-std", "malloc {} bytes at {}", size, r); r }, ext_free(addr: *mut u8) => { this.heap.deallocate(addr); -// println!("free {}", addr) + trace!(target: "runtime-std", "free {}", addr) }, ext_set_storage(key_data: *const u8, key_len: u32, value_data: *const u8, value_len: u32) => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?;