From 59d14d0a21cc110df5898d7d1f00f5693e76d28c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 10 Oct 2023 18:31:55 +0200 Subject: [PATCH 01/43] Creating rust binding --- rust/trexio/Cargo.toml | 12 +++ rust/trexio/build.py | 39 ++++++++++ rust/trexio/src/back_end.rs | 31 ++++++++ rust/trexio/src/c.rs | 6 ++ rust/trexio/src/exit_code.rs | 139 +++++++++++++++++++++++++++++++++++ rust/trexio/src/lib.rs | 109 +++++++++++++++++++++++++++ rust/trexio/src/main.rs | 13 ++++ rust/trexio/src/test.rs | 116 +++++++++++++++++++++++++++++ 8 files changed, 465 insertions(+) create mode 100644 rust/trexio/Cargo.toml create mode 100755 rust/trexio/build.py create mode 100644 rust/trexio/src/back_end.rs create mode 100644 rust/trexio/src/c.rs create mode 100644 rust/trexio/src/exit_code.rs create mode 100644 rust/trexio/src/lib.rs create mode 100644 rust/trexio/src/main.rs create mode 100644 rust/trexio/src/test.rs diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml new file mode 100644 index 00000000..a2020e8e --- /dev/null +++ b/rust/trexio/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "trexio" +version = "2.4.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] + +[build-dependencies] +bindgen = "0.65.1" + diff --git a/rust/trexio/build.py b/rust/trexio/build.py new file mode 100755 index 00000000..8e6aa893 --- /dev/null +++ b/rust/trexio/build.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +def main(): + err = {} + be = {} + with open("../../include/trexio.h", 'r') as f: + for line in f: + buf = line.lstrip() + + # Get exit codes + if buf.startswith("#define TREXIO_") and "(trexio_exit_code)" in buf : + buf2 = buf.replace(")","").replace("(","").split() + err[buf2[1]] = int(buf2[3].strip()) + + # Get backends + if buf.startswith("#define TREXIO_") and "(back_end_t)" in buf : + buf2 = buf.replace(")","").replace("(","").split() + be[buf2[1]] = int(buf2[3].strip()) + + with open("wrapper.h",'w') as f: + f.write("#include \n") + + # Write exit codes + for k, v in err.items(): + f.write(f"#undef {k}\n") + f.write(f"const trexio_exit_code {k} = {v};\n") + + # Write backends + for k, v in be.items(): + f.write(f"#undef {k}\n") + f.write(f"const back_end_t {k} = {v};\n") + + f.write(f"#undef TREXIO_AUTO;\n") + f.write(f"const back_end_t TREXIO_AUTO = TREXIO_INVALID_BACK_END;\n") + + + +if __name__ == '__main__': + main() diff --git a/rust/trexio/src/back_end.rs b/rust/trexio/src/back_end.rs new file mode 100644 index 00000000..15c981c7 --- /dev/null +++ b/rust/trexio/src/back_end.rs @@ -0,0 +1,31 @@ +use crate::c; + +/// Possible back ends +#[derive(Debug)] +pub enum BackEnd { + Text, + Hdf5, + Auto, +} + +impl BackEnd { + + /// Creation from a C value + pub fn from(b : c::back_end_t) -> Self { + match b { + c::TREXIO_TEXT => Self::Text, + c::TREXIO_HDF5 => Self::Hdf5, + c::TREXIO_AUTO => Self::Auto, + _ => panic!("Invalid backend"), + } + } + + /// Conversion to a C value + pub fn to_c(self) -> c::back_end_t { + match self { + Self::Text => c::TREXIO_TEXT, + Self::Hdf5 => c::TREXIO_HDF5, + Self::Auto => c::TREXIO_AUTO, + } + } +} diff --git a/rust/trexio/src/c.rs b/rust/trexio/src/c.rs new file mode 100644 index 00000000..cd503e4b --- /dev/null +++ b/rust/trexio/src/c.rs @@ -0,0 +1,6 @@ +#![allow(non_upper_case_globals)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(dead_code)] + +include!(concat!(env!("OUT_DIR"), "/bindings.rs")); diff --git a/rust/trexio/src/exit_code.rs b/rust/trexio/src/exit_code.rs new file mode 100644 index 00000000..d842d343 --- /dev/null +++ b/rust/trexio/src/exit_code.rs @@ -0,0 +1,139 @@ +use crate::c; + +/// Exit codes +#[derive(Debug)] +pub enum ExitCode { + Failure, + Success, + InvalidArg1, + InvalidArg2, + InvalidArg3, + InvalidArg4, + InvalidArg5, + End, + ReadOnly, + Errno, + InvalidId, + AllocationFailed, + HasNot, + InvalidNum, + AttrAlreadyExists, + DsetAlreadyExists, + OpenError, + LockError, + UnlockError, + FileError, + GroupReadError, + GroupWriteError, + ElemReadError, + ElemWriteError, + UnsafeArrayDim, + AttrMissing, + DsetMissing, + BackEndMissing, + InvalidArg6, + InvalidArg7, + InvalidArg8, + InvalidStrLen, + IntSizeOverflow, + SafeMode, + InvalidElectronNum, + InvalidDeterminantNum, + InvalidState, + VersionParsingIssue, + PhaseChange, +} + +impl ExitCode { + + /// Creation from a C value + pub fn from(rc : c::trexio_exit_code) -> Self { + match rc { + c::TREXIO_FAILURE => Self::Failure, + c::TREXIO_SUCCESS => Self::Success, + c::TREXIO_INVALID_ARG_1 => Self::InvalidArg1, + c::TREXIO_INVALID_ARG_2 => Self::InvalidArg2, + c::TREXIO_INVALID_ARG_3 => Self::InvalidArg3, + c::TREXIO_INVALID_ARG_4 => Self::InvalidArg4, + c::TREXIO_INVALID_ARG_5 => Self::InvalidArg5, + c::TREXIO_END => Self::End, + c::TREXIO_READONLY => Self::ReadOnly, + c::TREXIO_ERRNO => Self::Errno, + c::TREXIO_INVALID_ID => Self::InvalidId, + c::TREXIO_ALLOCATION_FAILED => Self::AllocationFailed, + c::TREXIO_HAS_NOT => Self::HasNot, + c::TREXIO_INVALID_NUM => Self::InvalidNum, + c::TREXIO_ATTR_ALREADY_EXISTS => Self::AttrAlreadyExists, + c::TREXIO_DSET_ALREADY_EXISTS => Self::DsetAlreadyExists, + c::TREXIO_OPEN_ERROR => Self::OpenError, + c::TREXIO_LOCK_ERROR => Self::LockError, + c::TREXIO_UNLOCK_ERROR => Self::UnlockError, + c::TREXIO_FILE_ERROR => Self::FileError, + c::TREXIO_GROUP_READ_ERROR => Self::GroupReadError, + c::TREXIO_GROUP_WRITE_ERROR => Self::GroupWriteError, + c::TREXIO_ELEM_READ_ERROR => Self::ElemReadError, + c::TREXIO_ELEM_WRITE_ERROR => Self::ElemWriteError, + c::TREXIO_UNSAFE_ARRAY_DIM => Self::UnsafeArrayDim, + c::TREXIO_ATTR_MISSING => Self::AttrMissing, + c::TREXIO_DSET_MISSING => Self::DsetMissing, + c::TREXIO_BACK_END_MISSING => Self::BackEndMissing, + c::TREXIO_INVALID_ARG_6 => Self::InvalidArg6, + c::TREXIO_INVALID_ARG_7 => Self::InvalidArg7, + c::TREXIO_INVALID_ARG_8 => Self::InvalidArg8, + c::TREXIO_INVALID_STR_LEN => Self::InvalidStrLen, + c::TREXIO_INT_SIZE_OVERFLOW => Self::IntSizeOverflow, + c::TREXIO_SAFE_MODE => Self::SafeMode, + c::TREXIO_INVALID_ELECTRON_NUM => Self::InvalidElectronNum, + c::TREXIO_INVALID_DETERMINANT_NUM => Self::InvalidDeterminantNum, + c::TREXIO_INVALID_STATE => Self::InvalidState, + c::TREXIO_VERSION_PARSING_ISSUE => Self::VersionParsingIssue, + c::TREXIO_PHASE_CHANGE => Self::PhaseChange, + _ => panic!("Unknown exit code"), + } + } + + /// Conversion to a C value + pub fn to_c(self) -> c::trexio_exit_code { + match self { + Self::Failure => c::TREXIO_FAILURE, + Self::Success => c::TREXIO_SUCCESS, + Self::InvalidArg1 => c::TREXIO_INVALID_ARG_1, + Self::InvalidArg2 => c::TREXIO_INVALID_ARG_2, + Self::InvalidArg3 => c::TREXIO_INVALID_ARG_3, + Self::InvalidArg4 => c::TREXIO_INVALID_ARG_4, + Self::InvalidArg5 => c::TREXIO_INVALID_ARG_5, + Self::End => c::TREXIO_END, + Self::ReadOnly => c::TREXIO_READONLY, + Self::Errno => c::TREXIO_ERRNO, + Self::InvalidId => c::TREXIO_INVALID_ID, + Self::AllocationFailed => c::TREXIO_ALLOCATION_FAILED, + Self::HasNot => c::TREXIO_HAS_NOT, + Self::InvalidNum => c::TREXIO_INVALID_NUM, + Self::AttrAlreadyExists => c::TREXIO_ATTR_ALREADY_EXISTS, + Self::DsetAlreadyExists => c::TREXIO_DSET_ALREADY_EXISTS, + Self::OpenError => c::TREXIO_OPEN_ERROR, + Self::LockError => c::TREXIO_LOCK_ERROR, + Self::UnlockError => c::TREXIO_UNLOCK_ERROR, + Self::FileError => c::TREXIO_FILE_ERROR, + Self::GroupReadError => c::TREXIO_GROUP_READ_ERROR, + Self::GroupWriteError => c::TREXIO_GROUP_WRITE_ERROR, + Self::ElemReadError => c::TREXIO_ELEM_READ_ERROR, + Self::ElemWriteError => c::TREXIO_ELEM_WRITE_ERROR, + Self::UnsafeArrayDim => c::TREXIO_UNSAFE_ARRAY_DIM, + Self::AttrMissing => c::TREXIO_ATTR_MISSING, + Self::DsetMissing => c::TREXIO_DSET_MISSING, + Self::BackEndMissing => c::TREXIO_BACK_END_MISSING, + Self::InvalidArg6 => c::TREXIO_INVALID_ARG_6, + Self::InvalidArg7 => c::TREXIO_INVALID_ARG_7, + Self::InvalidArg8 => c::TREXIO_INVALID_ARG_8, + Self::InvalidStrLen => c::TREXIO_INVALID_STR_LEN, + Self::IntSizeOverflow => c::TREXIO_INT_SIZE_OVERFLOW, + Self::SafeMode => c::TREXIO_SAFE_MODE, + Self::InvalidElectronNum => c::TREXIO_INVALID_ELECTRON_NUM, + Self::InvalidDeterminantNum => c::TREXIO_INVALID_DETERMINANT_NUM, + Self::InvalidState => c::TREXIO_INVALID_STATE, + Self::VersionParsingIssue => c::TREXIO_VERSION_PARSING_ISSUE, + Self::PhaseChange => c::TREXIO_PHASE_CHANGE, + } + } +} diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs new file mode 100644 index 00000000..e89916be --- /dev/null +++ b/rust/trexio/src/lib.rs @@ -0,0 +1,109 @@ +use ::std::os::raw::c_char; + +/// C module generated by bindgen +pub mod c; + +/// Exit codes +pub mod exit_code; +pub use exit_code::ExitCode; + +/// Possible backends +pub mod back_end; +pub use back_end::BackEnd; + +/// Type for a TREXIO file +pub type File = *mut c::trexio_t; + +pub const PACKAGE_VERSION : &str = unsafe { std::str::from_utf8_unchecked(c::TREXIO_PACKAGE_VERSION) }; + +fn rc_return(rc : c::trexio_exit_code, result: T) -> Result { + let rc = ExitCode::from(rc); + match rc { + ExitCode::Success => Ok(result), + x => Err(x) + } +} + +fn file_name_to_c(file_name: &str) -> std::ffi::CString { + std::ffi::CString::new(file_name).unwrap() +} + + + + + +pub fn open(file_name: &str, mode: char, back_end: BackEnd) -> Result { + let file_name_c = file_name_to_c(file_name); + let file_name_c = file_name_c.as_ptr() as *const c_char; + let mode = mode as c_char; + let back_end = back_end.to_c(); + let rc: *mut c::trexio_exit_code = &mut c::TREXIO_SUCCESS.clone(); + let result = unsafe { c::trexio_open(file_name_c, mode, back_end, rc) }; + let rc = unsafe { *rc }; + rc_return(rc, result) +} + +pub fn close(file: File) -> Result<(), ExitCode> { + let rc = unsafe { c::trexio_close(file) }; + rc_return(rc, ()) +} + +pub fn inquire(file_name: &str) -> Result { + let file_name_c = file_name_to_c(file_name); + let file_name_c = file_name_c.as_ptr() as *const c_char; + let rc = unsafe { c::trexio_inquire(file_name_c) }; + match ExitCode::from(rc) { + ExitCode::Failure => Ok(false), + ExitCode::Success => Ok(true), + x => Err(x), + } +} + + +pub fn has_nucleus_num(trex_file: File) -> Result { + let rc = unsafe { c::trexio_has_nucleus_num(trex_file) }; + match rc { + c::TREXIO_SUCCESS => Ok(true), + c::TREXIO_HAS_NOT => Ok(false), + x => Err(ExitCode::from(x)), + } +} + +pub fn has_nucleus_charge(trex_file: File) -> Result { + let rc = unsafe { c::trexio_has_nucleus_charge(trex_file) }; + match rc { + c::TREXIO_SUCCESS => Ok(true), + c::TREXIO_HAS_NOT => Ok(false), + x => Err(ExitCode::from(x)), + } +} + + +pub fn write_nucleus_num(trex_file: File, data: usize) -> Result<(), ExitCode> { + let data: i64 = data.try_into().unwrap(); + let rc = unsafe { c::trexio_write_nucleus_num_64(trex_file, data) }; + rc_return(rc, ()) +} + +pub fn write_nucleus_charge(trex_file: File, data: Vec) -> Result<(), ExitCode> { + let size: i64 = data.len().try_into().unwrap(); + let rc = unsafe { c::trexio_write_safe_nucleus_charge_64(trex_file, data.as_ptr() as *const f64, size) }; + rc_return(rc, ()) +} + + + +#[cfg(test)] +mod tests { + use super::*; + use std::mem; + use c::*; + + #[test] + fn read_trexio_file() { + println!("============================================"); + println!(" TREXIO MAJOR VERSION : {}", TREXIO_VERSION_MAJOR); + println!("============================================"); + + } +} diff --git a/rust/trexio/src/main.rs b/rust/trexio/src/main.rs new file mode 100644 index 00000000..98fb1b29 --- /dev/null +++ b/rust/trexio/src/main.rs @@ -0,0 +1,13 @@ +mod test; + +fn main() { + println!("============================================"); + println!(" TREXIO VERSION : {}", trexio::PACKAGE_VERSION ); + println!("============================================"); + + let file_name = "test_write_rust.dir"; + + let back_end = trexio::BackEnd::Text; + test::test_write(file_name, back_end); + +} diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs new file mode 100644 index 00000000..66d08fca --- /dev/null +++ b/rust/trexio/src/test.rs @@ -0,0 +1,116 @@ +use trexio::back_end::BackEnd; + +pub fn test_write(file_name: &str, back_end: BackEnd) { + + // Prepare data to be written + let n_buffers = 5; + let buf_size_sparse = 100/n_buffers; + let buf_size_det = 50/n_buffers; + let mut value_sparse_ao_2e_int_eri = vec![0.0f64 ; 100]; + let mut index_sparse_ao_2e_int_eri = vec![0i32 ; 400]; + for i in 0..100 { + let i : usize = i; + let j : i32 = i.try_into().unwrap(); + let fj : f64 = j.try_into().unwrap(); + value_sparse_ao_2e_int_eri[i] = 3.14 + fj; + index_sparse_ao_2e_int_eri[4*i + 0] = 4*j - 3; + index_sparse_ao_2e_int_eri[4*i + 1] = 4*j+1 - 3; + index_sparse_ao_2e_int_eri[4*i + 2] = 4*j+2 - 3; + index_sparse_ao_2e_int_eri[4*i + 3] = 4*j+3 - 3; + } + + let nucleus_num = 12; + let state_id = 2; + let charge = vec![6., 6., 6., 6., 6., 6., 1., 1., 1., 1., 1., 1.0f64]; + let coord = vec![ 0.00000000, 1.39250319 , 0.00 , + -1.20594314, 0.69625160 , 0.00 , + -1.20594314, -0.69625160 , 0.00 , + 0.00000000, -1.39250319 , 0.00 , + 1.20594314, -0.69625160 , 0.00 , + 1.20594314, 0.69625160 , 0.00 , + -2.14171677, 1.23652075 , 0.00 , + -2.14171677, -1.23652075 , 0.00 , + 0.00000000, -2.47304151 , 0.00 , + 2.14171677, -1.23652075 , 0.00 , + 2.14171677, 1.23652075 , 0.00 , + 0.00000000, 2.47304151 , 0.00 ]; + let mo_num = 150; + let ao_num = 1000; + let basis_shell_num = 24; + let basis_nucleus_index = vec!([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 ]); + + let label = vec![ + "C ", + "Na ", + "C ", + "C 66 ", + "C ", + "C ", + "H 99 ", + "Ru ", + "H ", + "H ", + "H ", + "H " ]; + let mut label = label.concat(); + let sym_str = b"B3U with some comments"; + + + println!("{}", file_name); + assert!( ! trexio::inquire(file_name).unwrap() ); + + let trex_file = trexio::open(file_name, 'w', back_end).unwrap(); + + assert( ! trexio::has_nucleus_num(trex_file).unwrap() ); + assert( ! trexio::has_nucleus_charge(trex_file).unwrap() ); + +/* + let rc = unsafe { trexio_has_ao_2e_int_eri(trex_file) }; + assert!(rc == TREXIO_HAS_NOT); + + let rc = unsafe { trexio_has_determinant_list(trex_file) }; + assert!(rc == TREXIO_HAS_NOT); + + let rc = unsafe { trexio_has_nucleus(trex_file) }; + assert!(rc == TREXIO_HAS_NOT); + + let rc = unsafe { trexio_has_ao_2e_int(trex_file) }; + assert!(rc == TREXIO_HAS_NOT); + */ + + trexio::write_nucleus_num(trex_file, nucleus_num).unwrap(); + trexio::write_nucleus_charge(trex_file, charge).unwrap(); + +/* + let rc = unsafe { trexio_write_nucleus_coord(trex_file, coord.as_ptr() as *const f64) }; + assert!(rc == TREXIO_SUCCESS); + + let rc = unsafe { trexio_write_nucleus_label(trex_file, label.as_ptr(), label[0].len().try_into().unwrap()) }; + assert!(rc == TREXIO_SUCCESS); + + let rc = unsafe { trexio_write_nucleus_point_group(trex_file, sym_str.as_ptr() as *const i8, sym_str.len().try_into().unwrap()) }; + assert!(rc == TREXIO_SUCCESS); + + let rc = unsafe { trexio_write_basis_shell_num(trex_file, basis_shell_num) }; + assert!(rc == TREXIO_SUCCESS); + + let rc = unsafe { trexio_write_basis_nucleus_index(trex_file, basis_nucleus_index.as_ptr() as *const i32) }; + assert!(rc == TREXIO_SUCCESS); + + let rc = unsafe { trexio_write_state_id(trex_file, state_id) }; + assert!(rc == TREXIO_SUCCESS); + + if (unsafe { trexio_has_ao_num(trex_file) } == TREXIO_HAS_NOT) { + let rc = unsafe { trexio_write_ao_num(trex_file, ao_num) }; + assert!(rc == TREXIO_SUCCESS); + } + + if (unsafe { trexio_has_mo_num(trex_file) } == TREXIO_HAS_NOT) { + let rc = unsafe { trexio_write_mo_num(trex_file, mo_num) }; + assert!(rc == TREXIO_SUCCESS); + } + */ + + trexio::close(trex_file).expect("Unable to close File"); + +} From 142757572ff7713c2d1f4132da5eee743f4d1a67 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 11 Oct 2023 10:56:30 +0200 Subject: [PATCH 02/43] Check consistency of versions in OCaml --- ocaml/trexio/read_json.py | 16 ++++++++++++++++ ocaml/trexio/trexio.opam | 2 +- rust/trexio/build.py | 35 ++++++++++++++++++++++++++++++----- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/ocaml/trexio/read_json.py b/ocaml/trexio/read_json.py index d41bc00a..c65e5533 100755 --- a/ocaml/trexio/read_json.py +++ b/ocaml/trexio/read_json.py @@ -7,6 +7,21 @@ ml_file = "trexio.ml" mli_file = ml_file+"i" +def check_version(): + with open('trexio.opam','r') as f: + for line in f: + if line.startswith("version"): + ocaml_version = line.split(':')[1].strip()[1:-1] + break + with open('../../configure.ac','r') as f: + for line in f: + if line.startswith("AC_INIT"): + trexio_version = line.split(',')[1].strip()[1:-1] + break + if ocaml_version != trexio_version: + print(f"Inconsistent versions:\nTREXIO:{trexio_version}\nOCaml: {ocaml_version}\n") + raise + def write_stubs(data): with open("src/"+stubs_file,'r') as f: @@ -643,6 +658,7 @@ def write_ml(data): def main(): + check_version() with open(json_file,'r') as f: data = json.load(f) for group in data: diff --git a/ocaml/trexio/trexio.opam b/ocaml/trexio/trexio.opam index d3a6a46e..f38dc697 100644 --- a/ocaml/trexio/trexio.opam +++ b/ocaml/trexio/trexio.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "2.3.2" +version: "2.4.0" synopsis: "Binding for the TREXIO Input/Output library" description: "TREXIO is a file format and library for storing wave functions and integrals for quantum chemistry." diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 8e6aa893..2b17df26 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -1,9 +1,29 @@ #!/usr/bin/env python3 -def main(): +json_file = "../../trex.json" +trexio_h = "../../include/trexio.h" + +def check_version(): + with open('Cargo.toml','r') as f: + for line in f: + if line.startswith("version"): + rust_version = line.split('=')[1].strip()[1:-1] + break + with open('../../configure.ac','r') as f: + for line in f: + if line.startswith("AC_INIT"): + trexio_version = line.split(',')[1].strip()[1:-1] + break + if rust_version != trexio_version: + print(f"Inconsistent versions:\nTREXIO:{trexio_version}\nRust: {rust_version}\n") + raise + + + +def make_interface(): err = {} be = {} - with open("../../include/trexio.h", 'r') as f: + with open(trexio_h, 'r') as f: for line in f: buf = line.lstrip() @@ -11,7 +31,7 @@ def main(): if buf.startswith("#define TREXIO_") and "(trexio_exit_code)" in buf : buf2 = buf.replace(")","").replace("(","").split() err[buf2[1]] = int(buf2[3].strip()) - + # Get backends if buf.startswith("#define TREXIO_") and "(back_end_t)" in buf : buf2 = buf.replace(")","").replace("(","").split() @@ -33,7 +53,12 @@ def main(): f.write(f"#undef TREXIO_AUTO;\n") f.write(f"const back_end_t TREXIO_AUTO = TREXIO_INVALID_BACK_END;\n") - + + +def make_functions(): + pass if __name__ == '__main__': - main() + check_version() + make_interface() + make_functions() From 94fb57b9ea2a6bbbf3164fa739c006e79f435a81 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 11 Oct 2023 11:18:13 +0200 Subject: [PATCH 03/43] Automate has functions --- rust/trexio/.gitignore | 5 +++++ rust/trexio/build.py | 47 +++++++++++++++++++++++++++++++++++++++-- rust/trexio/build.rs | 37 ++++++++++++++++++++++++++++++++ rust/trexio/src/lib.rs | 18 +--------------- rust/trexio/src/test.rs | 22 ++++++------------- 5 files changed, 94 insertions(+), 35 deletions(-) create mode 100644 rust/trexio/.gitignore create mode 100644 rust/trexio/build.rs diff --git a/rust/trexio/.gitignore b/rust/trexio/.gitignore new file mode 100644 index 00000000..1027d3c7 --- /dev/null +++ b/rust/trexio/.gitignore @@ -0,0 +1,5 @@ +Cargo.lock +src/generated.rs +target/ +wrapper.h + diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 2b17df26..fe6a94f3 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -1,7 +1,10 @@ #!/usr/bin/env python3 +import json json_file = "../../trex.json" trexio_h = "../../include/trexio.h" +wrapper_h = "wrapper.h" +generated_rs = "src/generated.rs" def check_version(): with open('Cargo.toml','r') as f: @@ -37,7 +40,7 @@ def make_interface(): buf2 = buf.replace(")","").replace("(","").split() be[buf2[1]] = int(buf2[3].strip()) - with open("wrapper.h",'w') as f: + with open(wrapper_h,'w') as f: f.write("#include \n") # Write exit codes @@ -56,7 +59,47 @@ def make_interface(): def make_functions(): - pass + with open(json_file,'r') as f: + data = json.load(f) + + r = [] + + for group in data: + group_l = group.lower() + r += [ """ +pub fn has_{group_l}(trex_file: File) -> Result { + let rc = unsafe { c::trexio_has_{group}(trex_file) }; + match rc { + c::TREXIO_SUCCESS => Ok(true), + c::TREXIO_HAS_NOT => Ok(false), + x => Err(ExitCode::from(x)), + } +} +""" +.replace("{group}",group) +.replace("{group_l}",group_l) ] + for element in data[group]: + element_l = element.lower() + r += [ """ +pub fn has_{group_l}_{element_l}(trex_file: File) -> Result { + let rc = unsafe { c::trexio_has_{group}_{element}(trex_file) }; + match rc { + c::TREXIO_SUCCESS => Ok(true), + c::TREXIO_HAS_NOT => Ok(false), + x => Err(ExitCode::from(x)), + } +} +""" +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + + with open(generated_rs,'w') as f: + f.write('\n'.join(r)) + + if __name__ == '__main__': check_version() diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs new file mode 100644 index 00000000..adf0e0b4 --- /dev/null +++ b/rust/trexio/build.rs @@ -0,0 +1,37 @@ +use std::env; +use std::path::PathBuf; + +fn main() { + // Tell cargo to look for shared libraries in the specified directory + println!("cargo:rustc-link-search=/usr/local/lib"); + + // Tell cargo to tell rustc to link the system bzip2 + // shared library. + println!("cargo:rustc-link-lib=trexio"); + + // Tell cargo to invalidate the built crate whenever the wrapper changes + println!("cargo:rerun-if-changed=wrapper.h"); + + // The bindgen::Builder is the main entry point + // to bindgen, and lets you build up options for + // the resulting bindings. + let bindings = bindgen::Builder::default() + // The input header we would like to generate + // bindings for. + .header("wrapper.h") + // Tell cargo to invalidate the built crate whenever any of the + // included header files changed. + .parse_callbacks(Box::new(bindgen::CargoCallbacks)) + // Finish the builder and generate the bindings. + .generate() + // Unwrap the Result and panic on failure. + .expect("Unable to generate bindings"); + + // Write the bindings to the $OUT_DIR/bindings.rs file. + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + bindings + .write_to_file(out_path.join("bindings.rs")) + .expect("Couldn't write bindings!"); + +} + diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index e89916be..673dd91c 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -60,23 +60,7 @@ pub fn inquire(file_name: &str) -> Result { } -pub fn has_nucleus_num(trex_file: File) -> Result { - let rc = unsafe { c::trexio_has_nucleus_num(trex_file) }; - match rc { - c::TREXIO_SUCCESS => Ok(true), - c::TREXIO_HAS_NOT => Ok(false), - x => Err(ExitCode::from(x)), - } -} - -pub fn has_nucleus_charge(trex_file: File) -> Result { - let rc = unsafe { c::trexio_has_nucleus_charge(trex_file) }; - match rc { - c::TREXIO_SUCCESS => Ok(true), - c::TREXIO_HAS_NOT => Ok(false), - x => Err(ExitCode::from(x)), - } -} +include!("generated.rs"); pub fn write_nucleus_num(trex_file: File, data: usize) -> Result<(), ExitCode> { diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index 66d08fca..10962e40 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -61,22 +61,12 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { let trex_file = trexio::open(file_name, 'w', back_end).unwrap(); - assert( ! trexio::has_nucleus_num(trex_file).unwrap() ); - assert( ! trexio::has_nucleus_charge(trex_file).unwrap() ); - -/* - let rc = unsafe { trexio_has_ao_2e_int_eri(trex_file) }; - assert!(rc == TREXIO_HAS_NOT); - - let rc = unsafe { trexio_has_determinant_list(trex_file) }; - assert!(rc == TREXIO_HAS_NOT); - - let rc = unsafe { trexio_has_nucleus(trex_file) }; - assert!(rc == TREXIO_HAS_NOT); - - let rc = unsafe { trexio_has_ao_2e_int(trex_file) }; - assert!(rc == TREXIO_HAS_NOT); - */ + assert!( ! trexio::has_nucleus(trex_file).unwrap() ); + assert!( ! trexio::has_nucleus_num(trex_file).unwrap() ); + assert!( ! trexio::has_nucleus_charge(trex_file).unwrap() ); + assert!( ! trexio::has_ao_2e_int(trex_file).unwrap() ); + assert!( ! trexio::has_ao_2e_int_eri(trex_file).unwrap() ); + assert!( ! trexio::has_determinant_list(trex_file).unwrap() ); trexio::write_nucleus_num(trex_file, nucleus_num).unwrap(); trexio::write_nucleus_charge(trex_file, charge).unwrap(); From 0ad057f77b448b80b7beb6181f6d84074f7daa06 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 11 Oct 2023 13:08:15 +0200 Subject: [PATCH 04/43] Fixed string -> str in Jastrow --- rust/trexio/build.py | 66 ++++++++++++++++++++++++++++++++++++++++++ rust/trexio/src/lib.rs | 6 ---- trex.org | 4 +-- 3 files changed, 68 insertions(+), 8 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index fe6a94f3..1db9df83 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -62,6 +62,25 @@ def make_functions(): with open(json_file,'r') as f: data = json.load(f) + convert_r = { "int": "i64", + "int special" : "usize", + "float" : "f64", + "float sparse" : "f64", + "float buffered" : "f64", + "dim" : "usize", + "dim readonly" : "usize", + "index" : "usize", + "string" : "string"} + + convert_c = { "int": "i64", + "int special" : "i64", + "float" : "f64", + "float sparse" : "f64", + "float buffered" : "f64", + "dim" : "i64", + "dim readonly" : "i64", + "index" : "i64", + "string" : "string"} r = [] for group in data: @@ -79,6 +98,8 @@ def make_functions(): .replace("{group}",group) .replace("{group_l}",group_l) ] for element in data[group]: + type_c = convert_c[data[group][element][0]] + type_r = convert_r[data[group][element][0]] element_l = element.lower() r += [ """ pub fn has_{group_l}_{element_l}(trex_file: File) -> Result { @@ -95,6 +116,51 @@ def make_functions(): .replace("{element}",element) .replace("{element_l}",element_l) ] + # Scalar elements + if data[group][element][1] == []: + if data[group][element][0] in [ "int", "float", "dim", "index" ]: + r += [ """ +pub fn read_{group_l}_{element_l}(trex_file: File) -> Result<{type_r}, ExitCode> { + let data = unsafe { + let data_c: {type_c}; + let rc = c::trexio_read_{group}_{element}_64(trex_file, &data); + data_c.try_into().unwrap(); + }; + rc_return(rc, data) +} + +pub fn write_{group_l}_{element_l}(trex_file: File, data: T) -> Result<(), ExitCode> + where {type_c}: From { + let data: {type_c} = data.try_into().unwrap(); + let rc = unsafe { c::trexio_write_{group}_{element}_64(trex_file, data) }; + rc_return(rc, ()) +} +""" +.replace("{type_c}",type_c) +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + elif data[group][element][0] in [ "string" ]: + pass # TODO + + elif data[group][element][0] in [ "dim readonly" ]: + r += [ """ +pub fn write_{group_l}_{element_l}(trex_file: File, data: T) -> Result<(), ExitCode> + where {type_c}: From { + let data: {type_c} = data.try_into().unwrap(); + let rc = unsafe { c::trexio_write_{group}_{element}_64(trex_file, data) }; + rc_return(rc, ()) +} +""" +.replace("{type_c}",type_c) +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + with open(generated_rs,'w') as f: f.write('\n'.join(r)) diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 673dd91c..523a85c6 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -63,12 +63,6 @@ pub fn inquire(file_name: &str) -> Result { include!("generated.rs"); -pub fn write_nucleus_num(trex_file: File, data: usize) -> Result<(), ExitCode> { - let data: i64 = data.try_into().unwrap(); - let rc = unsafe { c::trexio_write_nucleus_num_64(trex_file, data) }; - rc_return(rc, ()) -} - pub fn write_nucleus_charge(trex_file: File, data: Vec) -> Result<(), ExitCode> { let size: i64 = data.len().try_into().unwrap(); let rc = unsafe { c::trexio_write_safe_nucleus_charge_64(trex_file, data.as_ptr() as *const f64, size) }; diff --git a/trex.org b/trex.org index 769a1720..9d296eb9 100644 --- a/trex.org +++ b/trex.org @@ -1327,7 +1327,7 @@ power = [ #+name: jastrow | Variable | Type | Dimensions | Description | |---------------+----------+---------------------+-----------------------------------------------------------------| - | ~type~ | ~string~ | | Type of Jastrow factor: ~CHAMP~ or ~Mu~ | + | ~type~ | ~str~ | | Type of Jastrow factor: ~CHAMP~ or ~Mu~ | | ~en_num~ | ~dim~ | | Number of Electron-nucleus parameters | | ~ee_num~ | ~dim~ | | Number of Electron-electron parameters | | ~een_num~ | ~dim~ | | Number of Electron-electron-nucleus parameters | @@ -1345,7 +1345,7 @@ power = [ :results: #+begin_src python :tangle trex.json "jastrow": { - "type" : [ "string", [] ] + "type" : [ "str" , [] ] , "en_num" : [ "dim" , [] ] , "ee_num" : [ "dim" , [] ] , "een_num" : [ "dim" , [] ] From c5f65eefe766e3a3bbf88546df7c073e2cc09f59 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 11 Oct 2023 22:18:06 +0200 Subject: [PATCH 05/43] Scalars OK --- ocaml/trexio/read_json.py | 1 + rust/trexio/build.py | 55 ++++++++++++++++++++++++++++++--------- rust/trexio/src/lib.rs | 8 +++--- rust/trexio/src/test.rs | 10 ++++--- 4 files changed, 53 insertions(+), 21 deletions(-) diff --git a/ocaml/trexio/read_json.py b/ocaml/trexio/read_json.py index c65e5533..ef4e598e 100755 --- a/ocaml/trexio/read_json.py +++ b/ocaml/trexio/read_json.py @@ -663,6 +663,7 @@ def main(): data = json.load(f) for group in data: for element in data[group]: + print(f"{group}_{element}") if data[group][element][0] == "str": data[group][element][0] = "string" diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 1db9df83..e31144ea 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -70,7 +70,7 @@ def make_functions(): "dim" : "usize", "dim readonly" : "usize", "index" : "usize", - "string" : "string"} + "str" : "str"} convert_c = { "int": "i64", "int special" : "i64", @@ -80,7 +80,7 @@ def make_functions(): "dim" : "i64", "dim readonly" : "i64", "index" : "i64", - "string" : "string"} + "str" : "str"} r = [] for group in data: @@ -121,10 +121,10 @@ def make_functions(): if data[group][element][0] in [ "int", "float", "dim", "index" ]: r += [ """ pub fn read_{group_l}_{element_l}(trex_file: File) -> Result<{type_r}, ExitCode> { - let data = unsafe { - let data_c: {type_c}; - let rc = c::trexio_read_{group}_{element}_64(trex_file, &data); - data_c.try_into().unwrap(); + let (rc, data) = unsafe { + let mut data_c: {type_c} = 0{type_c}; + let rc = c::trexio_read_{group}_{element}_64(trex_file, &mut data_c); + (rc, data_c.try_into().unwrap()) }; rc_return(rc, data) } @@ -137,23 +137,52 @@ def make_functions(): } """ .replace("{type_c}",type_c) +.replace("{type_r}",type_r) +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + elif data[group][element][0] in [ "str" ]: + r += [ """ +pub fn read_{group_l}_{element_l}(trex_file: File, capacity: usize) -> Result { + let (rc, data) = unsafe { + let mut data_c = String::with_capacity(capacity); + let data_c = data_c.as_mut_ptr() as *mut c_char; + let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().unwrap()); + (rc, String::from_raw_parts(data_c as *mut u8, capacity, capacity)) + }; + rc_return(rc, data) +} + +pub fn write_{group_l}_{element_l}(trex_file: File, data: &str) -> Result<(), ExitCode> { + let size : i32 = data.len().try_into().unwrap(); + let data = string_to_c(data); + let data = data.as_ptr() as *const c_char; + let rc = unsafe { c::trexio_write_{group}_{element}(trex_file, data, size) }; + rc_return(rc, ()) +} +""" +.replace("{type_c}",type_c) +.replace("{type_r}",type_r) .replace("{group}",group) .replace("{group_l}",group_l) .replace("{element}",element) .replace("{element_l}",element_l) ] - elif data[group][element][0] in [ "string" ]: - pass # TODO elif data[group][element][0] in [ "dim readonly" ]: r += [ """ -pub fn write_{group_l}_{element_l}(trex_file: File, data: T) -> Result<(), ExitCode> - where {type_c}: From { - let data: {type_c} = data.try_into().unwrap(); - let rc = unsafe { c::trexio_write_{group}_{element}_64(trex_file, data) }; - rc_return(rc, ()) +pub fn read_{group_l}_{element_l}(trex_file: File) -> Result<{type_r}, ExitCode> { + let (rc, data) = unsafe { + let mut data_c: {type_c} = 0{type_c}; + let rc = c::trexio_read_{group}_{element}_64(trex_file, &mut data_c); + (rc, data_c.try_into().unwrap()) + }; + rc_return(rc, data) } """ +.replace("{type_r}",type_r) .replace("{type_c}",type_c) .replace("{group}",group) .replace("{group_l}",group_l) diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 523a85c6..d23b0cca 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -24,8 +24,8 @@ fn rc_return(rc : c::trexio_exit_code, result: T) -> Result { } } -fn file_name_to_c(file_name: &str) -> std::ffi::CString { - std::ffi::CString::new(file_name).unwrap() +fn string_to_c(s: &str) -> std::ffi::CString { + std::ffi::CString::new(s).unwrap() } @@ -33,7 +33,7 @@ fn file_name_to_c(file_name: &str) -> std::ffi::CString { pub fn open(file_name: &str, mode: char, back_end: BackEnd) -> Result { - let file_name_c = file_name_to_c(file_name); + let file_name_c = string_to_c(file_name); let file_name_c = file_name_c.as_ptr() as *const c_char; let mode = mode as c_char; let back_end = back_end.to_c(); @@ -49,7 +49,7 @@ pub fn close(file: File) -> Result<(), ExitCode> { } pub fn inquire(file_name: &str) -> Result { - let file_name_c = file_name_to_c(file_name); + let file_name_c = string_to_c(file_name); let file_name_c = file_name_c.as_ptr() as *const c_char; let rc = unsafe { c::trexio_inquire(file_name_c) }; match ExitCode::from(rc) { diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index 10962e40..fc399012 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -53,7 +53,7 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { "H ", "H " ]; let mut label = label.concat(); - let sym_str = b"B3U with some comments"; + let sym_str = "B3U with some comments"; println!("{}", file_name); @@ -70,11 +70,13 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { trexio::write_nucleus_num(trex_file, nucleus_num).unwrap(); trexio::write_nucleus_charge(trex_file, charge).unwrap(); + trexio::write_nucleus_point_group(trex_file, sym_str).unwrap(); + /* + trexio::write_nucleus_coord(trex_file, coord).unwrap(); + trexio::write_nucleus_label(trex_file, label).unwrap(); + */ /* - let rc = unsafe { trexio_write_nucleus_coord(trex_file, coord.as_ptr() as *const f64) }; - assert!(rc == TREXIO_SUCCESS); - let rc = unsafe { trexio_write_nucleus_label(trex_file, label.as_ptr(), label[0].len().try_into().unwrap()) }; assert!(rc == TREXIO_SUCCESS); From 05f48378d503a3cc62694809a67cc00a6dfd6eb3 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 12 Oct 2023 00:09:10 +0200 Subject: [PATCH 06/43] Write array of strings OK --- rust/trexio/build.py | 111 ++++++++++++++++++++++++++++++++++++++-- rust/trexio/src/lib.rs | 8 --- rust/trexio/src/test.rs | 27 +++++----- 3 files changed, 119 insertions(+), 27 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index e31144ea..93fe9183 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -121,8 +121,8 @@ def make_functions(): if data[group][element][0] in [ "int", "float", "dim", "index" ]: r += [ """ pub fn read_{group_l}_{element_l}(trex_file: File) -> Result<{type_r}, ExitCode> { + let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { - let mut data_c: {type_c} = 0{type_c}; let rc = c::trexio_read_{group}_{element}_64(trex_file, &mut data_c); (rc, data_c.try_into().unwrap()) }; @@ -146,9 +146,9 @@ def make_functions(): elif data[group][element][0] in [ "str" ]: r += [ """ pub fn read_{group_l}_{element_l}(trex_file: File, capacity: usize) -> Result { + let mut data_c = String::with_capacity(capacity); + let data_c = data_c.as_mut_ptr() as *mut c_char; let (rc, data) = unsafe { - let mut data_c = String::with_capacity(capacity); - let data_c = data_c.as_mut_ptr() as *mut c_char; let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().unwrap()); (rc, String::from_raw_parts(data_c as *mut u8, capacity, capacity)) }; @@ -174,8 +174,8 @@ def make_functions(): elif data[group][element][0] in [ "dim readonly" ]: r += [ """ pub fn read_{group_l}_{element_l}(trex_file: File) -> Result<{type_r}, ExitCode> { + let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { - let mut data_c: {type_c} = 0{type_c}; let rc = c::trexio_read_{group}_{element}_64(trex_file, &mut data_c); (rc, data_c.try_into().unwrap()) }; @@ -189,6 +189,109 @@ def make_functions(): .replace("{element}",element) .replace("{element_l}",element_l) ] + # Array elements + else: + + if data[group][element][0] in [ "int", "float", "dim", "index" ]: + t = [ """pub fn read_{group_l}_{element_l}(trex_file: File) -> Result, ExitCode> { + let size = 1;""" ] + t_prime = [] + for dim in data[group][element][1]: + try: # A dimensioning variable + dim_group, dim_element = dim.split('.') + t_prime += [f" let size = size * read_{dim_group}_{dim_element}(trex_file).unwrap();" ] + except: # Only an integer + t_prime += [f" let size = size * {dim};"] + t += t_prime + t += [ """ + let data: Vec<{type_r}> = Vec::with_capacity(size); + let data_c = data.as_ptr() as *mut {type_c}; + let (rc, data) = unsafe { + let rc = c::trexio_read_safe_{group}_{element}_64(trex_file, data_c, size.try_into().unwrap()); + (rc, data) + }; + rc_return(rc, data) +} +""" ] + r += [ '\n'.join(t) +.replace("{type_c}",type_c) +.replace("{type_r}",type_r) +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + r += [ """ +pub fn write_{group_l}_{element_l}(trex_file: File, data: Vec<{type_r}>) -> Result<(), ExitCode> { + let size: i64 = data.len().try_into().unwrap(); + let data = data.as_ptr() as *const {type_c}; + let rc = unsafe { c::trexio_write_safe_{group}_{element}_64(trex_file, data, size) }; + rc_return(rc, ()) +} +""" +.replace("{type_c}",type_c) +.replace("{type_r}",type_r) +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + elif data[group][element][0] in [ "str" ]: + t = [ """pub fn read_{group_l}_{element_l}(trex_file: File, capacity: usize) -> Result, ExitCode> { + let size = 1;""" ] + t_prime = [] + for dim in data[group][element][1]: + try: # A dimensioning variable + dim_group, dim_element = dim.split('.') + t_prime += [f" let size = size * read_{dim_group}_{dim_element}(trex_file).unwrap();" ] + except: # Only an integer + t_prime += [f" let size = size * {dim};"] + t += t_prime + t += [ """ + let data = vec![ String::with_capacity(capacity) ; size ]; + let data_c = data.as_ptr() as *mut *mut c_char; + + let (rc, data) = unsafe { + let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().unwrap() ); + (rc, data) + }; + rc_return(rc, data) +} +""" ] + r += [ '\n'.join(t) +.replace("{type_c}",type_c) +.replace("{type_r}",type_r) +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + r += [ """ +pub fn write_{group_l}_{element_l}(trex_file: File, data: Vec<&str>) -> Result<(), ExitCode> { + let mut size = 0; + for s in data.iter() { + let l = s.len(); + size = if l>size {l} else {size}; + } + size = size+1; + let data_c : Vec = data.iter().map(|&x| string_to_c(x)).collect::>(); + let data_c : Vec<*const c_char> = data_c.iter().map(|x| x.as_ptr() as *const c_char).collect::>(); + let size : i32 = size.try_into().unwrap(); + let data_c = data_c.as_ptr() as *mut *const c_char; + let rc = unsafe { c::trexio_write_{group}_{element}(trex_file, data_c, size) }; + rc_return(rc, ()) +} +""" +.replace("{type_c}",type_c) +.replace("{type_r}",type_r) +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + elif data[group][element][0] in [ "float sparse" ]: + pass + with open(generated_rs,'w') as f: diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index d23b0cca..a34921c9 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -63,14 +63,6 @@ pub fn inquire(file_name: &str) -> Result { include!("generated.rs"); -pub fn write_nucleus_charge(trex_file: File, data: Vec) -> Result<(), ExitCode> { - let size: i64 = data.len().try_into().unwrap(); - let rc = unsafe { c::trexio_write_safe_nucleus_charge_64(trex_file, data.as_ptr() as *const f64, size) }; - rc_return(rc, ()) -} - - - #[cfg(test)] mod tests { use super::*; diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index fc399012..5532e937 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -40,19 +40,18 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { let basis_nucleus_index = vec!([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 ]); let label = vec![ - "C ", - "Na ", - "C ", - "C 66 ", - "C ", - "C ", - "H 99 ", - "Ru ", - "H ", - "H ", - "H ", - "H " ]; - let mut label = label.concat(); + "C", + "Na", + "C", + "C 66", + "C", + "C", + "H 99", + "Ru", + "H", + "H", + "H", + "H" ]; let sym_str = "B3U with some comments"; @@ -71,10 +70,8 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { trexio::write_nucleus_num(trex_file, nucleus_num).unwrap(); trexio::write_nucleus_charge(trex_file, charge).unwrap(); trexio::write_nucleus_point_group(trex_file, sym_str).unwrap(); - /* trexio::write_nucleus_coord(trex_file, coord).unwrap(); trexio::write_nucleus_label(trex_file, label).unwrap(); - */ /* let rc = unsafe { trexio_write_nucleus_label(trex_file, label.as_ptr(), label[0].len().try_into().unwrap()) }; From b0dc33d97bdd1e58c276bf3d4a680f556bd6c2b9 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 12 Oct 2023 00:41:36 +0200 Subject: [PATCH 07/43] Improved test --- rust/trexio/src/test.rs | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index 5532e937..b8cb1d43 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -37,7 +37,7 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { let mo_num = 150; let ao_num = 1000; let basis_shell_num = 24; - let basis_nucleus_index = vec!([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 ]); + let basis_nucleus_index = vec![ 0usize, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 ]; let label = vec![ "C", @@ -72,33 +72,17 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { trexio::write_nucleus_point_group(trex_file, sym_str).unwrap(); trexio::write_nucleus_coord(trex_file, coord).unwrap(); trexio::write_nucleus_label(trex_file, label).unwrap(); + trexio::write_basis_shell_num(trex_file, basis_shell_num).unwrap(); + trexio::write_basis_nucleus_index(trex_file, basis_nucleus_index).unwrap(); + trexio::write_state_id(trex_file, state_id).unwrap(); -/* - let rc = unsafe { trexio_write_nucleus_label(trex_file, label.as_ptr(), label[0].len().try_into().unwrap()) }; - assert!(rc == TREXIO_SUCCESS); - - let rc = unsafe { trexio_write_nucleus_point_group(trex_file, sym_str.as_ptr() as *const i8, sym_str.len().try_into().unwrap()) }; - assert!(rc == TREXIO_SUCCESS); - - let rc = unsafe { trexio_write_basis_shell_num(trex_file, basis_shell_num) }; - assert!(rc == TREXIO_SUCCESS); - - let rc = unsafe { trexio_write_basis_nucleus_index(trex_file, basis_nucleus_index.as_ptr() as *const i32) }; - assert!(rc == TREXIO_SUCCESS); - - let rc = unsafe { trexio_write_state_id(trex_file, state_id) }; - assert!(rc == TREXIO_SUCCESS); - - if (unsafe { trexio_has_ao_num(trex_file) } == TREXIO_HAS_NOT) { - let rc = unsafe { trexio_write_ao_num(trex_file, ao_num) }; - assert!(rc == TREXIO_SUCCESS); + if ! trexio::has_ao_num(trex_file).unwrap() { + trexio::write_ao_num(trex_file, ao_num).unwrap(); } - if (unsafe { trexio_has_mo_num(trex_file) } == TREXIO_HAS_NOT) { - let rc = unsafe { trexio_write_mo_num(trex_file, mo_num) }; - assert!(rc == TREXIO_SUCCESS); + if ! trexio::has_mo_num(trex_file).unwrap() { + trexio::write_mo_num(trex_file, mo_num).unwrap(); } - */ trexio::close(trex_file).expect("Unable to close File"); From 7e9a3077d3bb76451e281094585ce812eed3d77f Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 12 Oct 2023 00:56:18 +0200 Subject: [PATCH 08/43] Improved usize --- rust/trexio/build.py | 3 +-- rust/trexio/src/test.rs | 9 ++++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 93fe9183..ad99e3c0 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -129,8 +129,7 @@ def make_functions(): rc_return(rc, data) } -pub fn write_{group_l}_{element_l}(trex_file: File, data: T) -> Result<(), ExitCode> - where {type_c}: From { +pub fn write_{group_l}_{element_l}(trex_file: File, data: {type_r}) -> Result<(), ExitCode> { let data: {type_c} = data.try_into().unwrap(); let rc = unsafe { c::trexio_write_{group}_{element}_64(trex_file, data) }; rc_return(rc, ()) diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index b8cb1d43..53801789 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -22,7 +22,7 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { let nucleus_num = 12; let state_id = 2; let charge = vec![6., 6., 6., 6., 6., 6., 1., 1., 1., 1., 1., 1.0f64]; - let coord = vec![ 0.00000000, 1.39250319 , 0.00 , + let coord = vec![ 0.00000000f64, 1.39250319 , 0.00 , -1.20594314, 0.69625160 , 0.00 , -1.20594314, -0.69625160 , 0.00 , 0.00000000, -1.39250319 , 0.00 , @@ -84,6 +84,13 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { trexio::write_mo_num(trex_file, mo_num).unwrap(); } + let mut energy = Vec::with_capacity(mo_num); + for i in 0..mo_num { + let e: f64 = i as f64 -100.0f64; + energy.push(e); + } + println!("{:#?}", energy); + trexio::close(trex_file).expect("Unable to close File"); } From 6aeecd709b10a16495181084f739e346513f6aeb Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 12 Oct 2023 09:14:51 +0200 Subject: [PATCH 09/43] Better panic messages --- rust/trexio/build.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index ad99e3c0..a96cba14 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -124,13 +124,13 @@ def make_functions(): let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { let rc = c::trexio_read_{group}_{element}_64(trex_file, &mut data_c); - (rc, data_c.try_into().unwrap()) + (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) }; rc_return(rc, data) } pub fn write_{group_l}_{element_l}(trex_file: File, data: {type_r}) -> Result<(), ExitCode> { - let data: {type_c} = data.try_into().unwrap(); + let data: {type_c} = data.try_into().expect("try_into failed in write_{group_l}_{element_l}"); let rc = unsafe { c::trexio_write_{group}_{element}_64(trex_file, data) }; rc_return(rc, ()) } @@ -148,14 +148,14 @@ def make_functions(): let mut data_c = String::with_capacity(capacity); let data_c = data_c.as_mut_ptr() as *mut c_char; let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().unwrap()); + let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().expect("try_into failed in read_{group_l}_{element_l}")); (rc, String::from_raw_parts(data_c as *mut u8, capacity, capacity)) }; rc_return(rc, data) } pub fn write_{group_l}_{element_l}(trex_file: File, data: &str) -> Result<(), ExitCode> { - let size : i32 = data.len().try_into().unwrap(); + let size : i32 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = string_to_c(data); let data = data.as_ptr() as *const c_char; let rc = unsafe { c::trexio_write_{group}_{element}(trex_file, data, size) }; @@ -176,7 +176,7 @@ def make_functions(): let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { let rc = c::trexio_read_{group}_{element}_64(trex_file, &mut data_c); - (rc, data_c.try_into().unwrap()) + (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) }; rc_return(rc, data) } @@ -198,7 +198,7 @@ def make_functions(): for dim in data[group][element][1]: try: # A dimensioning variable dim_group, dim_element = dim.split('.') - t_prime += [f" let size = size * read_{dim_group}_{dim_element}(trex_file).unwrap();" ] + t_prime += [f" let size = size * read_{dim_group}_{dim_element}(trex_file)?;" ] except: # Only an integer t_prime += [f" let size = size * {dim};"] t += t_prime @@ -206,7 +206,7 @@ def make_functions(): let data: Vec<{type_r}> = Vec::with_capacity(size); let data_c = data.as_ptr() as *mut {type_c}; let (rc, data) = unsafe { - let rc = c::trexio_read_safe_{group}_{element}_64(trex_file, data_c, size.try_into().unwrap()); + let rc = c::trexio_read_safe_{group}_{element}_64(trex_file, data_c, size.try_into().expect("try_into failed in read_{group}_{element}")); (rc, data) }; rc_return(rc, data) @@ -222,7 +222,7 @@ def make_functions(): r += [ """ pub fn write_{group_l}_{element_l}(trex_file: File, data: Vec<{type_r}>) -> Result<(), ExitCode> { - let size: i64 = data.len().try_into().unwrap(); + let size: i64 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = data.as_ptr() as *const {type_c}; let rc = unsafe { c::trexio_write_safe_{group}_{element}_64(trex_file, data, size) }; rc_return(rc, ()) @@ -242,7 +242,7 @@ def make_functions(): for dim in data[group][element][1]: try: # A dimensioning variable dim_group, dim_element = dim.split('.') - t_prime += [f" let size = size * read_{dim_group}_{dim_element}(trex_file).unwrap();" ] + t_prime += [f" let size = size * read_{dim_group}_{dim_element}(trex_file)?;" ] except: # Only an integer t_prime += [f" let size = size * {dim};"] t += t_prime @@ -251,7 +251,7 @@ def make_functions(): let data_c = data.as_ptr() as *mut *mut c_char; let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().unwrap() ); + let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().expect("try_into failed in read_{group}_{element}") ); (rc, data) }; rc_return(rc, data) @@ -275,7 +275,7 @@ def make_functions(): size = size+1; let data_c : Vec = data.iter().map(|&x| string_to_c(x)).collect::>(); let data_c : Vec<*const c_char> = data_c.iter().map(|x| x.as_ptr() as *const c_char).collect::>(); - let size : i32 = size.try_into().unwrap(); + let size : i32 = size.try_into().expect("try_into failed in write_{group}_{element}"); let data_c = data_c.as_ptr() as *mut *const c_char; let rc = unsafe { c::trexio_write_{group}_{element}(trex_file, data_c, size) }; rc_return(rc, ()) From af9bc4360dda6d553903fc5412e8807ec665571c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 12 Oct 2023 09:51:25 +0200 Subject: [PATCH 10/43] Errors with '?' --- rust/trexio/src/exit_code.rs | 27 +++++++++++++++++++++- rust/trexio/src/main.rs | 7 ++++-- rust/trexio/src/test.rs | 44 ++++++++++++++++++------------------ 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/rust/trexio/src/exit_code.rs b/rust/trexio/src/exit_code.rs index d842d343..74cc08d6 100644 --- a/rust/trexio/src/exit_code.rs +++ b/rust/trexio/src/exit_code.rs @@ -93,7 +93,7 @@ impl ExitCode { } /// Conversion to a C value - pub fn to_c(self) -> c::trexio_exit_code { + pub fn to_c(&self) -> c::trexio_exit_code { match self { Self::Failure => c::TREXIO_FAILURE, Self::Success => c::TREXIO_SUCCESS, @@ -136,4 +136,29 @@ impl ExitCode { Self::PhaseChange => c::TREXIO_PHASE_CHANGE, } } + + pub fn to_str(&self) -> Result<&'static str, Utf8Error> { + let c_error = self.to_c(); + let c_buf: *const c_char = unsafe { c::trexio_string_of_error( c_error ) }; + let c_str: &CStr = unsafe { CStr::from_ptr(c_buf) }; + c_str.to_str() + } +} + +use std::fmt; +use std::error::Error; +use std::ffi::CStr; +use std::ffi::c_char; +use std::str::Utf8Error; + +impl fmt::Display for ExitCode { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.to_str().unwrap()) + } +} + +impl Error for ExitCode { + fn description(&self) -> &str { + self.to_str().unwrap() + } } diff --git a/rust/trexio/src/main.rs b/rust/trexio/src/main.rs index 98fb1b29..bd80371c 100644 --- a/rust/trexio/src/main.rs +++ b/rust/trexio/src/main.rs @@ -1,6 +1,8 @@ +use std::error::Error; + mod test; -fn main() { +fn main() -> Result<(), Box> { println!("============================================"); println!(" TREXIO VERSION : {}", trexio::PACKAGE_VERSION ); println!("============================================"); @@ -8,6 +10,7 @@ fn main() { let file_name = "test_write_rust.dir"; let back_end = trexio::BackEnd::Text; - test::test_write(file_name, back_end); + test::test_write(file_name, back_end)?; + Ok(()) } diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index 53801789..9dd253db 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -1,6 +1,6 @@ use trexio::back_end::BackEnd; -pub fn test_write(file_name: &str, back_end: BackEnd) { +pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { // Prepare data to be written let n_buffers = 5; @@ -56,32 +56,32 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { println!("{}", file_name); - assert!( ! trexio::inquire(file_name).unwrap() ); + assert!( ! trexio::inquire(file_name)? ); - let trex_file = trexio::open(file_name, 'w', back_end).unwrap(); + let trex_file = trexio::open(file_name, 'w', back_end)?; - assert!( ! trexio::has_nucleus(trex_file).unwrap() ); - assert!( ! trexio::has_nucleus_num(trex_file).unwrap() ); - assert!( ! trexio::has_nucleus_charge(trex_file).unwrap() ); - assert!( ! trexio::has_ao_2e_int(trex_file).unwrap() ); - assert!( ! trexio::has_ao_2e_int_eri(trex_file).unwrap() ); - assert!( ! trexio::has_determinant_list(trex_file).unwrap() ); + assert!( ! trexio::has_nucleus(trex_file)? ); + assert!( ! trexio::has_nucleus_num(trex_file)? ); + assert!( ! trexio::has_nucleus_charge(trex_file)? ); + assert!( ! trexio::has_ao_2e_int(trex_file)? ); + assert!( ! trexio::has_ao_2e_int_eri(trex_file)? ); + assert!( ! trexio::has_determinant_list(trex_file)? ); - trexio::write_nucleus_num(trex_file, nucleus_num).unwrap(); - trexio::write_nucleus_charge(trex_file, charge).unwrap(); - trexio::write_nucleus_point_group(trex_file, sym_str).unwrap(); - trexio::write_nucleus_coord(trex_file, coord).unwrap(); - trexio::write_nucleus_label(trex_file, label).unwrap(); - trexio::write_basis_shell_num(trex_file, basis_shell_num).unwrap(); - trexio::write_basis_nucleus_index(trex_file, basis_nucleus_index).unwrap(); - trexio::write_state_id(trex_file, state_id).unwrap(); + trexio::write_nucleus_num(trex_file, nucleus_num)?; + trexio::write_nucleus_charge(trex_file, charge)?; + trexio::write_nucleus_point_group(trex_file, sym_str)?; + trexio::write_nucleus_coord(trex_file, coord)?; + trexio::write_nucleus_label(trex_file, label)?; + trexio::write_basis_shell_num(trex_file, basis_shell_num)?; + trexio::write_basis_nucleus_index(trex_file, basis_nucleus_index)?; + trexio::write_state_id(trex_file, state_id)?; - if ! trexio::has_ao_num(trex_file).unwrap() { - trexio::write_ao_num(trex_file, ao_num).unwrap(); + if ! trexio::has_ao_num(trex_file)? { + trexio::write_ao_num(trex_file, ao_num)?; } - if ! trexio::has_mo_num(trex_file).unwrap() { - trexio::write_mo_num(trex_file, mo_num).unwrap(); + if ! trexio::has_mo_num(trex_file)? { + trexio::write_mo_num(trex_file, mo_num)?; } let mut energy = Vec::with_capacity(mo_num); @@ -91,6 +91,6 @@ pub fn test_write(file_name: &str, back_end: BackEnd) { } println!("{:#?}", energy); - trexio::close(trex_file).expect("Unable to close File"); + trexio::close(trex_file) } From 06be52c0d1628f0ced6b855127f5fa2953abe0ee Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 12 Oct 2023 14:29:37 +0200 Subject: [PATCH 11/43] Using methods --- rust/trexio/build.py | 53 ++++++++++++++++++++------------------- rust/trexio/src/lib.rs | 55 ++++++++++++++++++++++------------------- rust/trexio/src/test.rs | 44 ++++++++++++++++----------------- 3 files changed, 79 insertions(+), 73 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index a96cba14..2c0782fc 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -81,13 +81,15 @@ def make_functions(): "dim readonly" : "i64", "index" : "i64", "str" : "str"} - r = [] + + r = [""" +impl File {""" ] for group in data: group_l = group.lower() r += [ """ -pub fn has_{group_l}(trex_file: File) -> Result { - let rc = unsafe { c::trexio_has_{group}(trex_file) }; +pub fn has_{group_l}(&self) -> Result { + let rc = unsafe { c::trexio_has_{group}(self.ptr) }; match rc { c::TREXIO_SUCCESS => Ok(true), c::TREXIO_HAS_NOT => Ok(false), @@ -102,8 +104,8 @@ def make_functions(): type_r = convert_r[data[group][element][0]] element_l = element.lower() r += [ """ -pub fn has_{group_l}_{element_l}(trex_file: File) -> Result { - let rc = unsafe { c::trexio_has_{group}_{element}(trex_file) }; +pub fn has_{group_l}_{element_l}(&self) -> Result { + let rc = unsafe { c::trexio_has_{group}_{element}(self.ptr) }; match rc { c::TREXIO_SUCCESS => Ok(true), c::TREXIO_HAS_NOT => Ok(false), @@ -120,18 +122,18 @@ def make_functions(): if data[group][element][1] == []: if data[group][element][0] in [ "int", "float", "dim", "index" ]: r += [ """ -pub fn read_{group_l}_{element_l}(trex_file: File) -> Result<{type_r}, ExitCode> { +pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> { let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}_64(trex_file, &mut data_c); + let rc = c::trexio_read_{group}_{element}_64(self.ptr, &mut data_c); (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) }; rc_return(rc, data) } -pub fn write_{group_l}_{element_l}(trex_file: File, data: {type_r}) -> Result<(), ExitCode> { +pub fn write_{group_l}_{element_l}(&self, data: {type_r}) -> Result<(), ExitCode> { let data: {type_c} = data.try_into().expect("try_into failed in write_{group_l}_{element_l}"); - let rc = unsafe { c::trexio_write_{group}_{element}_64(trex_file, data) }; + let rc = unsafe { c::trexio_write_{group}_{element}_64(self.ptr, data) }; rc_return(rc, ()) } """ @@ -144,21 +146,21 @@ def make_functions(): elif data[group][element][0] in [ "str" ]: r += [ """ -pub fn read_{group_l}_{element_l}(trex_file: File, capacity: usize) -> Result { +pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result { let mut data_c = String::with_capacity(capacity); let data_c = data_c.as_mut_ptr() as *mut c_char; let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().expect("try_into failed in read_{group_l}_{element_l}")); + let rc = c::trexio_read_{group}_{element}(self.ptr, data_c, capacity.try_into().expect("try_into failed in read_{group_l}_{element_l}")); (rc, String::from_raw_parts(data_c as *mut u8, capacity, capacity)) }; rc_return(rc, data) } -pub fn write_{group_l}_{element_l}(trex_file: File, data: &str) -> Result<(), ExitCode> { +pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> { let size : i32 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = string_to_c(data); let data = data.as_ptr() as *const c_char; - let rc = unsafe { c::trexio_write_{group}_{element}(trex_file, data, size) }; + let rc = unsafe { c::trexio_write_{group}_{element}(self.ptr, data, size) }; rc_return(rc, ()) } """ @@ -172,10 +174,10 @@ def make_functions(): elif data[group][element][0] in [ "dim readonly" ]: r += [ """ -pub fn read_{group_l}_{element_l}(trex_file: File) -> Result<{type_r}, ExitCode> { +pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> { let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}_64(trex_file, &mut data_c); + let rc = c::trexio_read_{group}_{element}_64(self.ptr, &mut data_c); (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) }; rc_return(rc, data) @@ -192,13 +194,13 @@ def make_functions(): else: if data[group][element][0] in [ "int", "float", "dim", "index" ]: - t = [ """pub fn read_{group_l}_{element_l}(trex_file: File) -> Result, ExitCode> { + t = [ """pub fn read_{group_l}_{element_l}(&self) -> Result, ExitCode> { let size = 1;""" ] t_prime = [] for dim in data[group][element][1]: try: # A dimensioning variable dim_group, dim_element = dim.split('.') - t_prime += [f" let size = size * read_{dim_group}_{dim_element}(trex_file)?;" ] + t_prime += [f" let size = size * self.read_{dim_group}_{dim_element}()?;" ] except: # Only an integer t_prime += [f" let size = size * {dim};"] t += t_prime @@ -206,7 +208,7 @@ def make_functions(): let data: Vec<{type_r}> = Vec::with_capacity(size); let data_c = data.as_ptr() as *mut {type_c}; let (rc, data) = unsafe { - let rc = c::trexio_read_safe_{group}_{element}_64(trex_file, data_c, size.try_into().expect("try_into failed in read_{group}_{element}")); + let rc = c::trexio_read_safe_{group}_{element}_64(self.ptr, data_c, size.try_into().expect("try_into failed in read_{group}_{element}")); (rc, data) }; rc_return(rc, data) @@ -221,10 +223,10 @@ def make_functions(): .replace("{element_l}",element_l) ] r += [ """ -pub fn write_{group_l}_{element_l}(trex_file: File, data: Vec<{type_r}>) -> Result<(), ExitCode> { +pub fn write_{group_l}_{element_l}(&self, data: Vec<{type_r}>) -> Result<(), ExitCode> { let size: i64 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = data.as_ptr() as *const {type_c}; - let rc = unsafe { c::trexio_write_safe_{group}_{element}_64(trex_file, data, size) }; + let rc = unsafe { c::trexio_write_safe_{group}_{element}_64(self.ptr, data, size) }; rc_return(rc, ()) } """ @@ -236,13 +238,13 @@ def make_functions(): .replace("{element_l}",element_l) ] elif data[group][element][0] in [ "str" ]: - t = [ """pub fn read_{group_l}_{element_l}(trex_file: File, capacity: usize) -> Result, ExitCode> { + t = [ """pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result, ExitCode> { let size = 1;""" ] t_prime = [] for dim in data[group][element][1]: try: # A dimensioning variable dim_group, dim_element = dim.split('.') - t_prime += [f" let size = size * read_{dim_group}_{dim_element}(trex_file)?;" ] + t_prime += [f" let size = size * self.read_{dim_group}_{dim_element}()?;" ] except: # Only an integer t_prime += [f" let size = size * {dim};"] t += t_prime @@ -251,7 +253,7 @@ def make_functions(): let data_c = data.as_ptr() as *mut *mut c_char; let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}(trex_file, data_c, capacity.try_into().expect("try_into failed in read_{group}_{element}") ); + let rc = c::trexio_read_{group}_{element}(self.ptr, data_c, capacity.try_into().expect("try_into failed in read_{group}_{element}") ); (rc, data) }; rc_return(rc, data) @@ -266,7 +268,7 @@ def make_functions(): .replace("{element_l}",element_l) ] r += [ """ -pub fn write_{group_l}_{element_l}(trex_file: File, data: Vec<&str>) -> Result<(), ExitCode> { +pub fn write_{group_l}_{element_l}(&self, data: Vec<&str>) -> Result<(), ExitCode> { let mut size = 0; for s in data.iter() { let l = s.len(); @@ -277,7 +279,7 @@ def make_functions(): let data_c : Vec<*const c_char> = data_c.iter().map(|x| x.as_ptr() as *const c_char).collect::>(); let size : i32 = size.try_into().expect("try_into failed in write_{group}_{element}"); let data_c = data_c.as_ptr() as *mut *const c_char; - let rc = unsafe { c::trexio_write_{group}_{element}(trex_file, data_c, size) }; + let rc = unsafe { c::trexio_write_{group}_{element}(self.ptr, data_c, size) }; rc_return(rc, ()) } """ @@ -293,6 +295,7 @@ def make_functions(): + r += [ "}" ] with open(generated_rs,'w') as f: f.write('\n'.join(r)) diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index a34921c9..0cd70d2a 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -11,9 +11,6 @@ pub use exit_code::ExitCode; pub mod back_end; pub use back_end::BackEnd; -/// Type for a TREXIO file -pub type File = *mut c::trexio_t; - pub const PACKAGE_VERSION : &str = unsafe { std::str::from_utf8_unchecked(c::TREXIO_PACKAGE_VERSION) }; fn rc_return(rc : c::trexio_exit_code, result: T) -> Result { @@ -30,36 +27,42 @@ fn string_to_c(s: &str) -> std::ffi::CString { +/// Type for a TREXIO file +pub struct File { + ptr: *mut c::trexio_t, +} -pub fn open(file_name: &str, mode: char, back_end: BackEnd) -> Result { - let file_name_c = string_to_c(file_name); - let file_name_c = file_name_c.as_ptr() as *const c_char; - let mode = mode as c_char; - let back_end = back_end.to_c(); - let rc: *mut c::trexio_exit_code = &mut c::TREXIO_SUCCESS.clone(); - let result = unsafe { c::trexio_open(file_name_c, mode, back_end, rc) }; - let rc = unsafe { *rc }; - rc_return(rc, result) -} +impl File { -pub fn close(file: File) -> Result<(), ExitCode> { - let rc = unsafe { c::trexio_close(file) }; - rc_return(rc, ()) -} + pub fn open(file_name: &str, mode: char, back_end: BackEnd) -> Result { + let file_name_c = string_to_c(file_name); + let file_name_c = file_name_c.as_ptr() as *const c_char; + let mode = mode as c_char; + let back_end = back_end.to_c(); + let rc: *mut c::trexio_exit_code = &mut c::TREXIO_SUCCESS.clone(); + let result = unsafe { c::trexio_open(file_name_c, mode, back_end, rc) }; + let rc = unsafe { *rc }; + rc_return(rc, File { ptr: result }) + } -pub fn inquire(file_name: &str) -> Result { - let file_name_c = string_to_c(file_name); - let file_name_c = file_name_c.as_ptr() as *const c_char; - let rc = unsafe { c::trexio_inquire(file_name_c) }; - match ExitCode::from(rc) { - ExitCode::Failure => Ok(false), - ExitCode::Success => Ok(true), - x => Err(x), + pub fn close(self) -> Result<(), ExitCode> { + let rc = unsafe { c::trexio_close(self.ptr) }; + rc_return(rc, ()) } -} + pub fn inquire(file_name: &str) -> Result { + let file_name_c = string_to_c(file_name); + let file_name_c = file_name_c.as_ptr() as *const c_char; + let rc = unsafe { c::trexio_inquire(file_name_c) }; + match ExitCode::from(rc) { + ExitCode::Failure => Ok(false), + ExitCode::Success => Ok(true), + x => Err(x), + } + } +} include!("generated.rs"); diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index 9dd253db..8c32ebd0 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -56,32 +56,32 @@ pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::Exit println!("{}", file_name); - assert!( ! trexio::inquire(file_name)? ); + assert!( ! trexio::File::inquire(file_name)? ); - let trex_file = trexio::open(file_name, 'w', back_end)?; + let trex_file = trexio::File::open(file_name, 'w', back_end)?; - assert!( ! trexio::has_nucleus(trex_file)? ); - assert!( ! trexio::has_nucleus_num(trex_file)? ); - assert!( ! trexio::has_nucleus_charge(trex_file)? ); - assert!( ! trexio::has_ao_2e_int(trex_file)? ); - assert!( ! trexio::has_ao_2e_int_eri(trex_file)? ); - assert!( ! trexio::has_determinant_list(trex_file)? ); + assert!( ! trex_file.has_nucleus()? ); + assert!( ! trex_file.has_nucleus_num()? ); + assert!( ! trex_file.has_nucleus_charge()? ); + assert!( ! trex_file.has_ao_2e_int()? ); + assert!( ! trex_file.has_ao_2e_int_eri()? ); + assert!( ! trex_file.has_determinant_list()? ); - trexio::write_nucleus_num(trex_file, nucleus_num)?; - trexio::write_nucleus_charge(trex_file, charge)?; - trexio::write_nucleus_point_group(trex_file, sym_str)?; - trexio::write_nucleus_coord(trex_file, coord)?; - trexio::write_nucleus_label(trex_file, label)?; - trexio::write_basis_shell_num(trex_file, basis_shell_num)?; - trexio::write_basis_nucleus_index(trex_file, basis_nucleus_index)?; - trexio::write_state_id(trex_file, state_id)?; + trex_file.write_nucleus_num(nucleus_num)?; + trex_file.write_nucleus_charge(charge)?; + trex_file.write_nucleus_point_group(sym_str)?; + trex_file.write_nucleus_coord(coord)?; + trex_file.write_nucleus_label(label)?; + trex_file.write_basis_shell_num(basis_shell_num)?; + trex_file.write_basis_nucleus_index(basis_nucleus_index)?; + trex_file.write_state_id(state_id)?; - if ! trexio::has_ao_num(trex_file)? { - trexio::write_ao_num(trex_file, ao_num)?; + if ! trex_file.has_ao_num()? { + trex_file.write_ao_num(ao_num)?; } - if ! trexio::has_mo_num(trex_file)? { - trexio::write_mo_num(trex_file, mo_num)?; + if ! trex_file.has_mo_num()? { + trex_file.write_mo_num(mo_num)?; } let mut energy = Vec::with_capacity(mo_num); @@ -89,8 +89,8 @@ pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::Exit let e: f64 = i as f64 -100.0f64; energy.push(e); } - println!("{:#?}", energy); + trex_file.write_mo_energy(energy)?; - trexio::close(trex_file) + trex_file.close() } From 2afc6160f00d6308b935e2b3a1d579e9019e9b77 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 12 Oct 2023 19:09:30 +0200 Subject: [PATCH 12/43] Added bitfields --- rust/trexio/build.py | 18 ++--- rust/trexio/src/bitfield.rs | 138 ++++++++++++++++++++++++++++++++++++ rust/trexio/src/lib.rs | 53 +++++++++++++- rust/trexio/src/test.rs | 19 ++++- 4 files changed, 213 insertions(+), 15 deletions(-) create mode 100644 rust/trexio/src/bitfield.rs diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 2c0782fc..cf6746ed 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -128,13 +128,13 @@ def make_functions(): let rc = c::trexio_read_{group}_{element}_64(self.ptr, &mut data_c); (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) }; - rc_return(rc, data) + rc_return(data, rc) } pub fn write_{group_l}_{element_l}(&self, data: {type_r}) -> Result<(), ExitCode> { let data: {type_c} = data.try_into().expect("try_into failed in write_{group_l}_{element_l}"); let rc = unsafe { c::trexio_write_{group}_{element}_64(self.ptr, data) }; - rc_return(rc, ()) + rc_return((), rc) } """ .replace("{type_c}",type_c) @@ -153,7 +153,7 @@ def make_functions(): let rc = c::trexio_read_{group}_{element}(self.ptr, data_c, capacity.try_into().expect("try_into failed in read_{group_l}_{element_l}")); (rc, String::from_raw_parts(data_c as *mut u8, capacity, capacity)) }; - rc_return(rc, data) + rc_return(data, rc) } pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> { @@ -161,7 +161,7 @@ def make_functions(): let data = string_to_c(data); let data = data.as_ptr() as *const c_char; let rc = unsafe { c::trexio_write_{group}_{element}(self.ptr, data, size) }; - rc_return(rc, ()) + rc_return((), rc) } """ .replace("{type_c}",type_c) @@ -180,7 +180,7 @@ def make_functions(): let rc = c::trexio_read_{group}_{element}_64(self.ptr, &mut data_c); (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) }; - rc_return(rc, data) + rc_return(data, rc) } """ .replace("{type_r}",type_r) @@ -211,7 +211,7 @@ def make_functions(): let rc = c::trexio_read_safe_{group}_{element}_64(self.ptr, data_c, size.try_into().expect("try_into failed in read_{group}_{element}")); (rc, data) }; - rc_return(rc, data) + rc_return(data, rc) } """ ] r += [ '\n'.join(t) @@ -227,7 +227,7 @@ def make_functions(): let size: i64 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = data.as_ptr() as *const {type_c}; let rc = unsafe { c::trexio_write_safe_{group}_{element}_64(self.ptr, data, size) }; - rc_return(rc, ()) + rc_return((), rc) } """ .replace("{type_c}",type_c) @@ -256,7 +256,7 @@ def make_functions(): let rc = c::trexio_read_{group}_{element}(self.ptr, data_c, capacity.try_into().expect("try_into failed in read_{group}_{element}") ); (rc, data) }; - rc_return(rc, data) + rc_return(data, rc) } """ ] r += [ '\n'.join(t) @@ -280,7 +280,7 @@ def make_functions(): let size : i32 = size.try_into().expect("try_into failed in write_{group}_{element}"); let data_c = data_c.as_ptr() as *mut *const c_char; let rc = unsafe { c::trexio_write_{group}_{element}(self.ptr, data_c, size) }; - rc_return(rc, ()) + rc_return((), rc) } """ .replace("{type_c}",type_c) diff --git a/rust/trexio/src/bitfield.rs b/rust/trexio/src/bitfield.rs new file mode 100644 index 00000000..5303c440 --- /dev/null +++ b/rust/trexio/src/bitfield.rs @@ -0,0 +1,138 @@ +#[derive(Debug)] +pub struct Bitfield { + data: Vec, + n_int: usize +} + +use crate::c; +use crate::File; +use crate::ExitCode; + +impl Bitfield { + + /// Creates a new bitfield , using a number of i64 elements consistent + /// with the number of MOs in the TREXIO file. + pub fn from(n_int: usize, orb_list: Vec) -> Result<(Self, f64), ExitCode> { + + let orb_list: Vec = orb_list.iter().map(|&x| x as i32).collect(); + let occ_num = orb_list.len().try_into().expect("try_into failed in Bitfield::from"); + let orb_list_ptr = orb_list.as_ptr() as *const i32; + let n_int32: i32 = n_int.try_into().expect("try_into failed in Bitfield::from"); + let mut b = vec![0i64 ; n_int]; + let bit_list = b.as_mut_ptr() as *mut c::bitfield_t; + std::mem::forget(b); + let rc = unsafe { + c::trexio_to_bitfield_list(orb_list_ptr, occ_num, bit_list, n_int32) + }; + + let data = unsafe { Vec::from_raw_parts(bit_list, n_int, n_int) }; + + let result = Bitfield { data, n_int }; + + match ExitCode::from(rc) { + ExitCode::Success => Ok( (result, 1.0) ), + ExitCode::PhaseChange=> Ok( (result,-1.0) ), + x => return Err(x), + } + } + + /// Number of i64 needed to represent a spin sector + pub fn n_int(&self) -> usize { + self.n_int + } + + /// Returns the alpha part + pub fn alpha(&self) -> &[i64] { + &self.data[0..self.n_int] + } + + /// Returns the beta part + pub fn beta(&self) -> &[i64] { + let n_int = self.n_int; + &self.data[n_int..2*n_int] + } + + /// Converts to a format usable in the C library + pub fn as_ptr(&self) -> *const c::bitfield_t { + let len = self.data.len(); + let result = &self.data[0..len]; + result.as_ptr() as *const c::bitfield_t + } + + /// Converts to a format usable in the C library + pub fn as_mut_ptr(&mut self) -> *mut c::bitfield_t { + let len = self.data.len(); + let result = &mut self.data[0..len]; + result.as_mut_ptr() as *mut c::bitfield_t + } + + /// Converts the bitfield into a list of orbital indices (0-based) + pub fn to_orbital_list(&self) -> Result< Vec, ExitCode> { + + let n_int : i32 = self.n_int.try_into().expect("try_into failed in to_orbital_list"); + let d1 = self.as_ptr(); + let cap = self.n_int * 64; + let mut list = vec![ 0i32 ; cap ]; + let list_c = list.as_mut_ptr() as *mut i32; + std::mem::forget(list); + + let mut occ_num : i32 = 0; + + let rc = unsafe { c::trexio_to_orbital_list(n_int, d1, list_c, &mut occ_num) }; + match ExitCode::from(rc) { + ExitCode::Success => (), + x => return Err(x) + }; + + let occ_num = occ_num as usize; + let list = unsafe { Vec::from_raw_parts(list_c, occ_num, cap) }; + + let mut result: Vec = Vec::with_capacity(occ_num); + for i in list.iter() { + result.push( *i as usize ); + } + Ok(result) + } + + /// Converts the determinant into a list of orbital indices (0-based) + pub fn to_orbital_list_up_dn(&self) -> Result< (Vec, Vec), ExitCode> { + + let n_int : i32 = (self.n_int/2).try_into().expect("try_into failed in to_orbital_list"); + let d1 = self.as_ptr(); + let cap = self.n_int * 64; + let mut b = vec![ 0i32 ; cap ]; + let list_up_c = b.as_mut_ptr() as *mut i32; + std::mem::forget(b); + let mut b = vec![ 0i32 ; cap ]; + let list_dn_c = b.as_mut_ptr() as *mut i32; + std::mem::forget(b); + + let mut occ_num_up : i32 = 0; + let mut occ_num_dn : i32 = 0; + + let rc = unsafe { c::trexio_to_orbital_list_up_dn(n_int, d1, list_up_c, list_dn_c, &mut occ_num_up, &mut occ_num_dn) }; + match ExitCode::from(rc) { + ExitCode::Success => (), + x => return Err(x) + }; + + let occ_num_up = occ_num_up as usize; + let occ_num_dn = occ_num_dn as usize; + let list_up = unsafe { Vec::from_raw_parts(list_up_c, occ_num_up, cap) }; + let list_dn = unsafe { Vec::from_raw_parts(list_dn_c, occ_num_dn, cap) }; + + let mut result_up: Vec = Vec::with_capacity(occ_num_up); + for i in list_up.iter() { + result_up.push( *i as usize ); + } + + let mut result_dn: Vec = Vec::with_capacity(occ_num_dn); + for i in list_dn.iter() { + result_dn.push( *i as usize ); + } + Ok( (result_up, result_dn) ) + } + +} + + diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 0cd70d2a..9956bb73 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -11,9 +11,13 @@ pub use exit_code::ExitCode; pub mod back_end; pub use back_end::BackEnd; +/// Bit fields +pub mod bitfield; +pub use bitfield::Bitfield; + pub const PACKAGE_VERSION : &str = unsafe { std::str::from_utf8_unchecked(c::TREXIO_PACKAGE_VERSION) }; -fn rc_return(rc : c::trexio_exit_code, result: T) -> Result { +fn rc_return(result: T, rc : c::trexio_exit_code) -> Result { let rc = ExitCode::from(rc); match rc { ExitCode::Success => Ok(result), @@ -26,6 +30,11 @@ fn string_to_c(s: &str) -> std::ffi::CString { } +pub fn info() -> Result<(),ExitCode> { + let rc = unsafe { c::trexio_info() }; + rc_return((), rc) +} + /// Type for a TREXIO file pub struct File { @@ -43,12 +52,12 @@ impl File { let rc: *mut c::trexio_exit_code = &mut c::TREXIO_SUCCESS.clone(); let result = unsafe { c::trexio_open(file_name_c, mode, back_end, rc) }; let rc = unsafe { *rc }; - rc_return(rc, File { ptr: result }) + rc_return(File { ptr: result }, rc) } pub fn close(self) -> Result<(), ExitCode> { let rc = unsafe { c::trexio_close(self.ptr) }; - rc_return(rc, ()) + rc_return((), rc) } pub fn inquire(file_name: &str) -> Result { @@ -62,6 +71,44 @@ impl File { } } + pub fn get_state(&self) -> Result { + let mut num = 0i32; + let rc = unsafe { c::trexio_get_state(self.ptr, &mut num) }; + let result: usize = num.try_into().expect("try_into failed in get_state"); + rc_return(result, rc) + } + + pub fn set_state(&self, num: usize) -> Result<(), ExitCode> { + let num: i32 = num.try_into().expect("try_into failed in set_state"); + let rc = unsafe { c::trexio_set_state(self.ptr, num) }; + rc_return((), rc) + } + + pub fn set_one_based(&self) -> Result<(), ExitCode> { + let rc = unsafe { c::trexio_set_one_based(self.ptr) }; + rc_return((), rc) + } + + pub fn get_int64_num(&self) -> Result { + let mut num = 0i32; + let rc = unsafe { + c::trexio_get_int64_num(self.ptr, &mut num) + }; + let num:usize = num.try_into().expect("try_into failed in get_int64_num"); + rc_return(num, rc) + } + +/* + pub fn read_determinant_list(&self, offset_file: usize, dset: Vec) -> Result { + let rc = unsafe { + let offset_file: i64 = offset_file; + let buffer_size: *mut i64 = dset.len().try_into().expect("try_into failed in read_determinant_list"); + let dset: *mut i64 = dset.to_c().as_mut_ptr(); + c::trexio_read_determinant_list(self.ptr, offset_file, buffer_size, dset) + }; + } + */ + } include!("generated.rs"); diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index 8c32ebd0..ac0d4e45 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -2,6 +2,8 @@ use trexio::back_end::BackEnd; pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { + let () = trexio::info()?; + // Prepare data to be written let n_buffers = 5; let buf_size_sparse = 100/n_buffers; @@ -10,9 +12,8 @@ pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::Exit let mut index_sparse_ao_2e_int_eri = vec![0i32 ; 400]; for i in 0..100 { let i : usize = i; - let j : i32 = i.try_into().unwrap(); - let fj : f64 = j.try_into().unwrap(); - value_sparse_ao_2e_int_eri[i] = 3.14 + fj; + let j : i32 = i as i32; + value_sparse_ao_2e_int_eri[i] = 3.14 + (j as f64); index_sparse_ao_2e_int_eri[4*i + 0] = 4*j - 3; index_sparse_ao_2e_int_eri[4*i + 1] = 4*j+1 - 3; index_sparse_ao_2e_int_eri[4*i + 2] = 4*j+2 - 3; @@ -91,6 +92,18 @@ pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::Exit } trex_file.write_mo_energy(energy)?; + let mut spin = vec![0 ; mo_num]; + for i in mo_num/2..mo_num { + spin[i] = 1; + } + trex_file.write_mo_spin(spin)?; + + let (det, phase) = trexio::Bitfield::from(4, vec![0, 1, 2, 3, 4, 5, 6, 151, 152, 153, 154])?; + println!("{} {:?}", phase, det); + println!("{:?}", det.to_orbital_list().unwrap()); + println!("{:?}", det.to_orbital_list().unwrap()); + println!("{:?}", det.to_orbital_list_up_dn().unwrap()); + trex_file.close() } From 1e7dfc8ddd068de5a33f22a74a6255e071918a8b Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 13 Oct 2023 11:17:13 +0200 Subject: [PATCH 13/43] Tests in bitfields --- rust/trexio/src/bitfield.rs | 66 +++++++++++++++++++++++++++++-------- rust/trexio/src/lib.rs | 14 -------- rust/trexio/src/test.rs | 5 --- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/rust/trexio/src/bitfield.rs b/rust/trexio/src/bitfield.rs index 5303c440..8b1b6b1d 100644 --- a/rust/trexio/src/bitfield.rs +++ b/rust/trexio/src/bitfield.rs @@ -1,18 +1,16 @@ #[derive(Debug)] pub struct Bitfield { data: Vec, - n_int: usize } use crate::c; -use crate::File; use crate::ExitCode; impl Bitfield { /// Creates a new bitfield , using a number of i64 elements consistent /// with the number of MOs in the TREXIO file. - pub fn from(n_int: usize, orb_list: Vec) -> Result<(Self, f64), ExitCode> { + pub fn from(n_int: usize, orb_list: &[usize]) -> Result<(Self, f64), ExitCode> { let orb_list: Vec = orb_list.iter().map(|&x| x as i32).collect(); let occ_num = orb_list.len().try_into().expect("try_into failed in Bitfield::from"); @@ -27,7 +25,7 @@ impl Bitfield { let data = unsafe { Vec::from_raw_parts(bit_list, n_int, n_int) }; - let result = Bitfield { data, n_int }; + let result = Bitfield { data }; match ExitCode::from(rc) { ExitCode::Success => Ok( (result, 1.0) ), @@ -36,19 +34,24 @@ impl Bitfield { } } - /// Number of i64 needed to represent a spin sector - pub fn n_int(&self) -> usize { - self.n_int + pub fn from_alpha_beta(alpha: Bitfield, beta: Bitfield) -> Result { + if alpha.data.len() != beta.data.len() { + return Err(ExitCode::InvalidArg2) + }; + let mut data = alpha.data.clone(); + data.extend_from_slice(&beta.data); + Ok(Bitfield { data }) } /// Returns the alpha part pub fn alpha(&self) -> &[i64] { - &self.data[0..self.n_int] + let n_int = self.data.len()/2; + &self.data[0..n_int] } /// Returns the beta part pub fn beta(&self) -> &[i64] { - let n_int = self.n_int; + let n_int = self.data.len()/2; &self.data[n_int..2*n_int] } @@ -69,9 +72,9 @@ impl Bitfield { /// Converts the bitfield into a list of orbital indices (0-based) pub fn to_orbital_list(&self) -> Result< Vec, ExitCode> { - let n_int : i32 = self.n_int.try_into().expect("try_into failed in to_orbital_list"); + let n_int : i32 = self.data.len().try_into().expect("try_into failed in to_orbital_list"); let d1 = self.as_ptr(); - let cap = self.n_int * 64; + let cap = self.data.len() * 64; let mut list = vec![ 0i32 ; cap ]; let list_c = list.as_mut_ptr() as *mut i32; std::mem::forget(list); @@ -97,9 +100,9 @@ impl Bitfield { /// Converts the determinant into a list of orbital indices (0-based) pub fn to_orbital_list_up_dn(&self) -> Result< (Vec, Vec), ExitCode> { - let n_int : i32 = (self.n_int/2).try_into().expect("try_into failed in to_orbital_list"); + let n_int : i32 = (self.data.len()/2).try_into().expect("try_into failed in to_orbital_list"); let d1 = self.as_ptr(); - let cap = self.n_int * 64; + let cap = self.data.len()/2 * 64; let mut b = vec![ 0i32 ; cap ]; let list_up_c = b.as_mut_ptr() as *mut i32; std::mem::forget(b); @@ -136,3 +139,40 @@ impl Bitfield { } +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn creation_from_list() { + + let list0 = vec![0, 1, 2, 3, 4]; + let list1 = vec![0, 1, 2, 4, 3]; + let list2 = vec![0, 1, 4, 2, 3]; + + let (alpha0, phase0) = Bitfield::from(2, &list0).unwrap(); + let list = alpha0.to_orbital_list().unwrap(); + assert_eq!(list, list0); + + let (alpha1, phase1) = Bitfield::from(2, &list1).unwrap(); + let list = alpha1.to_orbital_list().unwrap(); + assert_eq!(list, list0); + assert_eq!(phase1, -phase0); + + let (alpha2, phase2) = Bitfield::from(2, &list2).unwrap(); + let list = alpha2.to_orbital_list().unwrap(); + assert_eq!(list, list0); + assert_eq!(phase2, phase0); + + } + + #[test] + fn creation_alpha_beta() { + + let (alpha, _) = Bitfield::from(2, &[0, 1, 2, 3, 4]).unwrap(); + let (beta , _) = Bitfield::from(2, &[0, 1, 2, 4, 5]).unwrap(); + let det = Bitfield::from_alpha_beta(alpha, beta).unwrap(); + let list = det.to_orbital_list().unwrap(); + assert_eq!(list, [0,1,2,3,4,128,129,130,132,133]); + } +} diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 9956bb73..89f704fe 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -113,17 +113,3 @@ impl File { include!("generated.rs"); -#[cfg(test)] -mod tests { - use super::*; - use std::mem; - use c::*; - - #[test] - fn read_trexio_file() { - println!("============================================"); - println!(" TREXIO MAJOR VERSION : {}", TREXIO_VERSION_MAJOR); - println!("============================================"); - - } -} diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index ac0d4e45..766fe45b 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -98,11 +98,6 @@ pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::Exit } trex_file.write_mo_spin(spin)?; - let (det, phase) = trexio::Bitfield::from(4, vec![0, 1, 2, 3, 4, 5, 6, 151, 152, 153, 154])?; - println!("{} {:?}", phase, det); - println!("{:?}", det.to_orbital_list().unwrap()); - println!("{:?}", det.to_orbital_list().unwrap()); - println!("{:?}", det.to_orbital_list_up_dn().unwrap()); trex_file.close() From 601dfbba89a41682e402f9a1e700432ba1c78e1a Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 13 Oct 2023 11:39:50 +0200 Subject: [PATCH 14/43] Added bitfields --- rust/trexio/src/back_end.rs | 1 + rust/trexio/src/bitfield.rs | 66 +++++++++++++++++++++--------------- rust/trexio/src/exit_code.rs | 1 + 3 files changed, 40 insertions(+), 28 deletions(-) diff --git a/rust/trexio/src/back_end.rs b/rust/trexio/src/back_end.rs index 15c981c7..b26ce7e6 100644 --- a/rust/trexio/src/back_end.rs +++ b/rust/trexio/src/back_end.rs @@ -2,6 +2,7 @@ use crate::c; /// Possible back ends #[derive(Debug)] +#[derive(PartialEq)] pub enum BackEnd { Text, Hdf5, diff --git a/rust/trexio/src/bitfield.rs b/rust/trexio/src/bitfield.rs index 8b1b6b1d..fee35da5 100644 --- a/rust/trexio/src/bitfield.rs +++ b/rust/trexio/src/bitfield.rs @@ -1,4 +1,5 @@ #[derive(Debug)] +#[derive(PartialEq)] pub struct Bitfield { data: Vec, } @@ -10,7 +11,7 @@ impl Bitfield { /// Creates a new bitfield , using a number of i64 elements consistent /// with the number of MOs in the TREXIO file. - pub fn from(n_int: usize, orb_list: &[usize]) -> Result<(Self, f64), ExitCode> { + pub fn from(n_int: usize, orb_list: &[usize]) -> (Self, f64) { let orb_list: Vec = orb_list.iter().map(|&x| x as i32).collect(); let occ_num = orb_list.len().try_into().expect("try_into failed in Bitfield::from"); @@ -28,31 +29,31 @@ impl Bitfield { let result = Bitfield { data }; match ExitCode::from(rc) { - ExitCode::Success => Ok( (result, 1.0) ), - ExitCode::PhaseChange=> Ok( (result,-1.0) ), - x => return Err(x), + ExitCode::Success => (result, 1.0), + ExitCode::PhaseChange=> (result,-1.0), + x => panic!("TREXIO Error {}", x) } } - pub fn from_alpha_beta(alpha: Bitfield, beta: Bitfield) -> Result { + pub fn from_alpha_beta(alpha: &Bitfield, beta: &Bitfield) -> Bitfield { if alpha.data.len() != beta.data.len() { - return Err(ExitCode::InvalidArg2) + panic!("alpha and beta parts have different lengths"); }; let mut data = alpha.data.clone(); data.extend_from_slice(&beta.data); - Ok(Bitfield { data }) + Bitfield { data } } /// Returns the alpha part - pub fn alpha(&self) -> &[i64] { + pub fn alpha(&self) -> Bitfield { let n_int = self.data.len()/2; - &self.data[0..n_int] + Bitfield { data: (&self.data[0..n_int]).to_vec() } } /// Returns the beta part - pub fn beta(&self) -> &[i64] { + pub fn beta(&self) -> Bitfield { let n_int = self.data.len()/2; - &self.data[n_int..2*n_int] + Bitfield { data: (&self.data[n_int..2*n_int]).to_vec() } } /// Converts to a format usable in the C library @@ -70,7 +71,7 @@ impl Bitfield { } /// Converts the bitfield into a list of orbital indices (0-based) - pub fn to_orbital_list(&self) -> Result< Vec, ExitCode> { + pub fn to_orbital_list(&self) -> Vec { let n_int : i32 = self.data.len().try_into().expect("try_into failed in to_orbital_list"); let d1 = self.as_ptr(); @@ -84,7 +85,7 @@ impl Bitfield { let rc = unsafe { c::trexio_to_orbital_list(n_int, d1, list_c, &mut occ_num) }; match ExitCode::from(rc) { ExitCode::Success => (), - x => return Err(x) + x => panic!("TREXIO Error {}", x) }; let occ_num = occ_num as usize; @@ -94,11 +95,11 @@ impl Bitfield { for i in list.iter() { result.push( *i as usize ); } - Ok(result) + result } /// Converts the determinant into a list of orbital indices (0-based) - pub fn to_orbital_list_up_dn(&self) -> Result< (Vec, Vec), ExitCode> { + pub fn to_orbital_list_up_dn(&self) -> (Vec, Vec) { let n_int : i32 = (self.data.len()/2).try_into().expect("try_into failed in to_orbital_list"); let d1 = self.as_ptr(); @@ -116,7 +117,7 @@ impl Bitfield { let rc = unsafe { c::trexio_to_orbital_list_up_dn(n_int, d1, list_up_c, list_dn_c, &mut occ_num_up, &mut occ_num_dn) }; match ExitCode::from(rc) { ExitCode::Success => (), - x => return Err(x) + x => panic!("TREXIO Error {}", x) }; let occ_num_up = occ_num_up as usize; @@ -133,7 +134,7 @@ impl Bitfield { for i in list_dn.iter() { result_dn.push( *i as usize ); } - Ok( (result_up, result_dn) ) + (result_up, result_dn) } } @@ -150,17 +151,17 @@ mod tests { let list1 = vec![0, 1, 2, 4, 3]; let list2 = vec![0, 1, 4, 2, 3]; - let (alpha0, phase0) = Bitfield::from(2, &list0).unwrap(); - let list = alpha0.to_orbital_list().unwrap(); + let (alpha0, phase0) = Bitfield::from(2, &list0); + let list = alpha0.to_orbital_list(); assert_eq!(list, list0); - let (alpha1, phase1) = Bitfield::from(2, &list1).unwrap(); - let list = alpha1.to_orbital_list().unwrap(); + let (alpha1, phase1) = Bitfield::from(2, &list1); + let list = alpha1.to_orbital_list(); assert_eq!(list, list0); assert_eq!(phase1, -phase0); - let (alpha2, phase2) = Bitfield::from(2, &list2).unwrap(); - let list = alpha2.to_orbital_list().unwrap(); + let (alpha2, phase2) = Bitfield::from(2, &list2); + let list = alpha2.to_orbital_list(); assert_eq!(list, list0); assert_eq!(phase2, phase0); @@ -168,11 +169,20 @@ mod tests { #[test] fn creation_alpha_beta() { - - let (alpha, _) = Bitfield::from(2, &[0, 1, 2, 3, 4]).unwrap(); - let (beta , _) = Bitfield::from(2, &[0, 1, 2, 4, 5]).unwrap(); - let det = Bitfield::from_alpha_beta(alpha, beta).unwrap(); - let list = det.to_orbital_list().unwrap(); + let (alpha, _) = Bitfield::from(2, &[0, 1, 2, 3, 4]); + let (beta , _) = Bitfield::from(2, &[0, 1, 2, 4, 5]); + let det = Bitfield::from_alpha_beta(&alpha, &beta); + let list = det.to_orbital_list(); assert_eq!(list, [0,1,2,3,4,128,129,130,132,133]); + assert_eq!(det.alpha(), alpha); + assert_eq!(det.beta(), beta); + } + + #[test] + #[should_panic] + fn creation_alpha_beta_with_different_nint() { + let (alpha, _) = Bitfield::from(1, &[0, 1, 2, 3, 4]); + let (beta , _) = Bitfield::from(2, &[0, 1, 2, 4, 5]); + let _ = Bitfield::from_alpha_beta(&alpha, &beta); } } diff --git a/rust/trexio/src/exit_code.rs b/rust/trexio/src/exit_code.rs index 74cc08d6..2e209581 100644 --- a/rust/trexio/src/exit_code.rs +++ b/rust/trexio/src/exit_code.rs @@ -2,6 +2,7 @@ use crate::c; /// Exit codes #[derive(Debug)] +#[derive(PartialEq)] pub enum ExitCode { Failure, Success, From 3cf8a8c43156e9bba88657d5ea9339d31180438b Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Fri, 13 Oct 2023 13:38:34 +0200 Subject: [PATCH 15/43] write_determinant_list --- rust/trexio/src/bitfield.rs | 9 +++++++++ rust/trexio/src/lib.rs | 27 ++++++++++++++++++++------- rust/trexio/src/test.rs | 23 ++++++++++++++++++++++- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/rust/trexio/src/bitfield.rs b/rust/trexio/src/bitfield.rs index fee35da5..54ee6d36 100644 --- a/rust/trexio/src/bitfield.rs +++ b/rust/trexio/src/bitfield.rs @@ -35,6 +35,10 @@ impl Bitfield { } } + pub fn from_vec(v: &[i64]) -> Bitfield { + Bitfield { data: v.to_vec() } + } + pub fn from_alpha_beta(alpha: &Bitfield, beta: &Bitfield) -> Bitfield { if alpha.data.len() != beta.data.len() { panic!("alpha and beta parts have different lengths"); @@ -98,6 +102,11 @@ impl Bitfield { result } + /// Converts the bitfield into a vector + pub fn as_vec(&self) -> &[i64] { + &self.data + } + /// Converts the determinant into a list of orbital indices (0-based) pub fn to_orbital_list_up_dn(&self) -> (Vec, Vec) { diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 89f704fe..431a189f 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -98,18 +98,31 @@ impl File { rc_return(num, rc) } -/* - pub fn read_determinant_list(&self, offset_file: usize, dset: Vec) -> Result { + pub fn write_determinant_list(&self, offset_file: usize, determinants: &[Bitfield]) -> Result<(), ExitCode> { + let n_int = self.get_int64_num()?; + match determinants.len() { + 0 => return Ok(()), + _ => if determinants[0].as_vec().len() != 2*n_int { + panic!("Inconsistent values of n_int") + } + }; + let offset_file: i64 = offset_file.try_into().expect("try_into failed in read_determinant_list"); + let buffer_size: i64 = determinants.len().try_into().expect("try_into failed in read_determinant_list"); + let mut one_d_array: Vec = Vec::with_capacity(determinants.len() * n_int); + for det in determinants.iter() { + for i in det.as_vec().iter() { + one_d_array.push(i.clone()); + } + } + let dset: *const i64 = one_d_array.as_ptr() as *const i64; let rc = unsafe { - let offset_file: i64 = offset_file; - let buffer_size: *mut i64 = dset.len().try_into().expect("try_into failed in read_determinant_list"); - let dset: *mut i64 = dset.to_c().as_mut_ptr(); - c::trexio_read_determinant_list(self.ptr, offset_file, buffer_size, dset) + c::trexio_write_determinant_list(self.ptr, offset_file, buffer_size, dset) }; + rc_return((), rc) } - */ } + include!("generated.rs"); diff --git a/rust/trexio/src/test.rs b/rust/trexio/src/test.rs index 766fe45b..5e8f46a1 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/src/test.rs @@ -1,13 +1,14 @@ use trexio::back_end::BackEnd; +use trexio::bitfield::Bitfield; pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let () = trexio::info()?; // Prepare data to be written + let n_buffers = 5; let buf_size_sparse = 100/n_buffers; - let buf_size_det = 50/n_buffers; let mut value_sparse_ao_2e_int_eri = vec![0.0f64 ; 100]; let mut index_sparse_ao_2e_int_eri = vec![0i32 ; 400]; for i in 0..100 { @@ -98,6 +99,26 @@ pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::Exit } trex_file.write_mo_spin(spin)?; + // Determinants + // + let det_num = 50; + let mut det_list = Vec::with_capacity(det_num); + for i in 0..det_num { + let mut d = [0i64 ; 6 ]; + for j in 0..6 { + d[j] = 6*(i as i64)+(j as i64); + } + det_list.push( Bitfield::from_vec(&d) ); + } + + let n_buffers = 5; + let buf_size_det = 50/n_buffers; + let mut offset = 0; + for i in 0..n_buffers { + trex_file.write_determinant_list(offset, &det_list[offset..offset+buf_size_det])?; + offset += buf_size_det; + } + trex_file.close() From e6cc8fa59bfe0e4083c678f78110afaeb60a3ed4 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Sun, 15 Oct 2023 18:54:38 +0200 Subject: [PATCH 16/43] Created tests directory --- rust/trexio/src/main.rs | 16 ---------------- rust/trexio/{src/test.rs => tests/write.rs} | 19 +++++++++++++++++-- 2 files changed, 17 insertions(+), 18 deletions(-) delete mode 100644 rust/trexio/src/main.rs rename rust/trexio/{src/test.rs => tests/write.rs} (92%) diff --git a/rust/trexio/src/main.rs b/rust/trexio/src/main.rs deleted file mode 100644 index bd80371c..00000000 --- a/rust/trexio/src/main.rs +++ /dev/null @@ -1,16 +0,0 @@ -use std::error::Error; - -mod test; - -fn main() -> Result<(), Box> { - println!("============================================"); - println!(" TREXIO VERSION : {}", trexio::PACKAGE_VERSION ); - println!("============================================"); - - let file_name = "test_write_rust.dir"; - - let back_end = trexio::BackEnd::Text; - test::test_write(file_name, back_end)?; - - Ok(()) -} diff --git a/rust/trexio/src/test.rs b/rust/trexio/tests/write.rs similarity index 92% rename from rust/trexio/src/test.rs rename to rust/trexio/tests/write.rs index 5e8f46a1..abcaf814 100644 --- a/rust/trexio/src/test.rs +++ b/rust/trexio/tests/write.rs @@ -1,9 +1,8 @@ use trexio::back_end::BackEnd; use trexio::bitfield::Bitfield; -pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { - let () = trexio::info()?; +fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { // Prepare data to be written @@ -123,3 +122,19 @@ pub fn test_write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::Exit trex_file.close() } + +#[test] +pub fn info() { + trexio::info(); +} + +#[test] +pub fn wite_text() { + write("test_write.dir", trexio::BackEnd::Text); +} + +#[test] +pub fn wite_hdf5() { + write("test_write.hdf5", trexio::BackEnd::Hdf5); +} + From 38946c8ab7019752a8928dab5aea2ec4aaf24e8c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 16 Oct 2023 12:52:04 +0200 Subject: [PATCH 17/43] Added sparse write --- rust/trexio/build.py | 37 ++++++++- rust/trexio/tests/{write.rs => read_write.rs} | 76 +++++++++---------- rust/trexio/tmp/.gitignore | 1 + 3 files changed, 72 insertions(+), 42 deletions(-) rename rust/trexio/tests/{write.rs => read_write.rs} (72%) create mode 100644 rust/trexio/tmp/.gitignore diff --git a/rust/trexio/build.py b/rust/trexio/build.py index cf6746ed..02ffc15f 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -260,8 +260,6 @@ def make_functions(): } """ ] r += [ '\n'.join(t) -.replace("{type_c}",type_c) -.replace("{type_r}",type_r) .replace("{group}",group) .replace("{group_l}",group_l) .replace("{element}",element) @@ -270,6 +268,7 @@ def make_functions(): r += [ """ pub fn write_{group_l}_{element_l}(&self, data: Vec<&str>) -> Result<(), ExitCode> { let mut size = 0; + // Find longest string for s in data.iter() { let l = s.len(); size = if l>size {l} else {size}; @@ -283,6 +282,38 @@ def make_functions(): rc_return((), rc) } """ +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + + elif data[group][element][0] in [ "float sparse" ]: + size = len(data[group][element][1]) + typ = "&[(" + ",".join( [ "usize" for _ in range(size) ]) + ", f64)]" + r += [ (""" +pub fn write_{group_l}_{element_l}(&self, offset: usize, data: {typ}) -> Result<(), ExitCode> { + let mut idx = Vec::::with_capacity({size}*data.len()); + let mut val = Vec::::with_capacity(data.len()); + // Array of indices + for d in data.iter() { +""" + +'\n'.join([ f" idx.push(d.{i}.try_into().unwrap());" for i in range(size) ]) + +f"\n val.push(d.{size});" + +""" + } + + let size_max: i64 = data.len().try_into().expect("try_into failed in write_{group}_{element}"); + let buffer_size = size_max; + let idx_ptr = idx.as_ptr() as *const i32; + let val_ptr = val.as_ptr() as *const f64; + let offset: i64 = offset.try_into().expect("try_into failed in write_{group}_{element}"); + let rc = unsafe { c::trexio_write_safe_{group}_{element}(self.ptr, + offset, buffer_size, idx_ptr, size_max, val_ptr, size_max) }; + rc_return((), rc) +} +""") +.replace("{size}",str(size)) +.replace("{typ}",typ) .replace("{type_c}",type_c) .replace("{type_r}",type_r) .replace("{group}",group) @@ -290,8 +321,6 @@ def make_functions(): .replace("{element}",element) .replace("{element_l}",element_l) ] - elif data[group][element][0] in [ "float sparse" ]: - pass diff --git a/rust/trexio/tests/write.rs b/rust/trexio/tests/read_write.rs similarity index 72% rename from rust/trexio/tests/write.rs rename to rust/trexio/tests/read_write.rs index abcaf814..13b072fc 100644 --- a/rust/trexio/tests/write.rs +++ b/rust/trexio/tests/read_write.rs @@ -6,20 +6,6 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { // Prepare data to be written - let n_buffers = 5; - let buf_size_sparse = 100/n_buffers; - let mut value_sparse_ao_2e_int_eri = vec![0.0f64 ; 100]; - let mut index_sparse_ao_2e_int_eri = vec![0i32 ; 400]; - for i in 0..100 { - let i : usize = i; - let j : i32 = i as i32; - value_sparse_ao_2e_int_eri[i] = 3.14 + (j as f64); - index_sparse_ao_2e_int_eri[4*i + 0] = 4*j - 3; - index_sparse_ao_2e_int_eri[4*i + 1] = 4*j+1 - 3; - index_sparse_ao_2e_int_eri[4*i + 2] = 4*j+2 - 3; - index_sparse_ao_2e_int_eri[4*i + 3] = 4*j+3 - 3; - } - let nucleus_num = 12; let state_id = 2; let charge = vec![6., 6., 6., 6., 6., 6., 1., 1., 1., 1., 1., 1.0f64]; @@ -38,21 +24,11 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let mo_num = 150; let ao_num = 1000; let basis_shell_num = 24; - let basis_nucleus_index = vec![ 0usize, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 ]; - - let label = vec![ - "C", - "Na", - "C", - "C 66", - "C", - "C", - "H 99", - "Ru", - "H", - "H", - "H", - "H" ]; + let basis_nucleus_index: Vec = (0..24).collect(); + + let label = vec![ "C", "Na", "C", "C 66", "C", + "C", "H 99", "Ru", "H", "H", "H", "H" ]; + let sym_str = "B3U with some comments"; @@ -98,8 +74,27 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { } trex_file.write_mo_spin(spin)?; + // Integrals + let nmax = 100; + let mut ao_2e_int_eri = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); + + let n_buffers = 5; + let bufsize = nmax/n_buffers; + + for i in 0..100 { + // Quadruplet of indices + value + let data = (4*i, 4*i+1, 4*i+2, 4*i+3, 3.14 + (i as f64)); + ao_2e_int_eri.push(data); + } + + let mut offset = 0; + for i in 0..n_buffers { + trex_file.write_ao_2e_int_eri(offset, &ao_2e_int_eri[offset..offset+bufsize])?; + offset += bufsize; + } + + // Determinants - // let det_num = 50; let mut det_list = Vec::with_capacity(det_num); for i in 0..det_num { @@ -111,11 +106,11 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { } let n_buffers = 5; - let buf_size_det = 50/n_buffers; + let bufsize = 50/n_buffers; let mut offset = 0; for i in 0..n_buffers { - trex_file.write_determinant_list(offset, &det_list[offset..offset+buf_size_det])?; - offset += buf_size_det; + trex_file.write_determinant_list(offset, &det_list[offset..offset+bufsize])?; + offset += bufsize; } @@ -125,16 +120,21 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { #[test] pub fn info() { - trexio::info(); + let _ = trexio::info(); } + +use std::fs; + #[test] -pub fn wite_text() { - write("test_write.dir", trexio::BackEnd::Text); +pub fn text_backend() { + let _ = write("tmp/test_write.dir", trexio::BackEnd::Text); + fs::remove_dir_all("tmp/test_write.dir").unwrap() } #[test] -pub fn wite_hdf5() { - write("test_write.hdf5", trexio::BackEnd::Hdf5); +pub fn hdf5_backend() { + let _ = write("tmp/test_write.hdf5", trexio::BackEnd::Hdf5); + fs::remove_file("tmp/test_write.hdf5").unwrap() } diff --git a/rust/trexio/tmp/.gitignore b/rust/trexio/tmp/.gitignore new file mode 100644 index 00000000..72e8ffc0 --- /dev/null +++ b/rust/trexio/tmp/.gitignore @@ -0,0 +1 @@ +* From 000c83f2755ec686776c18594a193fe03abee5e8 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 17 Oct 2023 18:40:03 +0200 Subject: [PATCH 18/43] Introducing read test --- rust/trexio/build.py | 114 +++++++++++++++++----- rust/trexio/tests/read_write.rs | 162 +++++++++++++++++++++++++++----- 2 files changed, 230 insertions(+), 46 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 02ffc15f..74fb55dc 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -83,6 +83,9 @@ def make_functions(): "str" : "str"} r = [""" +use std::iter::zip; +use std::ffi::CString; + impl File {""" ] for group in data: @@ -147,15 +150,17 @@ def make_functions(): elif data[group][element][0] in [ "str" ]: r += [ """ pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result { - let mut data_c = String::with_capacity(capacity); - let data_c = data_c.as_mut_ptr() as *mut c_char; + let data_c = CString::new(vec![ b' ' ; capacity]).expect("CString::new failed"); let (rc, data) = unsafe { + let data_c = data_c.into_raw() as *mut c_char; let rc = c::trexio_read_{group}_{element}(self.ptr, data_c, capacity.try_into().expect("try_into failed in read_{group_l}_{element_l}")); - (rc, String::from_raw_parts(data_c as *mut u8, capacity, capacity)) + (rc, CString::from_raw(data_c)) }; - rc_return(data, rc) + let result : String = CString::into_string(data).expect("into_string failed in read_{group_l}_{element_l}"); + rc_return(result, rc) } + pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> { let size : i32 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = string_to_c(data); @@ -205,11 +210,12 @@ def make_functions(): t_prime += [f" let size = size * {dim};"] t += t_prime t += [ """ - let data: Vec<{type_r}> = Vec::with_capacity(size); - let data_c = data.as_ptr() as *mut {type_c}; - let (rc, data) = unsafe { - let rc = c::trexio_read_safe_{group}_{element}_64(self.ptr, data_c, size.try_into().expect("try_into failed in read_{group}_{element}")); - (rc, data) + let mut data: Vec<{type_r}> = Vec::with_capacity(size); + let rc = unsafe { + let data_c = data.as_mut_ptr() as *mut {type_c}; + let rc = c::trexio_read_safe_{group}_{element}_64(self.ptr, data_c, size.try_into().expect("try_into failed in read_{group}_{element} (size)")); + data.set_len(size); + rc }; rc_return(data, rc) } @@ -223,7 +229,7 @@ def make_functions(): .replace("{element_l}",element_l) ] r += [ """ -pub fn write_{group_l}_{element_l}(&self, data: Vec<{type_r}>) -> Result<(), ExitCode> { +pub fn write_{group_l}_{element_l}(&self, data: &[{type_r}]) -> Result<(), ExitCode> { let size: i64 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = data.as_ptr() as *const {type_c}; let rc = unsafe { c::trexio_write_safe_{group}_{element}_64(self.ptr, data, size) }; @@ -249,14 +255,40 @@ def make_functions(): t_prime += [f" let size = size * {dim};"] t += t_prime t += [ """ - let data = vec![ String::with_capacity(capacity) ; size ]; - let data_c = data.as_ptr() as *mut *mut c_char; - - let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}(self.ptr, data_c, capacity.try_into().expect("try_into failed in read_{group}_{element}") ); - (rc, data) + // Allocate an array of *mut i8 pointers (initialized to null) + let mut dset_out: Vec<*mut i8> = vec![std::ptr::null_mut(); size]; + + // Allocate C-style strings and populate dset_out + for i in 0..size{ + let c_str: *mut i8 = unsafe { std::alloc::alloc_zeroed(std::alloc::Layout::array::(capacity).unwrap()) as *mut i8 }; + if c_str.is_null() { + return Err(ExitCode::AllocationFailed); + } + dset_out[i] = c_str; + } + + + let rc = unsafe { + c::trexio_read_{group}_{element}(self.ptr, dset_out.as_mut_ptr(), capacity.try_into().expect("try_into failed in read_{group}_{element} (capacity)") ) }; - rc_return(data, rc) + + // Convert the populated C strings to Rust Strings + let mut rust_strings = Vec::new(); + for &c_str in &dset_out { + let rust_str = unsafe { + std::ffi::CStr::from_ptr(c_str) + .to_string_lossy() + .into_owned() + }; + rust_strings.push(rust_str); + } + + // Clean up allocated C strings + for &c_str in &dset_out { + unsafe { std::alloc::dealloc(c_str as *mut u8, std::alloc::Layout::array::(capacity).unwrap()) }; + } + + rc_return(rust_strings, rc) } """ ] r += [ '\n'.join(t) @@ -266,7 +298,7 @@ def make_functions(): .replace("{element_l}",element_l) ] r += [ """ -pub fn write_{group_l}_{element_l}(&self, data: Vec<&str>) -> Result<(), ExitCode> { +pub fn write_{group_l}_{element_l}(&self, data: &[&str]) -> Result<(), ExitCode> { let mut size = 0; // Find longest string for s in data.iter() { @@ -274,9 +306,9 @@ def make_functions(): size = if l>size {l} else {size}; } size = size+1; - let data_c : Vec = data.iter().map(|&x| string_to_c(x)).collect::>(); + let data_c : Vec = data.iter().map(|&x| string_to_c(x)).collect::>(); let data_c : Vec<*const c_char> = data_c.iter().map(|x| x.as_ptr() as *const c_char).collect::>(); - let size : i32 = size.try_into().expect("try_into failed in write_{group}_{element}"); + let size : i32 = size.try_into().expect("try_into failed in write_{group}_{element} (size)"); let data_c = data_c.as_ptr() as *mut *const c_char; let rc = unsafe { c::trexio_write_{group}_{element}(self.ptr, data_c, size) }; rc_return((), rc) @@ -289,12 +321,42 @@ def make_functions(): elif data[group][element][0] in [ "float sparse" ]: size = len(data[group][element][1]) - typ = "&[(" + ",".join( [ "usize" for _ in range(size) ]) + ", f64)]" + typ = "(" + ",".join( [ "usize" for _ in range(size) ]) + ", f64)" + r += [ (""" +pub fn read_{group_l}_{element_l}(&self, offset: usize, buffer_size:usize) -> Result, ExitCode> { + let idx = Vec::::with_capacity({size}*buffer_size); + let val = Vec::::with_capacity(buffer_size); + let idx_ptr = idx.as_ptr() as *mut i32; + let val_ptr = val.as_ptr() as *mut f64; + let offset: i64 = offset.try_into().expect("try_into failed in read_{group}_{element} (offset)"); + let mut buffer_size_read: i64 = buffer_size.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); + let rc = unsafe { c::trexio_read_safe_{group}_{element}(self.ptr, + offset, &mut buffer_size_read, idx_ptr, buffer_size_read, val_ptr, buffer_size_read) }; + let idx: Vec::<&[i32]> = idx.chunks({size}).collect(); + + let mut result = Vec::<{typ}>::with_capacity(buffer_size); + for (i, v) in zip(idx, val) { + result.push( ( """ + +','.join([ f"i[{k}].try_into().unwrap()" for k in range(size) ]) + +""",v) ); + } + rc_return(result, rc) +} +""") +.replace("{size}",str(size)) +.replace("{typ}",typ) +.replace("{type_c}",type_c) +.replace("{type_r}",type_r) +.replace("{group}",group) +.replace("{group_l}",group_l) +.replace("{element}",element) +.replace("{element_l}",element_l) ] + r += [ (""" -pub fn write_{group_l}_{element_l}(&self, offset: usize, data: {typ}) -> Result<(), ExitCode> { +pub fn write_{group_l}_{element_l}(&self, offset: usize, data: &[{typ}]) -> Result<(), ExitCode> { let mut idx = Vec::::with_capacity({size}*data.len()); let mut val = Vec::::with_capacity(data.len()); - // Array of indices + for d in data.iter() { """ + '\n'.join([ f" idx.push(d.{i}.try_into().unwrap());" for i in range(size) ]) + @@ -302,11 +364,11 @@ def make_functions(): """ } - let size_max: i64 = data.len().try_into().expect("try_into failed in write_{group}_{element}"); + let size_max: i64 = data.len().try_into().expect("try_into failed in write_{group}_{element} (size_max)"); let buffer_size = size_max; let idx_ptr = idx.as_ptr() as *const i32; let val_ptr = val.as_ptr() as *const f64; - let offset: i64 = offset.try_into().expect("try_into failed in write_{group}_{element}"); + let offset: i64 = offset.try_into().expect("try_into failed in write_{group}_{element} (offset)"); let rc = unsafe { c::trexio_write_safe_{group}_{element}(self.ptr, offset, buffer_size, idx_ptr, size_max, val_ptr, size_max) }; rc_return((), rc) @@ -324,6 +386,8 @@ def make_functions(): + + r += [ "}" ] with open(generated_rs,'w') as f: f.write('\n'.join(r)) diff --git a/rust/trexio/tests/read_write.rs b/rust/trexio/tests/read_write.rs index 13b072fc..6e4c35a9 100644 --- a/rust/trexio/tests/read_write.rs +++ b/rust/trexio/tests/read_write.rs @@ -9,18 +9,19 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let nucleus_num = 12; let state_id = 2; let charge = vec![6., 6., 6., 6., 6., 6., 1., 1., 1., 1., 1., 1.0f64]; - let coord = vec![ 0.00000000f64, 1.39250319 , 0.00 , - -1.20594314, 0.69625160 , 0.00 , - -1.20594314, -0.69625160 , 0.00 , - 0.00000000, -1.39250319 , 0.00 , - 1.20594314, -0.69625160 , 0.00 , - 1.20594314, 0.69625160 , 0.00 , - -2.14171677, 1.23652075 , 0.00 , - -2.14171677, -1.23652075 , 0.00 , - 0.00000000, -2.47304151 , 0.00 , - 2.14171677, -1.23652075 , 0.00 , - 2.14171677, 1.23652075 , 0.00 , - 0.00000000, 2.47304151 , 0.00 ]; + let coord = vec![ [ 0.00000000f64, 1.39250319 , 0.00 ], + [ -1.20594314, 0.69625160 , 0.00 ], + [ -1.20594314, -0.69625160 , 0.00 ], + [ 0.00000000, -1.39250319 , 0.00 ], + [ 1.20594314, -0.69625160 , 0.00 ], + [ 1.20594314, 0.69625160 , 0.00 ], + [ -2.14171677, 1.23652075 , 0.00 ], + [ -2.14171677, -1.23652075 , 0.00 ], + [ 0.00000000, -2.47304151 , 0.00 ], + [ 2.14171677, -1.23652075 , 0.00 ], + [ 2.14171677, 1.23652075 , 0.00 ], + [ 0.00000000, 2.47304151 , 0.00 ]]; + let flat_coord = coord.into_iter().flatten().collect::>(); let mo_num = 150; let ao_num = 1000; let basis_shell_num = 24; @@ -32,7 +33,7 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let sym_str = "B3U with some comments"; - println!("{}", file_name); + println!("Write {}", file_name); assert!( ! trexio::File::inquire(file_name)? ); let trex_file = trexio::File::open(file_name, 'w', back_end)?; @@ -45,12 +46,12 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { assert!( ! trex_file.has_determinant_list()? ); trex_file.write_nucleus_num(nucleus_num)?; - trex_file.write_nucleus_charge(charge)?; + trex_file.write_nucleus_charge(&charge)?; trex_file.write_nucleus_point_group(sym_str)?; - trex_file.write_nucleus_coord(coord)?; - trex_file.write_nucleus_label(label)?; + trex_file.write_nucleus_coord(&flat_coord)?; + trex_file.write_nucleus_label(&label)?; trex_file.write_basis_shell_num(basis_shell_num)?; - trex_file.write_basis_nucleus_index(basis_nucleus_index)?; + trex_file.write_basis_nucleus_index(&basis_nucleus_index)?; trex_file.write_state_id(state_id)?; if ! trex_file.has_ao_num()? { @@ -66,13 +67,13 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let e: f64 = i as f64 -100.0f64; energy.push(e); } - trex_file.write_mo_energy(energy)?; + trex_file.write_mo_energy(&energy)?; let mut spin = vec![0 ; mo_num]; for i in mo_num/2..mo_num { spin[i] = 1; } - trex_file.write_mo_spin(spin)?; + trex_file.write_mo_spin(&spin)?; // Integrals let nmax = 100; @@ -88,7 +89,7 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { } let mut offset = 0; - for i in 0..n_buffers { + for _ in 0..n_buffers { trex_file.write_ao_2e_int_eri(offset, &ao_2e_int_eri[offset..offset+bufsize])?; offset += bufsize; } @@ -108,7 +109,7 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let n_buffers = 5; let bufsize = 50/n_buffers; let mut offset = 0; - for i in 0..n_buffers { + for _ in 0..n_buffers { trex_file.write_determinant_list(offset, &det_list[offset..offset+bufsize])?; offset += bufsize; } @@ -118,6 +119,123 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { } +fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { + + println!("Read {}", file_name); + assert!( trexio::File::inquire(file_name)? ); + + let trex_file = trexio::File::open(file_name, 'r', back_end)?; + + assert!( trex_file.has_nucleus()? ); + assert!( trex_file.has_nucleus_num()? ); + assert!( trex_file.has_nucleus_charge()? ); + assert!( trex_file.has_ao_2e_int()? ); + assert!( trex_file.has_ao_2e_int_eri()? ); + assert!( trex_file.has_determinant_list()? ); + + let nucleus_num = trex_file.read_nucleus_num()?; + assert_eq!(nucleus_num, 12); + + let sym_str = trex_file.read_nucleus_point_group(64)?; + assert_eq!(sym_str, "B3U with some comments"); + + let charge = trex_file.read_nucleus_charge()?; + assert_eq!(charge, vec![6., 6., 6., 6., 6., 6., 1., 1., 1., 1., 1., 1.0f64]); + + let coord = trex_file.read_nucleus_coord()?; + assert_eq!(coord, vec![ 0.00000000f64, 1.39250319 , 0.00, + -1.20594314, 0.69625160 , 0.00, + -1.20594314, -0.69625160 , 0.00, + 0.00000000, -1.39250319 , 0.00, + 1.20594314, -0.69625160 , 0.00, + 1.20594314, 0.69625160 , 0.00, + -2.14171677, 1.23652075 , 0.00, + -2.14171677, -1.23652075 , 0.00, + 0.00000000, -2.47304151 , 0.00, + 2.14171677, -1.23652075 , 0.00, + 2.14171677, 1.23652075 , 0.00, + 0.00000000, 2.47304151 , 0.00 ]); + + let label = trex_file.read_nucleus_label(6)?; + assert_eq!(label, vec![ "C", "Na", "C", "C 66", "C", + "C", "H 99", "Ru", "H", "H", "H", "H" ]); + + let basis_shell_num = trex_file.read_basis_shell_num()?; + assert_eq!(basis_shell_num, 24); + + let basis_nucleus_index = trex_file.read_basis_nucleus_index()?; + let ref_val : Vec = (0..24).collect(); + assert_eq!(basis_nucleus_index, ref_val); + + let state_id = trex_file.read_state_id()?; + assert_eq!(state_id, 2); + + let ao_num = trex_file.read_ao_num()?; + assert_eq!(ao_num, 1000); + + let mo_num = trex_file.read_mo_num()?; + assert_eq!(mo_num, 150); + + let mut energy_ref = Vec::with_capacity(mo_num); + for i in 0..mo_num { + let e: f64 = i as f64 -100.0f64; + energy_ref.push(e); + } + let energy = trex_file.read_mo_energy()?; + assert_eq!(energy, energy_ref); + + let mut spin_ref = vec![0 ; mo_num]; + for i in mo_num/2..mo_num { + spin_ref[i] = 1; + } + let spin = trex_file.read_mo_spin()?; + assert_eq!(spin, spin_ref); + +/* + // Integrals + let nmax = 100; + let mut ao_2e_int_eri_ref = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); + + let n_buffers = 5; + let bufsize = nmax/n_buffers; + + for i in 0..100 { + // Quadruplet of indices + value + let data = (4*i, 4*i+1, 4*i+2, 4*i+3, 3.14 + (i as f64)); + ao_2e_int_eri_ref.push(data); + } + + let mut offset = 0; + for i in 0..n_buffers { + trex_file.read_ao_2e_int_eri(offset, &ao_2e_int_eri[offset..offset+bufsize])?; + offset += bufsize; + } + + + // Determinants + let det_num = 50; + let mut det_list = Vec::with_capacity(det_num); + for i in 0..det_num { + let mut d = [0i64 ; 6 ]; + for j in 0..6 { + d[j] = 6*(i as i64)+(j as i64); + } + det_list.push( Bitfield::from_vec(&d) ); + } + + let n_buffers = 5; + let bufsize = 50/n_buffers; + let mut offset = 0; + for i in 0..n_buffers { + trex_file.write_determinant_list(offset, &det_list[offset..offset+bufsize])?; + offset += bufsize; + } +*/ + + trex_file.close() + +} + #[test] pub fn info() { let _ = trexio::info(); @@ -129,12 +247,14 @@ use std::fs; #[test] pub fn text_backend() { let _ = write("tmp/test_write.dir", trexio::BackEnd::Text); + let _ = read("tmp/test_write.dir", trexio::BackEnd::Text); fs::remove_dir_all("tmp/test_write.dir").unwrap() } #[test] pub fn hdf5_backend() { let _ = write("tmp/test_write.hdf5", trexio::BackEnd::Hdf5); + let _ = read("tmp/test_write.hdf5", trexio::BackEnd::Hdf5); fs::remove_file("tmp/test_write.hdf5").unwrap() } From 3a4726cd783f9f5cc0a6853dfd9c4b190ddadb2b Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 17 Oct 2023 18:56:36 +0200 Subject: [PATCH 19/43] Introducing read test --- rust/trexio/build.py | 10 +++++++--- rust/trexio/tests/read_write.rs | 11 +++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 74fb55dc..ecd83f5f 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -324,14 +324,18 @@ def make_functions(): typ = "(" + ",".join( [ "usize" for _ in range(size) ]) + ", f64)" r += [ (""" pub fn read_{group_l}_{element_l}(&self, offset: usize, buffer_size:usize) -> Result, ExitCode> { - let idx = Vec::::with_capacity({size}*buffer_size); - let val = Vec::::with_capacity(buffer_size); + let mut idx = Vec::::with_capacity({size}*buffer_size); + let mut val = Vec::::with_capacity(buffer_size); let idx_ptr = idx.as_ptr() as *mut i32; let val_ptr = val.as_ptr() as *mut f64; let offset: i64 = offset.try_into().expect("try_into failed in read_{group}_{element} (offset)"); let mut buffer_size_read: i64 = buffer_size.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); let rc = unsafe { c::trexio_read_safe_{group}_{element}(self.ptr, - offset, &mut buffer_size_read, idx_ptr, buffer_size_read, val_ptr, buffer_size_read) }; + offset, &mut buffer_size_read, idx_ptr, buffer_size_read, val_ptr, buffer_size_read) + }; + let buffer_size_read: usize = buffer_size_read.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); + unsafe { idx.set_len({size}*buffer_size_read) }; + unsafe { val.set_len(buffer_size_read) }; let idx: Vec::<&[i32]> = idx.chunks({size}).collect(); let mut result = Vec::<{typ}>::with_capacity(buffer_size); diff --git a/rust/trexio/tests/read_write.rs b/rust/trexio/tests/read_write.rs index 6e4c35a9..eb723614 100644 --- a/rust/trexio/tests/read_write.rs +++ b/rust/trexio/tests/read_write.rs @@ -191,12 +191,11 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let spin = trex_file.read_mo_spin()?; assert_eq!(spin, spin_ref); -/* // Integrals let nmax = 100; let mut ao_2e_int_eri_ref = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); - let n_buffers = 5; + let n_buffers = 4; let bufsize = nmax/n_buffers; for i in 0..100 { @@ -206,12 +205,16 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { } let mut offset = 0; - for i in 0..n_buffers { - trex_file.read_ao_2e_int_eri(offset, &ao_2e_int_eri[offset..offset+bufsize])?; + let mut ao_2e_int_eri = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); + for _ in 0..n_buffers { + let buffer = trex_file.read_ao_2e_int_eri(offset, bufsize)?; offset += bufsize; + ao_2e_int_eri.extend(buffer); } + assert_eq!(ao_2e_int_eri_ref, ao_2e_int_eri); +/* // Determinants let det_num = 50; let mut det_list = Vec::with_capacity(det_num); From 9d2866c84bd1f5c5c2b62147ee2ac5af76d1ce6c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 17 Oct 2023 19:32:59 +0200 Subject: [PATCH 20/43] Need to check sparse read --- rust/trexio/src/lib.rs | 24 ++++++++++++++++++++++-- rust/trexio/tests/read_write.rs | 28 ++++++++++++++++------------ 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 431a189f..8a4bbc43 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -106,8 +106,8 @@ impl File { panic!("Inconsistent values of n_int") } }; - let offset_file: i64 = offset_file.try_into().expect("try_into failed in read_determinant_list"); - let buffer_size: i64 = determinants.len().try_into().expect("try_into failed in read_determinant_list"); + let offset_file: i64 = offset_file.try_into().expect("try_into failed in write_determinant_list"); + let buffer_size: i64 = determinants.len().try_into().expect("try_into failed in write_determinant_list"); let mut one_d_array: Vec = Vec::with_capacity(determinants.len() * n_int); for det in determinants.iter() { for i in det.as_vec().iter() { @@ -121,6 +121,26 @@ impl File { rc_return((), rc) } + pub fn read_determinant_list(&self, offset_file: usize, buffer_size: usize) -> Result, ExitCode> { + let n_int = self.get_int64_num()?; + let mut one_d_array: Vec = Vec::with_capacity(buffer_size * n_int); + let one_d_array_ptr = one_d_array.as_ptr() as *mut i64; + let rc = unsafe { + let offset_file: i64 = offset_file.try_into().expect("try_into failed in read_determinant_list (offset_file)"); + let mut buffer_size_read: i64 = buffer_size.try_into().expect("try_into failed in read_determinant_list (buffer_size)"); + let rc = c::trexio_read_determinant_list(self.ptr, offset_file, &mut buffer_size_read, one_d_array_ptr); + one_d_array.set_len(buffer_size_read.try_into() + .expect("try_into failed in read_determinant_list (buffer_size_read)")); + rc + }; + let result: Vec:: = one_d_array.chunks(n_int) + .collect::>() + .iter() + .map(|x| (Bitfield::from_vec(&x))) + .collect::>(); + rc_return(result, rc) + } + } include!("generated.rs"); diff --git a/rust/trexio/tests/read_write.rs b/rust/trexio/tests/read_write.rs index eb723614..8b834ad2 100644 --- a/rust/trexio/tests/read_write.rs +++ b/rust/trexio/tests/read_write.rs @@ -195,12 +195,13 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let nmax = 100; let mut ao_2e_int_eri_ref = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); - let n_buffers = 4; - let bufsize = nmax/n_buffers; + let n_buffers = 8; + let bufsize = nmax/n_buffers+10; +/* TODO: check from here */ for i in 0..100 { // Quadruplet of indices + value - let data = (4*i, 4*i+1, 4*i+2, 4*i+3, 3.14 + (i as f64)); + let data = (4*i, 4*i+1, 4*i+2, 4*i+3, 3.13 + (i as f64)); ao_2e_int_eri_ref.push(data); } @@ -214,26 +215,29 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { assert_eq!(ao_2e_int_eri_ref, ao_2e_int_eri); -/* // Determinants - let det_num = 50; - let mut det_list = Vec::with_capacity(det_num); + let det_num = trex_file.read_determinant_num()?; + assert_eq!(det_num, 50); + + let mut det_list_ref = Vec::with_capacity(det_num); for i in 0..det_num { let mut d = [0i64 ; 6 ]; for j in 0..6 { d[j] = 6*(i as i64)+(j as i64); } - det_list.push( Bitfield::from_vec(&d) ); + det_list_ref.push( Bitfield::from_vec(&d) ); } - let n_buffers = 5; - let bufsize = 50/n_buffers; + let n_buffers = 8; + let bufsize = det_num/n_buffers + 10; let mut offset = 0; - for i in 0..n_buffers { - trex_file.write_determinant_list(offset, &det_list[offset..offset+bufsize])?; + let mut det_list: Vec = Vec::with_capacity(det_num); + for _ in 0..n_buffers { + let buffer = trex_file.read_determinant_list(offset, bufsize)?; + det_list.extend(buffer); offset += bufsize; } -*/ + assert_eq!(det_list_ref, det_list); trex_file.close() From 5f5267e34d920ce52e951512cd301cd584ddd87c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 18 Oct 2023 11:04:39 +0200 Subject: [PATCH 21/43] Tests pass --- rust/trexio/build.py | 6 +++++- rust/trexio/src/lib.rs | 16 ++++++++++------ rust/trexio/tests/read_write.rs | 17 ++++++++--------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index ecd83f5f..3675b111 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -333,7 +333,11 @@ def make_functions(): let rc = unsafe { c::trexio_read_safe_{group}_{element}(self.ptr, offset, &mut buffer_size_read, idx_ptr, buffer_size_read, val_ptr, buffer_size_read) }; - let buffer_size_read: usize = buffer_size_read.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); + let rc = match ExitCode::from(rc) { + ExitCode::End => ExitCode::to_c(&ExitCode::Success), + _ => rc + }; + let buffer_size_read: usize = buffer_size_read.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); unsafe { idx.set_len({size}*buffer_size_read) }; unsafe { val.set_len(buffer_size_read) }; let idx: Vec::<&[i32]> = idx.chunks({size}).collect(); diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 8a4bbc43..486346a9 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -123,17 +123,21 @@ impl File { pub fn read_determinant_list(&self, offset_file: usize, buffer_size: usize) -> Result, ExitCode> { let n_int = self.get_int64_num()?; - let mut one_d_array: Vec = Vec::with_capacity(buffer_size * n_int); + let mut one_d_array: Vec = Vec::with_capacity(buffer_size * 2* n_int); let one_d_array_ptr = one_d_array.as_ptr() as *mut i64; let rc = unsafe { let offset_file: i64 = offset_file.try_into().expect("try_into failed in read_determinant_list (offset_file)"); let mut buffer_size_read: i64 = buffer_size.try_into().expect("try_into failed in read_determinant_list (buffer_size)"); let rc = c::trexio_read_determinant_list(self.ptr, offset_file, &mut buffer_size_read, one_d_array_ptr); - one_d_array.set_len(buffer_size_read.try_into() - .expect("try_into failed in read_determinant_list (buffer_size_read)")); - rc - }; - let result: Vec:: = one_d_array.chunks(n_int) + let buffer_size_read: usize = buffer_size_read.try_into().expect("try_into failed in read_determinant_list (buffer_size)"); + one_d_array.set_len(n_int*2usize*buffer_size_read); + match ExitCode::from(rc) { + ExitCode::End => ExitCode::to_c(&ExitCode::Success), + ExitCode::Success => { assert_eq!(buffer_size_read, buffer_size); rc } + _ => rc + } + }; + let result: Vec:: = one_d_array.chunks(2*n_int) .collect::>() .iter() .map(|x| (Bitfield::from_vec(&x))) diff --git a/rust/trexio/tests/read_write.rs b/rust/trexio/tests/read_write.rs index 8b834ad2..fead812f 100644 --- a/rust/trexio/tests/read_write.rs +++ b/rust/trexio/tests/read_write.rs @@ -198,10 +198,9 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let n_buffers = 8; let bufsize = nmax/n_buffers+10; -/* TODO: check from here */ for i in 0..100 { // Quadruplet of indices + value - let data = (4*i, 4*i+1, 4*i+2, 4*i+3, 3.13 + (i as f64)); + let data = (4*i, 4*i+1, 4*i+2, 4*i+3, 3.14 + (i as f64)); ao_2e_int_eri_ref.push(data); } @@ -209,7 +208,7 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let mut ao_2e_int_eri = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); for _ in 0..n_buffers { let buffer = trex_file.read_ao_2e_int_eri(offset, bufsize)?; - offset += bufsize; + offset += buffer.len(); ao_2e_int_eri.extend(buffer); } assert_eq!(ao_2e_int_eri_ref, ao_2e_int_eri); @@ -229,13 +228,13 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { } let n_buffers = 8; - let bufsize = det_num/n_buffers + 10; + let bufsize = det_num/n_buffers + 20; let mut offset = 0; let mut det_list: Vec = Vec::with_capacity(det_num); for _ in 0..n_buffers { let buffer = trex_file.read_determinant_list(offset, bufsize)?; + offset += buffer.len(); det_list.extend(buffer); - offset += bufsize; } assert_eq!(det_list_ref, det_list); @@ -253,15 +252,15 @@ use std::fs; #[test] pub fn text_backend() { - let _ = write("tmp/test_write.dir", trexio::BackEnd::Text); - let _ = read("tmp/test_write.dir", trexio::BackEnd::Text); + let _ = write("tmp/test_write.dir", trexio::BackEnd::Text).unwrap(); + let _ = read("tmp/test_write.dir", trexio::BackEnd::Text).unwrap(); fs::remove_dir_all("tmp/test_write.dir").unwrap() } #[test] pub fn hdf5_backend() { - let _ = write("tmp/test_write.hdf5", trexio::BackEnd::Hdf5); - let _ = read("tmp/test_write.hdf5", trexio::BackEnd::Hdf5); + let _ = write("tmp/test_write.hdf5", trexio::BackEnd::Hdf5).unwrap(); + let _ = read("tmp/test_write.hdf5", trexio::BackEnd::Hdf5).unwrap(); fs::remove_file("tmp/test_write.hdf5").unwrap() } From dd3e86498dbb202ae5295ae455f4588e17da6b64 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 18 Oct 2023 12:09:02 +0200 Subject: [PATCH 22/43] Added documentation --- rust/trexio/Cargo.toml | 2 + rust/trexio/build.py | 34 ++++++++++- rust/trexio/src/back_end.rs | 7 ++- rust/trexio/src/exit_code.rs | 107 +++++++++++++++++++++++++++-------- rust/trexio/src/lib.rs | 12 ++-- 5 files changed, 130 insertions(+), 32 deletions(-) diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index a2020e8e..483c15f1 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -10,3 +10,5 @@ edition = "2021" [build-dependencies] bindgen = "0.65.1" +[lib] +doctest = false diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 3675b111..43931b79 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -91,6 +91,7 @@ def make_functions(): for group in data: group_l = group.lower() r += [ """ +/// Checks if the group `{group}` exists in the file. pub fn has_{group_l}(&self) -> Result { let rc = unsafe { c::trexio_has_{group}(self.ptr) }; match rc { @@ -107,6 +108,7 @@ def make_functions(): type_r = convert_r[data[group][element][0]] element_l = element.lower() r += [ """ +/// Checks if the element `{element}` of the group `{group}` exists in the file. pub fn has_{group_l}_{element_l}(&self) -> Result { let rc = unsafe { c::trexio_has_{group}_{element}(self.ptr) }; match rc { @@ -125,6 +127,7 @@ def make_functions(): if data[group][element][1] == []: if data[group][element][0] in [ "int", "float", "dim", "index" ]: r += [ """ +/// Reads the scalar element `{element}` contained in the group `{group}`. pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> { let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { @@ -134,6 +137,7 @@ def make_functions(): rc_return(data, rc) } +/// Writes the scalar element `{element}` contained in the group `{group}`. pub fn write_{group_l}_{element_l}(&self, data: {type_r}) -> Result<(), ExitCode> { let data: {type_c} = data.try_into().expect("try_into failed in write_{group_l}_{element_l}"); let rc = unsafe { c::trexio_write_{group}_{element}_64(self.ptr, data) }; @@ -149,6 +153,7 @@ def make_functions(): elif data[group][element][0] in [ "str" ]: r += [ """ +/// Reads the string `{element}` contained in the group `{group}`. pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result { let data_c = CString::new(vec![ b' ' ; capacity]).expect("CString::new failed"); let (rc, data) = unsafe { @@ -161,6 +166,7 @@ def make_functions(): } +/// Writes the string `{element}` contained in the group `{group}`. pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> { let size : i32 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = string_to_c(data); @@ -179,6 +185,7 @@ def make_functions(): elif data[group][element][0] in [ "dim readonly" ]: r += [ """ +/// Reads the dimensioning variable `{element}` contained in group `{group}`. pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> { let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { @@ -199,7 +206,32 @@ def make_functions(): else: if data[group][element][0] in [ "int", "float", "dim", "index" ]: - t = [ """pub fn read_{group_l}_{element_l}(&self) -> Result, ExitCode> { + t = [ f""" +/// Reads the array `{element}` contained in the group `{group}`. +/// +/// Dimensions are `{data[group][element][1]}`. +/// """ ] + if len(data[group][element][1]) > 1: + t += [ f"""/// The array is returned as a flattened one-dimensional vector. +/// To put it back as a multidimensional array, you can use the [`chunks`] method: +/// +/// # Example +/// ``` +/// let one_d_array = trexio_file.read_{group_l}_{element_l}()?;""" ] + try: + dim_group, dim_element = data[group][element][1][0].split('.') + t += [ f"/// let {dim_group}_{dim_element} = trexio_file.read_{dim_group}_{dim_element}()?;", +f"/// let two_d_array = one_d_array.chunks({dim_group}_{dim_element}).collect();" +] + except: + t += [ f"/// let two_d_array = one_d_array.chunks({data[group][element][1][0]}).collect();" ] + t += [ """ +/// ``` +/// +/// [`chunks`]: slice::chunks""" +] + t += [ """ +pub fn read_{group_l}_{element_l}(&self) -> Result, ExitCode> { let size = 1;""" ] t_prime = [] for dim in data[group][element][1]: diff --git a/rust/trexio/src/back_end.rs b/rust/trexio/src/back_end.rs index b26ce7e6..e1e4ba42 100644 --- a/rust/trexio/src/back_end.rs +++ b/rust/trexio/src/back_end.rs @@ -1,11 +1,16 @@ use crate::c; -/// Possible back ends #[derive(Debug)] #[derive(PartialEq)] pub enum BackEnd { + /// The TREXIO "file" is a directory with text files for each group. + /// A fallback when HDF5 is not available. Text, + + /// Should be used for production. The TREXIO file is a single HDF5 file. Hdf5, + + /// Automatic discovery of the appropriate backend Auto, } diff --git a/rust/trexio/src/exit_code.rs b/rust/trexio/src/exit_code.rs index 2e209581..60a7240f 100644 --- a/rust/trexio/src/exit_code.rs +++ b/rust/trexio/src/exit_code.rs @@ -1,48 +1,104 @@ use crate::c; -/// Exit codes #[derive(Debug)] #[derive(PartialEq)] pub enum ExitCode { + /// Unknown failure Failure, + + /// Everything went fine Success, - InvalidArg1, - InvalidArg2, - InvalidArg3, - InvalidArg4, - InvalidArg5, + + /// Invalid argument + InvalidArg(usize), + + /// End of file End, + + /// Read-only file ReadOnly, + + /// Error returned by Errno Errno, + + /// Invalid ID InvalidId, + + /// Allocation failed AllocationFailed, + + /// Element absent HasNot, + + /// Invalid (negative or 0) dimension InvalidNum, + + /// Attribute already exists AttrAlreadyExists, + + /// Dataset already exists DsetAlreadyExists, + + /// Error opening file OpenError, + + /// Error locking file LockError, + + /// Error unlocking file UnlockError, + + /// Invalid file FileError, + + /// Error reading group GroupReadError, + + /// Error writing group GroupWriteError, + + /// Error reading element ElemReadError, + + /// Error writing element ElemWriteError, + + /// Access to memory beyond allocated UnsafeArrayDim, + + /// Attribute does not exist in the file AttrMissing, + + /// Dataset does not exist in the file DsetMissing, + + /// Requested back end is disabled BackEndMissing, - InvalidArg6, - InvalidArg7, - InvalidArg8, + + /// Invalid max_str_len InvalidStrLen, + + /// Possible integer overflow IntSizeOverflow, + + /// Unsafe operation in safe mode SafeMode, + + /// Inconsistent number of electrons InvalidElectronNum, + + /// Inconsistent number of determinants InvalidDeterminantNum, + + /// Inconsistent state of the file InvalidState, + + /// Failed to parse package_version VersionParsingIssue, + + /// The function succeeded with a change of sign PhaseChange, + } impl ExitCode { @@ -52,11 +108,11 @@ impl ExitCode { match rc { c::TREXIO_FAILURE => Self::Failure, c::TREXIO_SUCCESS => Self::Success, - c::TREXIO_INVALID_ARG_1 => Self::InvalidArg1, - c::TREXIO_INVALID_ARG_2 => Self::InvalidArg2, - c::TREXIO_INVALID_ARG_3 => Self::InvalidArg3, - c::TREXIO_INVALID_ARG_4 => Self::InvalidArg4, - c::TREXIO_INVALID_ARG_5 => Self::InvalidArg5, + c::TREXIO_INVALID_ARG_1 => Self::InvalidArg(1), + c::TREXIO_INVALID_ARG_2 => Self::InvalidArg(2), + c::TREXIO_INVALID_ARG_3 => Self::InvalidArg(3), + c::TREXIO_INVALID_ARG_4 => Self::InvalidArg(4), + c::TREXIO_INVALID_ARG_5 => Self::InvalidArg(5), c::TREXIO_END => Self::End, c::TREXIO_READONLY => Self::ReadOnly, c::TREXIO_ERRNO => Self::Errno, @@ -78,9 +134,9 @@ impl ExitCode { c::TREXIO_ATTR_MISSING => Self::AttrMissing, c::TREXIO_DSET_MISSING => Self::DsetMissing, c::TREXIO_BACK_END_MISSING => Self::BackEndMissing, - c::TREXIO_INVALID_ARG_6 => Self::InvalidArg6, - c::TREXIO_INVALID_ARG_7 => Self::InvalidArg7, - c::TREXIO_INVALID_ARG_8 => Self::InvalidArg8, + c::TREXIO_INVALID_ARG_6 => Self::InvalidArg(6), + c::TREXIO_INVALID_ARG_7 => Self::InvalidArg(7), + c::TREXIO_INVALID_ARG_8 => Self::InvalidArg(8), c::TREXIO_INVALID_STR_LEN => Self::InvalidStrLen, c::TREXIO_INT_SIZE_OVERFLOW => Self::IntSizeOverflow, c::TREXIO_SAFE_MODE => Self::SafeMode, @@ -98,11 +154,11 @@ impl ExitCode { match self { Self::Failure => c::TREXIO_FAILURE, Self::Success => c::TREXIO_SUCCESS, - Self::InvalidArg1 => c::TREXIO_INVALID_ARG_1, - Self::InvalidArg2 => c::TREXIO_INVALID_ARG_2, - Self::InvalidArg3 => c::TREXIO_INVALID_ARG_3, - Self::InvalidArg4 => c::TREXIO_INVALID_ARG_4, - Self::InvalidArg5 => c::TREXIO_INVALID_ARG_5, + Self::InvalidArg(1) => c::TREXIO_INVALID_ARG_1, + Self::InvalidArg(2) => c::TREXIO_INVALID_ARG_2, + Self::InvalidArg(3) => c::TREXIO_INVALID_ARG_3, + Self::InvalidArg(4) => c::TREXIO_INVALID_ARG_4, + Self::InvalidArg(5) => c::TREXIO_INVALID_ARG_5, Self::End => c::TREXIO_END, Self::ReadOnly => c::TREXIO_READONLY, Self::Errno => c::TREXIO_ERRNO, @@ -124,9 +180,9 @@ impl ExitCode { Self::AttrMissing => c::TREXIO_ATTR_MISSING, Self::DsetMissing => c::TREXIO_DSET_MISSING, Self::BackEndMissing => c::TREXIO_BACK_END_MISSING, - Self::InvalidArg6 => c::TREXIO_INVALID_ARG_6, - Self::InvalidArg7 => c::TREXIO_INVALID_ARG_7, - Self::InvalidArg8 => c::TREXIO_INVALID_ARG_8, + Self::InvalidArg(6) => c::TREXIO_INVALID_ARG_6, + Self::InvalidArg(7) => c::TREXIO_INVALID_ARG_7, + Self::InvalidArg(8) => c::TREXIO_INVALID_ARG_8, Self::InvalidStrLen => c::TREXIO_INVALID_STR_LEN, Self::IntSizeOverflow => c::TREXIO_INT_SIZE_OVERFLOW, Self::SafeMode => c::TREXIO_SAFE_MODE, @@ -135,6 +191,7 @@ impl ExitCode { Self::InvalidState => c::TREXIO_INVALID_STATE, Self::VersionParsingIssue => c::TREXIO_VERSION_PARSING_ISSUE, Self::PhaseChange => c::TREXIO_PHASE_CHANGE, + _ => panic!("Unknown exit code"), } } diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 486346a9..89292cb9 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -1,20 +1,21 @@ use ::std::os::raw::c_char; /// C module generated by bindgen -pub mod c; +mod c; -/// Exit codes -pub mod exit_code; +/// Errors returned by function calls. These are related to the exit codes defined in the C TREXIO library. +mod exit_code; pub use exit_code::ExitCode; -/// Possible backends +/// Backends handled by TREXIO pub mod back_end; pub use back_end::BackEnd; -/// Bit fields +/// Bit fields, used for the description of determinants pub mod bitfield; pub use bitfield::Bitfield; +/// Version of the C TREXIO library pub const PACKAGE_VERSION : &str = unsafe { std::str::from_utf8_unchecked(c::TREXIO_PACKAGE_VERSION) }; fn rc_return(result: T, rc : c::trexio_exit_code) -> Result { @@ -30,6 +31,7 @@ fn string_to_c(s: &str) -> std::ffi::CString { } +/// Prints to standard output information about the C TREXIO library pub fn info() -> Result<(),ExitCode> { let rc = unsafe { c::trexio_info() }; rc_return((), rc) From 79cca2ad1c2ecc9ea4a5f2a053199e96e9e5a75b Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 18 Oct 2023 14:46:06 +0200 Subject: [PATCH 23/43] Improved documentation --- rust/trexio/build.py | 105 ++++++++++++++++++++++++++++++--- rust/trexio/src/lib.rs | 128 ++++++++++++++++++++++++++++++++++------- 2 files changed, 204 insertions(+), 29 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 43931b79..5d8af25d 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -86,12 +86,22 @@ def make_functions(): use std::iter::zip; use std::ffi::CString; +/// This implementation block includes additional functions automatically generated from tables. +/// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). impl File {""" ] for group in data: group_l = group.lower() r += [ """ /// Checks if the group `{group}` exists in the file. +/// # Parameters +/// +/// None +/// +/// # Returns +/// +/// * `Result` - Returns `Ok(true)` if the element exists in the file, +/// otherwise returns `Ok(false)`. An error during the execution results in `Err(ExitCode)`. pub fn has_{group_l}(&self) -> Result { let rc = unsafe { c::trexio_has_{group}(self.ptr) }; match rc { @@ -109,6 +119,15 @@ def make_functions(): element_l = element.lower() r += [ """ /// Checks if the element `{element}` of the group `{group}` exists in the file. +/// +/// # Parameters +/// +/// None +/// +/// # Returns +/// +/// * `Result` - Returns `Ok(true)` if the element exists in the file, +/// otherwise returns `Ok(false)`. An error during the execution results in `Err(ExitCode)`. pub fn has_{group_l}_{element_l}(&self) -> Result { let rc = unsafe { c::trexio_has_{group}_{element}(self.ptr) }; match rc { @@ -207,24 +226,33 @@ def make_functions(): if data[group][element][0] in [ "int", "float", "dim", "index" ]: t = [ f""" -/// Reads the array `{element}` contained in the group `{group}`. +/// Reads the `{element}` array from the group `{group}` in the file. +/// +/// # Dimensions +/// +/// The array is of dimension `{data[group][element][1]}`. +/// +/// # Returns +/// +/// * `Result, ExitCode>` - Returns a flattened one-dimensional vector that contains +/// the elements of the `{element}` array. If the operation is unsuccessful, it returns `Err(ExitCode)`. /// -/// Dimensions are `{data[group][element][1]}`. /// """ ] if len(data[group][element][1]) > 1: - t += [ f"""/// The array is returned as a flattened one-dimensional vector. -/// To put it back as a multidimensional array, you can use the [`chunks`] method: + t += [ f""" +/// # Example +/// +/// To reshape the one-dimensional vector back into a two-dimensional array, you can use the [`chunks`] method: /// -/// # Example /// ``` /// let one_d_array = trexio_file.read_{group_l}_{element_l}()?;""" ] try: dim_group, dim_element = data[group][element][1][0].split('.') t += [ f"/// let {dim_group}_{dim_element} = trexio_file.read_{dim_group}_{dim_element}()?;", -f"/// let two_d_array = one_d_array.chunks({dim_group}_{dim_element}).collect();" +f"/// let two_d_array: Vec<_> = one_d_array.chunks({dim_group}_{dim_element}).collect();" ] except: - t += [ f"/// let two_d_array = one_d_array.chunks({data[group][element][1][0]}).collect();" ] + t += [ f"/// let two_d_array: Vec<_> = one_d_array.chunks({data[group][element][1][0]}).collect();" ] t += [ """ /// ``` /// @@ -260,7 +288,19 @@ def make_functions(): .replace("{element}",element) .replace("{element_l}",element_l) ] - r += [ """ + r += [ f""" +/// Writes the `{element}` array into the group `{group}` in the file. +/// +/// # Parameters +/// +/// * `data: &[{type_r}]` - A one-dimensional vector that contains the elements of the `{element}` array +/// to be written into the file. The vector should be flattened from a two-dimensional array with +/// dimensions `{data[group][element][1]}`. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, +/// otherwise returns `Err(ExitCode)`.""", """\ pub fn write_{group_l}_{element_l}(&self, data: &[{type_r}]) -> Result<(), ExitCode> { let size: i64 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = data.as_ptr() as *const {type_c}; @@ -276,7 +316,40 @@ def make_functions(): .replace("{element_l}",element_l) ] elif data[group][element][0] in [ "str" ]: - t = [ """pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result, ExitCode> { + t = [ f""" +/// Reads the `{element}` array from the group `{group}` in the file. +/// +/// # Dimensions +/// +/// The array is of dimension `{data[group][element][1]}`. +/// +/// # Returns +/// +/// * `Result, ExitCode>` - Returns a flattened one-dimensional vector that contains +/// the elements of the `{element}` array. If the operation is unsuccessful, it returns `Err(ExitCode)`. +/// +/// """ ] + if len(data[group][element][1]) > 1: + t += [ f""" +/// # Example +/// +/// To reshape the one-dimensional vector back into a two-dimensional array, you can use the [`chunks`] method: +/// +/// ``` +/// let one_d_array = trexio_file.read_{group_l}_{element_l}()?;""" ] + try: + dim_group, dim_element = data[group][element][1][0].split('.') + t += [ f"/// let {dim_group}_{dim_element} = trexio_file.read_{dim_group}_{dim_element}()?;", +f"/// let two_d_array: Vec<_> = one_d_array.chunks({dim_group}_{dim_element}).collect();" +] + except: + t += [ f"/// let two_d_array: Vec<_> = one_d_array.chunks({data[group][element][1][0]}).collect();" ] + t += [ """ +/// ``` +/// +/// [`chunks`]: slice::chunks""" +] + t += [ """pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result, ExitCode> { let size = 1;""" ] t_prime = [] for dim in data[group][element][1]: @@ -330,6 +403,18 @@ def make_functions(): .replace("{element_l}",element_l) ] r += [ """ +/// Writes the `{element}` array into the group `{group}` in the file. +/// +/// # Parameters +/// +/// * `data: &[{type_r}]` - A one-dimensional vector that contains the elements of the `{element}` array +/// to be written into the file. The vector should be flattened from a two-dimensional array with +/// dimensions `{data[group][element][1]}`. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, +/// otherwise returns `Err(ExitCode)`.""", """\ pub fn write_{group_l}_{element_l}(&self, data: &[&str]) -> Result<(), ExitCode> { let mut size = 0; // Find longest string @@ -355,6 +440,7 @@ def make_functions(): size = len(data[group][element][1]) typ = "(" + ",".join( [ "usize" for _ in range(size) ]) + ", f64)" r += [ (""" +// TODO pub fn read_{group_l}_{element_l}(&self, offset: usize, buffer_size:usize) -> Result, ExitCode> { let mut idx = Vec::::with_capacity({size}*buffer_size); let mut val = Vec::::with_capacity(buffer_size); @@ -393,6 +479,7 @@ def make_functions(): .replace("{element_l}",element_l) ] r += [ (""" +// TODO pub fn write_{group_l}_{element_l}(&self, offset: usize, data: &[{typ}]) -> Result<(), ExitCode> { let mut idx = Vec::::with_capacity({size}*data.len()); let mut val = Vec::::with_capacity(data.len()); diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 89292cb9..986bb3ee 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -1,23 +1,34 @@ +/// TREXIO is an open-source file format and library developed for the storage and manipulation of +/// data produced by quantum chemistry calculations. It was designed with the goal of providing a +/// reliable and efficient method of storing and exchanging wave function parameters and matrix +/// elements. +/// +/// For comprehensive documentation, consult: [TREXIO Documentation](https://trex-coe.github.io/trexio/) +/// +/// The C library source code is available on GitHub: [TREXIO GitHub Repository](https://github.com/trex-coe/trexio) +/// + use ::std::os::raw::c_char; -/// C module generated by bindgen mod c; -/// Errors returned by function calls. These are related to the exit codes defined in the C TREXIO library. -mod exit_code; +/// Enumeration representing the various error codes that might be returned by function calls. +/// These error codes are mapped to those defined in the original C TREXIO library. +pub mod exit_code; pub use exit_code::ExitCode; -/// Backends handled by TREXIO +/// Enum representing the different backends that TREXIO can employ for data storage. pub mod back_end; pub use back_end::BackEnd; -/// Bit fields, used for the description of determinants +/// Structure representing bit fields. Mainly utilized for encapsulating determinant descriptions. pub mod bitfield; pub use bitfield::Bitfield; -/// Version of the C TREXIO library +/// A constant string representing the package version of the linked C TREXIO library. pub const PACKAGE_VERSION : &str = unsafe { std::str::from_utf8_unchecked(c::TREXIO_PACKAGE_VERSION) }; +/// Utility function to convert Rust results into TREXIO exit codes. fn rc_return(result: T, rc : c::trexio_exit_code) -> Result { let rc = ExitCode::from(rc); match rc { @@ -26,19 +37,20 @@ fn rc_return(result: T, rc : c::trexio_exit_code) -> Result { } } +/// Utility function to convert Rust string to C-compatible string. fn string_to_c(s: &str) -> std::ffi::CString { std::ffi::CString::new(s).unwrap() } -/// Prints to standard output information about the C TREXIO library +/// Function to print out diagnostic information about the linked C TREXIO library. pub fn info() -> Result<(),ExitCode> { let rc = unsafe { c::trexio_info() }; rc_return((), rc) } -/// Type for a TREXIO file +/// Type representing a TREXIO file. Wraps a pointer to the underlying C structure. pub struct File { ptr: *mut c::trexio_t, } @@ -46,6 +58,16 @@ pub struct File { impl File { + /// Opens a TREXIO file. Returns a `File` instance that can be used for subsequent I/O operations. + /// + /// # Parameters + /// - `file_name`: The path to the TREXIO file. + /// - `mode`: Specifies the file access mode. `'r'` for read-only, `'w'` for safe write (write + /// if the data doesn't exist), `'u'` for unsafe write (update existing data). + /// - `back_end`: Specifies the backend used for data storage. + /// + /// # Returns + /// - `Result`: `File` instance or an error code. pub fn open(file_name: &str, mode: char, back_end: BackEnd) -> Result { let file_name_c = string_to_c(file_name); let file_name_c = file_name_c.as_ptr() as *const c_char; @@ -57,11 +79,27 @@ impl File { rc_return(File { ptr: result }, rc) } + /// Closes the current TREXIO file and releases associated resources. + /// + /// # Returns + /// - `Result<(), ExitCode>`: An error code in case of failure. pub fn close(self) -> Result<(), ExitCode> { let rc = unsafe { c::trexio_close(self.ptr) }; rc_return((), rc) } + + /// Inquires if a file with the specified name exists. + /// + /// # Parameters + /// + /// * `file_name: &str` - The name of the file to inquire about. + /// + /// # Returns + /// + /// * `Result` - Returns `Ok(true)` if the file exists, + /// `Ok(false)` otherwise. Returns `Err(ExitCode)` if an error occurs + /// during the operation. pub fn inquire(file_name: &str) -> Result { let file_name_c = string_to_c(file_name); let file_name_c = file_name_c.as_ptr() as *const c_char; @@ -73,6 +111,16 @@ impl File { } } + /// Retrieves the ID of the electronic state stored in the file. + /// + /// # Parameters + /// + /// None + /// + /// # Returns + /// + /// * `Result` - Returns the ID as `Ok(usize)` if the operation is successful, + /// otherwise returns `Err(ExitCode)`. pub fn get_state(&self) -> Result { let mut num = 0i32; let rc = unsafe { c::trexio_get_state(self.ptr, &mut num) }; @@ -80,17 +128,33 @@ impl File { rc_return(result, rc) } + /// Sets the ID of the electronic state to be stored in the file. + /// + /// # Parameters + /// + /// * `num: usize` - The ID of the electronic state. + /// + /// # Returns + /// + /// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, + /// otherwise returns `Err(ExitCode)`. pub fn set_state(&self, num: usize) -> Result<(), ExitCode> { let num: i32 = num.try_into().expect("try_into failed in set_state"); let rc = unsafe { c::trexio_set_state(self.ptr, num) }; rc_return((), rc) } - pub fn set_one_based(&self) -> Result<(), ExitCode> { - let rc = unsafe { c::trexio_set_one_based(self.ptr) }; - rc_return((), rc) - } - + /// Retrieves the number of `i64` required to store a determinant as a bit-field. + /// This corresponds to \(\frac{\text{mo\_num}}{64}+1\). + /// + /// # Parameters + /// + /// None + /// + /// # Returns + /// + /// * `Result` - Returns the number of `i64` as `Ok(usize)` if the operation is successful, + /// otherwise returns `Err(ExitCode)`. pub fn get_int64_num(&self) -> Result { let mut num = 0i32; let rc = unsafe { @@ -100,15 +164,26 @@ impl File { rc_return(num, rc) } - pub fn write_determinant_list(&self, offset_file: usize, determinants: &[Bitfield]) -> Result<(), ExitCode> { + /// Writes a vector of determinants, represented as [Bitfield] objects. + /// + /// # Parameters + /// + /// * `offset: usize` - The number of determinants to skip in the file before writing. + /// * `determinants: &[Bitfield]` - The array of determinants to write. + /// + /// # Returns + /// + /// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, + /// otherwise returns `Err(ExitCode)`. + pub fn write_determinant_list(&self, offset: usize, determinants: &[Bitfield]) -> Result<(), ExitCode> { let n_int = self.get_int64_num()?; match determinants.len() { 0 => return Ok(()), _ => if determinants[0].as_vec().len() != 2*n_int { - panic!("Inconsistent values of n_int") + return Err(exit_code::Invalid_Arg(3)) } }; - let offset_file: i64 = offset_file.try_into().expect("try_into failed in write_determinant_list"); + let offset: i64 = offset.try_into().expect("try_into failed in write_determinant_list"); let buffer_size: i64 = determinants.len().try_into().expect("try_into failed in write_determinant_list"); let mut one_d_array: Vec = Vec::with_capacity(determinants.len() * n_int); for det in determinants.iter() { @@ -118,19 +193,30 @@ impl File { } let dset: *const i64 = one_d_array.as_ptr() as *const i64; let rc = unsafe { - c::trexio_write_determinant_list(self.ptr, offset_file, buffer_size, dset) + c::trexio_write_determinant_list(self.ptr, offset, buffer_size, dset) }; rc_return((), rc) } - pub fn read_determinant_list(&self, offset_file: usize, buffer_size: usize) -> Result, ExitCode> { + /// Reads a vector of determinants, represented as [Bitfield] objects. + /// + /// # Parameters + /// + /// * `offset: usize` - The number of determinants to skip in the file before reading. + /// * `buffer_size: usize` - The number of determinants to read. + /// + /// # Returns + /// + /// * `Result, ExitCode>` - Returns the read determinants as `Ok(Vec)` + /// if the operation is successful, otherwise returns `Err(ExitCode)`. + pub fn read_determinant_list(&self, offset: usize, buffer_size: usize) -> Result, ExitCode> { let n_int = self.get_int64_num()?; let mut one_d_array: Vec = Vec::with_capacity(buffer_size * 2* n_int); let one_d_array_ptr = one_d_array.as_ptr() as *mut i64; let rc = unsafe { - let offset_file: i64 = offset_file.try_into().expect("try_into failed in read_determinant_list (offset_file)"); + let offset: i64 = offset.try_into().expect("try_into failed in read_determinant_list (offset)"); let mut buffer_size_read: i64 = buffer_size.try_into().expect("try_into failed in read_determinant_list (buffer_size)"); - let rc = c::trexio_read_determinant_list(self.ptr, offset_file, &mut buffer_size_read, one_d_array_ptr); + let rc = c::trexio_read_determinant_list(self.ptr, offset, &mut buffer_size_read, one_d_array_ptr); let buffer_size_read: usize = buffer_size_read.try_into().expect("try_into failed in read_determinant_list (buffer_size)"); one_d_array.set_len(n_int*2usize*buffer_size_read); match ExitCode::from(rc) { @@ -149,6 +235,8 @@ impl File { } +/// Inclusion of additional functions automatically generated from tables. +/// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). include!("generated.rs"); From c577e61af4c3f273720d6b9ccfb4301e9fbc40ee Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 18 Oct 2023 15:01:04 +0200 Subject: [PATCH 24/43] Updated documentation --- rust/trexio/build.py | 87 ++++++++++++++++++++++++++++++++++++++---- rust/trexio/src/lib.rs | 2 - 2 files changed, 80 insertions(+), 9 deletions(-) diff --git a/rust/trexio/build.py b/rust/trexio/build.py index 5d8af25d..f275b1cb 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -146,7 +146,16 @@ def make_functions(): if data[group][element][1] == []: if data[group][element][0] in [ "int", "float", "dim", "index" ]: r += [ """ -/// Reads the scalar element `{element}` contained in the group `{group}`. +/// Reads the scalar element `{element}` from the group `{group}` in the file. +/// +/// # Parameters +/// +/// None +/// +/// # Returns +/// +/// * `Result<{type_r}, ExitCode>` - Returns the scalar element as a `{type_r}` upon successful +/// operation. If the operation fails, it returns `Err(ExitCode)`. pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> { let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { @@ -156,7 +165,15 @@ def make_functions(): rc_return(data, rc) } -/// Writes the scalar element `{element}` contained in the group `{group}`. +/// Writes the scalar element `{element}` into the group `{group}` in the file. +/// +/// # Parameters +/// +/// * `data: {type_r}` - A `{type_r}` scalar element that will be written into `{element}` in the group `{group}`. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` upon successful operation, otherwise returns `Err(ExitCode)`. pub fn write_{group_l}_{element_l}(&self, data: {type_r}) -> Result<(), ExitCode> { let data: {type_c} = data.try_into().expect("try_into failed in write_{group_l}_{element_l}"); let rc = unsafe { c::trexio_write_{group}_{element}_64(self.ptr, data) }; @@ -172,7 +189,15 @@ def make_functions(): elif data[group][element][0] in [ "str" ]: r += [ """ -/// Reads the string `{element}` contained in the group `{group}`. +/// Reads the string attribute `{element}` contained in the group `{group}`. +/// # Parameters +/// +/// * `capacity: usize` - The maximum buffer size allocated for the string to be read. +/// +/// # Returns +/// +/// * `Result` - Returns the attribute as a `String` upon successful operation. +/// If the operation fails, it returns `Err(ExitCode)`. pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result { let data_c = CString::new(vec![ b' ' ; capacity]).expect("CString::new failed"); let (rc, data) = unsafe { @@ -185,7 +210,16 @@ def make_functions(): } -/// Writes the string `{element}` contained in the group `{group}`. +/// Writes the string attribute `{element}` into the group `{group}`. +/// +/// # Parameters +/// +/// * `data: &str` - The string attribute that will be written into the `{element}` field in the `{group}` group. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` upon successful operation. +/// If the operation fails, it returns `Err(ExitCode)`. pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> { let size : i32 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); let data = string_to_c(data); @@ -204,7 +238,16 @@ def make_functions(): elif data[group][element][0] in [ "dim readonly" ]: r += [ """ -/// Reads the dimensioning variable `{element}` contained in group `{group}`. +/// Reads the dimensioning variable `{element}` from the group `{group}`. +/// +/// # Parameters +/// +/// None. +/// +/// # Returns +/// +/// * `Result<{type_r}, ExitCode>` - Returns the dimensioning variable `{element}` of type `{type_r}` +/// upon successful operation. If the operation fails, it returns `Err(ExitCode)`. pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> { let mut data_c: {type_c} = 0{type_c}; let (rc, data) = unsafe { @@ -440,7 +483,22 @@ def make_functions(): size = len(data[group][element][1]) typ = "(" + ",".join( [ "usize" for _ in range(size) ]) + ", f64)" r += [ (""" -// TODO +/// Reads a buffer of {element} from group {group}. +/// +/// # Parameters +/// +/// * `offset: usize` - The starting point in the array from which data will be read. +/// * `buffer_size: usize` - The size of the buffer in which read data will be stored. +/// +/// # Returns +/// +/// * `Result, ExitCode>` - Returns a vector of tuples containing +/// the indices and the value of the element. The vector has a length of at most `buffer_size`. +/// +/// # Notes +/// +/// The reading process is a buffered operation, meaning that only a segment of the full array +/// is read into the memory. pub fn read_{group_l}_{element_l}(&self, offset: usize, buffer_size:usize) -> Result, ExitCode> { let mut idx = Vec::::with_capacity({size}*buffer_size); let mut val = Vec::::with_capacity(buffer_size); @@ -479,7 +537,22 @@ def make_functions(): .replace("{element_l}",element_l) ] r += [ (""" -// TODO +/// Writes a buffer of {element} from group {group}. +/// +/// # Parameters +/// +/// * `offset: usize` - The starting point in the array at which data will be written. +/// * `data: &[{typ}]` - A slice of tuples containing the indices and the value of the element. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` if the writing operation is successful, +/// otherwise returns `Err(ExitCode)`. +/// +/// # Notes +/// +/// The writing process is a buffered operation, meaning that only a segment of the full array +/// is written into the file. pub fn write_{group_l}_{element_l}(&self, offset: usize, data: &[{typ}]) -> Result<(), ExitCode> { let mut idx = Vec::::with_capacity({size}*data.len()); let mut val = Vec::::with_capacity(data.len()); diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 986bb3ee..298a8028 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -235,8 +235,6 @@ impl File { } -/// Inclusion of additional functions automatically generated from tables. -/// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). include!("generated.rs"); From 44a03f55519addb5d3ef4ccbb72bf25beee634de Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 18 Oct 2023 15:25:57 +0200 Subject: [PATCH 25/43] Updated formatting --- README.md | 2 +- rust/trexio/Cargo.toml | 2 + rust/trexio/Makefile | 10 ++ rust/trexio/build.rs | 2 - rust/trexio/src/back_end.rs | 38 ++++--- rust/trexio/src/bitfield.rs | 89 ++++++++------- rust/trexio/src/exit_code.rs | 175 +++++++++++++++--------------- rust/trexio/src/lib.rs | 132 +++++++++++++---------- rust/trexio/tests/read_write.rs | 186 ++++++++++++++++++-------------- 9 files changed, 349 insertions(+), 287 deletions(-) create mode 100644 rust/trexio/Makefile diff --git a/README.md b/README.md index 4073fd87..5e16e3b6 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![build](https://github.com/TREX-CoE/trexio/actions/workflows/actions.yml/badge.svg)](https://github.com/TREX-CoE/trexio/actions/workflows/actions.yml) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/TREX-CoE/trexio) -TREXIO is an open-source file format and library developed for the storage and manipulation of data produced by quantum chemistry calculations. It is designed with the goal of providing a reliable and efficient method of storing and exchanging wave function parameters and matrix elements, making it an important tool for researchers in the field of quantum chemistry. In this work, we present an overview of the TREXIO file format and library. The library consists of a front-end implemented in the C programming language and two different back-ends: a text back-end and a binary back-end utilizing the HDF5 library which enables fast read and write operations. It is compatible with a variety of platforms and has interfaces for the Fortran, Python, and OCaml programming languages. In addition, a suite of tools has been developed to facilitate the use of the TREXIO format and library, including converters for popular quantum chemistry codes and utilities for validating and manipulating data stored in TREXIO files. The simplicity, versatility, and ease of use of TREXIO make it a valuable resource for researchers working with quantum chemistry data. +TREXIO is an open-source file format and library developed for the storage and manipulation of data produced by quantum chemistry calculations. It is designed with the goal of providing a reliable and efficient method of storing and exchanging wave function parameters and matrix elements, making it an important tool for researchers in the field of quantum chemistry. The library consists of a front-end implemented in the C programming language and two different back-ends: a text back-end and a binary back-end utilizing the HDF5 library which enables fast read and write operations. It is compatible with a variety of platforms and has interfaces for the Fortran, Python, OCaml and Rust programming languages. ## Minimal requirements (for users): diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 483c15f1..758c86f0 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -2,6 +2,8 @@ name = "trexio" version = "2.4.0" edition = "2021" +license = "BSD-3-Clause" +description = "TREXIO is an open-source file format and library developed for the storage and manipulation of data produced by quantum chemistry calculations. It is designed with the goal of providing a reliable and efficient method of storing and exchanging wave function parameters and matrix elements." # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust/trexio/Makefile b/rust/trexio/Makefile new file mode 100644 index 00000000..cd8509b7 --- /dev/null +++ b/rust/trexio/Makefile @@ -0,0 +1,10 @@ +default: src/generated.rs + cargo build + cargo test + +generated.rs: build.py + python3 build.py + +test: default + - cargo test -- --show-output + diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index adf0e0b4..52e604cc 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -32,6 +32,4 @@ fn main() { bindings .write_to_file(out_path.join("bindings.rs")) .expect("Couldn't write bindings!"); - } - diff --git a/rust/trexio/src/back_end.rs b/rust/trexio/src/back_end.rs index e1e4ba42..6349b889 100644 --- a/rust/trexio/src/back_end.rs +++ b/rust/trexio/src/back_end.rs @@ -1,37 +1,35 @@ use crate::c; -#[derive(Debug)] -#[derive(PartialEq)] +#[derive(Debug, PartialEq)] pub enum BackEnd { - /// The TREXIO "file" is a directory with text files for each group. - /// A fallback when HDF5 is not available. - Text, + /// The TREXIO "file" is a directory with text files for each group. + /// A fallback when HDF5 is not available. + Text, - /// Should be used for production. The TREXIO file is a single HDF5 file. - Hdf5, + /// Should be used for production. The TREXIO file is a single HDF5 file. + Hdf5, - /// Automatic discovery of the appropriate backend - Auto, + /// Automatic discovery of the appropriate backend + Auto, } impl BackEnd { - /// Creation from a C value - pub fn from(b : c::back_end_t) -> Self { - match b { - c::TREXIO_TEXT => Self::Text, - c::TREXIO_HDF5 => Self::Hdf5, - c::TREXIO_AUTO => Self::Auto, - _ => panic!("Invalid backend"), - } + pub fn from(b: c::back_end_t) -> Self { + match b { + c::TREXIO_TEXT => Self::Text, + c::TREXIO_HDF5 => Self::Hdf5, + c::TREXIO_AUTO => Self::Auto, + _ => panic!("Invalid backend"), + } } /// Conversion to a C value pub fn to_c(self) -> c::back_end_t { match self { - Self::Text => c::TREXIO_TEXT, - Self::Hdf5 => c::TREXIO_HDF5, - Self::Auto => c::TREXIO_AUTO, + Self::Text => c::TREXIO_TEXT, + Self::Hdf5 => c::TREXIO_HDF5, + Self::Auto => c::TREXIO_AUTO, } } } diff --git a/rust/trexio/src/bitfield.rs b/rust/trexio/src/bitfield.rs index 54ee6d36..de722f88 100644 --- a/rust/trexio/src/bitfield.rs +++ b/rust/trexio/src/bitfield.rs @@ -1,5 +1,4 @@ -#[derive(Debug)] -#[derive(PartialEq)] +#[derive(Debug, PartialEq)] pub struct Bitfield { data: Vec, } @@ -8,21 +7,20 @@ use crate::c; use crate::ExitCode; impl Bitfield { - /// Creates a new bitfield , using a number of i64 elements consistent /// with the number of MOs in the TREXIO file. pub fn from(n_int: usize, orb_list: &[usize]) -> (Self, f64) { - let orb_list: Vec = orb_list.iter().map(|&x| x as i32).collect(); - let occ_num = orb_list.len().try_into().expect("try_into failed in Bitfield::from"); + let occ_num = orb_list + .len() + .try_into() + .expect("try_into failed in Bitfield::from"); let orb_list_ptr = orb_list.as_ptr() as *const i32; let n_int32: i32 = n_int.try_into().expect("try_into failed in Bitfield::from"); - let mut b = vec![0i64 ; n_int]; + let mut b = vec![0i64; n_int]; let bit_list = b.as_mut_ptr() as *mut c::bitfield_t; std::mem::forget(b); - let rc = unsafe { - c::trexio_to_bitfield_list(orb_list_ptr, occ_num, bit_list, n_int32) - }; + let rc = unsafe { c::trexio_to_bitfield_list(orb_list_ptr, occ_num, bit_list, n_int32) }; let data = unsafe { Vec::from_raw_parts(bit_list, n_int, n_int) }; @@ -30,8 +28,8 @@ impl Bitfield { match ExitCode::from(rc) { ExitCode::Success => (result, 1.0), - ExitCode::PhaseChange=> (result,-1.0), - x => panic!("TREXIO Error {}", x) + ExitCode::PhaseChange => (result, -1.0), + x => panic!("TREXIO Error {}", x), } } @@ -50,14 +48,18 @@ impl Bitfield { /// Returns the alpha part pub fn alpha(&self) -> Bitfield { - let n_int = self.data.len()/2; - Bitfield { data: (&self.data[0..n_int]).to_vec() } + let n_int = self.data.len() / 2; + Bitfield { + data: (&self.data[0..n_int]).to_vec(), + } } /// Returns the beta part pub fn beta(&self) -> Bitfield { - let n_int = self.data.len()/2; - Bitfield { data: (&self.data[n_int..2*n_int]).to_vec() } + let n_int = self.data.len() / 2; + Bitfield { + data: (&self.data[n_int..2 * n_int]).to_vec(), + } } /// Converts to a format usable in the C library @@ -76,20 +78,23 @@ impl Bitfield { /// Converts the bitfield into a list of orbital indices (0-based) pub fn to_orbital_list(&self) -> Vec { - - let n_int : i32 = self.data.len().try_into().expect("try_into failed in to_orbital_list"); + let n_int: i32 = self + .data + .len() + .try_into() + .expect("try_into failed in to_orbital_list"); let d1 = self.as_ptr(); let cap = self.data.len() * 64; - let mut list = vec![ 0i32 ; cap ]; + let mut list = vec![0i32; cap]; let list_c = list.as_mut_ptr() as *mut i32; std::mem::forget(list); - let mut occ_num : i32 = 0; + let mut occ_num: i32 = 0; let rc = unsafe { c::trexio_to_orbital_list(n_int, d1, list_c, &mut occ_num) }; match ExitCode::from(rc) { ExitCode::Success => (), - x => panic!("TREXIO Error {}", x) + x => panic!("TREXIO Error {}", x), }; let occ_num = occ_num as usize; @@ -97,7 +102,7 @@ impl Bitfield { let mut result: Vec = Vec::with_capacity(occ_num); for i in list.iter() { - result.push( *i as usize ); + result.push(*i as usize); } result } @@ -109,24 +114,34 @@ impl Bitfield { /// Converts the determinant into a list of orbital indices (0-based) pub fn to_orbital_list_up_dn(&self) -> (Vec, Vec) { - - let n_int : i32 = (self.data.len()/2).try_into().expect("try_into failed in to_orbital_list"); + let n_int: i32 = (self.data.len() / 2) + .try_into() + .expect("try_into failed in to_orbital_list"); let d1 = self.as_ptr(); - let cap = self.data.len()/2 * 64; - let mut b = vec![ 0i32 ; cap ]; + let cap = self.data.len() / 2 * 64; + let mut b = vec![0i32; cap]; let list_up_c = b.as_mut_ptr() as *mut i32; std::mem::forget(b); - let mut b = vec![ 0i32 ; cap ]; + let mut b = vec![0i32; cap]; let list_dn_c = b.as_mut_ptr() as *mut i32; std::mem::forget(b); - let mut occ_num_up : i32 = 0; - let mut occ_num_dn : i32 = 0; + let mut occ_num_up: i32 = 0; + let mut occ_num_dn: i32 = 0; - let rc = unsafe { c::trexio_to_orbital_list_up_dn(n_int, d1, list_up_c, list_dn_c, &mut occ_num_up, &mut occ_num_dn) }; + let rc = unsafe { + c::trexio_to_orbital_list_up_dn( + n_int, + d1, + list_up_c, + list_dn_c, + &mut occ_num_up, + &mut occ_num_dn, + ) + }; match ExitCode::from(rc) { ExitCode::Success => (), - x => panic!("TREXIO Error {}", x) + x => panic!("TREXIO Error {}", x), }; let occ_num_up = occ_num_up as usize; @@ -136,26 +151,23 @@ impl Bitfield { let mut result_up: Vec = Vec::with_capacity(occ_num_up); for i in list_up.iter() { - result_up.push( *i as usize ); + result_up.push(*i as usize); } let mut result_dn: Vec = Vec::with_capacity(occ_num_dn); for i in list_dn.iter() { - result_dn.push( *i as usize ); + result_dn.push(*i as usize); } (result_up, result_dn) } - } - #[cfg(test)] mod tests { use super::*; #[test] fn creation_from_list() { - let list0 = vec![0, 1, 2, 3, 4]; let list1 = vec![0, 1, 2, 4, 3]; let list2 = vec![0, 1, 4, 2, 3]; @@ -173,16 +185,15 @@ mod tests { let list = alpha2.to_orbital_list(); assert_eq!(list, list0); assert_eq!(phase2, phase0); - } #[test] fn creation_alpha_beta() { let (alpha, _) = Bitfield::from(2, &[0, 1, 2, 3, 4]); - let (beta , _) = Bitfield::from(2, &[0, 1, 2, 4, 5]); + let (beta, _) = Bitfield::from(2, &[0, 1, 2, 4, 5]); let det = Bitfield::from_alpha_beta(&alpha, &beta); let list = det.to_orbital_list(); - assert_eq!(list, [0,1,2,3,4,128,129,130,132,133]); + assert_eq!(list, [0, 1, 2, 3, 4, 128, 129, 130, 132, 133]); assert_eq!(det.alpha(), alpha); assert_eq!(det.beta(), beta); } @@ -191,7 +202,7 @@ mod tests { #[should_panic] fn creation_alpha_beta_with_different_nint() { let (alpha, _) = Bitfield::from(1, &[0, 1, 2, 3, 4]); - let (beta , _) = Bitfield::from(2, &[0, 1, 2, 4, 5]); + let (beta, _) = Bitfield::from(2, &[0, 1, 2, 4, 5]); let _ = Bitfield::from_alpha_beta(&alpha, &beta); } } diff --git a/rust/trexio/src/exit_code.rs b/rust/trexio/src/exit_code.rs index 60a7240f..dce04679 100644 --- a/rust/trexio/src/exit_code.rs +++ b/rust/trexio/src/exit_code.rs @@ -1,7 +1,6 @@ use crate::c; -#[derive(Debug)] -#[derive(PartialEq)] +#[derive(Debug, PartialEq)] pub enum ExitCode { /// Unknown failure Failure, @@ -98,115 +97,113 @@ pub enum ExitCode { /// The function succeeded with a change of sign PhaseChange, - } impl ExitCode { - /// Creation from a C value - pub fn from(rc : c::trexio_exit_code) -> Self { + pub fn from(rc: c::trexio_exit_code) -> Self { match rc { - c::TREXIO_FAILURE => Self::Failure, - c::TREXIO_SUCCESS => Self::Success, - c::TREXIO_INVALID_ARG_1 => Self::InvalidArg(1), - c::TREXIO_INVALID_ARG_2 => Self::InvalidArg(2), - c::TREXIO_INVALID_ARG_3 => Self::InvalidArg(3), - c::TREXIO_INVALID_ARG_4 => Self::InvalidArg(4), - c::TREXIO_INVALID_ARG_5 => Self::InvalidArg(5), - c::TREXIO_END => Self::End, - c::TREXIO_READONLY => Self::ReadOnly, - c::TREXIO_ERRNO => Self::Errno, - c::TREXIO_INVALID_ID => Self::InvalidId, - c::TREXIO_ALLOCATION_FAILED => Self::AllocationFailed, - c::TREXIO_HAS_NOT => Self::HasNot, - c::TREXIO_INVALID_NUM => Self::InvalidNum, - c::TREXIO_ATTR_ALREADY_EXISTS => Self::AttrAlreadyExists, - c::TREXIO_DSET_ALREADY_EXISTS => Self::DsetAlreadyExists, - c::TREXIO_OPEN_ERROR => Self::OpenError, - c::TREXIO_LOCK_ERROR => Self::LockError, - c::TREXIO_UNLOCK_ERROR => Self::UnlockError, - c::TREXIO_FILE_ERROR => Self::FileError, - c::TREXIO_GROUP_READ_ERROR => Self::GroupReadError, - c::TREXIO_GROUP_WRITE_ERROR => Self::GroupWriteError, - c::TREXIO_ELEM_READ_ERROR => Self::ElemReadError, - c::TREXIO_ELEM_WRITE_ERROR => Self::ElemWriteError, - c::TREXIO_UNSAFE_ARRAY_DIM => Self::UnsafeArrayDim, - c::TREXIO_ATTR_MISSING => Self::AttrMissing, - c::TREXIO_DSET_MISSING => Self::DsetMissing, - c::TREXIO_BACK_END_MISSING => Self::BackEndMissing, - c::TREXIO_INVALID_ARG_6 => Self::InvalidArg(6), - c::TREXIO_INVALID_ARG_7 => Self::InvalidArg(7), - c::TREXIO_INVALID_ARG_8 => Self::InvalidArg(8), - c::TREXIO_INVALID_STR_LEN => Self::InvalidStrLen, - c::TREXIO_INT_SIZE_OVERFLOW => Self::IntSizeOverflow, - c::TREXIO_SAFE_MODE => Self::SafeMode, - c::TREXIO_INVALID_ELECTRON_NUM => Self::InvalidElectronNum, - c::TREXIO_INVALID_DETERMINANT_NUM => Self::InvalidDeterminantNum, - c::TREXIO_INVALID_STATE => Self::InvalidState, - c::TREXIO_VERSION_PARSING_ISSUE => Self::VersionParsingIssue, - c::TREXIO_PHASE_CHANGE => Self::PhaseChange, - _ => panic!("Unknown exit code"), + c::TREXIO_FAILURE => Self::Failure, + c::TREXIO_SUCCESS => Self::Success, + c::TREXIO_INVALID_ARG_1 => Self::InvalidArg(1), + c::TREXIO_INVALID_ARG_2 => Self::InvalidArg(2), + c::TREXIO_INVALID_ARG_3 => Self::InvalidArg(3), + c::TREXIO_INVALID_ARG_4 => Self::InvalidArg(4), + c::TREXIO_INVALID_ARG_5 => Self::InvalidArg(5), + c::TREXIO_END => Self::End, + c::TREXIO_READONLY => Self::ReadOnly, + c::TREXIO_ERRNO => Self::Errno, + c::TREXIO_INVALID_ID => Self::InvalidId, + c::TREXIO_ALLOCATION_FAILED => Self::AllocationFailed, + c::TREXIO_HAS_NOT => Self::HasNot, + c::TREXIO_INVALID_NUM => Self::InvalidNum, + c::TREXIO_ATTR_ALREADY_EXISTS => Self::AttrAlreadyExists, + c::TREXIO_DSET_ALREADY_EXISTS => Self::DsetAlreadyExists, + c::TREXIO_OPEN_ERROR => Self::OpenError, + c::TREXIO_LOCK_ERROR => Self::LockError, + c::TREXIO_UNLOCK_ERROR => Self::UnlockError, + c::TREXIO_FILE_ERROR => Self::FileError, + c::TREXIO_GROUP_READ_ERROR => Self::GroupReadError, + c::TREXIO_GROUP_WRITE_ERROR => Self::GroupWriteError, + c::TREXIO_ELEM_READ_ERROR => Self::ElemReadError, + c::TREXIO_ELEM_WRITE_ERROR => Self::ElemWriteError, + c::TREXIO_UNSAFE_ARRAY_DIM => Self::UnsafeArrayDim, + c::TREXIO_ATTR_MISSING => Self::AttrMissing, + c::TREXIO_DSET_MISSING => Self::DsetMissing, + c::TREXIO_BACK_END_MISSING => Self::BackEndMissing, + c::TREXIO_INVALID_ARG_6 => Self::InvalidArg(6), + c::TREXIO_INVALID_ARG_7 => Self::InvalidArg(7), + c::TREXIO_INVALID_ARG_8 => Self::InvalidArg(8), + c::TREXIO_INVALID_STR_LEN => Self::InvalidStrLen, + c::TREXIO_INT_SIZE_OVERFLOW => Self::IntSizeOverflow, + c::TREXIO_SAFE_MODE => Self::SafeMode, + c::TREXIO_INVALID_ELECTRON_NUM => Self::InvalidElectronNum, + c::TREXIO_INVALID_DETERMINANT_NUM => Self::InvalidDeterminantNum, + c::TREXIO_INVALID_STATE => Self::InvalidState, + c::TREXIO_VERSION_PARSING_ISSUE => Self::VersionParsingIssue, + c::TREXIO_PHASE_CHANGE => Self::PhaseChange, + _ => panic!("Unknown exit code"), } } /// Conversion to a C value - pub fn to_c(&self) -> c::trexio_exit_code { + pub fn to_c(&self) -> c::trexio_exit_code { match self { - Self::Failure => c::TREXIO_FAILURE, - Self::Success => c::TREXIO_SUCCESS, - Self::InvalidArg(1) => c::TREXIO_INVALID_ARG_1, - Self::InvalidArg(2) => c::TREXIO_INVALID_ARG_2, - Self::InvalidArg(3) => c::TREXIO_INVALID_ARG_3, - Self::InvalidArg(4) => c::TREXIO_INVALID_ARG_4, - Self::InvalidArg(5) => c::TREXIO_INVALID_ARG_5, - Self::End => c::TREXIO_END, - Self::ReadOnly => c::TREXIO_READONLY, - Self::Errno => c::TREXIO_ERRNO, - Self::InvalidId => c::TREXIO_INVALID_ID, - Self::AllocationFailed => c::TREXIO_ALLOCATION_FAILED, - Self::HasNot => c::TREXIO_HAS_NOT, - Self::InvalidNum => c::TREXIO_INVALID_NUM, - Self::AttrAlreadyExists => c::TREXIO_ATTR_ALREADY_EXISTS, - Self::DsetAlreadyExists => c::TREXIO_DSET_ALREADY_EXISTS, - Self::OpenError => c::TREXIO_OPEN_ERROR, - Self::LockError => c::TREXIO_LOCK_ERROR, - Self::UnlockError => c::TREXIO_UNLOCK_ERROR, - Self::FileError => c::TREXIO_FILE_ERROR, - Self::GroupReadError => c::TREXIO_GROUP_READ_ERROR, - Self::GroupWriteError => c::TREXIO_GROUP_WRITE_ERROR, - Self::ElemReadError => c::TREXIO_ELEM_READ_ERROR, - Self::ElemWriteError => c::TREXIO_ELEM_WRITE_ERROR, - Self::UnsafeArrayDim => c::TREXIO_UNSAFE_ARRAY_DIM, - Self::AttrMissing => c::TREXIO_ATTR_MISSING, - Self::DsetMissing => c::TREXIO_DSET_MISSING, - Self::BackEndMissing => c::TREXIO_BACK_END_MISSING, - Self::InvalidArg(6) => c::TREXIO_INVALID_ARG_6, - Self::InvalidArg(7) => c::TREXIO_INVALID_ARG_7, - Self::InvalidArg(8) => c::TREXIO_INVALID_ARG_8, - Self::InvalidStrLen => c::TREXIO_INVALID_STR_LEN, - Self::IntSizeOverflow => c::TREXIO_INT_SIZE_OVERFLOW, - Self::SafeMode => c::TREXIO_SAFE_MODE, - Self::InvalidElectronNum => c::TREXIO_INVALID_ELECTRON_NUM, - Self::InvalidDeterminantNum => c::TREXIO_INVALID_DETERMINANT_NUM, - Self::InvalidState => c::TREXIO_INVALID_STATE, - Self::VersionParsingIssue => c::TREXIO_VERSION_PARSING_ISSUE, - Self::PhaseChange => c::TREXIO_PHASE_CHANGE, - _ => panic!("Unknown exit code"), + Self::Failure => c::TREXIO_FAILURE, + Self::Success => c::TREXIO_SUCCESS, + Self::InvalidArg(1) => c::TREXIO_INVALID_ARG_1, + Self::InvalidArg(2) => c::TREXIO_INVALID_ARG_2, + Self::InvalidArg(3) => c::TREXIO_INVALID_ARG_3, + Self::InvalidArg(4) => c::TREXIO_INVALID_ARG_4, + Self::InvalidArg(5) => c::TREXIO_INVALID_ARG_5, + Self::End => c::TREXIO_END, + Self::ReadOnly => c::TREXIO_READONLY, + Self::Errno => c::TREXIO_ERRNO, + Self::InvalidId => c::TREXIO_INVALID_ID, + Self::AllocationFailed => c::TREXIO_ALLOCATION_FAILED, + Self::HasNot => c::TREXIO_HAS_NOT, + Self::InvalidNum => c::TREXIO_INVALID_NUM, + Self::AttrAlreadyExists => c::TREXIO_ATTR_ALREADY_EXISTS, + Self::DsetAlreadyExists => c::TREXIO_DSET_ALREADY_EXISTS, + Self::OpenError => c::TREXIO_OPEN_ERROR, + Self::LockError => c::TREXIO_LOCK_ERROR, + Self::UnlockError => c::TREXIO_UNLOCK_ERROR, + Self::FileError => c::TREXIO_FILE_ERROR, + Self::GroupReadError => c::TREXIO_GROUP_READ_ERROR, + Self::GroupWriteError => c::TREXIO_GROUP_WRITE_ERROR, + Self::ElemReadError => c::TREXIO_ELEM_READ_ERROR, + Self::ElemWriteError => c::TREXIO_ELEM_WRITE_ERROR, + Self::UnsafeArrayDim => c::TREXIO_UNSAFE_ARRAY_DIM, + Self::AttrMissing => c::TREXIO_ATTR_MISSING, + Self::DsetMissing => c::TREXIO_DSET_MISSING, + Self::BackEndMissing => c::TREXIO_BACK_END_MISSING, + Self::InvalidArg(6) => c::TREXIO_INVALID_ARG_6, + Self::InvalidArg(7) => c::TREXIO_INVALID_ARG_7, + Self::InvalidArg(8) => c::TREXIO_INVALID_ARG_8, + Self::InvalidStrLen => c::TREXIO_INVALID_STR_LEN, + Self::IntSizeOverflow => c::TREXIO_INT_SIZE_OVERFLOW, + Self::SafeMode => c::TREXIO_SAFE_MODE, + Self::InvalidElectronNum => c::TREXIO_INVALID_ELECTRON_NUM, + Self::InvalidDeterminantNum => c::TREXIO_INVALID_DETERMINANT_NUM, + Self::InvalidState => c::TREXIO_INVALID_STATE, + Self::VersionParsingIssue => c::TREXIO_VERSION_PARSING_ISSUE, + Self::PhaseChange => c::TREXIO_PHASE_CHANGE, + _ => panic!("Unknown exit code"), } } pub fn to_str(&self) -> Result<&'static str, Utf8Error> { let c_error = self.to_c(); - let c_buf: *const c_char = unsafe { c::trexio_string_of_error( c_error ) }; + let c_buf: *const c_char = unsafe { c::trexio_string_of_error(c_error) }; let c_str: &CStr = unsafe { CStr::from_ptr(c_buf) }; c_str.to_str() } } -use std::fmt; use std::error::Error; -use std::ffi::CStr; use std::ffi::c_char; +use std::ffi::CStr; +use std::fmt; use std::str::Utf8Error; impl fmt::Display for ExitCode { diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 298a8028..492aa3a1 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -1,12 +1,12 @@ -/// TREXIO is an open-source file format and library developed for the storage and manipulation of -/// data produced by quantum chemistry calculations. It was designed with the goal of providing a -/// reliable and efficient method of storing and exchanging wave function parameters and matrix -/// elements. -/// -/// For comprehensive documentation, consult: [TREXIO Documentation](https://trex-coe.github.io/trexio/) -/// -/// The C library source code is available on GitHub: [TREXIO GitHub Repository](https://github.com/trex-coe/trexio) -/// +//! TREXIO is an open-source file format and library developed for the storage and manipulation of +//! data produced by quantum chemistry calculations. It was designed with the goal of providing a +//! reliable and efficient method of storing and exchanging wave function parameters and matrix +//! elements. +//! +//! For comprehensive documentation, consult: [TREXIO Documentation](https://trex-coe.github.io/trexio/) +//! +//! The C library source code is available on GitHub: [TREXIO GitHub Repository](https://github.com/trex-coe/trexio) +//! use ::std::os::raw::c_char; @@ -16,6 +16,7 @@ mod c; /// These error codes are mapped to those defined in the original C TREXIO library. pub mod exit_code; pub use exit_code::ExitCode; +use exit_code::ExitCode::InvalidArg; /// Enum representing the different backends that TREXIO can employ for data storage. pub mod back_end; @@ -26,14 +27,15 @@ pub mod bitfield; pub use bitfield::Bitfield; /// A constant string representing the package version of the linked C TREXIO library. -pub const PACKAGE_VERSION : &str = unsafe { std::str::from_utf8_unchecked(c::TREXIO_PACKAGE_VERSION) }; +pub const PACKAGE_VERSION: &str = + unsafe { std::str::from_utf8_unchecked(c::TREXIO_PACKAGE_VERSION) }; /// Utility function to convert Rust results into TREXIO exit codes. -fn rc_return(result: T, rc : c::trexio_exit_code) -> Result { +fn rc_return(result: T, rc: c::trexio_exit_code) -> Result { let rc = ExitCode::from(rc); match rc { ExitCode::Success => Ok(result), - x => Err(x) + x => Err(x), } } @@ -42,22 +44,18 @@ fn string_to_c(s: &str) -> std::ffi::CString { std::ffi::CString::new(s).unwrap() } - /// Function to print out diagnostic information about the linked C TREXIO library. -pub fn info() -> Result<(),ExitCode> { +pub fn info() -> Result<(), ExitCode> { let rc = unsafe { c::trexio_info() }; rc_return((), rc) } - /// Type representing a TREXIO file. Wraps a pointer to the underlying C structure. pub struct File { ptr: *mut c::trexio_t, } - impl File { - /// Opens a TREXIO file. Returns a `File` instance that can be used for subsequent I/O operations. /// /// # Parameters @@ -88,7 +86,6 @@ impl File { rc_return((), rc) } - /// Inquires if a file with the specified name exists. /// /// # Parameters @@ -107,7 +104,7 @@ impl File { match ExitCode::from(rc) { ExitCode::Failure => Ok(false), ExitCode::Success => Ok(true), - x => Err(x), + x => Err(x), } } @@ -157,11 +154,9 @@ impl File { /// otherwise returns `Err(ExitCode)`. pub fn get_int64_num(&self) -> Result { let mut num = 0i32; - let rc = unsafe { - c::trexio_get_int64_num(self.ptr, &mut num) - }; - let num:usize = num.try_into().expect("try_into failed in get_int64_num"); - rc_return(num, rc) + let rc = unsafe { c::trexio_get_int64_num(self.ptr, &mut num) }; + let num: usize = num.try_into().expect("try_into failed in get_int64_num"); + rc_return(num, rc) } /// Writes a vector of determinants, represented as [Bitfield] objects. @@ -175,27 +170,36 @@ impl File { /// /// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, /// otherwise returns `Err(ExitCode)`. - pub fn write_determinant_list(&self, offset: usize, determinants: &[Bitfield]) -> Result<(), ExitCode> { + pub fn write_determinant_list( + &self, + offset: usize, + determinants: &[Bitfield], + ) -> Result<(), ExitCode> { let n_int = self.get_int64_num()?; match determinants.len() { 0 => return Ok(()), - _ => if determinants[0].as_vec().len() != 2*n_int { - return Err(exit_code::Invalid_Arg(3)) + _ => { + if determinants[0].as_vec().len() != 2 * n_int { + return Err(InvalidArg(3)); + } } }; - let offset: i64 = offset.try_into().expect("try_into failed in write_determinant_list"); - let buffer_size: i64 = determinants.len().try_into().expect("try_into failed in write_determinant_list"); + let offset: i64 = offset + .try_into() + .expect("try_into failed in write_determinant_list"); + let buffer_size: i64 = determinants + .len() + .try_into() + .expect("try_into failed in write_determinant_list"); let mut one_d_array: Vec = Vec::with_capacity(determinants.len() * n_int); for det in determinants.iter() { - for i in det.as_vec().iter() { - one_d_array.push(i.clone()); - } + for i in det.as_vec().iter() { + one_d_array.push(i.clone()); + } } let dset: *const i64 = one_d_array.as_ptr() as *const i64; - let rc = unsafe { - c::trexio_write_determinant_list(self.ptr, offset, buffer_size, dset) - }; - rc_return((), rc) + let rc = unsafe { c::trexio_write_determinant_list(self.ptr, offset, buffer_size, dset) }; + rc_return((), rc) } /// Reads a vector of determinants, represented as [Bitfield] objects. @@ -207,34 +211,50 @@ impl File { /// /// # Returns /// - /// * `Result, ExitCode>` - Returns the read determinants as `Ok(Vec)` + /// * `Result, ExitCode>` - Returns the read determinants as `Ok(Vec)` /// if the operation is successful, otherwise returns `Err(ExitCode)`. - pub fn read_determinant_list(&self, offset: usize, buffer_size: usize) -> Result, ExitCode> { + pub fn read_determinant_list( + &self, + offset: usize, + buffer_size: usize, + ) -> Result, ExitCode> { let n_int = self.get_int64_num()?; - let mut one_d_array: Vec = Vec::with_capacity(buffer_size * 2* n_int); + let mut one_d_array: Vec = Vec::with_capacity(buffer_size * 2 * n_int); let one_d_array_ptr = one_d_array.as_ptr() as *mut i64; let rc = unsafe { - let offset: i64 = offset.try_into().expect("try_into failed in read_determinant_list (offset)"); - let mut buffer_size_read: i64 = buffer_size.try_into().expect("try_into failed in read_determinant_list (buffer_size)"); - let rc = c::trexio_read_determinant_list(self.ptr, offset, &mut buffer_size_read, one_d_array_ptr); - let buffer_size_read: usize = buffer_size_read.try_into().expect("try_into failed in read_determinant_list (buffer_size)"); - one_d_array.set_len(n_int*2usize*buffer_size_read); + let offset: i64 = offset + .try_into() + .expect("try_into failed in read_determinant_list (offset)"); + let mut buffer_size_read: i64 = buffer_size + .try_into() + .expect("try_into failed in read_determinant_list (buffer_size)"); + let rc = c::trexio_read_determinant_list( + self.ptr, + offset, + &mut buffer_size_read, + one_d_array_ptr, + ); + let buffer_size_read: usize = buffer_size_read + .try_into() + .expect("try_into failed in read_determinant_list (buffer_size)"); + one_d_array.set_len(n_int * 2usize * buffer_size_read); match ExitCode::from(rc) { - ExitCode::End => ExitCode::to_c(&ExitCode::Success), - ExitCode::Success => { assert_eq!(buffer_size_read, buffer_size); rc } - _ => rc + ExitCode::End => ExitCode::to_c(&ExitCode::Success), + ExitCode::Success => { + assert_eq!(buffer_size_read, buffer_size); + rc + } + _ => rc, } }; - let result: Vec:: = one_d_array.chunks(2*n_int) - .collect::>() - .iter() - .map(|x| (Bitfield::from_vec(&x))) - .collect::>(); - rc_return(result, rc) + let result: Vec = one_d_array + .chunks(2 * n_int) + .collect::>() + .iter() + .map(|x| (Bitfield::from_vec(&x))) + .collect::>(); + rc_return(result, rc) } - } include!("generated.rs"); - - diff --git a/rust/trexio/tests/read_write.rs b/rust/trexio/tests/read_write.rs index fead812f..ebdd88fa 100644 --- a/rust/trexio/tests/read_write.rs +++ b/rust/trexio/tests/read_write.rs @@ -1,49 +1,49 @@ use trexio::back_end::BackEnd; use trexio::bitfield::Bitfield; - fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { - // Prepare data to be written let nucleus_num = 12; let state_id = 2; let charge = vec![6., 6., 6., 6., 6., 6., 1., 1., 1., 1., 1., 1.0f64]; - let coord = vec![ [ 0.00000000f64, 1.39250319 , 0.00 ], - [ -1.20594314, 0.69625160 , 0.00 ], - [ -1.20594314, -0.69625160 , 0.00 ], - [ 0.00000000, -1.39250319 , 0.00 ], - [ 1.20594314, -0.69625160 , 0.00 ], - [ 1.20594314, 0.69625160 , 0.00 ], - [ -2.14171677, 1.23652075 , 0.00 ], - [ -2.14171677, -1.23652075 , 0.00 ], - [ 0.00000000, -2.47304151 , 0.00 ], - [ 2.14171677, -1.23652075 , 0.00 ], - [ 2.14171677, 1.23652075 , 0.00 ], - [ 0.00000000, 2.47304151 , 0.00 ]]; + let coord = vec![ + [0.00000000f64, 1.39250319, 0.00], + [-1.20594314, 0.69625160, 0.00], + [-1.20594314, -0.69625160, 0.00], + [0.00000000, -1.39250319, 0.00], + [1.20594314, -0.69625160, 0.00], + [1.20594314, 0.69625160, 0.00], + [-2.14171677, 1.23652075, 0.00], + [-2.14171677, -1.23652075, 0.00], + [0.00000000, -2.47304151, 0.00], + [2.14171677, -1.23652075, 0.00], + [2.14171677, 1.23652075, 0.00], + [0.00000000, 2.47304151, 0.00], + ]; let flat_coord = coord.into_iter().flatten().collect::>(); let mo_num = 150; let ao_num = 1000; let basis_shell_num = 24; let basis_nucleus_index: Vec = (0..24).collect(); - let label = vec![ "C", "Na", "C", "C 66", "C", - "C", "H 99", "Ru", "H", "H", "H", "H" ]; + let label = vec![ + "C", "Na", "C", "C 66", "C", "C", "H 99", "Ru", "H", "H", "H", "H", + ]; let sym_str = "B3U with some comments"; - println!("Write {}", file_name); - assert!( ! trexio::File::inquire(file_name)? ); + assert!(!trexio::File::inquire(file_name)?); let trex_file = trexio::File::open(file_name, 'w', back_end)?; - assert!( ! trex_file.has_nucleus()? ); - assert!( ! trex_file.has_nucleus_num()? ); - assert!( ! trex_file.has_nucleus_charge()? ); - assert!( ! trex_file.has_ao_2e_int()? ); - assert!( ! trex_file.has_ao_2e_int_eri()? ); - assert!( ! trex_file.has_determinant_list()? ); + assert!(!trex_file.has_nucleus()?); + assert!(!trex_file.has_nucleus_num()?); + assert!(!trex_file.has_nucleus_charge()?); + assert!(!trex_file.has_ao_2e_int()?); + assert!(!trex_file.has_ao_2e_int_eri()?); + assert!(!trex_file.has_determinant_list()?); trex_file.write_nucleus_num(nucleus_num)?; trex_file.write_nucleus_charge(&charge)?; @@ -54,84 +54,80 @@ fn write(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { trex_file.write_basis_nucleus_index(&basis_nucleus_index)?; trex_file.write_state_id(state_id)?; - if ! trex_file.has_ao_num()? { + if !trex_file.has_ao_num()? { trex_file.write_ao_num(ao_num)?; } - if ! trex_file.has_mo_num()? { + if !trex_file.has_mo_num()? { trex_file.write_mo_num(mo_num)?; } let mut energy = Vec::with_capacity(mo_num); for i in 0..mo_num { - let e: f64 = i as f64 -100.0f64; + let e: f64 = i as f64 - 100.0f64; energy.push(e); } trex_file.write_mo_energy(&energy)?; - let mut spin = vec![0 ; mo_num]; - for i in mo_num/2..mo_num { + let mut spin = vec![0; mo_num]; + for i in mo_num / 2..mo_num { spin[i] = 1; } trex_file.write_mo_spin(&spin)?; // Integrals let nmax = 100; - let mut ao_2e_int_eri = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); + let mut ao_2e_int_eri = Vec::<(usize, usize, usize, usize, f64)>::with_capacity(nmax); let n_buffers = 5; - let bufsize = nmax/n_buffers; + let bufsize = nmax / n_buffers; for i in 0..100 { // Quadruplet of indices + value - let data = (4*i, 4*i+1, 4*i+2, 4*i+3, 3.14 + (i as f64)); + let data = (4 * i, 4 * i + 1, 4 * i + 2, 4 * i + 3, 3.14 + (i as f64)); ao_2e_int_eri.push(data); } let mut offset = 0; for _ in 0..n_buffers { - trex_file.write_ao_2e_int_eri(offset, &ao_2e_int_eri[offset..offset+bufsize])?; + trex_file.write_ao_2e_int_eri(offset, &ao_2e_int_eri[offset..offset + bufsize])?; offset += bufsize; } - // Determinants let det_num = 50; let mut det_list = Vec::with_capacity(det_num); for i in 0..det_num { - let mut d = [0i64 ; 6 ]; + let mut d = [0i64; 6]; for j in 0..6 { - d[j] = 6*(i as i64)+(j as i64); + d[j] = 6 * (i as i64) + (j as i64); } - det_list.push( Bitfield::from_vec(&d) ); + det_list.push(Bitfield::from_vec(&d)); } let n_buffers = 5; - let bufsize = 50/n_buffers; + let bufsize = 50 / n_buffers; let mut offset = 0; for _ in 0..n_buffers { - trex_file.write_determinant_list(offset, &det_list[offset..offset+bufsize])?; + trex_file.write_determinant_list(offset, &det_list[offset..offset + bufsize])?; offset += bufsize; } - trex_file.close() - } fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { - println!("Read {}", file_name); - assert!( trexio::File::inquire(file_name)? ); + assert!(trexio::File::inquire(file_name)?); let trex_file = trexio::File::open(file_name, 'r', back_end)?; - assert!( trex_file.has_nucleus()? ); - assert!( trex_file.has_nucleus_num()? ); - assert!( trex_file.has_nucleus_charge()? ); - assert!( trex_file.has_ao_2e_int()? ); - assert!( trex_file.has_ao_2e_int_eri()? ); - assert!( trex_file.has_determinant_list()? ); + assert!(trex_file.has_nucleus()?); + assert!(trex_file.has_nucleus_num()?); + assert!(trex_file.has_nucleus_charge()?); + assert!(trex_file.has_ao_2e_int()?); + assert!(trex_file.has_ao_2e_int_eri()?); + assert!(trex_file.has_determinant_list()?); let nucleus_num = trex_file.read_nucleus_num()?; assert_eq!(nucleus_num, 12); @@ -140,31 +136,65 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { assert_eq!(sym_str, "B3U with some comments"); let charge = trex_file.read_nucleus_charge()?; - assert_eq!(charge, vec![6., 6., 6., 6., 6., 6., 1., 1., 1., 1., 1., 1.0f64]); + assert_eq!( + charge, + vec![6., 6., 6., 6., 6., 6., 1., 1., 1., 1., 1., 1.0f64] + ); let coord = trex_file.read_nucleus_coord()?; - assert_eq!(coord, vec![ 0.00000000f64, 1.39250319 , 0.00, - -1.20594314, 0.69625160 , 0.00, - -1.20594314, -0.69625160 , 0.00, - 0.00000000, -1.39250319 , 0.00, - 1.20594314, -0.69625160 , 0.00, - 1.20594314, 0.69625160 , 0.00, - -2.14171677, 1.23652075 , 0.00, - -2.14171677, -1.23652075 , 0.00, - 0.00000000, -2.47304151 , 0.00, - 2.14171677, -1.23652075 , 0.00, - 2.14171677, 1.23652075 , 0.00, - 0.00000000, 2.47304151 , 0.00 ]); + assert_eq!( + coord, + vec![ + 0.00000000f64, + 1.39250319, + 0.00, + -1.20594314, + 0.69625160, + 0.00, + -1.20594314, + -0.69625160, + 0.00, + 0.00000000, + -1.39250319, + 0.00, + 1.20594314, + -0.69625160, + 0.00, + 1.20594314, + 0.69625160, + 0.00, + -2.14171677, + 1.23652075, + 0.00, + -2.14171677, + -1.23652075, + 0.00, + 0.00000000, + -2.47304151, + 0.00, + 2.14171677, + -1.23652075, + 0.00, + 2.14171677, + 1.23652075, + 0.00, + 0.00000000, + 2.47304151, + 0.00 + ] + ); let label = trex_file.read_nucleus_label(6)?; - assert_eq!(label, vec![ "C", "Na", "C", "C 66", "C", - "C", "H 99", "Ru", "H", "H", "H", "H" ]); + assert_eq!( + label, + vec!["C", "Na", "C", "C 66", "C", "C", "H 99", "Ru", "H", "H", "H", "H"] + ); let basis_shell_num = trex_file.read_basis_shell_num()?; assert_eq!(basis_shell_num, 24); let basis_nucleus_index = trex_file.read_basis_nucleus_index()?; - let ref_val : Vec = (0..24).collect(); + let ref_val: Vec = (0..24).collect(); assert_eq!(basis_nucleus_index, ref_val); let state_id = trex_file.read_state_id()?; @@ -178,14 +208,14 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { let mut energy_ref = Vec::with_capacity(mo_num); for i in 0..mo_num { - let e: f64 = i as f64 -100.0f64; + let e: f64 = i as f64 - 100.0f64; energy_ref.push(e); } let energy = trex_file.read_mo_energy()?; assert_eq!(energy, energy_ref); - let mut spin_ref = vec![0 ; mo_num]; - for i in mo_num/2..mo_num { + let mut spin_ref = vec![0; mo_num]; + for i in mo_num / 2..mo_num { spin_ref[i] = 1; } let spin = trex_file.read_mo_spin()?; @@ -193,19 +223,19 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { // Integrals let nmax = 100; - let mut ao_2e_int_eri_ref = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); + let mut ao_2e_int_eri_ref = Vec::<(usize, usize, usize, usize, f64)>::with_capacity(nmax); let n_buffers = 8; - let bufsize = nmax/n_buffers+10; + let bufsize = nmax / n_buffers + 10; for i in 0..100 { // Quadruplet of indices + value - let data = (4*i, 4*i+1, 4*i+2, 4*i+3, 3.14 + (i as f64)); + let data = (4 * i, 4 * i + 1, 4 * i + 2, 4 * i + 3, 3.14 + (i as f64)); ao_2e_int_eri_ref.push(data); } let mut offset = 0; - let mut ao_2e_int_eri = Vec::<(usize,usize,usize,usize,f64)>::with_capacity(nmax); + let mut ao_2e_int_eri = Vec::<(usize, usize, usize, usize, f64)>::with_capacity(nmax); for _ in 0..n_buffers { let buffer = trex_file.read_ao_2e_int_eri(offset, bufsize)?; offset += buffer.len(); @@ -213,22 +243,21 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { } assert_eq!(ao_2e_int_eri_ref, ao_2e_int_eri); - // Determinants let det_num = trex_file.read_determinant_num()?; assert_eq!(det_num, 50); let mut det_list_ref = Vec::with_capacity(det_num); for i in 0..det_num { - let mut d = [0i64 ; 6 ]; + let mut d = [0i64; 6]; for j in 0..6 { - d[j] = 6*(i as i64)+(j as i64); + d[j] = 6 * (i as i64) + (j as i64); } - det_list_ref.push( Bitfield::from_vec(&d) ); + det_list_ref.push(Bitfield::from_vec(&d)); } let n_buffers = 8; - let bufsize = det_num/n_buffers + 20; + let bufsize = det_num / n_buffers + 20; let mut offset = 0; let mut det_list: Vec = Vec::with_capacity(det_num); for _ in 0..n_buffers { @@ -239,7 +268,6 @@ fn read(file_name: &str, back_end: BackEnd) -> Result<(), trexio::ExitCode> { assert_eq!(det_list_ref, det_list); trex_file.close() - } #[test] @@ -247,7 +275,6 @@ pub fn info() { let _ = trexio::info(); } - use std::fs; #[test] @@ -263,4 +290,3 @@ pub fn hdf5_backend() { let _ = read("tmp/test_write.hdf5", trexio::BackEnd::Hdf5).unwrap(); fs::remove_file("tmp/test_write.hdf5").unwrap() } - From 8a2ded80bc4d677681795527e4915736771a2636 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 18 Oct 2023 15:51:00 +0200 Subject: [PATCH 26/43] Improved with clippy --- rust/trexio/Makefile | 2 +- rust/trexio/build.py | 16 ++++++++++------ rust/trexio/src/bitfield.rs | 12 ++++++------ rust/trexio/src/lib.rs | 10 +++++----- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/rust/trexio/Makefile b/rust/trexio/Makefile index cd8509b7..bb6fc056 100644 --- a/rust/trexio/Makefile +++ b/rust/trexio/Makefile @@ -2,7 +2,7 @@ default: src/generated.rs cargo build cargo test -generated.rs: build.py +src/generated.rs: build.py python3 build.py test: default diff --git a/rust/trexio/build.py b/rust/trexio/build.py index f275b1cb..f3082fdd 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -88,7 +88,11 @@ def make_functions(): /// This implementation block includes additional functions automatically generated from tables. /// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). -impl File {""" ] +impl File { +#![allow(clippy::unnecessary_cast)] +#![allow(clippy::useless_conversion)] +#![allow(clippy::type_complexity)] +""" ] for group in data: group_l = group.lower() @@ -407,12 +411,12 @@ def make_functions(): let mut dset_out: Vec<*mut i8> = vec![std::ptr::null_mut(); size]; // Allocate C-style strings and populate dset_out - for i in 0..size{ + for item in dset_out.iter_mut().take(size){ let c_str: *mut i8 = unsafe { std::alloc::alloc_zeroed(std::alloc::Layout::array::(capacity).unwrap()) as *mut i8 }; if c_str.is_null() { return Err(ExitCode::AllocationFailed); } - dset_out[i] = c_str; + *item = c_str; } @@ -461,11 +465,11 @@ def make_functions(): pub fn write_{group_l}_{element_l}(&self, data: &[&str]) -> Result<(), ExitCode> { let mut size = 0; // Find longest string - for s in data.iter() { + for s in data { let l = s.len(); size = if l>size {l} else {size}; } - size = size+1; + size += 1; let data_c : Vec = data.iter().map(|&x| string_to_c(x)).collect::>(); let data_c : Vec<*const c_char> = data_c.iter().map(|x| x.as_ptr() as *const c_char).collect::>(); let size : i32 = size.try_into().expect("try_into failed in write_{group}_{element} (size)"); @@ -557,7 +561,7 @@ def make_functions(): let mut idx = Vec::::with_capacity({size}*data.len()); let mut val = Vec::::with_capacity(data.len()); - for d in data.iter() { + for d in data { """ + '\n'.join([ f" idx.push(d.{i}.try_into().unwrap());" for i in range(size) ]) + f"\n val.push(d.{size});" + diff --git a/rust/trexio/src/bitfield.rs b/rust/trexio/src/bitfield.rs index de722f88..dd0119cd 100644 --- a/rust/trexio/src/bitfield.rs +++ b/rust/trexio/src/bitfield.rs @@ -15,7 +15,7 @@ impl Bitfield { .len() .try_into() .expect("try_into failed in Bitfield::from"); - let orb_list_ptr = orb_list.as_ptr() as *const i32; + let orb_list_ptr: *const i32 = orb_list.as_ptr(); let n_int32: i32 = n_int.try_into().expect("try_into failed in Bitfield::from"); let mut b = vec![0i64; n_int]; let bit_list = b.as_mut_ptr() as *mut c::bitfield_t; @@ -50,7 +50,7 @@ impl Bitfield { pub fn alpha(&self) -> Bitfield { let n_int = self.data.len() / 2; Bitfield { - data: (&self.data[0..n_int]).to_vec(), + data: (self.data[0..n_int]).to_vec(), } } @@ -58,7 +58,7 @@ impl Bitfield { pub fn beta(&self) -> Bitfield { let n_int = self.data.len() / 2; Bitfield { - data: (&self.data[n_int..2 * n_int]).to_vec(), + data: (self.data[n_int..2 * n_int]).to_vec(), } } @@ -86,7 +86,7 @@ impl Bitfield { let d1 = self.as_ptr(); let cap = self.data.len() * 64; let mut list = vec![0i32; cap]; - let list_c = list.as_mut_ptr() as *mut i32; + let list_c: *mut i32 = list.as_mut_ptr(); std::mem::forget(list); let mut occ_num: i32 = 0; @@ -120,10 +120,10 @@ impl Bitfield { let d1 = self.as_ptr(); let cap = self.data.len() / 2 * 64; let mut b = vec![0i32; cap]; - let list_up_c = b.as_mut_ptr() as *mut i32; + let list_up_c: *mut i32 = b.as_mut_ptr(); std::mem::forget(b); let mut b = vec![0i32; cap]; - let list_dn_c = b.as_mut_ptr() as *mut i32; + let list_dn_c: *mut i32 = b.as_mut_ptr(); std::mem::forget(b); let mut occ_num_up: i32 = 0; diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 492aa3a1..69bf73d1 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -192,12 +192,12 @@ impl File { .try_into() .expect("try_into failed in write_determinant_list"); let mut one_d_array: Vec = Vec::with_capacity(determinants.len() * n_int); - for det in determinants.iter() { - for i in det.as_vec().iter() { - one_d_array.push(i.clone()); + for det in determinants { + for i in det.as_vec() { + one_d_array.push(*i); } } - let dset: *const i64 = one_d_array.as_ptr() as *const i64; + let dset: *const i64 = one_d_array.as_ptr(); let rc = unsafe { c::trexio_write_determinant_list(self.ptr, offset, buffer_size, dset) }; rc_return((), rc) } @@ -251,7 +251,7 @@ impl File { .chunks(2 * n_int) .collect::>() .iter() - .map(|x| (Bitfield::from_vec(&x))) + .map(|x| (Bitfield::from_vec(x))) .collect::>(); rc_return(result, rc) } From fcedff429c2f9f0f64b37fd85346ca532e8b8d4c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 18 Oct 2023 18:09:00 +0200 Subject: [PATCH 27/43] Moving code generation in build.rs --- README.md | 2 +- rust/trexio/Cargo.toml | 11 +- rust/trexio/README.md | 42 +++++ rust/trexio/build.py | 303 +++++--------------------------- rust/trexio/build.rs | 389 ++++++++++++++++++++++++++++++++++++++++- rust/trexio/src/lib.rs | 1 + 6 files changed, 479 insertions(+), 269 deletions(-) create mode 100644 rust/trexio/README.md diff --git a/README.md b/README.md index 5e16e3b6..70a2e7c7 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![build](https://github.com/TREX-CoE/trexio/actions/workflows/actions.yml/badge.svg)](https://github.com/TREX-CoE/trexio/actions/workflows/actions.yml) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/TREX-CoE/trexio) -TREXIO is an open-source file format and library developed for the storage and manipulation of data produced by quantum chemistry calculations. It is designed with the goal of providing a reliable and efficient method of storing and exchanging wave function parameters and matrix elements, making it an important tool for researchers in the field of quantum chemistry. The library consists of a front-end implemented in the C programming language and two different back-ends: a text back-end and a binary back-end utilizing the HDF5 library which enables fast read and write operations. It is compatible with a variety of platforms and has interfaces for the Fortran, Python, OCaml and Rust programming languages. +TREXIO is an open-source file format and library developed for the storage and manipulation of data produced by quantum chemistry calculations. It is designed with the goal of providing a reliable and efficient method of storing and exchanging wave function parameters and matrix elements. The library consists of a front-end implemented in the C programming language and two different back-ends: a text back-end and a binary back-end utilizing the HDF5 library which enables fast read and write operations. It is compatible with a variety of platforms and has interfaces for the Fortran, Python, OCaml and Rust programming languages. ## Minimal requirements (for users): diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 758c86f0..6f31333d 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -3,14 +3,21 @@ name = "trexio" version = "2.4.0" edition = "2021" license = "BSD-3-Clause" +authors = ["Anthony Scemama ", "Evgeny Posenitskiy"] description = "TREXIO is an open-source file format and library developed for the storage and manipulation of data produced by quantum chemistry calculations. It is designed with the goal of providing a reliable and efficient method of storing and exchanging wave function parameters and matrix elements." +repository = "https://github.com/trex-coe/trexio" +keywords = ["quantum chemistry"] +readme = "README.md" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -[dependencies] - [build-dependencies] bindgen = "0.65.1" +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } [lib] doctest = false + +[dependencies] + diff --git a/rust/trexio/README.md b/rust/trexio/README.md new file mode 100644 index 00000000..0774ebef --- /dev/null +++ b/rust/trexio/README.md @@ -0,0 +1,42 @@ +# TREXIO + + +TREXIO is an open-source file format and library developed for the storage and +manipulation of data produced by quantum chemistry calculations. It is designed +with the goal of providing a reliable and efficient method of storing and +exchanging wave function parameters and matrix elements. + +This crate is the Rust binding for the TREXIO C library: +![GitHub release (latest by date)](https://img.shields.io/github/v/release/TREX-CoE/trexio) + + +## Documentation + +[TREXIO Documentation.](https://trex-coe.github.io/trexio/) + + +## Citation + +The journal article reference describing TREXIO can be cited as follows: + +``` +@article{10.1063/5.0148161, + author = {Posenitskiy, Evgeny and Chilkuri, Vijay Gopal and Ammar, Abdallah and Hapka, Michał and Pernal, Katarzyna and Shinde, Ravindra and Landinez Borda, Edgar Josué and Filippi, Claudia and Nakano, Kosuke and Kohulák, Otto and Sorella, Sandro and de Oliveira Castro, Pablo and Jalby, William and Ríos, Pablo López and Alavi, Ali and Scemama, Anthony}, + title = "{TREXIO: A file format and library for quantum chemistry}", + journal = {The Journal of Chemical Physics}, + volume = {158}, + number = {17}, + year = {2023}, + month = {05}, + issn = {0021-9606}, + doi = {10.1063/5.0148161}, + url = {https://doi.org/10.1063/5.0148161}, + note = {174801}, + eprint = {https://pubs.aip.org/aip/jcp/article-pdf/doi/10.1063/5.0148161/17355866/174801\_1\_5.0148161.pdf}, +} +``` + +Journal paper: [![doi](https://img.shields.io/badge/doi-10.1063/5.0148161-5077AB.svg)](https://doi.org/10.1063/5.0148161) + +ArXiv paper: [![arXiv](https://img.shields.io/badge/arXiv-2302.14793-b31b1b.svg)](https://arxiv.org/abs/2302.14793) + diff --git a/rust/trexio/build.py b/rust/trexio/build.py index f3082fdd..ace960d3 100755 --- a/rust/trexio/build.py +++ b/rust/trexio/build.py @@ -2,275 +2,38 @@ import json json_file = "../../trex.json" -trexio_h = "../../include/trexio.h" -wrapper_h = "wrapper.h" -generated_rs = "src/generated.rs" - -def check_version(): - with open('Cargo.toml','r') as f: - for line in f: - if line.startswith("version"): - rust_version = line.split('=')[1].strip()[1:-1] - break - with open('../../configure.ac','r') as f: - for line in f: - if line.startswith("AC_INIT"): - trexio_version = line.split(',')[1].strip()[1:-1] - break - if rust_version != trexio_version: - print(f"Inconsistent versions:\nTREXIO:{trexio_version}\nRust: {rust_version}\n") - raise - - - -def make_interface(): - err = {} - be = {} - with open(trexio_h, 'r') as f: - for line in f: - buf = line.lstrip() - - # Get exit codes - if buf.startswith("#define TREXIO_") and "(trexio_exit_code)" in buf : - buf2 = buf.replace(")","").replace("(","").split() - err[buf2[1]] = int(buf2[3].strip()) - - # Get backends - if buf.startswith("#define TREXIO_") and "(back_end_t)" in buf : - buf2 = buf.replace(")","").replace("(","").split() - be[buf2[1]] = int(buf2[3].strip()) - - with open(wrapper_h,'w') as f: - f.write("#include \n") - - # Write exit codes - for k, v in err.items(): - f.write(f"#undef {k}\n") - f.write(f"const trexio_exit_code {k} = {v};\n") - - # Write backends - for k, v in be.items(): - f.write(f"#undef {k}\n") - f.write(f"const back_end_t {k} = {v};\n") - - f.write(f"#undef TREXIO_AUTO;\n") - f.write(f"const back_end_t TREXIO_AUTO = TREXIO_INVALID_BACK_END;\n") - - - -def make_functions(): - with open(json_file,'r') as f: - data = json.load(f) - - convert_r = { "int": "i64", - "int special" : "usize", - "float" : "f64", - "float sparse" : "f64", - "float buffered" : "f64", - "dim" : "usize", - "dim readonly" : "usize", - "index" : "usize", - "str" : "str"} - - convert_c = { "int": "i64", - "int special" : "i64", - "float" : "f64", - "float sparse" : "f64", - "float buffered" : "f64", - "dim" : "i64", - "dim readonly" : "i64", - "index" : "i64", - "str" : "str"} - - r = [""" -use std::iter::zip; -use std::ffi::CString; - -/// This implementation block includes additional functions automatically generated from tables. -/// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). -impl File { -#![allow(clippy::unnecessary_cast)] -#![allow(clippy::useless_conversion)] -#![allow(clippy::type_complexity)] -""" ] - +generated_rs = "src/generated_py.rs" + +convert_r = { "int": "i64", + "int special" : "usize", + "float" : "f64", + "float sparse" : "f64", + "float buffered" : "f64", + "dim" : "usize", + "dim readonly" : "usize", + "index" : "usize", + "str" : "str"} + +convert_c = { "int": "i64", + "int special" : "i64", + "float" : "f64", + "float sparse" : "f64", + "float buffered" : "f64", + "dim" : "i64", + "dim readonly" : "i64", + "index" : "i64", + "str" : "str"} + +def make_array_functions(data): + r = [] for group in data: group_l = group.lower() - r += [ """ -/// Checks if the group `{group}` exists in the file. -/// # Parameters -/// -/// None -/// -/// # Returns -/// -/// * `Result` - Returns `Ok(true)` if the element exists in the file, -/// otherwise returns `Ok(false)`. An error during the execution results in `Err(ExitCode)`. -pub fn has_{group_l}(&self) -> Result { - let rc = unsafe { c::trexio_has_{group}(self.ptr) }; - match rc { - c::TREXIO_SUCCESS => Ok(true), - c::TREXIO_HAS_NOT => Ok(false), - x => Err(ExitCode::from(x)), - } -} -""" -.replace("{group}",group) -.replace("{group_l}",group_l) ] for element in data[group]: type_c = convert_c[data[group][element][0]] type_r = convert_r[data[group][element][0]] element_l = element.lower() - r += [ """ -/// Checks if the element `{element}` of the group `{group}` exists in the file. -/// -/// # Parameters -/// -/// None -/// -/// # Returns -/// -/// * `Result` - Returns `Ok(true)` if the element exists in the file, -/// otherwise returns `Ok(false)`. An error during the execution results in `Err(ExitCode)`. -pub fn has_{group_l}_{element_l}(&self) -> Result { - let rc = unsafe { c::trexio_has_{group}_{element}(self.ptr) }; - match rc { - c::TREXIO_SUCCESS => Ok(true), - c::TREXIO_HAS_NOT => Ok(false), - x => Err(ExitCode::from(x)), - } -} -""" -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - # Scalar elements - if data[group][element][1] == []: - if data[group][element][0] in [ "int", "float", "dim", "index" ]: - r += [ """ -/// Reads the scalar element `{element}` from the group `{group}` in the file. -/// -/// # Parameters -/// -/// None -/// -/// # Returns -/// -/// * `Result<{type_r}, ExitCode>` - Returns the scalar element as a `{type_r}` upon successful -/// operation. If the operation fails, it returns `Err(ExitCode)`. -pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> { - let mut data_c: {type_c} = 0{type_c}; - let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}_64(self.ptr, &mut data_c); - (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) - }; - rc_return(data, rc) -} - -/// Writes the scalar element `{element}` into the group `{group}` in the file. -/// -/// # Parameters -/// -/// * `data: {type_r}` - A `{type_r}` scalar element that will be written into `{element}` in the group `{group}`. -/// -/// # Returns -/// -/// * `Result<(), ExitCode>` - Returns `Ok(())` upon successful operation, otherwise returns `Err(ExitCode)`. -pub fn write_{group_l}_{element_l}(&self, data: {type_r}) -> Result<(), ExitCode> { - let data: {type_c} = data.try_into().expect("try_into failed in write_{group_l}_{element_l}"); - let rc = unsafe { c::trexio_write_{group}_{element}_64(self.ptr, data) }; - rc_return((), rc) -} -""" -.replace("{type_c}",type_c) -.replace("{type_r}",type_r) -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - elif data[group][element][0] in [ "str" ]: - r += [ """ -/// Reads the string attribute `{element}` contained in the group `{group}`. -/// # Parameters -/// -/// * `capacity: usize` - The maximum buffer size allocated for the string to be read. -/// -/// # Returns -/// -/// * `Result` - Returns the attribute as a `String` upon successful operation. -/// If the operation fails, it returns `Err(ExitCode)`. -pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result { - let data_c = CString::new(vec![ b' ' ; capacity]).expect("CString::new failed"); - let (rc, data) = unsafe { - let data_c = data_c.into_raw() as *mut c_char; - let rc = c::trexio_read_{group}_{element}(self.ptr, data_c, capacity.try_into().expect("try_into failed in read_{group_l}_{element_l}")); - (rc, CString::from_raw(data_c)) - }; - let result : String = CString::into_string(data).expect("into_string failed in read_{group_l}_{element_l}"); - rc_return(result, rc) -} - - -/// Writes the string attribute `{element}` into the group `{group}`. -/// -/// # Parameters -/// -/// * `data: &str` - The string attribute that will be written into the `{element}` field in the `{group}` group. -/// -/// # Returns -/// -/// * `Result<(), ExitCode>` - Returns `Ok(())` upon successful operation. -/// If the operation fails, it returns `Err(ExitCode)`. -pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> { - let size : i32 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); - let data = string_to_c(data); - let data = data.as_ptr() as *const c_char; - let rc = unsafe { c::trexio_write_{group}_{element}(self.ptr, data, size) }; - rc_return((), rc) -} -""" -.replace("{type_c}",type_c) -.replace("{type_r}",type_r) -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - - elif data[group][element][0] in [ "dim readonly" ]: - r += [ """ -/// Reads the dimensioning variable `{element}` from the group `{group}`. -/// -/// # Parameters -/// -/// None. -/// -/// # Returns -/// -/// * `Result<{type_r}, ExitCode>` - Returns the dimensioning variable `{element}` of type `{type_r}` -/// upon successful operation. If the operation fails, it returns `Err(ExitCode)`. -pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> { - let mut data_c: {type_c} = 0{type_c}; - let (rc, data) = unsafe { - let rc = c::trexio_read_{group}_{element}_64(self.ptr, &mut data_c); - (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) - }; - rc_return(data, rc) -} -""" -.replace("{type_r}",type_r) -.replace("{type_c}",type_c) -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - # Array elements - else: + if data[group][element][1] != []: if data[group][element][0] in [ "int", "float", "dim", "index" ]: t = [ f""" /// Reads the `{element}` array from the group `{group}` in the file. @@ -586,11 +349,25 @@ def make_functions(): .replace("{group_l}",group_l) .replace("{element}",element) .replace("{element_l}",element_l) ] + return r +def make_functions(): + with open(json_file,'r') as f: + data = json.load(f) + r = [""" +use std::iter::zip; +/// This implementation block includes additional functions automatically generated from tables. +/// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). +impl File { +#![allow(clippy::unnecessary_cast)] +#![allow(clippy::useless_conversion)] +#![allow(clippy::type_complexity)] +""" ] + r += make_array_functions(data) r += [ "}" ] with open(generated_rs,'w') as f: @@ -599,6 +376,4 @@ def make_functions(): if __name__ == '__main__': - check_version() - make_interface() make_functions() diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 52e604cc..569102d1 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -1,16 +1,401 @@ +const TREXIO_H: &str = "../../include/trexio.h"; +const WRAPPER_H: &str = "wrapper.h"; +const JSON_FILE: &str = "../../trex.json"; +const GENERATED_RS: &str = "src/generated.rs"; + use std::env; use std::path::PathBuf; +use std::collections::HashMap; +use std::fs::File; +use std::io::{self, BufRead, BufReader, Write}; +use serde_json::Value; +use std::path::Path; + + + + +/// Checks that the version specified in the Cargo.toml file is consistent with the version of the TREXIO C library. +fn check_version() -> Result<(), String> { + // Read version from Cargo.toml + let mut rust_version = String::new(); + { + let file = File::open("Cargo.toml").map_err(|e| e.to_string())?; + let reader = io::BufReader::new(file); + + for line in reader.lines() { + let line = line.map_err(|e| e.to_string())?; + if line.starts_with("version") { + rust_version = line.split('=').nth(1).unwrap().trim().to_string(); + rust_version = rust_version[1..rust_version.len() - 1].to_string(); + break; + } + } + } + + // Read version from ../../configure.ac + let mut trexio_version = String::new(); + { + let file = File::open("../../configure.ac").map_err(|e| e.to_string())?; + let reader = io::BufReader::new(file); + + for line in reader.lines() { + let line = line.map_err(|e| e.to_string())?; + if line.starts_with("AC_INIT") { + trexio_version = line.split(',').nth(1).unwrap().trim().to_string(); + trexio_version = trexio_version[1..trexio_version.len() - 1].to_string(); + break; + } + } + } + + // Compare versions + if rust_version != trexio_version { + eprintln!("Inconsistent versions:\nTREXIO: {}\nRust: {}\n", trexio_version, rust_version); + return Err("Inconsistent versions".to_string()); + } + + Ok(()) +} + + + +/// This function reads from `trexio.h`, extracts the exit codes and backends, and writes them to `wrapper.h`. +fn make_interface() -> io::Result<()> { + let mut err = HashMap::new(); + let mut be = HashMap::new(); + + let trexio_file = File::open(TREXIO_H)?; + let trexio_reader = BufReader::new(trexio_file); + + for line in trexio_reader.lines() { + let line = line?; + let buf = line.trim_start(); + + if buf.starts_with("#define TREXIO_") && buf.contains("(trexio_exit_code)") { + let buf2 = buf.replace(")", ""); + let buf2 = buf2.replace("(", ""); + let buf2: Vec<&str> = buf2.split_whitespace().collect(); + err.insert(buf2[1].to_string(), buf2[3].trim().parse::().unwrap()); + } + + if buf.starts_with("#define TREXIO_") && buf.contains("(back_end_t)") { + let buf2 = buf.replace(")", ""); + let buf2 = buf2.replace("(", ""); + let buf2: Vec<&str> = buf2.split_whitespace().collect(); + be.insert(buf2[1].to_string(), buf2[3].trim().parse::().unwrap()); + } + } + + let mut wrapper_file = File::create(WRAPPER_H)?; + write!(&mut wrapper_file, "#include \n")?; + + for (k, v) in &err { + write!(&mut wrapper_file, "#undef {}\n", k)?; + write!(&mut wrapper_file, "const trexio_exit_code {} = {};\n", k, v)?; + } + + for (k, v) in &be { + write!(&mut wrapper_file, "#undef {}\n", k)?; + write!(&mut wrapper_file, "const back_end_t {} = {};\n", k, v)?; + } + + write!(&mut wrapper_file, "#undef TREXIO_AUTO;\n")?; + write!(&mut wrapper_file, "const back_end_t TREXIO_AUTO = TREXIO_INVALID_BACK_END;\n")?; + + Ok(()) +} + + +/// Dictionnary of type conversions +fn convert_r(typ: &str) -> String { + match typ { + "int" => "i64", + "int special" => "usize", + "float" | "float sparse" | "float buffered" => "f64", + "dim" | "dim readonly" | "index" => "usize", + "str" => "str", + _ => panic!("Unknown type to convert: {}", typ) + }.to_string() +} + +fn convert_c(typ: &str) -> String { + match typ { + "int" | "int special" | "dim" | "dim readonly" | "index" => "i64", + "float" | "float sparse" | "float buffered" => "f64", + "str" => "str", + _ => panic!("Unknown type to convert: {}", typ) + }.to_string() +} + + +/// Generate has-functions for checking the existence of groups and elements in a TREXIO file. +/// +/// # Parameters +/// * `data` - The JSON-like data containing the groups and elements. +/// +/// # Returns +/// A `Vec` containing the generated Rust code as strings. +fn make_has_functions(data: &Value) -> Vec { + let mut r = Vec::new(); + + if let Value::Object(groups) = data { + for (group, elements) in groups.iter() { + let group_l = group.to_lowercase(); + + let has_group_func = format!( + "/// Checks if the group `{group}` exists in the file. +/// # Parameters +/// +/// None +/// +/// # Returns +/// +/// * `Result` - Returns `Ok(true)` if the element exists in the file, +/// otherwise returns `Ok(false)`. An error during the execution results in `Err(ExitCode)`. +pub fn has_{group_l}(&self) -> Result {{ + let rc = unsafe {{ c::trexio_has_{group}(self.ptr) }}; + match rc {{ + c::TREXIO_SUCCESS => Ok(true), + c::TREXIO_HAS_NOT => Ok(false), + x => Err(ExitCode::from(x)), + }} +}}", + group = group, + group_l = group_l + ); + + r.push(has_group_func); + + if let Value::Object(elements_map) = elements { + for (element, _types_value) in elements_map.iter() { + let element_l = element.to_lowercase(); + + let has_element_func = format!( + "/// Checks if the element `{element}` of the group `{group}` exists in the file. +/// +/// # Parameters +/// +/// None +/// +/// # Returns +/// +/// * `Result` - Returns `Ok(true)` if the element exists in the file, +/// otherwise returns `Ok(false)`. An error during the execution results in `Err(ExitCode)`. +pub fn has_{group_l}_{element_l}(&self) -> Result {{ + let rc = unsafe {{ c::trexio_has_{group}_{element}(self.ptr) }}; + match rc {{ + c::TREXIO_SUCCESS => Ok(true), + c::TREXIO_HAS_NOT => Ok(false), + x => Err(ExitCode::from(x)), + }} +}}", + group = group, + group_l = group_l, + element = element, + element_l = element_l + ); + + r.push(has_element_func); + } + } + } + } + + r +} + + + + +fn make_scalar_functions(data: &serde_json::Value) -> Vec { + let mut r: Vec = Vec::new(); + + for group in data.as_object().unwrap().keys() { + let group_l = group.to_lowercase(); + + for (element, attributes) in data[group].as_object().unwrap() { + let typ = attributes[0].as_str().unwrap(); + let type_c = convert_c(typ); + let type_r = convert_r(typ); + let element_l = element.to_lowercase(); + + if attributes[1].as_array().unwrap().is_empty() { + match typ { + "int" | "float" | "dim" | "index" => { + let s = format!(r#" +/// Reads the scalar element `{element}` from the group `{group}` in the file. +/// +/// # Parameters +/// +/// None +/// +/// # Returns +/// +/// * `Result<{type_r}, ExitCode>` - Returns the scalar element as a `{type_r}` upon successful +/// operation. If the operation fails, it returns `Err(ExitCode)`. +pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> {{ + let mut data_c: {type_c} = 0{type_c}; + let (rc, data) = unsafe {{ + let rc = c::trexio_read_{group}_{element}_64(self.ptr, &mut data_c); + (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) + }}; + rc_return(data, rc) +}} + +/// Writes the scalar element `{element}` into the group `{group}` in the file. +/// +/// # Parameters +/// +/// * `data: {type_r}` - A `{type_r}` scalar element that will be written into `{element}` in the group `{group}`. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` upon successful operation, otherwise returns `Err(ExitCode)`. +pub fn write_{group_l}_{element_l}(&self, data: {type_r}) -> Result<(), ExitCode> {{ + let data: {type_c} = data.try_into().expect("try_into failed in write_{group_l}_{element_l}"); + let rc = unsafe {{ c::trexio_write_{group}_{element}_64(self.ptr, data) }}; + rc_return((), rc) +}} +"#, + type_c=type_c, type_r=type_r, group=group, group_l=group_l, element=element, element_l=element_l); + r.push(s); + }, + "str" => { + let s = format!(r#" +/// Reads the string attribute `{element}` contained in the group `{group}`. +/// # Parameters +/// +/// * `capacity: usize` - The maximum buffer size allocated for the string to be read. +/// +/// # Returns +/// +/// * `Result` - Returns the attribute as a `String` upon successful operation. +/// If the operation fails, it returns `Err(ExitCode)`. +pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result {{ + let data_c = CString::new(vec![ b' ' ; capacity]).expect("CString::new failed"); + let (rc, data) = unsafe {{ + let data_c = data_c.into_raw() as *mut c_char; + let rc = c::trexio_read_{group}_{element}(self.ptr, data_c, capacity.try_into().expect("try_into failed in read_{group_l}_{element_l}")); + (rc, CString::from_raw(data_c)) + }}; + let result : String = CString::into_string(data).expect("into_string failed in read_{group_l}_{element_l}"); + rc_return(result, rc) +}} + + +/// Writes the string attribute `{element}` into the group `{group}`. +/// +/// # Parameters +/// +/// * `data: &str` - The string attribute that will be written into the `{element}` field in the `{group}` group. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` upon successful operation. +/// If the operation fails, it returns `Err(ExitCode)`. +pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> {{ + let size : i32 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); + let data = string_to_c(data); + let data = data.as_ptr() as *const c_char; + let rc = unsafe {{ c::trexio_write_{group}_{element}(self.ptr, data, size) }}; + rc_return((), rc) +}} +"#, + group=group, group_l=group_l, element=element, element_l=element_l); + r.push(s); + }, + "dim readonly" => { + let s = format!(r#" +/// Reads the dimensioning variable `{element}` from the group `{group}`. +/// +/// # Parameters +/// +/// None. +/// +/// # Returns +/// +/// * `Result<{type_r}, ExitCode>` - Returns the dimensioning variable `{element}` of type `{type_r}` +/// upon successful operation. If the operation fails, it returns `Err(ExitCode)`. +pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> {{ + let mut data_c: {type_c} = 0{type_c}; + let (rc, data) = unsafe {{ + let rc = c::trexio_read_{group}_{element}_64(self.ptr, &mut data_c); + (rc, data_c.try_into().expect("try_into failed in read_{group_l}_{element_l}")) + }}; + rc_return(data, rc) +}} +"#, + type_c=type_c, type_r=type_r, group=group, group_l=group_l, element=element, element_l=element_l); + r.push(s); + }, + _ => {} + } + } + } + } + r +} + + + + + + + + + + + + +/// Reads the JSON file, processes its contents, and generates Rust functions according to the specifications in the JSON data. +fn make_functions() -> std::io::Result<()> { + let json_file = Path::new(JSON_FILE); + let generated_rs = Path::new(GENERATED_RS); + + let data: Value = serde_json::from_reader(File::open(&json_file)?)?; + + let mut r: Vec = vec![ + String::from(" +use std::ffi::CString; + +/// This implementation block includes additional functions automatically generated from tables. +/// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). +impl File { + #![allow(clippy::unnecessary_cast)] + #![allow(clippy::useless_conversion)] + #![allow(clippy::type_complexity)] +"), + ]; + + r.append(&mut make_has_functions(&data)); + r.append(&mut make_scalar_functions(&data)); +// r.append(&mut make_array_functions(&data)); + + r.push(String::from("}")); + + let mut f = File::create(&generated_rs)?; + f.write_all(r.join("\n").as_bytes())?; + Ok(()) +} + + + + fn main() { + check_version().unwrap(); + make_interface().unwrap(); + make_functions().unwrap(); + // Tell cargo to look for shared libraries in the specified directory println!("cargo:rustc-link-search=/usr/local/lib"); - // Tell cargo to tell rustc to link the system bzip2 - // shared library. + // Tell cargo to tell rustc to link the system trexio shared library. println!("cargo:rustc-link-lib=trexio"); // Tell cargo to invalidate the built crate whenever the wrapper changes println!("cargo:rerun-if-changed=wrapper.h"); + println!("cargo:rerun-if-changed=build.py"); // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 69bf73d1..71bbee31 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -258,3 +258,4 @@ impl File { } include!("generated.rs"); +include!("generated_py.rs"); From 421581fe9d1421e0fca2eeee35901dd6adfe7eea Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 23 Oct 2023 15:11:15 +0200 Subject: [PATCH 28/43] All build in rust --- rust/trexio/Cargo.toml | 2 + rust/trexio/build.py | 379 ----------------------------------------- rust/trexio/build.rs | 341 +++++++++++++++++++++++++++++++++--- rust/trexio/src/lib.rs | 1 - 4 files changed, 315 insertions(+), 408 deletions(-) delete mode 100755 rust/trexio/build.py diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 6f31333d..12fcd225 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -21,3 +21,5 @@ doctest = false [dependencies] +bindgen = "0.65.1" +serde_json = "1.0" diff --git a/rust/trexio/build.py b/rust/trexio/build.py deleted file mode 100755 index ace960d3..00000000 --- a/rust/trexio/build.py +++ /dev/null @@ -1,379 +0,0 @@ -#!/usr/bin/env python3 -import json - -json_file = "../../trex.json" -generated_rs = "src/generated_py.rs" - -convert_r = { "int": "i64", - "int special" : "usize", - "float" : "f64", - "float sparse" : "f64", - "float buffered" : "f64", - "dim" : "usize", - "dim readonly" : "usize", - "index" : "usize", - "str" : "str"} - -convert_c = { "int": "i64", - "int special" : "i64", - "float" : "f64", - "float sparse" : "f64", - "float buffered" : "f64", - "dim" : "i64", - "dim readonly" : "i64", - "index" : "i64", - "str" : "str"} - -def make_array_functions(data): - r = [] - for group in data: - group_l = group.lower() - for element in data[group]: - type_c = convert_c[data[group][element][0]] - type_r = convert_r[data[group][element][0]] - element_l = element.lower() - - if data[group][element][1] != []: - if data[group][element][0] in [ "int", "float", "dim", "index" ]: - t = [ f""" -/// Reads the `{element}` array from the group `{group}` in the file. -/// -/// # Dimensions -/// -/// The array is of dimension `{data[group][element][1]}`. -/// -/// # Returns -/// -/// * `Result, ExitCode>` - Returns a flattened one-dimensional vector that contains -/// the elements of the `{element}` array. If the operation is unsuccessful, it returns `Err(ExitCode)`. -/// -/// """ ] - if len(data[group][element][1]) > 1: - t += [ f""" -/// # Example -/// -/// To reshape the one-dimensional vector back into a two-dimensional array, you can use the [`chunks`] method: -/// -/// ``` -/// let one_d_array = trexio_file.read_{group_l}_{element_l}()?;""" ] - try: - dim_group, dim_element = data[group][element][1][0].split('.') - t += [ f"/// let {dim_group}_{dim_element} = trexio_file.read_{dim_group}_{dim_element}()?;", -f"/// let two_d_array: Vec<_> = one_d_array.chunks({dim_group}_{dim_element}).collect();" -] - except: - t += [ f"/// let two_d_array: Vec<_> = one_d_array.chunks({data[group][element][1][0]}).collect();" ] - t += [ """ -/// ``` -/// -/// [`chunks`]: slice::chunks""" -] - t += [ """ -pub fn read_{group_l}_{element_l}(&self) -> Result, ExitCode> { - let size = 1;""" ] - t_prime = [] - for dim in data[group][element][1]: - try: # A dimensioning variable - dim_group, dim_element = dim.split('.') - t_prime += [f" let size = size * self.read_{dim_group}_{dim_element}()?;" ] - except: # Only an integer - t_prime += [f" let size = size * {dim};"] - t += t_prime - t += [ """ - let mut data: Vec<{type_r}> = Vec::with_capacity(size); - let rc = unsafe { - let data_c = data.as_mut_ptr() as *mut {type_c}; - let rc = c::trexio_read_safe_{group}_{element}_64(self.ptr, data_c, size.try_into().expect("try_into failed in read_{group}_{element} (size)")); - data.set_len(size); - rc - }; - rc_return(data, rc) -} -""" ] - r += [ '\n'.join(t) -.replace("{type_c}",type_c) -.replace("{type_r}",type_r) -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - r += [ f""" -/// Writes the `{element}` array into the group `{group}` in the file. -/// -/// # Parameters -/// -/// * `data: &[{type_r}]` - A one-dimensional vector that contains the elements of the `{element}` array -/// to be written into the file. The vector should be flattened from a two-dimensional array with -/// dimensions `{data[group][element][1]}`. -/// -/// # Returns -/// -/// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, -/// otherwise returns `Err(ExitCode)`.""", """\ -pub fn write_{group_l}_{element_l}(&self, data: &[{type_r}]) -> Result<(), ExitCode> { - let size: i64 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); - let data = data.as_ptr() as *const {type_c}; - let rc = unsafe { c::trexio_write_safe_{group}_{element}_64(self.ptr, data, size) }; - rc_return((), rc) -} -""" -.replace("{type_c}",type_c) -.replace("{type_r}",type_r) -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - elif data[group][element][0] in [ "str" ]: - t = [ f""" -/// Reads the `{element}` array from the group `{group}` in the file. -/// -/// # Dimensions -/// -/// The array is of dimension `{data[group][element][1]}`. -/// -/// # Returns -/// -/// * `Result, ExitCode>` - Returns a flattened one-dimensional vector that contains -/// the elements of the `{element}` array. If the operation is unsuccessful, it returns `Err(ExitCode)`. -/// -/// """ ] - if len(data[group][element][1]) > 1: - t += [ f""" -/// # Example -/// -/// To reshape the one-dimensional vector back into a two-dimensional array, you can use the [`chunks`] method: -/// -/// ``` -/// let one_d_array = trexio_file.read_{group_l}_{element_l}()?;""" ] - try: - dim_group, dim_element = data[group][element][1][0].split('.') - t += [ f"/// let {dim_group}_{dim_element} = trexio_file.read_{dim_group}_{dim_element}()?;", -f"/// let two_d_array: Vec<_> = one_d_array.chunks({dim_group}_{dim_element}).collect();" -] - except: - t += [ f"/// let two_d_array: Vec<_> = one_d_array.chunks({data[group][element][1][0]}).collect();" ] - t += [ """ -/// ``` -/// -/// [`chunks`]: slice::chunks""" -] - t += [ """pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result, ExitCode> { - let size = 1;""" ] - t_prime = [] - for dim in data[group][element][1]: - try: # A dimensioning variable - dim_group, dim_element = dim.split('.') - t_prime += [f" let size = size * self.read_{dim_group}_{dim_element}()?;" ] - except: # Only an integer - t_prime += [f" let size = size * {dim};"] - t += t_prime - t += [ """ - // Allocate an array of *mut i8 pointers (initialized to null) - let mut dset_out: Vec<*mut i8> = vec![std::ptr::null_mut(); size]; - - // Allocate C-style strings and populate dset_out - for item in dset_out.iter_mut().take(size){ - let c_str: *mut i8 = unsafe { std::alloc::alloc_zeroed(std::alloc::Layout::array::(capacity).unwrap()) as *mut i8 }; - if c_str.is_null() { - return Err(ExitCode::AllocationFailed); - } - *item = c_str; - } - - - let rc = unsafe { - c::trexio_read_{group}_{element}(self.ptr, dset_out.as_mut_ptr(), capacity.try_into().expect("try_into failed in read_{group}_{element} (capacity)") ) - }; - - // Convert the populated C strings to Rust Strings - let mut rust_strings = Vec::new(); - for &c_str in &dset_out { - let rust_str = unsafe { - std::ffi::CStr::from_ptr(c_str) - .to_string_lossy() - .into_owned() - }; - rust_strings.push(rust_str); - } - - // Clean up allocated C strings - for &c_str in &dset_out { - unsafe { std::alloc::dealloc(c_str as *mut u8, std::alloc::Layout::array::(capacity).unwrap()) }; - } - - rc_return(rust_strings, rc) -} -""" ] - r += [ '\n'.join(t) -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - r += [ """ -/// Writes the `{element}` array into the group `{group}` in the file. -/// -/// # Parameters -/// -/// * `data: &[{type_r}]` - A one-dimensional vector that contains the elements of the `{element}` array -/// to be written into the file. The vector should be flattened from a two-dimensional array with -/// dimensions `{data[group][element][1]}`. -/// -/// # Returns -/// -/// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, -/// otherwise returns `Err(ExitCode)`.""", """\ -pub fn write_{group_l}_{element_l}(&self, data: &[&str]) -> Result<(), ExitCode> { - let mut size = 0; - // Find longest string - for s in data { - let l = s.len(); - size = if l>size {l} else {size}; - } - size += 1; - let data_c : Vec = data.iter().map(|&x| string_to_c(x)).collect::>(); - let data_c : Vec<*const c_char> = data_c.iter().map(|x| x.as_ptr() as *const c_char).collect::>(); - let size : i32 = size.try_into().expect("try_into failed in write_{group}_{element} (size)"); - let data_c = data_c.as_ptr() as *mut *const c_char; - let rc = unsafe { c::trexio_write_{group}_{element}(self.ptr, data_c, size) }; - rc_return((), rc) -} -""" -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - elif data[group][element][0] in [ "float sparse" ]: - size = len(data[group][element][1]) - typ = "(" + ",".join( [ "usize" for _ in range(size) ]) + ", f64)" - r += [ (""" -/// Reads a buffer of {element} from group {group}. -/// -/// # Parameters -/// -/// * `offset: usize` - The starting point in the array from which data will be read. -/// * `buffer_size: usize` - The size of the buffer in which read data will be stored. -/// -/// # Returns -/// -/// * `Result, ExitCode>` - Returns a vector of tuples containing -/// the indices and the value of the element. The vector has a length of at most `buffer_size`. -/// -/// # Notes -/// -/// The reading process is a buffered operation, meaning that only a segment of the full array -/// is read into the memory. -pub fn read_{group_l}_{element_l}(&self, offset: usize, buffer_size:usize) -> Result, ExitCode> { - let mut idx = Vec::::with_capacity({size}*buffer_size); - let mut val = Vec::::with_capacity(buffer_size); - let idx_ptr = idx.as_ptr() as *mut i32; - let val_ptr = val.as_ptr() as *mut f64; - let offset: i64 = offset.try_into().expect("try_into failed in read_{group}_{element} (offset)"); - let mut buffer_size_read: i64 = buffer_size.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); - let rc = unsafe { c::trexio_read_safe_{group}_{element}(self.ptr, - offset, &mut buffer_size_read, idx_ptr, buffer_size_read, val_ptr, buffer_size_read) - }; - let rc = match ExitCode::from(rc) { - ExitCode::End => ExitCode::to_c(&ExitCode::Success), - _ => rc - }; - let buffer_size_read: usize = buffer_size_read.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); - unsafe { idx.set_len({size}*buffer_size_read) }; - unsafe { val.set_len(buffer_size_read) }; - let idx: Vec::<&[i32]> = idx.chunks({size}).collect(); - - let mut result = Vec::<{typ}>::with_capacity(buffer_size); - for (i, v) in zip(idx, val) { - result.push( ( """ + -','.join([ f"i[{k}].try_into().unwrap()" for k in range(size) ]) + -""",v) ); - } - rc_return(result, rc) -} -""") -.replace("{size}",str(size)) -.replace("{typ}",typ) -.replace("{type_c}",type_c) -.replace("{type_r}",type_r) -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - - r += [ (""" -/// Writes a buffer of {element} from group {group}. -/// -/// # Parameters -/// -/// * `offset: usize` - The starting point in the array at which data will be written. -/// * `data: &[{typ}]` - A slice of tuples containing the indices and the value of the element. -/// -/// # Returns -/// -/// * `Result<(), ExitCode>` - Returns `Ok(())` if the writing operation is successful, -/// otherwise returns `Err(ExitCode)`. -/// -/// # Notes -/// -/// The writing process is a buffered operation, meaning that only a segment of the full array -/// is written into the file. -pub fn write_{group_l}_{element_l}(&self, offset: usize, data: &[{typ}]) -> Result<(), ExitCode> { - let mut idx = Vec::::with_capacity({size}*data.len()); - let mut val = Vec::::with_capacity(data.len()); - - for d in data { -""" + -'\n'.join([ f" idx.push(d.{i}.try_into().unwrap());" for i in range(size) ]) + -f"\n val.push(d.{size});" + -""" - } - - let size_max: i64 = data.len().try_into().expect("try_into failed in write_{group}_{element} (size_max)"); - let buffer_size = size_max; - let idx_ptr = idx.as_ptr() as *const i32; - let val_ptr = val.as_ptr() as *const f64; - let offset: i64 = offset.try_into().expect("try_into failed in write_{group}_{element} (offset)"); - let rc = unsafe { c::trexio_write_safe_{group}_{element}(self.ptr, - offset, buffer_size, idx_ptr, size_max, val_ptr, size_max) }; - rc_return((), rc) -} -""") -.replace("{size}",str(size)) -.replace("{typ}",typ) -.replace("{type_c}",type_c) -.replace("{type_r}",type_r) -.replace("{group}",group) -.replace("{group_l}",group_l) -.replace("{element}",element) -.replace("{element_l}",element_l) ] - return r - - -def make_functions(): - with open(json_file,'r') as f: - data = json.load(f) - - r = [""" -use std::iter::zip; - -/// This implementation block includes additional functions automatically generated from tables. -/// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). -impl File { -#![allow(clippy::unnecessary_cast)] -#![allow(clippy::useless_conversion)] -#![allow(clippy::type_complexity)] -""" ] - - r += make_array_functions(data) - - r += [ "}" ] - with open(generated_rs,'w') as f: - f.write('\n'.join(r)) - - - -if __name__ == '__main__': - make_functions() diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 569102d1..b2b98619 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -106,7 +106,7 @@ fn make_interface() -> io::Result<()> { } -/// Dictionnary of type conversions +/// Type conversions for Rust API fn convert_r(typ: &str) -> String { match typ { "int" => "i64", @@ -118,6 +118,7 @@ fn convert_r(typ: &str) -> String { }.to_string() } +/// Type conversion to call C functions fn convert_c(typ: &str) -> String { match typ { "int" | "int special" | "dim" | "dim readonly" | "index" => "i64", @@ -141,7 +142,7 @@ fn make_has_functions(data: &Value) -> Vec { if let Value::Object(groups) = data { for (group, elements) in groups.iter() { let group_l = group.to_lowercase(); - + let has_group_func = format!( "/// Checks if the group `{group}` exists in the file. /// # Parameters @@ -159,17 +160,14 @@ pub fn has_{group_l}(&self) -> Result {{ c::TREXIO_HAS_NOT => Ok(false), x => Err(ExitCode::from(x)), }} -}}", - group = group, - group_l = group_l - ); - +}}"); + r.push(has_group_func); - + if let Value::Object(elements_map) = elements { for (element, _types_value) in elements_map.iter() { let element_l = element.to_lowercase(); - + let has_element_func = format!( "/// Checks if the element `{element}` of the group `{group}` exists in the file. /// @@ -188,19 +186,13 @@ pub fn has_{group_l}_{element_l}(&self) -> Result {{ c::TREXIO_HAS_NOT => Ok(false), x => Err(ExitCode::from(x)), }} -}}", - group = group, - group_l = group_l, - element = element, - element_l = element_l - ); - +}}"); + r.push(has_element_func); } } } } - r } @@ -209,10 +201,10 @@ pub fn has_{group_l}_{element_l}(&self) -> Result {{ fn make_scalar_functions(data: &serde_json::Value) -> Vec { let mut r: Vec = Vec::new(); - + for group in data.as_object().unwrap().keys() { let group_l = group.to_lowercase(); - + for (element, attributes) in data[group].as_object().unwrap() { let typ = attributes[0].as_str().unwrap(); let type_c = convert_c(typ); @@ -231,7 +223,7 @@ fn make_scalar_functions(data: &serde_json::Value) -> Vec { /// /// # Returns /// -/// * `Result<{type_r}, ExitCode>` - Returns the scalar element as a `{type_r}` upon successful +/// * `Result<{type_r}, ExitCode>` - Returns the scalar element as a `{type_r}` upon successful /// operation. If the operation fails, it returns `Err(ExitCode)`. pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> {{ let mut data_c: {type_c} = 0{type_c}; @@ -256,8 +248,7 @@ pub fn write_{group_l}_{element_l}(&self, data: {type_r}) -> Result<(), ExitCode let rc = unsafe {{ c::trexio_write_{group}_{element}_64(self.ptr, data) }}; rc_return((), rc) }} -"#, - type_c=type_c, type_r=type_r, group=group, group_l=group_l, element=element, element_l=element_l); +"#); r.push(s); }, "str" => { @@ -291,7 +282,7 @@ pub fn read_{group_l}_{element_l}(&self, capacity: usize) -> Result` - Returns `Ok(())` upon successful operation. +/// * `Result<(), ExitCode>` - Returns `Ok(())` upon successful operation. /// If the operation fails, it returns `Err(ExitCode)`. pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> {{ let size : i32 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); @@ -300,8 +291,7 @@ pub fn write_{group_l}_{element_l}(&self, data: &str) -> Result<(), ExitCode> {{ let rc = unsafe {{ c::trexio_write_{group}_{element}(self.ptr, data, size) }}; rc_return((), rc) }} -"#, - group=group, group_l=group_l, element=element, element_l=element_l); +"#); r.push(s); }, "dim readonly" => { @@ -324,8 +314,7 @@ pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> {{ }}; rc_return(data, rc) }} -"#, - type_c=type_c, type_r=type_r, group=group, group_l=group_l, element=element, element_l=element_l); +"#); r.push(s); }, _ => {} @@ -338,6 +327,301 @@ pub fn read_{group_l}_{element_l}(&self) -> Result<{type_r}, ExitCode> {{ +fn make_array_functions(data: &serde_json::Value) -> Vec { + let mut r: Vec = Vec::new(); + + for group in data.as_object().unwrap().keys() { + let group_l = group.to_lowercase(); + + for (element, attributes) in data[group].as_object().unwrap() { + let typ = attributes[0].as_str().unwrap(); + let type_c = convert_c(typ); + let type_r = convert_r(typ); + let element_l = element.to_lowercase(); + let dimensions = attributes[1].as_array().unwrap(); + let dimensions: Vec<&str> = dimensions.iter().map(|x| x.as_str().unwrap()).collect(); + let dimensions_str = format!("{:?}", dimensions).replace("\"",""); + if ! dimensions.is_empty() { + match typ { + "int" | "float" | "dim" | "index" => { + r.push(format!(r#" +/// Reads the `{element}` array from the group `{group}` in the file. +/// +/// # Dimensions +/// +/// The array is of dimension `{dimensions_str}`. +/// +/// # Returns +/// +/// * `Result, ExitCode>` - Returns a flattened one-dimensional vector that contains +/// the elements of the `{element}` array. If the operation is unsuccessful, it returns `Err(ExitCode)`. +/// +///"#)); + if dimensions.len() > 1 { + r.push(format!(r#" +/// # Example +/// +/// To reshape the one-dimensional vector back into a two-dimensional array, you can use the [`chunks`] method: +/// +/// ``` +/// let one_d_array = trexio_file.read_{}_{}()?;\n"#, group_l, element_l)); + if let Some(dim) = dimensions.first() { + if dim.contains('.') { + let parts: Vec<&str> = dim.split('.').collect(); + r.push(format!("/// let {}_{} = trexio_file.read_{}_{}()?;\n", parts[0], parts[1], parts[0], parts[1])); + r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}_{}).collect();\n", parts[0], parts[1])); + } else { + r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}).collect();\n", dim)); + } + } + r.push(String::from("/// ```\n")); + r.push(String::from("///\n/// [`chunks`]: slice::chunks")); + } + r.push(format!(r#"pub fn read_{}_{}(&self) -> Result, ExitCode> {{ + let mut size = 1;"#, group_l, element_l, type_r)); + + for dim in &dimensions { + if dim.contains('.') { + let parts: Vec<&str> = dim.split('.').collect(); + r.push(format!(" size *= self.read_{}_{}()?;\n", parts[0], parts[1])); + } else { + r.push(format!(" size *= {};\n", dim)); + } + } + r.push(format!(r#" let mut data: Vec<{type_r}> = Vec::with_capacity(size); + let rc = unsafe {{ + let data_c = data.as_mut_ptr() as *mut {type_c}; + let rc = c::trexio_read_safe_{group}_{element}_64(self.ptr, data_c, size.try_into().expect("try_into failed in read_{group}_{element} (size)")); + data.set_len(size); + rc + }}; + rc_return(data, rc) +}}"#)); + r.push(format!(r#" +/// Writes the `{element}` array into the group `{group}` in the file. +/// +/// # Parameters +/// +/// * `data: &[{type_r}]` - A one-dimensional vector that contains the elements of the `{element}` array +/// to be written into the file. The vector should be flattened from a two-dimensional array with +/// dimensions `{dimensions_str}`. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, +/// otherwise returns `Err(ExitCode)`.""", """\ +pub fn write_{group_l}_{element_l}(&self, data: &[{type_r}]) -> Result<(), ExitCode> {{ + let size: i64 = data.len().try_into().expect("try_into failed in write_{group_l}_{element_l}"); + let data = data.as_ptr() as *const {type_c}; + let rc = unsafe {{ c::trexio_write_safe_{group}_{element}_64(self.ptr, data, size) }}; + rc_return((), rc) +}} +"#)); + } + , + "str" => { + r.push(format!(r#" +/// Reads the `{element}` array from the group `{group}` in the file. +/// +/// # Dimensions +/// +/// The array is of dimension `{dimensions_str}`. +/// +/// # Returns +/// +/// * `Result, ExitCode>` - Returns a flattened one-dimensional vector that contains +/// the elements of the `{element}` array. If the operation is unsuccessful, it returns `Err(ExitCode)`. +/// +/// "#)); + if dimensions.len() > 1 { + r.push(format!(r#"/// # Example +/// +/// To reshape the one-dimensional vector back into a two-dimensional array, you can use the [`chunks`] method: +/// +/// ``` +/// let one_d_array = trexio_file.read_{}_{}()?;"#, group_l, element_l)); + if let Some(dim) = dimensions.first() { + if dim.contains('.') { + let parts: Vec<&str> = dim.split('.').collect(); + r.push(format!("/// let {}_{} = trexio_file.read_{}_{}()?;\n", parts[0], parts[1], parts[0], parts[1])); + r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}_{}).collect();\n", parts[0], parts[1])); + } else { + r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}).collect();\n", dim)); + } + } + r.push(String::from("/// ```\n")); + r.push(String::from("///\n/// [`chunks`]: slice::chunks")); + } + r.push(format!(r#"pub fn read_{}_{}(&self, capacity: usize) -> Result, ExitCode> {{ + let mut size = 1;"#, group_l, element_l)); + for dim in &dimensions { + if dim.contains('.') { + let parts: Vec<&str> = dim.split('.').collect(); + r.push(format!(" size *= self.read_{}_{}()?;\n", parts[0], parts[1])); + } else { + r.push(format!(" size *= {};\n", dim)); + } + } + r.push(format!(r#" // Allocate an array of *mut i8 pointers (initialized to null) + let mut dset_out: Vec<*mut i8> = vec![std::ptr::null_mut(); size]; + + // Allocate C-style strings and populate dset_out + for item in dset_out.iter_mut().take(size) {{ + let c_str: *mut i8 = unsafe {{ std::alloc::alloc_zeroed(std::alloc::Layout::array::(capacity).unwrap()) as *mut i8 }}; + if c_str.is_null() {{ + return Err(ExitCode::AllocationFailed); + }} + *item = c_str; + }} + + + let rc = unsafe {{ + c::trexio_read_{group}_{element}(self.ptr, dset_out.as_mut_ptr(), capacity.try_into().expect("try_into failed in read_{group}_{element} (capacity)") ) + }}; + + // Convert the populated C strings to Rust Strings + let mut rust_strings = Vec::new(); + for &c_str in &dset_out {{ + let rust_str = unsafe {{ + std::ffi::CStr::from_ptr(c_str) + .to_string_lossy() + .into_owned() + }}; + rust_strings.push(rust_str); + }} + + // Clean up allocated C strings + for &c_str in &dset_out {{ + unsafe {{ std::alloc::dealloc(c_str as *mut u8, std::alloc::Layout::array::(capacity).unwrap()) }}; + }} + + rc_return(rust_strings, rc) +}} + +/// Writes the `{element}` array into the group `{group}` in the file. +/// +/// # Parameters +/// +/// * `data: &[{type_r}]` - A one-dimensional vector that contains the elements of the `{element}` array +/// to be written into the file. The vector should be flattened from a two-dimensional array with +/// dimensions `{dimensions_str}`. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` if the operation is successful, +/// otherwise returns `Err(ExitCode)`. +pub fn write_{group_l}_{element_l}(&self, data: &[&str]) -> Result<(), ExitCode> {{ + let mut size = 0; + // Find longest string + for s in data {{ + let l = s.len(); + size = if l>size {{l}} else {{size}}; + }} + size += 1; + let data_c : Vec = data.iter().map(|&x| string_to_c(x)).collect::>(); + let data_c : Vec<*const c_char> = data_c.iter().map(|x| x.as_ptr() as *const c_char).collect::>(); + let size : i32 = size.try_into().expect("try_into failed in write_{group}_{element} (size)"); + let data_c = data_c.as_ptr() as *mut *const c_char; + let rc = unsafe {{ c::trexio_write_{group}_{element}(self.ptr, data_c, size) }}; + rc_return((), rc) +}} +"#)); + }, + "float sparse" => { + let size = dimensions.len(); + let typ = [ "(", (vec![ "usize" ; size ]).join(", ").as_str(),", f64)"].join(""); + r.push(format!(r#" +/// Reads a buffer of {element} from group {group}. +/// +/// # Parameters +/// +/// * `offset: usize` - The starting point in the array from which data will be read. +/// * `buffer_size: usize` - The size of the buffer in which read data will be stored. +/// +/// # Returns +/// +/// * `Result, ExitCode>` - Returns a vector of tuples containing +/// the indices and the value of the element. The vector has a length of at most `buffer_size`. +/// +/// # Notes +/// +/// The reading process is a buffered operation, meaning that only a segment of the full array +/// is read into the memory. +pub fn read_{group_l}_{element_l}(&self, offset: usize, buffer_size:usize) -> Result, ExitCode> {{ + let mut idx = Vec::::with_capacity({size}*buffer_size); + let mut val = Vec::::with_capacity(buffer_size); + let idx_ptr = idx.as_ptr() as *mut i32; + let val_ptr = val.as_ptr() as *mut f64; + let offset: i64 = offset.try_into().expect("try_into failed in read_{group}_{element} (offset)"); + let mut buffer_size_read: i64 = buffer_size.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); + let rc = unsafe {{ c::trexio_read_safe_{group}_{element}(self.ptr, + offset, &mut buffer_size_read, idx_ptr, buffer_size_read, val_ptr, buffer_size_read) + }}; + let rc = match ExitCode::from(rc) {{ + ExitCode::End => ExitCode::to_c(&ExitCode::Success), + _ => rc + }}; + let buffer_size_read: usize = buffer_size_read.try_into().expect("try_into failed in read_{group}_{element} (buffer_size)"); + unsafe {{ idx.set_len({size}*buffer_size_read) }}; + unsafe {{ val.set_len(buffer_size_read) }}; + let idx: Vec::<&[i32]> = idx.chunks({size}).collect(); + + let mut result = Vec::<{typ}>::with_capacity(buffer_size); + for (i, v) in zip(idx, val) {{ + result.push( ("#)); + let mut x = Vec::new(); + for k in 0..size { + x.push(format!("i[{k}].try_into().unwrap()")) + }; + x.push("v));\n }\n rc_return(result, rc)\n}".to_string()); + r.push(x.join(", ")); + r.push(format!(r#"/// Writes a buffer of {element} from group {group}. +/// +/// # Parameters +/// +/// * `offset: usize` - The starting point in the array at which data will be written. +/// * `data: &[{typ}]` - A slice of tuples containing the indices and the value of the element. +/// +/// # Returns +/// +/// * `Result<(), ExitCode>` - Returns `Ok(())` if the writing operation is successful, +/// otherwise returns `Err(ExitCode)`. +/// +/// # Notes +/// +/// The writing process is a buffered operation, meaning that only a segment of the full array +/// is written into the file. +pub fn write_{group_l}_{element_l}(&self, offset: usize, data: &[{typ}]) -> Result<(), ExitCode> {{ + let mut idx = Vec::::with_capacity({size}*data.len()); + let mut val = Vec::::with_capacity(data.len()); + + for d in data {{ "#)); + let mut x = Vec::new(); + for k in 0..size { + x.push(format!(" idx.push(d.{k}.try_into().unwrap());")) + }; + r.push(x.join("\n")); + r.push(format!(r#" + val.push(d.{size}); + }} + + let size_max: i64 = data.len().try_into().expect("try_into failed in write_{group}_{element} (size_max)"); + let buffer_size = size_max; + let idx_ptr = idx.as_ptr() as *const i32; + let val_ptr = val.as_ptr() as *const f64; + let offset: i64 = offset.try_into().expect("try_into failed in write_{group}_{element} (offset)"); + let rc = unsafe {{ c::trexio_write_safe_{group}_{element}(self.ptr, + offset, buffer_size, idx_ptr, size_max, val_ptr, size_max) }}; + rc_return((), rc) +}}"#)); + }, + _ => {} + } + } + } + } + r +} @@ -357,6 +641,7 @@ fn make_functions() -> std::io::Result<()> { let mut r: Vec = vec![ String::from(" use std::ffi::CString; +use std::iter::zip; /// This implementation block includes additional functions automatically generated from tables. /// For more details, refer to [TREXIO tables documentation](https://trex-coe.github.io/trexio/trex.html). @@ -369,7 +654,7 @@ impl File { r.append(&mut make_has_functions(&data)); r.append(&mut make_scalar_functions(&data)); -// r.append(&mut make_array_functions(&data)); + r.append(&mut make_array_functions(&data)); r.push(String::from("}")); diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 71bbee31..69bf73d1 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -258,4 +258,3 @@ impl File { } include!("generated.rs"); -include!("generated_py.rs"); From ef2ad322de23d0dafb2be6933384338965d69312 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 23 Oct 2023 15:18:40 +0200 Subject: [PATCH 29/43] Cargo doc OK --- rust/trexio/Cargo.toml | 3 --- rust/trexio/build.rs | 30 +++++++++++++++--------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 12fcd225..95fe07f9 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -20,6 +20,3 @@ serde = { version = "1.0", features = ["derive"] } doctest = false [dependencies] - -bindgen = "0.65.1" -serde_json = "1.0" diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index b2b98619..29f2e322 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -363,18 +363,18 @@ fn make_array_functions(data: &serde_json::Value) -> Vec { /// /// To reshape the one-dimensional vector back into a two-dimensional array, you can use the [`chunks`] method: /// -/// ``` -/// let one_d_array = trexio_file.read_{}_{}()?;\n"#, group_l, element_l)); +/// ```text +/// let one_d_array = trexio_file.read_{}_{}()?;"#, group_l, element_l)); if let Some(dim) = dimensions.first() { if dim.contains('.') { let parts: Vec<&str> = dim.split('.').collect(); - r.push(format!("/// let {}_{} = trexio_file.read_{}_{}()?;\n", parts[0], parts[1], parts[0], parts[1])); - r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}_{}).collect();\n", parts[0], parts[1])); + r.push(format!("/// let {}_{} = trexio_file.read_{}_{}()?;", parts[0], parts[1], parts[0], parts[1])); + r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}_{}).collect();", parts[0], parts[1])); } else { - r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}).collect();\n", dim)); + r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}).collect();", dim)); } } - r.push(String::from("/// ```\n")); + r.push(String::from("/// ```")); r.push(String::from("///\n/// [`chunks`]: slice::chunks")); } r.push(format!(r#"pub fn read_{}_{}(&self) -> Result, ExitCode> {{ @@ -383,9 +383,9 @@ fn make_array_functions(data: &serde_json::Value) -> Vec { for dim in &dimensions { if dim.contains('.') { let parts: Vec<&str> = dim.split('.').collect(); - r.push(format!(" size *= self.read_{}_{}()?;\n", parts[0], parts[1])); + r.push(format!(" size *= self.read_{}_{}()?;", parts[0], parts[1])); } else { - r.push(format!(" size *= {};\n", dim)); + r.push(format!(" size *= {};", dim)); } } r.push(format!(r#" let mut data: Vec<{type_r}> = Vec::with_capacity(size); @@ -438,18 +438,18 @@ pub fn write_{group_l}_{element_l}(&self, data: &[{type_r}]) -> Result<(), ExitC /// /// To reshape the one-dimensional vector back into a two-dimensional array, you can use the [`chunks`] method: /// -/// ``` +/// ```text /// let one_d_array = trexio_file.read_{}_{}()?;"#, group_l, element_l)); if let Some(dim) = dimensions.first() { if dim.contains('.') { let parts: Vec<&str> = dim.split('.').collect(); - r.push(format!("/// let {}_{} = trexio_file.read_{}_{}()?;\n", parts[0], parts[1], parts[0], parts[1])); - r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}_{}).collect();\n", parts[0], parts[1])); + r.push(format!("/// let {}_{} = trexio_file.read_{}_{}()?;", parts[0], parts[1], parts[0], parts[1])); + r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}_{}).collect();", parts[0], parts[1])); } else { - r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}).collect();\n", dim)); + r.push(format!("/// let two_d_array: Vec<_> = one_d_array.chunks({}).collect();", dim)); } } - r.push(String::from("/// ```\n")); + r.push(String::from("/// ```")); r.push(String::from("///\n/// [`chunks`]: slice::chunks")); } r.push(format!(r#"pub fn read_{}_{}(&self, capacity: usize) -> Result, ExitCode> {{ @@ -457,9 +457,9 @@ pub fn write_{group_l}_{element_l}(&self, data: &[{type_r}]) -> Result<(), ExitC for dim in &dimensions { if dim.contains('.') { let parts: Vec<&str> = dim.split('.').collect(); - r.push(format!(" size *= self.read_{}_{}()?;\n", parts[0], parts[1])); + r.push(format!(" size *= self.read_{}_{}()?;", parts[0], parts[1])); } else { - r.push(format!(" size *= {};\n", dim)); + r.push(format!(" size *= {};", dim)); } } r.push(format!(r#" // Allocate an array of *mut i8 pointers (initialized to null) From 49462add49ee3f49de508dd7486bdeea3db995b1 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 23 Oct 2023 15:57:23 +0200 Subject: [PATCH 30/43] Updated check_version --- rust/trexio/build.rs | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 29f2e322..836a299b 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -15,7 +15,7 @@ use std::path::Path; /// Checks that the version specified in the Cargo.toml file is consistent with the version of the TREXIO C library. -fn check_version() -> Result<(), String> { +fn check_version(bindings: PathBuf) -> Result<(), String> { // Read version from Cargo.toml let mut rust_version = String::new(); { @@ -32,19 +32,16 @@ fn check_version() -> Result<(), String> { } } - // Read version from ../../configure.ac + // Check version from TREXIO let mut trexio_version = String::new(); - { - let file = File::open("../../configure.ac").map_err(|e| e.to_string())?; - let reader = io::BufReader::new(file); - - for line in reader.lines() { - let line = line.map_err(|e| e.to_string())?; - if line.starts_with("AC_INIT") { - trexio_version = line.split(',').nth(1).unwrap().trim().to_string(); - trexio_version = trexio_version[1..trexio_version.len() - 1].to_string(); - break; - } + let file = File::open(bindings).map_err(|e| e.to_string())?; + let reader = io::BufReader::new(file); + for line in reader.lines() { + let line = line.map_err(|e| e.to_string())?; + if line.contains("TREXIO_PACKAGE_VERSION") { + trexio_version = line.split('"').nth(1).unwrap().trim().to_string(); + trexio_version = trexio_version[0..trexio_version.len() - 2].to_string(); + break; } } @@ -668,7 +665,6 @@ impl File { fn main() { - check_version().unwrap(); make_interface().unwrap(); make_functions().unwrap(); @@ -702,4 +698,5 @@ fn main() { bindings .write_to_file(out_path.join("bindings.rs")) .expect("Couldn't write bindings!"); + check_version(out_path.join("bindings.rs")).unwrap(); } From 6ff3fdfae0be15b6103ecee3b541de942457b2a2 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 23 Oct 2023 17:44:31 +0200 Subject: [PATCH 31/43] Added json in trexio.h --- rust/trexio/build.rs | 43 ++-- src/templates_front/templator_front.org | 252 ++++++++++++++++++++++++ 2 files changed, 281 insertions(+), 14 deletions(-) diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 836a299b..d4aed271 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -1,6 +1,5 @@ const TREXIO_H: &str = "../../include/trexio.h"; const WRAPPER_H: &str = "wrapper.h"; -const JSON_FILE: &str = "../../trex.json"; const GENERATED_RS: &str = "src/generated.rs"; use std::env; @@ -15,7 +14,7 @@ use std::path::Path; /// Checks that the version specified in the Cargo.toml file is consistent with the version of the TREXIO C library. -fn check_version(bindings: PathBuf) -> Result<(), String> { +fn check_version(bindings: &PathBuf) -> Result<(), String> { // Read version from Cargo.toml let mut rust_version = String::new(); { @@ -629,12 +628,27 @@ pub fn write_{group_l}_{element_l}(&self, offset: usize, data: &[{typ}]) -> Resu /// Reads the JSON file, processes its contents, and generates Rust functions according to the specifications in the JSON data. -fn make_functions() -> std::io::Result<()> { - let json_file = Path::new(JSON_FILE); - let generated_rs = Path::new(GENERATED_RS); - - let data: Value = serde_json::from_reader(File::open(&json_file)?)?; - +fn make_functions(bindings: &PathBuf) -> std::io::Result<()> { + let file = File::open(bindings)?; + let reader = io::BufReader::new(file); + let mut json_file = String::new(); + for line in reader.lines() { + let line = line?; + if line.contains("trexio_json") { + let index_start = match line.find('{') { + Some(x) => x, + _ => panic!("trexio_json not found"), + }; + json_file = line[index_start..line.len()-5] + .replace(r#"\""#,"\"") + .replace(r#"\n"#,"\n") + .replace(r#"\t"#,""); + eprintln!("{}", json_file); + break; + } + } + let data: Value = serde_json::from_str(&json_file).unwrap(); + let mut r: Vec = vec![ String::from(" use std::ffi::CString; @@ -655,6 +669,7 @@ impl File { r.push(String::from("}")); + let generated_rs = Path::new(GENERATED_RS); let mut f = File::create(&generated_rs)?; f.write_all(r.join("\n").as_bytes())?; Ok(()) @@ -665,9 +680,6 @@ impl File { fn main() { - make_interface().unwrap(); - make_functions().unwrap(); - // Tell cargo to look for shared libraries in the specified directory println!("cargo:rustc-link-search=/usr/local/lib"); @@ -676,7 +688,6 @@ fn main() { // Tell cargo to invalidate the built crate whenever the wrapper changes println!("cargo:rerun-if-changed=wrapper.h"); - println!("cargo:rerun-if-changed=build.py"); // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for @@ -695,8 +706,12 @@ fn main() { // Write the bindings to the $OUT_DIR/bindings.rs file. let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + let bindings_path = out_path.join("bindings.rs"); bindings - .write_to_file(out_path.join("bindings.rs")) + .write_to_file(&bindings_path) .expect("Couldn't write bindings!"); - check_version(out_path.join("bindings.rs")).unwrap(); + check_version(&bindings_path).unwrap(); + make_interface().unwrap(); + make_functions(&bindings_path).unwrap(); + } diff --git a/src/templates_front/templator_front.org b/src/templates_front/templator_front.org index 66634303..80944b87 100644 --- a/src/templates_front/templator_front.org +++ b/src/templates_front/templator_front.org @@ -20,6 +20,257 @@ ** C + We include in thr trexio.h file a text variable that contains the + contents of the ~trex.json~ confguration file, generated from the + ~trex.org~ file. + + #+NAME: trex_json + #+begin_src python :results drawer +res = "static const char* trexio_json = " +with open('../../trex.json','r') as f: + for line in f: + res += " \" " + line.rstrip().replace('"', '\\"') + "\\n\"\n" +res += ";\n" +return res + #+end_src + + #+RESULTS: trex_json + :results: + " {\n" + " \n" + " \"metadata\": {\n" + " \"code_num\" : [ \"dim\", [] ]\n" + " , \"code\" : [ \"str\", [ \"metadata.code_num\" ] ]\n" + " , \"author_num\" : [ \"dim\", [] ]\n" + " , \"author\" : [ \"str\", [ \"metadata.author_num\" ] ]\n" + " , \"package_version\" : [ \"str\", [] ]\n" + " , \"description\" : [ \"str\", [] ]\n" + " , \"unsafe\" : [ \"int\", [] ]\n" + " } ,\n" + " \n" + " \"nucleus\": {\n" + " \"num\" : [ \"dim\" , [] ]\n" + " , \"charge\" : [ \"float\", [ \"nucleus.num\" ] ]\n" + " , \"coord\" : [ \"float\", [ \"nucleus.num\", \"3\" ] ]\n" + " , \"label\" : [ \"str\" , [ \"nucleus.num\" ] ]\n" + " , \"point_group\" : [ \"str\" , [] ]\n" + " , \"repulsion\" : [ \"float\", [] ]\n" + " } ,\n" + " \n" + " \"cell\": {\n" + " \"a\" : [ \"float\", [ \"3\" ] ]\n" + " , \"b\" : [ \"float\", [ \"3\" ] ]\n" + " , \"c\" : [ \"float\", [ \"3\" ] ]\n" + " , \"G_a\" : [ \"float\", [ \"3\" ] ]\n" + " , \"G_b\" : [ \"float\", [ \"3\" ] ]\n" + " , \"G_c\" : [ \"float\", [ \"3\" ] ]\n" + " , \"two_pi\" : [ \"int\" , [] ]\n" + " } ,\n" + " \n" + " \"pbc\": {\n" + " \"periodic\" : [ \"int\" , [] ]\n" + " , \"k_point\" : [ \"float\", [ \"3\" ] ]\n" + " } ,\n" + " \n" + " \"electron\": {\n" + " \"num\" : [ \"dim\", [] ]\n" + " , \"up_num\" : [ \"int\", [] ]\n" + " , \"dn_num\" : [ \"int\", [] ]\n" + " } ,\n" + " \n" + " \"state\": {\n" + " \"num\" : [ \"dim\" , [] ]\n" + " , \"id\" : [ \"index\", [] ]\n" + " , \"energy\" : [ \"float\", [] ]\n" + " , \"current_label\" : [ \"str\" , [] ]\n" + " , \"label\" : [ \"str\" , [ \"state.num\" ] ]\n" + " , \"file_name\" : [ \"str\" , [ \"state.num\" ] ]\n" + " } ,\n" + " \n" + " \"basis\": {\n" + " \"type\" : [ \"str\" , [] ]\n" + " , \"prim_num\" : [ \"dim\" , [] ]\n" + " , \"shell_num\" : [ \"dim\" , [] ]\n" + " , \"nao_grid_num\" : [ \"dim\" , [] ]\n" + " , \"interp_coeff_cnt\" : [ \"dim\" , [] ]\n" + " , \"nucleus_index\" : [ \"index\", [ \"basis.shell_num\" ] ]\n" + " , \"shell_ang_mom\" : [ \"int\" , [ \"basis.shell_num\" ] ]\n" + " , \"shell_factor\" : [ \"float\", [ \"basis.shell_num\" ] ]\n" + " , \"r_power\" : [ \"int\" , [ \"basis.shell_num\" ] ]\n" + " , \"nao_grid_start\" : [ \"index\", [ \"basis.shell_num\" ] ]\n" + " , \"nao_grid_size\" : [ \"dim\" , [ \"basis.shell_num\" ] ]\n" + " , \"shell_index\" : [ \"index\", [ \"basis.prim_num\" ] ]\n" + " , \"exponent\" : [ \"float\", [ \"basis.prim_num\" ] ]\n" + " , \"coefficient\" : [ \"float\", [ \"basis.prim_num\" ] ]\n" + " , \"prim_factor\" : [ \"float\", [ \"basis.prim_num\" ] ]\n" + " , \"e_cut\" : [ \"float\", [] ]\n" + " , \"nao_grid_radius\" : [ \"float\", [ \"basis.nao_grid_num\" ] ]\n" + " , \"nao_grid_phi\" : [ \"float\", [ \"basis.nao_grid_num\" ] ]\n" + " , \"nao_grid_grad\" : [ \"float\", [ \"basis.nao_grid_num\" ] ]\n" + " , \"nao_grid_lap\" : [ \"float\", [ \"basis.nao_grid_num\" ] ]\n" + " , \"interpolator_kind\" : [ \"str\" , [] ]\n" + " , \"interpolator_phi\" : [ \"float\", [ \"basis.nao_grid_num\", \"basis.interp_coeff_cnt\" ] ]\n" + " , \"interpolator_grad\" : [ \"float\", [ \"basis.nao_grid_num\", \"basis.interp_coeff_cnt\" ] ]\n" + " , \"interpolator_lap\" : [ \"float\", [ \"basis.nao_grid_num\", \"basis.interp_coeff_cnt\" ] ]\n" + " } ,\n" + " \n" + " \"ecp\": {\n" + " \"max_ang_mom_plus_1\" : [ \"int\" , [ \"nucleus.num\" ] ]\n" + " , \"z_core\" : [ \"int\" , [ \"nucleus.num\" ] ]\n" + " , \"num\" : [ \"dim\" , [] ]\n" + " , \"ang_mom\" : [ \"int\" , [ \"ecp.num\" ] ]\n" + " , \"nucleus_index\" : [ \"index\", [ \"ecp.num\" ] ]\n" + " , \"exponent\" : [ \"float\", [ \"ecp.num\" ] ]\n" + " , \"coefficient\" : [ \"float\", [ \"ecp.num\" ] ]\n" + " , \"power\" : [ \"int\" , [ \"ecp.num\" ] ]\n" + " } ,\n" + " \n" + " \"grid\": {\n" + " \"description\" : [ \"str\" , [] ]\n" + " , \"rad_precision\" : [ \"float\", [] ]\n" + " , \"num\" : [ \"dim\" , [] ]\n" + " , \"max_ang_num\" : [ \"int\" , [] ]\n" + " , \"min_ang_num\" : [ \"int\" , [] ]\n" + " , \"coord\" : [ \"float\", [ \"grid.num\" ] ]\n" + " , \"weight\" : [ \"float\", [ \"grid.num\" ] ]\n" + " , \"ang_num\" : [ \"dim\" , [] ]\n" + " , \"ang_coord\" : [ \"float\", [ \"grid.ang_num\" ] ]\n" + " , \"ang_weight\" : [ \"float\", [ \"grid.ang_num\" ] ]\n" + " , \"rad_num\" : [ \"dim\" , [] ]\n" + " , \"rad_coord\" : [ \"float\", [ \"grid.rad_num\" ] ]\n" + " , \"rad_weight\" : [ \"float\", [ \"grid.rad_num\" ] ]\n" + " } ,\n" + " \n" + " \"ao\": {\n" + " \"cartesian\" : [ \"int\" , [] ]\n" + " , \"num\" : [ \"dim\" , [] ]\n" + " , \"shell\" : [ \"index\", [ \"ao.num\" ] ]\n" + " , \"normalization\" : [ \"float\", [ \"ao.num\" ] ]\n" + " } ,\n" + " \n" + " \"ao_1e_int\": {\n" + " \"overlap\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"kinetic\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"potential_n_e\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"ecp\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"core_hamiltonian\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"overlap_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"kinetic_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"potential_n_e_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"ecp_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " , \"core_hamiltonian_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" + " } ,\n" + " \n" + " \"ao_2e_int\": {\n" + " \"eri\" : [ \"float sparse\", [ \"ao.num\", \"ao.num\", \"ao.num\", \"ao.num\" ] ]\n" + " , \"eri_lr\" : [ \"float sparse\", [ \"ao.num\", \"ao.num\", \"ao.num\", \"ao.num\" ] ]\n" + " , \"eri_cholesky_num\" : [ \"dim\" , [] ]\n" + " , \"eri_cholesky\" : [ \"float sparse\", [ \"ao_2e_int.eri_cholesky_num\", \"ao.num\", \"ao.num\" ] ]\n" + " , \"eri_lr_cholesky_num\" : [ \"dim\" , [] ]\n" + " , \"eri_lr_cholesky\" : [ \"float sparse\", [ \"ao_2e_int.eri_lr_cholesky_num\", \"ao.num\", \"ao.num\" ] ]\n" + " } ,\n" + " \n" + " \"mo\": {\n" + " \"type\" : [ \"str\" , [] ]\n" + " , \"num\" : [ \"dim\" , [] ]\n" + " , \"coefficient\" : [ \"float\", [ \"mo.num\", \"ao.num\" ] ]\n" + " , \"coefficient_im\" : [ \"float\", [ \"mo.num\", \"ao.num\" ] ]\n" + " , \"class\" : [ \"str\" , [ \"mo.num\" ] ]\n" + " , \"symmetry\" : [ \"str\" , [ \"mo.num\" ] ]\n" + " , \"occupation\" : [ \"float\", [ \"mo.num\" ] ]\n" + " , \"energy\" : [ \"float\", [ \"mo.num\" ] ]\n" + " , \"spin\" : [ \"int\" , [ \"mo.num\" ] ]\n" + " } ,\n" + " \n" + " \"mo_1e_int\": {\n" + " \"overlap\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"kinetic\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"potential_n_e\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"ecp\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"core_hamiltonian\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"overlap_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"kinetic_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"potential_n_e_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"ecp_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"core_hamiltonian_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" + " } ,\n" + " \n" + " \"mo_2e_int\": {\n" + " \"eri\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"eri_lr\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"eri_cholesky_num\" : [ \"dim\" , [] ]\n" + " , \"eri_cholesky\" : [ \"float sparse\", [ \"mo_2e_int.eri_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"eri_lr_cholesky_num\" : [ \"dim\" , [] ]\n" + " , \"eri_lr_cholesky\" : [ \"float sparse\", [ \"mo_2e_int.eri_lr_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" + " } ,\n" + " \n" + " \"determinant\": {\n" + " \"num\" : [ \"dim readonly\" , [] ]\n" + " , \"list\" : [ \"int special\" , [ \"determinant.num\" ] ]\n" + " , \"coefficient\" : [ \"float buffered\", [ \"determinant.num\" ] ]\n" + " } ,\n" + " \n" + " \"csf\": {\n" + " \"num\" : [ \"dim readonly\" , [] ]\n" + " , \"coefficient\" : [ \"float buffered\", [ \"csf.num\" ] ]\n" + " , \"det_coefficient\" : [ \"float sparse\" , [ \"csf.num\", \"determinant.num\" ] ]\n" + " } ,\n" + " \n" + " \"amplitude\": {\n" + " \"single\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"single_exp\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"double\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"double_exp\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"triple\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"triple_exp\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"quadruple\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"quadruple_exp\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " } ,\n" + " \n" + " \"rdm\": {\n" + " \"1e\" : [ \"float\" , [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"1e_up\" : [ \"float\" , [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"1e_dn\" : [ \"float\" , [ \"mo.num\", \"mo.num\" ] ]\n" + " , \"2e\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"2e_upup\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"2e_dndn\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"2e_updn\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"2e_cholesky_num\" : [ \"dim\" , [] ]\n" + " , \"2e_cholesky\" : [ \"float sparse\", [ \"rdm.2e_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"2e_upup_cholesky_num\" : [ \"dim\" , [] ]\n" + " , \"2e_upup_cholesky\" : [ \"float sparse\", [ \"rdm.2e_upup_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"2e_dndn_cholesky_num\" : [ \"dim\" , [] ]\n" + " , \"2e_dndn_cholesky\" : [ \"float sparse\", [ \"rdm.2e_dndn_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" + " , \"2e_updn_cholesky_num\" : [ \"dim\" , [] ]\n" + " , \"2e_updn_cholesky\" : [ \"float sparse\", [ \"rdm.2e_updn_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" + " } ,\n" + " \n" + " \"jastrow\": {\n" + " \"type\" : [ \"str\" , [] ]\n" + " , \"en_num\" : [ \"dim\" , [] ]\n" + " , \"ee_num\" : [ \"dim\" , [] ]\n" + " , \"een_num\" : [ \"dim\" , [] ]\n" + " , \"en\" : [ \"float\" , [ \"jastrow.en_num\" ] ]\n" + " , \"ee\" : [ \"float\" , [ \"jastrow.ee_num\" ] ]\n" + " , \"een\" : [ \"float\" , [ \"jastrow.een_num\" ] ]\n" + " , \"en_nucleus\" : [ \"index\" , [ \"jastrow.en_num\" ] ]\n" + " , \"een_nucleus\" : [ \"index\" , [ \"jastrow.een_num\" ] ]\n" + " , \"ee_scaling\" : [ \"float\" , [] ]\n" + " , \"en_scaling\" : [ \"float\" , [ \"nucleus.num\" ] ]\n" + " } ,\n" + " \n" + " \"qmc\": {\n" + " \"num\" : [ \"dim\" , [] ]\n" + " , \"point\" : [ \"float\", [ \"qmc.num\", \"electron.num\", \"3\" ] ]\n" + " , \"psi\" : [ \"float\", [ \"qmc.num\" ] ]\n" + " , \"e_loc\" : [ \"float\", [ \"qmc.num\" ] ]\n" + " }\n" + " \n" + " }\n" + ; + :end: + + #+begin_src c :tangle prefix_front.h :noweb yes <
> #ifndef TREXIO_H @@ -32,6 +283,7 @@ extern "C" { #include #include +<> typedef int32_t trexio_exit_code; #+end_src From 3c3c0e40bee50eb56daa97b411ac4e60f56b5157 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 23 Oct 2023 18:12:32 +0200 Subject: [PATCH 32/43] Searching for trexio.h --- rust/trexio/Cargo.toml | 1 + rust/trexio/build.rs | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 95fe07f9..12807a3b 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -13,6 +13,7 @@ readme = "README.md" [build-dependencies] bindgen = "0.65.1" +pkg-config = "0.3.27" serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index d4aed271..b06d08e3 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -1,4 +1,3 @@ -const TREXIO_H: &str = "../../include/trexio.h"; const WRAPPER_H: &str = "wrapper.h"; const GENERATED_RS: &str = "src/generated.rs"; @@ -59,8 +58,18 @@ fn check_version(bindings: &PathBuf) -> Result<(), String> { fn make_interface() -> io::Result<()> { let mut err = HashMap::new(); let mut be = HashMap::new(); - - let trexio_file = File::open(TREXIO_H)?; + + let mut trexio_h = PathBuf::new().join("trexio.h"); + if let Ok(library) = pkg_config::probe_library("trexio") { + for path in &library.include_paths { + if path.join("trexio.h").exists() { + trexio_h = path.join("trexio.h"); + break; + } + } + } + eprintln!("trexio.h : {:?}", trexio_h); + let trexio_file = File::open(trexio_h)?; let trexio_reader = BufReader::new(trexio_file); for line in trexio_reader.lines() { @@ -643,7 +652,6 @@ fn make_functions(bindings: &PathBuf) -> std::io::Result<()> { .replace(r#"\""#,"\"") .replace(r#"\n"#,"\n") .replace(r#"\t"#,""); - eprintln!("{}", json_file); break; } } @@ -713,5 +721,4 @@ fn main() { check_version(&bindings_path).unwrap(); make_interface().unwrap(); make_functions(&bindings_path).unwrap(); - } From 9919d4da8dbf974ce50c0f1008ba9599240fa950 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 23 Oct 2023 18:16:23 +0200 Subject: [PATCH 33/43] Fixing cargo publish --- rust/trexio/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index b06d08e3..54328e3f 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -697,6 +697,7 @@ fn main() { // Tell cargo to invalidate the built crate whenever the wrapper changes println!("cargo:rerun-if-changed=wrapper.h"); + make_interface().unwrap(); // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for // the resulting bindings. @@ -719,6 +720,5 @@ fn main() { .write_to_file(&bindings_path) .expect("Couldn't write bindings!"); check_version(&bindings_path).unwrap(); - make_interface().unwrap(); make_functions(&bindings_path).unwrap(); } From 297a71ffb0ca9d9c175535df877553a4db3cb0ea Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 23 Oct 2023 18:18:34 +0200 Subject: [PATCH 34/43] Fixing publish --- rust/trexio/Cargo.toml | 2 +- rust/trexio/build.rs | 16 ++++++++++------ rust/trexio/src/lib.rs | 3 ++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 12807a3b..09e50287 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -6,7 +6,7 @@ license = "BSD-3-Clause" authors = ["Anthony Scemama ", "Evgeny Posenitskiy"] description = "TREXIO is an open-source file format and library developed for the storage and manipulation of data produced by quantum chemistry calculations. It is designed with the goal of providing a reliable and efficient method of storing and exchanging wave function parameters and matrix elements." repository = "https://github.com/trex-coe/trexio" -keywords = ["quantum chemistry"] +keywords = ["quantum", "chemistry"] readme = "README.md" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 54328e3f..6f63fca1 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -1,5 +1,5 @@ const WRAPPER_H: &str = "wrapper.h"; -const GENERATED_RS: &str = "src/generated.rs"; +const GENERATED_RS: &str = "generated.rs"; use std::env; use std::path::PathBuf; @@ -7,7 +7,6 @@ use std::collections::HashMap; use std::fs::File; use std::io::{self, BufRead, BufReader, Write}; use serde_json::Value; -use std::path::Path; @@ -91,7 +90,9 @@ fn make_interface() -> io::Result<()> { } } - let mut wrapper_file = File::create(WRAPPER_H)?; + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + let wrapper_h = out_path.join(WRAPPER_H); + let mut wrapper_file = File::create(wrapper_h)?; write!(&mut wrapper_file, "#include \n")?; for (k, v) in &err { @@ -677,7 +678,8 @@ impl File { r.push(String::from("}")); - let generated_rs = Path::new(GENERATED_RS); + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + let generated_rs = out_path.join(GENERATED_RS); let mut f = File::create(&generated_rs)?; f.write_all(r.join("\n").as_bytes())?; Ok(()) @@ -697,14 +699,17 @@ fn main() { // Tell cargo to invalidate the built crate whenever the wrapper changes println!("cargo:rerun-if-changed=wrapper.h"); + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + make_interface().unwrap(); // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for // the resulting bindings. + let wrapper_h = out_path.join("wrapper.h"); let bindings = bindgen::Builder::default() // The input header we would like to generate // bindings for. - .header("wrapper.h") + .header(wrapper_h.to_str().unwrap()) // Tell cargo to invalidate the built crate whenever any of the // included header files changed. .parse_callbacks(Box::new(bindgen::CargoCallbacks)) @@ -714,7 +719,6 @@ fn main() { .expect("Unable to generate bindings"); // Write the bindings to the $OUT_DIR/bindings.rs file. - let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); let bindings_path = out_path.join("bindings.rs"); bindings .write_to_file(&bindings_path) diff --git a/rust/trexio/src/lib.rs b/rust/trexio/src/lib.rs index 69bf73d1..e82974b2 100644 --- a/rust/trexio/src/lib.rs +++ b/rust/trexio/src/lib.rs @@ -257,4 +257,5 @@ impl File { } } -include!("generated.rs"); +include!(concat!(env!("OUT_DIR"), "/generated.rs")); + From ca02aa67c1cfeaae050dd8dd4d5f98007d3531ea Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 24 Oct 2023 10:21:07 +0200 Subject: [PATCH 35/43] Removed version check --- rust/trexio/build.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 6f63fca1..66151a22 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -11,6 +11,7 @@ use serde_json::Value; +/* /// Checks that the version specified in the Cargo.toml file is consistent with the version of the TREXIO C library. fn check_version(bindings: &PathBuf) -> Result<(), String> { // Read version from Cargo.toml @@ -50,6 +51,7 @@ fn check_version(bindings: &PathBuf) -> Result<(), String> { Ok(()) } +*/ @@ -57,7 +59,7 @@ fn check_version(bindings: &PathBuf) -> Result<(), String> { fn make_interface() -> io::Result<()> { let mut err = HashMap::new(); let mut be = HashMap::new(); - + let mut trexio_h = PathBuf::new().join("trexio.h"); if let Ok(library) = pkg_config::probe_library("trexio") { for path in &library.include_paths { @@ -657,7 +659,7 @@ fn make_functions(bindings: &PathBuf) -> std::io::Result<()> { } } let data: Value = serde_json::from_str(&json_file).unwrap(); - + let mut r: Vec = vec![ String::from(" use std::ffi::CString; @@ -723,6 +725,6 @@ fn main() { bindings .write_to_file(&bindings_path) .expect("Couldn't write bindings!"); - check_version(&bindings_path).unwrap(); +// check_version(&bindings_path).unwrap(); make_functions(&bindings_path).unwrap(); } From ccdf359a90809553b35abf7b198f07d0d94cd914 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 24 Oct 2023 10:23:04 +0200 Subject: [PATCH 36/43] Update version to 2.4.1 --- ChangeLog | 2 ++ configure.ac | 2 +- rust/trexio/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c5b9e364..efc363ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,8 @@ CHANGES - Added state/energy - Made state/id an index instead of an int +- Added JSON configuration data as a C variable in trexio.h +- Added Rust interface 2.3 --- diff --git a/configure.ac b/configure.ac index b8f26a7e..d22c0f2e 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) -AC_INIT([trexio],[2.4.0],[https://github.com/TREX-CoE/trexio/issues]) +AC_INIT([trexio],[2.4.1],[https://github.com/TREX-CoE/trexio/issues]) AC_CONFIG_SRCDIR([Makefile.in]) AC_CONFIG_HEADERS([include/config.h]) diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 09e50287..1a32a13c 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "trexio" -version = "2.4.0" +version = "2.4.1" edition = "2021" license = "BSD-3-Clause" authors = ["Anthony Scemama ", "Evgeny Posenitskiy"] From d224396b4ccb391f99742b61b24bc636ffc733d8 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 24 Oct 2023 17:27:08 +0200 Subject: [PATCH 37/43] Rust downloads TREXIO tar.gz --- rust/trexio/Cargo.toml | 4 ++- rust/trexio/build.rs | 70 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 1a32a13c..5427c76e 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -13,9 +13,11 @@ readme = "README.md" [build-dependencies] bindgen = "0.65.1" -pkg-config = "0.3.27" serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } +reqwest = { version = "0.11", features = ["blocking", "rustls-tls"] } +tar = "0.4" +flate2 = "1.0" [lib] doctest = false diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 66151a22..99c24252 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -1,3 +1,8 @@ +extern crate reqwest; +extern crate tar; +extern crate flate2; + +const VERSION: &str = "2.3.2"; const WRAPPER_H: &str = "wrapper.h"; const GENERATED_RS: &str = "generated.rs"; @@ -7,6 +12,8 @@ use std::collections::HashMap; use std::fs::File; use std::io::{self, BufRead, BufReader, Write}; use serde_json::Value; +use flate2::read::GzDecoder; +use tar::Archive; @@ -54,12 +61,62 @@ fn check_version(bindings: &PathBuf) -> Result<(), String> { */ +fn download_trexio() -> PathBuf { + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + let trexio_url = format!("https://github.com/TREX-CoE/trexio/releases/download/v{VERSION}/trexio-{VERSION}.tar.gz"); + + // Download the .tar.gz archive + let tar_gz = out_path.join("trexio.tar.gz"); + let trexio_dir= out_path.join("trexio_dir"); + let mut resp = reqwest::blocking::get(trexio_url).expect("Failed to download the archive"); + let mut out = File::create(tar_gz.clone()).expect("Failed to create archive file"); + std::io::copy(&mut resp, &mut out).expect("Failed to copy content"); + + // Unpack the .tar.gz archive + let tar_gz = File::open(tar_gz).unwrap(); + let tar = GzDecoder::new(tar_gz); + let mut archive = Archive::new(tar); + archive.unpack(trexio_dir.clone()).expect("Failed to unpack"); + + // Assume that the archive extracts to a directory named 'trexio-0.1.0' + trexio_dir.join(format!("trexio-{}", VERSION)) +} + + +fn install_trexio(trexio_dir: &PathBuf) -> PathBuf { + println!("{}", trexio_dir.display()); + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + let install_path = out_path.join("trexio_install"); + + // Run configure script + let configure_status = std::process::Command::new("./configure") + .arg(format!("--prefix={}",install_path.display())) + .arg("--without-fortran") + .current_dir(&trexio_dir) + .status() + .unwrap(); + + assert!(configure_status.success()); + + // Run make + let make_status = std::process::Command::new("make") + .arg("install") + .current_dir(&trexio_dir) + .status() + .unwrap(); + + assert!(make_status.success()); + install_path + +} + /// This function reads from `trexio.h`, extracts the exit codes and backends, and writes them to `wrapper.h`. -fn make_interface() -> io::Result<()> { +fn make_interface(trexio_h: &PathBuf) -> io::Result<()> { let mut err = HashMap::new(); let mut be = HashMap::new(); +/* let mut trexio_h = PathBuf::new().join("trexio.h"); if let Ok(library) = pkg_config::probe_library("trexio") { for path in &library.include_paths { @@ -69,7 +126,8 @@ fn make_interface() -> io::Result<()> { } } } - eprintln!("trexio.h : {:?}", trexio_h); + */ + let trexio_file = File::open(trexio_h)?; let trexio_reader = BufReader::new(trexio_file); @@ -692,8 +750,11 @@ impl File { fn main() { + let path = download_trexio(); + let install_path = install_trexio(&path); + // Tell cargo to look for shared libraries in the specified directory - println!("cargo:rustc-link-search=/usr/local/lib"); + println!("cargo:rustc-link-search={}/lib", install_path.display()); // Tell cargo to tell rustc to link the system trexio shared library. println!("cargo:rustc-link-lib=trexio"); @@ -702,8 +763,9 @@ fn main() { println!("cargo:rerun-if-changed=wrapper.h"); let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + let trexio_h = install_path.join("include").join("trexio.h"); - make_interface().unwrap(); + make_interface(&trexio_h).unwrap(); // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for // the resulting bindings. From 92e71be9563ce7a41c508e4a49fce2e71fdb3745 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 24 Oct 2023 19:46:15 +0200 Subject: [PATCH 38/43] Added trex.json in tar.gz --- Makefile.am | 54 +++++++++++++++++++-- rust/trexio/Cargo.toml | 1 + rust/trexio/build.rs | 105 ++++++++--------------------------------- 3 files changed, 72 insertions(+), 88 deletions(-) diff --git a/Makefile.am b/Makefile.am index f64ff113..eacd0b68 100644 --- a/Makefile.am +++ b/Makefile.am @@ -34,10 +34,9 @@ ACLOCAL_AMFLAGS = -I m4 CLEANFILES = trexio.mod +BUILT_SOURCES = trex.json if HAVE_FORTRAN -BUILT_SOURCES = trexio.mod -else -BUILT_SOURCES = +BUILT_SOURCES += trexio.mod endif EXTRA_DIST = .git_hash @@ -87,14 +86,63 @@ src_libtrexio_la_SOURCES = $(trexio_h) $(SOURCES) # Include CMake-related files in the distribution. EXTRA_DIST += CMakeLists.txt \ + trex.json \ src/CMakeLists.txt \ tests/CMakeLists.txt \ + tests/test_macros.h \ cmake/cmake_uninstall.cmake.in \ cmake/FindTREXIO.cmake # =============== TESTS =============== # +TEST_FILES = \ + tests/delete_group.c \ + tests/delete_group_hdf5.c \ + tests/delete_group_text.c \ + tests/io_all.c \ + tests/io_determinant.c \ + tests/io_determinant_hdf5.c \ + tests/io_determinant_text.c \ + tests/io_dset_float.c \ + tests/io_dset_float_hdf5.c \ + tests/io_dset_float_text.c \ + tests/io_dset_int.c \ + tests/io_dset_int_hdf5.c \ + tests/io_dset_int_text.c \ + tests/io_dset_sparse.c \ + tests/io_dset_sparse_hdf5.c \ + tests/io_dset_sparse_text.c \ + tests/io_dset_str.c \ + tests/io_dset_str_hdf5.c \ + tests/io_dset_str_text.c \ + tests/io_jastrow.c \ + tests/io_jastrow_hdf5.c \ + tests/io_jastrow_text.c \ + tests/io_num.c \ + tests/io_num_hdf5.c \ + tests/io_num_text.c \ + tests/io_safe_dset_float.c \ + tests/io_safe_dset_float_hdf5.c \ + tests/io_safe_dset_float_text.c \ + tests/io_str.c \ + tests/io_str_hdf5.c \ + tests/io_str_text.c \ + tests/open.c \ + tests/open_hdf5.c \ + tests/open_text.c \ + tests/overwrite_all.c \ + tests/overwrite_all_hdf5.c \ + tests/overwrite_all_text.c \ + tests/pre_close.c \ + tests/template_hdf5.c \ + tests/template_text.c \ + tests/test_f.f90 \ + tests/test_macros.h \ + tests/trexio_f.f90 + +EXTRA_DIST += $(TEST_FILES) + TESTS_C = \ tests/open_text \ tests/io_num_text \ diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index 5427c76e..a83c6826 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -23,3 +23,4 @@ flate2 = "1.0" doctest = false [dependencies] +hdf5 = "0.8.1" diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 99c24252..146e61c1 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -17,50 +17,6 @@ use tar::Archive; - -/* -/// Checks that the version specified in the Cargo.toml file is consistent with the version of the TREXIO C library. -fn check_version(bindings: &PathBuf) -> Result<(), String> { - // Read version from Cargo.toml - let mut rust_version = String::new(); - { - let file = File::open("Cargo.toml").map_err(|e| e.to_string())?; - let reader = io::BufReader::new(file); - - for line in reader.lines() { - let line = line.map_err(|e| e.to_string())?; - if line.starts_with("version") { - rust_version = line.split('=').nth(1).unwrap().trim().to_string(); - rust_version = rust_version[1..rust_version.len() - 1].to_string(); - break; - } - } - } - - // Check version from TREXIO - let mut trexio_version = String::new(); - let file = File::open(bindings).map_err(|e| e.to_string())?; - let reader = io::BufReader::new(file); - for line in reader.lines() { - let line = line.map_err(|e| e.to_string())?; - if line.contains("TREXIO_PACKAGE_VERSION") { - trexio_version = line.split('"').nth(1).unwrap().trim().to_string(); - trexio_version = trexio_version[0..trexio_version.len() - 2].to_string(); - break; - } - } - - // Compare versions - if rust_version != trexio_version { - eprintln!("Inconsistent versions:\nTREXIO: {}\nRust: {}\n", trexio_version, rust_version); - return Err("Inconsistent versions".to_string()); - } - - Ok(()) -} -*/ - - fn download_trexio() -> PathBuf { let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); let trexio_url = format!("https://github.com/TREX-CoE/trexio/releases/download/v{VERSION}/trexio-{VERSION}.tar.gz"); @@ -107,7 +63,6 @@ fn install_trexio(trexio_dir: &PathBuf) -> PathBuf { assert!(make_status.success()); install_path - } @@ -116,18 +71,6 @@ fn make_interface(trexio_h: &PathBuf) -> io::Result<()> { let mut err = HashMap::new(); let mut be = HashMap::new(); -/* - let mut trexio_h = PathBuf::new().join("trexio.h"); - if let Ok(library) = pkg_config::probe_library("trexio") { - for path in &library.include_paths { - if path.join("trexio.h").exists() { - trexio_h = path.join("trexio.h"); - break; - } - } - } - */ - let trexio_file = File::open(trexio_h)?; let trexio_reader = BufReader::new(trexio_file); @@ -165,7 +108,7 @@ fn make_interface(trexio_h: &PathBuf) -> io::Result<()> { write!(&mut wrapper_file, "const back_end_t {} = {};\n", k, v)?; } - write!(&mut wrapper_file, "#undef TREXIO_AUTO;\n")?; + write!(&mut wrapper_file, "#undef TREXIO_AUTO\n")?; write!(&mut wrapper_file, "const back_end_t TREXIO_AUTO = TREXIO_INVALID_BACK_END;\n")?; Ok(()) @@ -698,25 +641,9 @@ pub fn write_{group_l}_{element_l}(&self, offset: usize, data: &[{typ}]) -> Resu /// Reads the JSON file, processes its contents, and generates Rust functions according to the specifications in the JSON data. -fn make_functions(bindings: &PathBuf) -> std::io::Result<()> { - let file = File::open(bindings)?; - let reader = io::BufReader::new(file); - let mut json_file = String::new(); - for line in reader.lines() { - let line = line?; - if line.contains("trexio_json") { - let index_start = match line.find('{') { - Some(x) => x, - _ => panic!("trexio_json not found"), - }; - json_file = line[index_start..line.len()-5] - .replace(r#"\""#,"\"") - .replace(r#"\n"#,"\n") - .replace(r#"\t"#,""); - break; - } - } - let data: Value = serde_json::from_str(&json_file).unwrap(); +fn make_functions(json_path: &PathBuf) -> std::io::Result<()> { + let file = File::open(json_path).unwrap(); + let data: Value = serde_json::from_reader(file).unwrap(); let mut r: Vec = vec![ String::from(" @@ -750,8 +677,11 @@ impl File { fn main() { - let path = download_trexio(); - let install_path = install_trexio(&path); + let source_path = download_trexio(); + println!("source path: {}", source_path.display()); + + let install_path = install_trexio(&source_path); + println!("install path: {}", install_path.display()); // Tell cargo to look for shared libraries in the specified directory println!("cargo:rustc-link-search={}/lib", install_path.display()); @@ -759,17 +689,17 @@ fn main() { // Tell cargo to tell rustc to link the system trexio shared library. println!("cargo:rustc-link-lib=trexio"); - // Tell cargo to invalidate the built crate whenever the wrapper changes - println!("cargo:rerun-if-changed=wrapper.h"); - let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); let trexio_h = install_path.join("include").join("trexio.h"); + println!("trexio.h: {}", trexio_h.display()); make_interface(&trexio_h).unwrap(); // The bindgen::Builder is the main entry point // to bindgen, and lets you build up options for // the resulting bindings. - let wrapper_h = out_path.join("wrapper.h"); + let wrapper_h = out_path.join(WRAPPER_H); + println!("wrapper.h: {}", wrapper_h.display()); + let bindings = bindgen::Builder::default() // The input header we would like to generate // bindings for. @@ -784,9 +714,14 @@ fn main() { // Write the bindings to the $OUT_DIR/bindings.rs file. let bindings_path = out_path.join("bindings.rs"); + println!("bindings.rs: {}", bindings_path.display()); + bindings .write_to_file(&bindings_path) .expect("Couldn't write bindings!"); -// check_version(&bindings_path).unwrap(); - make_functions(&bindings_path).unwrap(); + + let json_path = source_path.join("trex.json"); + println!("json path: {}", json_path.display()); + + make_functions(&json_path).unwrap(); } From 8a2067d995e33148def1efc7d4275f6f19b68ef7 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 24 Oct 2023 19:53:07 +0200 Subject: [PATCH 39/43] Bump version to 2.4.2 --- ChangeLog | 1 + configure.ac | 2 +- ocaml/trexio/dune-project | 2 +- rust/trexio/Cargo.toml | 2 +- rust/trexio/build.rs | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index efc363ce..abbe095b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,7 @@ CHANGES - Added state/energy - Made state/id an index instead of an int - Added JSON configuration data as a C variable in trexio.h +- Added JSON configuration file in tar.gz release - Added Rust interface 2.3 diff --git a/configure.ac b/configure.ac index d22c0f2e..ecd13aeb 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) -AC_INIT([trexio],[2.4.1],[https://github.com/TREX-CoE/trexio/issues]) +AC_INIT([trexio],[2.4.2],[https://github.com/TREX-CoE/trexio/issues]) AC_CONFIG_SRCDIR([Makefile.in]) AC_CONFIG_HEADERS([include/config.h]) diff --git a/ocaml/trexio/dune-project b/ocaml/trexio/dune-project index f37f9f67..5d32174b 100644 --- a/ocaml/trexio/dune-project +++ b/ocaml/trexio/dune-project @@ -1,7 +1,7 @@ (lang dune 3.1) (name trexio) -(version 2.3.2) +(version 2.4.2) (generate_opam_files false) diff --git a/rust/trexio/Cargo.toml b/rust/trexio/Cargo.toml index a83c6826..5ca5289c 100644 --- a/rust/trexio/Cargo.toml +++ b/rust/trexio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "trexio" -version = "2.4.1" +version = "2.4.2" edition = "2021" license = "BSD-3-Clause" authors = ["Anthony Scemama ", "Evgeny Posenitskiy"] diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 146e61c1..05b6ad8b 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -2,7 +2,7 @@ extern crate reqwest; extern crate tar; extern crate flate2; -const VERSION: &str = "2.3.2"; +const VERSION: &str = "2.4.2"; const WRAPPER_H: &str = "wrapper.h"; const GENERATED_RS: &str = "generated.rs"; From 9113da7185c723db44d0edc414c63638488aebae Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Tue, 24 Oct 2023 19:58:32 +0200 Subject: [PATCH 40/43] Fixing CI --- Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile.am b/Makefile.am index eacd0b68..cfc6217a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -269,6 +269,8 @@ src/trexio.c: $(trexio_h) $(trexio_h): $(ORG_FILES) $(GENERATOR_FILES) cd $(srcdir)/tools && ./build_trexio.sh +trex.json: $(trexio_h) + $(htmlizer): $(ORG_FILES) $(srcdir)/src/README.org touch $(htmlizer) cd $(srcdir)/tools && ./build_doc.sh From 51afc129ab4bd270a34964e8e5f882832d52ba5a Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 25 Oct 2023 11:29:58 +0200 Subject: [PATCH 41/43] Changeed version to 2.4.2 in OCaml, Rust Python and CMake. Added version_memo.txt to remember changes ;-) --- CMakeLists.txt | 2 +- ocaml/trexio/Makefile | 1 + ocaml/trexio/trexio-2.3.2.tar.gz | Bin 937631 -> 0 bytes ocaml/trexio/trexio.opam | 2 +- python/pytrexio/_version.py | 2 +- rust/trexio/build.rs | 8 +++++--- version_memo.txt | 8 ++++++++ 7 files changed, 17 insertions(+), 6 deletions(-) delete mode 100644 ocaml/trexio/trexio-2.3.2.tar.gz create mode 100644 version_memo.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index d680079f..dbbbb6c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.16) # Initialize the CMake project. project(Trexio - VERSION 2.4.0 + VERSION 2.4.2 DESCRIPTION "TREX I/O library" LANGUAGES C Fortran ) diff --git a/ocaml/trexio/Makefile b/ocaml/trexio/Makefile index 8783f1a7..f01743b9 100644 --- a/ocaml/trexio/Makefile +++ b/ocaml/trexio/Makefile @@ -10,6 +10,7 @@ lib/trexio.h: sources: lib/trexio.ml lib/trexio.h clean: + rm lib/trexio.h lib/trexio.ml lib/trexio.mli lib/trexio_stubs.c dune clean .PHONY: sources default diff --git a/ocaml/trexio/trexio-2.3.2.tar.gz b/ocaml/trexio/trexio-2.3.2.tar.gz deleted file mode 100644 index 8fa17bb1d0df1480abb15876f2be23f8eb22f78e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937631 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 VSjZKW`{`52(0NFIK8 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 SvB>j5LqQjNSy)(ZSpNYl{{>M1 diff --git a/ocaml/trexio/trexio.opam b/ocaml/trexio/trexio.opam index f38dc697..5d41dcab 100644 --- a/ocaml/trexio/trexio.opam +++ b/ocaml/trexio/trexio.opam @@ -1,6 +1,6 @@ # This file is generated by dune, edit dune-project instead opam-version: "2.0" -version: "2.4.0" +version: "2.4.2" synopsis: "Binding for the TREXIO Input/Output library" description: "TREXIO is a file format and library for storing wave functions and integrals for quantum chemistry." diff --git a/python/pytrexio/_version.py b/python/pytrexio/_version.py index 3d67cd6b..60be088d 100644 --- a/python/pytrexio/_version.py +++ b/python/pytrexio/_version.py @@ -1 +1 @@ -__version__ = "2.4.0" +__version__ = "2.4.2" diff --git a/rust/trexio/build.rs b/rust/trexio/build.rs index 05b6ad8b..76250381 100644 --- a/rust/trexio/build.rs +++ b/rust/trexio/build.rs @@ -2,7 +2,6 @@ extern crate reqwest; extern crate tar; extern crate flate2; -const VERSION: &str = "2.4.2"; const WRAPPER_H: &str = "wrapper.h"; const GENERATED_RS: &str = "generated.rs"; @@ -18,8 +17,11 @@ use tar::Archive; fn download_trexio() -> PathBuf { + let version = env::var("CARGO_PKG_VERSION").unwrap(); + println!("Version : {}", version); + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); - let trexio_url = format!("https://github.com/TREX-CoE/trexio/releases/download/v{VERSION}/trexio-{VERSION}.tar.gz"); + let trexio_url = format!("https://github.com/TREX-CoE/trexio/releases/download/v{version}/trexio-{version}.tar.gz"); // Download the .tar.gz archive let tar_gz = out_path.join("trexio.tar.gz"); @@ -35,7 +37,7 @@ fn download_trexio() -> PathBuf { archive.unpack(trexio_dir.clone()).expect("Failed to unpack"); // Assume that the archive extracts to a directory named 'trexio-0.1.0' - trexio_dir.join(format!("trexio-{}", VERSION)) + trexio_dir.join(format!("trexio-{}", version)) } diff --git a/version_memo.txt b/version_memo.txt new file mode 100644 index 00000000..67fcce71 --- /dev/null +++ b/version_memo.txt @@ -0,0 +1,8 @@ +To update the version, change: + +- configure.ac +- CMakeLists.txt +- ocaml/trexio/trexio.opam +- python/pytrexio/_version.py +- rust/trexio/Cargo.toml + From c1c44e7d5632695d47c8a588d168b2dc80935434 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 25 Oct 2023 11:36:22 +0200 Subject: [PATCH 42/43] Add instructions for Rust and OCaml --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index 70a2e7c7..74ba86fa 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,34 @@ make python-test We highly recommend to use virtual environments to avoid compatibility issues and to improve reproducibility. +## Rust API + +The Rust API is available on Crates.io, so you can simply run +``` +cargo add trexio +``` +to your Rust project. + +If you prefer to install the Rust API provided with this repository: +``` +cargo add --path /path/to/trexio/rust/trexio +``` + +## OCaml API + +The TREXIO OCaml API is available in OPAM: +``` +opam install trexio +``` + +If you prefer to install it from this repository, + +``` +cd ocaml/trexio +make +opam install . +``` + ## Tutorial TREXIO tutorials in Jupyter notebook format can be found in the From 354d1cd1f284865452280f5df1227d85a13c62ce Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Wed, 25 Oct 2023 13:45:44 +0200 Subject: [PATCH 43/43] Removed JSON string in trexio.h --- src/templates_front/templator_front.org | 473 ++++++++++++------------ 1 file changed, 237 insertions(+), 236 deletions(-) diff --git a/src/templates_front/templator_front.org b/src/templates_front/templator_front.org index 80944b87..001c2cc6 100644 --- a/src/templates_front/templator_front.org +++ b/src/templates_front/templator_front.org @@ -26,248 +26,249 @@ #+NAME: trex_json #+begin_src python :results drawer -res = "static const char* trexio_json = " +res = "/* JSON configuration\n" with open('../../trex.json','r') as f: for line in f: - res += " \" " + line.rstrip().replace('"', '\\"') + "\\n\"\n" -res += ";\n" + res += line.rstrip()+'\n' +res += "*/" return res #+end_src - + #+RESULTS: trex_json :results: - " {\n" - " \n" - " \"metadata\": {\n" - " \"code_num\" : [ \"dim\", [] ]\n" - " , \"code\" : [ \"str\", [ \"metadata.code_num\" ] ]\n" - " , \"author_num\" : [ \"dim\", [] ]\n" - " , \"author\" : [ \"str\", [ \"metadata.author_num\" ] ]\n" - " , \"package_version\" : [ \"str\", [] ]\n" - " , \"description\" : [ \"str\", [] ]\n" - " , \"unsafe\" : [ \"int\", [] ]\n" - " } ,\n" - " \n" - " \"nucleus\": {\n" - " \"num\" : [ \"dim\" , [] ]\n" - " , \"charge\" : [ \"float\", [ \"nucleus.num\" ] ]\n" - " , \"coord\" : [ \"float\", [ \"nucleus.num\", \"3\" ] ]\n" - " , \"label\" : [ \"str\" , [ \"nucleus.num\" ] ]\n" - " , \"point_group\" : [ \"str\" , [] ]\n" - " , \"repulsion\" : [ \"float\", [] ]\n" - " } ,\n" - " \n" - " \"cell\": {\n" - " \"a\" : [ \"float\", [ \"3\" ] ]\n" - " , \"b\" : [ \"float\", [ \"3\" ] ]\n" - " , \"c\" : [ \"float\", [ \"3\" ] ]\n" - " , \"G_a\" : [ \"float\", [ \"3\" ] ]\n" - " , \"G_b\" : [ \"float\", [ \"3\" ] ]\n" - " , \"G_c\" : [ \"float\", [ \"3\" ] ]\n" - " , \"two_pi\" : [ \"int\" , [] ]\n" - " } ,\n" - " \n" - " \"pbc\": {\n" - " \"periodic\" : [ \"int\" , [] ]\n" - " , \"k_point\" : [ \"float\", [ \"3\" ] ]\n" - " } ,\n" - " \n" - " \"electron\": {\n" - " \"num\" : [ \"dim\", [] ]\n" - " , \"up_num\" : [ \"int\", [] ]\n" - " , \"dn_num\" : [ \"int\", [] ]\n" - " } ,\n" - " \n" - " \"state\": {\n" - " \"num\" : [ \"dim\" , [] ]\n" - " , \"id\" : [ \"index\", [] ]\n" - " , \"energy\" : [ \"float\", [] ]\n" - " , \"current_label\" : [ \"str\" , [] ]\n" - " , \"label\" : [ \"str\" , [ \"state.num\" ] ]\n" - " , \"file_name\" : [ \"str\" , [ \"state.num\" ] ]\n" - " } ,\n" - " \n" - " \"basis\": {\n" - " \"type\" : [ \"str\" , [] ]\n" - " , \"prim_num\" : [ \"dim\" , [] ]\n" - " , \"shell_num\" : [ \"dim\" , [] ]\n" - " , \"nao_grid_num\" : [ \"dim\" , [] ]\n" - " , \"interp_coeff_cnt\" : [ \"dim\" , [] ]\n" - " , \"nucleus_index\" : [ \"index\", [ \"basis.shell_num\" ] ]\n" - " , \"shell_ang_mom\" : [ \"int\" , [ \"basis.shell_num\" ] ]\n" - " , \"shell_factor\" : [ \"float\", [ \"basis.shell_num\" ] ]\n" - " , \"r_power\" : [ \"int\" , [ \"basis.shell_num\" ] ]\n" - " , \"nao_grid_start\" : [ \"index\", [ \"basis.shell_num\" ] ]\n" - " , \"nao_grid_size\" : [ \"dim\" , [ \"basis.shell_num\" ] ]\n" - " , \"shell_index\" : [ \"index\", [ \"basis.prim_num\" ] ]\n" - " , \"exponent\" : [ \"float\", [ \"basis.prim_num\" ] ]\n" - " , \"coefficient\" : [ \"float\", [ \"basis.prim_num\" ] ]\n" - " , \"prim_factor\" : [ \"float\", [ \"basis.prim_num\" ] ]\n" - " , \"e_cut\" : [ \"float\", [] ]\n" - " , \"nao_grid_radius\" : [ \"float\", [ \"basis.nao_grid_num\" ] ]\n" - " , \"nao_grid_phi\" : [ \"float\", [ \"basis.nao_grid_num\" ] ]\n" - " , \"nao_grid_grad\" : [ \"float\", [ \"basis.nao_grid_num\" ] ]\n" - " , \"nao_grid_lap\" : [ \"float\", [ \"basis.nao_grid_num\" ] ]\n" - " , \"interpolator_kind\" : [ \"str\" , [] ]\n" - " , \"interpolator_phi\" : [ \"float\", [ \"basis.nao_grid_num\", \"basis.interp_coeff_cnt\" ] ]\n" - " , \"interpolator_grad\" : [ \"float\", [ \"basis.nao_grid_num\", \"basis.interp_coeff_cnt\" ] ]\n" - " , \"interpolator_lap\" : [ \"float\", [ \"basis.nao_grid_num\", \"basis.interp_coeff_cnt\" ] ]\n" - " } ,\n" - " \n" - " \"ecp\": {\n" - " \"max_ang_mom_plus_1\" : [ \"int\" , [ \"nucleus.num\" ] ]\n" - " , \"z_core\" : [ \"int\" , [ \"nucleus.num\" ] ]\n" - " , \"num\" : [ \"dim\" , [] ]\n" - " , \"ang_mom\" : [ \"int\" , [ \"ecp.num\" ] ]\n" - " , \"nucleus_index\" : [ \"index\", [ \"ecp.num\" ] ]\n" - " , \"exponent\" : [ \"float\", [ \"ecp.num\" ] ]\n" - " , \"coefficient\" : [ \"float\", [ \"ecp.num\" ] ]\n" - " , \"power\" : [ \"int\" , [ \"ecp.num\" ] ]\n" - " } ,\n" - " \n" - " \"grid\": {\n" - " \"description\" : [ \"str\" , [] ]\n" - " , \"rad_precision\" : [ \"float\", [] ]\n" - " , \"num\" : [ \"dim\" , [] ]\n" - " , \"max_ang_num\" : [ \"int\" , [] ]\n" - " , \"min_ang_num\" : [ \"int\" , [] ]\n" - " , \"coord\" : [ \"float\", [ \"grid.num\" ] ]\n" - " , \"weight\" : [ \"float\", [ \"grid.num\" ] ]\n" - " , \"ang_num\" : [ \"dim\" , [] ]\n" - " , \"ang_coord\" : [ \"float\", [ \"grid.ang_num\" ] ]\n" - " , \"ang_weight\" : [ \"float\", [ \"grid.ang_num\" ] ]\n" - " , \"rad_num\" : [ \"dim\" , [] ]\n" - " , \"rad_coord\" : [ \"float\", [ \"grid.rad_num\" ] ]\n" - " , \"rad_weight\" : [ \"float\", [ \"grid.rad_num\" ] ]\n" - " } ,\n" - " \n" - " \"ao\": {\n" - " \"cartesian\" : [ \"int\" , [] ]\n" - " , \"num\" : [ \"dim\" , [] ]\n" - " , \"shell\" : [ \"index\", [ \"ao.num\" ] ]\n" - " , \"normalization\" : [ \"float\", [ \"ao.num\" ] ]\n" - " } ,\n" - " \n" - " \"ao_1e_int\": {\n" - " \"overlap\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"kinetic\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"potential_n_e\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"ecp\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"core_hamiltonian\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"overlap_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"kinetic_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"potential_n_e_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"ecp_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " , \"core_hamiltonian_im\" : [ \"float\", [ \"ao.num\", \"ao.num\" ] ]\n" - " } ,\n" - " \n" - " \"ao_2e_int\": {\n" - " \"eri\" : [ \"float sparse\", [ \"ao.num\", \"ao.num\", \"ao.num\", \"ao.num\" ] ]\n" - " , \"eri_lr\" : [ \"float sparse\", [ \"ao.num\", \"ao.num\", \"ao.num\", \"ao.num\" ] ]\n" - " , \"eri_cholesky_num\" : [ \"dim\" , [] ]\n" - " , \"eri_cholesky\" : [ \"float sparse\", [ \"ao_2e_int.eri_cholesky_num\", \"ao.num\", \"ao.num\" ] ]\n" - " , \"eri_lr_cholesky_num\" : [ \"dim\" , [] ]\n" - " , \"eri_lr_cholesky\" : [ \"float sparse\", [ \"ao_2e_int.eri_lr_cholesky_num\", \"ao.num\", \"ao.num\" ] ]\n" - " } ,\n" - " \n" - " \"mo\": {\n" - " \"type\" : [ \"str\" , [] ]\n" - " , \"num\" : [ \"dim\" , [] ]\n" - " , \"coefficient\" : [ \"float\", [ \"mo.num\", \"ao.num\" ] ]\n" - " , \"coefficient_im\" : [ \"float\", [ \"mo.num\", \"ao.num\" ] ]\n" - " , \"class\" : [ \"str\" , [ \"mo.num\" ] ]\n" - " , \"symmetry\" : [ \"str\" , [ \"mo.num\" ] ]\n" - " , \"occupation\" : [ \"float\", [ \"mo.num\" ] ]\n" - " , \"energy\" : [ \"float\", [ \"mo.num\" ] ]\n" - " , \"spin\" : [ \"int\" , [ \"mo.num\" ] ]\n" - " } ,\n" - " \n" - " \"mo_1e_int\": {\n" - " \"overlap\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"kinetic\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"potential_n_e\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"ecp\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"core_hamiltonian\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"overlap_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"kinetic_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"potential_n_e_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"ecp_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"core_hamiltonian_im\" : [ \"float\", [ \"mo.num\", \"mo.num\" ] ]\n" - " } ,\n" - " \n" - " \"mo_2e_int\": {\n" - " \"eri\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"eri_lr\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"eri_cholesky_num\" : [ \"dim\" , [] ]\n" - " , \"eri_cholesky\" : [ \"float sparse\", [ \"mo_2e_int.eri_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"eri_lr_cholesky_num\" : [ \"dim\" , [] ]\n" - " , \"eri_lr_cholesky\" : [ \"float sparse\", [ \"mo_2e_int.eri_lr_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" - " } ,\n" - " \n" - " \"determinant\": {\n" - " \"num\" : [ \"dim readonly\" , [] ]\n" - " , \"list\" : [ \"int special\" , [ \"determinant.num\" ] ]\n" - " , \"coefficient\" : [ \"float buffered\", [ \"determinant.num\" ] ]\n" - " } ,\n" - " \n" - " \"csf\": {\n" - " \"num\" : [ \"dim readonly\" , [] ]\n" - " , \"coefficient\" : [ \"float buffered\", [ \"csf.num\" ] ]\n" - " , \"det_coefficient\" : [ \"float sparse\" , [ \"csf.num\", \"determinant.num\" ] ]\n" - " } ,\n" - " \n" - " \"amplitude\": {\n" - " \"single\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"single_exp\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"double\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"double_exp\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"triple\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"triple_exp\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"quadruple\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"quadruple_exp\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " } ,\n" - " \n" - " \"rdm\": {\n" - " \"1e\" : [ \"float\" , [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"1e_up\" : [ \"float\" , [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"1e_dn\" : [ \"float\" , [ \"mo.num\", \"mo.num\" ] ]\n" - " , \"2e\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"2e_upup\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"2e_dndn\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"2e_updn\" : [ \"float sparse\", [ \"mo.num\", \"mo.num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"2e_cholesky_num\" : [ \"dim\" , [] ]\n" - " , \"2e_cholesky\" : [ \"float sparse\", [ \"rdm.2e_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"2e_upup_cholesky_num\" : [ \"dim\" , [] ]\n" - " , \"2e_upup_cholesky\" : [ \"float sparse\", [ \"rdm.2e_upup_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"2e_dndn_cholesky_num\" : [ \"dim\" , [] ]\n" - " , \"2e_dndn_cholesky\" : [ \"float sparse\", [ \"rdm.2e_dndn_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" - " , \"2e_updn_cholesky_num\" : [ \"dim\" , [] ]\n" - " , \"2e_updn_cholesky\" : [ \"float sparse\", [ \"rdm.2e_updn_cholesky_num\", \"mo.num\", \"mo.num\" ] ]\n" - " } ,\n" - " \n" - " \"jastrow\": {\n" - " \"type\" : [ \"str\" , [] ]\n" - " , \"en_num\" : [ \"dim\" , [] ]\n" - " , \"ee_num\" : [ \"dim\" , [] ]\n" - " , \"een_num\" : [ \"dim\" , [] ]\n" - " , \"en\" : [ \"float\" , [ \"jastrow.en_num\" ] ]\n" - " , \"ee\" : [ \"float\" , [ \"jastrow.ee_num\" ] ]\n" - " , \"een\" : [ \"float\" , [ \"jastrow.een_num\" ] ]\n" - " , \"en_nucleus\" : [ \"index\" , [ \"jastrow.en_num\" ] ]\n" - " , \"een_nucleus\" : [ \"index\" , [ \"jastrow.een_num\" ] ]\n" - " , \"ee_scaling\" : [ \"float\" , [] ]\n" - " , \"en_scaling\" : [ \"float\" , [ \"nucleus.num\" ] ]\n" - " } ,\n" - " \n" - " \"qmc\": {\n" - " \"num\" : [ \"dim\" , [] ]\n" - " , \"point\" : [ \"float\", [ \"qmc.num\", \"electron.num\", \"3\" ] ]\n" - " , \"psi\" : [ \"float\", [ \"qmc.num\" ] ]\n" - " , \"e_loc\" : [ \"float\", [ \"qmc.num\" ] ]\n" - " }\n" - " \n" - " }\n" - ; + /* JSON configuration + { + + "metadata": { + "code_num" : [ "dim", [] ] + , "code" : [ "str", [ "metadata.code_num" ] ] + , "author_num" : [ "dim", [] ] + , "author" : [ "str", [ "metadata.author_num" ] ] + , "package_version" : [ "str", [] ] + , "description" : [ "str", [] ] + , "unsafe" : [ "int", [] ] + } , + + "nucleus": { + "num" : [ "dim" , [] ] + , "charge" : [ "float", [ "nucleus.num" ] ] + , "coord" : [ "float", [ "nucleus.num", "3" ] ] + , "label" : [ "str" , [ "nucleus.num" ] ] + , "point_group" : [ "str" , [] ] + , "repulsion" : [ "float", [] ] + } , + + "cell": { + "a" : [ "float", [ "3" ] ] + , "b" : [ "float", [ "3" ] ] + , "c" : [ "float", [ "3" ] ] + , "G_a" : [ "float", [ "3" ] ] + , "G_b" : [ "float", [ "3" ] ] + , "G_c" : [ "float", [ "3" ] ] + , "two_pi" : [ "int" , [] ] + } , + + "pbc": { + "periodic" : [ "int" , [] ] + , "k_point" : [ "float", [ "3" ] ] + } , + + "electron": { + "num" : [ "dim", [] ] + , "up_num" : [ "int", [] ] + , "dn_num" : [ "int", [] ] + } , + + "state": { + "num" : [ "dim" , [] ] + , "id" : [ "index", [] ] + , "energy" : [ "float", [] ] + , "current_label" : [ "str" , [] ] + , "label" : [ "str" , [ "state.num" ] ] + , "file_name" : [ "str" , [ "state.num" ] ] + } , + + "basis": { + "type" : [ "str" , [] ] + , "prim_num" : [ "dim" , [] ] + , "shell_num" : [ "dim" , [] ] + , "nao_grid_num" : [ "dim" , [] ] + , "interp_coeff_cnt" : [ "dim" , [] ] + , "nucleus_index" : [ "index", [ "basis.shell_num" ] ] + , "shell_ang_mom" : [ "int" , [ "basis.shell_num" ] ] + , "shell_factor" : [ "float", [ "basis.shell_num" ] ] + , "r_power" : [ "int" , [ "basis.shell_num" ] ] + , "nao_grid_start" : [ "index", [ "basis.shell_num" ] ] + , "nao_grid_size" : [ "dim" , [ "basis.shell_num" ] ] + , "shell_index" : [ "index", [ "basis.prim_num" ] ] + , "exponent" : [ "float", [ "basis.prim_num" ] ] + , "coefficient" : [ "float", [ "basis.prim_num" ] ] + , "prim_factor" : [ "float", [ "basis.prim_num" ] ] + , "e_cut" : [ "float", [] ] + , "nao_grid_radius" : [ "float", [ "basis.nao_grid_num" ] ] + , "nao_grid_phi" : [ "float", [ "basis.nao_grid_num" ] ] + , "nao_grid_grad" : [ "float", [ "basis.nao_grid_num" ] ] + , "nao_grid_lap" : [ "float", [ "basis.nao_grid_num" ] ] + , "interpolator_kind" : [ "str" , [] ] + , "interpolator_phi" : [ "float", [ "basis.nao_grid_num", "basis.interp_coeff_cnt" ] ] + , "interpolator_grad" : [ "float", [ "basis.nao_grid_num", "basis.interp_coeff_cnt" ] ] + , "interpolator_lap" : [ "float", [ "basis.nao_grid_num", "basis.interp_coeff_cnt" ] ] + } , + + "ecp": { + "max_ang_mom_plus_1" : [ "int" , [ "nucleus.num" ] ] + , "z_core" : [ "int" , [ "nucleus.num" ] ] + , "num" : [ "dim" , [] ] + , "ang_mom" : [ "int" , [ "ecp.num" ] ] + , "nucleus_index" : [ "index", [ "ecp.num" ] ] + , "exponent" : [ "float", [ "ecp.num" ] ] + , "coefficient" : [ "float", [ "ecp.num" ] ] + , "power" : [ "int" , [ "ecp.num" ] ] + } , + + "grid": { + "description" : [ "str" , [] ] + , "rad_precision" : [ "float", [] ] + , "num" : [ "dim" , [] ] + , "max_ang_num" : [ "int" , [] ] + , "min_ang_num" : [ "int" , [] ] + , "coord" : [ "float", [ "grid.num" ] ] + , "weight" : [ "float", [ "grid.num" ] ] + , "ang_num" : [ "dim" , [] ] + , "ang_coord" : [ "float", [ "grid.ang_num" ] ] + , "ang_weight" : [ "float", [ "grid.ang_num" ] ] + , "rad_num" : [ "dim" , [] ] + , "rad_coord" : [ "float", [ "grid.rad_num" ] ] + , "rad_weight" : [ "float", [ "grid.rad_num" ] ] + } , + + "ao": { + "cartesian" : [ "int" , [] ] + , "num" : [ "dim" , [] ] + , "shell" : [ "index", [ "ao.num" ] ] + , "normalization" : [ "float", [ "ao.num" ] ] + } , + + "ao_1e_int": { + "overlap" : [ "float", [ "ao.num", "ao.num" ] ] + , "kinetic" : [ "float", [ "ao.num", "ao.num" ] ] + , "potential_n_e" : [ "float", [ "ao.num", "ao.num" ] ] + , "ecp" : [ "float", [ "ao.num", "ao.num" ] ] + , "core_hamiltonian" : [ "float", [ "ao.num", "ao.num" ] ] + , "overlap_im" : [ "float", [ "ao.num", "ao.num" ] ] + , "kinetic_im" : [ "float", [ "ao.num", "ao.num" ] ] + , "potential_n_e_im" : [ "float", [ "ao.num", "ao.num" ] ] + , "ecp_im" : [ "float", [ "ao.num", "ao.num" ] ] + , "core_hamiltonian_im" : [ "float", [ "ao.num", "ao.num" ] ] + } , + + "ao_2e_int": { + "eri" : [ "float sparse", [ "ao.num", "ao.num", "ao.num", "ao.num" ] ] + , "eri_lr" : [ "float sparse", [ "ao.num", "ao.num", "ao.num", "ao.num" ] ] + , "eri_cholesky_num" : [ "dim" , [] ] + , "eri_cholesky" : [ "float sparse", [ "ao_2e_int.eri_cholesky_num", "ao.num", "ao.num" ] ] + , "eri_lr_cholesky_num" : [ "dim" , [] ] + , "eri_lr_cholesky" : [ "float sparse", [ "ao_2e_int.eri_lr_cholesky_num", "ao.num", "ao.num" ] ] + } , + + "mo": { + "type" : [ "str" , [] ] + , "num" : [ "dim" , [] ] + , "coefficient" : [ "float", [ "mo.num", "ao.num" ] ] + , "coefficient_im" : [ "float", [ "mo.num", "ao.num" ] ] + , "class" : [ "str" , [ "mo.num" ] ] + , "symmetry" : [ "str" , [ "mo.num" ] ] + , "occupation" : [ "float", [ "mo.num" ] ] + , "energy" : [ "float", [ "mo.num" ] ] + , "spin" : [ "int" , [ "mo.num" ] ] + } , + + "mo_1e_int": { + "overlap" : [ "float", [ "mo.num", "mo.num" ] ] + , "kinetic" : [ "float", [ "mo.num", "mo.num" ] ] + , "potential_n_e" : [ "float", [ "mo.num", "mo.num" ] ] + , "ecp" : [ "float", [ "mo.num", "mo.num" ] ] + , "core_hamiltonian" : [ "float", [ "mo.num", "mo.num" ] ] + , "overlap_im" : [ "float", [ "mo.num", "mo.num" ] ] + , "kinetic_im" : [ "float", [ "mo.num", "mo.num" ] ] + , "potential_n_e_im" : [ "float", [ "mo.num", "mo.num" ] ] + , "ecp_im" : [ "float", [ "mo.num", "mo.num" ] ] + , "core_hamiltonian_im" : [ "float", [ "mo.num", "mo.num" ] ] + } , + + "mo_2e_int": { + "eri" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "eri_lr" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "eri_cholesky_num" : [ "dim" , [] ] + , "eri_cholesky" : [ "float sparse", [ "mo_2e_int.eri_cholesky_num", "mo.num", "mo.num" ] ] + , "eri_lr_cholesky_num" : [ "dim" , [] ] + , "eri_lr_cholesky" : [ "float sparse", [ "mo_2e_int.eri_lr_cholesky_num", "mo.num", "mo.num" ] ] + } , + + "determinant": { + "num" : [ "dim readonly" , [] ] + , "list" : [ "int special" , [ "determinant.num" ] ] + , "coefficient" : [ "float buffered", [ "determinant.num" ] ] + } , + + "csf": { + "num" : [ "dim readonly" , [] ] + , "coefficient" : [ "float buffered", [ "csf.num" ] ] + , "det_coefficient" : [ "float sparse" , [ "csf.num", "determinant.num" ] ] + } , + + "amplitude": { + "single" : [ "float sparse", [ "mo.num", "mo.num" ] ] + , "single_exp" : [ "float sparse", [ "mo.num", "mo.num" ] ] + , "double" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "double_exp" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "triple" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "triple_exp" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "quadruple" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num", "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "quadruple_exp" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num", "mo.num", "mo.num", "mo.num", "mo.num" ] ] + } , + + "rdm": { + "1e" : [ "float" , [ "mo.num", "mo.num" ] ] + , "1e_up" : [ "float" , [ "mo.num", "mo.num" ] ] + , "1e_dn" : [ "float" , [ "mo.num", "mo.num" ] ] + , "2e" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "2e_upup" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "2e_dndn" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "2e_updn" : [ "float sparse", [ "mo.num", "mo.num", "mo.num", "mo.num" ] ] + , "2e_cholesky_num" : [ "dim" , [] ] + , "2e_cholesky" : [ "float sparse", [ "rdm.2e_cholesky_num", "mo.num", "mo.num" ] ] + , "2e_upup_cholesky_num" : [ "dim" , [] ] + , "2e_upup_cholesky" : [ "float sparse", [ "rdm.2e_upup_cholesky_num", "mo.num", "mo.num" ] ] + , "2e_dndn_cholesky_num" : [ "dim" , [] ] + , "2e_dndn_cholesky" : [ "float sparse", [ "rdm.2e_dndn_cholesky_num", "mo.num", "mo.num" ] ] + , "2e_updn_cholesky_num" : [ "dim" , [] ] + , "2e_updn_cholesky" : [ "float sparse", [ "rdm.2e_updn_cholesky_num", "mo.num", "mo.num" ] ] + } , + + "jastrow": { + "type" : [ "str" , [] ] + , "en_num" : [ "dim" , [] ] + , "ee_num" : [ "dim" , [] ] + , "een_num" : [ "dim" , [] ] + , "en" : [ "float" , [ "jastrow.en_num" ] ] + , "ee" : [ "float" , [ "jastrow.ee_num" ] ] + , "een" : [ "float" , [ "jastrow.een_num" ] ] + , "en_nucleus" : [ "index" , [ "jastrow.en_num" ] ] + , "een_nucleus" : [ "index" , [ "jastrow.een_num" ] ] + , "ee_scaling" : [ "float" , [] ] + , "en_scaling" : [ "float" , [ "nucleus.num" ] ] + } , + + "qmc": { + "num" : [ "dim" , [] ] + , "point" : [ "float", [ "qmc.num", "electron.num", "3" ] ] + , "psi" : [ "float", [ "qmc.num" ] ] + , "e_loc" : [ "float", [ "qmc.num" ] ] + } + + } + */ :end:

#{!&TcR&f@N5d;-awEUU-#Vx&JuiQMl%TKA+ zL6DHNZjQw_an&!?d;S~Sx^6AX#uFrkb-mQabC2A(m0%H(O$C+6?Ij*xl+2w@2k+P( z8n=0{nh4j1O2M25hHG@Xz>O*DZdUbI(ixoIwOQymt=26qFv37lIu9@3khkZD<^b)i z51JNq>BofUr`ccG_d?=z>h!hv%pzBM!@7dZcWJYI6m$twz6#%2;BXpZYDFQ~QkkUQ17dV#!4vX2e1iAYmID6dqnQ zLn6J>`uGbk*g(h)_PA6RWKx5@C5^V#2+7nufg2?qKP`QDL92RWXzXxb@fgj6l++_O zw;J{3Md~yL&+)7O8@52K<$o{>wrQA@-NembbCm|>`_3Z}3FM7e+l?uzHn|+7TFsIy z$_$oZ-OG$~HsVt-mgRF)nl-%cRk^ti+EqL5o}48Kr`o>UgL8|fbADm6lCP=&L*tR) zT%?iU_anPOvG|DCC-o+)j-y+{}&mh}@IAL9h6T8*TWA6HJld zHLl!l*O#_$xqTMT;l5pQ;Bxg7ZoEVahO6(Y6+>5M$Zaf9s;VLiCjbA<5 zTcx$RpxgYa4xCMjhDL?P*2>!FMr>kgj#XK!+7(-~q_MYt*F!f$75>i+eO1M6UQfik2=|4^H-MeMn` z1@vbkE>He!Fe3>mJ>3E=L3?#8U?dKGOfVi19S+5KQw&FmnkGrxyBvoaowUC}6kwQF z0A?i-Z5_}dEDcw1^lYu#ir51#G&O%tR_^ycfd#TJC1{7IOqT>z8@p7qx*2XB zzb`PeAmapvGoCJX4+5jyxr%Vo-4zG*kig~KG~MV10&@`n_0WUhIg0!>H0vRJUCFNv zI3ctM<(+pei0tDgf&(`T4|DF_HKLf| zM08Y5%X|#g8)Rn{NVWjNwt(>58@~GF(I4&w^=1rL+Cx_g65(wMSKK336FziExe8bz zu7Qv)2&-oQcS671=!n8;ql#3K^KEwoK z9(z~M0$o}3SdYnndHoPblSbY-*#w38Pj-JNQ}c*bfu3-G+55}=@6Pg3wqWKF|+^PXH*OC2o#oKjR>h(lL z+t2Oqmq{+H>+So`ZK6Wzt;@Byu7G>P|M<6DUiUUlUX!jrc|U13djDEx84?I1gdT~h z3m+2%O{s$loPj(@Va)6!3MZ=*3} zhi{lAOH5%@v0mRI}L$p$_2xH@^P<(23I>s7&P6lx4tYCo^vm7dv~e``Yty+5b{!c zZqUxQ6gLBro=Gy~1wBl=sn0|W?N z%mhmyufX(dE-9p~?#f%FcP8|Qtk$)b$yb@ciR3h*;FaaT@ zkhBk?Y#&DheAoz(A}}RMO6SPebKq@1vT8#2WTR9NpYQethB~edd%Qt;3VA_PH`f11 zUkpXYVvZaX!9!G;@F*EwE8E-vv*bsdGG+n-sz3w7=fMtSrM#`->_oN?AM%~6 zLm#p3Fhl|j7FPJnr*yEv)eq@KW8R`#ni_4f+e#sBk<~y7_XOir5+NrU8j|l3Sx|{G z00VXHZv2gt)C;m2SaT^pz1I`H*ZscdHsts7w+8mdexK0n{q|=bbPpXw1g|o4U#)az z>W;(h!B3~V=QIwKg`$}!AoZJLjVX2q+;sGYK{#qQDO>#0@-88s5Mz3;l4LHAo%l?D zB8dVJq#Ntwsa53lnCfeK09j{>q6y~KY=E^7BPG+~6i22OMwH^NBpV_SF$7u)?lANi zAQ#iQ6Glc)B)U@67j}49to*CNq5rowxttN-NkEGeI0**QZ&WD1pud!H=;Cs*EO`Bw z9;rX5*Wt=Tg<&ue`q49_;Sbc3BY z?5;_L77oic#BXnW7L_ae7%EoXb^@fT>g=gO0;Y)R3>T7A2k|2 zMHB9U7}1_bOsZM7O=B*a5kDdS_ZomQ!`@bWOw$~R1T5$HR28Ph zVGcGdc=xH?fS9}qhC+W8cU%nb_H)V2s_!}oZmfQ>Vj*aNG zNwJzQ45Q;Dt=G_wCamTiVe?h;4V%N-W@lp7ke6tH%xWB z-NEQ`Gz{`HB#IkhRn`Z#ga$e0_;3r;+}SKe9L+JP@qW#(l83XTLWoiiA+%b>G#u3} z>i4~F{|&1JDV7ug#q{puI9wD%u=%9Mi=-cqBuZze*m3oAsU~v%I=e`9n9=v>;xSq% z6*_O#v;{OWr}CTSF*n0*-~h@4xM65Za-mJ%uZ!KTNTmGK(!3pbgaNC>p0}Ei@v##Y zKKF%~<40%e)HM6y^yu`zJ}W^D?{qqKm}=t-slK;eh1gg#CL7XDK?*#*=eOm26|1}* zLhTx(ruF%Qf|VWW&>3XdxdEQ!p_x_GF>y-b2K0&Soh8ZCIf27ut>gpY$+Pidof>|QTnW=sYbM7-`)nA#L=EH7O57NO>QrXRS2j`-+xHG<=Cr z=5f+RY~jOzW-e}NuNSkwNZh`aFX8cj-q3W%<_pOxbT12$0o`Ik%bqrNM}nYE-wxmZ z;fTFEZdDNq!a8ifPuGSAHa&dX1Gcx9kiQrrSqwi1sKpQkRgUe~BY9H|65cyDyPN}C z-#LOGiV@|lsPz(Pqk0HwuN56F$8&e`~#pW$6%&wAx&-#U2Vcp(WgAePf!Jv%iImzD}gK9ni(z;W` zqpmLE_Lphc?xfXU%!@)K^iCB1u|rv!_U%{^XXJ2`-h^MFfQ#{XcfaIbL_c1P(5{WC zp?j$)2vycjnRz|kyO`<%)^=4e7qjd&ygG0U;FbIUjDiq(=rfQddMo%G=I3tHCs@yL zmAu_x7ctPYlbPsc#w~l?E zEQc8iDHNkL%}_$l>@|MvG6j$&TYSNtIBeOiKw3+xfc)5cvMqM$nJ&cEb|D(7fliw? z4H=4j4r5q3P*T2t;dI@ly?q?f8-2OORSavgoYA`fjKP~!t8}HJT`o?NtPW&$TW4pg z^4i3Hd^D>>pHnjpV1QU^9UJy7ceGZISY?Z`!bBQ+)kQBi4~AoswjAnS3$;%_a$&>l z9mZ7JneNXyskL&MX|twRMNppnVyp18vNI}CY^6@&AXg0D(g;3{WQW10t!dDnhi=5~ zU&fhV+bYB?CY7I3uu8GW_D9{v(dF}YkJtU(lH<K2I+ZChChp4dZPzg1i}-iCm85U8>`_0H#Cuw@x? zI=-}t0MSZiL_SjUkh?O1LF~)0h`=q8X@$`3Ig7GBaETIQF=}CUUN?`Puk&+Fr(Ps1 zrt6tu=4Y4)Me;Bj*w-i-1!D@j)bXr9s*Qp~KA}x9 zDt6(caXmuA9C~36i_>@+qhy)cL;2~p#UoP3hd;Q{0*)C8?lC-luSJU0_c4cMD*O3UYps&DTy@oqs~;OU6R;aRhUhcaV_w{R{zSZnG}B9(mzqdiBPKMJSl z@+WvkN{Rz@KPJcd9Dyn4K7GsNM`+fwVVE|7QeGj;2biJ!z92)9OWJkk>o7T2q|*F! zx=(634Nd0u?Qd!8*-BSvu`|DCKFhFC>9%4b(DJEcm(R&%OdgD&$s8y6;BG1Rr%)+ap04=qU5^HPqJK)z%n z{91cFL``=KeW5BB1;Ox;_K0{qs*8;U)^^Z)YI9VEUEghAf>r%iMznl%;)HaETL#TX zq@<}VGDnQ`C)#8Ekz~Sn8_+C}wUG%K_m;TcxQU6w|HCcaUuM+sP;j~eUn2AZbIdQj z|2v-&M(>YFq`jCfJo61fibJJ^x=r5LZk38V_lXA@POb-WE{3d!Ogfp8c;v$TwuW_V zcPw|v!gU=-(K)Gtv8fDTz%sZfva8orK%%RjR17m9JS}#UTQwCt4?j5&0%ZQ1=01fY zh+Gy7&I>Fpni_YR()R9;P{(HW=~SS7)!gT6MY@`qz+ee|1(fCHE!)uVlVGrP{6IjR zC&X|CO$CWKuN?-?IBY{JKKwB6oYtqctG3g4M&@Y1ufZIQDYRJBK%URBJK2vyb9>Ew zBB9+WASAlHi5msVOt8wHx&qj4YH(Yp2o;eg+Gt3dO<_K3ju|Z67yXOQGWG6WR~x!_ zNj)J(7jwT`(o$BiB0O0h#%!MhWZ$=_4H191(6?NaWKZBDhN@|?)#tw9_YY~Mp$9Y* zMy=YhP=)!;GN%r*QZ*u*oXZoVlU5;D7b>JmXWQd4N+o2g2fm@yR2k0iAcAk$uJ3`= z)SW6l+s7-WTA|Jthu5$5o6ZfEFQ|UQ zFQ?lC{JD_fdEy z&vI%?G&SY2Du>VZ8a=8K6fPyBw_gkV_+ap^B6It#QOa#jwB@d>vhd`2 zTC1TN?YZRWb`3~eW{eCsG-r%|+{{Z{bp_O}_32_yy$5tGmxSr^MttxgE!%v`wY114 zy^+dyKzNu6XOdrpmxSx_=+0f2M}4NNR_$I;rb;NLllWx6^sKzV1hDM}UZ(ovMjg%; z#jF_3F>g+BGvR0H{ya6Nf*Mpu@ogR(H@xEXSxxXoW!g(c>l-S63=BV@@V%t8p|SVF zx>bcyST3rl=$VB{eFr+b2Ahf!tPT_Pyv1za6Dj2z3ZQu}uvTpxhL7hz-CA$kMR2I4 zO;pbrAKCOrTp|U)3oM2P{?3pYu?o79ndMq7LnVGn9 zunoqnAY^?r^L)fJ&@~vKNA^wleo6dJdWCpE`M=nD%dj|>s9h9ycLonGA-KD{Ly+JO zgS%#s;1=B7-5r8UaCZv?*Wi|YdhhR?bMJGX`=h41>s{SbUEN*PRcozxah!0-{2hqY zhH*}Vv75?g8#}LG35$G{gQVW%is~wTNDr<=A$<9*mXtF@;>E^IG^CG@fT+PE`PRw* zk)-f=Q+Sezj7@2-!y|nl#fyh&)4hs(mVs#zL4jLVm)&0t9`97o%{1l0Jj$ur&_Pq^C%(BFrq>ur?g{yx}G!V{?) z_2BQaz(>xARty#^b|LYHXOnXvmqb?#nedETk{=q&&Dez$_nyI<{>2uIc~8qfiz81Q z+;5$@r|bSe;qS2m*H?a@kX;G8hP?2C_=Gu$L|S|8+GmH={edK9#eRm|la|5zMlGs0 z8P+k2#P7|H-{gXMe$VS8FuK(J3eXI7W2sBPvyf2hno+&D?PRMtqp1_>YJD_<-;Vrl zNJpwYY3BF4sj)qY7oL}bfDMRFeJE4Xr4U-wT60ocr5ugSv^D5mJWwW;ksN?tOft8E zz|H)eI>8yQbsq5{iNkuY1Dj8>sbsLy&rIkenZ-$n744P_^~Lw7uKb_H zlV@yONWCJJdM9mLH2%efqcj=Gf{3%RvmI1ZfJN)CBkB}By7A&6euyK@G`j8TpyJhu zh|UqYL+r~vN;Y+x5xR}e{71q{ii&bCK_FU?aIwvGZFYiW`e|70S{B}cqhhIzjx)(bw4T6 zcCjq;qg8vCGyq(Mz?Hr8uVWI04rkS1ng#LH)tMOC@5g)7DLb)VnA=2Qnz7cw0;m7tbOhc|Bvr0h82gIMl5G=x( z=7=`(&GJ2VCf>`y9mLB8K_Damvza!}*@J^nxeOd>OHlHC#`J5FbJA@Fi{Q#*6hg`^WhLCC& zJ3Lm1M?S)@pjhU?OVE_GbtO8jOW0BY^h$;ZmkduW)(wZi`B6DqI@@4WU%z`P+-5nQ zHR2p;S>*S<6Vn5KeWJBYjKYiX3860qB;N}y0x7UF?}#;F`E3wER1}-du9MSbcv>0S zaBUa`BE_}^A=kGYN_AFD{$T=53Y1Xi3dC@dB%h;ba+)->7KwGD=uE5?=1A9@H6}k( zRWl6AMVaU!t9{^5rOi*yPzA}V1+N3`L-~IKBu<0>_GwrtAxnvoF$CG@HYuuXSrGfcP0 z1&5CdV{@YM_kqWtYb7zp&XHebLPAlq>%&IwcHDETaS}7*S!4 zqtgeTAB?&2Y%d?8uu%DdtS_fmPMxietI9oP+SnGPm8k-~Ytt0pq)WNsO80c5EhL(3_q)3yDnPDC^O?bjGx z44X73OJHHRl9{ly@*vMMM!OIat+=ltHi1ULIF?H2cGsk1y*!1nxW}yt{d?NoZ;aDN zZRS!kCC{8EG_dVL*($-o?8T@0$Nug`YKk_A5K*ic>-WWjsNIeKkVv-Dk6LW1BU zA3HM1{2RA3xO%eOFZ4uPlj?YLR5RvCzJQu8i$7PPAKT^$fB5*t3>H>!)OfB>Q^OEPn?n&HIw) z$jp*SZ{_iZS?R&dFEWIdH@-Pi^4XV1UDm4KMnAon z*%2FtKc|?{@O4H(QB8ZZLlDpEG5Ro-v`y*}EcALat6(VCCnxg0ooc+Dx5Jjis}5pX z(|JlHulb=!tbE1`rK9!dmqj+tOt~(x2eM>mE?Hz*D_YWyRA&o~foPwXlW(@FJpS^Oz~_S#w-Xseyi--<})P+Sv*1VC68CaL=U>NdX-ARzE) z8`Po@)Y^HF9cW z#W+ZjTwhplst^#rfWI*CYE&{1`Q`KElSD-^GwjA#bZqr8o(*PHgr>_CJt~a%3wBy5 z#6h6ZpNU1L_KEG_sV2+mt|`gn^C%V}Lq~dsW(=H6ZjVbe{pAS7B1gV%AtHm1C~=zh zsc{ZsBvt~}7V?~xu+)=;(u1IcH~*t3?$el`U$cD*Ei7R5*+x%YFgX<;am=qmru5-btlZ7&w{T$V-_EZi_M#1TuLhmzNcPO&b5h z7d6F;z*7Q!+wvYIa4WzThiMZBmO!0tNo=}@rFA)Uf+8En)=T3Jv6td^D2dQ=6I^^Ltoq_1Rq`a z3odzLbld+}03DS9q1Wj=#L?DbIU+`RO3^8jxVGu%z%4=Z*5V{~2|0F>4q)^3`l$z( zPSt@a4#SbACFD2-)J&?-D=pDbBBF&vzD%b(NVDE75<(>~3XE{m1vDSPiNFA)T_y7A z(>nO4q589^Ygj5NQemMdF>V=<4*Hw~DL)^2SpS&CB;sxN2Y&0Ra=GTTkhl`!sl5w} zLbv63fr8fCxdwOXu+Z^p_i0~=v8JS~xDwpA*=3GJ{;F>f9Ymi~U6h63QLzi?wU{)~ zKSLQpv;Nt`@xXXt*Z1Zx6C$GMySvOQH%eZM{;ye&+Z%Xf&PoF{Q*Fye%x!aTK7N7k z#|ww(IButsLQeRx%&)if!IGX0I?iTSsT6tnrt8hI3^JGYWb1c$Qr%Y=44F3=43+?B zM9zO;Fsgx^IuIH$wHFdXas%Lh0sP-`po|mPuJ#9TK!yOov;M%7t^!!;HIM_?;XgnQ zoNMGA2ICx%xdkvVaNItS9{&I2f&X890px)?oCD|OJx1ko2F|H;0OZ#|Tz6=`vB||y zEK4N{Z)XfRV04ihm>Bd-l?ZbuPUVE1%P7xapOW)SnbusdT5N9qT;XS1r?do$GT7Pg zi0t|>nckg6Nru$TU(Ogg>XzaSHu`l#gcBdD=-(>iIQVmv-R;&hmq506dU=o#PXGGO zV^&2tFu>U@(BzWIRFi&08^urmJFAy^yZn6B^9!;n0!#ok3bK`ry*{>~ zb(Z(z%|x|F5#@Yh*kZrnN|FE!LBQCQ8c~>vy^*DV3-+#wnpkIxdcz-;9TxJ`-C z=r3RpJRyMwFr1_nb=LM=M|wjNti=Vr`&76?DAo&gCfB{R0HL@!e_1zgX8p#Qq>GpU zM5>u!&ud7I9fD}HbWM8874V{zk`+D29bW4+AN*%%b9gSIfb#KJ4z^Vj-!{hav!vC9 z0w0ru-A@|~>4+flSn=11>7(|n$IWxcZMT&!pBZ!ec_Z@Hrp*mSMotzlj8e`$x1!7y zh_=AQdv7ww0;q4my$t%ioX5ZK3pbRy)iz>G0kC_>ZBlBi3D9pWhhq0;E6B7a5l(*j z$cN)#fkMp`;p{EgF*w;0N zmP7ugmG=eRhlyhcU|CK!4csW1neuXp3h9s)8Qh|Px0Jcst?GAo$24}(LcN9KzMw6k92_+8dsp#vraC|8icr063lHuxbW8MY>U-DAlJ8JaM*a-a^()Z9%fC%AJiX#b> z<{zv~_!HPTGsU4tv-sAJDhUfIqLWc8VXB2;>(=;`?uDH3N2KNFs zIFlM2N{Q^^ZnLCFnItpCB%gbFA8dr$`vvW{wzVc=tkn8G`!r^zgSH*8W@$eFBHY$-1k4n0`-I0ry#!7;$>7U&8gGDLCua8>c zFs%-!#jUQJ!WZhuJVo55=5k>7FG*u|r-P)uFb+?qgIv5YWSo!s3I&aaU-=N_LDR~2 zzg7+z4&^pMt7E@9k( z)zPa(7mKauyMvKLsZ>TU=ghmb4*}d?C$^?ssha_G%15Mcc?Ww|<+kjx_M1ZzH&v%fA69}D0e{m+PF1^UO+^`0Ru zDjeUIs89D$GfSQjMlL+&tg}ZPyboS-KH(L>sW$j$YdAV>0$}^w?meq1K%%Px0=aEc zb^r6RKOwC*423hq6n>c^X3iyyL>c{47o5U6hG|1(ZTx3T7&%2sp$>ur?87y~V!xSS zL9IO1^1D2q>WGJx`VWn==f~&e5`JN+TGZ36A1ly#!?-I3#lpO=wTF|MjK$llADVTD}!gG*JCY5mkmM+#~f%(!R;$AMW{lOiR&tG%96 zqq9V-M&ag$*|9W65+_kE$Anc8*DBITQRwHdxC1}IeUMqJjQFTnf8DKVKiTrJVMTr z`Vg7x@!EG?<;ZjY^KbOyi6so^zh-5UuQTF2XsY(vwWn5rZlKogEo6u0O;Y2_8mv@L7NOZ(G}lQfsDDz%6!*=<36 zz)qkQ_fyee;7i^kv4!=m=?|48ZSxb-k&Xg)Gp@hZZ+rr|zg)Q53SBII=#nZ|%8`;u zyAb6lwM@>HEeORW?(32+5BczjOG#wXM$eH<72F(C@dR4*KatDZFgoX`g7+92ZJ8D# zS(%QN=(-{QP5a`0iVDHplV%MAysU?!A7S`R1ItKAfrBg?}Q6qhS;@*;3gIWK4VGz2wu$ zLmKLzrbl%_T6!D=OD?3KXeI?*_EhRfMz{q%;)vgT^TNRfMSO9q;?rbCBR-8WwN1+1 zuTQ@tl%#^+t0zliW&BDP&9&MNmtgx(GB)W%U8}0F***{Aem@y{;6fmudgF4=9@4Xx zO@a;1_zmgv#Xu@eh7CTKo7{_V6LW@j6=PEXigICti>9Fa8;&5mRtFH1YEmpxaSWt5 zenbn$O@4x`ssbSjW?XEm@mj7hR~vbdu5!O;;ns^TIIK{hXdjU{7)&O-DjYgtj@Z?Z z5v+W`3@O}e`0WDId}Pkd@rz|G_Rtx_K@PVGd2PYeZ83 z=rH~J=*a*3=oH5-7EjWN2sA}n+wnATHbs`%@Z7j$Ox=9TS{oq=hqlhdK020|W<}wZ z_vL<<{F=!(b2v+ZZ2MpyKVY*zL;*iEB6@eULn)9tCaIpII%JC6XhDx6$;X8O52o|T z@o>o#)*$Tgpe)Ip{k9B0-*ZtMABY?AXQG_HScN^SIXNrjQ+tp;Qr;Xm?pLWJ^D$?5 z&~B?O6+#NnEm61c%}W=>j-gGtnFsNkI-~go#%o2nIr>Lb6h`9y3IzpcwzA}du=^qn zxkHVo3I=K~)gBjVJTb4z(BKXKI7|eFP1e}z%sG{wZU_`MKRY#tqU&`)2C~fXKs=a4^PRP;_BDNr8q9^gI zZ**D7rwD2#?m*be??iUI;VE&_m}SLN5qL6*-M_>Ug^A^KO=}mA#r^WlL1Di*-_R!8 z-PsK!`{_W0u7t#!stvto-!YM=))(ejrA3vkmmmHMS>B3)^2|+5^-J&4*rk(YKdjDY zNs6FT^dF%0{Q0FTUY-(1vvyWIWuZnYd_|qnB2(DQ&pfpzzq$LZ?yC@%b9|Q&$g2%o z6rAnOBP=@1ZoJK1dVh`e~$ zEZ@m49oMB?_eP%}%9LG(PdpvesazA-n|+P;(`bQp=_eodD!+@z1foURlpxZRaulYp z`_@3spK}$p6V_F$3d&7z>Om06B7<9vQ?xLlk5Zx4rT$5Au2K@ zfnwOtKt^8-D@#R2>L-V&iFwjzDu}s^LmkooxBHKH@hLnbWpf1z z14!5GK}LI#Q3%fGsL~8*I-|d~lc=vlB(H?o%YEM9$x9cN;g-I|MUHTL@ddh2g1n%9H1~={~m04AAIL{>BTyrXC&2l8Q1?$&bWxi)n|pSPeP#`=F6aTSLrjP;aWr zu`&?J4_<|GTivhb&KM+@u!q9EtTtEHT3wJw&mSNQ-XO$x)hdw(A469JVCxfG&r}kI z|D?V|%hw>wSw)SsutW>DD2ayo%9IK%Wj9)XFHt5$GfpJ3H20+kYoP2H&8zE;QP~#( zkGSceJPn>#b%SUcb1&%Ai*ClAqR*x*#Rwb8opQlIF8Um5iCtSOdvbaR%uBunQ4Ur4 ztZ;6r8e=Ptec^!PUrq>0+o%==KIdEh2F87OS~Z9#BoQ3>O37u9Dj938Z@gG7Si(W8 zk#JACohui_{vBrG13aCyz5%iwRL{$cxpL_7PjTENu}%zaTIR81 zQqL)A@VgqA1(iMA%^F{{30L&q0sT@76dc^zvcsb*V5efTz^QVl@DeJfNim8!M(9ox*!N19W<-eoPq9FiW z?2H4gSA@7IhF4X{oSxT5*8L%^D)H;Jku?qG8jr(K&Vn_?E=OwHq0>dwBm z)p+u2vA2>xo~nNtCev^9v{9tuCpG2>7{y(b&RnZF$VB9u`Z0<~I&g9ccm8Y|d%w6a;snqqrh6l|&N|>SE5L z`A;at0a#4jQA4dDV$0dkRse6VO2&(CZH*5US?a#t95IOgQ{H6C5q=oQd37w@+$8B` zILRyKnKTGf68M20l^+AClUhK)a?Fl_p>m#A_ehUG$#yWz{NjqcdSZ%9=K}IRME2h@ zBXV|_oO0o8VDky}*z%cSw=s%W@E7vsGd|p9BIm5RYIHRCX#p1SX7WzubT($g!5p&*hW}z;wbZwPLyVL&51>7!tHL? z_BK`Umca~L)x=ryisaCV=4A20ZX2mlnbZj%?EEzan%S@YnV1hF-b7sWi$9zVl}HOm zG+eH>g@b+sbt7YDz2|{e@r@8Ge{Jn@uUd5(1}9@uhjgVv%2y<;kg2%PSf4JOU@!TL zJGdn544SVvdzA;hDSb(s@;J6}#7|GC*jZYXU5N0BL=if=V8*nB0A2+Y64KJ3Iuldl zeQmxTHG3OEWU=r)WZ2%#yTFs$qM{s=B09Jhye=fKYN|;k@%-VPgh^j%KMYdC;XLsI0oqt1g71a!?PX2I29n#1y8^PpS#;=D3>B?G_eADDUP(^(5%$Ep+KDod9J<@Bh z?M}Gg%)g>11u=v^!@UvL>ab zsr&C<%bbMA^f(2+8PT#=X|N#t`D8hx(O}yd;zwPZT(U^%^RR21@J1Z;736=f?fPeD zb$vp`EAP8{;@4F1#`?0%5fL9W*{8!{ubrOvLzTH6wqD$Z#61x+;X!93fA9AP^apOj zPweXd`VhQkE@1xsa%8lJFE6j3j6*c_0w?fw{Qx7&HbePOSez4mnYo%nt<+hxowiw8 zCYk!~=POp$%ypR{_ONj=gTZmBn4$R0WSwA#2z~j2@>Ld3xpf*|WL` zs=|W3e_)3KUW+)WKLi^*4U&AYtdfD6X!I{3`=Lh9xrZtaBJIJ#qUc6Lth=?k7N|q4 zTiE@6`}7T8=aYYmp%q?_LXN0I{fPMaDfbJ}_bS3d;eCQ{_PpQ%ahjWuI42Ps#@IDb zqwexujP4Uxof@~+_vH{XJm|SD_h3Jgx_1l|VSP6|>)ad^o$(S*hxnZ|P9|4dgHSJa~IgjzbBSx}aRv11!PAmuyT^ZRuZ%yn4KDs9C^xOr0o&yS= zwkG(Ww-lGxzN|lXf%ZEdxz&7#^65Ho3oA#Ypgy*fX zS3_xF|7pucC6L!FN7-WM$}Z+;{mL$XdGJa`=iQO!I^w&_j}4Bf#VZ-Qw@Znp`Fb{W zdtJ0@9v1%|@wIcGrIi(nYF*MMc$)i2Gig z>tk9<&@fvq!=kiEO#sV`gKC^Kdp(t=-}~%p)cc(1C6&hN-?W^58PG)F+v9&*V!7kb zc$c0=;O}-O_p$eRKE^4IE5OZSfL9hapsCKF{Pj?7f>-wT&lL7m#0SD&J$t3cUOm(v zqh9{T^DOFu(HNGe!{zV#{&qMI<8Ci z7^7D;XCOCy^C;oGt*;j0xm}`(zJIgA?S{W`N?!M-P;8`Af2L49n1)9?Ihh;({&o1J zlg4m3&p^oUBKxcOk+_HvR9#&iA*8XTu`7@#5DZxxj4bdd{_jOZ2H!)fbRXGTd$huHvjh3*rQ6($&#&=!~{27L8*%&7ao+ss|=A7M9l zof+Hrqh`h9hF?QpRWGsw#Vo?WRTBCy-sPgcE2J}<)`L&C1dX2q*lBkr#DrMH&{4zS z@hFgwD3G5utSkCJmMXO~Up`P;!;~psuEqttk9v{czZ9+0Z?i)_s@z7YOG!&1zz!Dt zTTi*FTWd8Tb0^+e6k8=(SoPQ*eG@g4CePQnc!z~}hiVS{&^F(;4ypD-ZlVvq4x=3f zx_t4TlGvBHx8AD+gXEkE3Pgc<`a_n5W|o{O3%*$1TAc2=u+Yc>-7v{P=C~~ zOQivh1MWhTo{cYsCR+q5-@uJz@Zn~ALMRy0?W%YOrUo&=lVXK(L;I$DD5r5BJKp zE4WBp!9hrm?bkCqC6uj`tF-_+hBz#53nwKQo{B4U3QB6PsXts~9#e?6RtDg~I_26u zc2KE%OqU(o^U}QKT1OXnm+>U^e4(nK@MdvhwGPAj27{V4?je&bO~IKp5@~(np`}-J zwyS1wklu(uNs)Spm-<2~On1o}k3}oMt0+~s<;+crI$B`QH}GOQd82L~OC?<}vd(TE zAe;70FbOe+%DeLwZdD`%c57A`h6RmcJ5Hz@KU$KnMoXV?{+K;JLC0XqsA%4i@=UOG z|9Xi~`90s#uR&B0;m2knPv_iNu|OdUh*EZk>U5zK~A{!cMc!lZMDIzms)t&ty7i>fc{>#h$PqVa+mS?2Q!ytXjw0?2> zS#f<@D2nn!Ez(7PqG%`4`0JtEyPT(L-YI1*V3`(X#V$o{_4=z0j zyUW-TK)1BJz+zmX5>-haBB2Oh>IAN!Tt#8^hRd2OA%dWP8s>a|(kQU!>ccZJRQ^Vk zqLm51v`+Cgw1V*gU={IWFTHBVC{i-UyZ?oTxTug{A+t+Qv^h2c6MJe?D7J7goFI40 zs8U<|s9yjmlgRCnvc>zuAlGwNo^xT9CBE&Z0+Te`Y@Go>ANxCE!QNtpy^JtXxKIUo z$!L{I66u3Df9qOb5mzqP-8C99j^C_=$a{v$n!Pt1lQ=qx1T9{b3sS6^Fu|NS=q5ts zia1GOacYznW!)BBxu_#7bQ55OQ{X);>fk!+nhj#>J+tA4S|VqUh6jHFrxYQ5K#mSt z+bvZK^OFTBSl_}+RwAbb26`U9p*(vyGG+3mMY^SEiT%a3k>vNp1A%|!?#P!l` zt;DR(OR>OUQ^sDSVQ`-?@|YnnwU7T#^ElbW4Y=>AwrCAX%WsH-puR^75I_KYv} z24^9EdXDy>Tw!#{TE=pFjp@|bIm_hnmg!IXnP~D5Gd<{HCoJZdjVL3m-l=x!z9#Hw zp}BZ%_(GW?Jm^#Klut#7o#J%I;V4BCpSFl)hUq7id*TJt&6AK^qheDreG$<@qKaOW z?EXGoh&qWPp4RExF@^Fx3*sK#Gyf*NT6WYzvG0$9hHtPulq1g0{?+{3x|);UKq!@5 z#5fO`(g(IoPZbfeI@EI}q?#=*Nrf+bZ|72wZ{y`9!i_Xx$oxy9slqX7 z3Bi^Rn%PbRH8O1bf*7$@Le0>7F^C8IYY=bG?HKDLB_Tod?9rCY#!3Vp@isjvo}k)1 zlr;jiN8Hh9O0pJR74YBFMZG?!;%K0<~QQ5u^R2?yFEtELg_z2bK@MMalx zCFBOp>EM1*|0boT)livw(sj?!)MB}NZSDsVV%N_c7fE%AL_EZT;c9<-BOrd4#^mVz zwpzkr<(F-y%gHCO*F{?=nE-y!%M7guEU%Pg!)rS=2}f)YkfNA7B$@-E)DUlnz8~S8 zg<3hUPm2?(&$1X54aqjq+{I=Gi?f8!y+kxV(e+JAK*++B{Q#$?}#f> zJiusepag6B>@9e7&xL&4RZIu%W~i;n@LmyPjIpwe)@M11&jUM4-Z@PNJ)OGV*U+ic zP1AQ8OoEQKn7T#N_w+MMq@m%|-t#^7`>JmLp9YudD(5?M^O_^Hm0uC0g0d}x`24WW z#BPSuP|e}B(=ON~RSlhh!$nl=3sL#UWp*NxXQ$MF4;Ey>vD$(%g_dN6@fo+qT}2f9 z-`=gef@Sew;7FZ&FzEj|>__3+9MFIWy1>Eq4WvF{8uQ3HmLiL20g;t(Xogqz% z4nNa`{`BRi)iwG)WQeXll?BZmGUSENn|c}f1W}qeg1?Rc=Q)s_VnmnI0;Ws8nv_F4 zqTybWHMq`1?YDp&xNHdh)hdfYZ;$jq;Mfk+&_Ic@Y6|2pxT48$c~%3C$Cv`L?o ziM0zc*DsFQ*a@8?VYS!?f+Scr1y{8uvJ$Y^?9tQUkG>a`tjz|(-SD_8wopuI?N4&N zPzI4d-x&PI>`hEqE>Gi_qN>gQrX!b}Chf?`hCqAt(X>I2g=CAV5blZZEpH38v#Z%ZaSHBS@U}|aakHmQ0e0g{0!%q)TwK>W2?%go zC=t;R!Kv9w5;zYPImFr`;-cir@72qe1nSkLD`n`*y0J#EGF~Jt2$Yp%HGJ)@AGEpU zs5PATvtrah<_aG)lepiDaQ>uyHs<<(bHc_2!e)T|fDOG{G|N(mr7f|9G{luBeP`p|jNvhF0pT;CVsNbw45+JpL5t{$pn zxQV$1WD|$bQla0eWq$ajLFRx|0i-IwG)Ji~CvOk?{<-r<+q7&8K;Z!l)$ZLkEvIgK ztP%p&a-5Fir6J6P7X@_IBkMhh0nSFub{E_Wkp9h;wz}ZHY;^&BO}e_u+5h(pF*v`& zC^vb3>h*ddH}3?%fw#LBoz5Q^tPcUn^KDv_Js>@7)9wO^;(a70P#E~DrhkQv@Ze~{$!^v`O~9l686Xn z-TzIZZ>>jhP=tO!^Z+XE6T$X#*qbL?=i{%_}l_>vZ}aq{6^pcwzKP1BIEz=FnodQN&=E3kYpcOpPvLCqA1?W1%T%R@`OXR`)8XL zmoKITp`5-`QU|6ZBDioP9y08g_7bz%!!~B3MB)rIqbHDDfF|7s?j<69i;A2m!}Q}e zZN4)V7SY8vZP%)@+3y5oiI^G+S8RX5D?XUoOGA$6q(j%j{y9NoXt*!zN=eHhzu2MY zc&`(;MFytn2Q=WdP)d|G_Tw{RnDTVK)DyycjJgr6xT`NjYtf1^Q$>m$z5DYQHc&2b zM=^k}-7%vv!)uHpAY^D#$VisD`4A}o>U6_uK5)yxu&H2Gg!=Iv<0!_4i=>y<(VQe< zzY+UEeG7@qE|dht*VRl+Iz#i8(B#2oB`v*@Om)kY%m}6`cM~nW=N`yyG*gupb7l3s zk93Om&#oEm(+`z4ai=1cHXl}jVvPwv97Xt@sRc`0V8kwxsj8rB|1bXKgU8jk|kGXh0515#3qdr(Ke4ljn6baRu_nXn&%=NrK zqz!}tFL7sVfA6H#Kf$<&)r98T!HKXsQ9d#SfBTS`3ev zWl*@8xr^La2@5+J3loI{6O{uyjYSS-kkH3Q!A~GtvtnV+%$>z@erRWI{&{kr^~Y0A=>(bk+3eI=9TuZ+W~PmXGXh;EUSiFxUPPbOs>O(jB;Bp9 z=oeRS67&?b1MJi&JWzF)Md$@@l@D#zKV@br{28Ay2F$a4ep4p<%`h|Xrlw`%QOgsC zXr-^FE84|wvnN&GR9jQN@kXR>pgGX$#C)|37dNd7o#$Oofda$xbBPh}R*v4##pT1D zPZOW4f_IDJxq@?{Sfhndvjb`=bQD!Q!nEddtxfaz-pYx?Dfal3)cJo8xr2mU@spYD zHKK-ru#TAh-Riln=kwjUbXLapn=ua=&xdGkN?%3vulQTXA{d$GgI%B@$i5y+lbD#XRhj?x%g`WE)9 zk}0nl{J#gYJV7ybh5A0Tx5x0V(M#PslE{t=LCPzInHyh)eJn4dlDV;JLOU`E3dKn( z<((WzmYj&y+1L0d?D*<8`0jE3>bKZ?tX0vE?<+ghi#s;?e_5@P#aa9@T#^O4 ziL#|xtdeC}{OMeZ_5JyEql<`b8)oR^G@}tM@Boj4XLTp^i)8!^s?oDQE+-syk-|&Q z9GkS-K78_@Z>;ZYhBbA-(55`6+ZO3t+<%x`?RHw&S6{p?QjE~MgSr}K)Vara*A#{k zc*gXRjR)`SkU7}s?SCWPE}zzT(Ad|Iq(j>qhGT1`^IOCyS9X{9Dv~W}DDHzS%K0Zt zM2DZVVVG#gNy>R=zoRvCFu{tudoE~(vH0k`V1 z*TeDcX7tr;c8n@HL1X)&S0iPD)MyGp>i)Q2RNqlVK29xM#O%Ul<&5`BnYXo{83l>L zx=p7}Jhe^8$w%hn%IE&uj#7JkAj&JMb!TnB&AO%5HTD{>+_Hjl@EF4L+q)V}lD| z)W0q=Jic@v$a5$&cJpv}F%{gC(#kQkt2X6kL{(cnmbq4dU7blzmTww(=YxsMqRwL< zhIbyzE4>^QroTTaVIrN_ChHWBaWN<7JvrDh1*I5OoncO{Kdp2Eh3-~7Ad22(l(1XHM)E_VshOiI*HSPoLY0YNn%8E6G$>ttsdZYjYRq6?p4;jDzcXAtf$)gWW#fPfnn!Y3r!D2L&Lf*qAvH5b!#?{ zgAwG=DUt7ELFG{3rGJ&*M<4ZS01?vAAll(QQpZHlt@*;FzpjU8mPgPInDXwc>W zCkZZ>67F$EDXlqT<%r`jC)5=&(>t4Mw=(*)kePc3!xdJyWV;@Qsfllb^qi?+R>?J~ zcxyoa;Iu=A}5ROF*IU5Te5d_aGUbH4>+fI2yojz zv>fX$cevxNeRkM`VQqDuTHO>lwA((1bbS0`5@*m3iT?Oy8>$Byv^oHP*!2yyePiHv z>>No^0{}Y$@C5+Bbw8tT4!~RWd_(2i8u&dmmsKCBm#9 zUQPWtvQ0oN2m(jnqQs<97e&vm;*cQ1%lggDh0AVdhaFX(P^}MzZwa+t@tpiwtC}&A z{b|HJ!GXnpWLp|{zBsBuq1a_s!EdjeCRi?~)^Mne$W-2FS^Ua?-^ zxtp-tC!ZpBB#e@nc{3?i}_NoQ#{D9ol|i~4TU%GL49vygK>J+P!9Hl zM;3sQz#B)5$Uw#_)0103{*Ugb!>=EK(8xkmcCqPV2LH$CDj(YGKf16*NDiFtMxiqy zVSvb&w~N8N`uB$O&C$Ha4ketov|VhuLV!gsQ75!Ni;^caB1xSSh+G2b&Zhj)oo0P>syz{`T^m)7i ze|)y+7l{8ZZn;)aly##BI{$o;jNePVZ|IK1Aa)r_6pi~eWkt*+Xg2SkfJjIA(rGlm zQ9VO;s@sAy!T9 zRS&hh`8-Su(d{Bk>!#Dz@p!(JB$zxoVB|IaYCEd+#W9XcS{+D1_%uelQJp{nE(|&0wI|Ii}WSk7osDJ*$iz zWWA{DnK#~E%I`mJ+yLDnzuIN2XGghj=$NYbX3dOZ5Vg<6M5j*mRZ~ZCo75=jMH9?UunV*Hjn`8PB?Rou)LrdE=TMokOMv#Fg5mu`ZD`=p!t>n5R`f-dp;FG~GyTw6` za@@z-Hw>J^NW*{D&2>k~TM@%}Cr9NDgqPwa~=Ci=bsD}!lUcmlgn_(c9XjXr z$yL9g|NAmDn(0aeTrHS`ILChAU~TvNB2JtPFjkeP8dm?Uug$3z3FDob!U{QaZfes4(E z!+5|=w{32RMWn;gCOvlTONPq~0?sd#7_ZrFabOnANnf2S;5_#pMlmS=ICw|bY5OYg zPX17dkhT@(cY?D>NpC38a9VUbD}EDw$B^!f~P7?@7(ug%56MVMSk4N)2&NdLzBWWguCKY1?)wH~tMlzpf)Cy|Q+y%yX#h zx0ST4dD${WYQG;GbnX!!cgSIUXxs?D!6|H>42-%}ZeP0j=|5B8m=Vs?_vseWZBD+M zK9d#qob57M*3Zso6C{$&v$RqfO&%3&Krf89k@dUOr&jlI;Xh|UbxcuZKhU2Ayme<$ zWoRGKi+6WP3gF#68&G|eF~t+zBH180DP#Ox{d(fi8o%&A1mTx^H64G${CN=F+K&$V zeEzw3Z zrfFno=xu*dAbT^puDdPw360-u>+zSpVD10bhS*}tenB)HV+P))|Haiehez^6?Z!4Y zm~3owV|!ye8{6i_-b|d0jfw4KW81cEZuZXa`|fl9xPR1iSD*8~=hS(stEa0Ap0ncD?)yCbhkd0iXcfY3Pfd?|fjK!NAYR_{3Oexu}Ib|4NQeBmWmDq{Cq z7}$;gdqQMg10lkf@vdq!u!{X{YtR?pNGoDK{EY9-W(_{5t~>jw_pu~E)O|OL=&Opa zw+$qYe6DKTixYS^?wKxe$HlmL5BIP84QIv+)VI#=thk@p472$9fjB4(i^m(rU;^p4-)?A3oP_mRB^2T}^Kb`fXM_9b-B!-B z(S{xg3Hj({p!=j?2P8+*Eu3cD_xU1%gD7r>xd7h|7Z*TZulO7F{;lJWXC8Vo{93th z8zIp5pS^7<8df%v&qKLsfcg1c$Fn%hekWYDFb8s61k6<_Ee>8;ysGx0`UbeQD5yS) z_gP2eE8_Hi*%4FmycTf;K{FKx>XsF19G7!s=?#~MtWLUQMB+E2!N7M-=fFyVQ^`~g zZ1q%57iM)+1G6s*v!+)vy_4rtB_z&9`(FOa7UT29!G+Gu`-P7212~;s=W*p}0u|5kmMnOp4547>sbKXHktJ2@PryWRLle*63BRM{ffIAq^q1iV%LnI36}V50oI}A(erS=`ir62Ui;~din8s zlL|EeT$a;voSQOcN2xAAmDcVCOTcS`Wwy^$jyt`u?~+Qu6XU@7ufg*yQ`Ky^shldw zGAR?kusd}2HwHf6r37BzrSi86ozgxqF3fUTY~=cA_`A(|C^*l6T{McGS-_6|dT&w1 zuQV{7;|>x6tKVGcNbiCj80mOzO2Um%&l1%8O{x&^ij(3!vMsCu9$6{= zHyA|zZ9Gfxe8JZA<&I$NpvK(~29Be68B!&8JgvrJ9zVvab<(~ysGq{i8XAw2m0hmA{;b z)}?uwzpRSwQ?)T;D;sWDF*RfBPW7OBN^44o&?OMZjp^fkKxA^#WP{!X)!0J6r3ZPd z@yAa?WgF^>K_TGWyk|4NM+a0I3USZ1E<=2j=mbpA?u8k!v1G2=Ecqz^yIPMsDI>8s zI{jUOs}}`!LOD4jKM%!XfYlk70}o4#lRbot%yF@IqXov({M5B*wBXT|NCke;y#it~ zQDWbB5wg1vp@ww;8uuC-cREH#j-o5;%cQb9K~x0b5;y!krCU@K0hTIgI$C8GGy+~% zAJ$B$vbhRNdiKt9Y4i|*|CB-ZTNeoVJR7K*YMls)S9vFV!@Lt^f{?bcZH|ZlzYnc??Ph08+ zja(eyxPbGWXDAzY+8_fx+|wvv@xjE@-rX}IF>GhsY&w5fwU-;D$GJ2|j|iu4(K?x{ zo{H2Gj6HTJAY#n^8`DMpJ7pnrt7yh#LT~r{(bAlMeA8AX(|mV>g8jM8%1-0$B3<-U zM%Us5{J3AsZHMXAl_qk3Llx>(Jh3q2VaWG??>GdeRyk`e1C|+O675P3EY-t~B_m@N z`?(MM^AK@;TG}DFzRKSW69~TE_!OM`#02n?FCly=uc61!1$ZSt^*ftRX}JyUp&ihW2V|I z=z&igd>&$g_Wy(1i)-sSxZ+N^QKMCXi4b<` zqV58bo(ykQEsvMM=D_D@l^<&~!l7#|Rwx0A#CF_v+*0_mKX_2|<+r>mb+#?0q)52o7tn^$_W;8$3eY&B+CI1a)W}I9OX^dUlA*4P%#fuHT_& z+td_S+&x#7^GXJuGe_ZND!7&IL1vvhFuwkF7$rk-BYe~2^TFbTZ(VcWvM==ISJy^6 z!@Bn41nm4-kZ`c@(tbROG{_D#h-Mbb*uS{zN6Ws`+nTHNJ2DnjQZ;WY4e3C$u+}AQyTL!lvey!Ey*j~xA0ciMMi->r-$Lp(u3j5 z|3wjr+l^OnYv!Vnp+_dGHTuRp`95)BE2u!Lh0a55^>{icquowt+u(i5&YKW}d60VIa6yJR>f z5~yP`zFY^|qHitVBUe`bB4QAAJl)K6lm0m^F(>1#biQFedXESV(cwF5-fB&+LH$PX zO{Z89?-ijZQ!*;#)!6Gd@4vLdE)!e6YtmM>6mVb9~1 zy5q$T$=HluJX!@i#}dgmkBRIPyk_b6N7(7n}K%U;P0XeEo((VeXt|RhjCr|GGKWZD~rBO z+UabwamP*4FL;}P`siyh3b|f&@E4~b z2NU~H?vZZ(=cwEmlAXVH2SbIOOy2lK0;dm?;GOerJv$Z;|4pPU&N>C%J^ODvD)U1F z-$?yCemoVs_|Ab$YwuCHC-71RGJHc3-)bwj|jrtzD`m?JwG~8Kg2E0@O&(F!u z2qZYPINV-gc&vu&-1mru>4SYws#6Q_;z!&&!eiu+JG0GsTggGcT_OMld z{k54`3>G%J7->s33Kx%&4&TFR>oa;BM;^Z?6^oT_ij2bZA63|s{OE;rL2#mr4_wdX zpm}t0tdTt8Z=7RbLI+Ed*n6?r6O~GD052+!aTb-S+=EZG)hx2CL{v;Nmc^mZue!#- zXGcoc6Sw1<92UKWvJ_ieqqPGd(*4nz2Z{`>{*C4pC!LfIO~Wy#KpU zUg+gjT!NGa6g)mT>O}H>5SbZc5TsWXvp8$jYiEu3JB0>#g(;-5ka>Uh=D{u^y_7ic z2VX_Wxp>if!@xDrLki;p1?fh2tL#>zK%xGcA|YYjfc$y_9$@niaSFx{Y=E9b&Y*8KvBmF#YL%5mX8$Z0=%^fBV9l&` zlE@`p>aS9Zkkb-bS_Ntv?Rw88U5Xv|<&jbn;kUUp6Imi0@e%j84e%Nc%S7lzB@oKg zGJfK1Tpu7{C`-rwb3v&3j)&J456%FR^)jLu!n%H9FYqaAy`fMBcstkx>F*S z^(%>tXMMjO0i)7?@(I8+zKA&fhwp<~*d@ywq#@-ufmukP%tI4~WO6mDq!1SYkU^a# zQ{}zV*z)B5_xZ=N@Jo+aBEe)x{ zZ&<$lVp=a%&B4eFJEzKX(D>E+Bzve&%^4AmZWLI6l#p)Zh%wuH7o22yg*CyWV*{s_%U1Q`k zbxxV6nV#Dnouhu+_DL2W>60;2aG5@~mMvu2j+z%)RB{}r>RK$e0WaP)i(GA$Pv6|g zQoNR{kwMzCavq4d<25d6swxhX9gP9+%l*hUGbs5($X7wI~%MP;~d{So`#aISSQ=EOYULu#4LJ$MkTDI1qXwc|Sd zF*XWfuA?y$yS#=&(;tH0X$B5iR`ke9f)*5!odut+`Y@KIOq9a2gnXZDBdsZ$e8u&1 zyZHGBni5uy$x5el1W7jt5w8$1RmlTeA|qFDF94W}1qa<&m{s(v=Hwu)QvfYi#^|MV z!h+pDLtMm3(0UtrIn{PG9%9_!Q>%y#2FGbF4VAKBfN{!DflEjK0eRw$VI9(*>a0*bQlT1G z#~A3BO0j2_^E1r9PY$xp72kQ7;=}E7Y6=cl{LHe04c|30O3N$H{ZxIw=S<+mApibA z@$nW74UM2HdUoi;2mcx6q2+aRQZ318muLNvx`|QF1jOj|ToOqgJO7KBl(LI(?gd2Z z%K30r_Q{kmnL)G%Y_#lDo3ygN&CsVPS(Ky)Hj;dH%e+(k!34o+A<)T(ThHrXAHgr- zM!Bm^KsU8iS;<0N@BQXx_Tg*G$_ruSf;1e+IPAc}-ixRg$y&p|H&`yrrZDb+$F!{h zl*(L&vpl4yGwW>;3Jd!rgXZJ0@&%B)*t~)1u-D9BQvCX)txr3Bf+Tmi-d89nPU&&_ zWfpR68Ftx1CGD3Wm5<2#Tc+Tkq2%BQGcCozv5IIt(HPE0urt5zlK!isOiU$>zwgR% z4cFx$^5xLtQEGTQwvlhDzV}l~^BS+~xcE?b)gSJvxWFIyr@6mwcijbY%0RCB&>A+j zo4!L>Y;2}c20Ii!2iuHC=Rx$QTbtoIJzk*6nfK2QMa66)%AzJx+kuv3vRtL@c`5gN z;g?x|`vf$2mEr52+R3ykiTF#+ry73b{>-Mem9lqeVJ{QGp1^9r+w+uyWvTYtt$D38 zjD|HKzZu>lwT0_ z;ztIdpNhwPyv^p;jTBwUJoQ7PrYLOs9~(tReBN`ds-5&&<^rsG1-&E`cDcODDEd>; zT_pZ!9a^uIN(V}juY1OSc8c$w{IVk>mZuCqX7->yBegg0lFmL{g+m&%y0E(!^>r*n z6W2U%EyE*H$D5ET3rY|K90Ey;5JIi9d>`W(B7&}1o;7o8J^ z`g$wmaM`0+^Nk+8Th%zAe@WdCVH;1|J~6Mek~Y&o#*jC6@`N*$kK<4h%2k3RQwZ679S$O z%&jYPSftuk48KZj<_es2=gu65yym8HvypIMF71C4)rGgtme92nYL&OWzoMY@1a8Pu zd)Co$rR_!Oa!~pJPl{1m+ug1gG3L9a1Vgjcv&f@>F@t=2w;^;G3z%sz)l zYt%C?>~4zCHmNtV4u*2&15L(C(gC^{XDBAN1<-ofWT%z8dgKS$Ku^tQl{(aN8nFEf zwL1<9%Dlw@$57(NAmYXiI58PQ0}6R?#L>55V5$;s^Q+MAlC&20NM z8Hy1JGVH@C2_26jcKE74zsTN+EuMZ`wl5xLOZSiP695niEUO4;u5L42mHTmJ_(CC78y(Eb9^%A zMRR-)SA?qkGM7ba{M*2c@7EHH1gZiux3v3VoJ!o2;)00fBt<^JGk4y_ap?QhQs3wS z2hPKL_s~Z4IicQ0mYrnao#+@%!d;lu!uNI>i(cRvs^B6;EFPLLuHt>LVJHsze{}7? z_YOlmZRh#T$$663!v42%s_ViV-IF#|P&V1#*yglSiATfJk(hS^k48(pZ@AD^1!W%j za?aeZY;#oWh!kFTY)Ojz*{!#i8kYZ)3Y90ba28n139=!Ft2>^Qll*90EcP}+W12+v z!TirA>EO9VbQ=0rmBMv$)P}MR{u#VApvYa-8sIk>vQVA4P~BVOy_bqYM^faKd@Ghg zlX=v;EFkkpx_IsdT5hZHmKy{YHKfKH_%vGN-*Xik))Ip51AH7c_m2W_B|RXnvmN+} zPrq8tS1}*Hzt5<4w^ESphs1)XaXDD{g^6sfg(?*wW&Z6Hel7Y5gz^xEz1Z*+UQFc4M(SG@mVtkr7j@h{k-q6g zuNVHjVBrL$jOL^_i8=60Z2V$X{uUj^k%Ih&#?CXcLF#(0dX$Pj#w5Rxj0oanL2e4> zM44j^;{3i{<#|Je=E63s&sh8Q5%D*0Q%sZlppubILuPV7m183am@66p_p0-J*Px&0 zV4heaw+6@FB*G=LOlp8FyNp*ch%^VzNX&C>2M~gf7kG0`qNTQVC-E z$@$W&43xD%>hL89$&rx`2D|3j1X+P?I?o!X=YSdIE|PFQ4{Xapt?0Rx+U z1sI&GwwK7PS#($b55&0L;{P^TMRvgYs1mz6R4!n1)EY~XLx|!gZBiApzb{wW1Jl_6 zS+SEeFWrWUKb?MiOU1~s7ssIZ2o9MV&LmFEizt7CWEd7t0^87;=n{fX;Rzm}41mnN z(u~ER@U<|RN*s&#Wz!uftJyq>HYZDUY9?s}Gmb`mkPK8?YHX%hJTV5a)ZSfB~$JKHI91P-?9#MEW}#evquXK8xl zum2ie9iYivnt8`cfbx9%;VLAmG5Z~7)Gyg!81J|W4pssj#H3^%th6Ev zevT7?Xw@i~Zy?b<2eodvs2PbzS?+JL8{!$b<=+Jg4pzS=2sslz&7IfVQ{1jwZmFb! z8gJO`K|FUdAiNdc>>2lkwc`8tHM^V?mWsNMJEn@3K;32!iFd*M={%Q=NQE*EhDT$yz)Kcb*g(+PdaR9IhXN*7>UrpA=2O z5;m~n&}DWGSaA}ZO}~I8P*@k6a~}tMA#Ci$bm4C{#K*AF z47)u>TAC1uZ!lb2-|Q1(ue?grTrTlc-D@$?j94w^QaS>!FKUJsL8rlgvGG=W)mmkW zt80DjyiDKxs(Q(7@?2+zx*kxQ(cIwiHFBFdlcqyGr7O)|t*RemhuczbI-Ij!l!2|bvu+0mk1lKT^33kttws_;{RqT@EpQTl8dzRm+Pf| zMc9NBr|GCM>|kC`MB<<}x1O{4n6g06)M192)l`(oq||YBM#F;Sg}a0$_%*efw|KS<^=M<3Do(>dS*J^L5KF6r7~J%B61cUfYXsMdeVLj(JPd+_fR z_*yC2(!eHB)VqC?f4JG?g-(6*P~QsSCkvmDBJ1$UBz(Uwi0Q`K?8<>(Zi?p-y|F(c z!M-`CyHRrmHS{kjD0dt^a_Fy`m^=VW?#h$=U1Y^J-O>ar0!|eWhaMr3C^d|)C^-Gt z2yfb?z1RP6!=|?m?;9fJ(l#I+KoA3at}Xr4_WO5gBnMuuS%AO}pWyuURVB5gbc5kW z&b#D%Y5JQfNiG#$&Rb;8zl8FCNk&^Mc8rdhNOEh-r$^*QkBcCeZJi+*sZbu{Y^iRn z!h`f-=rJbx)j(<%iDI^2tb!)^y0T>GeF)MyFlo_te!CT{ZlV|Tkp>^#O~N~`o0wTD zYa&@Oy2t2_Q5)t3x)3p5Ft?)hWw)@2F6=`59a#fhf>hG44gJuU9G9%MW7^-^p_>1` zr2KMJWMT39mrn8yb#aOpdV+aKmhq)HSWE>Sc9^&Ow?b)hGMPsH)XSsbZ+9t5_TraW zQ9FWL@0I|CR^i6dwKYEk8>v9ijMYz8tAFq@J?`6r`Av}*-aZ~a0eSwoU7@}#fA`N{ z)D3#}%3=!p>F*!LoE7h-nuK-}0CX@VQiJ zdMVaO`-yJTh5J-owB!yVGxS7v>Mdp<{3}Ev-$wOx$SU$2)b+$E9Tp`@73Z3>ytwt- zQ$=k_ZNyS*O8aX9&H6u zIAqz>F&o)UG^OYEmcr#14hpe>P2E5)q?({wR2%!uicI-~QE`I>Jdn}44R^~Hteu0! zWCla)_sJ?#^NjVJL8}81o;oB2kU#AB^wYT3XnRBLZ&BuNNpW18`qoEK>n1@=GnGNJ zm6OuLbB&qaD;aF8^9JPk9w462gr3PUznmlKuT$w}*qbqxQag2bUq{hfSKg>m9a4N>o3EML!T~F6-&O zJO>;+68-PX4x5w5AhbFcwMvbdJ_63pPt1on9j$LrN zD?r_SMx0{ReoD_66s~Y={~4banQ`41`3pyhDE80lb28u7?(95&WTI-5t@@o$vQpSFd1x2lQiW@a{gPvv)zv*(5}!o>-I|y^;}bZ7 zpcf;YY$X{boD3`^30$etXong90*%;i8XwyEm|^xq+@`8tIoSurwa#XZ6(4|{jI2@T zGMnSnri{myWI!TbjP8uyxJ6|pYwH~DuR!Y@;xD$a1MyT41SIC##Oz0gt(v`Z(Nnha zXk%BmaR-00F8sdLkS#iF*iNK-4Ugh%dmFBLNqZZmnz*n-kO?nP3}21;EH3RAlG-A5 zys``wyI!G@L%sTOdgM^?(N8?_#pDil^#oj>76b%fxmorjs>bfvG* zv|Rwnv^sa7=XE~HEC*gBl1|CyNPT1_LKRORal(1zpn0aMNxFGh`IbZkaYiB9Nx0qu zVb*hF-V~yGxMe5JsP-n$gFh9M7*8cDlav2aYY&yXW}8teVdcCbmqT_G0-$ax`45-w z@m4C1?y;c`s6}xwbye|dhHhJVAK(5Kaq)A9;7@U(;)!C0PLD87O96MA`T=@)MP_(Q z6L)i+&CfRAWXl#7N8gf36qT+D_~)Q(4J(2;3Hq^P2fAr!x9?43wX1!_*X*#vQZ{TAW{iL*kyAXWNHpzSY!a)Go?NtZB*ztpn7TZ z_JRb@O;^k&PvLZ2ZK!P(_su4qadicNO|kgk;rhI&K(5jhvq|gZN?wtrCqB*Pk&Jm1 z9oIFvrL2$WIc=9)SUKNm_yOk@CRSUwS6tKuQ@kZUOGhst38ocuEEo#$wbW#xIsSxL#0q zd48jvM&H-M*35^DHJ8oBjg6^CurO)H;J#q(%Ks;0sRPT>{*$GFW$4U7EX7Xch1~;q zord~0xhyFu<*G(+@pY>{SH7H~Ay1_L)g+$(YEtTdH7NmHllBSlyreczH*Zno6D+l> zz=tkN2rG=gGi2M!utZFKaZ*1`O$lFwln#e&%_L7$cc>++_r2ok70S`J!}`>13VQgC z@+dsZ0?)I9lN(ZH3^smZ!PDa9=Psn1^-fU^Du*+>&7WP#muhtMi&nB8a53Q*>~p{>q*Zv z?f_Hk!=q+xE<1x>`D$VSeX!^A*z6iJq5X}|tj*<`VOe~xL6=Np z^|^Rv2WKO_p4=un--5_$#JlKu7jENehe!q2%fZ_84?Vx-n!lB=_0vN&FO^GYA?pGf zfgh(&_BmXJd#fj#*(rw)M?Nb_McJLD4JGTmL>);D^tKlIJ>`7*Pp5B_Z;qRG{pOh| zgxf$5!2AZYCb0K1L;$`AMYpw3ei2$mVD=p=bw=^9d7Wx_zl-!RX#)YmeinDZtai_ zc>W9jlW`4e_rd*#u+Pu!Huo&2DbIrP`Xs|&oA!~Ky7PDX zo?Niteq=F3-9jB8n!NGSX zof`dx2R!sE^$L)RyZ-FcIgv(byNbIFiAL$1iUJcsjY#*y5rSb<-(k0gS;TIzyCLEi zd1eM+c+-xya{Yu$%h|wqH56_#Tfo&o2>SyNR<@D#ofA1Y+kMrz% zS#W|&X-i1s^lwb?8u=-7PB^%vYmdTExVS!pFEYQEQ6K#}>H=GojmUIDL}$8t4Wd4y z9)%){e6cz`@>JTXitp4rrQ&iFSU}sox(kvNOc-6!lNIJ`Dh-ZJv6Q$0+Pd0A^9{@E zkR4xVVRw9VmgPN_01j!(;ks$#Nn%@@1?c9s_%t@pIURcF6YF0DA*S&7^$f4oPi)^a zl=p1jL(9(k6kU(K@oaurPgEWL5r~_G-mxxUmuu)!%P+mO725@ryo#y2Pj5c$uMwt) zP(_Cr6+7I=@E41Dj+N`|8U*}qX5iZlY;Duh^>?Ct!wVvGt?qkU+@w}Esy=KLhbdOJ zb)vj`=-}Il)TjbsU)n$voP_j27=)_>KByZo%h8TUtMpEf3JEtN^$(5P|EKqn_LjZ{ zezdD&U0W~vao*3<)6$!d8}p50SIs_XY~+QA*=TNCIm+PRGN;Zb0%f(v0zay)HhXe9 zq9^Y-5CbdlPM$C`?$BPXBnm}fQJr%RzKP^sCRV`;QvKNUP^z1|FfY*PU1M5s+)L~A zH&C@c+4Bo%#&DZ$_Df<;2okef{V$}FlN+IoaAK(zty8SBh}n4;+VxnMPo0{<(@+ohgDu1eQ1@A#OoDRl3*qes;v***22_^k0!QxemVLD~o!1 zW{0VlJNyN5$;SAaQXa;F>?>)ryl&E4l4~<`>M`sOa+Vw$wP{zu%U*4!k0u?j{iYs; zbd?*S0(Ts#cBm&x~wy{Vl$J?DG5TpPcfDGCZ-=Q2dMkU@)IF z3izd)9y>k7Orun=S9o&>-3<9=zQTR7%+bx;)pAsNX;~2h~zbFjw0XCG(ZrBm-Y{z48w17>L5%kFCukBsLuN0 zz5so(ADy|bgYRvAow@RZ@4N%=NPB;?D7L130oTX8x1NS-oh&vr{I>y$;jL}KUemLA zcV5$EL=0Qgi$lIi3|pCZw_C~4&(#0nx<)atCk=;vIcPpJxCY+~p4zdm71#%UBkc)F zhm7qDM%Yz)IfCMzX|g!@Xf!5Hvt*{uvi@``QaS$%wY4}dI(Fr!X=`AjX_~ygux;S~ z;v}YImqq*gc-Kyy7td*IxGw~Ikwb_k%T)-BegmW5v;IsdNk+0Bi-memWB$k?%06x) z6LZcq5DVo6d>qMP1Xaw!VFbwwag$GIPy~-gAz0u>8q1MGO`vLoAW-9zrwdBMaPaVD z{$CVK5?VkBmc))tBc#L*cx4@gGmE&JLy7A?@m9HDC>04L{74^({Gc+Z8BsKVj5sYU z#wnEG0D|tI`UrJEB?;X(-76TwB7l4HT&>gshNCW(N2L63F^u+fLJY*Iq3G1QwTiIE zA1vviWas5Ww2ZI}v2PN)VJaHf@2qn?X^Tzx6#lscbzdnSvH#`7#-gP-n0#L}DM}aC~;GgqjF_MA9*WhmW>On%z5o#je?`1GeYK?B7&v< z$`EoT!OorFs}L*TltD@rjuHLVI{F8Z#mw__x~FkW^1kgc;O#K2&{fCoDU+(Iv4B`p zKemKj+c^sPZkbx>LHFy@i0OFEWwE@*&n^`Wmp?>{P-Xmf3&o|eru#?f%q3$F+@4g8 zW{T5NJ=ZfM^W@XwhF=Azj}ewq@+i+xcx{0 zo(~Hrq$o-BB9W$*DWJJTMMJnix?qn`p=Lw7%n$k?w>1`guca_7M|No|KEXIB5ucAN zcfADuM=}B?L2PsT!3DJaZ3{5s{#xZ?$l^)#xAx;$*Tb9c#axRny7yvjhr21rK#(x7 zdXnwMW!nxJ=@}!;wMik6!MsPiKSIwtiVt!Mmd!SK8=kArZ4s&*<^p7{Bl58k7tUyg98ig9G~Tp9Kuona9=TLw z(TQWN&BYu&GV-UVHJNW>U#LBpmNL#KQCb5-gEPpt^_7o}r80M*;|5cBX|P^1+Vw}3 z9NVw!ktnyQoC5vNI<$cru3i1rX8sVj2SkL%XfD%i?Rn6w;&(Z?t#TnO@<=VQ2nLI2 zxey~Ncm@l4C{ki1jA-K25$5IdE_TKg9TAOZwx|LZH#lycRip)s%?o?^-=lJll3(?dMvN+qmEqDyfnyLs$4keUP6J6%m^Xj7j^sNR{_YnK!b6@D((Tw#WclMMmbiJn@ z3%9T72#>N$@&9Sge^~$a;D`1*sB_18HvG_l?#?$g9jp>)SWYp9r?>5 z(tVQ$VGcGFg;PUJI(8{a#1N8_G5HL|TSv8~1na6-f$ZX0msO(-&;F7W5ElQSZ<7nC z5Ncr9bf7V2!j+e5^x=ZawCbnNS5P0qX;mr4DOmR%?+#pX>D5z~AlVM~DS}`wgTio7 zM!?Uo^NyrIdcfT`!PPOw{?NuAOR;U^|0W%ptRmOno}gG}eW*=CNrim5XM(hg#-ebj zbh4*iZAqx_9W5tibAM7oj)2LN@B}GaonU*B26sRyAf+8?3WRf zL?0dx37kel2-=EG7c%;gV4m>KB^O$a0mu7j3$=xvISZ}u22QkWL{%~A z+JlQ@XE;pG^jR`ANyAM9szmk}3oMW-!WTTB#@5!Tg^R*r8G;vTxxHmj8K7hUghf)} z6Nu$zb%x?L1y;=IVKobg<@%~_D5|6X(Nw~ynh#jPshU$xg)J1-+Q=CEzv%`{0mjAA zS}-;0*>|M!8t}^eoMpwRS=deuVZNvx*6yx9;(h8A5%5yWOr5e&RSSa+m7yjzq83oT zYfoOpkHqo1?AK~0{3{r2FREusf{ z{1s$_V<<%+m;zBIb3ggBII^hi&lenZ)QHcNY4mVYmX@nAZq1LC^y+-_yzg2J@foLt zkYW*V`2?oN18Nqph9L~%`}&pgJ$f`3a$}2ZA{J8BD$bs?L1#9wwr~R#i)8p)1WlYx z^+>O&Cwuhj&1;VuWqo6*+WGAe^AYW1V;&Otx?xoCbxUK*?%QHC52?|(TEz8kuA3S- z@lxJn75e^EWZw&IYbg)5Iw^fG&?9Ouy7R5pm0de`WORn6jO)??kY_V zl|D)@6(T>o=0enX;siv@~7s(&Z0JuNsTIo}t#Pa6W0q0&YtJr5&}2@N~B z#VJag0wLqoiwUYUR?bG3K@)L?ogQ`p@Da@xfG|~IqJ2IT9h7j}KDTH}KIiU-N`RcX z@^@}TuAY9tcG#z$o|CQz^qox5N&jKyzi+BU<}c>25C(G55HlK4) zQih*$S!pR;VF$kx<3v1P?S#~7#URo~);Mq>W1(YPkcY+rI0OKNT#L^S zg*=@>Cu-6kctd+)W2ANs&02?!BdEwDP+zLWp}L)%A!-7GwfqDf%rXxhhN-r%Xxzfi zimyvh1Iu^CHrVYwV4LANPU%g?xlOHo^1 zQK2TE0tVD_5~DVbj!_P|g)RRH`Y8Twc}0|)#bq@!lshi#nyevY!wIo~#j*@)%wPW? zo?ZXQl5@Ow1+`C3Tld=sK$I(p(J$KvOeurOpSBB+7XmYL^Kbwm>Tjxi(wFuDi;=S^ zMPo8q$mJj~>;SA~(+YOs3G9Mk%PZspH)0c1%PVg`n2*laGpF#3y9bH#>tu~jLPpRjsAxLu!UBwy_^${ZVEi5!f4cqw0nCIsm;>X*!K8HEO4H@f+`>~!{BWRA zD)(RQ>mLUhj&O{Ul#{ShDPXPtG#|l*RS(F_od<#8Vws`Jb>JfPZXO*wZDbtNc23r? zxADP^@ZwMLqHZ2(r5R8D^lIWe=<_uNW3j+VV;hY30^<|G`1$qPvFQEA&|WZUa=YlX zic4m0GUKMcrz8M6?}fXEKFrz;H8pg@SIeYaP(}0w?DZMg91=Jbx-OYt^PGtAEN%;( z{(oNz#l8o60pbb}f|LR-+piin8ujtUmD0<@VX@{}xm1D66$W=evz?{E=BM0gPNA3jd z11vc5;XGX*F<;x>{WEhLo~Z>(pVmJ@%}%z0S@A^5z;Q<+Bh(|NrghxKs*}P{|1aFl zV8{8uENdQM#~ms(V{gT8euDEaSL3b=TSr=TZU7_kp+4%vme)lFL;j^CjeOZx4RfT^ zpcbdvFI3(l;5X_Wc#TMMUu8m4zb_ahgqC!b)LWNiw8Lw~H%wlJf)iKvHQ0Y-C1O+x zRO6IK*7M|?_EVT(wVV-)TO0N6MX~9XA^Gxk4($dv2^V^xI=K4V8Pwp-5mzE;1D#pySux~ z;1&q(?(XgqT$3~G{hsf=zU!Pn#dLS|n(7|9x~kTC?jO4EnaCj$3(*qU}P0IA5@R(qw6sPLkQ34=T1}ESfMji#M;n zY%AlH)P8*idJKOI`h*xUEk6c*y*Z#kpT8n#(02zK^qJ%iM0;znFMpFZ$z7m&(6*|b z8XXXjMSHE{shhHbe5F%3Z}5oq)&PUnW;fpIbZrmz*5LUCh^UQi*paA>RUPCzZ@}vo z_|sogFFTH zmuo+n1^Y98I^4hduB5JPUO;of&zUkF&;wIOnMOnkoM6`wt>=fz&{8c3656*`=FpzAWXK+1UcNq_46vdU2eb&Mhx5GUvT(CXK6DgLK0aAV8W3&&in-$w5X8SqvK*vyR zSV7v=nXC6UrUg+eQ6fWPA^=QL4G!`W~ znj+{S4v-w&x0!_)@v8HVVRB$__4FY^ixC5c6<}vAtJOd?ICDDx$yqLK?C&HMlvBVK z&e%$H_oF!UeDYIsSlc$VC5L3myFw;F_K|dSBiT_s% zK8+DNt{9&U9a8BnTg4C#U(~+;uDc4U!vl7)~t8pUy&izAn9^RlkTa+kshm(XtLtyPkl=!yhiV#5Nea< zTOXVU0>t)jA^fRqHVwofwgE$P2^NIultapMK4ENue9aqJmF1$dRJ=2mkeflbtgO>G{#a&#T z@|-Rdv1Pt(DYYd6P`~6zBnVQ1>-vC{;GHcWO7Pcue#Oz~|EmP=_--OY>tN!rht>9d z^_IqAkGD?@dd~eOT^&vrN4K?!fxt663C1%lrK{!FrjSD!$`6Jgb_o2OznkF=TMVd~ z@>N+U+aHt^=g-=e(Y2SNeNca|i(N+$a#rBHrMPlYZ#4;2Z6q%Q{?ySSyw<*6aeb!S zu~0#_Zd)WgWoQ=^khOrcL$F(8Xer*1A9Z?HxLDZ7$VdJ7l6JmSS5W4{rtzjr9O7NL z(|gC385GaBgL=%s4xQT6dghjidv>_3cf$8$ZT{a&Lb%t;*E15{Y!B3MUFTCO2qO3k zIpLYrW3+v3<*X`!l3trQV_NB7L)eiw5QEG># zwTWRaARo8rrou=hCoAh*7qZ|{!s=YQ&3*4SU+|CB32UqicPqrI4ki6pAaKi@vmcAc?Wcmi0z;2h;4KKV{YF%utGMnmP;eH{UsU5Tjyu%~3NwbyK`wsQGv|^B+Rokw{D=D9li;l|%filtb*V1=S7q8F27^}a|uz%II8x#h=5eno2so}ZI z3Weyu^!dl3^86TVsSHQu7rKv<_)JZrB2<*er^~0+TJjU{Xd(z!ET1S`U<>9yCla?dP#N}{NwFP@Sz6+LcaU8`xWDd!8ylnPK)+hC6SF85<6HIM3?HeTmD>_r{0w7 zB)9xk)>$3#At2jHLD6lJ`(l|JMju{ZXJwMRRFn58 zi_&e-L7ZH|;jiw?s4iUj1LGUAs1PRw1w}JAZ70ciIKOR6KNp^x)(FR}X&K zZdeduMNH09$6!#DN#dRGCwPi;Ee)K2kKVth6t>7^&{ z4IfkYYvRA#!s24eW6Zk}xC2f`Yra6^qOnvF$%}~7l)LU&sGT|*6!^@#gb#Vy$&LWh z$IzMr+DrK4rUAY#a^4rK{9Nmti(*aoyCJMYF8}Dk)rhx2dhks=kRH4_@n1bSHq34( zwM)p?4a+y9J#`+NUpIXcRQ+LiN%0R>!^}ZbKYYjKeYC? z^`;*2;f5NV=WRP2_zln<1RMm+Cb6H9yI#fN!anriSa>_ekAT+p=UI=6nSmg}Nl+vw zV_wTtXEy#JZxR??W6j)^FK3QdjUrZV2|%c-qX#*ODPYSr&#lwB+R96}IWtpaZ)S!A&nr8L`!KkPOO9qO{wQj8NvyT?7gk7`4jh zVpNIqT{8l6_}BVW(8%JYw)M3@HsjBVh@JQ; zDhdD1Ibh6j6 zOe_|wnJdm2zkdzWdISCz85NVg+D>1pM#N;)N+IL&7}64?+?*&|AVZ?19BEXa(La@A zGAxiZ^iIg4)9S)q(BZ0H>}b9QmY{lTrvRSN97N$eGZVo@7a%+NPW#0##Faq#)d0 zP()1yjH4e>A+5H|o@9=hK71;ZP$?6LL2W{fi`+J_HN*^hAMLg&(vSQhM$2xEhcT=m zt+savuRL-n4KA7=FEd6nV~#MS3wJm5oaejw`EIH>&lh=mi}E-(Qs}QP*xeNMac&Fr z%hAH8{a@bGTO1QQU=U7d(1*R#g7!#vbMVn>IvU{|0IoxsysiB}pN22ToW*%tkjM7u zcbTNq_B4Jzi2*(h?9=ud5OL1urqdkr4D?xr7$RWEsXpAr-Jfnh>X9U9>nU)3m07P?kwv zbyV_)fsem}PLX7^tQ1~sufPW6QiK(ig@v#T^~(C9UN5jJ#E!uPv#X3hEV^22_Bmy? zSsbI_fQJK#Ed5fNdPM$f+3o~ugvh(ZXmpLu8IU8gjeBr?d3j_6R$%)40MAIur-B*2 z@+%?Y7qJnT!U~C)aM=B2KEoXCBW2Wb*Wo=<6~W)cxbZXjvwN*7P3Tdh#OQ7Zfaa#{ zZ4GB(7rM&fO!yNGXD#BM7RQRRST|;T#3$^%(zwupQbZ1s{+ldazbY|Nx9-bOEarx4 z>J2u^qX*5H+4cEoZTVY_7}+aj6OA!i`OXqv zu!A$41M7Qoo%o}$nRYo$m$`PeK=O`4A1l<3F&<|qxv!vz!a}zVaOAn*%lXJ%2FpB}Uw%)Xgz>-JwT2QCyw>tHd0!L-~3u8ymBqDY*U{<~J zaLl{|m#M|2=h$9$7D6Pu_(t#Hffhgu?lT98O_Th9_$37!oFqndX4!yzJORDeasf5x ztQl>ZTSSu`A-#1=!G(}=MJ!7Mykl)^K=X7BIK3p&vavgy4hYQfbtDL@164dTo2=5X z2VYq^Fv$Ai%jc?Gd+`a=6OFq_sx=vmGJhNKN@&W`WvDYQfPxf6>8G=^SB~V<2MT) z4$=T>2-D4%)6K}_+hfEY95;^Gft{O_!H8bBEsmVk0H6*k1w&j!0?1SD_j!p;yIU z(qV69l4~-(lqcffBA@d4G3YKjZ`OlmyIjPo&|jJ%j9K*t)U@J~l#?4lQF+rp=Ht?D zq-SvJRL)SlbY@fHY1=EI0r`{rja zX{U6l-T_1NJo)y#ejIb^a=}pPc&k&498<5aiD%Z&7(H*m4bNYzxm)m6-ckdV))_md-RWX6=c z{>Kx#Y@k$vJBZy#-**#$=eGjZQ0cc4d`Z@Qn2>PK(pr`s)C8rd(>D+6n^Zy-Ur%ph zdZAv2R3`O+3@rHE7a`LUsD41jsbcF&v1V7tUuGz}J~WFKoUtRCFf@&(&ej{|@aj^Z zU+a?q7aaSftwd*Cj7U}0lz1+A&9$O7lI2_O(>yr8x?sNqdANkI38S zE3oJ@iq*{Tn&6k{B!I!nBES}l<~VNqUM{_0La9)u+I&^aIl5uS+xcY@ORl4-h;#YI94aQj-t!7mf3p&kU zaH^#cMe`V>O13=W#<3A(_Z(Vn?XRx*$iRTaFXe<-ORCD1Ub zI+c+bIY5fv4#B$OMky%jkbX~raJmTzCw-$mS6w4avgv#~RHZEjk6Dh0n#YKRW*GAb zQ}}zlIZpEYg3x!U?gBsY?>=04xU;ic{h2xAKQ_`QY2 z34+PLBBoz zzrVfA^5;#buS}R2*w$g_0~fM01+6KEX{cEFuC5py2}V*oPQob|k^20q@RgV302w|R zKPKg1>q9v)0Hke1ZgU9tj6RJ#9cKrD?*#KYmD^0y49O{6mw~oVDAPIiuk=( zf+dR9i($Ccc&753uF*oascyI=+-HUghY7Dpi^x2{@43ZV`c>ItIM{sGwN{Nac3UW$ z5+3Tx3Y;lYD+{;@8V%?9AaTdxX)u7YM6Fm!Q-ULsN)y1JeqtczG0^;7{4yoGvfhMbU< zNP>c(O_S}hX-`9%>HVZ6B6QZZ-bs*t7#Wf*=Dj9lRk|=Z~A$RaBvnlkc1$WK$S8keAYMh;z9}9df;GT_J zOUa3)&$bv|7BIa5p9-t0jX~b-p4sHafWYLr|GpE3`ZxbU#(~Sx(XEi9BZ$X+Gd2?M z?)M9aW2qaC6-&oa)`vom%#>xVyAE|_W}fA*G@`8g12i=TF17Fr$+%#u8o^OwY0grD zR!%@KNArJQj)drd|2l!e1SFE}6Oxq!hMia|cnmGNry+6iE({9z=v5=(n^UaVCRWOF z*9O+>Cjm&g()Uud+PbCA_9!H*Z9pM+IM>vQ3VDLqLKKN;yv8uKY&LcmzRz1jeN%sw z$|<>tt@LwF@@4$Cz`D@)-Tv@v1XMB5RR)Yb%NOGkcq}t)V*NB`j~ZC|nM?p|@@R%3 z-(wi1qUq^)gJ11$b!;SHH;g!-u;_>{Gm$Sj(+*Sk&r%14Q2wks+eqnb{cvKXb98s3 zpCud%FsdeemO(?DhD)n?gYAoK*9?Q};N5{0m0Yv6&d3_iGQu+2+Hh{8dAM%y}}PL zz5?{~u|5b19tKqE^~LfQOsrw8R=b=n<_r<0l)6Fza2)vQ*9VlUUdp)F4pK@@G>Ux; z0zb#g!nYW@iBgC$lp}-@eC8hEM@AEisTMgSGz0=@cE}_@6YKzeRCEz!>3x6K>f*UGT)etFuG{;s@h&D62=D&g}(_< zhEqm71@nNtQ!)+>hNPB@s9gQlL+aOayLi!DmU1dK+Tt=Lp4nu(P~d?THh3y?*=2!m zM62dDALZ>hGJ`s1>7W|&8Ny_KwgiZq?7%8fEHv*|rrsnh8qjnwzc9>!gq3UZYyNTq zZ^4n+oY=*9Oyb*1eh0#lHqO*#7)^_PV>BoH!)O^)2_u8iQFOf>)@kc;zKh$p%;qK< zUjUz;9RF0&8a73WGkr9Zbf{s%=u>gxPAW2ES5)@T(Yi0Ag(N!)OE(Ljt}~b~xbg!&g`Ipn54}ah z@H#yO5l#Q|JWv_R;y7Ok-Y^yCiILG!Tj&IQfx`U63+}3xLKys~XCf-Wv8leGEIkbs z3Pqyl23F_ERx+5u2qbqbb|Y7_|&KW@Yj;WOTnX^j}tT)_A4py7c8K z$XbEZKY?OHuFB~eG)v%5GB3eO3PF94;(#8*dY@+6W&+^Fib3MuV75B^};_p*irejMop0g7JkYRuFDQb z9h3`W<04OuJ~`uez(~JNjlHK|(kV?zFPa=(b&YN zn5jeyCKY4PrHXn}_}=%so-*Y?toVw=l9Cvh-9p>v6=IqN@*~lSF;;#xxNF{Rw}3a~ z*J!Frgt3ZkM;}#7=uo2O$QJQxEhLlQE_M`>*1((#u#whCmIxUK#;yPk=4t}aq$=&- zN!6*A>Y=WN4}5ZUfwVw!ig=E0u{C4~l$>mwrJ0v}l4~7}N>5MyMG2htOSEepYYC&K zs8PM%oXqB850M3mRs(NMD*}0|esePis^H}$4!i9^K)uWIpLu(^ZC)RC)mErA^nGNb ziFqhz)Z>DEN~ri-h4ha;Q7GFZ;~AKYk43|SkTe78!J7Z+!5*@B1`~=uIz$~OJet_k z!b6)>Ku(Ny@{2c;h!_L)dcX!!^5>sL3?z<1`{a*YQlGio;FEa?wZs@e)?NuKirGvh z8{L;g*P84$W?iuMRjf2?Aqs58s+0c5mb&U1Y0$B5Tg0MGOj*z>=z0TSAZrrn(a_jp z)#G2H(db4~eF_KGC@LsKR;n%kmW12g3CS)sG6z(_o+igkC6K zRKtI{!NIWkVJ}W0#taJe{W2{YPKbq8#6(?fl?xU533>|9vR0r|flj@($d7Hi*sLCT zs!f7dN&E9}fo%{_X+xRyVT3|blCHEz9#;f0N?A6u*<7u60w)<<8KOXA0U8NzF-29A zY>iFJE9SRKJEyhUn0K1@d^kOR_DSdiL)JGVzIL*T_0AcNO{!(uLaemT)}U<8(KhX} z76*qjvlH{{HV=K=Mp_w?z}apLe`-hOfoaYsDkIRc)+IJ*S?kxwvX)a&?#OhqR0r1Y z1`Vr4w$}LUgtEbj{DOpuM2e9At|^g5)B~LAG1LmE3j#7y_Grq$^Js-M#g0eq=m)i2 zttpDkT1wmzJf?|G(SGVd;dB97;<_7Ex?F{H*4dK+3QWyg>`-!zEI3qb><)D7fM2ML zxgs$c`?Ra@Ot?T!`#$aN6{~KCAe>2Kia`e~S_;H(bu!FZ0~O++4;2w$bQ-p%T(!(dKtUq;`2^fMYhTbiSyH-+>0;m3eBRN zqV+@|C;mgChENa`p}F>S{#3y6X!~FQ?8&pmXT4ehBC%%l&-we(_-RU`oMvU<h5*5H|(>3~L7_-LV-BNLlz{cT(5^;@&#$grF$SPeO zQ|VdKN(CKLmkccJ0?M|9wc6G4nXB|ISh11#5u+EaE@hlrWJBF4UW4zHMTSko?`CuYl|9 zayfd<6ePGDojn?U$0A6IU?_{x#r&cCWdwfgz$=@~O6ewl<_iZlJ z1^DHN6}onx2Wj{Wodt|uJjaPXVgbz3QM|v?+rDgrgf_~mhojW8q32Qua%o%*)=*8A zacfP%>pg0?k80W|IQmc+irhoAB<{9m?oAFk&9}cm9`k~c6uz+Pu(PJ5^W+)N`Lu-_ znK^1F6|U44;YP3-SbvIJBG4Md4rmQx^b)iN z@yk`fkzt4ZP7F%M{ABlmrNMcJ@j?fn$Zac5JH5wXaYUf^%5FC^55J&olWbOUysM+b zF5aRDYVzVgO)j(Re5f=zwZ zH(DbXL?HeS8o6{7U7H^4JNZ0dKhEnPV*e8{py!ob99iSlh7-Y35Mo)>af;_AN01%M zqH=I*5+TM4CLBfF=#M@7T{MIM)uTBKs#&Y6q>g6+^q8z8#!{{G)r~FK6fLihHm&Q3 zDv8W+a1aZxEhEh|MAM5;a=6~kR{`%LGYNjnMFuyyCM=R1eI{WSF3+GwvI`<%!*6GI zro3abtR2E@jvj4PY|+TmoTm?RG{%6&wuSSTK4Vj{GBne%J(#W}p-<^_mSy`kO~jPWhW#yA0*t1~=Za+{adkt-zWJ zDi~H?tCcV*qw^=AOzUKdno0snTe{u6@O(5L7ao7JJ zH?N@@F~jscUOKD*(YMe^v8XQzHLK_7`JLZ~RUDcN|8Eg-E;Jn@C@n=zl=XkY3?e_m z4B|tLUAl#>U8V~g1Br?W+1}v!eh?#h%T9~STmPJozI-*$3#BPdy6u>CV6%XTrB@xS zKjN=D=hkwaqVr_1TrpRqTZ0_COgGC+Nb#P<7jOiRDso%&CY_L0@aU6K@Jqd$?mU`( zuzeWp^v}MV>ZEuADPvEsxZKVg7yIGNx<_A44jQB3@m@X_qJvtxlnUQglz~k@LNqE$ ze?y>hpm1RM7*srI}!ms13 zw+7o~J^X@Sf0|^9?{NmH#azINp^5E)C_{E%4|<7q4?w(mP8@<$h#Z8RHIXU#UqJBn z3r%FX2Wsubf)oTn(#qaXdF7!@7 z-oelx2_7Bmws(C*`KsH7+#Ia#L?a|y^OC7 z>jBdeP2YA)&Td9)?M|1^w^4IB2U#=@!;PXvA4N{g(1isbtl>-~zB))dNSiTe&(w?Q zs{3}1$F2Ht25{2cN<1qvw5I5LJ4jPQUcz3MjT6#7Cj`)*j^XuaVLOOAh??0^{XF~# z`S<3oWtb6ff_b4|ItWlcC_<5#ddgx#ZD3)HsvxMxR}moJ3%#O${bRI-E{T`~rU{=6McbBH~7M~8`pZTlg(m7vX{2w1a=f9UcD&XX9aUrROCDIVp(Izstn7A z$=5`YqXSpuA<@M$p_MB^u)u0{_!Gpamqf}%;IaZS>SORgjCx6mciBZnPpI;6k?r#B za{AwD+EVQ64to}lf>~k}We*DTc6vUzYVsbYAmBVU85r$tF9vk5F)!)x}G+tOsM!h zCReh?2*SR@5Frq)1>jQPKDw;?5K@Vq6|M>s_6lQi0TaLLgicvn!$T;nFe%B7JCK+M z5#@ZpvAU(ppRpEFIe0ElhhZq@T55I77Z{S9mX zLiG1F_9N#6rh}k^Ak-!HYjo?G?czfP3@<=bzWb{C3gb!dm~B^osm0q_Vea+V<2=k$ zMZ`g>v<A7{AfmnC6x;B#~)Kvh#gb+FD0A&8-ff#x7{d!RbjAah*- zT^c_@<~Bfec0lIxxASj6ReeC_RvTlH`LOt!cfFlAdwcF(Hx(iHKN1+IbDN%XJLa?i z9tWP|XtsT~eIwrOTT)zm1}ZoiTK#IWwgW2k9KQTkz7-raKl^#*QVAoFc3iLu7p`A5 zhI>LORa)e`<22d0oqQpiPfJvvs6s?}R;&^GYu;*H7WmRJKYFhs+bauf`!x^FNWmw! zD*Fmqf>clr&qd#@N-YFLQ3g}7luZ2AS(*K_(KVCkynT`eN)4yX0ioPs*Adgt7UjJK z3K{Vj;kX^eyV7azKh$}}Tcvn~3U4mFl(x6jvfMkpUFO^^l^c!21~K4v4K+5p^O6Cf zszJLevBF!ly7EO<>&`f8&f+Y~4Alb6Pov7B_K?{A*csPN1M&}Ky)c#faH5E@Xr+MMTz#YAsdtXmj3Z{KazlMpR({n)xCldQE9U{X+SrnEog}*>~lujBG4`v)Q3O`FzZ>ytbS$b49URJbEj2(zY3(Dy3T# z6!pX&66SM)hW1Y~lLIk?&52a%Cw^2)udXT#CuHhF&!V)_qO{bM-u<}Vb+X{}gkC!O z0l1~KtaHNT#PQZFhp2J5rDf1ocH;OGXloj72`BrUusCs?D?16l{C<6Y3+lWhOGwP$ zD?Ka~t!_Ahf;f831@ z;R?y?UwQ5wb)4HM6=tpw(Hjy}%;V`b6)v|o`lWF0lTubi2k$p;THAQ&8WfkWo17md zin)1Hw$j2K4_=ZjhfV2=#hX6@($qQlrp+Ek@H$e7{^G&SARok61|=mSFk6(xKt_?(VQP2iygq+K2TYdN6ybHf zdfst~p}=EA;{Otj#7Uv0#v+#cOc4P!)(x&*Ut~f0Ig478&K&v8+?tx2#bBIN7Go?u zT2pN$VfOn_g<8HbZu)l`JyB_C_iHwvF0Ee}F_gtJVa``82swOg?t%s-``JY;VUA|S z9`-AbC;;TT0C3NJczqc-tQ0z0+y~c9fk+TVpV5br!dN9oQsz=X4n8?9aV1p@$&BJ2 z(FZ>Ybd(iz)cl{LfBrq1D~3ct&c5!KkP^i-bN1XTZcqN3fp!c_U0*A8r;24U zWh6V&@AOJy9A{@k_mZ(v88oQuH_eb%bXv)gW8wFbx#%<`cE@oaK6aEK%kCy;(&$RO zWEFPYTJ6t5eqpG2E0e-4FL#PPnbk!rL7CacFmKA_>vwydY9hBGAAh;Ev#mEWwZq+Gtr)y>u?cxM5Nv-(Gpi;IipBQRt}+Ypl( z^b~rxHHKzqp=z*YQaZn~P^&ADdTr@R3lMhdQN{Rr>yMWdq8*5#=9enCd+0c%rjdy# z5;A+7CY6>#Y0`0%-p$A7mm)LrZ+PBDktrw=`hX4Q5%F zNND77>M%36o48IW>~RV^ry3fWgO&UJ0(MqaG9iZt{H}5Qq$>u4-zDg{Ts0%-FgNBD zc3M?3Cx^%Qu5mv-K8B7TX%dX4ROZ^QbNs~QzV}g9HvejoFCcH}aa4qeIVFjPamILn zV#c^hlk}#)xJV5yJfVZ@Kul(HDmC1t8&Nq%k|t7>rZPwkOOz&3k!Ev}W&tpMxqDvo z1Hx3ABZpqgN~`dykXiEEeBV-jfuj?gKGn~>nDT-n^Cz8-P zeE1C{205~d)U?AnI70dGJ!9GS2ZPGQq@~}?77omQ8!)C&HYxE^tGiYPy?I=`@uS<+ z;Z7XV9}tNrf43%Utp+Hh22gCRXI$6(#Y)KTVAGY;sdm}joi$I1`vB1A=z;+BDo!8( z{Ze+M?6__M0}cDpi!*LHuI$nWfPUx$Kp)QAGS70h5p25Ef{_CVlvx@;DDQ7K)mIvb zSe%kA)AF(GNQ!VgJ1@Rp>w+{;;tjulLX*K{Tu8;EDtCFE-D|X$?#i=bIeVpWUTwKE zP{M!q{)EPpyhch=mj31g1~)NkOR>FJ72*vgA`@ZD{aHoR;je$K&NBc#s2_W?l%z^% z1`GNNCe6weNtMD15Lu)m{L1t5V(Aarpg64hSF#`%>IN4PDYATTj9#mK+q!KmJ+H1{ z5aJxb++T#fp8AEsw|8AuLN=%Nd{GDX?<$QyNv^u)K z6P4Th!G?NgQOdzLJPr*cO%>~}HYAQH!=h*@3$suk@xfH?kg+$52f^G8B0(_smS0jJ znEM}W5X`-KPznTdSCjz3-09gqVD7mRAecLl;{)ctCI10)Pa*h#xeJzlz}(LiK49+N zd>=4(fY%4i-6!`0=B|M&k?vr%DDS6S+mcdtQLC>@7 zpnIvSzC`v?G{BuHw3JU*&RtmY%IH_tfP~iI0A5p1W&vA!#D386n>wSB63~Fy%_TTAAJr8@i-P-Rez}e( zH{Wh#Z;Sj~b66$VroQ{-0oz2oztFpo+*K5B1_lJ2$97lNEJF3p^M0SmQK>0VF(pol z|9x9VvVvp=@3Ui26I}Dzsp)6&m-p)lixHrOfn{YjYYU(0ryqtktgX~^r|);RX1T8m z$^r*C#Mc`(-)fq$85^DMQ0jYuE?2m+{W(z-oemctsCn7LtuLWg#+z?guzaFduU9DA{p37@;@@x@d|cy3UqMgUj{^;Jy9O% zwe^k0j@z02ZEIla)UJ$!!Od)|11PIog^Y&M|_3@gBu z#r|&K1nGDa0crmv0UkVnqN7$!2p6aQo$y z&PJSSNBU({j30aC2kZOq!^&FfS;^+bP~c}MIQhU(74dl50fR+0H@J3#xx-=Kt&Yix zn}??fYy%_WZjDFRx0>?5LHTQayO#*+ZNDw zIi&jSq5w9uOoK#KE31O7ah#&Dq0>)m7f~m|0(!$)T#Q!dHCv-5{K@}iyWipp+d#;)2G&5RqFXlRMC3xVvXLI!su{xjH-GcR)B4r$ znMPB;y9ib;LahU`@Yx*|w>_jBH4P7UcOG_!m5CR;flT}m44s@w7#y8^J$E>iSyH7T zM^B#woRtFUr*LleC*8b5YIK;G4nNBT_!8-?keCjK?PY{CWPg4d&r(qWu7`q5d^LjQ zJaAStCNgDGOeYVo^I(V}eR9iG)@2jMtW6@%o$fkpAoCTxIoijWa%C1Q!WVVe$ON8X zs_;z3-GarRhV;9uz{hF2t3+zPVZONiV_^TQfhZ`?_Q~x(RcBauYm9TiTz`OWP;mni zlFijW&2abYAS_@-sjVyY#OEd0?4vH?@WhyO?XE^nyYO2<=4O~b;6_=VQeLL*%l> zjq;q3YcKz41gP*3yqZ39LAkG3K6nlVtMRnxz4WxYH@u}eBx}y;2mzgrt=#j!+W`4U z(4V@I69}sdbx3UZ2kfKBuen8`_$j3cx*XM-%v)q5Uqq)#;U?hY^lZ=M!Z>Sp8%&yY znL~AcoeK)uBBB#A(-G4&H;mTfr(0yED^Ssq>vnwK7V4pXe)HDnx5Uq8^vK`jQR|L* zi~29bz8HmxPeFB(@Y2VFER|5x@}03@Hm%)58WAC5Bhn#-+NW`W?QJ8wNv;%XC+P z3PdA~f~81utEKwA26PC0nwdC=yQR0DC+lqBHCBudfk3QXPc)(O* z7?KLvk&@JsE;N7{HzTNmGf^;=QG=aRFfo3*1^=h;&cddW6lmk(R?0Nr$ovA^X8dCg zG9tR&padyIZ>g%sxJj$03Tzy2cmnT9qsVJfXxPrV~POx7e_i+SPN5MS1UwIR~jah7#J zrQgR#KkdNHYWCx^Dq+107e`J7fJhv`6e8l!@ZHU_*J)KN9Vxz-P=E(cz$i}iN z0-hu`eN2I$SYg*$VQYB!0zbRMkCVbql7jkIQi27}$T*@lni7m3Uultz>cJ^#4eLds zuACiv3luJRxGYiKhCY2|n8)|{J5CVw>(T_vkP^b2g@(^Qzvl#z+d70BDQymCJ`4JQ zfvIjLJ3KlfMKY-gF>S+d1u1P~dj)svmO5rt{rp(?b70Q7#qhuX%`(W5em_ytUdyiM z!=R4@_CZgAfZ?Tyk`r-Kd-uBJ5thsJ9t}_Dg(|ZJSB4+w1_)3jH7QP(`9RCjd_zJ(Dv91I?Gp{b7!#zCh zhTCTX9s-Z~ACEO{#%mtB_|PgIf{FE$;7M9a-JIA2$k$Q23XW3Ufj5JjDcGC|EM){@ zD%1qsR@T0-nC;$0Sga}5$e3xy%j4s>!FZ*k!0IR{y^?Toalr`R9ox5e6$5Ul-=1tZ z2#Nm|6@FdfTcWOQ5N+(;hZHU4O5*G&HHOug(ZuxEHeJ786|8bEsdbyFJ2^6 zBv->+mYghPq<6ye?>wdz=|pW`s`?C!gLdqeBcB;(_>)XgIVTbQ=>N?w-wZ1#$%r%- z{siXFZw>es4V09H)s>3KO$fPP*%96b`<^OxFv{9mJ2D;mR$opj`jt2Dm%r71EaajH zSnns*f_ue$aVT_%WnHE3HmdDNe+=$ofv*fq1g2)V8Mp`Vs7ok*{a5`>&!46I{{%>v z2%fI~g{$;J8;Tm1FZot_1Vd$u>IVraSGL?(gxAX5cV=Ob)+TOuXu79E2%Y_oa&VzvnBD%T{Cclmg z)ar{TMw9SCge_M5At#NM*k?o&Pnu8Ink+IY%!-_AU8^mD+-Eov2{n#A>1O6Dm7bE; zERwtZToVE;S7keMq{)L^UFj(46)xb<-dw zA#$p!sF2Y3NgK|TA}-mPo%TzBeW81J7JZ4 zQUaf_c1-ylnV41Xob_45M1fgAoRb_>Uo z#F45hHI~m;BPF{Yuuh6)x%@2Narem)ahMt700(19v&Ft|VS=Lm#>j3NHrd{^Gz4&U zh{)MM+=sayu(Mcq)*Gw_t^y}T(bhT>fS3_|UK@uYbg&4oGjIN=7F3Vu$||01xHX}N z!9WhTvBD+%*(G_U=df^33vjikgdQa2JB&&q=|=$O2sw;8dH}1oZbKy>mn>{s5|_|? zV)_N`TlcdFa2bUfq6o366p`FhGmhP`OIr&t=5(H1w|e>q2r>QyN*i`i;9s^DMuP7` z9TjU!cM&k%4W+3zAYh28E@$|8fmIua#-CqpPT*y`WTiDhv`pXt`A>&^`|_c3*f3c1 z)6@I*7X=Pe2e7Y%I?`%V8{7%&KX+O)=lK!7uev;B5IQ}I4=}~j5TZUeP!)|rav$4S zTcS`gyG1PwZSP_fsphRh!#pON?HqTyD7(x=lY~et>r}Zr2tu-Sa_!BB`AXFD&mm7C z>w7)BkEiBBcZJ$_PU0z)*%>Wg^VaFE<6y2^Vem(7evM&#%pCsZ*9T-{oN3jP7S2P| zmgp>Ivdaj!*?}Ap2C%EBXRfu*RUH@?0%zvx`}8fY8&g9ch%~yz!DeqiN#5~&Dyi<# zBZ5p2aL*u`3p_vXi5K+ztj-kC=;`6?`2eEFK=a?O4@@@3aaL75uG)uu!+-km@QA_z z9`VSrE8&D74vwL0yDtPQNK{Wqps&i-!c^BgYk2UHOzcSepJZacwxJW1gvL4$mMkFK zf>R;X0WJQi3H6!n)QyLBMGf>OUg7utEhC zE^wc&FhBi<`jkubdtEL#9Vt*nl~d*U%9H>)T=Jd?rX68)dkhOdVxg^lt%Md7F+$v6 zcSCFIyE0g~h#Uc{*j-P19Qnrkc$}NVf*Ofm`{POFuOEef*!)H`b&^twMQ!Qyk3I9^ z_;wo9(XWh-P8OY|4RdL;sXsfW?UoQs@W(R~D@-7et6fZLKkW`ghqT*T1Bc;otz{3; z%96Ptq+9&S#qENVR`V))*DxZrP4=mx%FBPm@FZ3h(U8=qC@ovGwV58?P%ByA7^YwK zu29JGcC-ph2fSt;Z0uZxI3c_nKEDT+C)CZl`WP?<#2_{OAFkd4tc@<}8pU0LyA}$x zxVu}6OA9UTTHK+yYjJlk4yAZ-cXtaKT!X_+-|zqKf1jK4OvcXaoMg_N%ch3>??BCR6_Cq)6ZA6SBupJ~~Ag7JQr57uinHmpjeQ=S3ID{>c@x+s zO5difdlM>xcXdZ&?Hc1Sr*DG;X=5WG);pYqRqT;ZK$b`&RKx!;rt|c5zw>apOzdKE zr(!mbz?LxMnB~`A9?@E}lHZVHXHn>Wi(ABq_xb6C2^J8aZORIdDP*R5ZVhzpP>tcN zrLZY@Z`~#>?$`4HXEC?dXFN-Iga>ctbJ_0#Bu`@=ziN5ihe~o!Fv(e(?^4CHcd!6h zP8jhJFYYZ+Y&$nkC6_|P@Amnye}KyXV0pV%SrU_aIGGB~vijzI-`VN$>Gf`J`hczT z{wj*?_4wj?GVb+mnkd)L)8oc~4cmai_j1qAD*I?CwLAB|lj0%BezKp6#i!?KV@aCo z10ZnCvw9~?Zn4d8KaBPn7c1z#XZ=tFp=#)OVPPb0OW`@<9XqAwhcbfx{c@8u6fd0d z22t&O)@D^`DpusqBY_S0XImSnEDhm4QTXSou|2HDyEN{Bu))jX)`Qv1%gcN7%G@zl z`JPt!70^+mY_oa6LWzvU+;;U5nXlH6=ina0%7 z0QZF;TLuA#j&x=CIN^Ky!G=T(j)-))9KBYHsf6LZy%YYN3XNc;4=J;Mjf5y2Qn{rk(@UIuiQf;)Q?>*NoF3x ztn@!&TfJ;tE&U(_lXDNxc|7jS@AW55kJGe0)VgVX{aebAI?HFT%uxD3ueA6t^;xFc zl7&Oa&t2zc7a}8T0!LzDVJ!>GGHfm$!vX>v5^l*yuL#+vU)B4Y@&U_9-)`LLS}dk( z4oDDu#Y|9O;h8!6{Lwha0YnoNxVo%D)XnnK4qNJD-Cc;w`=L=qisKe$CqsK0^_ojp z25&}QURRLNm)HLiN^+(dOOQ2Jd^_DTmie*mGzMWGWwykgRs8DRtgYtVtlKKm_t=9# z_XX}!Xj8<>*h@f24gfhf3}7i7f+nR1Hs~bN`M@B*Z*?)4*>FivVaqO4uyg(a8mjW) z`32m6^FA{jH)Jy(PKQ%S3C%!ngPKd2;@y{9D+vM{_o%UHUe%Feoytfbxe*rSaaZ~f zs6@4psF+AwOS_>dyfo(01eFyL(l72dEnVhPh^?? zcsZ84tr7jw+p-MTx{kI=YgqYbwS86mzZas)U*|p(nEX*mRc!JUNMF;hdqE>`QF3ll z7MK^%r{&Jhe(w9=Upjs+rp{(ykj;6#QF%&W^MPyfOSX@e$ma2HWne{4s>>IP+=?8c z*5AEu^Ve6^M@bIz*PPWy_^n5tBwDU$dbjQE6@v7-w?4TQf-Tiv6MMgv1+@B6_ly?A z9UvZ-X8LU%Bc6DB>FKF)Y*+gFl}q0&k51`e%@}e$YjgwzEY6+;K+?|REymzC`?e!x-7~yYj*IJe_qM#>+9%Z>4_E}?+Zv%tSyV(pug00&rerAlm0<3e=Ac` zzi!J}lJ{Da%#TlGbiDngH)@t^_Jp?2Y7h)(uRIAC;)K>em^%H-jTZJVYRjHRRQxBR{F{r& z%63#)smJgZD$v;(yoDdtmgn>iSczt@N2ADN9yigQK9}`UvX2X?Ax>2P$OG?X<^y9S z=UPXp#!@Z-bBvx1e1Sh+cMW$3ky5iu9vEH zj^8G^A5i__OHm2rdY(C9ARP-tFvl@W9vyvSiHkR(G07b|-YU{~b_`%nQa~{XY z!VeN1;PWHxJlb19t}^@eo@CKgxFd&pu$8IW!sv(M?l%{GqPjqTv^qj*z;2g?Ol#*b zeawC0>N18qLgEMMTKh9$Y>Pss34mhw#nou;{f{Zc}m;3)bxP)mD$Y`#m1nln9zm6omRJ~c23yc$1Ry=`%Vu$ zP2al{om`FOC>-B#;!FC3$K8{wwo8&0D$w!CG}5KHUOvHJpbz9|G5hq}Zam3%#mm6G zYPKBXmMK*b+~tayO<{*$?M3UJ!?$&$n#x`s%nOjiAc}jqFts$bCYFt70=IUD=%#Z^cdsSP?G1`uG9j*J0Q?KK>$-IFDm`UeJY;bkLVaRakki|&c?A%Oi6brG zo7^hSnznpc6@T4-Ijy*$&L(1eK27l$7uJ6uVavO7^@jYYotj;u_GxM7e_~=z;@32E zzAvskT$&$9jG)Bte*;PefXDA4C+|fE88-e9efo<|kN$d_lf<=hT`M<1WnRjsAtB+H zc1ke2iH4_B>tSEBHs26UNGNJ#`o^JH+!nbkZ(AUcjsKjpsWeN)V4=yEe9~aq@N-Jo z$=q+ur|ae&8KssO%wu3dk=p@6?~nUTDbY~1E-VVRKi-?;BXKa0^d^HW#1JM^!%B`4 zg5K$Cn7glvq&~|p%0j5jQKhYm-t;5Y#uGS<1=KQEP-0^zf4SL=K>dC0Q4|7GrFkd* z4ebdz%>|l2ElK2uWi~jI5cgQ}OWYw^Bgoe#gMu5xOn2rfK(O{$~hO7aq3Xp2%74~DiHE@^4dDwf$08$HD2ka}5?^710pPb~;{ z51<{*X6fB{4w?e0tEPTgp}Hi+Fq*5raZwg1Ua&LCrt?Hzpjh^(JuqI7O-x<6JYKNI zuxN=)+^LVYR3Q@KqlOjguM)TPU89@*YT^R)4@}#-(JaiK69khCgo2A3Xm{u`=Ly3& z$dhpdsOp--zBu(d4o-dHB`T59%Ua96j)x+m0tH*x&N9aMU#?o=MkvgI7!xnMu-orP zVhp}^74CeUkj=;NvI{Pw{hEG*Bk@t-1KWO-<0-z;ZW%BfWgr<(@mI~!&#?eo8X1avQbCaAp?q`x zHD~r-bKsZMGiJGxh6w?|(RgsBx(lOSWPg|k$QGyjQx9{ugU5-DnCqvLkG*>Qq#ugj zIpWb#ZI}75O^1`ob798HqJgE>V1}tUlT&k^&6Hi_3^I4kZ>-a260_zijJ~Rv>(|Ug zh(wfkpdCO=E$*z-Hxe_pDm+3}tYd3HpF|_9fM^E~rsj_yvXAg`q21xHiWjh^1XT>o z)S0pW+-LFfArq3Ab6;V#ui|x9Q!?C%R`O<@^_G|hTj_wN>V;cd@=ZL#vkQ#@j=mJm zCJj9)4YSfgu(ldif==a+Q$XPWE;`9k`ghZ)wo=hgRxd>n|4&F3>ZTE?ujAIB%DnzE*|n5ZcwNM23I zHz1DH$mk14d^^=Og2p7Jelrdf*4i%=G~3U%nS^~Dee6q2tC=K#)b6t;r#((4w|wRL z^%mKc(k9(e|0nV(Q5vg!q(+XHS^nqZ5Gwl9QBqR+8y>38#J~37zfJU{xTyS0n7Q(+ zHB$Jds)CAI-a)l} z`Y#gLZ6qKpT@l8>YUWWBOe2m^4JWzlUIvCGU@D;IAfnlo zMiz>?mzGKj*gw#5UZ)iGve<*^d{da2d{ujTK%W?;F94^pEy1%~4KABw?5*iIlvUr$g~P?mp|L7K<0KS@0LZtRAD zA@c5X!mt8zC3G{p*IphqIZ?{{O<~6H;gDqVJx$PwR+nRX|K|@|yC1ibzIF|3QIq9e zR}8m%cSX-4o)LC9s{%^U2LgPr{YfgWqXy5(cSDb!d*-~6$1JlA_OkXQ$^80@FE5I*v>hYTZtNC`h?pM z{jGsiusQ4Fhd##%vZhO!N?!uzXNwoyI)7o@3rq;sTY?i|wx0&{@A3<9*BWkE!>G zt%%ssB~zAx=r2e=*!zmZ44IitXwDpMQ}c^FzVNt7ei0m5b3lEsZc2NZoZZWV|7fhi zPL$FD;A{LlsyY;1N&4}VHMyBx4dRX=39=`HeOqOa{CEXNY;%tqB*&N?E5-3wDqGVi z|BN&Dyf%v7F{3vRPui#abcEC&*emMc=)>LGXfbB6Mtj7x3Uze|TxV5Wct=v=JiL;c zBvsgmvrG1*5aaL^M=y-fcpKtArO_&M^0}rS>#?9RC+Q6-%xRO(c!aw!?77c9HksXu zkPKAdo~4j9UbnmWy1(b{0jD_`-iGPkCmFDUrcv!QGOcXbuG+Pp6%GJL-`W?J?hZeJ~<8f#jZT@CS?krTUjUg^IlOv`VSiME+#1N;S#&nCF< zcb3O*9$he&74ohAu$s?V;{%u=X;RI_Ly{EM|AXb5d{heFc+^ZU{xzQvR;6fB`nY?# zw|w*Xl-m`~A8iQ^peQ~$v_&e>bedE`-ySX}&dDOqnSjlKWJob=4VN=i@`G!gurBCq zq^m+p%}-Fa$}5@TpH6fvgrlWkeskn1_TOx~8FGfKHuJilauI+O!z0}sWC)PtZ~{N! zrz41(!1wP!dH{|n@;v)ETEto4@LFV;ut80?<8`kkh?BRgH==B>8F$pYF^_Gb0FWOD zQ@9*Uu!i2^#r27XRKPz8$?O?^_?$hP4=G&qRl6SyJ`ee^aT299X*1Ah<>0;tCcpfuNDLs*T(eA3; zz1BiPUvFm7DPVXvH`Dk`cvA9x1NZ)dQ@C82qMbzp6K86}rTZ)wd#VTnwXIln6%D1o z!}Tmd)|U>8J5?K!s6YzoF7?mVnKlM6<*pp8eKG2IcBc(!$r?Wl>5AelWfbWC=i!!2 zZ9&%=r!M7+@A^wUKPO2%^`CG)~@^r}W5U$pDY~i{U4FJanD_ohL%)Nem)r$@h;{?%klCVb9R{vU z6%}9{!_cjd3%B~I-S)8p6aVYDys}?=YkL|bb{KbaHIy?UaTJ`%SDHBcido{fxLV5} z=hv?@$%qZKU~IjED}D!c9;lD^?#pR{BqVI4)=ie$OyQ3ge`^+=;hdNx z1bnd_=GI;BU917~`L!u4e5D?-l{LoJGv`w8B&2*i>S#K73Ol8iJr4tehgUOwF{vh~ zLU;W5BM$SiK@#M@s6c8bg=`>&*U+7)d+SchM_S50*auq5{+x$`ZKTbhOe(R<(W|9G zIlUAjADFZ0yei#EjugnbEan0EpC1>jtQH6IeSUE}&X``D;bGnDJZJVPP23Ar#Qjp` zI$lo5*X%zd){Gn!Cigl^8X7LYU?bl`Noarn3iL_5yxtglISYcf^QzaY8dp{Z)D6H3 zfH26>mARLrv!JZ@ZxwI;t`vbG_7lI_qjf{j`SW4?Kly;)k7T_<9QCiH{!KgAvkjS} zQHMyE`ZEmcZlPm&%9BqD1xSK_aN>^krqng9^WYU5%Js3hUh{;;y8E+!r%Gj%e1WIf z#ArC0HWadJOFz7-me|Dpc`59Mnfsd7^pILB~tl{-1M`j7N#n)j{sk zDyrEz>>pxcB?709X(hhePd6OnR+od^x9?V0+hAxcl5L`aY(B={PO4fas;DlV2=TU*gwmc0+b`ZnCU+Rm~alLFpnM-Btf5`_LP$LEF(7N$sT1avaqTMK9Mr zGYwC{&jG7T@Wg+Qp`A6Om`$(Yt(SLxlGVF0|CRB%V0*c0NytfaawER*20C3h4=`Uy zp4Po))~$WZ9PA+b`V)-lYC37&L8beD2n=C@egEs-B=sl4_N|N;y7Oqxb~CEem;?xc zX++Nj2!*P8LFTf5Q?*b2;74VWfbtOz+>9Je&enFedHLKQdshD1oQpu|hB|wNXmTsN zkC>$OnPY^{IULp&9e*zbF)et#RT-I|YS0T10Y=7E6g3EM{Rb zSb>yQUGTy$m%kT-+8x}ljl3={_fFkK?zRja!j8JPVeZz0)Xpozz}-bxbUt(TxW}=jDXXg?co~BEAcjz!I zuVB*j)1jjqbN?Q)f4W!6*GqC{HV?&#t-A^O;`x(f>A!&GqulCpVmdP+2eP2?g{AL5 zNCw2yJ|oAMITh(`M%$Nkkc+Ry|NEoJ#{gx{UPyhevGe^#nyIwO<|9C6U~qRd5D|wZ z`LpI+D@6CrC3a}+q;!L0CUTIaERe^m(x8At8j(-O-oj38Fy|0*gcVWvkbVBv>$lyn z@x0T~cuOS{c<;xze}?tt#n8$=Zqo+`e=a)49N;RADf}~FaQ#Yn4i2lb&2Vie@*6j# z<`d7QWtds#1gW;Lalllm`--(y&BhPl!+tU3WVs2L6%Y=QZOFQX?8rCd>P$8!w|VVn z!t0Bjjz*AuUh$=zORPKpi4{Ooy1v&h1VU|wI4iLoo{0Va2_Rm>6r;0Vc}{1L_T9nXJ=7 zO2Zm;2|t6~G0JvEmhHWd&L)pW9!Lsua5PhB%M_j7G7Ho5(TSbhcMZj&;x3|;&+xv0Nfveuvn#m(n9ONID z)2x)?w@;NK2mUa102MbOv)$=XE-bRmcf@IYM`Zutq$QZEXkmU0O4}@}&kf-D)8$+6 zUPy2;!#mZ)j#^X2~ei9eOo zn>#6zdVx{Wq%Q1(LU4;I7H#OO2o0>Zu~_d_sRWM>h7UDS(2DZ66!-ksC+AIwtC5{g9X3&kz8BgEPI_4LvL;B67|mM zFD1n9=e}|{3Spd(C2YQ44=Ap<@TuSo#t(yIqv_s|OJwO$RL3IAfzcfFDNJL4A`8-G zw2TNBAaU&Jo!p&seM%DX!Fr;s?PJrvYL*0TVs&X(Xq)EZY7+3nNW0ronMSV8nA}en=1D$(OH<8v>0*NB?#UxAk zxqqfXkt`+qgvPs94bfJuipOPG)atgw*XYs6)p<8 z$qG|R90m5KXgm9&}~J(fK8j z$u3$<)lC7&n%P%evtbt!9h?(Sn5qr+=XCbzMhHt!1ppK`X55e0Nl)|#&g^UKYCdqj zo)~H#!`iBKV>17&`(D|FX}Y#`54ta)x%n2(>8uS<_%(P!S z$=2m=BpJMEanTo(|0bM^B70j_!PGFI^~WjAC6?O3odS4d`#;dc+xS&vYz_w%2AfwP zTp#1}G1l^9#k(T0jgYvUV+9*}lan&E+ksfpsvZ5d|N8{^_rNgY-fg8F{cI+v&vll9 zGG&Huy)M{X=(F|@Pr1vGmQ`O}ojU&eK%-~sO6F=IUmJtd4Eq576>Bp5hUf404psM} zTg{}M`p-`mxg85vuX(Xzd>h{~4q9W~4!nj`QWaQqQ|n~jWGOP$2kJnE&L*wLaVoV9 zDmTZy+VK}LxY^SEI0hSx1;R8w#|^#kr>o-gZ$Uci(!Y@~W1e%d{?w#(79VZ5wF=;E z1=5gNIgaYYUGpCDzv2|edC&L}YAT4m8)&G%Z>r@jv8ZVRJpGRTIXHVfd~$On%XtA7HnR$_=&C7UY_dqyi1+Vvky-6GEGx3SzR>Gv}BK$FnVP{Z$)xYg9R3vlRBG&2zEcCqS9bV z>TXKvI*DqG-^pjOazGQ}xu<>ZLUp8sK`~jl(d7)XKI;t}d4yF_ZA)*RB|3~<#j z;Ir83fSlyV2Ze0FXT*oT9dc(c<^VDN_lC*F=#LKozT3gX3oxvecCJ2NP3D>1UZ+xL z?BL5mYNtBbwtLG>3)RZ924TNNp3Yob=AbdfO(WEjoQ#xFbXF18n3l`DL{sOL1N(?$Q&Pap~ zDZ%=BLf@pfp*^{-ufx>#C6&)+RN6T0RR|i3m3O3tzIqelXD2ckxNMnJX;E@qsb=P} zx6|!Rg)Wso#5%}MjD#p=`pC1NRfQk-EH6YJ0?&>n=#%7xc4~GZi1xLZ7FQI4M2jO$ zJ1n2X`7T^sFIK!yO*>g8=b1o%so<=t-n(vy^PRbe;bYrcDBtSyhpg5SeBbjE6t1Yf?={uECj9WAy2B?E?h z6-QN!$}k0hGLtNuLbwJpg@Iv+sKQVpgPw8@HM%~H0j4aw)4F!SmY&<7hLEHFeFwgK z7F&Y19E5J#;(oDt@eH1by-MD%)3rd7IpcgI*gF09rDH+P+xzMp!6DS_+ZoB6+J5v; zweM9xC2|sc(Qy4eNdMGS!j5?UnrehvJP?L(dTXjIaY$(RJ%%23z@K7^jkKpLl}Zdg z+=6`e1&1s^3p-S?g;coxjd0h#AqMxsPh@eB#HE)Ldwt--NlhJoP2;3!12)_z5YF@R zE8-~WD-UiGjdeh63y2W)+4EwgRNnTtgmLUUCtfjQbH2|MPb8L0wm63tcd&#&pQ?9M z#PNO+*-k|SNk#A)f8?T;9ix>ijL!)T^4#_8yGaflapsLSh#IcdUay?oFeE4gg%KWd z5Io6KzLV|zmr%v2Tf{?4O%ogOSdss3FJ^)!CnpKZO|DXOD8(NB_#M4r9#(jVP{1c`AHE?HzG2>0c!#>UHXO0C zoS3LQnVZ#xfhO%34(bR8G5pAt64=g=5l|C~bD9CCC*h?j1n^@ywlg^TY(V(!ocbL# zpo|wGib12Vh#>yHOW(dr$VA0|xyJd6>U9|z&=@24i^8)}548{3a}0j+O?P5rgM)uz z(NIWwl}ZWX#C|864{A6l;DJgL82x1QtiUWRDqx>XXyMw#lW2Q1>$TLpk^BET_A`t3l`OVzEKi;X&#F;Em>0 z>iJyaxfGRgRRys2s+`XabNX~c4N0FbW zz$RhV8LAXD(#v-OZR95wkMn!j8sXP~1Dc7u08ki5Io@uLpLH(dB23fy>mOh7QzLaM zT2bj|U!@}#qtBa<|F|v7je;&D#oMBUe@5$k|Kq*jr<{uCg^6#*F=a6_Hwus8Sx8?? zdljV37^+0B?sPRSta$8hwgfD*UpVaSaI&xH zD~EoWr>mQH6%`x+23lOataB*}zhfeG7H$eh!NUZ?p#}Le8fn45blwi{VX(ReZeewI zJavnN%T!?<`gqrbPTL$a;8K$8x9Pu08s(jD6pU&{hasi{HfY-Kc7&KoetoA{X(7@nL1V(W z$kw$?kG!lM!tD_be$WqjU}diBbGpik0Cd){x4WM(2WuLJX#l8;q~y;B`xM($#GCJa zm8L@l4n}YwyFX>RvjDYR(`%^$7zYeobSu06E}lzrkU-zHoyH9vX`@g<=RXG=i<~?* zT3IwWKYShYNK8>hWuvDLUD`GL=x6wmgs`={_Mn27$FP^KteJxf!l|9lUBct`T@YhYi zf_Mw@eMYKO2BGdD;@n}DSkvvJA88BO=k^(a|C^P@v~Q2tyEUmbPZ@o6e9PAn%0#+) zA^Wzuhlt>bas}9JQ(B&NEFYhK1)v6wZN7|Or3|#XG?zw|N8K?ww&7n$O(!<{9co~{ zTp7$RFW;lViT%5{vaz3C{Ex(U{VZxKtA1R`zSgE)4N*m`h7G;_<1g*Iz{OM1ib=l$ zrC-^_U8%2X^lX8D>*lmt`^nzQdq&j!2|KX09b7%RI+_J2a=}D`Ss$^(VZx`#r1Jv5 zAUkw(wj2bg;_MOo_n%1Z-o?>{dSG8tf_{pDM9>r|!msW}@LswdPWBe`mIosFc1uS; z#=VgsKEfcqR;k+$9+X<}r4p5z+>>Jr!3<52naYP%p7{_j{E)j?W&f}|cVNWqk_!an z_N;5dAj2U4e3Fmu(R2smp~Fb1*O%Ay|AY-Z4B~)+g%*i(Ac;FXO4%d{oWn2H&6B|$ zpg8=?3o#5Fv=o%){%V88yT9=BbwK&dbIH=eChjlBAax&hfxX?SWsuZ{b2CfDj{xvj zliA5lc?!f#uNj5G|5sjKy4K9+9CTmNoxz-u4m9+Z7XDok*y;S8!J|$zyHZ2vDnq3v z>TyKzS!@-NbQWej~M=4qW-igqwXv6h!=t#X)ZD(WG*W9i*BG-#m0Vt}HdkC$ugCT>ey3E)cep zNwX%^d`@9@4&4>I^nZ7^P+#?4jsqTOuI`wxnqKbB<@WE*OQ&}-v#Y5#b^Q??e7LCL zs3qBO^2wm~o}m*a`R0ks_5FU}5cVM7f8VgsV{?BelVTWpP)VG*5NdUt0&4Z~ejk@A8Wsfx zTD z1`l423mc@uGQvR1<5NHjl=R9%PUj}zfwJ)>7(U-H8}(j$gMDr?cG9sjEDei;!q}_S z#0wDoowEIQJ%hpbxUF#p5Ziz3fZrMN6BaN;^XrcGSE1@0L>s8>*nidk`3JK>Wh?n; zoDscPpHukWOZZ+CgmvvLu5Q`u%zOO<$ynkYfsC_c*F^BO{62fpn~Bd)uC`~1TuH@$ zAJ?(NA%ZG@ihV?Aq1vR0>{{_8L18{gQzoT)uAtf^2$=IMZ}qC)K(5EKrGOJcfV?6= zSjV~#|D^^}wb`?iA12fkWx`Wf3mZ;f9bUeHkoJfM|3rDp2FlTs<+h3+%M|)KZ+EI( zQo;Ot<=Mkb(IaSs$!4`zD!eyT>eK{oPsDJWkx$-8WmadS@K9a>&ouXUdw4(a^S+Zk z|0hdie9lO4y|YLV@+jRtA??BJM7;jyDLP%ldMW!ANf#!M72p08 zzlJSS6|)ywK^0P(@9CMc@2^DF0- zy7MIE1J;V(_ur)y#b5B5v@|>ia^A}h>qDOc5{U0Kh4ff#XIJjK=e20V-7>3=zoCyW zS<3mAQgiF%O%Zv5kwk6^&sTT&4DN3ceQiXE^}~aFRjM%tA0G~**!(<|UWji9Z{OkW zwPknc-Zz2_W?+5s{?smeeRO`g{Pa6Mo)znCOCgS`K+AU6iJoU9ZwMd)~&cQgG=nN;BD;Yqhn}!m?wyKa~BSqft_0m=x$xdxQj?to>dpQeGUr z9Lb-wD_Jy_yT}7KH^iu&_&a=pq^B#B*>Xbk_S5bEOslp(BfgzAqd!dyyau;pJnSyi za`5%00G;Fct{s7jT8N=RDeqlM%yde^_9FXOp-T9u}ktwe8 z98NVG$oS2!N;UXB=d{3YDTyn!U#g~|&HN6Z-jf7SyPF-hZkAp~iPk*?{4Kbw2-7rSr2*m8fbPGz-Nnedzq%1gw$Tr%rzB1|_Ji8~@ScmpF(Ih))2Z`& zdVBJAyuLD6S*KOYXHWw{G~qS=)CnffXehLRK28T@?sy42XDO0jGSpEe&A4s4j{CA#*mq5ZACSqOcyKN%}>KoZeQc;`XV4$?^GX z$`2qzT4g&2G2QB}cYnXR4HFTd~+78DB z1&RDN;8T8|+^(~>`_k7y6oX#@)G2{Nc@Y>HD4VeX%x4NU{%mjt~^Adsv56?*E$A{pXU)R)I_O#g+b>rnfY8ovv1YpVT)Tk%wk z2>rDUC!1Ju4YIR0)+kkOk7uJ28_I|5_Od?s!!0y@5{T6hN2pjW8atVz{GqNKuquA{ zzEsZB{vJ*c#fANb__&vpkw&#AK&=NHr}bq@vVb%%R2(ya^lus|Z63VWP)S%NI}$z) zqp`S&KP8+9IhqK@*>F-ps0%@@O^d{Ll(v)r!ZTRDykMr!X?Q??EI0}b5hQbr09>p% z+>r@l^9opNlsQ0|QB*n281ep$R2m0DX9~^AZS@!HzWSM!sI2VRaUD(6ZFG3emTVdX6 zScgWDl>5jWhGAV;c%17k|E``b+mTiGPs&r8A5Z^`Y$&IE*l}hduag*{C6<3c38ef5jY5Mc?4~F z3=$0zfym>SG0Cy{DIMCsItWJ_c3q-L;ybi=Pwv1D!pHKZc?y%n%B3L1B17xwE9_tT z?+}DCZh62Tc>M3BHVL1@hmynhzn7Y0b!xRl#(4*5+q=g99I@~c?Vj?YgPa?FqKQEh z_B@Ek%ZA!d{1vHLTO|jUvjUbBg&SaL=$OJrKP122gZTx%$R0Fa~(?$udlP(ewb zhoM3Ew^hXE#UH>)_yP-E)vk4eL!klmY_q^u8ixX)i_rR2`ot)~zv?9at@b2M@-IL^ zJ_H)!K^1mEIh8WF!i#Oz-Os)?@!0TpXoA$YAJjj|saCL6B}ey8qm?-bjb5`OuamB> zzpp1f@hJLX7}c9%T4IVAMt5LEhKx-%Ft1MYxw@; z#ObQ9sXxe}{oN}-0l%FL6EQ64DLL-{6|J)Z9jFaHsGp;&|`Lt6^6bzF5w+e4yvVt~Gf=GCUDdqf(B@zAp4C7S~5MKBH z_%MDNO&N$jF(=Sap5&ey)Fy2k6y`dcjU-0qe~B;4MXvGj!haU~!ploC=mZtt3m9KZ zJ0sm|J7jy5?i9rUi@NP@S>!U&==kCi_F%aezS#&1QTVy@#>mk#2TmzG`Mt5(`TyaK zsOxg`6UrPY+(O;BTjfM(PA-E+(uUjarD{8LMHos!m0MKHOibpFk88A_q_lJnqf z!|XMD{mzVFo~DIS)pRES32`{qqAJzWpK#^*UAY)q(JMxe{UmlS6{Uz@#P27rzu`>= zhi@4Z)wkD|VyqTRU@S*#95IoOE|tdK!XVX^KFUu5xY%($_OUpx%irxPUB2)=H|Cw( zovCF;3(lKzFwtk2aDOF0=5bp^wrwG2=4PCEPf7Y=TH(DQu*1_^0G<_17r&X&L2av` zOD0{H8_vv%m-I_tuUsK#mwZ5cB)TvWCEyA=ZFgjc)(pEfYRx6@X?}Xlz%7S7A1O7F*2ws3yefe z&lq6o=eP~Xe3ufzqxX^(+swN^Yf#C{6PE~p8b?G!!{=6zK$T7@%$JraE@xCjI%J$u z+cwLuj`ebGU}~h~_G!XImv~nv)B!gav*@dTl-O{2%X6W$mD$A?U=O#60Q|)A7#*+W z(P*J7m2Q@EIV#Q)@cpyu=(yZq-QSJDgcDA$4hjS=LLeXc^<(MvHF*4lAunB=E5ICX z93cahn@ffZ4<*Gg;}iYfkolG9Kg)1F*Buu2ERSjQKO3E$tQcIU=)KgUncg2<%V@IM zBH#fFxTxZ)iW_e!h;wZZmai!uiLBQ)tjng%$+D2FkafF=P}18bk>Yta^>yPm6))A? zw$tOZt?L_+O%hMh3~JyjwIO}{&v@pM=mwY2I8DNIy#CL(A&oaxZtWNSY>pW-r!AA* zQbL~<7ix}zVCTAhfM5RjT0GbfnX4gtzXD4%zan(QjZaz1RG;Q*Ts)dErjwk zp)~I#TQ1!#4^f*TqyMZ{7oF@JY(2d$BZI-|G<^HcYFa|>vF=@xk#yO;7CBK*;ci;b zmc#`WvKhEcHX;>kLEx*ww`X*>14#r$*H92KarO?ZTJ5?TJC8B|*&7ep{T~o4fq@|; z>G+H;9lW%-za$rp)7Mcw*kNgMlIKY^je6VHmes)Nzt4o~>T-ULEehTaU|dXPJot9J zj_YU29P8T6!_k4|>Zrnq>G2;L%=2nJ8(8b^8u&MC z^fFwzjA8cyGx*XD8m2jG@7p|Aqa3g`Pjwhxy-DRZV*-C!b$s~)s#o2(w|v&a8%DM@ zq+iC+vrX6o<9@p?-I+0=%oeA@0N6f?bNIA)9w(Gu7l5*OixQ?gwdQqZy)^4$$~K3$ z4I=De=ld__lOHEAU68Et=Kz|EAn>9L%t zl!(AZmpNNfKhNApz`}Qug`W6;vW43+UOrxktbzAmF54N|J1G$yR?BzM4x2GGDmAwi z%V2>iJ|4%|lh+rVa1K$x=_Af5FSbVrPH=t)Z zjiJ`ANNoCKL&|)c1f3$+))L#x+2-%ZBUDFUA){!a^!)1dm^f&AT%6FnbqM-}j8Pzi z1z8+{ON&uUe3l=GZv6|yk!`Dsr!nt!Ym7-nA6B&2rEK4MOR7Z+{SSalz0khUX ztS@Gq(-D}KdWQOipl*t3;XMX-GhI#M9Wz= zLQd(8&WErC9$nmit8D1!DAjbnp-Sf0tIA`_m4|C{>jUVY2|KBI9roVmeaB`=nOb4 zIcz;`UQ}57tAv3r-B2yZWxs70i7mhuYa2aL#xSxS+QY~P1)fRpO#fQH)8~YH3R2qu zNZcHMx>>Dqw?PRoMH#yZ|IP35j|$vf`_lbOL>YkNjf+E6(T_$;OM=5CQt*M6(tzAR zT-w%8+B6PNx^KflIy~Gec1cyby(2Ju2{RT2r!EfX^8aK|w&6M9mxuQ8X*TP3(f)75 z2AgB7ep97HfV;Uq5ib~s9L)fVMBlMeUjsFW{w0qWq(lR16#n;q%MOAaeg_?Z#^5s+ zAM=ofYf^>nO-L2IUB#9%7wh%%GtRbuIYeS(hmJ0;j6Dn)1)?n7qTE-QU}c_%P^hZZ z_9lk~oaG+iZMj(o>dYKJ!D9+A1I7hAn-*6{msnir_JnpeW}wRBFL&S!?9e;>+i(WL zHQH0*D#d_8w{y4&a90K|j9it>li&a0g>{mu0I6~nZ~c@kc-97^Fg4noMNav88!#0Q zQx}eWpZt|zN@2`;!O%M{e6&KcC->2FVwJ(2vci3}`NP~pwxwTKeI0X~hNPC}VV@o(Ax z5Np^Om>JDT?#eQ8nwU2@s)=8+?P7-q-vsg$iPX&PY)@j&1_@wNowgEOzKNva&QTeU zxbGa#+Pv(SRxpX9ihn9rm24Ibp?-B1MW9h~^AlHD=7y0Y3h3>eA`|UE*>E;^vPd1% zySr#X{8hwCH{1t@rgBl^;~+_V{>nJ{$F3_$*>}dB25-Avr2xns-1_DJVd^Wx;#j(^ zad!{y?(Xgo2$Dc>3naM9;O-in;F{p>65QS0-F0S=`8el&@4erjsp_8HRlEA>ex_#c zwbw$!!3u~y?VfFqIq!24k{EF@>_<>iD21k8)r4iFsyV9=FB@KQK*)p6(-8Xpi7G%k z?wU{>h_z9KC^<_;ITKZ_&uw^iImvHl)A&th^sQF;HQ(d@ouYG@DfrLZ5`uEC zddC)`K;&ekU4~9EArwjTDIRfq$7C)F_i_(E{{lw~+s3Cy=id`-cFnZ};@lt(6V|9; zI?b#Yd8!cL)k#Z1E@rK!zbLZ5(6tQ&bik3T=!RqSINlS{=s;8xY0=rzk>Q6w8fnuX z0zFov-_9}-@8cOYh)y){Pdu$()2zglxICqOfH=R)c!Q?+P5ZKreKvNMb?*YGr(g!J zffDJdJe?70W5>H*r0&sRwS~Z~mkwC zZCYz}UkU1D=8d6AR3B2+*QK>kX|OKSV=A#{PUdXfd}F>Pv%SmN74c{T< zo*#T;bxOt{2h;2kQ512f)x_PdM0<9iE7ujUpQYKJ4^)QspA%&b_|cfyUB$ldrWu3X zuNdn9J`_axKjioZ_!v0+KH^mFMJ&)dq~&RG7=0gfKFM6}h9QXM>I+9%tNr2`ObSCl zIAm^CBQ@xSia8&a$w^L(eTwz|e zh6x|lZ}T$Z`ZkfEh5RFR+_AZwkT74Y(YISduibYoRG8jHq25$teoE`8NWE1%u*!7A z7)D_FXXSC_C);wQucNmjYW?X>4Hz(k9-K) zCQrlBzQ3F3!W4iOXulCRD@1;Oad?n|B;lbuerwxZ z*NM!ei|emNe+7?xmxX(bn{q59?C|~9gxA`$TyF`!ssZ6CaS7za-SB;+koN|0x2iFv zo4uqH=S!gpV++H3tOyW@LPX;|IH=3x$uB^Qi3NAwn;g$%bXO$GA86O^q`q-%TVO(q zV07h%OyEULE>Qtd*MR30*V)d7@{bxb-VJx5J=!5(T%VNu4|d?$mL3RxrH4kBg|Ql| zN>+5y5Rh9Q1h{z#i6C?^_m>w%Lsfy1b(Zh+qQCsJ@s$@!M|n?HsOOtNsfxjunE2Sp z&~}5d;^^nr;$}#9teZfR>cq8d-+b>3*1*P;OI92n9?pOlyE;CS}Eb?9K;av zz1F0L_hG2C*pUA68f-}oYa>f@;-{fXbADJd$Fjb1UH?bpCCK~d=nj^KBsN|mH4O0s zUTlO^6?%dr2^G2Fzc>PpQ(`n)Ixu0OREY~zG5}sVq`HwHEr^7zz-{keFu`Cckv$O| zJ~Y0HB~(QY41sx#4J`X$tn5rq#=oT~eStN%gd6+rT0b~tuAdH$0=|*H=97;S87(_2 zu89K6XWqdD!PH!sMH+M|(!^{$l6uutvBb713GT0pTR|>P1-ZsKutf(_#D!T{)@@W+k$D`2J`q+S>XHIvqdw!-@*$(sFt0UA2{>aD%FGR@OqiK58N8E&#gm4rjS+RfeA%s1Hw)g|MLvBWS(cqgChFC40CH*d2p? zK&;rdUA}DM%zm)dA7la36_GOBvhA%4VZdy^<{SSn{viAve{hVCiZZ=ma~w7JmCpX- zzr`{bKj^4AzR!rkX@!XWqK+Z0J_wLAc+-6iEf1PQdw$&k& z{R_qqe_N;ICsZ#0$utD9iFDwTpc@>4E!IGC0TB~>o^G{943TvTqx(BVHGF{B`xEP& zQh=G5ELShAezaL?>!1#s{29%|1CG#v>ByAHd2bXHn}V}sV@?6FcZW?d|GEK^?f*a& znEd{QC}1FNBvmnn{VebcaxfPI^AEZYd@*0YI#!t4?P<&lkY+`tgL^sU@`E?8K&gML zRA;x+>R}>KOZ0_Zp69VeS+7{|>~FTqV9du#G|9S!qWpb%F~X!uyk25K{wb((*jK)| z$w6w6JBk!Hg{c&)U^}AhFH}kbEqC6beBHCS0jDtB1PO0%cm;T^>HG z%aw$Qn`xp*>dzy*QlM|BBz&pB19`!zSSu5}8mvftBx34zL&@9ZP2+P>i8tnl+IOvs z0)x%uj%uVxBxvX;0E*lQ(NdV4A1)P9_IN_0Dm#bOP@fcyG{lTi(F224u~Rt#N5@8h z_TLI4Hbi=OcV4PWa75dyC#NbT8bJ zmKbFpWjOeVQy$rYy$X!t>mX~zJd^z;5M%Z`x*Gs2L@{k@V^Ok?v7;!`l7~xn_26 zf9%8eNJ_!eMAuEQK!>ZK2~Y^rbxANn&Z8Kt&5 zHZ$?gY92Bl7R(%wyF#{~t_5q2gZEXz|Ar&C~4& z0s@oY-8HhY4aA;pEx)p9`al9v3~7W=T3^%6T(R~)c8+Gv#w}TH3(LkSX()Cq>+`or;P_MyBGY8;GU*}&iq zHStMM{$^-juD&MSnK!y0p7%^FGgM{+F4NZ^z||>~4V8Hz!}F&QY61{tng5Ud;^m^A zot^pbYS(DOxw78T#8?8d>&hpfJh~??qem#h`R<{sPl@rdR!^I+?$9y2WJeA)`9T(0 zkJ#9LPQ0vKvN~ws&kZ|b1qPARIJ=m>?_%B^e|Xy$+p&w z$dc;`1iyIUoMtpp0$Ogz)S!05YHy23uoQfG@u1pVL6&KGP{-&F_{uWV3e^=*Q2U0_ zFr0!#2aFp~GCr`x5^xB`nYw8(jsnTWOz456MxM~qU+e=>p!6V1Wv;M;vlO`SoU!j% zi|Ef#7YMCJ#Z<>*tUXYqc)E=+d4e^eEOzpWLvr1^9v)3U3db8rX=lITnVKkng6hl( zA{U!%%>RX(yXEE=DSdxGku^7Ra&IO%L@simc4g*0Bs z^3Glr%1;>E+FOpyH_iO!$&Ga#&+)}KOrC~h{Gq$h><@%#K~!IYmFA*P&i5I53R%e$ z#b9;k1z1shDkcOQzOI!gHD`r7l*3XP^9SU;Nn??l@Ikryx}lt4!TKfn1x8N*Tx-7` z>)RoaC!U%93abit+6JUU=O-1sAKjz$-0c`)?m1S1MZ(Wa!xF{a_5nl+=K!M8{4-P1 z7II6^?_ZuCIN`tZx15>E&Y)F=e}Ktse0{e$e7BkTk4+h{gi$-`<LV6IVD_myY9j}&-jYJ#u)y406! z6afP@+)e;*;;1;L(FPqR`hN9<0p{Mj%Q6O;vslCE7XYFRcxI^Yuf~P5=tQ{x`0@8& zUt!NaYa3$r)my+jell4=3E1r+sA~8?)fpPx&yE=Sw>^rJ0}rjIvUHmu#=(v;tQ_;k z#@#2*{Kh1JS)-E(dDst{^%S1~esaNidd9q8=1ngNUX$n61T1l!?!$jL^vf^LOdGjHh-uzK&VP& zUn502tC~rjHY~0W+o=TS*U`WqC_UOps@L$pmwGJRpwd0H=pTe|X+O&J&_8^|E&BL8 zjeJ|;*QZ5jd4K;;vY@Qfx!KSXl{t4enhs(9^i|uKck!btXhUtXq8FtDrbT7X?=sD zNkGG!)sG!rfrMg1^#pvwUr>1$BeP|GLC8Zn?DG+%wT%J)5svgy7b1-|)`2sQ^bF7w zldJTMuz_V+mqyZlFA6x;Ndp#z{@vCp@Z};dYD1v>t&@P~{k1*uySdBu^x&6BX+_?i zJaO~)ZkXg!X@G?4OQbNubgBPweXV}1SZds^vDf{Lu}*|Upl5)jm^`I_#Anm#e`utj zP-;I#9258CZ|)>qeXEqC?puiOopbK&FeqF0oTjjrgO3XL(3MCmSQe5SJ&wBxEF=w^ zEIsBxJqwNlY^){Q^Gfgk1OG-Di=txVuteCQPw=XJ=RT@Qc{yB-R!nRpXo$|eDx3TZ zJ>5%ns&xNCDOpvzdQ|NzxEQA~{YdJKFIm{Wxf)kH@5r;7eMWWVDn=3bj_z*YNAh1J z0J8vgtIR0-g99>`&#|if`We)!+~dMfNZz(EU_@^(gaII%i^u!j!z(ZdIK-G>f(#*# z$4K%D5`A>O4f$k&*C}hF0OW5!dL{mp+|qGPW(6Qk?u!}_D_Gg;@Tpue#=YoR6n`EU z2hud4b%(yE1Pko@FSO`G{7~OjHW>Z3DDWT-)sf+E*Pwj%I3qs^AeTmcDoOOh$8h74 zXJj#^84X~iy!R+!-fETbOVV+}PFOWx*3#W}F$&5Y8P9`vLS;v;UQ>2-B`ADviXGra;-#K6B&apI)>a}K z_VjKzvLft;K7!e7n>OE>kbRP@EsA0}9tyAfAzu?tZQ>s|qr}L6l#y-mmEA^?3LONK zM@BOwiX!Mu@WA>kbeUf36n#!8f%VX38Np0R~8*n zj^S^7m!@Ko;`Y1yLj?FvS2i~E8lD+@X?Y#TYRL8Lgl5@RvbTU^*CjTt}Ql(F~&Z+PgAT@ zUKoaIBm#wkCKEN%10H)q%l$ZO3t=rcnp$lT{9?*FVxq^bIz-L}Mk zt}I(FUHWrDYNH>VqToC4;(c_{nY2irq3q^voY0TF?+Bg^=Eay5RNSMC{io9+UgBiM zbE3-ryP$7`Gzc(!M421xgK;Y~d<4jv%D}vwUF~>A`noY)*QS%OAoT_DE188`@bD?U z1IJX!(iVg^d##w|)H#eWP-5RJ;Ycc{v@=K)^R{EtuQ^y7Q&UXwfpX!WPG^^YPdV$F z`TW9#Iw0XrY7$Y1V&5m>?t$yb#iW~zbw1?%D$(IP%BeHs91r%^t;>$*=Zjxb7tJn| z;pG)eCcc*XE`o^8Eu-Gm3__&m&Hvvjs!D(Sn)YkIGdgc}32WN=*ZF@|Vc!BGW$g`- zOaEWTeJ4+8znJ7aeecfZ8Gm*E$KNGLW7e| z{%up^u!p z$UM@o*(CHeKBB39U~AXxhI)hMm9WUZCVr#kor<5pz&in9C6&ae65oX@A4 z#K``M?w@g`-X}1;a%q3(+e_Jh5^jsCI&_7emk~z+%=mO~J&hos# zuBD>$vz_RUsyTQa!&&6w>K_-Dj@B{6|6Tfj@4?d5i`pY9d40*`k=HdDrnA`a1Lab% zLA6zDPP5}Z4bT;l;kTqU;%~Ad_k`64+Quxh+%pAgw}tO-x89gG#9Ij&L2-7l|^}IR6MxE?rO=L zd532x6@p38of|F>zrRzqzzY%Ye@`fsibMFP(>Xd5#}UWT@4{Q>%HYBqbMe35Bow-V zME-x%gu;hQkxbP%`P9o}kN+L@z0>xq@PA%uuhr?>2AzabsT>3^;{6}5lXL(3O6Qap z+Zmy>KT4h5Xd=a+l}Sx4wFa^co@l6Qh z&TmcjRLmc5UPQ|LI|nP~jgkRZ)$z)zi@(ei!D=62PUyZ@=|$7y?55v*j7Tyxf^XQS z-_Dz**K&{JNGsXXI>M8@Dtq015b+UOb%fzgwLiM;@k(<`^bLvs+Utd6bW#@L*q!5T zREK}_OrolIwm2#RUc1A(>T%!ykSVLP#|N{dPjCA;6;r6cvl&d;BO%hAzUX;p@Jj}z zf^w9QZ-wc>Qe}p+JLjDT^?Tk+6cPe)+BtT420JUWdK-m3VZ(G_Um1F|xC7deppz;I zYjwv(&Y5aVOq?m?O%OP%q9w8W7x{AmoEbtRXa^%pL;LTry5bvOPIjCIJB|)TD$^;d zwB1&a)9VtI@A5LnZ3u(kq#M>?9D{aMASrJ|c2}RmMA+w)Pp9y47Q^zNy2E6DDu=*~ z)Uee8ZYK`TE&01BpLzT~x5yL{7Xf&Ask$%sKGoKxW+P#_nqThY@4ytU`(v5oMD#Cl z4FxtT6e}cZ93h3OB2IC~40qEy*N%OXqEoDOEM?pHI9pW>-!yj2beVp=^AX5-+C0Da zX*+NCmL@%TwWG%Fyb0425Q^9m%>5@{BpI)#{b`#l#ufHj>_5PtcTD^hMSxb5m@X2g zw2HcG(QL(P*R zo{Gtf@g~s2C{Zz^%(2yExMA?lQ_&i~x-<5t%Tl2ZTJ!0V$6c_W&#&8kui85eyl?B{i{69Qv%aCe z=yfRCQax|Fe~gLYATAu&_#mDdx_j*F_MKD(DPY}PGEV+0HoY;#)la-L;}xz3t!5ol zSMBRPRH6_HRW{-grR6}m-O6-~M&lz7ol!@`HC7*7nE1Iq@QOl!<$78>NWF%0UVDA&UfT>~hvxzPV~p zL}}-FuO)t#mGhB7pnfcRP?eKLbPeNa7(Nm#6D$aH({nn5<#hc8?{w=GRT)1Y?hx z%Z4!#{}K~i9JyoA)&3u$bvoI}z;&M!hdY)05!1aSW0SvJda)Ni(vOhJB3CxkW}3 zS5CyZMQknHEfPQ-P8ROU)OTKd!{>|&hjN}gaWm#~w5~<5Ja@3UUgYWyCG~f6(N4h# zqnd$s1$0GhRz)lH_^jzG>kl5C~x2K0cQR=q>;N0;btNQo|sqx&j4&c9XHLxN;i zzj9n$*w1Xm57dVJmd*4V&rtj?BwFBUN07x&jk;5PHYw8ePb(OGPG7K-Zv;4-G)%OI z=wlh-P;Wg7rIff*qC;sYRH%|!wzd9dZrhae+|^7^c&d;^_K+}j|KGU4bULV5&MIr0 zoM|kBYD4?A1Xw<|HBhc7unPA+*5T9C-627B5_SDVm1LVUeHyPuW$TX#`jC`fAA;fC+J&t}9*J!q{kMp{>_@|UAeH+YLuwtQuE z)Hy8~6k8Grds+jhi4J;fwY8@h$FU!GgKr7{eDXBCa<>sWV;kgIPa&pSlJ^b*TLVA{ zTS`h#d@w>ohRYuOK@D(t?(a3&*X({FALBw8KkQh_&CDw=yE1R zFg}>|lABRgFQ2kw6N{Pitp7(QgWH1{f$N;#VzV&Rm_tb=ArRUp_Z8>qaBhP6^AwpctgH zs6sQ6D&0XcZQ`($N1wNc?%r3mV^#^IP$gZ{(OfI7n?M%7j(fhoi~|~S(QC|Ll(xPr zl&W6Syg{;|4M$gHw3QtL{D0yYrClqsggnpvLSaG|JE#&wG(0y_(HNWW;gE=Rpl#Ax z^gBfM9b!ew(m02JyO=3-VR;2&ma?&#LO(>U>IK0_%#m)zRF?{XE%?c{XiF!6 zS2&U8u0$wa1W{k68PD`fY4s1J% zKBv`hi7{MR#BDM8%v>$kef~Ce_Pe;5N8zQP;YD=!iZ4*hUs0W2{V5;wNr{CZ8%>rB zjn?-M=4rxi!Z-p+MgS{z+(2-x1*01NQO+ec^8R^Czz|I&iY($Nxeq=$PijxkjW6fA z<>LNj#CM8ThCX2x;BGXbo@Wfdm{15TTmDjIOvJFmes^cE4NZQ^Yrpyj` z?&soH`+m6SGWz{nDmL%^DWxAq%R9r!zP`TWGF>%tN>L7!`E`YPf9I(jq<+Z8^d^qU zmWv4Mr5qRCL;FU5M>wi?7?x#K1{!_us)&~4Qx$N6SX{FcX{_7k={c9J6tIrpl=qTf zZM)W)SPwJoDHQ}O3<|)!#142`!G|n!zJ5)k$#L>qaL zQjJ&>H`#AzwmvzjCHES=JI7=d%}x1t?`*CKj*+Q@tLW2XzIJUuFM}UrT3_M;W>xML@|dL1Dq$=W}V)=^{S>#D@RmGye zNpnHUK19R6ITEVN&0f7Sf$8sfAB57APUT3Q7-z$}$%$1UXin$w<;(Cd*eHkQcio+$ zkvSAaVS*^Rek}_(q=W=FZVh#Vy8WBG>d-@0wOU&Q23D~W+5NdXOF0j=rW-3PHi@6) zsZrH>(cX0EM`dRy6xREe1utLj3M-9025(2Gh0cXufUe#Er@JRu=M;r$LjR!vyv34_ zgH~2)KN)0~VhYlFu`%Hz^sIcP@6IG+jf{Ze{98A&^!<=gl-qqyy%ew-iD(z1f}A)Qh@muy9Ixs1ga4gUzCf)gDq@ec6t ziVnY_c>xj+^otCtT#|kxd?^*2Lkg1IMBa-$rHOqPO6O@Q;!a*@l5TSqzdxBNT!)UO zz@13R)q0ijJD=OnUo3l}1vq1&o8l#0&+Ek)WWG*}EoHv)VZR#L25O(9=b6Ov20gdIGwTZiO`{P&3eppxd(jUh2+7Zu1i6}SHHA&6i*(@0A8>a&U(8WnNpbQez`Knxc)g8 zJ(tBGfw%}7JGR;qpYf+?T6;JwC*-))Ky3%P$i^F+2zc>3m2w27882s{n+=o^7)#t(Q>9d9-VJk884z8FKvR1T3SUZ{3U#E?<@t3mp6Gl-YEK4`O73ytDbCa zcJP@Pr-{aj8_^)GQbAQsQym+#tKY+?FfpBe9x0;W;mknPt-zpzoBK$}wY7U>QMwqw z)m_H*5SuxW+yt3CKae;}|5*T{_Tfyx=7hTIchuq*T4Jk67+<}8#glz zSW*fV+dd6RNAp8|S@co7eaVtyr~o5@(UyV#9kA8-@}}^H4-moH-#eCf+0gx|`Zb9& zG`AAJD^1Y@4XmdQ}`b97AjB9^Z0Mg$JUGSn2%#)_lpx>j*op<@?mIAPk=sdCWLf! zc4UxCeG!a}=mOk=g#2+|`YnED_Z!9^3jMSX@@ zI+_#pJDfV%c0a5FPqm*v&|MDNx4xou#>ni~w{I)ZPWC>qQ3#>%FMbcg$Y{GFm5Puh zf3pmNL|MuD3wC-v)3U}lNNrxb1Kf+>!Mti5YB?{YyxW&eN+c5Dc0lsr>}ew^>vjV$ z8@Ab-bHEa7_wyk~OW0OSF$8m;6)|~C>@E8FlFKOQqmE6MaY%J?X~AU87=0*kgUVDX(St1<3h5`V*xCpu0v(?| z|J=5ENrU>BODY<5CfM21_0F|301D2y-6Qgk`A zdWG)v7FHgMh%^1o*rihJuEDAtQr_v&>EZeD8(f@Va%lInsm-msFlck>5InL!3PH6V zGYCfrc;56M@UZsJcGq<~#+LG!vghEu&(1gU#6u@(BJ1v20lth(#lMkqlU$r_pyc1| zg8G`{Yu5BASY1H-H_@$~fLbq4(OGgt$n$tV(8fV9aCuxG_RuK-56E4j~(oJE+T{%DoEJm1fO=O zEJZZPv8l07O}!T_Zi&9-4kbcCf|-H2LsK2s-Q^Ik7r_YL7KL|Br!^kDL~*lBMjesD z#T0#=;`sE4XBSPfrn&BE$gh^T;9%d5X^9tZl5`??10aRf<2sM%S^*VX(qM1ef2hn%aS32zy9jo(M)LKF-M}W znea6=d*s{OW{uOzr%Q=v)SK6CIO<)fAPV1LFeZeMX4LIAes9{p&tF{=($N-0k%08f z^A>a=B1B@EyR+3TwLVzNuY-_N>=DccqteYH0scgCk6*`sKT9)#$N^asL}8#B1^){1 zBrk;eP%H65=eNg|Bjx$>7juyq<58pEvIE5MVi_>!cQ+C=P?VL!_UggYZMGoIPExXZKWt0<)AV5%Ot%(LR`Ty3JNv_h!o-#*)vEB*}5FuW7-yzkA-eU++=* zoIv&JfeE`^YlUsyJv|S1eS{^EZ^2lfyInlW<=Xs++nw@FEcRgH>odURE=FlVP5$#*t6)b-scX9XjU_-YC-y3?qnmavgXEfgQ+aqGvvS<10!I80%FL>>5 zVNAOD#GnUBp{q|jDnCr;6VF0xE}?g7*saFZ-s4}0Wt_l(K2QtfZT|B&lf^^CyI9NB z*oNrRX4{n$e#FV18J@N05&ad1%yV$4Dg6=%*`L)zpP; z-nT%=+V^;kd4)x{`x6Jf!487*;z#<^HBKtj7&IsNvHp6NH%Stkj<0IbC8f8n1AIt- z0LuJb?uqxsuZO!IbFB9UsM871Fh?Vx0_Y^*G5kL<`zligeZB=>9AKhVX5bjMTxqNx z+u@ooeoBpDLU-2l?>4T{A^N7}@rcM`_iY&i9kUv3`VFUzP&Z{>PkKUa#V$5|`orYI^uwR@|u_4e@Tncs43+zCbD3{vbZ@VV8PsvdZ@#7Z^w zol54uT6Qp9Y5Mb>a*L``#B??BjSmqW^8wEIDv{+X`9?}godz-eiNBIYfr3-)`AS4y zoxx*-mt{gy816UhwS3E|VN>&$05I#bYto&&Mcy%CuRA2q@44vpARc%XPw`RHf$mDy zftKJAk%`5R;XNDAM06x!mj9Z2<4-|&b0dN6L;CP|u;OIG<^LB#V&Mw?TNa|0ezeB1 z35QA~O-z9$2w0^vv0o)49-kP_mGaE-`7<{xyAQfMN`EC!n1DzAI=y=r9%LCr=(D(U zH!}MX-dY|-0>x71+F-`#B=f4bkhB-%>(Tg9w!;*#u?V@|&W*X3QdmCq*mF5@ncz~L zdT1Q5>65+;M1=LX6nyAr12%@JqIL#yuaosw#b-i5a_!Q#1Jx}{<--CMyGV>Z}*G3!P1VgI>+QEpwbB0L90i5%8B~yu4%7JTQlKs#|ys3$T^f> z#4J+>uy@t^?>&y@((OB@#~n8o-kI&uBa8EDV8vDtO7A}Z#S>h8vLX> zR#)AF8CptaYGwf9cl9^psv-`&p%Hx~tkReWN9eZ&Xg?&Oc%pl+s-^kgf5q#6^D!$N zHOBaGs;{2G)+Z@WW?jsmBiK6#;oQnY%Z(Rgj97J<+A9N;GFwg>m>2Ze=@eRa@-G5$ zOPs@aqoF?RkS0MLLK~#>tb`K9;Nt#!dG_7le_^{ zVgBJ5$UygeRWb?@s|oo-z*-m~l7M*4NcU@(U*<|}w7UihJzdhKj@~?xKrFH3_?gaE z(V|bO*>VYjn(m5`GHVoZ{gMKgGwdJK$@qt#6px-xrp5AuKjWR}gy8$)Bm_tqa}E4y zSTSB=XI|jXpDIoazRlU*vK`#vi?kS9q*%XYStk5}+?y9$gmY&E-1%nJ_!BRHJq1GD)#4XjOlqLtnB#4??nP5Mq?;%UKj* z40U#&maF;OAMS)`sh!9nhvAf1;t$GaoJ*N@Q~HQX;ETg#jLI(-;>@yFMVH}UFw})B zKAk$aX=1jduFO#PM*lio3TOCSp^0NPAAC!i>)rVq|3gVW>^yVj>4$QKjI(Xy=!90V z19Fmpk1efANumMY;(fENdvLz*X^6Q#`s>g1aPzof2owKyb#NZ>M*pAEwp&WY)3>{P zO-#j}m`@o$g-NvCXeYrpKi+=O@~PoZn@>I8x=weT8W_3h!dHKu%FM74t}njjc&)7v z+zcv&Zpd)dA`PouHVeJ^x=5FW6jJH;2+x;j8C?CPk=QW)@^iUyVPOns^%-uAa1X7w zc3rRV%JiNR{t_(_oBTmwx4VpYi2y zC#h$gwjPs)=qhyOug{v{Th1k@(EKIu^FlpgO7hw2-0*+mFLG%lA@5p~@JVYbip9rK z2Z&}zPNPR4K@*t~#q4z_VJ(Ef$`1+LCromYIDKaFwAm{q82ezL&Mi*8eNXy5T&$BJ==rObCga9$sp1$L#k{b#HEd@?*Tf^YBm>X>a$AfUw$i zvqSJ9pwfQ-H^$^Eic(>J;ekt|p7oA|LA71zB4vm4wrGD7wje^mh#qpRLXvn1lrX$P%scA z1s||r<%_{lRNCL{V_RA2DM+86oJjYKNRFDFAmCqjg_|Rzk zeCRN)W7ywvr2B;UHEl=CG+4N$EOAjvT|4gd=wVVJz+dx<*ZQJK@JExZoWU2pY{0{5 z$1F~oPUV=Rvhh}(-&ro=iAF1w$wsry z>vDykRtNABo2h4dGOGG-l#`C6ZqB(Q&KgwljARtcCwWJ4Xv^JlTGAHld|I-Ag{*#O?3TURps^WU@>-&bf?^*iGz=yJ;xHP` z@)o#C+`$jozGl`21pT=iK_g(E4;8Sw4BH$51fz+hR7Bo=)1)RZbR3ZO7p}xy7a@9c z{s+uxPQXS-{|rPxvp*yX6?Z9R@nk`+a^~;nG3!K(abfw=Dlw+Uk% zW^`TTpb0mBc_wz5Oe?=6FQhs}h3KJY+^5!KtSIbIF?wU$T^lnGEBR$yPSeMv${_ie zF#@`d;L#$mp47UleL``cT#8Hv{mt1Ae#`X#!6g6dJlrL3N*U`8%vM=nMs{7TwoRf} z`&qisbH$q#UU|-UDeQ@QKTaV(t!cGp!h2FM#M>^~?X8v<@!jQMh)*V3k3Xepj zL5qve;dP^^NuQeI?do<&+7ID0t*%qvb9Cjd zxYKWS9!MOLM|tuW9InRI%T@!rT^4}$<0>|4|71cWCYDE3v8lSMp<4VCQr1h^I6*_@ z{9^k&3ADq@){Q7K#=61d^LfKCl_s1G0%4w=QdNX3LXBLA60XJ zIN6(42DjBE=&K&cwrj^6BGPam@yyzM%_~#s6R!du-wAcA` zqT|GwnB`MqizaG)GZ}Kl4^Cl4Y<>VO#U-CaaF*#qh9=1E9?MFZ>+QP|uSA2J1GfJ! zr42O%7`dwG{l1RHsK#0rJIarlNz6z#rLv`FLd}guw4SDmzBp4kAxR^%-a2H%quX0gag`UBRWE`R@s^N*j-;L@& zHH5;GRhY?l zWQB3ddG2G`R<_jdrrV}QJ+6XP3noezFFz-JirLfNcR70L$`|E4#$g|Ub{T2(LQ>{v zaO?Ywk+^tWw4`K!bKeXTg%ZTwjC-sC)0QIpv^TB9$=`$McUw6vhx}*qUgR$e?ZK=GzxDE=LDm4PNuLY}>o@HWk$ zfH+vL$d=&rCF@hKw=1ruFdW>+JrEG-0Ji*=j97)!m|fKWgY2;BS|sr=zL=bQy!=zj zTIjejsh8lD#F#usM-1`}m1-?L3+4w*At#>{+=nl(uw(^_G>M-lb?rCLnCRQ}vN_86 z=C^q639TEO$c%fRY5V5*b*)W8LKCPPdS8!^Y0MkL#^5=G(>`j)_f#=y5oV|~S*Pqp zXO@sSd>g%`Bxu7u#nN>G5E*x&B^2IR5S-4UiVCw{r=y7Qt}?4z7XKUxlAIQaUUIr@ z%MHP;`%0qgM)1m|#(Rt({qsC>DPo3NNzaXVP1=jmw}<<|=vm2d=F`n>NHz|WBRpK` zJW1(uL4u#4Em7rID_cW+mBw>lcM98Ap5T^fzgn{`W0R+hck&H-Onr6u&K5x>=J1%H zYyg)u-w9H73rlEz9S&M*#e7vxRecja83x<_UI2~42=%ioGMCyj^&T1mh-;Q}RxC~4 z=?+?>s0|081tu4s6MDhA5%6K}^-WY34$~Zwp9M=-`fYYkK@3>cZ@6ks_H2vkAfR>$ zm)|#^OZ5y|KX&}GXH>_%TsRJT=rfk!xPg4hN~4IZfsj?rgr7n1#;T34lpzkaz_ylV z^!L`_WeoCc^+MVhKj7XayuF$O1G@^CxGc7!&StZJ! zo&r9zAQ%s)=sLD9V}>lxb^C;OCx19wW`o-wjU0a&sexrpW|EyJlDMm@MgP{MP2Q*# za#~0gM$K{;s?b+p?@@TxnZS`}w(WF%OR-Iai+pWFA>fx$OM{-oO!%M)IsrAax1-as zM{EEh3Kvd1U-$*tvxqTE=k}>}zxTiOQ^_|{{z_gly|$#s;YDjRnWZs-f+4WwfTLk% z-+cmoj*c-D4^~2KPR`d7{3(Vr$W=fSpCSaEIp4%aJgQ!qjjm@J6G*ONyf_|D!u2K= z*J!FSVF->6Sb%!97sk==U-i{SOUrN3l5qVj##A71`m?kBPfiEmuI{nO=9Lj3vH$CS zNDfc3ryq~e!Rx4Eli=b|DZI%0fqHq>gi4i(~jIuRfVR{8u?E$V^2W~TwLqF z@-VImg!4BCX@w_95gHfYvtmE_N`(i#N6Xp2>n%EU8j4lVb65}Y$EwjptyVX_?~r1S zj!3MKmvLQ0|6nIXs5g1iW*#_oelB3*wW<6tz%9d2P2&ndXzL!gBZQ#4ir6)|HF+B8v6AcTXXysh=yS3x{GhEQ3px ziL9H%3$(Ta5_55{rmS5%;X}Afm?fcM#>&YGGvxNLVMGQ=@w7G?PV;_L5{Rv z(@TM9K0$V-QXmJN8@uF7kTvhl&iZ;-kn#GO?`zr%gvSqyuHUqBQQtur=Wl_3!t5mJ zw0zf9ds92>wO3UhiY`77_!X(w`-M6~f+0UxW^TOuWNxIShfD1h=Km4(jnSDrPusCK z8{4*R+qRu-vT-)v*v=i>wr!htxUp@&`Td^{@0`=8>l*b;ojEntUEOt2BOZ9ysl}1L z>oI5`M+%fA64f0FbA6NbM1}%fKME={o^%hf4?ghH%+&lB9Hsi{XEo2?P6}t8p?MI$S9G=?VaJyZ=CKgBgG0oufmpN&&HTP);kF1OqYZ&|M+#7Xf8~QzK0=TZ6>Qf-w0WS6Rp9$F*UAG*Po8qMFSY^9F#|nqg`yi?0ITo_}+G)rCQB zJmVZdo&wq5=&g1bI23S&gZSh9INFX?qCPvuCDX;Vi(^qC%+{zp4FkfSNn)xjUigsI z&{A4aHsuT2jnJs_D9(i_1aIyQ;WajO?&zG}6$%xh9Q>BCzE}0^5No>b_Z^&=FP}nu zvuJ5B(<0v8_z~Wi<;w1&>(x!7oKchG)lIUP?fM28?}8nqocqBY)Vvs_PLm+vgPy>lZq8QMT?w5IgX zF}ZX81!KZKABY~3qt`ptK8zf^?bSeT{o4#GQMCN)CZ7s7krskz7PKZ_mnADKrn5m` zH8T3+T(f4E`nOi^U}6okn?&tG7Z5$cjq!sq)H!`fU~j8-PwF6?N0*!T<8%O&|YXidcL);(#2PF1FM!pS{DF2-9+Wfg`lyU#10i z>z(Z8Td{3{<6dsa?p%Lp94$lbb3f%s#9@991J!!OkG&rvP|GLpkXgpV|L*U>^jrB! zGr6?KkGdd(&Q8(r7AeaF1s;j|>SdG{cN#dq9un;af(!78{TVesPLMmrIbizjepqH? z*4gyA<%X<+(2VM88SmF?8sw6 zEJ2;8gR&<+B{nSCBOwHJ^bifKlzEGjn{2NB!*V0#6O&u$SZ@02L~&j5+b6}x`V|u=|rtYAl30@`wgCl`ALCK4agB_ zb2F4|zY7}Q;m}K27lh8(R;f4V4F0uvjy>l~wa1fAtwhwcKr|e0F_za2BQ0%WX68NR zxWWa-d1ANeRGHIrQ5{P)7xKIh4gkM8Zlo1qfb~x*FsUWam52>4X6Wft;dZ%w!?%7cbyx^{OMR>~xOPMA;gWO5bBKQF2t)otnVh50YF-$r=&!~bzJ{32 z=f9P|j0Z+9R_?4j&R%y(0^frfrgFBYBzrn!bSKKoO={ock#ayK$%cTG5Su~rwc`X< zg5rxMvR4hoCncEoLRH5&;{{3XXX&UErJCTF_wurFc4`3u!?OZHYyS7P#4Gy5ONg%v zmiRxtP z6<8mH`-bZv5+uUBbe_`x)Xs*^gl2wEpdmEu;|THchTRL+Ejts?5ARin|5&}f{e9E_ z?}0Aocj~l2dpczF@XN=r_<{W*C1WXAt&mz3gEO_4Kz`7c+*1kW`mvyG6=UnXkE&TU;X z=aW5AF}x}K!R9=S}85bMk#lxJgMbkH)b@G5theM!B+8{ zy2H4aob!mENq9YZ&SRJrlM!^EL{yQ5XqhhSPwGeod5SYuZ(Mm?Yh^eKvznMk1@%6U z+o0MC-5HE}`s#G*!W^Fk2JXpTf|c}i9m5d`57}<@iiIVV#ycdaMJ%+aFKKBZWSWUu zFY0?=5+roOxk{cG`T=2T@)FXYJQX6icDn){imX)s{rbAl`~jxO*%d+DT*A=zVc4_M<6w01_sD#q$m)aZt7uZGvl<9{yf(m>qFz3*94|G-fp!XT z*$t@~{4zn0&!MSwOBBZ%Q0cZ#kp=$!{9~;VCbGsaGB~7gNlt7N z$P<4rMvKY)r~M}Yo-@WrDPnMHmf%w)|JiTdtK*_M+0>Y+MOX1JRk-|klAH=!(=W+1 z(us|F1+y{IG3m#nygQO1&He*%joaU!5^m%#o&!$8^8N*nRfSY5@{gkgD^3E7+BoQy&`>)D}d7 zpZSXg2&HU+A`ex}AdUb6ogt*hEp1mfv>?zMfUx$MBRpHEF|ZH))3v&t89B`vQ>*>U zrT8PB`{7F(e(MVPCvV1|`s%!-xV8b;tbN^n+h?=Qa0U7^Da*YAbRq@YbJt!rk8BB& zcKUC6w3s{wcCZXCT{gbZGw`S($4WnA9}6_-Ml=;446QOOjWU1uFclbbRwRGoV-}|- zG>o%6Dc#&ydL-2AJ|3$<_da!rq=3p{k46P{Ym+7IXwuiTi|N;XH%SXW9u_9!wJJ!b z%LRU@N`$ZUeuJrWEsKARdDSY8M>wS5IpMKH0$OY?5h1%obm zB(Ohi!z!*nz)KMfWhH>q(=q$CsOhoPm&m$CDr_4SkxiJ#y*d7ipFmB9rWpqeM+y;qN z0x~hqzWJD4gN4t1Z}u0OdmyUGd?s!8zdcefxbrx?ulPogofyREpWOuz>uKqT&5`$q z>TjdN!w)`Z03Es=4B}vdK8lbI#@U7M*$-T|#QD%tAYEV%m{~m8R`3o&w$=haH;lfV z?I4%yhTB22PUdNs9R=)&ToVTenv)<_4xgHCjLp*I) z4@J}}R_fZC$zQ)CpUKW2Y!6{y>m^u*43pJs$Z0q*<<7B4^bPy=6U4R7d}WfTV4-m{ zJ7_0^ucsCQWpoJ(cqF*O3)r#luqrzGjvwd|?p+#VYwA?0Fn#R=Hxek#{N9T`-Y*3@ z5|2{PenN8A3nY+=E<;d3r^D`;A196r3oK-|6yH^xr0Tt;pNoYPHZaq8*G<+~+*k85 zh^8W=yTSNq$p|#q-ieWf$#{iFI8xXYrU^J*?b6gSfqr5(O8ypf9xR#rQhlS`lCYGz z)ZT+W0;ubGqK0>FzGA)TMrKvBjzdbGHEyX8h=xSFncVzU>iYyMNB-CgfyRwSzNL4R z&8K(Bm)+4wrRM~XYwN>*oMwoq@f7(d2qhD7UJXU~@Q|b4lVbe$G19&pACwjohOf~#XGPRZ$X-9l>?N!Ej-TsQNx|2PpRc`D3hE*f7g41) zh=piJNDtpDg2ky5#6&aXUQX}hY@oqb;8u~t*8O6K*d_>EhJCBFMpLuiO<~_|37s;Xa6K0qqH@i z&*S(#nSR{nZrWWnNTz0A5ah7`Tt!u?Li{sp*WzaAlA-_T{ZFT`fvccyMK!i}f*ec- z^<>H>#!1Hb?0t3rr@YRT*s%oyFMxj_zgpz^>4ov*#(DUzW3LZsL^|fC)3w#__qA!u zTc+EWAmV|=HU)#u)mM-Cj&@?`J8&ETDBTYXYc8hBn8EYAC+~%| zv-JgjXC_FJ*=K>Twx5yE+)qPSIi~X&umX*4Z^fLziw4Y&PSZ)*)y*<#6e_9qhl&7}{5E^ci@vX{zs@S1C98 zK9OcOzGa(nL8VeDv~=p|VW*CSzd2ri;y9x|bYp*iYO0~t&|9qc!;s;3Mt59cS}UL^ zgm_vSpFLj}U)N17wW}WyFR&RG#m(?SOf@9sS*#(^Uop!`>6~ z-Fus=r??Qi%Fx)a649W*qc}bpgzheS@yoCH#g>_(py56Io~SoJGChL5ub=DC(78<4 zpM)^mSB-%*pI=^+JqISI@SV5^{vM~Ock5;~j5nW>B}+U;Pl9Vx0~Cz|Nxe%Su}k}3 z2Qjz5E~&OLY#{e&PULGfem^5bwzh{$7KYh&rilt{z7F_n)V7}JZy(phDt@kYc%Y)0 zww-+JQP>IR7{_=_4hqYF!*{lF)^=Xx-YoGN90Lk3dYw8%=|1c6Pb}VErnmOj$v#f9 zW5;rKYaXS5`IL%MklQ;%bCw{WfF)SbO5G`o>q8O2KW{s`H7oa1!p}ofH}Z;-BLD8( zuHQF{d~bI2XBUK>ZQ<`gw0!uyh(8ezpV3S6mS!>K`INU1>mFV2*Hthdg7E0hidkn* zYWBm@y8kkC;Nzz(5n~CvUTo{?&bYHp#>3#^ocdD4XJre=n7-HjU15Z-9m}T_4v39C zXLidrEvGr0$W&75O&A87uIa~2wGpCh&R+2gCM6j1i{sI}2jHSm-F${2-oLkn9O3gh zhd(Cyzb6%%k{^(c9`}z)$>&Zj)F|Q-^JjZ}@B~P`=#l=YlY^|_$M3#=)oKmA>3s-A zjjAc@F_|^e%Zk41pJ4(*swRkK$9Y13l=5T?nwEgO!$}OsNDu^Eu#@5Mh^h843Msz) z{V8-5)Ky3cFH(L8I zBJv_qB!O%k#SXgG4+Pb;3@?URst+r+?qTj^G9fz+r@WuHXYL~h`utNTl>hffg7TRV zG1Mpgx3C{ikq68w>as@av|aD2*CQ-P`CQuSucaJtqnSnxrnACXq~YGx;;9K2L`RL$ zYJYT-=sR#raR0X9KLrZ&tF0e8y6ZcseGa91IA&0r#16WYN>0sv3RsMgK4RVZjAv+O zwbr&lZjw`)=?|86Fkb>*8YOoV#BZycbpn0ck~r_TG&iT(XQ)08mC3jDQ-;l|2A6j! zZ`6#u@8*;T2cUj`kh;adyvgE7D&K0yf`B_%wt!I!HE$(9{ltlAj^fTX_`p?gsv>RR}-B z6(tFXM=$c#gysnHn)FDbLvX(eX}Q`8C1%gNG=(k7R)yo@^MN}{tc577gpCw&1cJbLbZlC6rIDe^l_US^QFiX$k^hm1SezXeN(?3~c*&O@~pr`49` zW%fdVx!{ADYr%lmyd`SZiml;MmtgQR`(HFmA-x zMW0UzWUq5N(rq$$(V#EJJu)LT$D3qK^;V?nMbRv#Ga?<1uM0<5vR4y|i8&lIata=w z6E+ru=$j5z)cboBBon|S8$Zx`nAmVeR;Td2>Z)3ZDmvN70+xax?qAo7*FRg_u0xQ7HxgTg<_mlLZes=M%2;TO`443L_yOM^mw&k^Z8Q^ZK{#On!P%Q-K z-YM&I2Ut99B@1p%`_(ZoreSvjKeyl`<(w!7vk9hi%9)w?LPBhS~HfA zFFd-}H!+HwkHu|h4io0=6Nvw&8Rx23gjt0+q&1q}G> zoZCHtUGd0cxQ8BTb-V3c_7!Yy24cFND#HnwHIqH?$0H>4%`N=3VnE?d-dT=Vi`>W- zCpM$!5svIdfzt2aCI~Y`HK1%HW|eqmewE@y2`PEcXj6qZk~&{Cfn$s!j}q?9r&y z>u1pQh`@e=q{10pmn?JHZ=wxn0VT^91?P5eIyCsEUG|WCzMRpS*!bmo_?S}oQmql` zrE4*V)0PF`F8%do&9?Z@@9V&hGl&^i2lVuy7ixIT;Vf|$-Ko&EV{=iQ{;=7j|BHd; zJK?3Ia*w2y4~~)f+MaZ6=5-+q)mJULV+o=ofvM1UX2F{PFpd$wvPZdcbY;}f;A)EI zn;$9nXzb6saix7|=&LB|M3vB(F8__Pu3*M-4I;yT3bS6z}uWHjrEuxKk(TK?anPah)LN}09 znI7HM==zEQ1aQ@)txIql68n6i=duOWJjPvp%4vbO$*l-OO;+vBhE^Er_IDeZ0kI9o z+?pUa@fbOAAb*^U=|^{oqApYyvNltRQ*3>V(ewE08yKMahYpr(KYXra1Up(`A(e@i z5#1z<{_t3I5Z-nY0Go}#Z>$h9lrR(@S$_kLp)n?WbI!d=_9U*~dZpziA(}svknlY5 zQXP0Kk3Rwxe;^-)z;Jm}AbyeI^{g&)oT9gF;#VbOkjCmvRRrPD;9Pf}`@d%u<%DFd; z4?a`KdiO6>2o;iXCj=j9by^rBMVP@pcWWXdR5e$EufKmw!rK>_^X*QV&~iQ=rJSnE zMu^7f5=segibMQyXX3GtN1T^Sp*h@GgOP}a3yR3h{oV*6MD;$l)c77!({-EBeNw0x z)41b~eY_INfRoLGA7#g){q^JGXey77958!}@KNZ!Fsk_e(3>8iO(xHp)f|YYLx3=B z60ynZL*$E3hpq8BWu2yqiTcMAjrbzS}&Mu^dY1) zCr_UHn0!@;=(QZ=1InI>vsjXiOA64&K?>^^S);8@20>c}+C0hv0XJJRtDw64upI0d z>S_#Ui9SyQXKil@X{P=%rGbVmesg@bMhUW((k|O^ElDHLGWxpxnR)9fVZ)FD*5TmN!{BRB4Yg` zn+l@1Ngb`EzyGW}?k30{692-7waTuqmSjuglBJ)YsFZ|}J{Km; z;>8l{U|)UjZn>g$Mh7P`_*wd4<7uCT-#3XbI7Iaag^y}jix@`vX}P@|*n1Uf9hq9L z*Z-oqfsM8uaPYg?aj)FpHij(+*nVqDzw?Eh=pj?{wX!D2ckb5l{^?h;Zd34O+2gA8 z;-_&l;Jh%8aD$b8nh1A>CGszD?D4k9;w5+5MJ{sa^4!Q5&>eijgO_*$A0=oXM1kxJ zV9H|ptzrpXao3GP*8^rK-#@YXjLyB6HG2(awHZ3xG~++4Y&Zh_phYQ{*Ljka(?z%^PNTS~aI4Q?JDescg ze2cGsOgSk>Jt=RH(}a$%MvQP!|oL>Js0-{h_#>nqLVJt4!q*ML=We>%1Y4S03G zou8-c%ML&Cm{siTO61V%>)R4g9*u9dB>1J>7#QWjk_!x|&D+I1d z2b#4CdZvHI3wZ04AP3xWisAr&wrvG{WJi~aJ3%hf(ZP!9YtQ0i$NHu>Ng8j1ra#1C zTvJ1~FWY=c`43HyI*-+vCq&I>2Hd2(BW-dN_at zYNHV*-*K%>z`HrW?;NV|j-Rp(Cy_oO`V_Mpp|0QutHTcM;S1zz?DaSwPK6Z4kwud@=rH|eP+sj#B%|?w%YQm~f#Qem8%U4<5f;6BEmW2ZwS(VwU@YgT zHxuMqEx!;8&Jj(Mb%h}_&uMVZHMb;-?M8jT@SYA!WzTWJh>$bqGRtS}WZ&bVAUenZ zpEoE8k0yC1%rLeZ{aWL%^%7M&&t-SKsZIknn!c7t_>5$J)tW}sUSkOo2DH=VRU9uU1jbk_yZ7Cd!FjSd; zWB25rxp*ouoxq!&P&$weIHzs~X$PD4VLdr8te zMG^Rc1u1Z_NF_j(XRzEzag^UF9ix|cz5;{CR8u_8?jy%|30yrF?~CR~$aL!^Sou;r~VuP_>spetdEF%>6zt*pba z1m%ts4KCh9=e0eGcj{w0T}X`Kz;RWBouZP9T^bK3(d!Mp2O_7Oy`Z z4Ax%F8Ld6^O1y?a21n0z&+JAiiRm*CZ24~Ry6csjqaE6JHmdkf!7_^yd!0A}A&4{0 z6OB-3Q-azpD|l`)O!Fdx{n9pLoaj^~~AHt*@W{H|i;zU~In6N$i0 ztj)0h;7X-o&6;~Ytmuf@wRpR5%88w;hlO>8lbF;jdBf;Lc#DZ%&_(G zKnqrZdOeiLb&wJDV=Xp3e1G#X4N4|j&Vj}%Bv05ebo0wP%K1x4Dq&}LFNo`2JWY#R zV>-D{=Wjl1X7uVagQLh1Kmb;YLNYeYV84FJ=gwoGt5VpjHh9$Y+zMS7c7Vf;6qji%R`K4)#h8$lLLrGcu2BUf|WSe7psSw)d-= zyGV(?JV|f3vwlJFX+Na%(GgJ1spi(r0gSJDG#s*Sg4f&~5JH)ptgCcCgOVJ!JRru# z_|s4e5rE&>xswL$W0xktfbz@La!kH1{1wsR!RAA1tvO6r^#`R6hvpEXgz*RXneMNz zx-NUH-~`vZ+;bXjXM?CsSJlbS27~32Zxijdpc_@qjgV^j>7IG#QNjKi+kZyi@;c;6 z^cT@$S+ljrf+Yg@{XC|5kVeKP~P@8XM(aAgV3^N5>z{`nT0DH$2C}wb}WGu*x!c2-i~}P1=_w*di~=!twdf@$S2O7DA=r1xDecY z^}{DEm|5FsM$E}3e7(xy!DL-zvX;-j$$F3w6o0I zGIKyowE%t%=dfoPHHB6VxaCwl0hbDjLzUk=JvD5~vfx}orkE~noSCeKFE`3+J2Lkn zOyN9A)h{UgeUyG+YLIPAVUVq@k0v`vtzDsyZI$w4RRS`{L;Sj-WfH7^ef_F~*s^Ch z^*blIZO{EKVut#vF}gTDM|EysCEF)%e6yj+k3e~9U81h`Aq(|pEphe8=n5-kr|Gu8 z+`yzxXJ(}dJ>m14(R4ZJ;!ALvf`=bgF@4nW5FXMls-yn3GQ>l@SzGpCoJw5e2}Z1~ z#6jwC)F3@K6u-fPRY_nu0&zvOisE(+RZaiNa|RHDDIK7gu&$DT*`FjkEO$&tXF4h2 zDuK!<%$58oy(24WT!2z@PS6Ci7ai}BX8359Hs2;o@m?=qza?gMA=&&MC5O{X0Q!{K{vSo1QvVKskrN6gdPJV=~ceEc+G;Ckx5C@3DW30 zS{vC(ZWq_u&iWgLn{4anr6Pd@T!W4tD_d*_UDBS2j?vw-;=-1EvGwyXygV7gA=F6n z!?&Bd@=x|6w~A&2PYx=z#0fkOkGYil<=^Z;0rOtGp= zI~BThN^~)wC)`*u8l^SLf=aC9QliCrvS`T&(bQvkA<&m?-mXR|J(x)J;5c=#Y7y1S zuM}@cBy+q_jV?IUNlkV{5e$;_L{N>~6ej`23VVz&pN4)RE~!5y)*oOk1(2SQ!bWbQ zN)?ia+mv%Xv5+as=trQ;*wgxpsU9=0!c3d!qQxo3ZUOI@;02$*t}U7F%6qU8aO`Hb z9iWupi~Mf3^<8^{+Sl6)mx?t}88|rzSN_;s^^|e0O>z8@uQwjP0;#t9ePF)&`-E@Z z|F3SqGGVC^rjl+3;Y?d0N-EqCf|?1&gi^~-3rkM2MLI=}BqG1T36epR&84`*3Gxg= zbxd^qA(Ff)ghq+|M3kgM`^HiknY0d8UaLuCqrxCkI%ol=qQWRbCD}mb^j()qcEC8z zGkjytaJIcC$fN@8u+;BZ{eK!x4T?mHP?m*rFdzD6tmv>~({x7`(NCaYPX3K7QWmJJ ziI_zY$hKaQVDUC5)zBqk9b<^06dohJVWt1site{laP42NPw6r^ZQsooT86Yq{nZRt*L8)Ol za4_S?xQ2V2M~N`79Z|)el}c+)c$gpR!G?RZqc7J69Xi|{GpTBu=wvy-NfU!?LsO~R zDsUqMuG~O1&QVghOXdfQ17)dhf$(7$glh%sXnTCFg+7$FJMv=XDA5^4Kzb9_c#mJM z4tmJa2A>DQ1Ez-C(Z6^#1FEm)zc%cc8qPESnALQ(fIk8yRV;;fH^Izl>7-iKbM<~f zjy=I9RhQRBWI&v*sA>)2gFVnvSMEOgzp|t4Z{jL7c?NXif|oDL$9ZT90V80Y9AHa5 z#fADmKn}*qq{8P3a6e{-v&#IK`4b-LaPD9h7H6-eV0`B!i&a;$l`4;al2a+I)J_## z@O?PQ7Wu-xygh|j-v3oHcw{F~|wIMGAAqixK1`cP6e z;R#(aO51yDppqtQ1o|BnGZC2SaVw2yBG8lQa zHl9gQHzUcTsay}R@iz))xXCTMN*~BuY5`dty%(pT{U&e4dp!(#_|1!tD6jZbWr%rU z50b?`>L<;3=AJD0n&s~k!-!3bY=I)hzMY2h*_$Gj=^~H`X)QDlbX!C)he4YF!lJLqsl`OFG}taA!s{15{Hx#vjD*Z?)Ql8sl0vw>lLE%m zF6Gw_NA{l{cI!YKB1?u0U~>w&TXYUTyCAMvt zW#j(Dp7mOa*6di~$|4D64yG&2=(_%>rOAq%bKpe;C;6+=GPxz^3CKg$=RuZyw8+&* zd&pW+^banE6xrsecbZoJ(ri$edaLa6scl&#<7ov|^XAu^+0Z5^@)DM15bEl!i_41= z2CMAGsoNP*m1+6+^|}^%V04NW&MK@oHx(C2wfs|(@Zutz(!$cw+RMg&A#W7!Kt zi7gh+%B#mj{?l+87CpUFoxVh3qUFUeI|B}nzAh1I)_t2ew0)Uk{m8>==bqH9QLGAy zP6#)r(kGzPWcZS1k|*&u;B-Ugn!q}Vv8Rz4;EHjg3fJXjKapfk6lLF~=;Hj((Ziqk zjYe(^m+rKJGNIwkU1xVf8&S^|MbsMMDy}V4oJ;NCstkw#b)wZVO(HkrDJCx&QF>4! z{hKbnwudo zVNj{9D$3N~WLlF&9L9O75b0O0H^u8wXr<*Q>i50&h1pANPJ6 z0xO&hfixX8c5RomZ*#5RQzqMMY9r)j=|!1^q`|U^P0^*<@h9?@dzIsL0_&^z^KcSm z_9Jr1%U)v=?pccFWR;;<$z{lT#0xVq+0Z5b1P`f|zwq~*-kE-JCd>S-t#;>H@+<5R}ej&7vsY)RLkc$;d6))Ma8+ZxU1H)sztt<`OgJ)vQ4QC6Ix7I&cxy{uvvY z#c=Zs5!oAs#c&CX5nFKe=`OKQ?!P_1L*HsxeX`>7LSNjWkoiigAW3Gb?9 z>ZBoQla0mWbMo0`C=_36Dr)9-lR*%T^u}E$LF@SE)?Spm}DHc$#1_xKef)btr z5ZI}!WG_l&2h6Kb^HBUw%s5dqUmN?!OH5p9Qy7^`LAg?9Lk2&a5Pz=5t!WgNx&h%@ z?wF=#38-pjodBFq))NM@P8fukoJv><+TDo4qXo zA5xjxkL8)#&GXZAy49=`zI@YkUcu9JfN^E&S4gh0F|Trxs$x^_eH<>C1Y4!%B}y_s z)d&ORPO>5a^+cm$wt%v6lVY*F{gmjWyNKdlD&Ci}cC{qMVJ6SL#gg(vetN-^GAC@s2}SpEz3PQq)GV5m12u^V zRmi)HaVh(9BMVh*YkBlZYZ~gjvUH#vc?pYp<*f`{NJ3&NjdU+eh|@v}O;(4R&aMi1 zTg(mxyLnmvE{*j14TAQ#1x<2#vDyJ%(Ra$p^2{tXUmKO7MLnJbr-TF=DV~VbLYG3g zdD(!SjM4crB4FXKjzO`kh(p5URByG-$pV%67#gb7B8Q6p!Auzo+~g!1wJE-W+k_~Z z3}ZDDPi0r<$Z=V^ayt#>aBA_TDM}jBv{DleNJ&`>9OYo=Fqx^RVy9xxGVU$4>C5JT zPWw|!mqfsX{1Tmg#n|>E6-&#Q0&=;BuM%)f7<~qzJ-snEmV~l&GAI|$5?o)KW_Bb2 zTFrn#*1SPWM*geJ=~B@;Tu^=Lm74sZB;rMYoa{|)QhlU0Aw60Cz}rrRwXQ5P@E0U- zWpSp1f_^W(ylq({(fmSrUo$alRP}}~yI$3UCcDR(eTA=7kF`BtwmEq~pu{+ogCvRyALcf2qe~n%+_@e!&RU+$V z?cCt~{@KR2bCXzz7*Hp|`j}b)M#IS)OyLykdoZpP$h>-YXZ45vabxpw4(_PYGh#!A z{3vlLmLlgi{5IT@21VPnAK98c;2optHxsv}MF+I>J#{+WW+xGkn?3H5#a}OZDo@Gn zGgX(|3sM@dMb{QZue3`&ZRLg`g+rJrHa|+2{l(=z)#<^_9j%&B)M)!C9KZ@kGxT5X zDH)cPS%qZdsOaYRpw+9X*+IDG+%v$KNto|95e+!WF|Cqy1h^8X>)vwE>l#W z<}P3D)F1L1ujaDatAa!ADzC}&Ge!5-Jt*kDui|#qKPbM0!zu4KKwi;P(X}>cOUqR!M zDqo}wBquM|G=5sx_)xO|=6%esH6wajcT?={Qbw|tz?A4gaKGQ1-d0PZRv-H>I)Xj#e@!x5<)@8EF zr|Je1GId9q=kxX2fU)T0fEu)SC>js!dUB6HH1dYluL09;C#T(f-IXrBMR%Nw9}KED z1(c;K@5#H2$8jmu&l7tSGB=tLexmyKPV}Gui9NLozK|GxMbETue*5;`)G8QN_AyNK zj0UTb_PE>2vBqO^{g`)^db%YA( zRB4>D15(h8{lYmJxH64~_#C-}NNf$&_)sAg+i5jcrdXbO*-tgqxJVI| zyLwI4|M0@D=KrvBipKx2>WIdFxZc@Qy&*18h*qjnLte~)M4D@?#wtevRoi$Ty~`3w zLL>o0)LtXUqvmDcP9n(^U#hcT5v z&x#j(n(V_oPSQMTQ7fBpmhn)f!9R5|mqy zvi~4ylSvP+$%b^oXj;fDtGa3-y#tM1HV%xFmU>1Mn#?!kNN_40t)yK#!4g(QBrid1 z3oc+m2S<}FB5I*SKj@?KRG~Wh-;l@3nW&(fpgosU^noA1dHOF-n|+FlPGe-@*&^?sJXMKn%lxm zG%iurHCMP!WSM0y`ING=nL*@@9_b-l>dRmNiX!4|3cXd{>3N##zb})D_0c3@*&6X4 ztg-s)ym87E1k)Pt5Sm;K!wkzBSwUO}GE%$ExoGAYLJWb8s!4lbljFsjIy^|O)~V4| zV(k&(`~;BJi7+W%ofVZy>(ykQ{3O&ZniL0*rio5o$tnarB!yJ+3v)@rW5?=*O=D>x z6$t4PR~M!73v7A^*C%^<);QHg^Y@qoIUbjqn`)0n+<)`%Uem@GW|CwDAF!2ppkIAV zA=s48u_(~{RHUC7J8Ed|f=i`ij<4L7F+U7TH2CGy@Y&`^NuYg}15h zL(|48%t~eOV?i5bx-9K3n_T6H6Ei~NgiJ2tjDs^jhX`P-HTXW2Mvd^k=2?!hTV;=o<*z& zvXP~lJd)i(TAtz!do@%MpU4M8hWhXCd*fk@#7+itde5{GX?|kb*P590U#+*>6ETT? z2x(WED8ye@PFpo(9G`P$9fs0s?*(JdjLZZEHwaHCq&w&{zZhAe3?3>U6AHG`fBK{# zKULe%cyZ4Sn-+WlTUj3%izS^z#7*yvx^Zx_se2h;M_o?WP$Td^@`4~~aGU=$X4(4x zDqDzS`T5~B!1^jw{%xUN|Fck|Bdc)T;ApnI4*`jkvlN!k&H?|N4qg8*{8KntHv3YL zGXs-XBxV(>zoEVThr!-dCVf1qoA6AoI6+$^RoCzI4@mL;XNokE7x;_XbVd1c^D4B^=%Ijmmu&n`7((+_@~$f0CnGjB!BQ@QXgf#s73 zl;%Zl+|=v3U)&*q7n3`)r@Am@Oz!b%<9FZARyVh?;kH7k=)!`}ndY-8$jr*eZX1YC zA0wpNQJajIQ(uY{=CB}8FOFILAiYFOoz|4-7j<#!0Cwa#ikLyNGd3**Z`fSGBSNJUf!1AE6fivaoBC-|&|tE#h}Jb~A+J z5qI=fa7(2*L$qJU$PvC-rgPN<^6ZyL7pu@j9+pVe4B_$=)X}IG8O$)5iIlF-nbnxWveWiLh@ic5SB>+jgcml zv}4KjXA)=~^9?_5@Q7L~V%OhxX$ zt*HPCqU6y4ER!NsdG$c@aNUzaRhLMLd<|c{YR}LBHz)&Iq(N+s(+7`d@m&<bKniv|BLJSEIfRXX^KdNf(S z6GQ%f-

wQ)3&smmUYO$(Ll9~e6al@+2m1j0Bu2?BDOx6A}<*Q{xb1s2OK1p~c z`HP!^O4Co3Ot>WNRL1Absg%hW<&Jj7O2w0MF#~6Vv6-YK_>XLUQ(R9wj)(LeKg>A= zM2JLty3n#I8=MT*j$@zZ2QsdF#7fu!93nO*8-GeVXMF$RR>S}t1kuQF5e)+u2YSR( zj=)>{;F-V#waXqK49e3-aRt=rKy3b7SX$CT3L#9r*kq6#Hboc7gmd+Rst61m)pnj7 z;jUly)^nMTa;!&zAFCSx{wMkDome{l_}x_ItzuCJ?Edk{4s5rn%y_WT8D4%9-B;`e|1H_c(_{EfEHFmdRMO)}c zksVZUbC=ap7YmOpA}s-hM>(1TF-O&mnVSK0#EKNhCQC{IbbF4tlK~b#hGU!oKk*+P zMx%blkzK8mbI$Aq$pF3T8E1Ci^o|GEHNmqECMW4Q9!~^jbPc)+Ha4UyHQ%bt&3t5n zzx_@6FD>n}eR^`Tg=9%dqhoQ*^c|~OSz_r<_+hZ@8hV2w+Zy#!l%O6?BO-9NXwOg9 zY#Vh2tX|v_-ZjjzyjJx^p*m-G(Cc-^dPg<)ZT)e;37`URf_4p@L}j{wG<`2M_VLJ1 z*)Hy>qz=p=bMsC@sFa~|r>>%O^Qz`F;_Z=n?`(vug!v?EVSdAUc;B2A@!s2b%g=N( zQL`0N=pvW_krf$2wRM}+P7ZNWVwLaZ#PAB3tQa^ZmV~zTU3QHUqvg%65`Us0CWVQR zq(Du3VSdlMk(hdN16Rm+xUMWBscJKft8En5Q>ZkF7lKx2PKXc_GD^xZ?i#$;wCuP` z7!eQ&DB$+GCU+1=F1u#W(72;vd`Np1cQ~?`8&+zDxHP#yG~8zOwXFld{W{2ms{&qF zV`TXI1vjma&Vgo3W-_Hgi~_( zxGpdm-RShVXmw%LKUhr|B8C{fxpwysjmvWww4gSrFI&NL%07ZoA2AY{lX#i6$bw4F zVl<`K=yV9U-EbV*7Z?a9JahArNBuxzVzgLh3(I~6)0(g)Xl7Lq4Yizn)!tY1rbsCt zdK#Zms5#0L&5qW?5#HEdDs;}UZF{k@x+?CQF>IAo)K1+DWCy(jO*7ai)w;bC%T@qI znY}R7OBU9|c!Dx_XWKBcuTQ>*feEYmg6BJRni*`E0g-Y=P2rGic%TAUF92tP(2Hnv zf~j<>5{i#v6jBu)G$PcxImo?GbB)Y+^5x(cyMz~R0|Hofg9z&Qb3yW_`v24|K?Eh+ zL=j;XmlpC9Kv@H7O`^o9y#lx;2XLAsX62wyapaD1Dd>8W?@qFMNdiDJFyvOCqDf*V z0XkWV%>F)pLiAd$ga4@klT55Wy+^xUwg&qj&Z^8wrugFk?WsQoMW6a;a0M-0uC73d z{}Fa)j06D9^O)yh9hdMzhtBXe$0axWmkRLAtn+E(d#$P{SyqM+G+%qN%l28ZQ#!|>sh zgL-ro19kU30NGsnK1RKY9K7|@&{e?utXOVmGpxOnLtC62QA*FJs29otXEJEx2oQpm zE>N05-;1NGW<}NZ){6r;LN~2JU&rHuoi`@aS#CzPTtz$1va8;<>!Y8J#&oIeJ_m@$ zM2|EQ>}<`ehJMi}|DrSQE`~AgE1V6+26YUEN=IH5^S9tTZw(5M$IalP%kONCyP)py zZv-xqBe25YWb?~aC!6n z;Np18QM}v!f)q`|6;&S^`kD)+hVG?uvo$P`If(LYD#1nS zt?(>(vT?Yf9anikBG4}*zNB?y1dU2%4PDqvFnrS~w^L8+id0gyN|nIYa9q3WDSaNI zk5`M#GSFDhh89Pqw&qSmE5=r^(M!qtLzf~*J0XQdo(!WAqAf%h){I87UFmSxXvRrN z75poS2Y1>F)?s)McOtTGU@MggCb}9=FnTLTa0d>7$g(iN22!#`NP5MAkHqh(zVs$& zyv0>s`lkChZLs&j(VaKJQR6K>Hqwv(JZjfI9<`5FJ~ryX-?IcP9QEm2F*^@@LqoS= zzJY@*pZ4iZzyp&kI2Jh5>>1|dw2oOOOJm5jzua#_HH~hpVOQDcR(Cayd1a|<#OYTo zNRP;uh*2Xtb+ahc08T)$zZqBoLq$`UuI z0->x3f~~xqkoqQ_0qGf4ctz=EQ?*nE?6vn~Z%s_~Fhf~C{!L71pd_U>)uxefkfx<} z$qd&^gx_Tg;?AUmkTue1{e)hN8tlES;iIavb~lL9Jo_qOddHY>C36No*a+vJuJVwk zQR}-1XWWF^HnA@_ucMAL)j}SW=bLpx+7~wC#wMP5t~t8Ea99-D@;D7oqs%qvd@0;J zPnlI%_^4VWdsSl+tO#J@B@cm`9#hp$! zgZywANG|a~h0C8_(mNo@jJ(=ZDB#IkzXE_^DO0BrU7t^EpS|o+hZ#M`?ZV-#;0m-_xOPjDEgBV#aq_xQI6wXIWnP)~JLE;k7{%x4qC1--e>29x8SZ+m^C?65a@&xf%{onYj7a>}`+E6FqV z&-Lxy7cUQkJ9W!HS$Teus88iUo(QE-;^&2LD;N5q6v6A+v5cS*!abiYa-)E=bYyM; zUF32}YEH2HS(|MG8s+8Dvu^g(Z5FgNMRJRk*RorT!oaJd-8I1j0*-pA@Sj%|6!TLV zIi5CwVFe6aczt*v_eVn5R|X`R=}~sOOUK4Ei=}YNfvrF`ng@hpsdCCEIzru&*0?n2AxQ-Ola>Xk5c2L2VT$tGBti*K~Y!f2i`U6kJ zSqxKi?l46);iUwHFW&|QDmF{=`MD!~EwWr5c)zkHY&tpU*noOToVXQdh>jVkOAXqE zM!GHR_0f4kNy7#O&kv=VRuM}-x++^ymvF^#QL{9#RcxTbO0q>}- zS_}}tT-*dWwuw9hl|hb^@K6bCg##k6T{!W8M61pKbq)%i0(Qk1*}F|_qyAMg156iy zaW-(nO&4k26H|cGkN{$;^1-K~nxv}yM79UTm)|XIXKrsja|`>Kz=;1mdV>&`2+AGg zjgE8dXNYfw{U&hz3ZQi(#1vTh%nUhmUk);#Dz3=Ah_=3g)(M?7fyJkOEen1^RA{^p zXD?DmuFP?Vh`|PzK8x-*4A5zaFtSg@~>*Jz&8v+E6IpuKAEK`vuL=DNka+J z`af*WVBE@P!N_03>OsTG%w{b5RjnUNkHeQ)KzP@hw?xxT9W2THrRENKg?9?qLZw*Gr7-FXe>gDoZ_TyJ0XRW^hWc~2t} z0MdcIr?{?F^622mabI;z+K?)TZq~z=hCrG{6Z;i)vC}oIKGRaDK+T7a`Fd*98+4;Z zqswYOr&}rNx%Z6iikTHoi0+WxCS7>Vc&4bau5bjF70`Z;tmOd(_8VLq&Yl7f4VjjY zy2Wa+?C4F3U1$8W8kWptR&s+;iIZJ;?(;25W;({~r&+>(c)W+hbTCmntPOgVyr%(U zksMEw<44S0QOb~5Ki1oDB%ewRL_AJ}_-dCKk!-*-^CRw&oNldx|4rjc3{hOlnB2^i zc!Xh&HTk6WaanfcHWU8cO>+*Xn&#NAt}%}(>KpD%y-Eua{;V470*2_r{_{^5`C3kR zj_sM#9oc%leRzEEa&vR*;J_fPO_tVBo&=SnlV`E@Ayyw)S`v=NERL^wB6S)rRFL{m zOXmH=oEh9HflUTT(*(WR**!k+x^W7?9yrbtyadJ{cl$JGO5iw{PE+_kP3eR-6B5{k z*bZ^AX6NB4_ElhWXdZDHvaDh0AGNl@=zEN0+?gg2@SS8ngr44Ag)lEX3v)w%>-t5a(7vq6Hf*hDdf zw_MeZ$PIht#(s(i@@4S|BdDX789Y#Qpln~gI-UA@bEnSBQP5#=OsH%EdBI=V4(Ma~ zTyl+FO>J%e7A;-Gz*LnrB<_7pEOU!CB|2&8Wcl-r4YK>7*gDzWYW0!@byFX(E-W=zG2FAT+4JeT{XI(;F6JDb$oWiS6a5l}6 zh!&S{){Zf%2U%-4SbIt!HrzYw9&76(8nL6;v~QS19sd^!cj>|vaN#3t&wfUM5K%q%70>aZbY(wPiV(03o}+YaH#!Z`fSrh2{Os|GNR4yC4I?6C=t91tr|}id6$;B` zsen1(z`;m0vnK#469Il94CZbD`dK)d1|T^Q^yhqx?z3; z3+DZhq!?9cH#5GS!{hDU?ZZ27xW-%He8_Qb`E_T7{Fxz5 z!7ND%;Nz1+Hs@(Ye|aOXO_ z{${}uPi($^&AxcySw`x@!~XDmV{`A|_3@Lf7dv~uJm1PIPo=x0p5uU_#HEttbwFn2ViQ*stT~X@RpKpfaB|B@B0uK)nl|991j+S7NqbwH z3zD1JrCilakX$GFK%QOQh5P5cJRG*LiW~u!f8@hsTiAA%#EWtrWah_9bnBSbw~S|< zF(|c14t%Y+)EYhci$hbp5tlR3vpzE_b$L+cj5G60VW~@^2|H1# z*@b(CXw>DAsAoA~(;`q?3Zx*7hm8`7zf7c1{4u;-UD4+xl}9IpD9#AUo_OR%c%_~l zqp5Up2}Lf8OHg)^C2=&4HDD2XeC6V}*UW6!q?I*0+qJcYz$>kAU$_`v$-uN%^)Hi~ z24SZ+eIT~nY=g1otFzw8pAjegR?+p@qC9+k@L=kx$>{w&EW9qs2EG8R z|B1%`MC1QbTpZP|+&w6nm5(UhMBZ z+uwNpLzP2PT5=qX3<(hpO~fGzZBi)F<|4lFWRd*XD>y}fd^y4cGC~d4uakHbb=TLX zNwk<+LBfS7o7I(0w76h&r1Qa(I3?F4ZI&H{uo7u#O{DWexF?dq&hR*X70d$(k-3R$Cn%frXAsvq`V9=>>a_`_f8M$lhp$rMAPG?i__ z=Nd^}^-4nHz=9ST|G60{#TSInu%wt8B$qAL6_KEPlCCdT@=x6Wx@W zXli02b%%5(=jSFmsum?Df+eeFQp^mBDb%kruYz`OIYDo$ZZ*R)b+cZggXCDyvqSQ| z62k#w^q!Ig{&e7v@|!V z!Wx5Q;orHpx#0i?MTgq2zNUUpMb^$U;#Um?@?}Ui6R(F@W=0XE*4K7OH<(~^!Sar> zpL*k_^VMVVXF}0MTzes&F2~YE%Tby8s%X1x#XlF5-wKZxt0bKOFzWI>nlV0DG>d2EE~Q$BGN zVJ|p=TLew^PSHN?JR~EuFhHA3poC6O<15VvKxUg*C^$zTv zQ${b?+76!m^vWkdx(eyXnNjJ;JlUp`12P^_%jkHVk3t+&;s0CSxQ?BHwAJyeW-B=*&AQWN?)PPXON0pc0W+Rf@Ud&-{B&b` z=jHxZHE0JbLHnMUTA?40kF^qv;W!<2&?wz+*Z5~2I(L@C;lU|Faqn0Hk>mN|4b^L+ zp$#ao#$y{phKsU69$j8U>!9@#iOZW>*NDy0jp4Q zugQee4la?X-{>w7k&YBuplEOrkCFkV$!ry;S~NlHYCDIUoAmF~osDM)K{K%nms>)u zb8xu7{UW=gpUesafzT+Y5a`_V3F8fiwOn(yvp1IV$6TK2KEE%5o6^!A$UA^`Q-!Gj zH+>oB5u-V)!opp)*zBAG+HYk;+f}bv?Lfg6u4tESY%;qw%_f}F z?xa6#N^jrIx*#TUsXaW}=peaGGd5(NN#SU)oF`JrYy-c()#>&J=(bCX7<_x>zRlQ@ ze44>y!sn^xgM%m%cM=thu?s95GxXOw4S_OEFq^H(iDLr&_PT05%8zU|>IpmYdL>uF z;W)w3YCGZUc;y|o~iK+Yn+*d z+O6#udYaq(Pm9GhGdNq5c#ao|wBpTY<8*DVRbbPwg=pQrjHE*#f!D;179& zH>C9IH|0!ny8C0E9@W@K%3(-a?FH+z6O;ipOb?oz z0)vv@Ld+OC;wDT=CvjsRjN?%>zUG?h6sb+JhvR^cLTnx_(@7v$tl5u&}4FonsSZ|Es~gmg&DoQ>CHxQMBn+^d@l@Q{S-? zZ!!RwS#PWQ%nOe1RPr=ug{u!w_VNqhRSRb#y}2 z7mXLyqr$9Cs?;Zo4zowSN>w=Fnt-bPx&}1%otOY zPud7`aUm5|Ye+`HOeN^oJN%`2R%S@vE$FvA`Y8N`*-lr+mQ<>Gq-{{JK+{K7zV2yc z^JaZUk~MfU3`gU%Y-4PI%#vLpT)e-ryR-e{dX4|$Yk9Ml%}ABaRyET_FduA_^VNtl zJw{_hZI>Zk@Tce`AaWQ^aUj7D1}5*y_p@Ff6z-kha}*25-Xfnwrr<=*P0J!vnnA{9 zkGah?=cRzL_-}d^m>?)mXOY99*(5HW^x>wAFpOo_ifr|Xm!Kf^3a>UMGCH(N<~x*| zoke2{#U}HDa}#qmmW*VCQTMur{^#;mIHJJnKyE%E#P6B9pcrz5Ofe_LPb}mZ?<+`_ z%%f;|{2V`AARocEXt3D~Po)L_=cw#N#6^MZigb%bDn$d~WAYpfIs|@{Y&82k)npJ%{ zyYljnRb76*;_~yIAgu}w@) z+v=QuJ>;xx4OQ1VMa_Cju3u__1&3&m;Lx%WQgyVZXt^hx6ggHOOz#pUR?1H`Sdtmb zWzu6CXPAwC(4r(`c~5xHhJG+f1#BUVD98-~|72|RuO;5YTtO^^Od&UWOfDjV2|O7Z zk2i;Vmq-Q3_fAo2ay9ss^Z;6c%^D@i*sHD4>DdRD3}^;y60`JAdCf@*YD-7$rD0v@ zrc9I4;X7#13pM8Fe91?~tjkF1YH%0^ezY#Rcd8kmzx;Y5CHA2=)&Z@3yZ%WA0NgDr zs2!I-jy5ruQEfMOP`mA}j?9%{#96*V)%HwdZ0^*G+H{(52Dx82$o=1cko&U_G9OH% zU}OAP9KO$`6?kM%P%Yn>J#8GycfDednK@(pDSx&K50>#T%ABuR4%h9^4!r%0GxC`S z#OC~%{a_Sqr)_4IJ(PW^*_zItsStm?XxH@Pj2ox1>xN;PqB;X3d#R_6#_1WR(WIL+ zl{rTlHC2o*q5&EdnFJXIxx>6$Oeu08@OZqS^7}aqCfntJR&eQbB`zTKW4c!*i^g^( zi8|GFJVDnA@cDlNyy*_!4&;i#$bd@CYue|xTtsktJTUj>=xFIJS{J?9X#RKD{O#=; zzgYkdoK?6+tcx#*B&;r#AA?}Z*$Ge5>K}So{)pMR8(uuYDci{8TE@mL?soe+*ecUhpV*vBk}(strnDtW`v~Pk^%$ z8!xgIArzU2z#CUYIztsO=kQ{q$8?FKpR_`?gMzJu+i@h*LUysHhX)Lz7(4VnMEdIuR2*WE7{sf3}?FTP@tYY*SXW=m)f6rr0PQg6dIaK5$(b znvN1%PZ)v}6nkd$t|!+)O@a{wcQDml?Zw9CKQ^9iEd;fnxAqUV_jW7uP~!zfISrod z1-pBPm^6+3FJjKi_YIWTCPU#t)QQrRx{{0_M#!$YLMm(`X;qdIrJW;?-dSB}Rb)Zx zHCdWER@xqR4u17{E* zUjJtaSy=m2c&ic*V8>%v+hg*T8cA67Iz_`P{wV#JNQ&olxM7m0bKwrsU@}A(n=B(x z&+^UwQia_v-3&k+T}I)1hi4y-l8d;@5a2Fo1 zdBl269xCA(93S|nf=Sb{GRBAJCv1__G-zi&Fcf6Y)&Kj7d9`lw6V^UpH2}a7`mUjl zV1k$82=1P^7mu$!YY$HJhPZ(dTl#&4)d;YsSVYsDVZ%?AVrJM}qFWlDD*OVMpNW%t z#eAcedYjXFJt2xW8C^SDt0xl8|J20Bl?|;`glw&6P!lI~wqYh3IdM_Li#p-Tgal`J zNFyWoI?9UKj;g-nL&mM1tiD1?tqG@!2!9P5ULYo?qmD@|lL=XfnPzsL9Pe!ZxWBRg z%Q0T{s?1>?f?_FCh-IB*t5|wpFU?}*#uUir3IfdQ2Watrc{zjf7M&%gpRhu@N%>?{ zMr}SNQq3(d_jx=%EA zG!JkK0Y8CUx0&@II|Gg$plp%TzPNEv&;m?XCB7k|Hi$>X-X1=g)#8Zd4w02m zO+J3E)unu3Z$tO1ui$gIe;SoW3@#S|IJz_o@&1`ZU7Ggp`nL8XPKArKCaxFddqi;p z2GDK*A|gW*;8cK^ww7?loH5NTMh8fxL2>RmwVC2A@?w@HQzMp{3REr^gx5F1B}Rw@ z7V)Vj1dhlRoW5M4az3O+(GUxXY6=H$r=beC9bNv%!KbV(Az&~VrC&^n&?L7vP zY0sh6N}_@E4K_-+TQ4SvZ-p)GRkPObxklW=70XB})C+Laaaiz8CA}d#29p%Xn%PWy z6zDLx2G{2Ho;o@$m$k$T{1A3Z9!y^@b`57;8EeVBF!ToFEEMFy^(LE3cwS;NkM7bI zk9paH%d8;0D(Ysf2SYQbm~%8eQ@gXXGY%N5e8!-2)owBHIWIH2*aD3r?VqF36OGje zir;2oa?(~7WfIW*CML68Ar4@f%`H)YCf*J?$1pU{9QjSC0sRzgf*BRzla&>jvI&>M ziHcjf5UbYz#X3_Akhe6MZ{%w(184p~(9oPJP6kmPr=*Yj+_C!pIz{8nl$dqQnQD%O zk-Osy*5-A}Jr0ye0)Wiqh%ZJHV#~TX-{>jK1kRjN-X-3_H#XzA8asoV($>5TmgJ4( z3w;ixfU@5w5eK|y=QLSNXnOz-A*6fDr)x4SHETfY1AV8A22-wq9 z$f0x`6DAigWP%b70f1zq@)SWbiqA0047$SzfTSFI2+zKzsD$Is#aZfyz}97tB21+& z)1HNR$=${_9H4)hsc6KF^^{3OUlQbF>b4~6#_pUsy^oAB>1(^foap#%O(F7C z_+G<%ngkidz&O08NAA0vV|MgZlVCQ>SY)Cl+DYVNK{~>iGVV|%GUaGLC=|H(QW?iu z*5x}X%1O<-OH23_ntMvVF<5>zf3g)`P2*2IvG)9YnbkaFDDge$> zi$Mw`mtY!?Cp7ZPyaQztQ}`r-OY41%f^k4AZo=DVz?lt*dT)ia`q3kOBcfZ0%LP;6vI+SPClm3fRnuG{*Q@k(cDK{g>iGcSyT-BdyT1DPOYOtA*?Ii3;d^Qv4F7GdsgwY)JNDRGn$MF5Ne361UcCG@!(2TuT5dVfC+5i>M4cF49QN z&(8-xZav%H4R*GF#CTT-v%%)x?$hmOYnd@tik;GZ)9rP*d!*g1-6ylOI{PSSD%t+t zO>zCli*SJ*JqO9-#}s1*f1vT{W4b!t%{o@@8}(I52e8A>D#=}|%oB!LO9B7%BxnQz z+<7x59X@T)+6uhd8g$nxfBEyj{~iC0M}V=D=1Oa|wX#Ie)8sR?Bwhetp^s(w@4>x$ z__zJw-m?1_AMdZOJorodZu{QqgXMeo@812(a(nebd-X5D|EY!K$t;_{|406t|0W=_ zgY+DZ<||R!kRg#cfuv&eB2i^191x{w24@}p})Se+n3!Mp*B0o?`7#4=enw29DsM=S`?P=akJdcljy3FLo z(7^Mp{mq}C#>S7^JKKl9;P{_zAMS1)90X7I_JfV!#m4^O_U6l-js4)o%l#L72V2&t z35`+87xR?1gD6I^V8S{70{bV@KC;yUW+Vb~p-bT&hSxW55-ukhQ;BV>T|yYxHu-Zj zNDlG$^YM6?t}QKHUS75U$XdzhY^leMq)Xos<*3p*t)|I)xn%v-FQfhB|ZYdp0KH1WPpt@X^Z)XxZMR8yNr>AVuQN zj)f)>8Jjh%JCQBnV45t@V-iqBGYXL`1xo`Iyy93H8aK%6=6!^=TVzf&iiEB`nVgYS z@bB=@45io)vf|$%NTrmBEgW~wNqz`*{;uVk^4gS#aSVFv^$HnZypj-0=`id-&p^== zr8|f&$=$g@p3DG3aT@iml^%yh0Z>3cDGGC(@(PW}E)WW%jWoKK_9SEsqRO7gnA!RS zP$qCz*d?r5cowxP+fNVHQM)=<8}xwnI^__(gNt>e$v3Yg>Jcp><_0FzNkIVs6qv%} z6-K!Ug=yoYI!M5e#RFDlGgwz+l>|in3JZ`1uYfR1E>ljw($Y+r#&%NT-w?9F`Ckud zOHq=`+j+;hjt7#wDC#Z*I~)J~O9PENZEeCj*aU{MAhSI&P_Q!=+XNPXwkug_DsuHp z!N*|f%{OGGJCAm`Ne@p97HRO7l1=u@-Axv%XXFgOiTsZGbAq|T0{bSTn6-Ya!yjWu zBGX{??YjwE*QM`7%=>(M_t`6xFxG41iL319Q; z>M%`>rABR~!FdQ9_N_!Ur@&k|ye0lktNsp{`(SBlQ{ut!(xZnsOH+M}wfkCrxObbwzV;irU+BiF}F23N(mp4_;Nx$eF{r+T5R;PE|4b$@- zvcy5{zl2rk^nzZJyjKHq;dueHceZ!`@nn0y;@4In^+C5iiXc* z@Ql=^#(c3A9~-*|+F`L41ag4Gw3%N)6Sy_Bms*nwxk(%2&x#1z{e;X-T4!8^$&ksu zUd692v!x46QV9FQwASQYK zT2|bc2GlZ1pvl$L1;=$~^w63II%>YvF(zfG-XkL}VGN807{w_Q3|49(M{5i0AeEF( z`WS_y6Anp$M`D7C1N#V0wD**B%mw(0Yt|*e<4Z2XvA>$|g6-ELn<<&pMDh5)R;NztDD1Cob$~0@prMtZ#e3^bviJ7Q z$&YW}{OiBoE_kwk7mutM-4YtfT?Hss4w_GsjN&Ohk59+>ctp2tHoCc4H+gDvd%>G( zK{tW9^W2WMoqkLo+@j$8Y)c>7^Udu~w{EUiFhGOFbQzqc)Uzztjx#K$K8~vQY1T$| z$_KM!2E!%u-R($sJD+SZmb@)+Pod2Nr{7=o}6hhOD zx|$K84LTuesA=toh+eH}U4fGFd&p+hES6GiA$J!BxAT_cEP7(oULl&FR!GMETT91fy}+k zXVo6H@wOo}U2za|5Y+1uDMe_#<+Wfp(VGS}A3(U&Ys*2iiE6I8l@K_-2(4<+{_bxp z6&sYdEz_rEXr9CBLw!lw*a3#`?|(nq+Iw1giJaP+LHlpGlehRFoXp!mon_u^>_0nr zTd91e#B86{t97_by0GA_q|Tfqw%VY}M>{h9x5kXAq7G3h^F5Z+qYXCqzg69SU$MJ&LA!M!yQRS@d53DA+_75RLWi8r z-Ygv*y`{%akIWeCJNb!f)YvJ^&vB->{^sFi=^cW1V<^YkyHSLWibz4pkT?!-Laa`u z!+$DD;ShZ@jk*!q#!xoi@gZAvwpsfsq|JPA;3RcGXoWG>S&jgMB$Imb+F`3I%(TfE z-6w>U41!WZrts`*D@AOti+vM^esKsCn;F5H-?#8`?5G4`E{6`Kx|_81rb2=(37_#7 zHZt(TVj2F_iT&jo7KuaSAi)K!i%gfD86%dg4seZ~5V&M~6%Q^FQWGOy2&okylriEb z>>yfR8J)OIum__f^)PF)fwOHkttC~3je7t~_GJHAXlPw^5{;?I(VtLAehwI>7pYv7 zny3S8@IlYb0ddT5l$?ZUEU5wi?0_gZDS5oUZ@E_lnGdkrni>gWYmCF}cue}hR;9xL z^iHmcj_d&mE9&XTf3_CMqx<8>#{v9$6E=U_X#V%xHTu1D)aulhS_#T8P(0>@^h!GK zjdja4vOK#Kbsq(vbv*uSt>)W$ppw97Kyg{sf`RuzwfH1W9f-bMO5pNvctjPWw%7s` z)@TFPra|#_=>t0~4kS+?2R2-)UZ1DpZ_+(=W znpT}pMJ>CZP3w4Oc+PeQ#0Cc@G)+YxOxMu|sH8{RpS9pl*zGpYQAAc}f4nBr^YR9* zK#(oz4;REHgnu=OGFS_$zE-g67h-Y^O8s^1y7|}Tl|KH{ZNWc3WlGZHZvZP$_~qf| za^`b1=)wn4Ggkk!FZgQu|8NA<{mEZ`fBpaJ>hfw<|9^L7`A_}-zg7SLJjT>Q$tn7; zo{)KWr5~*`P~;W?3Is{Cya8!ykIrX$bc-@Y$1A z8vUvB|5NAxr_TRRoxk;nXW!R8#vwV2D$Xm>MhMy42YLb}Z6YhOVyPKb^M8m|{!cym z@2e-LvC$B|swVvN_29pw7Chvf5`q4;t^wlEOi_FYiBR?s3IoQ@@uU>rI6Qv3y|WcS zHH2(rWA|Qc?Qa}z@9mP!Iot``KW|}oaM;L6l+kjZuJm(~X+Zl!U{6$DhiJ^yiQztw8JtyG>1^x+M5V)Bhk7Am{3UB1-`dTuLAuAvY`NwFCO z$}GKAbXl9HTn4MYi;ygAfiI8TnhlC{)ZxQ7ptOG`dL;7o8~cde889RvkS`gQepeh3 z%a`{oXfh*FZn8cL4NW96$w%zFb4D)@H=o(JeK_-gv@o(_^Z5qs=kC^`{fe=Y z=a&8H)+>?=ZN0(?9)6v~o%ib%i9ftvLBY+{dWGepK(L6M&Suo17OMHrJsnbY`$)IT5Ug-mP?f&=p zu_XPVvMfKo46iX1T9*i2;!Qd+W?>`L1NCJc+?h;@nmycmvbQD@+xTptk*2t1W(Q-5 zOLTFI`U=2a0|o-!6FM2ZA0(INC>qRG%|W4sTm_HsKZzbf1Eb^a)nvD7xIH!6jGC-H zhI6D9#2v?oi+GYSZrFmwjqnTpe{ms)O8PvvkTU=k50_dfs0%ksX$2pTa%c~lh!u`z z5{7w4tOW6Clrf}n+44!TTG8d2)1Ccb_A2mcCbGx);S&Y`-+I0W*Oa|>D^4y_qgnDA z$=M1@h5+YkmuA;Y6sD3}y(s(`!$KyLmO#Vrw3zNSbT$r_-3Hus&IRFWyNPJs)h=D{ zt=EV9Kq3?^xU=NmqEBD;%)(3iGp>A47Rk%e$a>B1Y#$tYZ8}`U(GmPV{Bu@^*NnJP zmtMGhC1bvc3N)i52VEaTJREUrK=BwxM!Oj!Jj-S~8EL$0(&5a!Yt~&&|Nd1@MPoY6 zaH@as@o&b^3}CF1GmfkN;DsH_QWE9RRbZ@B95B!lAD#tHR`*}F_#QOuy+lYb`=6=B zqw#>E7*cc1WUCc`5Z*Pv6N;IBitM zssH(d^gmYpqcJU-=E>n3nKdR|1rW(0b2i0}pY3*QW!cdKk$hN!!~lk1la|-*_Wr%# zPCp(mp*Utq0);BrwbJv2h8WUahUkICs*q7ca%2(#U=#O)J6D}00ab#R8-5e!RCil^i> z=$vB!{RYJ>7+j;!EX5c&Cu8*!qhX*)hXgxPWfimKX_|Cm;&Qr4hphc1&N79FA=j&_ zDwnDY4VG+mqp+tcAftIwl@3bpM{$SsY^)B@{2utZ7sF1dK@hGNEdxpDC#bo=(KbX; z27e=(oT$ATjyeMXg>)XQ?_m8JGQbf95*o&l(WvPNSt^a5b-1u&St<#)pY;9NkT2fp zWHexH8^&f%0<@fgUfqCW?rw`o2^v61KoU(OshbVg4`xN+1O=!XvRf>l(({nDXrf4= z*v0cf=*(&qQ1&r^15^v4G#@+7&Q^4IKWzmEdruEvZR~Fa+XpBN`+55bCNtYOfZx@I z(a))FF4%iYy1IXC?>=b+Td!a2qqc2tABDEhU+ipe!Q1WK&7GG|ws)TeKSE6uq3&!y z-#&z95BI1`X>5Dz0GrEb@fu`{GhK@ZLwEuW?{4ot-G_d*o^S0Qq5^FfUItq~!>{1r zr;VK*>U(@)dA?kKeT&|@E6*LK@pQUCjIh-&Y z#Zco?wC&*p-j3qm1k;SG8=PrYA*045aWTiTVf|+}L9L*m zSePn{{}Ji2^3swT6xL=GodSJ`_Kc{8u=u>;_}@ZHb<_mbjTnf`BGn^TIS!E$cQmd# zUu&EZWXzF;2IAXGn?;U+WRhof?K;Sm?8czo6Ahb(Q~dGZiD_5wNK~++aipv)qAUtR z(;1=KvQ?>!!;|&;TwVQ?**UldZ`nI|J~#kQ;>q6jAxg<{)>UMusDm4Z8Vh09$anZ5V%sBT9jZ^slT>r{7)Y#lWYU zSr%Rc`r5ysPdr{2BL1q@c&NZ!Re6L|w33cG>y<9bhG9UMT9bb9Lj|w6<79Bm=TuyV z;`Era`y7YI#@cm#C_zpu74leLuO1l{&T{Z(?*(GZx2;wyc+)(58yxI!k}~kg!6E*w z5T~9iDy0ta8TMjp6HxUpC1smqTg0tcR=jJ9Z*#fIHshSOsNR`oF(ZYeBZF;e$rVz7 zbc5AVR|?}H*1oBRj>y!xI|ei)X+YfpR4RKzp)%MEpHyBFMLiw%Ldmm1Z?RKkU|U*N z6;P(^g_C2$DUMpKjw_A6!_wz2$|jnd?ia;LYOD{08(>vDtamg?tId9n6un5TJ3<7; z{fHXvx{b=j-3Wl#4@#{pLhq&@7p?pP>SkcL8_CwldG9?pRGe>UHCMsOTp?KD1mZ^ZkufGf@(Gsl3k#X zqnkR`=9MiUp-PGbyaPwEq@mK_Y8qS_fz2S=z+lzDpwK`tX23WyFgP(_99Y5h5A@q0 zx=PhkBcY6U5TT6M(IHvwV29##^E0qa8H7Uy!8hcj?t>MY-HZ9hJI%-80t9S`l}ssq;LtCKDS=6$u`#^OLW zO~a|7Ne3GYnH$B$m39HeY>$M-D4=#VQ;4-}B#GbbSo5P2`y^PsnA2f2h!n7)p*E;!Ckh31*oUtGH^_EJ#JaI?7H@1(rJoE}#!ER~&lg60>Euy%>(kVQ^eegS~$c zbRi_x9TvISts4$r;e#QF*j0Ah!1h72!kBw=CCh2WN2zb<>zEuK|I^V>FlkJVZs zu0?+)zE28thu=u}=OU1_i>Ke$FijjAuNGkfXAM>5AI~tMZgPzE*6VkS@6>|gdw9lR zHsW6vjn~^Nj~>H#xJs4!az3suyB}Blk9XT%&DG4;RqyM)3T-C}0Ve%0rHpE!xMeH4 zfl2j;;^a3@k|r5|CzF&YkCfrzC%~i^cm>pn45$M_`*i|qmvZD^(l+BULOBH*cVO~H zmN7untx6HS1ZWDbntuEn2Y>;DhGpdBE#AL-7s!?2F^w8lWL0&i!2UWPR#wb)_hz~I z;O#<@6|&MWK3oLBlp|zEBTprmc5b74TObXk+s2=(2Q}G%Pz5OBNt(BRWh+9X9X!GQ7!K4UHMn z-p7|HX8>FYf9w!)w|yQ7qGSRq=?~7pm5!a%XMzLBfzg)I81+_VE%5g$jK|i8HrDKk zXqny_Yeq{nA?XMkfpfwR#{FScIVWjLeB&uhcIHxtCi$RsjT%Z*C`aP^0gUxYs7+Dy zD(LABYZ2feN}mh%A_YdGmBoOlDu;SDFM(i1d{>4Mu^-B>Ko>S<^qPVQ^X3{iAlyOX z5iCX5RUX;OPD|6eSKFsK+Q%aAMj)9F*vL=sM@}J{PZE%3qCD9cSEV-(6Z-zCEV)>m zaTSs0+2fgoWO{?%+w1R~>7zLY4M^`*B1~Rc09J|O&6-W%p~4w_K8HW zb8x8)ucS3gjqM~|b%xFJYT>Z}3K!qBS61&Kkm3Fp00B@Udk5REB~n9kh|D6Kux~G~ zf|D4YM$uU~>h_S@gcHI$!Ix~N8A|z^)w<K_sQOKo6uGmW6cK=+=*IeEi&QCp=#V0gykuf%FwTfQ>S&BLbw0In7cnEH0 zDO@_KI=}2QFe^56hs*o~%azQ;ew3UdRo&XEm|CPvhftb5NmR+KMMUTkApSBLz0b79 z#|ZTk1N_|UHi;9VRmQnCP;dndvk9|;2dyrnt`|0jXA*Uz6JlmgCrG3T9S2}Pg0+{- z(wAh-J|QX&4_v0Tx=yejoI>r%D6=(iOax97@fs0s6(M~N-Dx} zYBv2{UC4%B@qxle9eHw4kPPzjA96$CTk|~XaGYE|*!EBg2f-(^*>4rs|LH~ZlJ5A^HYMoBAl2v7A`vlob{2rN_OlmVMVtgJutjF{g#dOzaOD2+Nl2c8hEh0?BT+Et!7cJd-uv}VYXttIf}pIomvFr{?UM2%NlHetJVwK%qlGHQ1Av>KP-w$6f?8qVe8U*k&1!`abSDw#yYk~=wE`z#StWn< zkvSOZhAu# z6bX@2pyic77Er&`eO6YU6DNka#-3er)C|qjoX$apSm4WvWxhRiTB;=y6q~4B8c39` zS4`w>*d%3tlZuBCUIREF9(awQW^#&K%9$rs1MZLW z_xK%^5KbXLZVmYhI9b;r*3T@Da7q)rOjtWNAUFboYBU)PM9t9A;1(HjHoGXsk;5fe za#&1wd#aMZ?-q~h=zS`ip+W6T2jp*6O_u;_kL164ed(iQncFw zSp~aYB>6$x5MSKpNT6=wjz73wX<{}(9na|%DJBO#@-HG#|Wt&%W7WcFzK zNDqLS^2{lFZP@U`91S^<5MI!q6(}pDt8xV!bP=Rz3`8Jr27oA0`=WS0(U|BdF}gs@ zsDO5fb@pte%ocV~bP{(->cK;pw~}#cf~>(Y&Cb}purdpo?|nQ&pC)HRJg>D ztCV_3bq?%$PNrpI`Rq2@U}1yhp+$kn)uau#^4R!BR2BH9=uq4V-R|6BE1!Mzrc^eX zIH$6{o1y2~&YshR-OJ`?L+qwcShq%@k%rfrE?d}8F_<^NYV;g6-*C>sze%sV{%&XU zcw=X0eKSC=rrX;QEIt*q7VuGQ|X z)$ZpDqI?tzV*gVLe(QFj__Nn#whQXIVv(8{fa|R7B#Oiy&fS*k5P~~?M&!5(8uUJ9Hu5qZ~sD)3ro2)=|^<- z{So8w9j8(6l$eZyM#z=Suyq;)Q27wkj%EUGp6cX2R9tE3rKSL<06@qJoJ2O0*Jw$)V;xy)v4r;q5t-rJTj6rthmyXEi^n4!L+Mh=M*>`+1j0K zizh)XXC|TKI(LW#QD3NK52HRXq?nmj%OOaTBA+Yd*0sg?LopFIb@l3;9G=WOalr}h zT*HALBn!V+Ix+>MnWM)7T8x;rv`dOD0LgA+A)m#FnbGH-1Ee4$Au+@mwVw5o6PF8t zg0TCOp)t zq|q47ZjVWXDDjdrZla4zWKdv}4z>M!LrZV|x%76i_HpTB{hbp>k*Z{3S?kiJlhf1q zioNoOhz-^3_J;KD^PUGd& zU){_xz~~Uh{7CJS#Lm#)QDR12f#^^ zy%9jy6G@+Ev7?FVf+YsgCGE2FS%STwHJ!W*MjSrJ2rylj9oUjo{r)#exXQ=lkaoHY z=Xk(ztth5Mt1`jVJ?k4kZa&$1`s}Ce|N6(y^WD7{|KI+>;me<2z5eCDE3|U!;YkPT zo}I`4df)30lHsqTbUeAZyt@9a(go^noUSjoS61)dyZ_+fqe|Eto`>tT57hRj+6QXl zQ`V=BX_ib5M5a(OFL}4^iSRDaHJhtU=$nQTEeNnm8c|?#KI_@+9h^t-iOZgza$K&Z zlW^2Z0{6$szk;)b132Kj7POzzmlsK^BAbp%PJU`C`j;sLC!x!4^>N{tB-jOhwqo3?k^jfHWl6;A;(oiPCtu8)0xy;xi^D zP9gw4ya!>wNTbO(s@1<6L}41U%8ks2JqieJ%|(_>FVe_DYOOM_-HYPH@@5?hb&a<& zvtooOJCgBs9Puhy-y;M3>%sZZ@hAW3g}q*&gEVM9m+UJXS3M9{YF+Qhi6^ z`9GLt0Xh%Zki#oBhvCpi==5To5@zET}){ZvyEAo zFf3JPv4_E`oR=B{qYxq|bD&1>*QXl?hj4rT73F`Uac6?TN8zj#hP04O7B;*C#v#f? zq-Z`rbgpY%Zd_jPdZf70XVt)QSj>gCa0~b`yuAPy`lhC1rO@k?V>Y1MgIy|(Mg(Yuv<*=^cTyG*dm$-+w~5bKB!(%} zwwG&pfrV%vBy}D3Q;)F4xS{aSx@Qwo?qh`9>$&byc)oN zA_W7}?@+q*XndY@*RW_)3@gRxis%P~BPALxqk5O8%`A{Zc2auiE;bUN^&90Y0xGi` zqY&k%@PcqmqRMPw{4vosNvzJ$c!28Nd8MWe=p+rTbQ2ReGaOuBVo15f7;-QjX7_7> zXMmO`aH_U;pKR@JZf_kN@4Y;H@$xVmy^&dJJdP z5$ESc&>4+w94CWf2m_?diC`4!7(mT36On|fhP(F~Fb&C;24wxjr=HVAk^+wgvp^h@ zk*7ev=$g|-Nh~&E1bjYUOF8zO*`RzjNiZe_onb}uaAy(`AmP0xsX0EhQpDPc(3(V2 zSQpVJs=mwmRP_ChTd5>8$_+K)*=C+jxpbC5_jR6~*wRXFvLD8QHmJS&$N4*|2 zeLggNK3z0WO*W6JHtZE-Ebg(XpI>Yo{zM~@rs+iBdf@(aLe^FwHX6YqvbIzhOw~pd ztpwj*=()JuT3IH@XOlG*{BhVcBc{bhI>|^DHwb=2Hwr{d)ZLhccpThWtE3zh1DWb@ zgqma0i;RLg{2xUi%pDj_iRPTcqazeJ)32p})|R?;7MXo)EedX^ef-E$vZXcpoNuGH z6s$oL-(}E8F?vGU;(WN^#+<@{!00C_WF9&=n>!hK^e)*g(mYWSJEkWDb4D*oLhB@8 zG{)0!0^@U-DBga)inMfV<&FaWt+M<^tnmOVTz%h`eKH zg~``5=X7-xwbL#eGRE)4L)g1hiRuzlH2jEpElymZcx;SVk0~s&5k(2UG}7tO<|0ib z35pmN=vJa*2pFP)dUWz6#y6J|wHog?6gUzbL#ElptgCkISo~$XFNSEeYiyqPlx^<`GcqDCOFW=?1nPB0& zg57tB4OCVb1y5?!R50<;b@BD}JI+jz+?qqFWXFG_@P8UQ1g7WzI6e&Hs|7|4by+iBfU#KFM5=Xrta>p+9g#NGi5=k!o#um|#dhmHFMzMLhY?dGJrjk; z(}f%9gM6@hW%tVr7mx+F_Bty0Nm<>RWWKGe7r$SnIxT1&PJmNFco>wSxzImzXQkg( zbKm4v{PGL1UG;vh_&-;R??;g!Io2le;I^%b;HmINbv%WCtPklYOUO-hMsP}e!jH^XBU=HKeJwitsJ|6 z9eT--Zl_T7EPb&zLA42bnN?W(OaDFRFu^J_GRhALiVG)UG?B}Xgr5|UqhazhxlQT8 zZ%JrV##fhUThCYY9X*V2@Wvc5hb?&$&U``=LCNM6^16+}n8E_rkLpAR!~@h*&r7$Y zOGg?-hk-9T{?Bv%>5Ylm9=CBekmRgL?B0h%W|I=Cf()M|_GO$iB+q)0DiO({d4FMv zQnLQ!Xu67?nIOObtgDaicEZyK)J}B^UrB4Y!T<) z)L#2Iyh%bbjR+CB2TAn}y}(w+%I^A_ObW2or^r?Vw2LK(BvT;(%dCarqSEd7_b>s>pJ<6geceufU1Xgh~DZtL=#|B@L!U2Ie7WtnmKEc6gE&{ zaVeGn(LlmOaef|8mqLSDdzxD3OfcYjF8j9~W7p&@dG7gkpn0@u=AmL%yAv;F~1+1(-i+aJU z37omo)oGbXtXwq>8l~f?IH@V}uFqlviG^{JClRhRpnQ%B<$#|I7w*I`w*JGD0T7oQ zrXXhJi!p{wi3r9!A8<4}9wrkLf6ZBP3Jqe`Orsy?HiA~57ezzIM>N*ZqEI+!zjFhp zIAKHbrKAJ_U(m*Bo^kmi! z3>Rkt_(Q0;BHHa;#u#v=L5~1q(u!^W?@LMP`LJXNf7J8Xp?xxCg8(SB&(W?Qj%{)x|Bk_RU`reDc{AaJtg4%7TMMAWAcJS8^AQD zjt?z?#LOx2C*8V^rbh%H=^Z^KlKA!zX?MXK9pA;AV?$!aGmt-@C`HURUI3#&)s0Lv zn$hI`U82ArlM9-W1CzoqN9Fw9@}q8{NXL~Eb$vMzFY?W@qV5z~k<+AU?p89PS%gBB z;OmHiZZG$l!3SU_WB93firCn0msnDZ`MM;}E?y?!k6>|WDgQb+Izq{L z{sYR*vu}s~i%<0%xYo~;uID#|#AkSrENVLBbCnTPKVicl)<5KYmP2yMqbArb4-ifr zC~A_cBqBf}va?Xo&A6OJ9Dqdl_;09W2YA^HG=5mxkGe?l-*2@WB;E^u4K@Kq{(Qf+ z(!95P7qLK}Fo<$onLZRrX_iIhd^;u{FH7i{If47jGKjIpexqy^T(Gau}T z!J}39pwhr0hchJ2a@S>@sngVVBkR)+LLnV37iw)$P-B8; ztm7WX8b~#hRM+SU)ie19%?BBe&uDi6XXqNO>g0C~-@$4N)7F~`V{5(|^>0Bdet z{{hMb$?gC`i;IBVZQj)b%O=mWtcg(6h!r1>)mGT)O#0|LhrLtmEOtZXn2?SF_#C5* zolH;&fv;JlZJftBF?o1~B4p8KMI1JOB;JD_tI=7fZj44U(XA!oLa3IIfP6=1k#uTI z9kYB@6E5Y-QVCe7Jb#J8ex*xGN9`qgI67KFSBfP>%EJl}OCN)pakfA%jbgD)lwZR> z0JlS(0IEQBZne(oY3oOAfPtkUd}xXO0NZZ^k@i!iCSA7{O>rE;GwnD>m*q@3Q1<1d zU4YFQg=eHKP&HjdQeW~YG9WXRlQfPn|Ho}4<_8IqjZ87Ra}m2AW{frP01DD1xBzF> z!ys`s5JV+o-D871L?{x8)4n+ArJO4yA@aWBcxCYjwpD?H%sBg1nB$_>;j}7!Hkz`O z@*-+b7Fm$bnhnkbDA{2JgG&}{j`x7wHZloZnu$?MYWy@nq7^6lJZqj%ZRl2Kp>TIK^^dw*LW`@B>!wOf^kN;GE@i+fm<0q7?v2;y8eKbPHkJSR| zpx|bvs4~BkP|+6>el@}3SFtVrigv`VJ8SlKpld;{h$4?gz7@z_;KB*xK&>E#CumX3 zM*=yMxDnPdIUB^k*-%=5@WTE{FOT%a-4ME5C_r%b1VV!tA< z2Ne4{x*!9cJ4nh=ofK7cH%MHBRjoeukeap&)5^P_$&9LC;aKw?5 z9PkwPK3V+O+@6j?Wq>*yID;4_#tGWZw4Yrjik-#bOI7=C@@qSMw2*66bB^RpR=>+!Zxd1Jg0lk7!Zi&NTDZ-Xk(sZ18BpM-V~&=yo(p22;RHw&xzxg_ zHGm=##KYOcTKn*P;~!h>OV+eg{sfmHH7I=mg?yS7;r&o8(?Df*0ErIG2ueO3HcEl3 zCU--;i>pV4|~mT5seA#c)f}YiG=t86e|&tB#lfZoEFyGggCyk$sNt zDA%>PcC_&EsQt0}dtiI9Ec?CGNbSZ-w_bwjz3bqQMF0M;)(OcT5Z!i$!+#T9`zICq zzl@4yvD=mpX9EGo`QXiR^U+)SXECT^IFu@eL#YDi8>DM%0ddJ|!+JJ{s8lDt_wAYx zbXkLM@V>UTR-cVboI!w7NJ(bO6p17FRH9BeSXz2aI-D9k+?o(`B3k@;{%$&dHyyJK z$?|0ft=fFnuYRm9(Z9`SF+JnI&HvuUXZY8qGxZOneeE=x{gpk>(@*qFZTS?4o?|bR zy|sqD=`_+=JZj@PED@W1ty5Sc@T0r!ufboBj)K3Q>18M;88kRgFo)wTl(KQ5nU3`= zogTH1){6R?E{6LLkircBsun7eB~_pt-xC1yO1~VuA7C&Nbtblme|eOD)U84*|Gp^y zxUv+NdB!OJ^S^JH|HsG=%pT=`{?9P~WYIeBq)8x%+%oGx;if1WjYR4iqAv}{5aPp@ z0zr+x9zZiUZe7DUICrYgUhG_~qF*CofEVo8kVX_fVBC>Ng@5N2YRW4oQ2TriX*rk* zY6=RA$kGAuM}qkXdKi5)%q;u(dPvcA4}h`lNgic{h|`#&O=OFbXm{X5(IkfoCScWC;Q`0u4gmFG@&QV6Hinhs5En#w5+IYeT^n25Q|YqP4D-J-2^kcRhTFrF zPNB{*5g8i%$w@=Rc_v}g$@Idy2>YZuNn4TJ)l+j8k6S>whJ!(PZjKMUyo^qkz8|g& zi2yGihwCT3%0iKc#(S2D+bq`+##fEwsA^_ z$pG_l^XNvDJ%FO)lgT)3vkx38XO=Oh@ggS?3mQ0mBgK0sm};{p!J{y3+1VtfOE@Gy zlZhl)5IIX&)R|=b)Y+lz1e?k?eA{w6t&Je!^=^^LHLMcB-IeR zY}0`{^=AU>*taPFmc0}Jjn?8)qfviXsZ8*2uUC&W#Yk;Ac(eE7aC>j}EkbPb`BR)N zi~}dQv9rB#P^oNA!%CdGwz9{*t80|jq#-#`oHW#o9Ab_H-r)E?h*Yrr7|UC>&y**$ z2-76Z1JO@1)lB^htgq<8=}%vA938ikmt`ZI5tUaf6~pizRq$k56cXI28LDvsR_rsV zPBlu%kd+#TQk6?+^9HR;u57;W#6+1Qx&^y?6(yY>(*Y;S3hR9i4F!|N9Rn60)7>1s zs{y=EPk2MOB&iqOfUXtSlX0FM=mHUEW-@Vju<%iSF5=TTF!Dc@R_UTw14+}UT1o>D zAJIrMTTe5fk%FiiWSyI| z8n!!c6TV89%?XQ?ZPzlpn;YhqI46)8#k_$cUPV$#QMI=wi*--}tgXf7Qd1j48+a`E zSWRZ^;hUcib|MUFV2_HVk~PFo)0b(=8Us7T(7vb z_k+p!oCgzL^R{&`_C@$xL=XXo2mbYsajmU;ebSpmD2&mf&CcMxeoJE-Mkj{;X_oI} z{Bs#~=ubR2NziEUrY@j1+CIv!%TcObU0ji_ZAw)@4x>pbpiQHb7dO@!bx-^{@M21( z^LTP)I>8^8(TX$v`}zrYZ)a&hmATfCcT z@$MJ52(7f<+(l)zG|del(sAocN%?!hZG3Uh7q;hl38D&Y0!n$5G>=stMYBbsiumW& zm+#HR{eMfpiFqUdIHFE3Gda5s-9O1w(?@n0~8C>6^|*;qct) z|4XOPy9N@r{otX_1AiweyzmO#^FQD7KKkGE({OzC8Do=+)EVH=#cspYcF;#D1Yz^R zm~BS#-SzK3d=K|5P_xni7Ul+&L3t8&INCS~4Os*bjVSYz%bNJS1XCAYUqoo2sglw< z5@{;#SYf5n$KZ8^Y!u6P=EQ0gMHfjQ^XhW)6xTEOniVCgr4W&yA$R6bp^6vky@$(q z3w{j3l}GR83GI#V-wn*u@ku0K&`CXzzY(I8hi~oAd-v`0{WlNnr(q|&_vZeCw@xG6 zJU?X`!WXtF{N*)v|8Aza{_5)SN=s)k!mAYijZXAMpI-Feob=vC{20CIoxJ78i#IFM zH9oJxv-9o28~9hdxfliX@9GM_I0@x%1aI&UOo?Bd0w~Z^=k679Ll2klwTUaDW67Vo z?PW|2+g;^9JuKKwhwb}US6m=kc@M9mVGL7-ji+~~aTm#k)6wcO{lTiIV;#`>Lm&qO z{Cki84u_%qX}8`ix8KSSTr2bRW^k$Rb^PbiRd|-j6yntfSUP@qpZ+}JKVkbm{n0A% zkVYH-y0W}18}Yskv@t#Pc!7FmfqH!%GCbgR!Jm=*AxaER;WAADk0bth_)tKzA71^6 zFHZ0uLzQ_yi1OQ$_-gf0U?0t=L3??HYr)g19;JSA6)QlFDM)zjS`+Npbcd zCi)Wptmt2Ycz%+u2LR_dp#jvCvxbtLhbX8S(Nyuzpi2*We23j(8%I0*7yTnm4bk~@ zi04|KXv54ijZl8+IU9~9@^C#0`@lZa4`A*(7c@0`QuHzEJ-}g&1W~4R)cFy)w)7nN z%e!y+apmsY&_2<;@p+Z50(!dpR^G~=6aLbRoVMi0YSc45(WLN?c{Sv_hyLcwe15xjpHrl!5Chj{3&I&JFxibR3e zbctMzqd_WH>2HMXe|xx`C(L}>$;j52w8L5EtMKe|Memgqy_YL`zqsW6Y{4Gj`j7Yz z&<~H^=IhXIHT@Y#Rk+~VZNBKvJNndKF>lOM+Frqx8(aXHjOPb73)&gpVxf?lMMGHa z`62WyckD7j`Te)@bM<@ac9m}X{yoM?7eonM-oK}khkn{FprFV8>Qv@Z1hO-x!^Y_2m=78ebhFrm|HD-x z{%m_tWNmQt4*9mD`kK*M;TvCyeN>k$OUApF?5&|)wzuY8oP|xw@<_ngG#4#vW1g9% zX)b!~jrock27hx{9QVb&`|dB|OuWk4w8z@`uiPdKd*d~t9FAMge+LLHT$FhY>=C~;%#`^FOqBbK43+t9*G!ly{fVcP zN+Dy#50CT#m@9d()seyCm%qA8j!c$5_jIdz&Q>9-rO(K0Q32$$%tOz>K673C0q=xm zxfJxx>V5n8{fa)CgT)sLzkc|TM~mzlKOm9DPsodzI)-cGZw?b@iwslwh%B3V6kuky z%{)4@A=b_PB_~taH~$lJY)%1X;WEXLZF5U88|N1ya^EQ=7KU1ivE8z6}QpEb@iy^Oh!;AlK;slF1q_(o`Ky%p-G>`crsGswUi|`2_qVzXt+> zAJY4JTt;Re(sO#DETR5Dw$go;l@%sapNY$qALhYs6SA9L>*go2obo7(z&xj^IaE?W zSWNf%#Qkw$e*pJse*pjKHHJ*6_u}HAEqw9FeLiu2Nc$JO&*_zc3F1o4k64KVVp8?# zp7VImJl;1?_J$tEy~s8_ve2dsto}yEl&TYlYMuob!E@{R}M(LOi77Ys7WDcjgdX*WOGc$G9&!T~}N8R#kr^B%D16aSzY1rogDaZ}z7JMxf*r!WmPmKwxY!%m@k zXqj6utrsjDgM%%E?8kY0TEJ5xUlR7aGU!P+)*2^aXOb3Fp!b=r2)hYT=MUc(4;L^n z6|kz%i5XW9wuW?KNCM}p6JaccOqDT76Y1~j^8JTpDm47Ab^0*PlF19F?r#~a2(hl2 z3UZ)mk4>@WVrfBD9cIj?toasOZ7o^dA+#8t7x4bbO7b^d#q0FK)QQhXC5C^SWh%wY zj$v6|M||og>5bK}SE=SUf`H1+T+P%34*ae*Kt?|0TS%V^CM?woPhq~Mv#q0|dHUxT z%V_bm|F5DWfUmRbIk_qw%CM&Z2BoC@N!SYqodT&6Q#qnjmTKK=SYxf&3p?+D`_0!R zp4eY&GAYbdECLX!dOKjvH}BXS`K>E86`%BT_DFo~mP$@fyC!*wE)5Vmus8~=dkyTr>Qy?Afw8iEvcRIAvN<=e{Qk;w>OyM|X1(iIpENVOouTIm#p1Bkn8aho#eOtMts$cJ_sL)mE#JV9F z4d9>BTM9pFabu;6l`}*wHq#zq#BIO3gXK6BaOLx70fnFfU40 zT0gs;KP1n;>V5Z8?K+35`>(TMfz~L#=T_*aK$1{Ntu?$_p(pWl2+4URLxdzPPq|pedT65 zIq4^Za?;k)^;A$Rp`bcngXP!sZw`O5eK;Z|K6HKfQ%1UQS*@719}@8H9c-~7O_E0D zf!~*GOEii*X__b+f#TBU>D3CfSpYyN$M$&zAV}iUfesWP&q(N7aK$5Q&mZ$N=vh*9 z@XYW;CeX~;DVRls>y}zI7?f$LD`v3|*aGP*nOo3Xj zjfYP4ho+`U_&th9*{qr?syjoo4^j2lrdFLtc)yHNPkwJ7vHXLFZy!l{^9b)Bt@6u9 zt6yhWw8rh#`wwK!-kXJ6wPM!o;VpM=2weH;4Sg{hJ+*a;kY26^l(Hlo+G48X4*n^^ zfLuZ=EIzz{QG_W=t*U*4Z-XLM+y?J1esP0$-S)n?HK(yO>3!jJ*_F{u7_Jm-rR1`~ zA4)UvBUZWq%D1F~Pn}~y?TGmR{ByTkLNupmi0eH^HKIbBP>XLhYHChmGtP;l0erk` zzL6EXbeRH~hP#1yubtk4o=g>t!fa7W1AP@N4mTynCpB zKf|A64tH#Iu{i~s6@m-n4ywGwT5<=5smZU=U`E0T3`7h}V95kW3I0(@RC0Q1YK?~H zMf_nQ57m_7rt(!Bog_t68-B^v<1!q43asJYZ1H=SLeh^03`G?dZe z7wOcSl!{+y=|R{j&=8REO~wcj3TmCs2uR=}uIVm}3BDFwjqGd>>owC&!liB1ON=u* zDmnB^^gYjJDz4#lY;c{DVbC zJWejUlE1X`g;tAh@4@-%a_M$>OkU^8?(g}VyZ7D}*Lygv9)Q#Jqx(e=jAm=-XsF;s zMJ?8vtr8d1&XPeoPKxo$Rl|l7x5Zs;)CZdU~3;b zf(5OhFG%L9O47SU@Rip?Q9-Fh5-RpRA{kXF$^iPHR5q2QWm<4g(M-jp$}m(Z%I67% zFjmc3GANOUxgc(NzacUho#OtcP`O;KY%9Nz#2ub=%c%JAI5ve&N>kV|^Y{U!Ae70$w0~P*9HbH}~kzd-=l# zNxT?r7=_DGxB>URWCLL3xO?vKzS>UlvNg+=?X&xfWA08?*!>av-&VhV=Y_T^v?ZU> zWC6+<4!lc_5bi<|7Iq{=L-x}fc21&&8+in&z{`YHzMghPn)ZAHjb~1uN0Y!7L3bZEp2AXdQp|n7;##r zt8w74SO{@1$LI{L7-G~V6Ds^Oi{N8qnN57WS%KtMAO`!E-1n&e2Hhvh1V(9$sfA4s zV>*fWr%=C&rpb1>($z;~uekcCP-8>y{nA%b{Hm<{m0KZPd9+eA@KS@t^rT%pO=DN@ z10WgJPp^^nwwp`4QE3gJHQ;m3=pl{bvel1_Xfuip86=ipC6Hn5!l>-|y`m|=>)dfm z<9?cGoTdUAi%hQJb1sS#RUW1fW>cQ8m>QE&QBRXmc3k6?avsuSDAMsL92Z%n5}hkw z3#1sv_md5|(fhLq0I|UB5lcE5tdw#I@X;v-=lzC~G;%ciS@o*joweFsTWz(hxA#-} zS}p7A{gj^W7WTw+dwExP3%e?;<@QyqTgg@P6(~3}+(YV}bNn?z>wLrkt4 zVRtkc42oo4e0FW^ivm=IZVP30Xz6voAB{)XH)4gXwdi=YNJ1`dq@~@Bi|pjaQ|#o( zBjT1G(k2$DwsE!ks2Ed{my(Y**jK5%cn))qVRzbP_E=Z%dqwtGV@hETID;tG)s-^7 zo`k1VVR$j)wp zul0-Ysz5D@-YDH7x#dNXjfh|R!dQn~42O#!FRtMKiw@-J>TwLE)-UdooS4 zc16L7*h#3MeRdu?hZ$U7M!lXF;(%ReuqgmI*)L|ObDL;T zR!WT1kTxXjAeQSV7;rloPT=xtF=WgF7e>~4lYEs6-e2y_QV@y#8(DyUvC9WKj#B(m zZHo*uOAR({dlyAUg%*bplZIZL#b~_k6eIVio4ulDiPK|)^LTN1$hESF<4w=AF#)!i{FnCaSDkxV?O@JosX^27E`=((sbp;yX=vy1{3KmYk~% zOKYgO#jUici@+9E&%^f-kV>2%guMPJ6HRXvh286>o8+eJx$kN8;y*0RhelXbY~bbJ z(R1&{UGxG&mj_u~YqQ>I%_hpA}?7(xh-I+=1zZxq_Q zPuVmuh^qvmA(u|_EoBICbL>#OO63a{Iq5h%t2(6`PGT;MIb*VFwJ<{SWR#4=$%{R? z__vAm%5AqfU^YLurUu#lsKq`qoAc2L9Lrx8iuoD5>aH*shz%}_>~3pia;YVNs$L@c zdin@Vv5$rrx1*R3#CV%>wD8dlFOs+`anEU!IM-JMYkDUPy7B2L6da6$y#wgC$@R@B zt(FY4-d_e`2iMne9M0_+CIO;+&X{yagQWxHBE%t}P$9~I6!yl^2t%D-M8Wfy2ZsTs zJoxyvJRZg494|q#0x(%Wo zGj}`S*y*VJqrbh$Ae5lyQba*{(Scomc)(E5M=#R?1&i;6gGYW@@eo}!&t3UJrZy&6 zyF4=0#)Xs9OiTJxpVlSQm;Ook4{A!=S{oO&}KD;(%f)JCJC#rM#%7`VA36?s~pb^cC9bdfl z9m2u@Q4lM`0-z%Z~e({Q9B*ScqLn$PO_;I+Qm7y?Vzhwl5 zMCl&$ItbnznHi8(o3(ZzQW>iYfFW9 zNzQv2$YwyNa20FB(2tD<6}B%XmRAl>`(BMMb+le|9|-P-X-ETM3l>I$vLsr6zsz<0 z7f*>#u4KNxIUqI^+0w2VjfPi_r&kasDvs5Z(+t*+l(z|}hw7Yi?-q7*GVFF@nny(O%N$8J7hPKX-`Up4A zeQ=W7D6atesu9(2YKltY3KPm7?Jy-W1nl`{Z;(F((5@e&_auDf`4Bz zS^T!UZFZgPgNnO)@DhTl zTR1cV^zCeeaJ=kB-3ED3R&?fyFE4 zOoEXDc34Y0aY_M0fs101Un%ZWDeyQmJomri6NQ|tHYaa86O!V47?74T6GF$oHGhK9TYI%pY}U5O;m3^PV+q$+5bj|D2BJ(Sb-i%*}3 zwtU7d46d<^L^f+sk&`O={_YS!gQ^WYvc|kO^l-`EGLXCHfgw(;@k^%fex}RNY<-f$ zf@;iVhl0_3JNLax!~Numl;Lc0L7^#{BLb{N*J@X9X|&q9cUnN|cf_j`I$|SHDD*Wo zpVev}eSd{TA)!p>dm4@4k}HEefzI9+wp_9ippiq1lHo4#9Vb(-mHD#JXjx2%oT^Xw z(v*vye2ZRmhm-B4bEc`i4_7mji{`V6Z2`T?KTJ5W*#;H$KyQP!=+J1Sxk{s6qFgsY zoXAhPco{)pIn%lNI1)bcBhZ8rhR30$4U2Q!=v9L!lUVm zgSfCL0L&B2MDW0Ow4`o7+f`PT5L%Nr6sb4o+Cu$Df3ap zner}B41^kpg4RuXKTOrnp?=A5-Cai2b3}8}ye5|bg)DGU2}8FE!f6Y7$W*SSznPs86XuDS1fcZ)o`+%%oWi%t?*awA;%eN$1M`ku(v7tj}##C z+o&(QuWYG;FB8($R5HOxh9*h@}qpLXyvlU_!^D)Q#Mh-V_p+GaIvYH9MM_ElS^$!?a= zV{2D&Mg%4?0mRrZ2_hy%is+(iBPD>ud2D&w4FA< z+@37vAFL-M=gF|0(+=#c8*F(N_DW{j1e3@uQWE5gBf==Dp`y~YAn<)E$1$oH8yIY( zkDzSG;mi~;S2&{F!c4RXeffcNEuSzLt?B(oXuML6oHx0aAmsnTFaXJ_eOem&`Wn1m zCykLga}R2brT_S?MJcW!$BOM6z*KKhvfO%G`#q4CH{2aQ&phwbb9|R=hIMI!gAXkB zd>IhCH#GRQ_q;ip8}qy0IsW`grD$_@;EE(7+sPv&hjd5yUGp5#UX-(M=xh9lt_cJd zC@w_)3~)I7-Mt=34xCVYMKU$Q=(^5 zJ+~w}A8{c&*yds-7ca1!NYRdDutkJ}jpl-ZLs>Aon;_!%#0J-c&B8=$BS{GsDZ(^n^>L&yXLG6A7<46-@YLd9?-e-{mu!HqyGE)|3Ct$+rZC(NJS+yRUtqP_^Izi|Uq zB1c7pncM~w75?35)l$~UdSHQPa1ZvtXM0Q?Sg++6a^xF>0gq+mE&PSSGz9Sk0ONqQ z_^p?O{S)NXAJh*MO3VX8LJ9IsVi{YAN6#GHrz%PyLXoRzL@IJJ7lsZK|CGtZy^R!>+=j%qhOP-4U?g^{={?;zZw_xPt z{d)9))*X-sai0Hzo(;}#5U6PByB1`}&puODBe$H{E_YB8_}cPo$R*hqha_+3piOQ; zT5L(!iXVlAu|H(^m2jJEn*ZrHfy}wZ#bJYIb8X+p0kgxwpNai3tH-yy!OP>WEePqh zouS(k!0%$`VuW?!>gXbvSv?5giojqSSjelxsiA4}FI^4t28%=-u^1D{P+uF>;w@c` z(jTa9>6{K$v;qtRQS>m-q@LBOX#k;gSwt5ahV1b?mdt;9`KSU@GcPAAr5oJY8QAq2J}ct z6G6ZQu=c?i`T>a3b}y#ByA1=Q}t5kewgeLZ%$$HUyZ`8s!j zNUj9WxwUl=Rf&vFxcY(U{nHG!lOR8l`S=^#c7lZq!Lad2PkKI0s1IoeW|y6|!EdcA zxix-1ytul!iWcXBoxpd2;M&z6Kl@bty4H^;09&8V*LNG1_*Lr1cT9wM;LkbkB6!=c z`XREl_qSs9gju(?G&pk@b=`ZdiCB9?XEy2|2vS_ zuNOFiqj{kIA%X#70?>A}fsG<@FqzRbhXvwt;+R&KKTY_}fLiLK2N^`xtoS*MvHE(z z1jgQLqGq0X$*|!_dSW!a$gL5N9-XfN)UlaF_JU1yrSQQ!?i;NR{_{ zfWJ=w5Gu!e_?z^Rl@{!Ac?-Ege)#S|_XV_Ei)WHKtMcrvZl#Y+r!wMc{*}qk zMc=3&&L5l7nAh&DNPr802C8hT98~^EC>X)P5&BXw*oBLjMEEW-#UAvMJIE{hy%)3=9dNLO2y8GvA$dz%#Fv6?!v5gZU~QaEm^mgONw`E6 z&~+EI94;F$w~0bz#0gxxcKkNGx)v3|u(U##DMaQf{Zsw-K-sWf9NA9`rUxR!mJ3lb zL-+>he9L?SAGh>-5%Sh@{Hk_`FdDFK1^Ktd>}Iq8o45cTxVi>bRHQl0U#y)g?Lf^i z@C;&6w#_JH9ME3Vg@d3api<=!yr}5Hua=`hr7Un4K&%jzOvf?V_vY$y>++rRSfxJ~ zPnpqCb0mA+5eZn}*}A_uc%1-&B$o==V)EnZm_Zr+C8i{vCeWYHWJ<}nKEQn8{j{*G z$q**_gze8UX}+IN`_4~wiHbTBtQ?}Bp0-ZU-Grb2hOP$A&-3ng`E|a#B4VS1_K?c! z2=i@c&fKwd!G=tt50E0y>PXlkheZsMeM?!|zfR}B){6%Q@RlOMSpZZZ1{`h=e7K;% zW8{ED_Ml%m&cXcf7k2Rv6c;l4bw({r*3W}?S<9KJ*WYK+sekw>RKJzWKl`-GbtVRp zMMKfr1fLw7aeoaGqKnE+*;sIyfBBbEqSdxxT|}6e<4y<7>%u5bnEQRusAgf3A`r}@ zPRJA0^Aj$~@xz%AqH(A2^Z@05wbdAMSxhkHNdN=3Bf-XxF1tnZEHx${!wVQ3IEb6w z4=edYb6#+6+-+!Wxzo)c_hM|i!J3R-uw{17C$JAgz(_! zJH=5o=GndI;o4qYcYh_yy^-&ormvWP1K26E2b)r+_#9`R`)!`UY%V;Q39M`ZIC=<% zFF<>!>b3;^5&sxYceFfMq@y%TZiw9Vbj=}t6*z^Lz+M#^(!9b7OI2Ey z)n2!PE1>?UZ}fS7;&1j8{)TT^J}u2=;BY9AUK+0Upmc>6Dd-X(dM;VURsqrI^!#`U zHM?P})~#xdkv-I_WeGGg@9~@w_iae2A?5)*AAee9^}+ta^0C{fVY%Na=-!xQ8M5eh z`KCY;=N2;xVw(n@cF+%^mIz_;9%8qUf|3BgA{8LTW1>UTUxMp=R6B{4voZ-b8Wxo} zB5Uoj*%XfiJ)Tj*>?T6)9JuanjaorEz@As1C1Nk%cIBd(HPP_3a8lCH(|i_;raSHp z1=$UvZeT_-=*Q*lBaEhq#4^6c4cRCk9of&sT!lQRNU zZ((PsZTa5;Bm9ma2DIs1#2=dttnEa9XHUQb;9kKqD=g7IIiuv9J=2H)u=k{1()=kG zQfw!`WgU&LN1Gm~sy{$4LoEkQR;1^q7tQK;97HGRjlT7yk?`6ZnFDdarB`cR`IYyg zeN0y^`K{%@!d#XHlS+RjuW;GIczp>wX>{1NRR2cLVcG}x1>IdBeS~KP!NfgZ-T*Bt zr{zFSi!&cp3V=Kg^+>k0oFyTxzm@{ldjo=%8uB?s8w}ic`I?1ba&$D8gipBm z7N}4`Kytbg3J^ZmjbfYDQ|7A|E%!C))dhFo(Q`VfGnhcLOKHlj`VU>r53~k%q#!Gi z8iAnYqs_LF^6s`qqn{h4x&-^Yw}EJKMC?QPVP0FhGvbaFW5ehIP1T#|1^Y)O zLgSlC1;GIynx|+#yef(R2PIBIEpUW9ET?I~0>P|Bd5x0}pI<(!Uq@M7Y?vYg-!OR|H&?UkK!{by7d;MMED<+{Sbbif zW1~mS_clEyPTU}VmQi(J!ygAKqmyY3itH3dDJ)2v4!2Hzj)e&ee6))JL4H9y)Z<+C zej?S!v?Pn~kvNH4zmvpJ!5$agviY{kw+P@DrwA=%3^IquLxpS-M6Yj&&(W#$jL^>H z9{N2p{m<~1H*}ajw~Kv#*Z{T-z)Fy}ni#>gu5Vb^dK)UK1e38^oh5U4Tz?iJRoQ=? zSU4RgGO9%A1(q0#>$We); zJKZak@3N-_ofs|f!D#|8#Hb)&%hHnGpErHW!LZgnm^dF40Jm;g;+U- zKf1cQdZJ%9+bLdEFB`Wqbb@~8en0MCH`L;HA2`g&hb5>063vCw%_bvLco2jhrZ-TO zUYj+?VT(F`spcxry^UBq=!jITFUSJh1G{00?4Jd0IfeTcRp|0smXF(cwL*TKP+t|x zUyG^`;DO%*MvyykO3l!99ChC4xqJvn5}Pf!X*q04ejEwLDxl*u@fl8wi2Te2^^MZhJsdFtHX{&d~!m*B?HuOei#PO0G}Dxrcjrv z^K3@E`}^T2x^`?OV7JNqbL>-tEiPH-LhTS z)KoT91&cplILFIH+%+Rbpzd87+FVx3YmC=P;%98GK4A5pcq|_aD9w-aww+ez2d6oi zuSr#UJ1VN_gxvaZIfw*sV>T#tex%8$mBZ;>Lae_rVTt(sA%we?;vJHxvzVd7vQ2L7 z{;U{;#)Om&uZEVs05Q<=mJNSy!;gQomvC^{q8z5pTV>R^F0Lqu=o})%dIH^{nOp+s%s1Juo<1_lR=63#a~ zpZjRzz?{xgAl`wjf7-KtTO0N*TK3c_|A2hlgK|W$2pAJB9?gtNZEywUs{(V- zF%a^vfMA~nS&92YY%r8)4vEy4V5sYKrAv1>>LU%^49~7dUNw2Ht-UJPC8W0*pD7DC zgD&fu8{*b-0E2vhSE)b{GJMr#`t*y;1(PsqXcj)&?YKAjBkO^I|HX2nB)I)^c*yXf zM&zRq7=M6Wo87Jv{b0?>u9wT|#qa+0F4BUAYW~SVYP=+ojAS!R|622YAeHmJT}Ker zb$aw*RAfP_l?QMBL1gyTwkmq%qe&;)%-X4+FOKC&u?j#iQw^Ngos=2Y9a>INs???3 z@9+cxtRgbPvAEj|yyRN`V=D6nK6_zrWZ9c`OF>nxJxIDS;Vy&ypmbKB5=5DwtuoEOCzuzyehH*g%l}Cr z%_&5C=J!?yaVJSCHidb~Kd&H&uZ$V7jj%(tR2QxwF88&I`hXhL0RjhHL#h^$uEPYa z-``6>cR=Co`XS9K?a1%+WL~Plwv~xxDJHepFPVV;88fuRa!f?6s4ayK z#Gldw<(pQi@v)fwxvjurd1=eN8DKT7+l~Z<@t9&eIEZMaz0tc`xXfJeFm3BxP4WjH z3S{LiY(cSj%|ToIeFZeP+4gFiG|vKCp4GdYd)oByuYn^Jn)hZBy`uPh)|sK{uV< zMVHuW_&?3KYh)g{H^Ia7vf$AFID`Da|70)kvl81)?W_JT0!g@%2$%>jww*QK9fr6_ z_oZpfY|)(QfcTT449UT9sQ(=Ii^wB^5l)vBVyT4ySNHSSC zZBtAU8O)64u0Y;9GRFm1M$;P}>sgP8B>ii4>0sVnKoO>*!>n-`N&w;}a~E<%hF{cG zN8weTbY^woC%m#XBljoZJ#YDA^6I#+`G#({D{5o|Ug76q@B2RQJ&#}P$9S3FYHW^0 z9&YzHgmQh)sYgbF-LESz((_7d;j!c zxCeZ0J?ELqRegfQHW5TIKVvK$3!i_FcNhSa1&{jPpeO6U07dlB%>kkBM3;+*QtbvT z@BaV6s1#?@{z>lU!Gb<;iSm;yv=$Tz0ZEJZd_&7ph(I1*w}QY42Z2d83rGUsaQI(< z+wyYQFjj_MqD_`P@|e(OHt3f;4i_+2A;tm<#C@7jE)#{cj8FZaHKg&Cr2Ni50DV=k zMS05GI`zN)smssWj?V%_t6txlxb5Z+ACzrg-`e_4VB2O_7B_v~uayMt8=OfYw7u@z z>jN>3cdeMVu=czH$d)#LP~h-HMvDit56RNq)$`$u|GqBt!l06WH8^Q-Vg8DW^V!_c z6x1W=OeOldfB7;(mT_=r~C?EX!~&n$z?glt}1%On^(GM`N5!HEIo zVaFim=bk@H=_GV!)+{T2j-DWb4F}hMCFH#+VYh#2jxqs!qkI$Y5+iB6kzjwqh^S_%Wm`(*=md3kH_6; zW0@NX_42fom^z9A+ADbWXi4RNB1k<G60A$}o|hBGD3> z)h=}V*K@-Dw8#pWPZ;*qhyz+I?cw6%{zxr4!RhrK3!MDeun9)~cIM5ry|=ttsPXq{y)U!G@}!e|Z05RC(r#;ida>hqPSf(T7+@gZi|GHGiRApnBC{}N>1Ss-Q1ZifgcCck{cR8ksMb0H{cHz;YxtZFux zOB-jeK%b~vbm3*di~D6sbRZ{wjdZrWG1t=(cEGB28NwdfY*UgCmwR~gK|tOD zFGMYHX9*H*@xK+^fP3-3@=>&WVi)Q{dmnZ(_Sy9Nd`?k_{SI9^U~}sC&t;E?F_!oO z$LGhYcci9BAOTRY$z&@^Vu~r}d{gW3Y9jJKMmQ`3fhMrfDgW4(ukGE=_e{(=!+&c$ z&vwHy@@`MMx~jTi6TUqO+_f~P1R<8pQIyBb=x~{&wT>k+BOUzD&EOi}IyFbt5XW3- zDKnR#1?azoQqS?Vi8_N$Y}{6jQlQ{cRd)Hxs|YX&OH`;yXJ05(fUzr!#sx8K9N5Bv zav^#?s7gJtul%}!uwn;?X`0MwpI+kDxUDg=EnDhe`Izi3N_I?c|v;Q)b_y@gmrJblJL~9g6-VM~Aj2ci#_PX@Jj8RPTxgn0|rGBa> zb0AQd(TUV$Ay#zX$shQc=`rNZ(>C=isB@@DE0B__wcT)m^LgLTdxZsCpQr(tjvMMc zm%#0cLiAMz%Z$=M(~mnfMtaqB&)wHLfF^B#y$a;##9(lj5SmO&dHrw?A#kQ9BHUi- zwRGE&CefmFF49=R>sG+)2#nMfXLEQ>!^ts5pf~9rYf!6wM5?*Br*BlxPue2X8Iu)g zjt{gR?WX@p&TQ}VI}FikB&HVmy!Bq;k`#7lhC$-2(t01`>lF!a95=kO#sVL%VdTyq zrR5+FNw0J?JTPAEuDzxI`E%(z?an!RCPLWneMx>ZCtfp~vw8}~#hOb-6c%2HMd_dP zha?^cvMvlCFe!H*QGtvp--d_5+3?@3Ei;;Jr z=%*%jC)*DhpZ=PRRjOqqA+&?-ubXs$SLNn|wR2PfW{}zJc1Jpa37|e0XDM{jJWC{) zEMq|U6sUx}HD4_!MhXhvpH`SsWxVA&`FH&NV;vqcr$JLFJ=}+co5tt^yc3V|DLAH| z&k(ffuDP6pJYeLxg%`h~e5nAAz@zBti8VQL5-0o$oXhVSl>!5z(lW&!(STSg2h}Ma zh*(kHSfHCK%u!Uf0zz%LSrh~D;!HdMXARwuNjngt=^RU)U`z4{fyQG@6>WV&2HJvE z9Xtr;$~c~VPQzX5NpxI3C+@O(%Cfl{p>5#&A~7ip(#K7mjzgo`^*G_**;R(#c=AFB z?Go2OAIaH2P9DnQSKL^Y_3~3dYDvY|K})bkL!ZA4+}C7=aY1Ol3C}tG_?FPIc~;Wj zy_4G>Cp5GgKK?pTvJ&zHq=1o6zYFWEqmTE!Y&bYb1vFT#^w6r@|3xR2a%7JhW-&RJuv zf9&h}7cNae{OU<3Lt!u07H_ZpC@H|RP*jd^yyZ5`1 zv>cMkmguP)Ba+qyYhRaKw&r++R#y$7ZEd+*rTm{#stpHgCV zU%lLLna-PIo{mZD{gZaby$>FnGuhFshss@ZQ^_=#Kbe)(TY6Jp8;gRRqD+@x1T12d zn9-ox<1br`7~TE|sObwhq(7%utK*hGGbFiJv5_GSJPwpHWoL`gva;kf*D<>Sgu7P6Gi|hOE*^Ja8GBrLZl!^IxlSkmFdbA zbgfqCzEp=uE>sllqf6{YrN#$CuSxh19K`t0+|ag)kkLjk}~;= z)3RwcB60{eEl^Djm&Oa2A|`e^8>e2@bYOiGBfLGDKR&THNk#K4o-rs-8O+`q9X0q$ zrK+Pz>u&1v&m6Y7VtYBUG#pf-px(DnE_V{@9efZ9yS+^lWk}Fojwbf%!{pCv;q!S* zn5SV@Gu7N=Y@2Fd8N;v!aRlLQ{bDBi$eVxop8{2(D3E$cqxcGWbZxZ%cuF!hqvXfy zfv%J)jjHx$S%q}YPlK&=){gm#8Yt@xD|C~STvA*`y%SzcQr#O65sc76cO-Q<#wK0O zQRy{)UpM>uS05Or^Y7)C^GQpxMj&kFs$-EhMMQejRmT)O%->laF9Rh$*7cl%g z=)0B`SLh)m)wm@#T~ZWE^$sk6z8fyI%7W01x{{ljj27y+e&p4#3mtum=Hp_i)Ev+I zE`bYk6FTFwSC^#8Fd{j+%X)~E4P*+m7Tgoqz=@F~&Qvu?4gsYFe!YXVV-{BNbcCzMZlxq)$R*V!#Z?PMDDc)0p z{us@8HEw=mG+w(w#5kFRQRTXPZPq)0yCW zC=S~|;(*cMrgFlihq`Ur{JRR7@Z0e+YJ86>qh)`k?PQ;02O~|c2^=+aB#ON0pW4hE zN|mPqzwbl<%FXt5A@7wUZEfMY!3aGQIOg(miMkT`oXo0Ije7$H8*SI?oKe(k)iXQq|OyKDtimw)KMcT zQ+TTQXM&(&4(ZCR8wNFg%i^YB0#BF$jat896Hven2qn8;P^k|47gSpQt>XlGmZ6kF zFULHdr@71FrKW5O#Wl$Z^GWn{Kvs)3$rgxbUMi{RS~hDHu{>s7z!79CN|Xuh&zJ!zB6 zzi@TQ=e0ib99g{=l?8%Q1c}<@X&jRcycIgKL_|$64x~uAU!~;Zw(Hh&ZkEJcEo@&c z^js~du@O&*6B4iVksPwSqC)w_zE8OdYHHIcA%Qw9TQ5fNG=#aZl_E&KCxT=UkD@`j zL2UHr|B0=X9Uv+-pw0Jm#S&GVtY#E_yk>x6TpbDi#@fKhd0zz4U`#EKnN@Hq;!%E^ z%cH&WX&Y(xF_&b(LP$yg4we~b(JspdpyCr5LJTvWgI?}<0oBIxjGd4Vhx`kOz!VQj zReE9g*c3k`6%ZU+wN86z>y zI<{1l<9bJJj{I#OCsllG2B$?}D6mitwNSA!j4#(oiVzRM;40tCHqsE0a%nL?bb>~y zx~-=dvH(8=hoEppM@5LJ#I_{ctQ zEOG6=!WGZHW84OD%7IFX_!l+xYbtfecgR|zYN)kYQt4u60Wv&cl33GEV%x4SmCD|% z1?nCXG+R^#5*HW%saP8L-X(t?@9xfj_u0mGzlDAy^}a~I?$F2P z{?Lfez6rLwi4TBY(xs0NDY~C{?TWoV%=*@;=gAM^&EY)RMFVGEL@go2&)Q#yt9aP2 zsIi0`$4YLdnk$7|rh1Z(5VVWib28Ny<9eiz!t@FyUg~-PM$!~391$t=cN+#el34cp z#km9%6$`(ei&dbK`ty5c!!p40!Z!mm!T|hZNo|%Rc8wSOfqTpN0&u$A`V@+LQM?lo zJ!+|4H7@L4Z)(|I=W+`qDB~*l>r#ureBe_s;e`_&K=@>w1fNEtd*l=_)lL+wxK`4i z`+8#@p<1~x3^JzO6Aa56L4~oGKFyf+f!9|7t=SS^d&P@3XVhO^f~gb?K+<&=LX%+T z)67m*P~=zY9nNfp8(UaA9n$YASc9>~EtVFcAg4#_u2SCw$yxaK5`3N;rtTg(NU<2p z)Y0_t1wg;tq8ftPUy+PQg`Q*pX4#ILL}&{BO4Bx8NH9AlOQQCck7eg`!(E%!$HJQ; zPs10bLSiDV1&a$Vb4u+^c{o(+>N)am5|;;qn@0a+X0K=wTkUe%{=M$W>ToEm@%~KR z@4*_^b3q_)51;g&o>HZ26QD=f;)%E{c<^AFA z^*6)r%IS<2;zPR8l1)H)gQlmLgKV{SPA{g2IFr5z5OUm(&jr$2#8!UD>le}ss4j2E zU3PgM+xam(RuZb6O3W0IdCnqb#>ye3ARu%tW0Lr2NTx8S`YLT&EOc=CCdvVYNNZ9y zl^@q=aXECk4DIVaKk&|_q~8h6LOvsKk>NiCJ`>u@p>a0r6@W|`d&d({&wX^q8rqwM z6;2fl6YataI>q)bieCWyrGT7WjG=%hqR6|^YE_jN*#e+x&dmXVE_>ecHSr{RMXj{t*5H61qzr-#6Fg!VNM?19#rWkxt|$%Dxnj0 zU8Wi}f^~tmN<<{%@2a(}s!*>+?zCN(pIv-{itgr@w7#@#g4tf&@M(T={~3qp$NQY^%jNU(eLeW`@^Jn< zFU!;ax$gtT>PX$a5?tT6e7$iix+BT_Mk8-}TYnol_Ji`tzc!P!?&)aoc-dL`0*8nG zw(vY}le&R?9$WANx?{9e9%GSK+yuJUg;6A}5XrS|BF+YO-u#fvGu82wMWk&vK(!Q! zo%X0JD{|Yzy^AE|6p9c?o9c?G#a|_!^*#IE#1^~k2V6YIXi4tv4nGIYaPB@jD$5l5 zSpbC}$wzr*f4e3FONMNJFclq&L1Zxy zz)F<9Z3vwa;hZ2*C5EwM$6;cehc&p{=Y)6=WzUQ*IzQ~v+ao8`??`yB7X}=t&@>%) zP8k|PZXS%R)T5Jwv0oupUv;NqrWOlNB!-#UD?U(UY8CgqYwKRDFqQv4gm&r{0F6-h zBAZuVtLr2$U9#%7o`reZ4HOx3UakNmKY8NFcmfpEK&6_Pnu3`o_@{i7oq@jTuqNYj zHE0(K>Yqv6Aj9>brWnSW@mofV`jEvXH{*FY-1s$ZO=bdx%;D>`NXb281z<_MXP8em zE&=_h-u+WREN?V3_YN=`&VpbixbTpHkc`rLDC}q~Vt&~nA9_li`-N&i9wgnA9`Cxm zO><}_y`o@gQPaRiqit;5;(4cH_;aIg4&eFn)781t)z`j=UX;7M9V9;6-7~twzU%JQ zh>J8e-;Qy0r}j%Msd>ks*ATYa$nEY>_U%81dAG~1Sk2}h+2Cx{sa5&I2FPcn3{F4| z-m%4$S{tcXyx9!mI$L7tyqXj`z)@=GBr`A=RrtNZi?MEcPZ7i(Wr}zKN}!R*(gLzN_HZhCOSecl}hv%O->8H(<~)dgJf9_Dv^`sqeX}Z9sdN5 z$Wf$OlqEXld<&_tU7_#Be|~<%Or7Hr!4bXlpgjEp3on-w@MnFXN!-(`>cf)*3YH+S zDHDWCp~+Peuv?bHBmpB-A?a%7T>_QLRi+Bb^ztuAVI8m%x&PLY*r<)MAeG2I0M3@A zLSy#aH*e1{FApr`9^<*~hsc1yi&r^uh!(n{A9mA{s&jW(jU0? ze71>69`g^^1U;~cye67ip1Bd{C0P5KgmSiZ3!ZT|EQw7q*2SO&BZ6ghj8%yW88ESe z!QiqG(uC=#x3=Ajg9qEKMMr5SP{t-Y>=_oDiA5jeLf_b zoH5&gjd*sKz2Y5Z;FtgHJ6j6<`rOo|X4br{oKAG#)a%lfaq6u0N;cqOF)E%XVK-PE zMFGJ%`MBFxq|MNc#nI0fVR$x%Ypp*3bmJ$c+0z81@%4GQU~@Ro8-fe2;Y*Po=1JYP zYr}T!Me)1#`N!fe3Q-J+FkUYX%(pW7jeud4$X2gXPH_(=e*_C7C5?-rUhejs6Wk2| zmE_YEUCqh2hqP1rgpPyp$5a#~XJG2}&jLj#1AurTIsFnL4eO8$$U!C6%#L(F3yF4S z{4?^6CmgyYy8BW()E^10T%e~yOF4Yf1_%-8SDoHeqf5;m!8aR}0(q#7A*ku03`r6H z_Lod@&yP6?L~C*(Ya~fSO_4nJr;t%{BL>MVN9^Otu&K-eKSl5HdQ?OKP|wif7|)&Qh<0HR_?CzrcoOL*?-nD||L>ihDBlG5XRmz8Rus_~)tv zuqE*L8d583rL&qCC82FG`)A6h#Q3~~wtu*4*7(Zi2pKjcp)$h2X5MAQ@OtDuqn6~m z!*k}5>3(%3MUg|2NsG`feeO|n_OV=5WL@VZCwLSPz-RLenhVs>%Sz0coVgQpNpTXw zbI{2&a90A%(3HTd|JIf0fH(F3TUUbE!!Wdt0tplHlxm&&i%9kZJQGSiGS8uh0Ug~& zE4c|lcpqJWMutC&v$)(@uIsuM&-6`^J-7usTqP~Ba|?XZ!r>4wXv{q9DPx!rOCfa& zDq$~@6vdJNLUGU{P=;hH+>c=G9w(PNobE`cS9K?YO!49~@L?a!2-dW_I-bplSTR+U4*Elq^#%gvk~u}N6Y4JG z2r03nyAk$NQL}&!>nnimM!NwX7o-Y?taccI5+`8c!9u$rqPRh+j!RURl4*ue99@~!}1 zPlaWmT^!R5UeCHAhIr&in0fq`S0%Tiyn{#*j;x%~P9+QCpM@+2+!+TDmvV$RWN3PY z=BQ+3TR&BUZstr`X!5eClICbMxB;0KTR^AFrs9iHCRgF6%A{K`wX@cpFVc1mEgrzj z3Z9ls?qf4L-ak4WY5b$04)xYPokIYo$(r>+Y2VK3+F9jYHm$d_ER|BYIYV#_&fqXX z%*>wmI^Fd_`>YImM=IZUz%?4KI_&EUv+p+wBogUOlI$&%N{C!Xd6i8gwP3!e>wMF? zY0p5~y#Z}rIP$dm!zH<@`V%xPhvyz9=-OO&@9Al6tuy4>Rs0q9R*1Qzpw-#uHp81i zhRRv*xWqZmPlU4edgOx+9AA=8 zk}w==F1{pKDcjG^b~aOQm)OoHZ;`snX$WllQ9LJ&B=Up5oFtlXaGshtq~Kx+A*vYev=j(ORsVGV78I~}rX6Te188Jl z!Do_v#g||(9mH=-?keCf*;Oe1MXOHaP+RT<_&4w}vGjSx1SrXPlxDrU9GV|0pL~v> zRaXb}rWCO2dM4b}@nz_l5^RErNaP5gcy8?(&=QT>b+KcT7*xaP(VCgBM^huAgc=y) zJ;B)Z_oXUf^Py54D^_d{qkf^G;>NZD76Po!rN&)C2<6gKU|ATeu&vRm(6yfOl|J(Q zvfJBnJiA2#YV~&TK!*h|Frq!|;FV`a7fO;zu@TnsUFkj&V;RtIGp^05CJHAGGY zNYVzfv0)|ktTmalg6hgS*j|sRp=@GJP4rKlI|l*D{$9m$r2v+)*k&=|0EY^14q7r< zLdbuFB{nm+Uty^YJ#dhN4vQ4Kzrr~duqnP?ixA!>G|E)41rca|MdV-o9R@qMel{5o zLF2)jNI+3-wBu#3&huTn!oPR-L&RmLzZ~<9f1EW#U@n@F|B)jS`ui=SV&s&Gy{6R{ zlxf1!G?6JLbX5NHMM=IZxV>EB!oM;y#l8+Q=@X-g$HL>xqgLtSl6Fe7h6!YZe}->ZzM70J8xZ5N5LWC zz4Ixy@hQD4O- zD#`gQfk{aB{gm>N4 z0RvawSSw}xWdi>2s*OfA*=x5^a-RKwa`SZR)J^zUzJhDLope1rAtXM-jbu>MG4HFC zp!zW@2J!tv#%9?klRN^!W_f^c%0N+*TqP0#5|N#`f^Np;EaCtp!rOmWNp^sj-9_bx z#>=3O6#rJexklnW|2J$Cau>At@DQQE|RK?T?owbj+N< z`DGZyQ2BnNXce=de>?ngJp{AjJr#vVbK!%xX2@5}6edlyf$0Y7N5(!yAM)6sLEV*| zM>aETv)azMq%jo?l4rttNCy3hFY1iANev#!?uDlk+I%txCWt&BQ((4w^(AN>+iLlPG%Bw5t~^MjC@zzC0eZo&UwKE-*S@E-`zC#T z@%VF`N%{8|{X&W(-WVy`>*lhqwyeA{R zM&~@ce5DBq$TuDaQmIyTO!HMWIFt*G1HLL@0JCyOD2oz_iWe!hUZZ}~KG^X&OF82orzX?Rz zkA;#{U9alw*n}Tc#TmLRqsoD@FDvW9#;!(*-2;C5s}xWR`N0+7RZyTt{MM z5+T{h6rSUDa*L7F%h;HY}&B+fX3D5SJ|jFX1|MIvD`79+icV}(RS-WM#Z zEN;Ppy1+qZob4*~c2U~lG%90OnlhAf6>m_gEXe1Z4UPmT(P0IHOB8JO_kh)|r2@Fr zB7H5X{HFmDEm+>?`Q{1ljUq)U)~|O4SOUZ1YqY)pN6Ra}uGPrgM>nUiZ-ZpjqK! z^5IuyFaGA&ZGJ+@8cWyIrw>}__@S6X9ps$MwA^N~PK2X2IMjE0l&KgN|7AUuEE9c7Wem>WWs zl^iseim{>iV8nKR28P4ty!K3!3+5~GdO)$a&;%Li+)1<;)k#)`?k16qu!_YU2dOEz z(5;M-oTiFV=|0_a&$NT!s0a(z9gY}sk^!E=y^pIOY6r_vs5DSD2lgPkiLsn^Gwo-F ziF{|V`%-oLuj6Z5e6*0@Fp+Bp_t;=qi^z`?_Bls#CUd{bTyG6gX~h}=Yv5`c2~}=# zWTg6Q9|q+3sl(oKS{Ww>%AEj-A{%w|S_3E|LOh(_tflwQcK@}{wq!Na<&SU}5%zZezEVz+&FolRshu6S?OYY*SjpQ=|xcPK@4 zhf)O2*GsmyJ>rtLr{#1EQ7KOM-Zujw=&}UgAicD`UA`WfcntwgE+v`DlP8YgU5R(X zUZb%?cQ_?_xG^DSd9?Vl|E}79S8cNt$?|C%tyueET>MaM(BIk*AwA>Y+W#KlGyFB- zOx?|Bk}a_5xAcBqzN4=N%cVfnK6YH$8*SLDb|dY@b`$sE0$sZR_h)+HSVD^XghIhWi^x;U=)EDg}v>DytmRX#w*{ zznZ+8pfeI>Ol(}ixE{kSubh;!ZruC-WV`prvfHc@UE^*QP(!*F()ByhU)$csmpA}l z{{1)m|7RutdNS|+asL0C>sxp4W&Ho&zjybG|NlSS|Noxja2zmM*cad9^DeNIGd!aO zsTWW=-#GDaK76=wJqP}Xfd~P$${ZU2%59XjyL)9kaT~Ax7>9l3kN4`osjAT4-y?Lp zo_6z}=j4Co)4lxT-6}x&^Su1y$dX^?YkK)#`F-8|?;t;LeJ}qjU)=nYM(c_dCV^Ju zz8(j1H$~oP#8cN4ZE4tt5O1~w2x@%04`8mGx;1O#tQLQG@$_sH?HUmSykNtIBp~+z zvz~Y={FXwT{8@4 zb)a1R$;3a^+XoWQgKp#dX-nt@NZ9dP-BHx-kX7H#pk*kD3}z?MLBdknZeW%z(ffef zaOF(>-a8nlq_84BK;*K9GLS>$7q6)2XbVW;;rNYm!{DPienI>a`7wJW0xkvcC699z zaB-DtQb!DqIhjL9)vV)`Orr_LFLfSNg~V`6xBl8-vBpEROb-v(fZ7t$qm0>JH3W=lGWw`?Y7g&tE;+ z-8+8ua{p!R@WuYi-Q$DjKXi_MIXd2dR^XWE6LBE#C(7h)5}+Ey0M67J;nn3}|F!?} z`To;9=zM2*9!Knik2prU8e)@e+E4?xCoqm<69Qn}2?4NHuQt}!$|r@w95;8X*j6D% zO6%U6!xzT~htJ>Qimg3+g1v=yU=sm~Qc6gXmC6sLx?Dn?H-Ij&viZOh6=m}1<~=_wDAH+% zHaJmMSnf776m%MA3|M>&chf#8!FpdF@PIr*_m>PS;RPJh~MPm|tGxC+1OU)8?M9V{2ltdCJ z5~Gr@t%-cCiz2}odR_-JY`;h#7qjQ()m?S)!uX~(N&mcTJ0w>7GIt4q_5DV zuUG885aEXMI-y*+D=F(k1lOz()T&c@7DZ%^uZt&(%Bx5>N6H33y9=d5a45E45#hzX z!)Gs$al!R`NXStk?;~$Dq)6H50hYYDYQz65QNXigiozD@N;uF2W13ucgHDuW1G&&W zCka+-D0Hs9t=8x-3R>G6cqh)|sUYxPg2vZ=n_S>ZhCMjHr~xiBFBlLj3i~FZ9|p5g z*zM^AiV)Go3~dTzglW*Rkts6oVF7%{r~DMD^c^C$Zql!+1cdo+63pzh1+RhM4Rw(S zZQ7y{PymU}*c(OjK4x;VV(h1Jt#|522_{9!MlBfAaKy9myV@i=^JNpjnAh~+QA*cO z!d^#~{tYLj$w~@x)ga?sqtP(cIg{{Ns;tdfq-?5|-dzotA#qF~QHps3S)77&B}K*F z>L}LUg2h^|)*3Yh40Yf!Y{@Y-f`eO=uXh+{k|ZmK7W4iLzEfVx^SDi|(rffzgy7-VAr z>z`pzlzuSq=c8FplS$*fE<2X@>YZ9LpHyL)Rtk6EGqle~L*z8+ zf@?p^3iZpOapw+6#0Fs`ANe_-~dYty|ZEkReVaUG`G9I{r z?$rDl7r4KY*QuWE1k1p z!nOKS>?%EtX1raoJO>jPs)kQ`vA{S_s5#v9%`MfuraYX6Gh9FLOi+WbCpfE;d zt@S4F)VCz0X7oa+pL+Q&#Gmt^M?c}D8==zRRaHP~)P0n<^Egpeon6pf+mfPy9O8K* zOPg9J30Ibh`(3vTBrGX(8qP0tCHQh4Y*_8zQlH@Y-q}_LP=4^V#)GXIFi-Gz+CzM1 z;N7#}ZPqu=?tL=EyD5lwKN%uGslU04m(>EA0U*+`%S%rAJ!2T3T=SW!c}1M40-JzR z9z~jmN*+bMMWTxM=lZA5&DqwUQg1aigBza)ao&GN5I+F~?0eNFc-*LeVvB&JyU1x0 zBxCrk8ij8f#{Trws{d2FFuDX1wt4@7>Ic3@2_!ff?zx}uIUn6`>eF;~af`OeL25N{ zYGb!)Vk#J;6oRn%WX3up+3Lny58lB!3)HLtz|0IlF({9N9(x-np&^R^f|w#d*{q4n zOE7ie)J22_swyd3M?6i1JtM5t_c3@}AsfZ=ojam6ilU2XjB#~2c#3Tqe90Fj>Xt%8 zewy65gBPlJpx%41j;G)U&)<0XPM%QTc%A@Wy!Gb3 z`84hM_ug#Xe`^6@@cfhlgb4-|zB$0Q?xw(vH#a*Qb=8X)k5c#>bXCHb62@=3qqhM+ z25&~)xBPhaW<#pR=S_IFzTJNVe^oVSu}6P5H#ni|%WnWF_yb+ygaIrCdg|T1KyK*4 z`n@J`MYJvXQ@^>6p<(-*{4>Ig{bbtQy13vB!NxmC3Z@}+877|624Nq`hC#f!PCr<5 zFjEaWeE{U3hrjpucRKaur&)iq-h3-BI9B@U&E#CAtM;D;7ydAkE`*!+F?aZ2i+&#R zkKf#)A5|orQftHCHrCf=BHlHDHm0W$570;t&}gih3=cS6@Ds}qQDU$Q*QpD*9r5SE z16i75|Kc}H=;9wul{qg&`HhjJ#@}E{e`o$s000H<@lQ99hoGw-M)EKUOm66^ex_B+ z50KYNj(W3zq+9lDDoY&NIq=QR5Z`;qoi=Z723mpYG5zUo(<;obnJk-bmd$LId+SaX ze9dHe=w?YZGfaG%ZvCA37(1WioD5q|hOJZvJqh%j`Dla3w`_(jCqou|(rtR~Yc@-K zzxmEfC)nBSamozR>|*nwXCC#ZNppRJOTp8o+DhZ-B2)`>@}3^JU~HBOkKsFNuM6n_MP^pO>FJ--}Fa7 zP0{#tiu+ogXu|X}wNT#FKAXmKdAN-IF|g0{0?b|SjJifo3Vp<*``D~l5M@GJoga~F zOHPr$y!)0PH}1am%@g$-pEv0!pr^ZUB~^a9{ACnau;gVk80ng*Q~0BkrhN9$FMs8y zu6aCDj}Nvk)FUcSsz=m$Ho(pvs1Iik%~RJro~g_-dNcnt!j{fLK6&8xo_@F|4_os4 zV4bWv6r!JZQ8u7v_6*JtkADL7+f)x5>LJl7XPZ(kOv1U~{c}Ij@Gc(Urn~4hsrCyJ z1zyr2axn`gi5#W>A#DGj2kTkF%%z>QY>i1f>}9qH_db*L-h!<6GFi9sb8e+GjsVwx zz&}7gJbariL$g(Ldmu&OfNM7SpgZlUr{;!E(N9Tp14nLh24phsADAqFGrhq;AvKGN zu&U+$J+Z-pcFd_fqX9o%Z8p;D0zu z#Gf5Z^0W=wC&;(8%iH?S3R7GucDpQ5mb7&(>01L_*0<(aybha`=8=H0sZ|YYqo0|j zsZ|~JMt?;PgTGlUj-7CC%YGxy#3`&mJFJbHWP{M`jRQn+ICefa4G>CIF*>>^Y@Vve zybE=So<{nKax!OA)n(3NPDI8=C3b!N6i_O&H#!j*98OG--dD*+uG`yOr|)li|DL^l z$j@*h>5Rw_aiT~n=sET;CujV4*^hM-kW->m4$WZBbGiJh6saM>klnWUv zet4)JfVq+fQydvAPW;Uta%8g9^GHqA$eJo-wbU~*Ta*F$Ed4OjYoEC;{(xt~x*Q5B zWpm3se!rm}^~T}@g_9pV;MO9$#t%rO@e}f5x{T)9_?yMVnJm*pJ|fGeA7wE!+om6_ z-Vp0%zsb&2?3??EIW{YUV&PKRkZrSbF&pP*B68o#B;>!FN%oy#=hB~%gLASlOP9&E zna;MEm+jtqDjTzQnQRZ!*)mNhrcCD%7B7<_PGyO6Gi{|ZZDlf9lP2t5CWBiQvwYc1 zTd7QWRRO2x<|5WFn+DJf%@|})F=)Js;bTOsW)QssJt+K z=GmNQ$m4N3GJEDpc8{=tIybCkPM`8X5LYNqn;Uwo6KAMjfG@0?m(UXFa*ghrbXIebx@bJtkIYG`SK%e8m~fN&6Y!Iq4g>^0BwK2` z#Cjf*Q%X=Qp?X2K(teha6(&>gk^KcuzlW z=_hkS&%#k)K*wgaDF#-(BV$U%i9KuMXCjQXYqO5gYkR2L*jJ!-Bwac$8fNyP{=Biz>6FnL31}BY;}`< zwzc6V-Bbw&2w9||nx8E^f{-)QY?2DW=mSr8t3)X-M5%WWlzTc z&f5Z*oF32l#logcM{0pVF3I2ZNB*RjBUNH5NA8rRSpO2nSQQ-ky?4O>-Vyv0N5?(7Alfi6q> zhx5rooQyei<}l$4DtTgA)GYQd21#zsoC_5VEf7-P6kbr&Eq9TZ>0)8W`aUTQ;LpNS z3O}msT1yuTrBrr-WE%Sy^240iIFyW%L5k#HN)qV6XR9L8#BGwUD7?Z$4jLm~l8a%- zW)V`-X&4&{#>RDFY#11$8J^>ta!D?Fw6*j*=WCL7E;ayW&H_R?w#zF3K@u)(=tM2ZAqjnRj(BA4`D2y_9Y%R4o=Zw% z9?5>Xxqfe*bk((1vRjhH`c0*%o~yM?R|BWxoZZHk2C1^+#4dLMht>58UhuKTCGRb) z@!ql;NiTi@GU1OoTkdp9lH>&o;&f_fTTJ^?K6m|6iPPyq8eJE`Jf_UMhsL`XU8h*@ zi)L`$Zs)^y8)*pdHk%8|3uo^X-+Z&NxWe?PJbbs6s%`7W?Y$3~@7o~kge9xif$_j9 z{y>-10l(vbE}PZO6_vdP*avv^*d(adBc!jR)RWWABj&&V;O#@nuOA`(;U*_O-26Pv zqA_l6ZrztYJ1LbLLDA#(;D$3d1+IK>MO}9T!w^0T})-TgFkr~kaMU4 z)dyQ=d6;scR<*0}tx?2=4e)ODlL6kf;e9eR3s@43KC!!O%BVXGM+!n&aM<9BqM7&+ z3!MSwyP$weonuB-5%U4~bGN^MXikQR>m5TiqC#s>icd8Hbw_+N-Vs9s_;^=;BQ18R zG66CX>&zoa2)%`x8nK3XME9gd-zo3N;9H5S2rN|LH@rF4IElvN`LzUDw)8`nTzGnY znsjCC4=3|6-r!O2P>YLkEplZ>}#bNS4HMUr%2b zor?=$^v>?*R1Jxcv6scXVhla5l3DbEuHvWsV;H|AvtWweHte$)m|d2Cu*itp$yqnD zhjup8X5Q&NIo(`eI2{g?*Sj$Dd-~??y|?-09xN*d%jxprR^AFmwKX&}RLhC78mx7_ zLYz@m7EO{_l+Q2XbkimAZ${OZGpoYW9H~31vydscp695B_t3#OC$IjdGAF^}%=(+o z952Znr!$`|$$Xa1e6b|+g_}8=-dktQnrOPU-m5JUc|`BRJYEA;d~n}+tnEWvFb4|S zf~1bBD7l-rzOwgFlu-(igoguZHq z(PV)<%wFP#_nRVv(aW!I36;ym7ER?RlDN}ue-RZwn}s@4cfsgddC-Fe=~Udq>ySm1 zFMZZU9zIw`DyTfQ>VjN1zXyaBJqwAXpWZ`fIP_BIc-!?yg<+-{lG$pqHnS*ks z6X%d4gj>nO!j^<+%659wUN@**$s&SrTgLPqH`)3TIWC;?c~ zM)-KERsx%y4-ok5Oq)nW$y=2Dmi61?1aHeniqu7O+U1Ux0<&bisK_l^oGiMlvDRU} z5aM2j(U}@CMBFD8D*U;Q;3GE7CO%$$fn*mT2K$EGcRYTB<`atqMoEaFg>?-x+KKp+ zd%udR$!55c&4;9~xcM;m#)i_}+!vDlVp0AJyMVv(a3inb3l$cVZZp4|TCd(+fTUQz zyhPgC?oQGV7M1{713qVz9+DtjH2Q%SZ3dwxgGBRd!OAdtVU+juUS1a!*SkF5&?V+^UQP2j-LBcjVjj|AD3V$1&+;@ld_WKn%spY8lv*{GOd);DpO|i{IwY^(X*XE+S z-Yu!=Zf;FXw=b^hZf;e%rR=)$?^ZI!+zS-!8O|a6ER@bWQ*}kl6igzs`5`3J4Zk1H zCzCvx7w=tD`YZ=kq1nPBJ+$O9vteYE)_<9na zQi17U`N>9AOx4i9JqVHTD}TtL3u?O_rSY@F_}KtP zoD;E;P!4=H9y)~{T%HG`k>lckO^Dci0lK=n@ofqov0T0Z$FVtOFUL9hf@qwy2p@5@ zwT#>cZ3`_aoS6s9Pc!*aWrHH+u+?_{itgtvUu)t5TgCJaG30;=0l>k2F+!aUVvV9w zqMwFjP23J*zHx*Ox1;GC4zD_|jO(lmEo;3>zRDT5)_d21v*Y8`Yk*S6MrAbN$|8=ZonQ@Exy~rsrf9->bpX6*en0TQibD+8`fbDfHT&s*b zQ@$qce%4f&kz5ay8TZ!pLV>)8UldV$8GVLd6wzfkMY?tFFjd$AULk}>tw=e#HgfGf zrf3@I#8n*8kVz-mmhuX*W9*Q>O2rpcIp{bWt6I6%tiW98b4Ewis-uVIc^t)Ja)_CXWlrWGrmC~s4Y7T&u4Srqog?>S8p$NCCjOjmuc9}WhPaWeA`kD%Tfm)ET{ zw`3Ug{@n9>IKGzQaAw9Z2oS|{#-KyWSvss-TyeNiC=*3M@<+2EMpvh2f%ojy(Xof& zxNxg_RSV^$0>H?sfWf0Bf!M)uVH(b)GKzq==J^8*gopX#yLBFAau1FX3D~K3?^JxO z!wk_ADWF%C_i%Y6T{+u+qgDmlm|c+fB6i50sJscgZTIE9H+iRgmD6PM1D;Y<8zAa2 zbF~xposO4(^gEhQd~s?nS=3UlT5H#B9xxR2(TTJ`&f-V@|!hNjR1#BF}kL(F%gy!OM7$&r)3_f5!NL zH=U-D)6qOpbH@+yj3@tsXV@A1PzF;4v*0xmt4Eb;m+6MEJcc||Fvuz^40hO8FQX6^ z?d&pBHhA|gQh9Vx4Scbmu|Lu^c6ywuKT0mNH-6S2!O^%-Yb2UWq<|4Gqlo6ghJenK z*`fY`vjqAHs8#XT-;c&{M)1TW7%#wv0E{jdRCA0%Ng4Ja;P3=!QX#80HR{@}ym^WH zU4BE$NG=Y;nVzoR|G~RzNULjp7)fPi2&atuoJBccoKS z43t_b@`?>C9df1S##^bm;Z>Z0yqKObW(rjMr-8yl{ddwM)|PWilD}@1Q;&*lpZL^= z0g)Zn_hb5QmnQU})=reX3uh|Cf`FW=0ns`$DMaJOXAu)SehelOrh#QNyewv^35XJg zeft4rrzekf4+Xsf6(gB3G>lrt{V++DBIpdJcPZ7L`r$iX7jfSV0W>9%@{t7Z2-5wY1Ov$*#xvFV(?}mbgL&^X z2^sUpK|kWuF2>PHE#L_fR){q!>|$daaImx>_nh5-{@6Qs?p4>89LFkxR3xGq_V?n>%oKA9W`7S z(YZQjF9kcedRoruResYdk0>eV8yb{e zDMp^ofjVFok!m!;a9(?c%BD9>gU^C@`is$fW#N0?2fr7Zm;lCwMhzWyTG0adRrmgK zG(zInqVzdIWiYO2Qq}cl3X9JYhfmPEf@59DJ+q2_rN8opd0J0YzL}oGv!>}^#6c3o zXX1>-w-5{cq_b=q0WnLc2Pojqxfu6@ggVs-t&h}dgDRn36rtK?W4*6>Wv z{eT31el752GrtIN1$kv8lq|)6>ru!AVk2sXk01`DVpokRp988TG^9GfyNsye1kPz&tK!^q~Y8p zUrV+n{4pi~0=&LF3&X8lA>z))B$Jrm=x&!~Dvon4jEPR{Ikb2lSn+{%$iy??z)>nR zk5M8py2MbI)5Jq}U{rAgA4T30gs~N=7t*H`6q-ZZp8J<;8Tq&uB`U01Uqew4D1Pws zXr{u?Q@rzXjPZm+j-ES^RyS=cOB+Vf6U(5UNbVA;vS; z;kluq9Qp0)8t`s{>L4G_uoB86+{|Yf+Y&=`1keRdt!p^OCD@ z_C@hTpEbmYHtQSOC)2pf)*zJ}tzi0^1mn;go!WVr<-AWh5lZPliJRYSo3t<7>?h?4 zFbAA+4VeFFEB{Ld|967{`?e0eD&ARmux#SXI$v(A8yL=Aw79RVWUmkzhByjT-&xvp zR}b=d>p@kVVrf)Qthi-lic7uXXkOIUZ2+QiQpr>4AovthE@z&`!8C86DH5SuDE%>~ z6sh~?jdK-Mz%g_|)acWu38JA{VU9gk8&%8C? z)yHku5Oh_%?b0KpwKS@HU#1UkA^r8&^FWj6&J}Pq6|XP-HF_5=_;Na}WIY~KZ9@cQ zXrLB|auQt?=Y>_&d*F9*$XB&p&{QoO${g~uis29|xlZL^JrDI79a@c(2#a~-7kfqO zvCbJ2v~v?=;GKkW)c9pS@ikOsW@VGQ`lF?cM}s&stwA45dbdri)=zXY34d+Fc|)3= znf#=Ac6&cn0ADa)*wz^HceN7nFQOpYVx@&+1Yi zh*Y3LkivpgB2UZ(7{`j8hP`)GWE2fU4vTGNDKG)lQkTJtZw9TKQrDvIjuP4u@p?x9 z(qT#oM8gV;?B-!rGo1r34L;Bnf|HAH-gT~SkOo68JN0+EQ*geMj|lypWsFNQXwNt1 zyS8i6nX;V`Z)Z9OU0gUh`a}CW-EcVHY5Ut*_*%xvGjZymdjXMXiuhpBuo?Nmq8uu$ zpqU=6ucz}U_H_}A{0j{wk#tJ3YLYJLr$@wcY~|%V$zWP)+jO5M)AbH@y;uZ>{bEUDnu(!Bi!rA51}9?*@mP5xS(xs z)$jLfr&09IE1$=xPCW=m@JCqK#4DpK;TmuXh-HB%&~NxRo^5+Y@->Vpt#Z-LF~A5d znB}YO%i34#8)N*_Pi2DcKn^Op508ca_c#4Fi(xLJ+D3h|zR^(3a`1WU0AhFj{{4IS zi(xA5-}Q~Vo14w8yZ^6w_wL61jeB?R-P`(q>&@o<=Dq*t{Z|d-I{(wZ|0Vxc{^2#c z;iQqA!b<;P9wZ5iAy^NESzKU>0Co3~BiCD%&iGy&0INRmwp3Y{|WV_KAhO^Uow+_Tq)Kwl-{8^>K-JL7@2EUL*o&r@F{!bv?p3_z!-pF+__MW!j}K}a>&*@CNgM>;Q8b`S z1n)^SpY%y8wB{X5dI}ElmwF#~NiPnkq*jRczg{AxcZgP51Q5Us!!s1mO-A83#IcwL z@fcc+GAIi7G`(E&;Isk85-1~fmp+dA;o#B>XV8=tua@)ATUo(R&+aCt(ByCyqAC^D zSeH+WN=>6QPnkcI^J_Uq>D+kZ|D5 z0H=Dj2_W_N|9kXf=coObM+b+`ze$4G$D;T3*WPL{o}-2bWUqMNHTuC>V=^C&yp8X^ zZtk$)XS?8eCKtRsfA#d~-m}Lo{6LcL8t~dm=$)YK?|-4g{fMJyB~vtPBcb5LE4^=i zQ!M?n_;HQ>(GvuoKser5G6nth=7~QHfYN*%CZzvDvKf)3)}at-LwU8KSJn{AaBjeF z8NNdAB3J~^4?90RJ$%$TdiCh&m<53zQ^6;zkOc^w3iMO=`2=-lR#qWTbsC`xN`<;k z;2^I@iQdkR3qcP)Cq>F1O0Ko_LtGYBvg!8=$pFch%%y7O=} zLuEP?&Y`UDg6>^M9*+nLKZmhD#`Pq_hSEypSX9h~b3dW69w4zuI|4|WQe+b(OFZxg>b>DNwh$e zO?qcyzD(#-FoIUP6%V|xl257@0kkK1)#8`3+9GOrpx#wljq_f&L8Kud68OKW)7?GX z9_w>ax5Cudjry0ZGLnp526C~~EYWVEJ?ykGofk7mV{>7{-ivW?nne$Y!q@HgYQ5TS zSJHs3BD|G7KOVM9%^i7Tjug@~W}xeoqBIlfb5#>$a_f>jB*h&9S)R&QuW|<6w38iG zD^X|Oy1 zUGCtY@{ad}l1lh@$K&R0XHGWU)bD9PEC|~-g7D#kOi`*?Zz{=a!ds4PtADn)crA@doM zcX*v2#YpT#Vk{yjyW5xS4`84x(9h<#A^90&qbsGda702mqQC02+2Uf_`q#qlMK)}STA zrFGt;bTq$dw;RBAS3HvozS9P)Qextt1s!Z(3I6PO^yJQCf#TyN9jF`u)7L^j0tl4Z zf&oe9FyRtJS@C15PRoRI#5zZ#w5~F#2I>!(-UUMa9hB^&Y%f!zOLx%n>W6)j*9~xh zfr0{ zP#@OW)(JLYZL_}az54m!Ig&3GSk8}N*9i=(5DXd-ARF~{rmDT-hY!*qlvtnwK@6-M zv1ylH@hBMLeJbC9(dY|=-1>K^cG z&AWBAn4!D)jVPY|=RbM)-?QC=r}RfwILUK(jxO4z_a!by7#SxPM-AyBq>8*%!WEw6 zsd&0ixd_+EjCr>Uw7g#&HCyEp99=JtHd^KH=;3aw{0%(dUG~!>Z!!lQH0dF~`gE_e z`}ApRPm$OBUU<6u{D)V&KkQo{Bn4sYJ;u(}3({VGUD8I*K+6PX(8v8V#RF_2bZ9U+ z3*%@qwi#@~e-kqEp=E^k&jUcM%;8MXeqaK>uyRqiV-!WxH9~UXWFE~E*qgAJf{UOx zXI4q=;JQVRUBE%vf#HKq&;d>sGV>vM0Z0 z1(q~H(rDaw)#M6ZrAQ!-!JMxZt!BWbqoe}8T1>f@n z0u11!?6J}U!L1k6u4w61QE=a6^{9MH){nix+%XpO}BA0$jxGt>1$4##c&3v$hygd ziyZNOHdE7Nf)p2877k`{VA)XU3I;WzTI;E{!Abhw(_c|0h&#;9!~3wFZ8I`Liwdhe z1SIG?SOT&_9!mICTz5d-b!liWvaym z#j2Nt`NjcYvxG@!L{~_N_v^T<6rH3XASzflbP#_BMBVT#dXH9OG6#YU&Ma7p^p1Ss zBqV2En8sfWv)nGeZd+nc0jehYwY(R- zc3aMJn4VNY5!5a$T1juzc4>9hYvPLXDiz4Q;qF>QHnhTtfKo?Ep5&DdAjpFxu{m=t zgG6DR%(qEYAc98I`lWOhL@fY;=>**hvnlhNVO4kyp$DQ+q_tbXxj->j27=xDdm! za{l|2z#~IE7Twi`-dPE$wS2oegqgn#ZBn(R3*@g(Y7+J6T8*+!gqyaC1YF(*E_(Ps zR*SL#EdwVZxV;v5L6W?nq!O9%NKJr{n(`NGYA;pYE3+`Q)FQ5tJ6^89lT#Z-EoyVa8ZhiH9B5p;0E zNRAXJ#z2?HD77Z9J9JUzg21lZ%ke-&-4PkRD5aWu(K((oRHKrPTEaHBnuCdD7`BEt z(Vl(Z3_C7iX|Ye+1BbJi1Ew2z^XV}5(fSA0KZ3bi->l!o+imjIK@HWnqi*3BqW~B1 zjIY^;HD7dn{yCh?>rp(!x(k@`+6p~#(}V*>1(lHvEUeMIPghZsOEK30wkiqn9s)|B znUgjK2@@(SBJMig8KST>nc>Rx)eH)L630UnuMTi=K~Etsf;mQBK{oMJF9WuMLLmrY zH9#;lMsmTaZUy-Ng0A1&YqlmDS09ydnUSlyMW9t?t`c|`!PJnvctHBrxDC1i)E-9c zMGZX=VWwyVxNYz0!QSE1!Z_g{1lUmU}#IBFF{Chg>LvJ@6+5;+P; zM>G^qlt$(<4J0ln3^iB()9%YcCNm;s_E2-_>1_3aU2e5fz>C)R%o>)OTDn$h?tCne zAb{RmR-uBfJ3(fChH9_g(edu_tE0k#22)#(5bXCj@|<~1A4o{i!BSLBv%pIGMAA}f z7Cw5}%1wi4wJdH5DxYEwjZt{!RdevpmL2mH;T)ZM>qT75MUr9#MUuG%7qhx8>y-9k zmT!cPcRK)0mPPC|UMcMI+xQ(&uAOPR$#^xw8i9ru_Yr&QD_46T1M-3cHo@IA2~fV` zqv4iQ0XH|FZ1=nxU%nEZ-;j@V<_WRK1Y6%~46cUE;lrrUoJO>sHEYolr`szmFU|K~!h^V&jl^efW&22Z@R)gWW)OgR7c>>ip8~pqm z{(QtgR2U0!@}(qstj-u1}P{sV4*W4)9~1WjrHW<>HbpudW;Q%-H#bb zn+H|%6aYY>L$-K_jc8Dq1z%8^Vau9DEuRJI7vCKOW{T?e`cu?v##09Vd-`f|bCLYz zykv)ram4@yP#MKE;72iG?+0`(i#(0!odkW({}N~s{~ek@`Ta8=J`Dpbgd`2)cOb#T zu`onJJ_2Ea4&KJ-qYEw5Q5*^5GK`~hI15mz5x@b<5|Gk0cL|-LqW2(Qw`q1cCA+HM z=6)Y7n0pEUDheQ@gUT^}NVd`8csdHS!azcL86qR%+jbOe%SC=`V@Kca%T+uOuFZ{w zVl0;FI^z#B=?M~+WBr>}yM#IxAIp}&X;}ftUusGjAiF$whRq5EstWqN`|^i+y`DSU zNP_^C6~$wZ@{R)>E39SCTx!G$D*!?a-O$fcAbewj_W!KXf=b|{s4J%pl;^2;CqBis zicdfm7?Gx%9}nj^6R54FY;m<0Kff0P1?-hpS1T223gUBnw(_Nr*P9v|C~Kg(6D)D@+S9?S%u;W%G~H+EUlkteITl!ND{mmko|GpI~aIU9S$&8iHc05uft9g)<__s zm=MAR)M$Xh`PV#BN)9GHqGx79AbIx~v*2=Xivm$pyR8_{_!K7vF zULC$3g&?(_Pl|IZ?zM#Enu3Pk(G%aN+Y4+r*39KXHrb?e`*<=o3@`b2m@ZuO=QS+c zFp5?b;hrj6(yP?>;#slcX+955sV8Eb+{prM@}{C)?WvP5UplmOw|6^cILY!&Cwub9 z;utgSn@VQ6^nGOHogq&9a8tr7?m6${X21XY+|H%(%s*7xo8k>R_t5oR$_ zMQSX7L~CrDd9gS4tLNHo)9*$R_*Nq6RWrcj%zsCiw64XWK?Vl-AIJPF=KNX}uABO~ zeukRdBVS#|E}2!^z1`rO`BhRBX7sP$0XrEJxNgAt4SW0=T@oZ4a0)?v|7yKv05cyd z>B~z;gHz_!uQ&aJFcU*TzFfD7GWmq`XSuC0)KjAIR3P5tU)w1nqBLV zEHa@8gHZve8%7Z=3bd;oaMon@VU-{b>$o#DO4`=>wS4~^u#Z1s|3I3 z=H%t}xEvG1%jV>H3K%?NqFM8g&pf!=!lRS(aDAEAy9GYx&Y&VM)=IK4sV zMw27r+%qkk-$QVG%iqn-sNP{Ii(<Z82B+Irlj)%haZ*>`=C3KdzCZrr#G8S^9wYL~fFB*+9zI2mjIh znGMLm4#uQYKF2Aj#Qa#r1sCLx?+wT3PHF_tkL^@?-Y#r@eAt=WE&ApP97G}0Efzur z`NApG*I~ZCp=y1n%_ul(? zjh`0K;YxqLxWAe9N_fEEtw!#LPX2lFa@c=QsOrn`_&7(?rOf9IEpga<-6MCZ!I0N7 zeh7jv+I2hSKejq$Lo2R=O=T55(*taPf-KPub&Q-Ix{F*lf9427Ovzf)XYEw)5&V z{SlnBHh;?H3wJob^f0Gnw~K zowQjh@eWS2`*K+MIj~@|c4Xa&>AS&q))!I#y#KY;3-dnX_8bc%Apn{ga{Zu~-h(U8 zfb9A!!Gh1|4vy1YUR{B~m+R~H#`Ab+VRQfIBOtHb-EvU>cxd920<5o!0`VXKbXcC4PV0Vpr(l1C!9DLETLo#w!x(|uQ!vdL96=4Le6DNm zMY-q;U6=3%)RYHsqxd_nboWNckU|Op0U-hZX2(P?V-^Df>`dOJ06!-^FaO(5H_82= zQvc#SLf$oj!157VMZW3N{ZfTfbn@@pN(-QO&toWQX;{Y7x&HgWH=nn*8?Xdxqr9*A zyrRz$aNZ_vrGegyu;@Im1uj0cSx`yB#+#snUCc>Qg*KRSwl;Z4etjU>=clS>n|aHF zrze8zUJtjIbOHHaFRH6P5LR(O5rll3d~XQ`;2;7jQj-k0N=kv937smgswIC z`Cz?zKlLHg1&NY^BPH<)=@tKA8L;l8f>Az&K!`}~l-0Qyh zq|Z`FfG2|kf&9v($S z*3rn{MlpO3>hbKBjc@st{xzx5>x4E{ECu67z8SwxBd~`A31#Y+xT9tnM*1#0g?vbz zoFi9jN|lH9Cz-r#J~>S!4_!GGtco~n;q@PHCb*gNDkHI03EBhfKt)X-mRz_=1m&4- zsXNYtqL~aCg`zd{`QLkF93@Ab4#$#-x3(ahKx!>6fpfh*|29R-zDL}xv}YK~%X8UX zp+sam7gM`?34yK?Qsfw_?w^WhgdIXasMH{|a)?o)VtFkn>SruVpZ8AJ&4iVoV_aUK zkUuh;i-x#j;CkhPp*kcu+1;ZRjMqu1eyoj`t4`F`8eDjSuD9rWpJ91+Bk&B|Ic@!P z>5xPk_r?XuEMBxXZQ2@P4+L%hvEyPP77G=Wn)bQM1o`1?g+)Sn{KcQX71wv*E;o# z4fl4jAvrz)?;eA6QGAS@rW<4&jvryN3t4Nz<3D8gLgZ7M*VU$%AYU3g)$@S{Rq*jt z4VK_oZT88610m+LSgYVQYgof#WV5t$XBOZvMXJTep%5%a8LO07`SWyjkNzT{DEoUY z@{$6DoZ{#(f5vR$q)m{-Mo|h}WKZ)-H=JHfuefr=q2mB)#$*u1>2@T|=(-${1%;fz zCt>Nq!@L%*w+FLBmno~6?8OV|C;4Gxr#OHw+-lGMDh&%ZVAOIaS$!8r>=^%4h*WrV zAC$)MQL{L0(Gw{rhCVy+#UDF364-MQ)r!@T`DBe3fQnD~@Qc~O@5n)|c z)VL@l3kYAz7}}&i$23}f{ylk6W5oIc-`ciiD@lz>@Yg49QT9eeJYo#HwFm2=F3-so z^EfylA%oDK4XoVcq-aTJwq~eGqbY7pG9~)X@;UX&H7^{{n))`2fojn0WL7?LnN7(j zZ_+BSl59IuwbiXl7zV9s+x zezuf8_4}%a+W~+;+W)h@HT`mc?95`ju3RfwQlfkvMxeBFBd5bt6rXrSOSY479z7dX z*_KObe0C5D43j}I(!E%9#W>{!?MebekRRwF<=UHL3P#ob*sQ^p&xln z?wA6&aDGbGe-p=`Jm_?2A=l39s=PeKeZ;RvC`81Wq5PGn`Yom0YrU z9?S9;gFZ@dM*kEC$P%j4c|1iu+7dh_+0&#=w4^|4y8QvP_m?F9Dw|ybyqoEKHMjne zUB0fT`Nt&#yPAm8NY>Q>msPlJ(|-L%IxjVy^=bUGjip_Hcmwy+HM_k_^JZzc1UkjC z5}jPB`e~({^znlqgFnf@B)%5sEncujj8?GYW$^7&sBf{Oqc`Z67E_rUNAl95YQp%Ozw?<$@w#xx$|NA%4 z@&_xtIpm&5Nh+%Rs-J^Azo||6Mr%8Lqh(c_!B9+nH-11yK7}@w!GetDm@wJsxu|d^ z%_S+zb<6TUFw)e*=l25}b1fRts z6f4Wgi&2%YuPU2|IfuS%`E*DME5@+V$&e0=+kck#n0;15Pu;zgI9vhC{j(}=hYrw= zlfWmM@*1j6MzS2kQ03D0+W&dJ}e>NO#9K9)aRtmZ-)0r-LISZNY&YxkHo(|$Q zCi4VFbXkG_apaHv*r?<~U}Prer9kVSRURn`ltV57Q{~ycn)a!Nzv_wq6TR2^`S32w z>R&Xbrcjcz6@XH{`VR}|T16V4!HB5#@$LDIWmKa@wP&gYA<*USozn8ZxBky{H~F1y zEZOGTi3^w~ROX>OGRUWVT>obfyzoDC-o+;#CG37wX$YZFP#Q~=ZJ zzl)vknODs|b~RoO9Kz4%6{0qomk+kfveMlB(b>-By&hn%q1(U>lvGKHR;;8YTbnB% z$jNUT$Y@hR*76f~D9++Y3yoSVRHwlYP|`V35{l;{i<%T$AgOQ3_67HzyJ==a7{v_q ziCG<#Uh>+$%d(MK@JY&A8!I2KyVRM*%V9iCj>vQ#p z-hu#%&UURdJo^!UoD+P0BK*(nwLJ0>MNtWyZpvEa|4qmhzd`#yknI$F zfaDvq_xpXst$J_FS1gX$JDMI+VlZ7)gQ((c9nl<2|GyhwvW}#K!Z{~it$p+V05HT(nysTG&D-bhiPDI-gRBo1k^8ILl*z>^ zNv4MtopMIxig@>aN^bv!ts%HVc0d_w<;6Fd{>Cj8ZHTe%3 z{d|tmR8e>wCFWc_7!<`@n;PeR-E|I83@<&J0$CES;#$jWYnK3}g%WmU`?=0{Yqn68 z|Cc}G2{={iakxytRpmJ7f6|}haMZ&8nLbN`CA|cCZO-)hA3{Z)dw}J&gV!Z$(9<|L z92gkYd10(F#tf{JpvK8RK9qrDG=XoVAk##tL9Lz+?9 zR@DkY&!09Dhp*ker3#I9kTh=e3gW%UaWMu=hjhFrDbtaxRva3U(%G^9m2D;~17CL< z>gVJ(VKAo#3u)Cds6F-~eDvM&dHvXVMf`_0ER@e^{42?yP3cr?LA2zKyn8}(^3LP4s)7Hz4tpfZX)(-!O3ox_KgY)A}UO$k$1(>=WJQa^XZ12FfE z#n*{;79Vm4kxDbjP>Ik4`J=d^Q6$~OuUOiiFnr=9aTCt+Zei4xfTdhT|Dr83y$t(X zgkBRGzVSH8a$E)*DIi|K~7@21|BdvPNhMHJy*vhSR znmZ{^LS%hS4u_DtGa=_(g0JvNoa`%ktM^0vIAXWJQStB0|M5@}=hA?tw`<<#8uw%z zGUH!5iPfT3JHWoJa>gEX87AHKApQ%j9+tKuc~Pe_f!U_!BEOyJ*REfN%U4BmrHNDP z#s$YQXFY_nxiD}8Jw#z><>jesuFwO49~@3lBJ&JAcO53B3yji;JQv4)bqeASm<0HqZGm=srCIe7BAv+ z_Lw7_J0@)pzA*8Uz5k*~qv1W^#uPqC8$NP!QLZ^FU;hXGBDm9ZMQ^eexCitM76sZ= z+$HADA+x+&k{&)cTtY=t{Jsq{K2IY0n32d<(mel|AC%OgBnT-8@_Zk~B(P3&fvcKJ z>h&v8GJrbq52wDGNgoqUofQizyj{#bSUfbN*cB7mnQjOQ)KO@T67pd~g2iH57FeFs z1Z}uL(v%B$x{Y|joZf3EL}5MH-grQ?kji%-W1DpZn{-VWH|_{jGGNoSHlq=ZOY;(* z2I(UabVitcKD2NN9WFtw7Ss8u;=<>Sa?*?8R$b*$<7QO#9aaZEZ)B`aO%>dG??W|} z?f1*Nco!*^SrCHbHzqPrcE0(26~+}3MiMt1fAkt#JrABIlehFniSaIiVcs}&esZ4E z@%(Nd8dImTJ_#X}b>^g&+V3pUQF&rDzK;&9=zx;uBUJn`8WDHTAWj?^Cf;a531?HR zr4>cIb!H1#2cz*0!$5g9C?5lYs{^>?V*o%lU|7{mH4g%nP2${ z6)}<4l_kfEvquZgr?rwZRDQz3n-U!8% z!$B|$b?o8PDH8>UVCxr_-7k2;KJud-?dPI|g^8a|q6bVQwS}%)i$+OkNS^iz@q0p1 zvPy5y*y_IJ3^jhjq35>mzqQSO0^Z90-DMw4$uTw%Kvtf&qIJI8dDCr9NivAjr@q3# zUaQbH-HIL|F~ALOn_h!XsN02p#~cEeJ+?}^l-_h`{*-7ASd73%cyhz?c-jtZWr*iC zTU!Jl627tds%CNsZrtf3K>7Iv%Y4_AQ27g3s4yBP0z3N|!zj2|*cuIjIEY6iJZE;h zOe9j~cy!027kCm0sGRX98%KKnJtDAP%(9~1wn;{FncBG1y}s!{=Iy2p0sPLYg^uKK z2@Pw%P^(mlmr$(46kg3V0s)x8^{~!oVtG7JS=1w=+IujPl@zdy#Xi;o)mrXOYx-pj zsYEkZ3YV>Hf94y_n_Ol!)9ZM`qQeeLz>pam&6>keH?b#tK!=1-XP~+!IP=j8MBZM+ ztE%4}>c6_1o4mk}^iO+|lfUKhURv@(n9GZ5xd7K4-y6VEDRttaA!q8a;y&It%IG+4 zsx-~m0=-OE3I{iKd3}OibZEbGghPNmg;!vPFVa;wfC(u=F+P9^IY zp_*Pnjwj>7W}YVerE&#h={?`b=}BV6ZAd+unUHtcCvlBGqPT8}17`>R$cQ(kSBXV@ z-)N8jw#)NyFpYHV@)%CqNQ^$)B?2O6Bor(p*2K`lKvJroWS|u*1{cp6ppGNvww?nE zQd6`I!-?lC<)o&}P&tSCw1!5~7?c2tDdIO&iN$QST;aR{%xQ8TY9g1rY2BnY!yw>? z8dpwa^k^xT2t}`#OLD+K-JL}s6h9XLy*z zX|bhS0*p