From f66205b5f615a4eead9c26d7ec297e14738ea18d Mon Sep 17 00:00:00 2001 From: roG0d Date: Mon, 27 Feb 2023 15:49:52 +0100 Subject: [PATCH] ADDED: humaneval-x rust integration --- codegeex/benchmark/evaluate_humaneval_x.py | 239 ++++++++++++++++++ codegeex/benchmark/execution.py | 107 +++++++- .../humaneval-x/evaluate_humaneval_x.py | 6 +- .../rust/data/humaneval_rust.jsonl.gz | Bin 0 -> 46660 bytes codegeex/benchmark/rust/Cargo.lock | 121 +++++++++ codegeex/benchmark/rust/Cargo.toml | 12 + .../humaneval_python_generations.jsonl.gz | Bin 0 -> 30849 bytes .../humaneval_rust_generations.jsonl.gz | Bin 0 -> 26444 bytes scripts/evaluate_humaneval_x.py | 71 ++++++ 9 files changed, 549 insertions(+), 7 deletions(-) create mode 100644 codegeex/benchmark/evaluate_humaneval_x.py create mode 100644 codegeex/benchmark/humaneval-x/rust/data/humaneval_rust.jsonl.gz create mode 100644 codegeex/benchmark/rust/Cargo.lock create mode 100644 codegeex/benchmark/rust/Cargo.toml create mode 100644 generations/humaneval_python_generations.jsonl.gz create mode 100644 generations/humaneval_rust_generations.jsonl.gz create mode 100644 scripts/evaluate_humaneval_x.py diff --git a/codegeex/benchmark/evaluate_humaneval_x.py b/codegeex/benchmark/evaluate_humaneval_x.py new file mode 100644 index 0000000..076e0e8 --- /dev/null +++ b/codegeex/benchmark/evaluate_humaneval_x.py @@ -0,0 +1,239 @@ +import os +import sys +import fire +import json +import gzip +import regex +import numpy as np + +from typing import * +from tqdm.auto import tqdm +from collections import defaultdict +from concurrent.futures import ThreadPoolExecutor, as_completed + +from codegeex.benchmark.utils import read_dataset, IMPORT_HELPER +from codegeex.benchmark.metric import estimate_pass_at_k +from codegeex.benchmark.execution import check_correctness + +LANGUAGE_NAME = { + "cpp" : "CPP", + "go" : "Go", + "java" : "Java", + "js" : "JavaScript", + "python": "Python", +} + + +def process_humaneval_test(sample, problems, example_test=False): + task_id = sample["task_id"] + language = task_id.split("/")[0].lower() + + prompt = sample["prompt"] + if example_test and "example_test" in problems[task_id] and problems[task_id]["example_test"] != "": + test = problems[task_id]["example_test"] + else: + test = problems[task_id]["test"] + code = sample["generation"] + + # Pre-process for different languages + if language == "python": + code_ = [] + for line in code.split("\n"): + if (len(line.strip()) > 0 and line[0] != ' ' and line[0] != '\t'): + break + code_.append(line) + code = "\n".join(code_) + test_setup = "\n".join(IMPORT_HELPER["python"]) + "\n" + test_string = test_setup + prompt + code + "\n" + test + "\n" + elif language == "cpp": + test_set_up = "" + for s in IMPORT_HELPER["cpp"]: + if s not in prompt: + test_set_up += s + "\n" + test_string = test_set_up + "\n" + prompt + code + "\n" + test + elif language == "java": + test_string = prompt + code + "\n" + test + elif language == "js" or language == "javascript": + test_string = prompt + code + "\n" + test + elif language == "go": + import_string = problems[task_id]["import"] + prompt = prompt.replace(import_string, "") + if example_test and "example_test" in problems[task_id]: + test = problems[task_id]["example_test"] + else: + test = problems[task_id]["test"] + test_setup = problems[task_id]["test_setup"] + other_pkgs = [] + for pkg in IMPORT_HELPER["go"]: + if pkg not in test_setup: + p = pkg.split("/")[-1] + if p + "." in code: + other_pkgs.append(f"\"{pkg}\"") + if other_pkgs: + import_other_pkgs = "import (\n" + " ".join([p + "\n" for p in other_pkgs]) + ")" + test_string = test_setup + "\n" + import_other_pkgs + "\n" + prompt + code + "\n" + test + else: + test_string = test_setup + "\n" + prompt + code + "\n" + test + elif language == "rust": + main = "\nfn main(){ \n } \n" + declaration = problems[task_id]["declaration"] + test_string = main + declaration + prompt + code + test + + return test_string + + +def stream_jsonl_all(filename: str) -> Iterable[Dict]: + results = [] + if filename.endswith(".gz"): + fp = gzip.open(open(filename, "rb"), "rt") + else: + fp = open(filename, "r") + for line in fp: + if any(not x.isspace() for x in line): + results.append(json.loads(line)) + fp.close() + + return results + + +def evaluate_functional_correctness( + input_file: str = None, + tmp_dir: str = "./", + n_workers: int = 32, + timeout: float = 500.0, + problem_file: str = "../data/humaneval_python.jsonl.gz", + out_dir: str = None, + k: List[int] = [1, 10, 100], + test_groundtruth: bool = False, + example_test: bool = False, +): + if example_test: + print("Example test...") + + problems = read_dataset(problem_file, + dataset_type="humaneval") + sample_jsonl = stream_jsonl_all(input_file) + + if example_test: + suffix = "_example_test.jsonl" + else: + suffix = "_results.jsonl" + if out_dir is not None: + if not os.path.exists(out_dir): + os.makedirs(out_dir) + out_file = os.path.join(out_dir, input_file.split('/')[-1].replace(".jsonl", suffix)) + else: + out_file = os.path.join(input_file.replace(".jsonl", suffix)) + + if "/codegeex/benchmark/humaneval-x/" in input_file: + test_groundtruth = True + + if "-to-" in input_file: + translation_mode = True + else: + translation_mode = False + + with ThreadPoolExecutor(max_workers=n_workers) as executor: + + futures = [] + completion_id = Counter() + n_samples = 0 + results = defaultdict(list) + + if test_groundtruth: + print("Testing ground truth...") + for sample in tqdm(problems.values()): + task_id = sample["task_id"] + lang = task_id.split("/")[0].lower() + if lang == "javascript": + lang = "js" + tmp_dir_ = os.path.join(tmp_dir, lang, "evaluation") + sample["generation"] = sample["canonical_solution"] + sample["test_code"] = process_humaneval_test(sample, problems, example_test) + if sample["test_code"] is None: + continue + args = (task_id, sample, lang, timeout, tmp_dir_, completion_id[task_id]) + future = executor.submit(check_correctness, *args) + futures.append(future) + completion_id[task_id] += 1 + n_samples += 1 + else: + print("Reading samples...") + for sample in tqdm(sample_jsonl): + task_id = sample["task_id"] + lang = task_id.split("/")[0].lower() + if translation_mode: + task_id = sample["task_id"].split("/")[-1] + lang = regex.findall("-to-.*-", input_file)[0].split("-to-")[-1].rstrip("-") + for l in LANGUAGE_NAME: + if l in lang: + lang = l + break + task_id = f"{LANGUAGE_NAME[lang]}/{task_id}" + if lang == "javascript": + lang = "js" + tmp_dir_ = os.path.join(tmp_dir, lang, "evaluation") + sample["task_id"] = task_id + sample["test_code"] = process_humaneval_test(sample, problems, example_test) + if sample["test_code"] is None: + continue + if "completion_id" in sample: + completion_id_ = sample["completion_id"] + else: + completion_id_ = completion_id[task_id] + args = (task_id, sample, lang, timeout, tmp_dir_, completion_id_) + future = executor.submit(check_correctness, *args) + futures.append(future) + completion_id[task_id] += 1 + n_samples += 1 + + print(completion_id) + if len(completion_id) == len(problems): + evaluate_pass_at_k = True + else: + evaluate_pass_at_k = False + + print("Running test suites...") + for future in tqdm(as_completed(futures), total=len(futures)): + result = future.result() + results[result["task_id"]].append((result["completion_id"], result)) + + # Calculate pass@k. + total, correct = [], [] + for result in results.values(): + passed = [r[1]["passed"] for r in result] + total.append(len(passed)) + correct.append(sum(passed)) + total = np.array(total) + correct = np.array(correct) + if evaluate_pass_at_k: + ks = k + pass_at_k = {f"pass@{k}": estimate_pass_at_k(total, correct, k).mean() + for k in ks if (total >= k).all()} + print(pass_at_k) + else: + print("Total:", np.sum(total)) + print("Correct:", np.sum(correct)) + + print("Writing to: ", out_file) + if out_file.endswith(".gz"): + fp = gzip.GzipFile(fileobj=open(out_file, "wb"), mode="wb") + for res in results.values(): + for r in res: + fp.write((json.dumps(r[1]) + "\n").encode("utf-8")) + else: + fp = open(out_file, 'w') + for res in results.values(): + for r in res: + fp.write(json.dumps(r[1]) + "\n") + fp.close() + + print("Evaluation finished.") + + +def main(): + fire.Fire(evaluate_functional_correctness) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/codegeex/benchmark/execution.py b/codegeex/benchmark/execution.py index 9de9ec8..cbdf14f 100644 --- a/codegeex/benchmark/execution.py +++ b/codegeex/benchmark/execution.py @@ -8,8 +8,38 @@ import signal import random import subprocess import tempfile +import gzip +import json from typing import * +def dicts_to_jsonl(data_list: list, filename: str, compress: bool = True) -> None: + """ + Method saves list of dicts into jsonl file. + :param data: (list) list of dicts to be stored, + :param filename: (str) path to the output file. If suffix .jsonl is not given then methods appends + .jsonl suffix into the file. + :param compress: (bool) should file be compressed into a gzip archive? + """ + sjsonl = '.jsonl' + sgz = '.gz' + # Check filename + if not filename.endswith(sjsonl): + filename = filename + sjsonl + # Save data + + if compress: + filename = filename + sgz + with gzip.open(filename, 'w') as compressed: + for ddict in data_list: + jout = json.dumps(ddict) + '\n' + jout = jout.encode('utf-8') + compressed.write(jout) + else: + with open(filename, 'w') as out: + for ddict in data_list: + jout = json.dumps(ddict) + '\n' + out.write(jout) + def check_correctness( task_id: str, @@ -52,8 +82,8 @@ def check_correctness( # does not perform destructive actions on their host or network. # Once you have read this disclaimer and taken appropriate precautions, # uncomment the following line and proceed at your own risk: - # exec(sample["test_code"], exec_globals) - result.append("passed") + exec(sample["test_code"], exec_globals) + result.append("passed") except TimeoutException: result.append("timed out") except AssertionError as e: @@ -92,7 +122,7 @@ def check_correctness( # does not perform destructive actions on their host or network. # Once you have read this disclaimer and taken appropriate precautions, # uncomment the following line and proceed at your own risk: - # exec_result = subprocess.run(["go", "test", f"-timeout={timeout}s", "main_test.go"], timeout=timeout, capture_output=True) + exec_result = subprocess.run(["go", "test", f"-timeout={timeout}s", "main_test.go"], timeout=timeout, capture_output=True) if exec_result.returncode == 0: result.append("passed") @@ -137,7 +167,7 @@ def check_correctness( # does not perform destructive actions on their host or network. # Once you have read this disclaimer and taken appropriate precautions, # uncomment the following line and proceed at your own risk: - # exec_result = subprocess.run(["node", "test.js"], timeout=timeout, capture_output=True) + exec_result = subprocess.run(["node", "test.js"], timeout=timeout, capture_output=True) if exec_result.stderr.decode(): err = exec_result.stderr.decode() @@ -190,7 +220,7 @@ def check_correctness( # does not perform destructive actions on their host or network. # Once you have read this disclaimer and taken appropriate precautions, # uncomment the following line and proceed at your own risk: - # exec_result = subprocess.run(["./a.out"], timeout=timeout, capture_output=True) + exec_result = subprocess.run(["./a.out"], timeout=timeout, capture_output=True) if exec_result.returncode == 0: result.append("passed") @@ -210,6 +240,71 @@ def check_correctness( result.append("timed out") shutil.rmtree(tmp_dir) + elif "rust" in language_type.lower(): + import os + + WD: str = os.path.dirname(os.path.abspath(__file__)) + RUST_DIR: str = os.path.join(WD, "rust") + RUST_SRC: str = os.path.join(RUST_DIR, "src") + RUST_BIN: str = os.path.join(RUST_SRC, "bin") + RUST_TMP_DIR: str = os.path.join(RUST_DIR, "tmp") + RUST_LOGS: str = os.path.join(RUST_TMP_DIR, "logs") + RUST_EXT: str = ".rs" + + # Create mandatory tmp directories + os.makedirs(RUST_TMP_DIR, exist_ok=True) + os.makedirs(RUST_LOGS, exist_ok=True) + os.makedirs(RUST_SRC, exist_ok=True) + os.makedirs(RUST_BIN, exist_ok=True) + + with tempfile.NamedTemporaryFile(dir = RUST_BIN, delete=False) as f: + #temporal file name + file_prefix = sample["task_id"].lower().replace("/", "_") + file_name:str = file_prefix +RUST_EXT + + os.rename(f.name, os.path.join(RUST_BIN, file_name)) + + # Sample to pure Rust function + rust_code: str = sample["test_code"] + + # dump the rust source code in the target temporal file + f.write(rust_code.encode('utf-8')) + + # Proceed towards Rust binaries compilation. Therefore move to Rust module root dir. + os.chdir(RUST_DIR) + + # Two possible outcomes + # Pass OR Fail compilation + log_filename: str = file_prefix + ".jsonl" + log_path: str = os.path.join(RUST_LOGS, log_filename) + cargo_check: str = "cargo check --bin " + file_prefix + " --message-format json >> " + log_path + # Compilation build status + returned_val_compilation: int + + # Overwrite file content + if os.path.exists(log_path): + if(file_size := os.path.getsize(log_path)) >= 0: + os.remove(log_path) + returned_val_compilation = os.system(cargo_check) + + else: + returned_val_compilation = os.system(cargo_check) + + # 0 means success + if returned_val_compilation == 0: + + #Execution pipeline + cargo_test: str = "cargo test --bin " +file_prefix+ " --message-format json >> " + log_path + returned_val_execution = os.system(cargo_test) + + if returned_val_execution == 0: + result.append("passed") + else: + result.append(f"failed: execution error") + + else: + result.append(f"failed: compilation error") + elif "java" in language_type.lower(): assert tmp_dir is not None, "Java should be evaluated in a temporary dir." @@ -264,7 +359,7 @@ def check_correctness( result.append(res) shutil.rmtree(tmp_dir) - + manager = multiprocessing.Manager() result = manager.list() diff --git a/codegeex/benchmark/humaneval-x/evaluate_humaneval_x.py b/codegeex/benchmark/humaneval-x/evaluate_humaneval_x.py index 54be678..076e0e8 100644 --- a/codegeex/benchmark/humaneval-x/evaluate_humaneval_x.py +++ b/codegeex/benchmark/humaneval-x/evaluate_humaneval_x.py @@ -74,6 +74,10 @@ def process_humaneval_test(sample, problems, example_test=False): test_string = test_setup + "\n" + import_other_pkgs + "\n" + prompt + code + "\n" + test else: test_string = test_setup + "\n" + prompt + code + "\n" + test + elif language == "rust": + main = "\nfn main(){ \n } \n" + declaration = problems[task_id]["declaration"] + test_string = main + declaration + prompt + code + test return test_string @@ -96,7 +100,7 @@ def evaluate_functional_correctness( input_file: str = None, tmp_dir: str = "./", n_workers: int = 32, - timeout: float = 5.0, + timeout: float = 500.0, problem_file: str = "../data/humaneval_python.jsonl.gz", out_dir: str = None, k: List[int] = [1, 10, 100], diff --git a/codegeex/benchmark/humaneval-x/rust/data/humaneval_rust.jsonl.gz b/codegeex/benchmark/humaneval-x/rust/data/humaneval_rust.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..35a8186d1ff2692dbc06e2f1fd88646c6fdd43bc GIT binary patch literal 46660 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 literal 0 HcmV?d00001 diff --git a/codegeex/benchmark/rust/Cargo.lock b/codegeex/benchmark/rust/Cargo.lock new file mode 100644 index 0000000..e2e0655 --- /dev/null +++ b/codegeex/benchmark/rust/Cargo.lock @@ -0,0 +1,121 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "rust" +version = "0.1.0" +dependencies = [ + "md5", + "rand", + "regex", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/codegeex/benchmark/rust/Cargo.toml b/codegeex/benchmark/rust/Cargo.toml new file mode 100644 index 0000000..1ed0c3a --- /dev/null +++ b/codegeex/benchmark/rust/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "rust" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rand = "0.4" +regex = "1" +md5 = "0.7.0" + diff --git a/generations/humaneval_python_generations.jsonl.gz b/generations/humaneval_python_generations.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..22f1d4ec5012d499881874e6d2c8ac808a683b59 GIT binary patch literal 30849 zcmV()K;OR~iwFqzt?Xk0|7dk>VQyu1VQgP;d30!RZeM3*Ze?;|bZKvHb1rIgZ*FV= z3s;Rd5YwKNrjFCb~3t(C4df-@f&Yf130M zaWuqVqy7MfKIl(m-er!CXnanM<7kY(CW4S~jRY6J0`urF_5b+4{^nVziGQKOv+Pz| zSR>PGMzh#$HZX=+wcX(BYTj6858FGqK2UESSMLI6`T^#&kcQU6f!DBzuCAg^w^LhA zF3ML|QR2VPDEsNdLsl%i3v2miD~-L^j{W2r*c&^o_U!QRo{hm%sql0<{V!!+blqNh zo~>6K$6}SGn{KbRuNe8WH&&IwO93h}<9BnrDR&Q5*LhJ9{H1L~8x6i(yL;(F@vz(C zp4i^yRdll}7Px*Q_?$+vNET(WP4faju3?nbF_R8A8o zZ`Evf|10Tqqh8d7U;GKUP97p*!TBPs}vS^ttpl6(T zdgY7_-vE5eZefrxUE8R;N;kLgI`q|Qovv0wrG-E^Zsnsm!RQhw9Yc=#(J^!i5h8w52XL7mo@UgELpX6np@)Lz%|U!l|_iQ ziW_mcNgv^b7|c0;`SylX~ggC|l%G#9yFak|CfpyremiBD-qaTo(Jmx_2;0av- zntN-JS+hD#fE@q^;o8quG$BvMz(ia>mvI>T7v(yG-EtLGyS3&}qu0?YEA&@q4Ivz| zp?ly#v1yN%@E%uiu=z6=9HN~;ALVKXn{b)^oYR24oMeb@eGh|5Yb+zvam_d`($!+O z!h_|HI0f&d!{}Spp}c;e>#$aF;m}kO)qpj&Oks+%t-R6z3R;ZNG6hVM{?PHeldBn(seWX2-Mhp0uZFu!{X$W*K0pfQnkP=4%Se|!dhC>%ai2V z!C`Z1MK5$`3GC$>2*Rf4cBWejdcgi0@oRXjZ7LvYRaRTKNHXI{kLVIX4cmry>uei{ zGO!lZ8Q;-OJ7(#?Yi9`vIJhcX?C7XgQixgmv=jax8BfP73wyLv7~NQLEY|@TMX@YU zxHP7#W4v+Hk~#G+8Js^jpeu*7>NvTW!T-HKO)s(vf(v0b#Daq7(g3n$0 z9GlBE(I5kA9_)donZ~ZrxN56$+MJiYMS*R3pkF<#@@=;R0u?^%{`%Q#nEPU;nY(P2 zIDAX@pv1As9$<$dgN_%0}^cm&4e*$lWtIDi|`&h2kFa z&8Ub0s$o|?v236=7jCvVN{-%HXRXr0bZ?f762xGMRJ*yn6}bK@*2_)40unKsKg~3z zuAsj(LTPOJIViGzPZ%RQ@-+Q|DOZCo3y|`Ng@!q0E=@#OIr?>1<{kJ(i8Qa1c05$i z3*AZQ3l!ky>0*h07t0L)q?=9p)NxVOK?UZhmw4`fiNJx)eoj}r%n&+wNlSe#37wu6 z5i&S{#98FWLiAGKFq|LXiY>4s7fBrbxPzT-=`#QsV%aUWp7W8`1hv4ganvL&e*TU` zNnq_{#A&oe9CRq=dY`A*x$ssp1iHLhiL}pHaN<~OQPcn)@rl|BXAi<|_R|i87oczh zLYNVVLh1oaZ2f^X1yjXsb%FUxdI2Cgb>WEB;0dyA>I^=xo-P7JVOOBWX9m;_R?kP+ zN=Nf!u5!>u1T-Eo)kRaMtHM_QRqe2N&RSREsOY)Jrp?Y-fd3Rb*I2cia`AX2OOT59|iOQ;i6^FuwwcPBno0TN%2|ip~ zj2vGbse9w&=v6Xk6#*LhWO*f>j(SJ)>^A2&SKa`=P4X#pR~YKyM}&vq9j_gb5azC!elHaxSKKxW~i zuzs4o{22unA^Us{7*6a;xP^6wYM&d_{9-%ZN4|*oRa;xAKAjzP%y&91K#O#%;ox(+ zH~^e_p%3l7BrHqq%S|_rqc1&|T<5rMzW9}gok6FaI15R*SggCk$` z@CYL7(X;Tm&X?f`SY?Hrs;H{7Wk|u$Gbes!U3Qlcwyk=&ju@qXl~hL`w?91KBc&_z z+J!)Pe;05 zQfZSa!*fvosd#|=RdU_?EtHrb63zIu%&P8@BD=gEwe3)SWTY9O*=IgyF+El#yRW0i0pdyY7Y7wh(&7fp-hDmK&#( zUdv7UJ1MqKNY|UAu1mSLkQodCXfg-U?g8czWwOO;R{{IjJaY6%28s*}I$@xR28xns z7>%NFG&z!HoVLy@E#XX2^8TuP%r>a;3e6)K=4MMerWdgL?$S-VKoxXjB{oQeGFmfW z4D=isLs(jOw-@Bt*dP9Hxc|8Nz{ zs>yVJZC3mmmek@m)+ZCru8sLO)g!a-3LsBcG!3H1sUEUL4wv42djH`AKHxf4dY!uE zn1;z+337|ktBdaNLO0OyLs=|ISSigKo5Q(L@d7fYJ>=0=De08>!tb+9#!s>WgoSd{ zgSQ6a&Es9k5^ok$E7Xa@UOrK=kU4o^TEtWRJ+?NZdI+JMNUAYfBX%`d7` zM&;k5{@?L8f6)KnjwZ!y`eD@pf6)J)p+E>|JhwSYX*I72|LF)1N#B&Rwnx<3c>kX@h zL@n*%!0?_HGLo&+UtF>?6VpzT}c;&6HHgJT1Gn1xGl827QjB`|Rmzm9FQ@ zG}>R9xdIaZYXoq(Bpy+gQ||!*oJn+zm61iOop?cNW^RUG8xm2T3|X81GhO9NIH}7V zo$^qoXTX@>Y0U32R_`vB_Z7=Kiut|7>RrTY{)w(TJy|lK43hL*n)jl~7dDoh&4i6* zUp9-WvgeA2MTC~dqZll_z_;k~abAD{6)SlV9j% zuXBL+Ob1zk^wz??e%Sov2P|k4pur4K$~8=L%GoV zXV4Am=my7`2ZsR_@;WbsmZ8Qlulog}tBSd83}dbaV#*GK8WlPTcCDuFz53bqd|3l{ za*zPB*|wbRihLVhiPm?Y5b0ZY_JY$+R=qe%VXZ!q1+U0b5GjB;tw@Kwl?8~%p?yyd6gGT$Y>DnwEwGyK1c*F;F%hKc>Cj<<~Eirl|4YIXw*%eJ)uO|2v(bsJC3b@SY zp~;b*r**$Yi+2fEqc>Oh=v{2muYTG9h4qQr!5PO6l-@e8@l8ea`t=pQj24b8 zcO-G@>1~wQJge0~;hsf!>-o-Y&hzaK2ud7obsna*8bDjA+d z0QC%>TW*c`@7f16oM_L_);L^=79?KX)Q#W+Zc0y`Ai{pwkwokv&(R#ySySuB>Uq7Y~sPgIt z&%m2i{xBnu!;Uf*mDgqlXdaPWgG|1bX#sW!2r_aV**Wu#tYFf_mLl{}I=|0WE3Ihl z+I&<`zOHx;5;5i7XfJ zeZE(N4pRI1a5S@)H9>(d|dYb6RgtV?XtWYwG*SAZdhXx&VjnkH+HzAg2fJ zj}MKpdH>LA2uS_p7aEfb<`t~Geyn}nSz>r7S5MtNa2*8Li(Z;5(58pGuF~4oBPsVvAZCWK3 zo*5fZmNMa}uVqIf(*|@N50jx7Z8{vgf9bwC5)@E{feaQkD#|q)zlo?X%IxMQU*yEM z?W;&fHY)-z!`fHV!8J@5{7tT5GWPc8{~p4(KK$UNf-e=#QCKm9VG0eM1=ipBE1rH$h$?xC@{0nAS$ zhbH}^%QSm2iSD?LkYr>u5)`picrftNXnBn-bcA7>-orbhV;RPOm;Q`wL1vL9^hB|q z$fQ%yiiEP@aadr)fp4SR9dMwq-ZIrJqQGAx)^S|G4n$-#yTp)R_uyAA`j_a2CnJH^ zJ=}}ewa$XzZGLhJTOUs!{HyVh`ZvK%MW2TH(+JU@oTBa^!SAQMw)X!$dS3YPD4+pb z0eYO??n+4AYI=D&y2gliwvF(2SBP5$wPa}6+ur4yrJo!4(Q#1Wmn)*z$}%pPiygD} zWOyAsiSi}7vMgA*UKwd>iSM^E<_vTvAze^DN59M`HYmnQO9MMVRGFe^ZenP*rpqMR z^N2*eS2|HvKDassjTWskKrYdXk7l=Dvx)N5)e|1nbe(l*WP?;F$~mzwLz_#g-J2ZA z)r{L^Mp+!Va?opS)#9nPEApRq?d+jgjv3O3%{s))Jh&hehHYZS;%Mg1DDc(YiDK%G zeD;7EaE*Iqs?`66Pj;C#3*>M1LC zT2v-x)EgL&5U+q&;>h^3j!PEPBIxIIlmGI|Y`**D7o{Hca^5=Ij!{lhRCay~r`4Hg zA!%D^|2lHVWHmTaHK3IZss&R9&ytKB0aXoWGH6;L%-u7kiX3|HUOdY_F$$=m@Hnq% zYh7L{U1zym@}pwL)GN zzxdk9$|5+)h;iH+AexQM{!g5Z@Fe;e3ZH+>q^Z;Dn1jx3ap-)br$6?1V_xjUUDru)S3;Ox zAxrxDHNal0Vc_W9vzl^CPdNOCMp^qiDsS;iyr2 zlP*v^)rdq$L62irN%REQwX-R4_L%nbT}y1jbZp1GMcI#)6NI7PDM^mbg3voz#XD8f zRV^0u(9*p)!XhcIY_@9Wp>}jW)HG3k<&j?_g^R_tWj^%Cm>C0Flv+H#Z4V)hRk&kE zb44S;1u-ysI3`+n-?n2adVGVl7)AwuHT$dh1~n@LQy*^^aD-?Abu+uk z=iXypC8H1+O&N+4?L=vX^M0St%OYJYa&?Q61a3POhfxw5i@ut!ljfOiZVsEwpSd}5 zt>x}br7KIkO_eqB{NlJ|YlB0+3fgmh)vNnjelY+!ufrysXDNSagH;^BG{;4>nttIw z_t&9C>|L^Li3ClaNeq*$W|+ESTe4Qb%Mb|RX@a}VfgNpuv9*O`RfLm5Ewdj*v1>Fi zeB9_@ADfozY@>#~z|AJ*w@USRr+ zO_?s~opvZ?K(@Kb7TeVm9!e>CeFKJ@yvVm1T*L4~^462Jgt59CW(${_oK$ga*e;_D zw*A)#6B+DQ+qB5aU4@Q1sm|mFXJ*E(f`mmS4>YI<1@WwavyW4LC(-HIRwB++d>;j? z%`nUn+$z2K_jc$o14 zN62nQo>7)UC7d{!5= zUXD2vDA4#7UNs z|EReMOCz1UO>nTZtG^AMZzJd1_`26b_fS4i#sg0xjH*q<1z~UO8Zi%fA(&>QfcOQiQVz;cw2N)t~*7?5Arz`Bw&t_GK95y2)1NTPC5s+6IVGkus@pQsmS(K705iDTa%dGv z`pROX{FFU&25jlKC2?sx=wXvBb~eReEj$cn;$}n8*OlwddF}d{65)?apD;cP+l-X~ z&{dwVdO)y;$Uh{_)xVkw$m`eIr@7_`B9L7N6m?82joa;e?c`;hEn(}oThIu^@zb@r zf|YGXV{Frris84zSVm2_6J+z4^FzwZY~Ror%_c`$?Z@Xwt4X%mep?Udz-y?``09#3 zYB-!y_&>k?t^CPMiZ;X_)S^2|y2 zX4zfb;ntYI|M>0mi}dr09+9+DJOJ!#WFEdF`|$N46H#@S-)w)Cg@{^;%M(cP+AxIo zCW>06tB1REu1hU=9L$2x`s&v_Yt3|W=;@BPoDinp$Z#@Aj(z);N#cjJi!z|7^h=yg zwTPxP6)`l+_)pG%O8&F^{Ng&i3M8oGXF$2CnErYffd$1B(Qp(L2ut(WNV!wlsTfc% z#u%DGCDOk)DW?kp4+|78yZQXNxV_82+^^QK45Sg<;Olrfh@ry>I(DlTV4D(m+Tgx< z_fEro69%*iHh(#8%?!h*ZNSq94%Xk|2;~|!y5gQf$>QmhkA4xz)E0L zvPWZ%wv8G)rq`+FZ4xZL2UOR4I(nN8OuNamkIG4VcrLouK82<(T`sje|Kypicgv+y z`*2Tt=gG>S2MC5nGMu<~P*b8^osN5$1DdHwmi%*6 z8w-|0y_bjEWZ{l#im>+4Wk<9MPD-fTL(8M35Kvw5DobWy=@tBXn~06atCglZBU9NbsTs&J%Gb3THtk^nz4)-c8dQfP4g7$%;R_BOtj}#L%KAm`O8*ywhm<&7sIyt+) zwTDA9cb}zMJ57E=cC7pVBX+E-*|FaL0d}nWEOrcz&Sx-JT%_+gEqYz6hvV6?(?iZg zIR@M6xY>O(W)_{xLvMPSZStQ}N+1x9qSdDTV`6CoVZuWj(yoJAV7N zqd+*$l6@M`$%(cd&!IHS%iX*0KK$?(rBEwo`Zh8O6bvX=OmLvFf3r&l#sxlgP^L29 z|7usz)mY5|r@VdTPIFOy|KUHC+Z235jV33bqUtV^rCiUDGeYRXPTd2ez`V~xLdojz3q zh-rdz34=%(6LrFoXOuU9Ty}Ggq}bMrpRw&3$FC2~@Aj!xfeja$GlOCg(dX4L2>0&& zci;Y1!yOkGc^Xg&R>}*`T4ZD*dn@r;OQbp{VvRy#AIt=q^~ZR1 zVJp>*0933|h%Wb+*q{{b7X+k~$z8abM5ys2k8wA6$M`{ugqy*?wEAO2~XD5Ec zy(+djt~`Q<-m1PUZNWj07KaFD+grPsxpgz0zxzf2K*S7yEZ#2#=Jd=9a)-I)zEdz4 zUYN)7-R7Is@=#~*(lq_gR6$LSqzoYsth`crJ9;%o61&hrEqor<2aTxP&@1F7U>>Mg z-g6ZS$SdK31F*mvy4mbdR6P?qL?jpJQ<+?dE6ph^)$qRrP(Ttq&4A@x|{-P9soIl{Yn6w~6(7>pYpo&P{>d(Io!HRVh8Uz6YE0G2DD&>TZoT49=mCQ9`cLwq^$0X6UEu&ei7bF~*> z2Od_t#XXJLv(=RkcZy!xoAk*oLY1Q8qF9J;_Z9;YY0;yqqbQ4$BD-Y~SZ#>{j|Rs4 zR4++|!=MTxvc?J4W*c&~xKVr~a7+XYP*%2H)sTIXoV@dt<$w|&7*0bKyp+yNBML5S zwj{d5C5Y_3i5=<(*Ujh!SfN?LK{F~v<=B=mB|NA-m3s8N(*a|29qaL%2$`a^hFPKP zVz^{}bE+O^Y!*=ckalEu%7=W3Wv_;@G9KX14-{2)NlJypy8hk%VU-rNA1+~o;#36Y zpQ*72#GNrUsG(<2$^Y&_MfFjQJfrdrNU2?%#$!+837ODF^m}YFMmxv`El)R~jbx8p zo(l!4S}YX?1yymN&$YWa^Akmq!|481 zJrrlFIq`e`N?;zet2=QEs<&5BUSr!BVQw#ywk$Mc$jH*o;*K6dRnk)qcYg(54BxTh z!;lEmrZZf?tqGAp z+_Ke8KQg4!V571X2D0*|Skn33eF|&1kH;(%B&Pys(cRCbJsb* zE6D-51=<`azA^@qLe-|RVvyi#pItUFoXJX}L{FxAr+VG=r5>XcSle6LN;66x#6iNI zW$xCkv9rCK*kMjvO+kQ^%U#~^C%J|lP)2iDP^4%=F~-UZOmycNI8Aa2 z^mL9idl69}-z)e4-{uh+5anCi)MT9`k;(4XWh?;Qdp$G+k>Ug4ZiV!_0#-fksZVqL zY0-m^FC(3}QyOvZPW)ojJ671Ce-$?38s{;_aoKX&gA-eVCaKLg3R+Rz3>4NGn5n;o;2f8ap{DTU6HWRLhtiiBO@3RI5 z-WHbjhpK5{E(dC39ST}*FJx@_W=T+epJLXXTqchbT7sv2#RIr7ycLqc@sx2GR?6+x z-JdWu++#4Ow}@Ra`g0&NhG+UuJ=L$IU3>GzJ>h?n7_FbCU#^exYRO++Sz4wqCs)Z4 zp60kXkujTrw0pC9>i!fzHkPGd)8~n;kIFfwmWY00Uhjr-eFWp>fAlpVl@yx4=IIIx zUM-`pDC|urSiWEztgi7T%LxS<6SQY%K{PA_sXCa}0^`Ej5Fe?sW%L-(``gpQd46em zeclbvE;4yGmHsSwHFSG!>5%zode~i|9#@aS=~c4Oqx-$vvFg{EGDbXlHGDO~!I+XH zErU7K?}hHy9R2@d`Z)4|b+W1hkL%2^)8Rka*};7tFjhB`fY#zHNkM}Vs5LenuFE#Y zPa5(B+GG5xhjnil0K;6nNJ%q}+Yc#RYU&pF?Xoz!$d=+Q3@7XqxDoSb#>dD!lXL;} zjmSM8LD+}2Q~S|7XX9$kfgX^-oudIJT^fDKJYC#BrWmt8)dk88ed(jR7}YvF0M-{{ zF=zfxx0KNtYoov+!*wds8{eQs!EL;kDH;n9=1*s@wH!F>y5vw6^sn0OW7Yxnh7PTY0=O za0qSYN9-iPIiZ4kwobP!prS+!ut%Oz>0*&RNMUz!gtg1K)J;-4>kEmWD!ZwxUZ?O6 z6JohCHDPY77%PW9@!AvNQBT!Y(pd4R+>o4Fcd@M*WTlCNO>zF#h-JP|QbT532&rPo z9gxl)8Pn4xY=5jI0~bEvh2Q5LtEF}EI2?4rz6>AW)#7RI;o5O=)3NuI8paqZU2`$UI94^v zymzTHhqVm1hQ){Jix-nOji?8k5956hqq1VY{PL1Ai>8;)jiZoPC5rne=`lUv9pkXT zTZ;v*m&c)#m2qS7Hp-%Q1AGiSO^Xw-acJ9wQ-4O8K}!w-$Z){gM#J1 zFQdX$Yf3A?zDMkV_gm#SF*AZi50#o7`mZ(P(c@7sJT+;b*v*eRv7eAq8=4o3rLpNe zP!3w0w#sU3x5I7l@+GipSNjmhQhzek>5wzQR=?sp2)U)SgPb1*87Yt(Ly0^v$srg@ zzf^-cv;YJC52;j_PhG7HIxmRQ2K71Jq#t3*YS!*hrGPZFY8Jb>MG6iu8{+z6G|Q>O zVvw9{o&T7W9f+W)pwkHZBK8C;RBQ959as6W+-8@=?XHoL=MW2BFp{0$9@D3a)h>Po zv^*0zioUhzfLtH)_3!QXMK?}DEl$UQ8-u|0w&NEb! zq3gx6jSwv|IB2wU3gS(bVozm;w*9bRA(As<-PmEblZ@f)3a6cBWS+bBffch#R!YCo z@-0$$bkn&?;cnS&5^eiYkwCiiEhzz|db5j2r<(b_HBcEMj&7igD5CbG>`G^*ls)ntop4RhnRl$UO6TgqY zjlYY(r{@+7y0WUDXyCB}k4fIf=s?GE4VjQFrvqj3vZ0f~+1YoY2E)D&{deCc??$6g zo3XEx;b=TLJv+a6_s#onzx#d=YJ2KwI~)uLhsJm4IJ!8HRAxDc9$rQByy(hX?oEf} zV9WOc9+(V@p;*u|-8|{W4Z2ZxmQ&nkp>_SN(Z>`QH9m(EPof$UzDepy>W!MD+dkV) z74ebD(Fq;ZO5=n*m}1#vBdR<05L(e9@v+9mDNGB;8(cqCXF#6wAhOx6FPlsQ0ByCk!iqDYY(SMSQxTXA5 ze<=bYr+^3e`zpES7zp|#*M{nvb)~gB>Op%3u$Xu0!^2bEce(D%AnQ!A;dK#Up;M=r zHJPKX22kUW;S`gW?;5vrwnm6M3db8@{LB^@PF#8%&^N;ES7nPG`A@8}tzKd(HE|2u z&yScA@9gkv>Q2k8`C>^oZRSijo6o}ym-A4&{nJyu*`bB#vHem*(MHmA%x*Vu?APi! z-9DsT)CF$U;z#ios%ZOl-HDA(IVZqz^GZi$uyRsRyp2Zvv*R#?5sZ#Qa1zFF+(Ud5 ze2C$Z5AjVH!Eq1q%}E%;aS!o6_z=mF5Ai;X;JAl)e-g%U+(UdDe2Br35Akgn!I49# zKSU!$+TZRw-At+EEigZw)v2&&Hf)!-rAvB0Y?Ur-g+%Z%%kK4=n}K+-l}a|G7Dqk; zzLPg#Nz__g$qMKZ7Gfcj_^kDfU4fu3Hw%uf@|J|S7NkTys?$yW@L#D+F zmi3fK=SqBN;1Uki;N^LjnSp_^j?k7uwyAO0*FP{E`Sf@E^#=<}UAqc|w61Oin&|)$ zt!w~AO`uT&=)?on=f-$YHIMt?x18bFQi-Z#2Sn%%u`!Zdn&f6@eM^!Dwm z#=r;7?!NT^HBp_^U!Di(J7u!->5FLv%+OPU0v@LD^4T@9f5tL)pS{4|M$^u_S6a*R z{)B$xuXiV%+)Q?W#vopkI6I4w0F8=q;=8EEJC7{%79nFCx9J{tO7M}X~_t~1&lT%jFLo|9H)FZZ_g`uZpT3Y zP5itY4o}B0B>6!40KqPC9u@*S_l#(Ic{+$IN8CrwusrI+`IGNAJ{S&onh6QD$> zT?ck3CRAJ16R!L&7>!^`AXnQyHa7KW9d9Pqer`<#+^p*NIg53`Z660RWq;{YDwIP9 z;V?RG-cDQRtrJNV>ZvM6ZRd>3d%d1Nls7nO#WtT+ce|ULRaV!6JSTeFt}k4$*E{gO zQmKYFw_0e;drCKGCp>!Opdr{HoQt+wWe+JP;h_Rt)kC_-dZq~6CVN<=3%&<0JA35x z5(Wv8U0XS~VVAUA1=m!IjPoMV*r}?{GQ!F`)gsTG*ge*^ql!qj>V1|yNL=oc_4_7Uc`GD@^l-6+B9bWL_L(u3y%FSx|)mL9R zxakgD{Ey|T+#Hwo`aED{U6eEnSd|wYntR^joEX?qcO8)%u;Y8y?w7)1`)gmuMES#A z#_&d-uB_13X>wglrr87ul9k(RJKL0xIHDNc4VpWot}Pq_fd~45s~b&F={Ako#8#mA zx@1qTSi3VUh)=W9{j5{i0{b|+Q#Jl}#VWtg_&Thk*s4JT+n5+wn|sBbA0Cq}v_GyHC4&Al*-Brt0p2_B{dZ?)UrG^)ll$ zZfYdvY zJiwVHw+;SF-!T`b{2i#`+IkqKef zQ!zFb#ic{anV+MD)rfy?EJiJ~0Uso;njB#*fwQFivaXOL7qB4GUCI4ZilXKc{Z+`3 z^U)^~opJo}Wwb1d&Q|$M*B&io#CmDJ6AJTss~4erZz4A*-n&EPBhBV}1zb1gAJrBU z(Q)%r74;|{)u#B`q2(S*Hw(v{6s?ew7e)E-6HNT>=g0liFLID#d5tSwp~55qb2Sch zZCTScVAEGu(Q?{dN_K@s@73_-kSnfSx2kca?ZP=Y;i7*p0cWy#dT3<*dQT1-HXkT} zp=>_1({6XbM{hRmsJ!M7Khv>Ba)K+KWv_C0mUkR6y^1Dp_@5t`Em$oFtep$?Ne$f1`Xik)3Q;32XREJ`jxo_&*v z@VMzr`~Tys>(8I7mz_BJ)N7;>Q>~_h%OU40`~XranK0xI(Kv;>7qrCBOArgYp91To zXY~C zFR_&$Re6T*Up-x2{X+E+;PWq6S5N%;2|w?9el@&NC%5Y6TRi*I;%SD;PY{EEAN{4_ z%G*2ut%Gl*)VK~|G49`XZXs1`sdAH3Sb6T)@f(gHUe*b2IEhuON0v5#s2=rUZ2eON?fXy~!_#5E-;2?&$j&NxH$`y-K+Ajq z)D=|~SmO?pBj%W>WoT>ExRJ^>vCgV0y~Vcjsb4*&4>;#tmrN>E-PG-r{Dp69%zUio zrb9s-(oJyTyRJYzUwbDFd6_XXl6fUxiKr+f^b&;)d_YOGT5{k_u8( zna2+1pV5Wie*E31A3IH$AITrznmyfM`}=?Y6v4mu(I0>J>C^k){q9KCY}^(Z_9uT} zm}9iW%~ZU6Ip|M%ue>o=U*}g>heO0#DpRb}{oXjm=jNlNBmkaJv4;*d7d>9|mN78- z=SNZ+zS^*)C%)@TSs>Y4IjJ%}IayP9lhQ|JwL(laR+ii1lLqQE+<&JlK(EBF={Nv}e%p0zaI>@F(#FJi&-QoraJl9%L|m$&iLS z3_YN44CgXAXMr|n$5DextJ5u>QvLhvsp|H6ft>gj*HcplR460Uc}SeCIwN$vWk#AR ztBXsUC^T6;0E(%Ag*MiEXpHG}o$s@y-KqMS18a5P=tvq`!}Z61!YEAU;!A&GIWq`? z^9_PL=opt&Z#{^M;QY9}QxSMp>bYw@u8fgr1V+F(Psq%$1udhfLCZ57eu&^(369qL zY&A$FAT}S0(gidIA4nIDj@2_Q%i%f@7yw9B00q9!7)V(~F)0R>Sq z8s=*@L0HK@4Nx(2YW9w^Tm%C_5bSs(-i>^Ym;vh?nf}0<`b_+dDhgl1Z_F~wWrXK+ zVV)N7-{%+q=+(N%ndl#n?VW=SuYA*v-=2lT9h}#YJGY;U`(wJ!sQtf{cZCf9mamLX z`TP5P`$QLhU+$`HSvNauja{i@G(4}voek@77?&7F$@wIy!wwoK$MFfqlDS~R!I32D zJmlwrTGnvHG)H~K^@LZIgi8adX1z>}L@?S$#57%Qrwqs@Rc&m73g?O&8e)9&I>gn| zVvt*y^8T`w3Ev0zHjbi`e)E3$oo&!bd_ZhBw4eqasO2}`eAfgy^v;55iOV(mliVpA zz|E>GH!vSrzOr%;vD*{Zrs?$ADc5$W#_+;5>6SNXzQQ@B?9K*2vULz1UC(IHsh>P7 z5?}G(DOaG;@t<%VMwf0GOV1tL^aSH$5o>?aX+-3s`+GxQjHf9+Cq>q`8crFOrp5v$ zb{!YB*v{Y9gfL2~tTRbas(?U3E6EhsOivqF->b61q+mkCr2l8>sZ|bQ<$Yccy|wKm z^{iLYy~)p9qEnxwg17S6WIye4j7m(4t*Vd!i_NCKF{c@&%*m)-Bmi7FflO6YGN<8Nq=NOCmtV%KjUy{2AttU>nttgun#2dIp$$W8&G7N=GP&;A`9S6mGJ<+ z3nCDC?{L1&?AX-C_nhPY1PjD)AFiMKgcCb7+MKwJOs3Y!5jhZ(L3@4FDV9YYzRc@q zLJ_J5f!P6P>FfcB#`7KQ?f59kDvO9XLCy*&_)3zx!E{%)w8n|j5P+*kG(pVaz_*kR z8cnm(GPk`rPRw0&8&=DOGWC!fPu~lh*=tLH#VyCOR&N6XBELErj49^8F0jf3o{Ha( z(&N@j&V-(mv3B!UNiU?Aq`KVJ>l>;1kCM{jIBqc+gws4zKJTWwYpTzRijqo;tYnxG zF*7tBZR7?X9&x8e`WcrJP|$;ttvwML5C1dxDiMOA} z`D?f&l6FjXT&b}jcS=<|*h{(Zgtwa@N*tCG;9hJ?%h6fqAa%tj0yw}iIS&N_dLBpX zr>MXLhp+)yq-W1Wyvd^X`icJ*B>Cf~yyCwMf9*y6Ly^U7SEVG@G1gN7VK|=0*`V9& z&+xg*_og3!WOM*6AFu^~#8&bNTJk4qee5C+=ZM||JMrX8Rj%2dC+!W{1bfm@ltZlr zk!pa+Wkb3*tiLe>l0YW$dKFW6Gls#?@|C8`N+M>P&r_Y5Q29e{Z*?UUH<6V-4}}78 z=KLv+1f_<>YF9xw#C>S-ZIgA3>yAo4v{jkJ14=onzYyf*%^XlUKa|y@WZb+-h3|V- zd5(iiARMr^j^0E?_|1X%x#sMEA(0Et!nJD$G;Ln#f*)4g7jvo_=yi7u%R)+;2MCem ziJzrE-%@{V#xiGNXbGH?-K|5OJGwTkFrz=iMBUblcSucie8DiF+dG)ME-emX=A?(7 zGXD~n$1a9N^_c0>xVS+C*2kWDp$xeB0#?x9%*#(MBXt0qi$lElBOS)(;)pKF z!E7#%@$&b4NSmt@y2=N(xq6CMKjGnRT|A?U_^O=C=Xm)$%o*=ozQD^Lb8Eo=5K>LA z4&Bj>k1c$u#Ud#$&qo2Y_tMW&dsQQ{_Q-bgRNFCvLv0h7*eM{ei{oT_OmkgV#-~-~ z7VKm^{@pWwQnA{{rIB}1$m{5crY3!!Z67fmM?&=X!W{Ck8XL`-Rl%18b`Bqrj39;b zLSkWv-9doIMYjsdeOEn{Ea($=iHC<8zh?M;R1DvbhT;2OGko7`hL6{bwN9+Hq1QtT zZxKcEx;X$LQCSJkB_7AhjU|HOTb@2_2A`*iTNO%LUpHH+nNtnV-RKAD|GJjQYwA3X zd2TZo)&!YJQy=tv(g&v!ohly~Dh`NQ+9*_)?$@WQG0ryJR35B&(&dYNW{62pyr| z#@3P+9IlB%@*4AZ#!ZE&VGyePmkiZUZnTM0YObz*!S}-omz#94EjM|(A~Gr7pse)K zfnJt-n3Af9>rF@l+sFW(E4Ot9>Kp4;y|YltaobDT?x~wZFDV0fzu$-7dC$w{-gGCr zXc$Mp53zpTa~vo{rREex}on;)b#Y-j68+U@J3BQ8h6 zh5A-Rz*_BiVPimARyVK(Ym1v@X&XaLhMuv));s+t$LdR$oFskHojD^l&u|)i0?X(^ ztbSi=vT`BT|F))k*f+(Ad1bUO3h#PAjxSr_id#MPk0e0nVFJX$&-{J?j`Puzu_n|9Oe%nskpwRLja&bOWWn(PSA% zQ|oE$?tyK&4(ff_Bn@w%3bFr>Sg!c)Rjqh7_NHbGY zr(#q6CUKI)A0|!_s5+eR`%Wp>gNym1)teY!p&c2}@cTD{XZmzyBv=&y^MrSDl z7hE^|3M;x=z;KJZG#P^xLW09NB;$KRG=jr z@#!jQ3}Egw9Vu;L5gtxQ)H0(|7TW$msFyjW&xgw#Xi0e#YSG2+8^U$6)cMlcdL{`? z>OF`s+|T;a0R3{@((fN`Ja4X?Q_dGc%kND;i1n5T`5e7;^qg4rgl#wJkWcf6W)2J` zv^S8{w32X5Kl zyuGRxs)@Afkvl;bYnZow3tiNMZ=fJ&78{Lv0+}hv6lb3g1kQC#S-^2uLcdn)I(An@ zID5#xSq#)l$0W7a-?|H~rP0J~WL6{-5iSa|GzuzqUgi~}nO>D7@kmiANrD!gZF2QD zv4UV9$rXmyif;>s`zUw3?Nw8~LJewRq z8W#(*NpQo7s=$|~KxV_tQ74V&(SjY3|JF%6mw1MD=JI!efB)faGmlcc)lgau{m=`n zLUSbiJes@s5pLXsliUB$c?}M2u7HzJMJc2tp#Y||WIOtuSPChF6n>$ym>_*$yJ~@M z6<4ekB`s;ly@O2{vt@=M70_l;^Z$YIinyQEJUvvr91HV{xK<7e@hyERIcf0P8mLoa zAcx}A{aIMdt5bMI0>e##6{869R9{(OKAokl@}f#CR9Cuc7M4bffRvTCBE9QHj#y7s z+cECAa8i&xea+E;if5xI>3h-~1Wj$s^1mpYs#~Uv1yoTd z$@VjDTs#A{M7?>ZvQxWRxqUskoUk*KHJqDo?<}8JtE0kb*34{9J5m;|qdi($A84#! z`WQMGt1ia!EZ6=%Mx7Y*dGilI9o1E$yGo#|M0J%&SIP&a700>8aSk}n6^?UvxCggl zz#D9x?ookkB)G~I<}e5+Co#ZwzOGQ>I)RIB=BEl(=5Eg7w41*}Df<(u;}Pq#++%1Uu}K>O2=g@zMiks6 ztLrr8)oy-581zQK*1i*@Hm<3*>97njc9hO_U{p?HHm8#jgPoinxn7P)|BmrzeTu}w zuSk$zFH&G?^X*g5rs}twd>P7sgm38v#Fs7t!7-%TtLkSQ-G)6K&OV5`J&>+;n1&hA zk;8npT2)eh5OV`t0TWnPo%5dzRr@X`3e-a+ljxGYK)yJt)EPdT|J;C%9E0o z*gusKhm$Q>7`;Z=nqAW+2lQetqv>=&8EOV7{?Z5jn8ftobyPK)U1q4acSbFL+ zvp#1q2@hsaAB+s~sBw9WxD$_L6pfxWwt*hm;So%lBhWIsT~NY+z2rRoxE^Zji#-Kx zNHX{0*!ohVh7G?%FU<53rmO{!U^q4W$=hfU{oQ`8f=53YwLg-2wHIM$@yH z*;O?4<%6!b?^z?0|Fh zXvCZWp;kR|eIlIkUO8bdW&)HXMx#A4e;aKi;CUC@8O3}dXIQjq(^x;zC`WDwlGX~W z8x_32@Ltn5(3CHsQ(5=Sr?`}C$o6n}gCHgwGcr?z-b!NI!BF5#h1*fC#99sH%C*($ zu3ST1OCXf?y0zrL1BJznNQnb$MbFaC&R=Pq5+>}|Izw63m6 zoiLU{a-U!D4K1@AjbWrQAPl=D^F2SNirzFjnQSwD25d7FEdDl5&R%=aa>?K7FU4X- zN2NPVx_rEBcHZjbLEFeF)ofX=KEF_;SZ7P+TunGfDzcLQh-3For-vescl^`&0dpPy z1%G|${3Ga{K?6Y&JV0lcn&YI9Ad?HVNu|0BgB78LKrtj61LW>W<8C8Evh%UD$b#e;&|V2uzRc`++o(%c zfC@{{ARo|k3yA5YCe1qMa>6gmjN+A8yRYKTMeY<8&JB@;WxfPJdE@w0D5Ub!th24< zdayt-hCL_Lg8OTotfY3~j5=-kPSU-K$pT4DKTw;p@t!`vcq(sqm_d+t7%k#3@b`cD z!ygRjU)n%_+U1LT1KS3Qy3sn^!JT~(_C+L(ao1Viz*_~lfXbKZ3j^P~9nbb)Jox)n zJs=>E{m-;Gskh)vE#wS&C;_b}{j6$k>c%+9YCk2CD|T=VV^#GC=+02?Btr+B{-3v5=yKnUx3zAXPu8&LCddr*e>p753t#b%2vqgJS?Gvv6hV_j^?FSRaQzh zOC0or^5CEz==87fZP6HUWw|$c9knC082_c5*UQs4E#=VVBHdrRJ}HpbD%7jb#u!nGPvN=ap^a+JdVSOmfOW*V#?7vwmxT%_PdNd$&M88}Ru${4 z%m=tsoL~%pA~1W|Oko&ZJT-eAmP4p>FJR9B`>5)=wPt4-4uX8aeIS8=Vs6ky6U82t z$Q(WBuE;s@RCTp#7KFPO)Scr1uLDxm3@rOT!csBN@EC7UWO zZX!K+lwZ@~b=XIroE>>qy>5<9k_LbvU**AIaNT$O`G2%sYrGz<4MZng+O>{s)Q98X z%@sV%n=9?feB7BjOb%WC5pG9o>P{1d2)1`xim z5yyRvhJx%!&D(Hz@a^COb52eCz#Dmbd9N$Yp?wu^^?JBChT&?lI#0l15@o$2Ptd}K zb4H{^lSWyNzox#231dJ41#gY~Zt(0CL#Af%IYQyyaY*yftrj|vB$&pWlD7{i6MB3W zpT`$M2*yo9FdRq!q6RxmfOi_TD}Pl8kJ^Q-XB{{jKl!zLwWX{#Z9i)qY;0Yv((Ny# zL5sXe_i9kZwOz)bh~7puuhYVpZAUp56t9P^v91L3a@6Fa-7bQTt!kt??*-O*==EwD z1FiHI0^d@})PnjaBK7QJ*NN9N+0KZ-tC_B{pLR~gTRaKg%S~Vmzhn!*tm}cA?**Ce zGR#Y}Flw_!CN<;)Ey_cAku6mzUkOL3E~Q#JZ!?fgn-4{YlH^W94_V63MsD@!(XF{%_>k2NZZSLgtkqiQRczqIB9Kj#BeAyGO$0SU zJgfkN9OUkN)0`Gmbe3EJ@v9DAmci?Jrej*N-EP>@Gw)KPEIPj2k$mlaEVwBac*-jnzznj3}if%=J%> z^pPC~94FlD9ZSx}kAM0oTRe0v=cIKB;!q4XpW^5VHNOgwt9zex+F_Au&}E8#-FD%g zd_sVpLyHIwWc38)O#XswfWPKeO={Q8(Q=@wl3<08I2m5E6FMB6f*U`+jYi4yF^}O0 zyNHt{gmUmalvsw(k7;;u5K|+aim#x~!C*4V8$H8U+QnZ@jiR#lJ=Q}jISi88QxW4- zl@-9{WE>9N+M7zPf-9T=b4guoq}N780~aoLm{1e@wb`wt6kY{uy}HRW6+t1S#~znN zw%GpWA|e<=;t~ms0Ghn&^p5WG+dGwdYm_kLjasxo>)iF%kKT#O_4&vL4diMG64vk~vXG@e#H1iBfJ*rbj@A&|nsG##ZYJ za6@}?Je8%mMfT;X+^KrJv{E%D$x4dz!-(X9;Ao~&b~hnS$%!2d!Au~Y=u#rva!XYu z4tesUk&3=i8~~pBnDvCN{6be$jjNh8ZB4CX6#NRc|5D>{DtFj~rfy#cF~t82 z2IcR~VdK#;dc)I}ME{%+&Z(C;=s9tB%C*(LX02xn%QU}!b(NSZqQIhe-P?E!JBWI% zaoc<_acMa;1in#)M2c?N0^>0R-xD?@Vzr31>aON`*)Sb3f(4MwVN}OKF zu^jOEiO*I-sdAt+9CJ``Ae1PRtuf7&92mpWDS=%6uC zt#TP*h^t>C>7@P zzDFS7<0cxD;srmcbo@NS_&74W9AzcBjK_?(`wus@Cu$6%G4Ohvw5+ePJx*FWa#m)v zEYTT7ch_vG_Vtw9(q40X(lwrMmgUviD!eFTnHuGmVS=VzV9L;g&;y*(gU};#Zvt@i zD4l3{YiA#nNX}cUAYdL?H3=V0%92eXRLwu4%?NCV5ZGoFu~Mwl+ali*9k5%f#D*L>W|j6r z-31LzTa1Z9s8mswT{1R~(2RxigTnI<91ltBU9cdnEJXnqCG;w`X2_iHC*sX~a^VLY zDC3-+Ov(n}n`TiQTxkIhBQ#y$azPLKo|d-Jo`D(2j76hS+2t}=a-B?^_O<53^p&3%P)(KTggZj-BK(RV**8!a5wYFNN# z{|KAt#npzI2yWCf|LaX*I1qQZ8u7#AZ~;XKBRnJYnK=q3Spq87)!?G zl}-67in+(2Hs)Fj6+oOl5GlqcT=k8^^Hs{&EWf>*qkkHXHP!+u9r;Rwq}tz>>I~;YS>FdE>kSc5|bS-$h-k?_SO2&1i0AoZr;J zB|lqwgJ!sOdau$4NNzWi+()MuuH3~zv+#~y**7p$Wmx3G7+902!&whFbI+>U&fcjs zIJ0khv0Ne6cb_jXYsCY+7-;ZBqgVLSf?LFmce`cT0X1~CFN8{Y+$Ar7oLm8V>Ht?c zlc{r5)VyKr_z?$3VW6tT(nCE^nTBpCe$ySA(bs&|4%9SO_*oGZ$8^hY#$o(c*KKh}p6g?-$TjJeuZJ-#Dqnf=^kMc@DodtA7i)=*yUq$DU z-v``VecBUvh6iiY*kU|Uq$o8$yH?2xK==jLJdySD8U5w?u{%Bq6)R^MOVbmb0K-iR z!6pQq>Db=amVtqM74Wm`qM$+iZc{RbEA`=}hWEKw!O&h^nbd#Qc&|KUYtUvBkpBF8 zU#jQ?A`)ACt(sM-t%N7;p*2u;d2u3CDY=9DK?Vg&+DZT+7sq^Y;9MMzIJJK=IdYu@ zoH;SN0oa?_e3Me}Idcd`-au_&+kH=Lnbfnb*O;cO$V;Ht{InkH;vGl5$W-9K@Q$(G z)(<4fwUoVgVQ-Jzd|ZhL?nPqT*p}p@?0uN}kqO)t^Yly9_;@k9xslZXUo}dDH(`*kyR8x&oAwn6^xZ%OC?dLEIznFsMSw93K-!BbE>`iqhFO%j2(=!RoN<2 z@q4LubA9x|W>nZCTXl}SY=*}#9_s?3Lv^k8l#v`~K{JSEUOLn1^>xQ@64D^o{4>QL z3)rU-qS54J*dJ4h6@QCUHwNP1(dBd7RCPZwobJl<{y`s}sV?tSqbNkeu}RMqhUs3M zp)iZyB%Jt9TzJ@deyE}kWf%IZvqH03eltT>e})MXXRrs;8GE~Uy?O#<)#nz-@`K8{ zsMX}D8=ISR5eIReK~;g3sgdoSkyf!#IVD!VlfHm;OPmC;UcyLRiP5iRiLO-S*a#co z0h?PXBb_?N@*d77;wUePkmrr0*H+qhC3Kdb49ZeMTYA zw_*DxS8 zS2FVeR)Jwy!kb$z>WaK0rBBm@lc3eXMHV%ulB>4*3Q^VccD>G)Il!&ZoRlpx^18{l z=yD@^L@7S3T8Ourog@E5Tw(2G`s7xR!w@D$m~QQ_!+NLS+P0>O==d0^?X@M!HXtZ; z>*!j=qkunHwZvfI6G;_lvB6XC$bCmd`(OnJM)gJ(Wb_w zDRHwZZC*>=`N85}Z4WM3+>OSzv`K+2I8~wL7M`o=P^A^*3I}IwjO_BeNqPs{JMi+l z4m25r+O*TXfHxG{z-I8;=eWnjuR-A6)<5ey112 zFn2J_6^3~j!_BHpx6(a5xpiUQ^LPblEmEWLTemH5l6e%W`?SVbbgW{*>)K;%Yn9u~ zTBBYo^sd#Z2JFn{YS=m@Qx(^%$Mb@q>bQA|nGABS=fpHsU)?@E)b#pfpwAs;zD_pn z@E%k<${GXiBHI-pHG(MnRxAVip$1=vn>8IEGLmF!tWwS9l0&usYYh57sf z$hCF0%l9Vi=NFSWVSnIL2maI#O|XfEJKkkrblw`GTiBHfsgTBbP!B*8Kiig=RCR{B zs-}V*-V!b<+p&sYvr?O?Y?v4vv(2bGOPu2GtNW$R`z zzIPA~CZt?{jWH`l|M2|Wj$SpaCo*ry4dz_%OX+a6eu@&IHDVQ{BY8=7WmZb{C|HgR zG8_j?a9GHj;w-MLq(hd9(Ku9cz{9}d^if-wp<~E?ThpuJCDE!U2W^yh$Gd@&$@zZ90Xxo{_j%Qb9st2&U3s0n>p0+t zj%9Y`*a7ZMwJ0~38PsGZM$u8BapM(+W z|14K4ReGFtXdsSdvm#xq(Bdk4xN^8p6*GfQXv3xn%;Y5!M^(wcg_geE%>j79tvLF@ zk?054@UNd&q=xGD+FEVJpd#sA_M$V!++l!l4@k())$LtdRf903xDBbDO)RvbWL9UK zTugsIPN`8dd(?^mA+iogcz`Z$R!_B)SxG(-4X(p^UG}<>#)@5>Y7HC7yi8zlEt{7c zA*|B?Dx(Rq-|I~2?N6jam>czKh{E=6lV!@j+3gHEC!LEk}JiFok8O|LVIr@s5+*TD{=X4V)Qz3cO*>e9j7p3V#w#6DN@DRUr zSmJ*NpZ}}V>-$H-u3@!-%rmQ$G@MjzySygJ*B9pJ7s3zq0RvK@f5AXnD<@gAL84kf zFQx@9p)R=u;*_hR|a1c}|z5-Ez9SdPXXa`=KJL z#TMO)Y%^3`PcTf(0NY|!$O!Vr*z}1r5?0DT5NVt^g|Xv4E$R_XD-CF|n;(b8Za-!* zlmc5EynPQBk6=pMPQJRN{cS!bP-e`)NL`8w!P5gu{^Ne#=qxm`2qgBB-ujUz=l?U! zcBc*K>&Oo|Xd2U!_+$dO>2IjnNisaL8pwDQmQU2!JQ>eX*Mj~_&BW(7t6MkIsgvv2 z;}*mXlD3G$wgl<=UO4)&(E};mZkaaV%-X}N%Q`X<;mqeGW^vIsfeom#$rpEqb!uex zy6VFbK{%mGgMuNpvYE*xbD&b1P{{{i+vTKCp;aKoc5^c+r9_snGNV^Iqp_6{4aDTz zyZ}kLHYnbb>`%>G(vC)}tf6!Kzm+dp?`@b_oj6^ua$UcVqN5;c}8@lo1?Vd95{04%ejT+7Y5 zy16tAe^+C8EuairyWE~Nz>P%q>c%j|e17xP-8bqK)T2wom4E5bQkeL#+T+Hpbcydh zMr+m1pt`}IV4_Sktra_;!ggBegc{mXUyI@FN8e!F?Viurn6neqC`hWJRAKOFw})@c zFY7`vMmpf^G_qCS=ox?e`VGxF>^l4=$~+4BHLshC9BU}107~U+KTYLC&Y<$xPC&ko zMQ@GmS*TIN7CXeUq{E(u|4X(hkuF#rYwY?B1DE`I!ixFHYgQpxOT_^@Ww4`mzFL@GJiF645pG7LUl6_mGRGVfh_1_`umnlz%pVnvs#F3YKX54}YF5?69hN zXW6WAC?$teey5fTG~c+sylj5b&WE(4q^K^8X)VH~D!JpqqvEVp)sVF*!NXv}C>Q1+ z6RUBXTD(4Ul;Ag!#KQbxs7mRmOMDgKu3HdEt0O(n#{pLaW#DSKn)~YyN_L93aGrUx zZi;?^Qx}LSJB}`THI|L2$t;Bh$0YBH*R?K1==!X8>+q!L!q;GWzAqyX4ySr&NL%+xnqS9K(ZI_1?Ytpmi=|$1x{iA)6?_ z9SA{DZ0NEk^GK(SI=eRPF<*O^L8o|kBBluzg*t`!W27jt}hVC^{C zh3H}}YaS;ju)<3VE19XzGD1;~pLfII=@>rChoTo7j{{nqWIF=@;6By+w6Oizm(fg~ zFY01r;6!k;;5W>c_*Am951h#uB6;tWf5h%yQ4{)usj{nvKBO*kG$jr^%RR*bEpqeS z{$Z6Cv~KNGu&IeMI+N7kiFNuTcS>>t^IQC+l(;032EAkLpaIte92Kk+R7VnB|NP>Q z*=Dg*wV?iIR_rRNXOwQXcl_~>=|(R8+wLJpKUn(mDWwDy^!YEaBUHPY>FHzhD2a>q>PQLPZzra;xrf@ZZK>-j;_!^k z#yNEx!-Btb+h4b4KlI@m8eGw(JGf9*lKG9AhFJC9@b3FjGhP`v@h}{nPbipGB{5!4 z6>wvhrijzV_~3uqsZdN}?aI;IF9tG@6k^SamSU^fa)u%gNx2P+h<`_c1P5=^F72pxQp(BE zHn1{q*D58`D%(mnb_FPT@_%M_R4FP|wPtf#+kTF0+)-Hw#C9edf-5qaHBTUTu5)^J z&qz_PfwH8JVYdd5Z>cPsDo?51(CsKXM~BMk+qJ^fNWb$ZD`gn*M<(*4p83@>huG=h z=OPPWYH7=}`LPtut*_j$l%Cb7>8pQN1g4KFBq0GkerI_?ZeF*voj2R!hsDyyF}E%r$7M|pBz#Dk=l4@EvqP_0ZzFF> zGx=1jUJZ=;eH-Jj_mhGBtlZ3=x^TMghm$$rTBe8&xdgvAEwk&t^RW^fJm@V_0n~d^D{HmO}jlfEs7r}A(bs{H~ zssU3+L?3Po^!89{41Lp%pWtWGd2h`G`=7()R}j}GOh0h}{}1SYQTovycIEmi^ zz!y}zngGv}R!D_T2JhrwWYvv2QN+nbB|+#P!6HoB%Q#Uc!Tre->xB0)rpk(b$sfA6 z=*M)s%c=^M04;$CHl(wAKcN3?agP~-QgX~)XS50FP2ObLii#DgTFBxvg3ATXm#eb4 zJxL$aTqjsYk8PTS8&s8I@~EPGR2CJ+RtfWp*?uH7Ig$NT*4DaYDrRCdycF`-j(9qVtym^SLkTdX0^|BYgm0!g>Ul3jdr3~edEnZD_^<9IBWPLDml z1I`#gqf1g_gOrM;gUh1QHB;A5GtLxP_n&lNl^dn_VsdRf_)byj=vIlzk$(*W36Hij z%U5pWMitz8Kh>`pTy^AttU9-EWv(vk-rzF1RU_||uAS>9UtFw!rz3?2920z)z7jOe z^oV|1`H7%0VD39LQC)*Jwx+L{*Fe{EWtyOz`G}4Xj;O1gHdNX~btoIO7O!nC5~*RY z(Otz3q^lCkwlCQ=6vN1|12#poh6TP7%~fFw8z&R7#?2|6O-Jg^jhowzb zxe~BMgi7Jfbs~f}&^R6MS^$bZ{jrIU)`L@S!eKO;$V4*KIhc8xC5e`@IMdiqpu@hE zPf9pRo$9etFWH&~t1PYdtf8T37F893d5=^35j|%0V$o~mqj9ADU>hXyfS_VH8|Ss^ zYO6%i)x*VBtq$c|SE8PXv^_ofzDdCfYioU(FBIDAzm#t8!7E zuPO2f8e4r?e1Ws>TmU};$;qGd9VNlr2)sEB8iB6hn{iKcJ#ii4z6yn|)*C>3J zTSl$!w+xUGP?*Jf8%R6;B8Ufre>?R)a()*|Ih1AvS^vD;M=cfZC2`F4nPSkk$*R;* z;rl&WICfNJSBZ`BrB>36EDP6X8JZnlZbaQ;k{axky1hN^I$(>vsVb^e;b*Uz6Cdmj zEDSFD>&$f>WOfG8f_obD{?`HK1b(S!E3GwRg26hl;I{2LgGOYv#8#|hqfN3#$j$fR z5z-mAXHvKPd&xc>Cq7pz9Bw+?dF+r9|51_6O|HkE#mrr>eHyT3<5zP2d8D1b+-Q7Z z<;Ew54oo}XBb2IyT$G%`WsZJ(ID!9D_&nNo_rmEVndlu79>D z9}#`U!};nJenOYAgU{lkpI-3j-vTj~R*vNS6|!#IHQ3>;iA zniiij#?THs?0krjYF^c7&hPD~@+mwjH)W$>n6Jz7sN`fk6UpM~>9IU@6>xdfsFU_n z)S311{h#-9eAVFze1}EmJ3N^0K%jka_vn2642uCYUF}QyK+F?ykaw5`ZHf|O_2Yms z3{?{oh*p(obAPd zvBLQeFRgGw%RaDYl)tL*9TlbDLK!`_9Si!%lXIv#3il1n}sPaSf z)a%6o{2?ntd*tM%KyVMM`d@y!q~<6yfOT#1Iq0>VgTA2!8*OW#6GZOK6O5tZVeW8; zl8mfV23MoqM`Wq;RoL1l;7C+>w(KqC6k>i$Z--RlXs;zoHa8C5K)B!Jcf|IVkK8Tx z0ljw4kJVN1kw4whce*Zr->jMPKdzF&N-%&`TAtgAj>w6#&%Dd)6w%TfX4bv>#;}AI zaQ;f)_;X&V$5whkU)&sXBRREAwE#`>9qX)AgE(VqEpB$L22TrdZynq}Z0`2Yum{Sr z@?iX=LAu_nv=ECYBGd3qma9Fzxa{+kr+e5>Xjg9bfO);Yd&zSYnWHh^7K;+rZHu$X zK_Xn!=di-O32Xg}X=d7V4Y(`NaIh>n$Oc>dTdtVIT{N4_-CLw19+;3y{wa*)$A=P-d-{v z^n(d>TL1^JFE_<=-73Yl_^@9K57M2mUT2qrvnHp<9kw(Nl>}lMSh5Is&jdmRT5>N` z^?IfQ_#}E%-mMRCi!2$(xzt9Qy*NE|ATPWyXXI=*CkS_g-?Jvttm-+JYtb%cD?^H- zXa(8{lb%%H(;e<(quvV<)Yu;zZBlt0Q>GuH-sR=SN~J?+c-KMqQmtsC&|56()XG&C zwr~BYqUtzDw~p^kOb;rwPw>-1z8hSu5kWuM1jwmFC_UQY;{(Yg+i->O!&3o@rW&Pd zHiNM3Q9CpZU?2=W&wheS>4n*aY_{5QWLvj#FGJQmu%K6|mY$q$(e>GAd@2kE)a_QCEdf89uo24%O>FP~>>H>Z?KFaV8zoPqfnRx>(-zDFQDUnenYLjmZ z6@_V)mu1-NCHLy7DA5NJ^)xY=Wqa*-Oz8HIMMTt|z;P9#To_xM53G`lDRs~_6nVEE z#+s`MQ#NCdHEX29)M@4kVxaT77dk2AL$=vmsPS|@8>W}@BFksJs6nOb7h%bIL$i$fA@k_J(d%Hk?1GIA#Usqn@9`>82~X zhq|XM<7*fBs9kV0xp7kt8;kw7If#p?T4Oy@Yun4>w%qF7L6XgmVm=)PSu!o|%;wi= c3jY#QE~3+fX@f9f@h0ZuKW?;&6MoGB02AVQyu1VQgP=b#ruIXJu|>a$$67Z*FrgYIARHYyj=O zX?xq)l`i`I{tDRlDT|aTnxy1OvUHBiRh9U3$CVpbr%&3_(FI9Jf<*!>0<@?q`M=*a z?GYP;Y$x4)pEwnf1ok|vz4jX3_4~szF0Rkh`NPBL;a@gI`DFBP5Iww1vSb~XX`bQp z(=3927x_9$qcn>~!(p~rPLp*pTqIeq|2w}|X+C0_aW#!eh5ynEDD1&8r2gG~f&Ugs z8O_t8jI&vCc(Ff;jw31ULwXkN=^r1@jsoSXoWpop^!m}OsJvPy#Z|tT2dY{p4;zf~A1K|yh>S~=YS0#_=lU+#r<|>(8(@;jS+3pi) z#^?X*_sW!y>!uv%VYw-xL&auM9{x3%y?S4+)9msDX5>>cd+_1x$W1xhtk+3ao)?tt zkW)iq{&IMjB{#i(O`dtODz6SVG~FXTvACpWI6x~HicAU~&aUEh;VeBE#aVQG9PRXW zylHmIj~*XKgw-Ajg{@)qq536c8h}QM#1%qQzON= zMZ+@5l3u@mRLxaMnZ)Z}zx#4mt^MpQcy7y4{d#|!tzf=k-IiBr5nXJu8LqbozQ++a zC7R_~8K)V3T|!~$YLP^j>wL2+Xj>#jnap`9z^X5jVi^4`->jp{JYHZqWzH=s5=ax5 z3Dg98g-d`%1Xb%dTp?7Q%{3LcO7sq-jIwv$t31*Y+?3OJfkb8=^>`DmV9!n0@hrh+ zK+jjndU4BJb>62+vbbE22N(Hbw5w)_Oo=8 z=}7b)Q0Y;_Z2f`gNF1&5A}!&2bg{^xK$w|T4nrx$45Adaa15PKqIoidGO))q)?6ue z9eyR3P$djw8TA(N`Vz)LKP{H=Vj(0AsTTewAx z`$M%r|6(Rqis5WD!HHDUKBD`f5k1Wm1(UUKm}=UER4d07hYN!<6^c|yYDlTRJ%&`W zOJU!ur>~-sOa z%wkc%@>=9KRPX>BC~Hd^zy)Z60_Walp?CE!Fk-{#XWV8tDN^s!OYjp8SNkG3Xgns9 zICEK*VOl0YREHOE2KPq8(clhxgh>X`_V5vW-eDJE?zjEuN#t-#Q4G{^e{vMqwYu14 zyz1Slf_huvim(ZNW_tR=VzWFvd<8F0dJV-BDGx4@pI`yU9#g_pNV6uhcrn{7kSzWQ zYK~q{i+r(xUq2+DQW_zdBcPeEpm27vg}n7(A3q`XNIrlwq2vPhP2K+r;tqZxcn*1SY|)C8icQ1T2K&_9$0y#4{^PStZ4 z;fQX}DfwON(sj*4jwEIA8l}ge}@A2kl)3p{i8@fm?w*L z2|H@tKl`qf6c~V+`ZN%qSexMKasa!64&Zm_jq?}1J zqfr|-Dx92rK6ZFR-8^^?-+T0ZU>-N{qqQ~cIW@RPg+6W!d+DAwhOZ2^!EW#9sP!`R zEqKFqvVvl8H_t1~A?x z`^0v@SDORn@_rm%4x?VL55zaR0s;%;lP)()+ACB-VHa_8l|tKlkY1AGb*;l0^t^?& z6Q)+vl5~Mz@SJ$WS1=%KL*cQD-lJkO42x2l|)7ArtK%HAtIux zH$HS!ao2eUTrhD%&~-knrFuDBbQ4%_{)%?Lyls@< zYn&{X9<;mnNXT@5Ak8&T8fQMpArMCo%z;!8N96{0DV`Ro-aRpm7oW~*i16`ZA-5ea z1xYM(r)rNu3vMZ|FmQ0^NPgV_j|y~SLiO`u+EPM_vDOtq3Hb3L9S+Zq zs)F3YYTfyG)LT>AY6QDkrBrA~dUjNkdP2$dsAk=U)gNBSROZ6e_4~)8rD4aJq97JzW7W3T%!eBYM5K%-4`$8Kv_i zMqa8&mq3o?%Cl#xS>zdsWL9}mUZh((!QCRcR$|9YQ--Rb*Q-^6Mdef)eigP#vu<#4 zC=wz5{0x{mtV(!-WrBD73zUChK3zvTgO*%C!Vdd$92V24Y24f zTR2=39znzDt-a1@D4LmR6jLJmsU@9sLQb8-7}+zJlrhUeM~a*MbFzl1SVq${i{Zle zzkmJ<%6^F9Wk%1Dn=(;{^Sj7Vwh(ugRE}#!mFb1yWs7q<)g5ua)NCEMpDWkBnu{Rb z#cLH4){T&Ec-#i}M7G2zSi=d{RXLJjIRl~aNDLpfcssXCuuoV+_!SM3p3-p)Ih$Cr zpEqOy3)Fn$~>WZb8ogD)yf^J-vSGuHkb^%6k zO$`FlLDSe_RqWTT3cfZ?VaT1!YA+r{(>{!BZ#sb0_Z|EQG9PiH$m=hPWxZS{G0|M0 zN=sPw^Yl|%;1%YAwv%R0Wk0p|r%rO{ONYYBH7gZTg{HM@BoiSunH1nDxU?Wiy|(m5 zFj&6msCn?z(nD6B={xKLyiJ;e49*C>2rnwyjrPIpBx~!izeUO=3T>3exZ)4qs7QWA zOW+da(}(b1h+#7WHiXp6b2tov-dmX)nP0sKtNJh!U+j@kE=7rkQU{at9TU(vkD|>A zh8XV?vjwn!pSm!%jq*1f&p*b+)%&D;g$wG$tdT18 z`c-Dh8ZnP7wyCCgkOn}#kmG>4zshfb$Y!@>1OOuddl;G$&q^F9SmBrPdcH^sB4Q-{ zjpjM3*-CXN!i)Cddfv=uz#!0#{}8!b;4hYOIlGFSBjWU74h!h`Bsv&45AXQt#CbZD zr_tDYe2z~>vi^`2a0hb9%&!gdjp^noAzFP2k zp|Mo5N_U3|uj0jplMW9RJK2zu{kn-!vSug5(-jl8uh185M6yhQ;SNf|)zz>ki^t)0 z_KdvFeF5atv&N8Amr2=6F%?}!q1Y7Ch70NIWPL3~aHuZu=sKs*a8ZYR>y9crrC1?M z-6+brgUIimR^Aoq zmR~)qzJeQM#xI{&UMA_~Rmm@3R9?d2DHXo--VqHQk4B1&em=6vIE?K%uRa-KB8Gt> z9$_(RjO_($RX64|G}bjqCY*%Eye7%MB;m2INp!%8cn)gPJe4#w7d2^~aT=PFnk3I9 z3C~SUq8FS<=BOsoOHRadRg>mi(o_Z!_OUy4Na3>ObY0j|SEXmA(@^*lxKO~cgN#+r zI~mOe>uueOw;T>w{1C1MrDM?MFrS>pQ`plgGHVM;SKMSHXH?5eHXp=%?s}Y~kS}d# z2p4x|9(QmJ@8HR}gEO%sRO+wsBAo*#m8WQvgkl9wIDjJ!Qo#o-TKd3+iC=K>(I+f0 z{DehBAGlEP3oV8nI;@?VtQ)B`k_23u)x|r+TrL!3@*@`twkT@1j2g9_i)64>l;^8B z#cfZ98}NVMW>H(GiuC`&k^Y;*w3p7e1CmGgEdjq;5()e!S$4&U7V}Lw70NmtOCWmKBwz!$Wnyh|6wV9P>{9Yq{5ko(UVG(_J7pM1 zzPbuRT8-91CsJx{p}r|*TTLV(PHxU^i)E-RFi`d5Wao$B(k9G`4QlA5KSOp=RlCwJ zou4nBqb~FG#d8&~Q?1&p)=qQFqt7i?c6N)8*e13`rKLsco|$*lL#Z8!($J)Bk;F*W zZt{LqBzPV;HmWx{i_Bw@luI*|IXE|wZNgpC)+L!EuIKQgr|cz_4JQ#$^|Rl>#I)IF zJk8FzsN-nYw_AgE)7#!1itO&9c!=hhaM?SbEmys%;rq=uoASn6U2e5tc=;s-cQUWr zGhIS+x}IqX8s3?A-R{VL2-*76BCuy)n^pA(Q49;`mNcGO62lF69cKjz=u24*SeUR% z#Rm9OdPv8pIwqyLH|b&lmljmGh{~MA!eWwZza6))f=Qb~6wk_hQyxYZ9|m7tM*wx` zeTo+w5+Bo-B5|;7V1Vuak?zL#m_~R6asGlnGtGlj;vLv}x(c z_{G&!lR@ikd6nyaXd4(Mh-e?!{f>4%9pz<8I?E&m8Ywr~ZX(yoK^Kv0RoPPfn!yuv z1v+vx+Dga(?^%873J$X9JJ!dI!b+9Yo4n~diLX0Zpmnrnk)4u>T+!Yi@``pBss-lI zBC?8vDIU01=vn)?wu-WG{4$UAyohIIzAkD_AVpbm94WmLD^1k%UH$D9lx>eNr^C_L zWd!Cxsu$Z+PUvqZYBrEbc^$S~G!0eXj6vjQtpv;>xS`u^aO%%IJ&(L>-w3i-S8%CH z^oZ(xp&S#mNC(f%x=V+$O|onWRe{F*2rJYgdrC$krFwxRzei*I)e0y+i$=NJ^fy{9 zQtw;KC_7~DM9Os6#!8P;+xl!Z%UvEus2TWEyh6G=h=jt+v!K=m`=RX1?0MZ?!kwmE z-}ZL1{xDyk&y$OIvnWy5a_p}Qbxy|_+&)QDP*+gB@K6i>zrp7z5L;J@KW;GdH_b0#C`HSHgUSn+& zVB7Ze$t!HxweN=N6(BU)m<@=xT3eqn8To^`92j|0!a+zLUt9^_Y|)Ra!!UHZp0MTk zXjo?=xh=vLl43EwC7<-&XggfxHz}*SP?r^EdLUES#uGWsa}=ufw4wOLvx5_|@PscR z^G>(|RvNC}@m1;=*3se?O2h#y>?Sd<#}_DelLs~{*?Sf;10}99(+#&Yb}YsIGv#8 zE-unps(hYeDm=@VX}pkSsppgL5L@e3&JF3)aQcaP+Xy|QKlGTK*9LUYz-@wCAfc8Z zuc$oefWJU3tYkD{WpufL za}-#hL}iP}LC^4~P5X1dRZD%9uIF_(9h56H8`bw&zm z(NC14`;Pb2EWUwI;dO#SPFK+pk!>~S9q=Jcy=vbdfr&!$v#k>Yu7^Q_E?g>;Nq@L1!i7gLyLF)OeXj z%_qKS@-|ue>&9{*)gC|XeR|r$qwP{BjBvQ;N`7li8Kr@~FUkEFu-2P%RaF9$yBx%1vG{!zFmUBhhRq)Q-1G7W6hhP&)#~$7%c5to+O^w)8 zwF%7Sx$QoSM}3(7cxJv?!~NaTF#FONa{5d!;Z%DrVi#JF+I)-*2U)gK{9I`g}C+vqVYUo?S*0K+Jrw@PsjQ=}@ zv3x|CKfsNC|4jdao{r5gxV=p(`+;qm^(Z6MMv~d-PMsShbz`+?y7vsnrTl(R|QUz)&H?m1K+FB<5{PdNp6{JGp&toXb z7c|kEBR{R3jA~y71XO9ky0>E=&V8<^l5nNd6sU4yi3E zg|5?um$b?U{@75ddiv>lp~-ZF%@T{i`ict>or2vsshAF!Se@WPBg5E*z(R>^)umD?NhtlXEu}JRqXgu7 zU~YYo*F67N^ZeR+UIV$<3>(_jkgO|6sL-1=`e7F5#b$|i!z7Gz_(9vv1zm76M^~7Z zdNuqaqIM%gD5}YK%t4(2a{UgPRXLL%%~Zp^`?Tqw1QOS`-{331`h~9<4F& zQG^cjn?)ICNxmu2#3R$t@o>P;d=U$wY&ggb(2H1mEmJm06%p`eLgas9;BQftsEDUi1=$nF zD9phlLs!KG8~9Y|>E2jTSyKW66;(>$(}qqd*brhMOUEGPNejVSSVyW0aVBj;NK*R zj4Mwj^kiZ^*{`I@*o=d|LWl7#&EF^1_kHX8fpWq4GkOES7FwqScxGh5d89S*2r~}D zv?xzpee-$f+rABXpz zT0xQ+2&}b&nd+)FNP>DFyk61iU{O(Zr#025DpXY7SU)xC6_a_&D9AzfVbNjy8=d=C zHc(laY|9p;G8vE+S$kvpw&RL|R?q=r8(8|tVC}tl*=VCy#iONWYD3_PtWQnsGM}%2 zFz-d zEAUXZt>#|?jM`Qw&9emi}5)>YD7r~C~WxRL2?Kw4LCc)k!tBB~0k@tI@K>oXBrq{z*) ziu}-{s(?m4C5rj%tfsXgbtSfR#^Yvs+`;JjTlAL;|9kY*%`V?er|JyQ8>5`mDjuYG z&;2B%&0;Y>CvQ+@{gW{KlQ4W6!qA&MgUuqlM#J_z?ep$27(4$zrWjv41pl>2$+yr# za$mk)3Hh|q@B0(X)S{qW^7_ZOKmS{tr1?gpn^`km- zoLQruw`FkoPJ1qWBKFo?zsS3qM!y0(R@lfT*jH(A``Aueb!iLVE-E?!DpsdN^r&Od zR!&G@GgGYOpy=8ba7aO8B#ekf5qfmoxu}Dk)ZEwK6fJHZD}5En`&$o zseT&M`D-B^j)RVJ{zdB3*uB)kZ(|xw2JiLV0h(8E?S zBZc}vea~^&#Bq9EhC*Uu*sp67N@kdqSGMXJO<`Z{M88w%kB`Sk6|2Gyg^)q*36v6X zEBEYjTs8(@zZylqJCx*e{-tvN{W@H!&J9QxfbIlA(u`yX-uVeG=3G7bo16CDSFV+ z_UssyYd&40SV$TUJ2EG?cKafqjr)9R@Tg zwyF~uj>Eo{0-pwBrO*G&^RINIi(NdrgB}S2{j5g<_b`R>f$`}=3R{h}GSr)8-g3~C zVuH$oaTT0l{9USjf3opO`a2ghev%#qkN0fc$r4^Udf9jgB=Z_ZuZv={OazC4Y=jCD z8pmBtgr3z3!?N98_ITWXGO2B%sBp6o`vva`eee@F!x+Wl9R%3V#{YR#y!TD0c)x~< z{{!fFlY3-6E$?Ys-v3Xa<58@nK9($^3mn-~SJqO%CCoG+y@qJXxooVsbWDp&3oNj)4&>h&v4S ze!F1*?yi>0tKkPH_u>a#mQZnp_OJa$SA5Yk!hin|O(QmG#P){HvvJ_rgr1F^XBj=~ z*za$yS-hx@QioM?&@MI{pp zDs`|HWXR;VN@d-ORI417BhvQU9o!xr6aNhk0;*k(6BnQmU(}!f|L#vc_wk&2!wzoB zZYqG>uKd06)@WozN{qQ1#m{z zebBmk`#!9A4(BU+wQw$DXV1dP=sT|!f%rABI2H(`{7Cxnfs53_)@)`qSVhHH|W(d_UM!!nTq#F9{p4XQ$Inkk?Sj1b*qgZc}!kL$0{2}}B^ zDMKv*5Th^rO0BYymvD`VNjEjvhsn&^VGfnEACC z#Xt%JEUHG-zJKjOYmQpoiQWq3!;TK3+kB&dICYG6I|!Sm!i5RejQrpVT?A+X@--S& z7RI7Z;SgXkKpc}fd)iN-J~m>%SZ~sj8zB$XQ746P=>t_XTeL3Wd(L@_p=HQe(^|6X z%gcCSwc6M%szy^>P}7&#;PJWT1&bq|gxV81Q68mJ>!A1dRpRu-&C_8ywnp1%ch}ag zGVyv{xnrQ{eZBsWo{1YY-u`>2<8M{=XEo&l?4DpJW<=I}AT=F$UO?QUWfJ?sh>Mi9=qVk|X{iq_RK~RYq2oIcT}$#LW0en&|78(_ER!MBW$GoV4dSIEcOO zutME&osE>0mhVDsqq!)xg9-OH`atC%7&TQqhY zXl?pH`*5Zk_a@KCy9T!Op#|U=jR{heNVvGn!fy<(F|t#QRH`A>-oCrq{T|oJuZ%FP z_E->R*oq7YulL3QzuQGoR`CZ^KAf(q&4Kodfb7_iFa#C~S&9;&ukfM<$v%8M!>fA0 zJ3_sM3%utO^7P- z*bJho%P-`Yz{h)IY`+=Baj5Cs?D5h4klZ0x8)^F+oXNOz)Om~qi(^e|ELjEFr+iBs zD}5bP&^gO2<99N9=emr?2ur_ku<%-a>n6qk_BP5Z(;ScY1wxQ4E|eAjFLXMp(#RIy zq%4Anw`ghBWg16i>XRV?)fSCjP9BXRuyc>#jxgu52-3PCo5%1ZwfOeG26Rnmv#c?44UIx>%7K@XPIV! z_NG~v_NLjFwij|XwfA#(^j+IyrZ(t2hZ`l!Wb!Q{d|g?G@8ub4dkDq|mOTjxkmJ>UfIZ zruZ$^l6%;2qazC@`RefE*}-uSaz38*BimA4gEIk5IW%VTK<5U^{HO5(qwvh(*zrTBr!yi`eI0>A)(kT4#xcak95cr~U00a` z0kvi9u^Wo072R}LL9M8p2-g<5;T&uxS>I5}WhQh@#c9WHCgom4Ft3$`pdj782GPwX zF8byPf8Db|hjLIv*)Tc|TDz#G6DB89vVejEgMQJrXHtZ9Sd%%7UORKEFHyQdrtB2O zg7Ms39jEc^`X)x(D}p)B*YsnEQX#zIasyZ_gb^qCH@#BI7)0|1V#85?kFg6+EiPt0lq!-+l<0!N= zUGt3YhzZRHV`&|XJ~TTKQx=J(GxofPIocN^BC*Udnw2no`@dxQjTRO6;=Xm}CFqmi z!72ZFt5N1k9cSa9@;LIf$2^xSqy<}?Mg@!o&GF8=6;8*thQ0CKORVpRaocXxrl9dFyG zu~DfL!$E|I3dcBEhlhw+AA1hJ9CB)1p6@&Nmv}sg;8KKed_#<3o}`Pay)+dH$$L@& z3&#i1K1tW(u@hqJ{)AVQWk%Q%JLHzwPm2~JWG5W)B9)1w*=9s2__p9HONTwx;$uwF!=r$o+Jrs7_W9!}e>~@p@A>10s#h4D zD@{BnbT$YK%Plcx85miJZLfwyMnkl`wS5$KI?TEN3RB9)t;a{!G{FlXYK`ViTM(Au zC#{@|qpM^at4piGVzV`?uuzCJ`0_bBAD1OcXRYt!(TRFCMMe#tGTt2U^2%c9rKz0D zazu?|Ev{6ipE{rvU2s)2Nv9y~Dg8&Qq0&Tb9q?>pLf+UPLN>YeaE|K36)^ z{$^%9rFh|6t!{BK!SNzFUsqnIEFBZoGF$XW&U z7s9xUxi~Ebrh+FvOuvHGyIjSjX}Vm;s1Di5~3_pEnhCuafqgO4_?uQBD2({yzPiH1_ZNdzIAGzwh_%Ra8^|-rT2u3n%ocO>@;g;H<<5;5g6sh5#KIWS3;Y_`6Pp+|?F(Fin0zTM%Uf3-^S z%}bCfd;fqGJBdyrq_=*esG4ZMl4viGs#4$gmHH;t`o52K&Z=vln7Zvl7 zFy~k0{d~NKMMG%xZ^hAdGxzqTR}M?3hDbANj!YQ&JWre2J`t@>W#cBaIQQN*ei7{& ziQjlMhzKxl!oV>5P4EGZuCZeBg(2fDVW%bO)?C7;97RUt2 zrGq8ai-Tsn_@xrDSw5@wxn@0;yN#`QGq;=??b{%lDQz2J15qzwd|iY_D>$lJv?fFd zwsHEIg$XrNP&@eVoWW=5o~2b6$rEfWzVQz22&{jN*D0P3wn6Lve5Z=`Xo+qA3On(1 zGnqU)h~B9$WbrDc|4gTpedgGHv2vs5rO`gSt@H@+xt0!JPYJzSiqc!^8c{G?dQ@QyiWTZ@4f zxzC7IvmDytOkSsOYFw$v9-C~DUMKtVI44Ys9c6m4S?VYoV#SNr z;)E+=yfw*IOH=c$ZFoMYxN0iuUvAhz?L%)n9z?gOoat?0*l&Ta8xDtOerQB$H)Rqf zYYvMY4rCw_dr=QMG*IpB511WOpl&*D_j@2`RzBPqz>*M74(wkjf&<#RTT;n47eziG zGi0X(Wl{{|iBash0jx0y7SpupUUU{?iorZts#&)6#_*V4Sl(t;UR$F6+BX@<*rS{b zO2J?4qEKYr53&#yi14W1SvZVq9WuFUEVH9!m2%bm7urv@#DeBh+xsD(A8=|bkU^&D zzSN2xvq50s3lr`}*h4S6MeU0E31up>ecd8uo$0ecX`k%VplKmB>J8^EV{-a1p3dgU z#pPA{@p`e$^3|{FqTGDC+1~!9fM&nJy`#=|KCGk+f=m`Q2$OTmoS+IWDIlg>bNBDf zgT41HMAk}%8xh(do4C=U5G=BQr?jI-)5KKq+j2z z$~y0FTKJb6GDijKY}aHZltL6bDVq&4Y^%h-TEo2!!^B!1OFD(+1j(t`2XYx_8G?@} z`YtX8toe~xJmjxGN9pI3jq;V{8k=h16XLu&c%Q!1nZh`Vj5~+ZCQNrw`v|?Ce8% zjIj&b9A>U59HrsweXnS~ppzbi4x?W)U%x*jrn5LlN{KB%@U;5`8~uDAFd)4kc7nJQ z>Ml5_F;>|K9D^;&LIGC}H{^U-pnHUTR{&akb+m+?mP0+=d7;M|D(<}`7e#)u05(T% z&^to}1^ORsit=Em!&+(bpo)hVc(oQbcSuIu)4;Qt|E$Uo$8g?H3BjBk_E0E_zu0L{ z{fgTh1UwZ%GnjAX%(l+zeIwy_ix#B<>~7+X*-Yy%9ZCNBsZ7@EUAIs`=3 zrA>&9vx;p-+%#$XUnhLiz+x3<)j}5gBEY75u)nXrfAhnSKmFm4Z~xc7{Oh0I{ruO|6W2@(c58S8uc_1(7c!|rWL2<(_Am$GQ(PC&9y#E1o&0px1R?nqf=^iq zypK6r03S%~)Gy*8abQDp#NsAi2}WDaknqB450vz>pr;1!&3NoeWros=(w?RA0y8j) zR4G^JCPx$pURwZfN+6VEm%vS2nJ^NPNHA;3jzJoyUNzB}R%mzylN+{C4}ymn;ExlX zJ>-|aQQ*5lU=Q01cjCQcYuS%*v;2q-D^goHF1Eb<4hyPL+UOYK4PnwhS08;0ft7p? z@aDmo>C{I(xZKLF>~4+n%X!suG9Z5~)d#5>&T{663~YjFcSclRS)=;%=-xW7j*L1c zQ=Y5Z-_^x-7GNS5lBl93?QkGBVg1k3S&1~2)N}3tHG7})$V;G^=pyT}AEyeLG|h8_ zD7@28?*c{Jj-K|h1~f?k+(Hq8`ktwP)fyt&|A5xmpnXq@F}#e zO)H3lkZQmOv(!Q6Czi!qjU7E(sfe*2?>*CC4UyGhv$T6CS{_v`AaRr7FbnZzu#Tt{ zJ*RSx1fZ%W=p0p5bES<3gDSt_T$sWIQ5gagZ_M3-OdDtM^ z&2dl!)HyULC=E6G3Tq?`Cue(rk+Ncw0dMG>9C1&33XH7BUGDonPqvuK$34L40uE4Hjy4~HpJ=(iC%(`%94thR8@TDYec?3Rk8$6XH_ihu@_kB(up9 zM!9m%I62+$rSkEF-%?P#hVMmbwVbq!$u=fWZyBm{si$}PaC|U)iegHx!?n76%C4-H zJbP{?gS+&!eaVeSqt2Ek_PLq`4%V@EuxeWl1XML>tK?_(IGWVOI`3eq(PTerYm^0M zYL&9{T*iSq1hoSdyEY5MNEn!a5ml>6%wFeL>KcvWe94*G29SH^Et<-y6-SQ!1wI-E z(rZ9?pB!{ zs{rn1hmiu`M$G;J0sIr=Z=3yfu(cJOY6^|{;24eQFrJD@5C)H_5e~L$hH4B z$cFKfVnUK-8?m9|`ez(fa6}yEzpTtHGc%3%=-qj0v0G0{$0&=stXwCc+_m^e-bT&PUU;!ut#|n z%tx_;y(LibtZ#XS-_y}uLUL`EHD2oYrrk-M;f3&T#YMfVo4Jt;IqO1m@QmNGtkd1; z058H1eS(p{^nqk0#1_skFg2G~FbzFg8^p6n4SgkLC1!@LJF?;?(eZJz1lnrxR*Y@I zp6<-P<*s%9TRA@*G>YZmek?7c8NsxV{2 zBvquD8&t8AZRdFO^lN?84gTwz7N~0n>KQ0;B6rZ`StV#C!6HL}e~gQ(KgFw8Wc;jb zBjllw(+_5f(TV8v;eWs#11RjkdOpVIKWB;ec!H0Ax$#r)(_@5c^Uy8~ygYJqlmn#q8AG6s5ig8T$* zU;6RtIC@#TabV;L|A^JD=5pQYz5Hbu%r>KDZkuFn>Kq-@@0Yc9P*&3zi=Z3W)!v#+OOhM&^pp9$6709b(r;_SAaF= z)-0QO?Xq8=-P3u?l@90gItaVq^|tPI``BemMO$Sf5n@%*EMI6OYg^k^4PBa6&=FH*8pVl*M*iwoRtLvu+w<5p^~Pw54F4Yvhv*I4 z=|!0?O?4(_5y460jpvV+mzm94`Rl@;x9p%_%7JUKHxk?Kca_jm?f_$ z7hCz&w}nKN z{sGnHt_TF7i>g={=1dlKhlm-VjHTA3;y_uKJu(lrl$DmMRJ$ROqluzn76Y(VQ9(2f zQ8jWUX!L_q->_|U<10mwuF@_>^*}~SU?6PrMael{3120=>GxtA4ZLaB^o5Od$Z%(F zF2HQQ!xN`D69vE0WuJBf)KmgPyuS@1k!NUup>42>mJnnsjAlQl58K?)9k*Z1*a>?D zDp_0D;^)`NZST>{#AQ#mWv>BV9P`5TtZ#eud4@2<=gWMaUflNXvbzw6yqg6Xb#V?a3)d}Xo!HuPHZ%=rwy!a03+u|M zI+SEyTlUirIQX5f@}AvcXz>Q`aMdW~V*-oe9A$@;)q@C75$!actON__q-GHPwr6-m z%goZ8YYSxCi9&Ai#?(~%(^)PPCQ2QGGD0;;nF@Q$$en{77Y^g>2RddC zot99?&i?vnQE}i|cSbwaqfUqStFST7_ScQS6*V@OuXF6W5C zOcUSF!PQTV$px@m!ywb{6hDcW{i#W3PgqeqS4Hh$qpe!H6C90+<(LRVQ>R^Q#x;;q zdbKU+cN%S@Pnz`auS4>!0)&WZi$hc}%KRX%yt=#4-GK#f)`@LF8&CuVB^1yzE1<>3 z2B5?85Er$YHR3_Tr8|WaD&C;U1-$dIGJ}fA*~=@-&d;i-oj$c%*)Stfvb9rTVv6gy z>}ghc=V*%HO^^*x1;46ZqfMRa+heZ5@h`0L+I8FO=BQ}^_Q5NLyCq3#S&JnC_f$r==aV2sgi(gZM%E36tiQF~VA)&H zDskAj##^m4#6~A%Bc+l|X~PF?t(L)UA%;}78)NEmV)n&}^Wu&`6`*}$ig{{inNP__ z8Mz-n1|fH%5k(j3fIRi54lWAm#iMurK+o=O~OS$gT1u4i&ar2A~BWt$CO%t;ftGc8$E*JtR2_khFdr@LKwM2kA+D8oYr1$4CzemNr@xX}itu9m*Q66h)hWtmVV)THh2<^|6*s-$oX zn5yxf!Pq8-MAys=i~tiSTi{#Z?j{t9E_HbpXLyfG1@IfmRFNpJBtoU}uIh!W64h0? z`p^bf7*t+q?D}p&Bh4+8=G;NI;XskAZuphs@r#aRk0>6|z6#k>;S+<>2ThH7aMt56 z8lw!6ZhFMYU(b}M>yi#_h-v{X!C>!E&|Ygn4t;Fw%TYM9bD#KoY)}6pLXE62|X)^-y`I!|nmzNklW`XeiH8JCG{5cn2*rI>rOOiIf*0+BgWw(YQeA)Os5T2UT5e_Q@2 zm{g*s!Cl&AOEy|#EyjY1G&=K~$?)O$?5G{tWy<>HH7sV%EOPH3hWt#1wgm5EO%!7fIpga%OWJn$3z>?4PsN zFl+ap0e?!r2q4!|cMYOxu7#$B5)#u5Wu*-NS1~fH$W#Z*Az;S8#*6HGndfs~bM~HeXV^Oqd&0&h zn39Yy(M}r~5&>?qI|eKDy@_x#jTdn?Ln}oKN#f9Eqjq|5F!o?H&`b=ucN475iTASwM!DTu{*D((z@76dy1${AdIRsN;q3i)}|0w63ibw1>r13)>$8 z6@xq6HGwb!O@?Cn9Tw2IgI}0u!uZwEyhbh2yv8ljypH~%;k*U`s6u0d;;PKF8G!;X zQuei7?nRTy{pUg*#MdFCb^}I>5`evzFGX1Cyg_%)mo=IUFKz8n2+2G84VhsMcs;Dy zBR|fno7pm5HYm`>4+3{Gj6B&Q;rSzKMSTHa7l&)dX3^f@c1XRd2a(!N>_{|ncJTO1 zHeDB63MIp@u-7CccQGK4aUA>3LG?~$>S~zvgYx&?Xy4a11%+S@(t2|RbPoV^C;Vy` zGn=wIj%EfahzKekOL6%dT=IV1NUSgeNc2Wt0$cGB&aTZ`hhj3nF?unYn!!ZPj4WrC zNLUdmHkv1JtxM)A2%5Mez-h{XGX@LlWbL2m6M!_7nP!ayx1C`zVpPXnhk)mnEA zgLdrf?Sw;!1fv7{hqsQX-dN2mwBEv2Hl{j3ORX=8QcUxNWq*J{nw)98K;((5Hpeu9 zlzM+SeAv(LwPx|+*iojtcbGN*mVoCq4642ce|oQBFcmaWb8V}j`?~2;hkGf z4donZq$D&5uw%UaU!|8<3e5BXdaUad$(Z2gA zfky}KqYHTS)O~abkDj@YuHeyg_fZOuUbv4w!lRe&qibxc*Zc)O^V+|}XI=*~eCG8a z$7fy_R`|^8!>{%=M&r9)BvOSc%1VN-o$1`SD0|ps%lrb!T+uT7-a|PlO z-#e&i;mSJ%>BOC;^cU6Ps06`j83W~4R1f=KpFsx|K_{eHz-YWWme6d+q`}xokb){; zCH)oPv6aYNjv2BA(@BtWy3LKs0=g6E@0HxeRzid^BbzPdR*L3av-}P&>DD z6em<`!Dtq;1q;?78fYjU3m$4Kw1u)ESL3V)#4XM$0>^tF!?I71hs6@{+kW2(L0=ZC zc`06m;h^Jg!P>cU~wAPE*0il8P5DEki}16Hicm6&Q&4co#cj~Y(8SM}NU=u4A=BiiM} zt@3M6Y2T#2v^@oEJ%{Kxmhoklmb8uSoL1;)#8@$rP*ARbpiG6U zxfEFGdvq-xIo5z{D?%W*zlKpJ=kR7OKg@Rg%gcEE)T%JCD`~)@4!iTQt5OrH+A26@s&h-6+K1b-s{a@Jez~cRs-?ZM#t4&H zML+IT^y8YMZ{3DM8s;h+OH-)=rPVhSGd=E9^y5m=0j1kn2Ni1vMAGp+;7FmJ{i83j zrF1!Ga^s@w%sceOVmk8<^}r8+E8nWetrAHHC76bryD|Lz}QFX>P^Ya250UtF1evDO3Vw zMPn^uVyq}Nrvx+ zE%o*wv)pQu8OA_er{q6eKY(}zm9rV-F?q6%ZOQ} zo!|S(1p_X=Ky}|TzE*ezf*)rPnl$)r;Vupuh1WD?-$PTC0+Ry+^k6&hFw6qOFTt(# z{I$X|I{zLRKz>53>^7a{m+N>169XA;sr9P7IO80H%G`3KcoH|*)(Q%cw?{?+DOm>e z)rqbUeW`MNbwB?ezhdK%)ZiNXDA_+kg0vsqFo>T}D#}a#TAcTzQfR)dpqi;mf=U#olPbJn?C|eb+qBzJPMWIgz4m z!#yZC#%U7!e9OM(aipJ5+~-(_I0jT|>P-EK{vvyJoguaVDV^q7Je#FjWlk5m8-(iw zP7-;>d6KLa1kYzI8&V`6PN-x;6`bXaD*|L`vraLp&L8s|#OoQbntqk!_@1vJ*Z^E+ zzpN{5PLpLu)WHFUpE*3*>jvFgfWN$M;l6vI6x)0=(x{vryS z00*N*2HctO#Hxy9jVXx)k)&m)Bv_K5egYf!_P9OBXg!QP3g%p%zKA4_ah-F|{ap=P zP+0tp&292M)Ci&eSb*vqobJMvc~_7idr$R-Y2C=Ba@dGg%f<#fs%j)n3zWk>C`L+g zEv9vZm1H(s?i4;#nO_v*e8`Nm>w8%Ix*>!9b*z9DTEZ#o z$j+9tK&iksV=>PtHdB2z!In^^N45|cxwr(+M?7~Wh4#?2@)O)PTqfpSHpzac038>M zPcj^J1=M0W9LdvwH5QPnBwdhb#QE(>>oE({s`{yXsK(q55l1F^B|AD)0>#srO5n#? zi5!KFjYwe@J&#qAXYnjs(Of9&E&HMris!}&6!R^Xj?wJx(_B-7W}9iZQtbQ(l%Iva zPPs#Ooly;#OfGK>tV$-z)o#KfLf;#zQY?M~HJ~i+VCXMrxzuDeCh1a}3WL_T-VPch zzo=Pn#2E}2WRd3lYAt$sMJbVu4BE9}(pTj0j;`zY>jYifQKBQSP}7QmD*4rKJDqLH zoYs#!0jh@^k7V8yhAd;CBiwfFyHAa0FMZQ9?S8M`{osLmswdUkN= zMZCV`0ES4f2wY2}yisadmTW=iL@m@BJBfv;!Qqz6WS&C01?m!#Swebq4mqvRYgv4u za)_CQO^5cxM$ram*F;f{ZLyct8h4g4beY*_9cC8pL}8@>u)p;X?9HYXBQ}7Q!jTff zj+VD4QfWW17Pu{(u->0ll_RxCOWj&tNe}t~R5$KeT`lrK!VzxLKr)?u9X(NCqrG?# zP5TO{5b0Z5*y00TsA$9CL-jC;*qQFAuu;VlF;RG1wsLFq2<+8}orP}xE_fLyFE_*+zpKr6W z_ZELp#TS_~_J`4<`7J$yqxvMW21I+f%8W4gYzA>S&u_9B9F6De*6v+SM&3xz4!)?7;WcS02v3kdFupA#K@R2&BK#SlF zwa9A%6Odg=Flem#e(^^e1sLY!xxfY#0}4zpm4MbmE?Qc6&d z#Seq>{W|_FU8HelMFh1}I&jp7?vir2GacVu$qxyitYQ+5@f)EbGLUveQ-Y$DQaW&o2OagAO%RQA&s{k2ORbnO zMk?WhPuJil>f$;Df<*bYuD`~5N$WXx&Uadv5wEyOQ*ngie){nI{Pf{HNVw70X@ z*2chiSN$d$V{z1uSZJie*(RZEfe{JhJ_%>Gdwy@@ArS!KavSI%*Cd5yCk;A!*kWaq z0oz~9@-@Ps8sKH*r&TeovHgUMM3UKtNG2CJh@2R3roL)Yu63`2WbPcD6CMUG-a!dOohC0 zvQOhwARf-Q=kWqY`*NjCNxzW>Kge;95FTh4h6 znI_Z)AXzs%UVvA2hfULw^x>?gqq}+9MPT zIk-n54W%{ZKl&Opsefuj|NCl05B9&FiSLHSPWNgw5IELfLn!O&l?}EYFoIFZf|fAq zWfNvg_444to41tF?;K`6Emkg+sGVS8qSSC#s^IAr$3y*&3T}ayaU41(!(neBGRyw3 z_!Tj#v~eaG#f1Ty(NFPXkO;N6r5QX~kxIzkc3XN>gL&`X1EQU;#>B61L0CGkGcT+M zRhzGR_r7}g_Kh`hD`gE1EF3tsiS$WMAfw`RZflSw?4=d3##tfsS*xrIcnsUb{&MswH4x{h6=AkI_+SdG<$V7F@k>{M&3 zD0aJnv9!_MJCM#+@T)j**P4bfqC*&2EofLaHQWZt;I`3n?@5LJVQaV5y%olPpf?1J znugv8=7cS%52SK&paKbMv_R8)x3suUS7LSk4{dFIkn$`zXW2dH3|CI}-(t?@_ipKb zjX6VOrx>Wk3{9qcQ}{NoH4yt!@x1RqULVn&ILrdyrx)xvkZkeHC?EybxP=yG9>eHc zMNyh45v4%EX7fPF7aA}`n=^TC+QaC3bgkbqLp)#@3h(fWl_NSd9*vve7vB+eOfqvL zW^^ezC0+@RZoWQw@@k%B`4R{|{t{6*dG+fw61-lg;=@O2C+yx7jx!zVIqawcTW(xN z`S~KRnk{;%c}|=;HUGC{o#T;YRoq2X{lf|XQOo&`6i9Pg^7x zr4wfm1HMzH2LbjHQ%4*%Z9F;(zS|q)m6uCxW5~mWefI5!xjm2lQk|=?qqwb!`X)E* zN`){u$L2|AG~s^_WBK8_C@h7Zf7h*YHiX!A&LhC_+z;Lif5G6Q8sOoJ9$? z>tx^eij6GMmT&3|jK4O}a@IA_@@I__RJ&FytJHRJu;bY&03lmjsSYZ0YcK#-VZ?Zi zJ?@x&!mMF&bYR$?U*r#q!g~>-(jldeyfym)5n#$7dOC=nBP?H+CHTC{MIeatzyyb0 z(Vx)(QMN{BfpnAFgl#(UnD55GOYKJJktyDn-$ncOip7x9Ec)0iKj04yIB=#8Brmy* zlKvsKelgyG<@IUS)@Qr9jGfF)-uEFW!hMmdC%UPV5A?ISu{P{iP{?6pUK~&Aq#RV8 z-RWMn*N>x*mP`f47`q=Xt~!hiSMf0jKHoVKmE!<2@t6tKjmA~y8OeW6`;JbXu`U7JCM4Ozj+#+WKSf%|X z1egajeTCq(ILBwe2!8lTf3MH_V)xIMxWEOW)B3d&h!?ASOj+pT`m8Eb-tR(K8e_(- z7IB77S~8QSJEsr-l&oi)_3bHSKYjSuB-<4H^~ZQ!Uh&sI!AZj3{?}%OIF9_|eN2En z^!?w~vCjD}S(O{Kid8V1KE_dAj4OTy*2_ul%cXTNFJ%i#*MeuWy!)^u$Qk}s+0)n@ zjM`f3oX}9%Bv9C-u`qL0ftiPpvFr2e(;*VXtpvT-dingbKzf$tbXhXeSIgd=qGbX!5n&^ zQWVv3=CG=Tu~~wz5;6;rjBfS6MHVeDd4o$1}UCeluYgk9P$HgNHt`nsM z?obIOq{=702PmBesX)@wQl!{+$}DP8Kr&+cAlrvSznL9ENstlXNFITfq8tkE)uEe` z)qu35*qAE3uJ$go-N7Ao3rG6Ux)mb{nBH0_j>J$IcSawH*wQuIkwd0(2}3A<%TEai zAuD;b)Q_||T${uY*G1WGmpT|@y^u8i9 zb57Q(-ZTv5^Tf->7UN-1$gnQ9!m4;WR~gxD@Cd)H-;J+X98KrLCG0T`_vNn{&5Um~ z=!|xzwN!>RR?9l~?Y%+;J{@-g7+~x2`xy5KT?Y~;$H6+^WOIaDC-6=TLXzwq1gNs{ zfE=<9q?=zX()(Sa!qsKnt$Xt=L&$Z5uC~OAY{8@Pb{x+E+bl*)bP$p#dV86n{h5*$ z>6fLCbVmLzDYLdN#5Zm&X1y#9~7chljX^FdeV3%S}?C zsPRkq>$hmtpIsxOT1@T&%Y=3r4dg|VEGPu23Y;!l2%If6D_G>&#HRL09lcn6u^VN*|w9SZq3rDHj`mQ@gladdfcL z>TGjBvr()Ko5(;BB8YruED1P9+z5Ga{*k>JYJ?SV$5%QkAqdMVei;F3ZG zxv%0Pk^EpZ3K43!=3z*43_4laTvi1%l50AR+9G zAgNbPZkEq`CHuG=jV14Ok^CDxD9%Jk0AWN3mBuU6o?U0)n#?6&$2{nrKK%Xj@b}Ls zh?*^cl{;s9Z(U%&5#V0OSLWS}M-Of>q5xDJ>i3mHDg(r-)67~^h9xx*iAb;k_@-c6 z@I@X&0duzUMhFqCfHmwawt$~RErqjI!>M9>sD2Z;sBmZj{0Wn% zL2bSp<57e_elP| z;x&dvV9L1A9!F0w>tb)*MV0pSpfx-U5b0@{#IN%bl?cZU;b6M)X!;=?4$tVzaOlco z2n|6;U3$c&^uGiP?t(35YQb(?#$v+PP*#MvfcOr6QIVkE2qlgLE;na$b!sXtSyC?; zUkU9Jg3FMAhuTNJ(L_ZQ-h8&^ts!#sd%I89Us!#q%<@1yLRG&dTQ)ZOq91i{^{&|Xj4kS7}KEp@& z1Rua}Qso~EqH#cFWvxrG;o&jx40+slG(aB^Q>e*~!i)S%kE z4kzb>$ox`9YRDhy1Z-c&KjAds0$+~cx_b#N>q7BfbihWdy+m&6P9r*vYcG!sByZ7B ziaCl^^lR>tRA5u|lm`M%ubB^>qvkFdRN6=(Bt2>^pzB3X3RP||G;Fx|o#)5L`~q#$ zq+$ebi?{vo%}^yes=UNGv5Rg+6Z{5>p`oXl(QY70>`^KP&9V<6E{rY+&=Lv=zyw;O zxXCgxz>XxL(Uu=dUqR9uw+NG4yAMhcjyN@^xMGY9?A$fHxDK6zxIcZ_1Wbc`DIyFl zMfqG~$RJ&KY*L~@QIOWT>9K-=RsJ45>0)5CgSWWoYLi{AZ=-cQou;K$Tt)F>oy2pI zilJ>09&xi|O(&We?^(PCCR*v%rpN{5H%^4AghZAYla7;;wNj2ZxKiAr<6F24FB2e> zGT7BnoVJkf1C&r2*dfxpVe?e^?B{%oLQX1lP;WeD|8v<&RT$Yk`z1za1~pdSg(~(I^wYort=}Ej7SSx(4OGu@ zzd}vmH}%cn_s5OJH8)2lB{UKNOV|3;!&QFM^IrS?!f!5;UTs&JCCOj57GNm=*W*8a z^5maOq*WIY8q44Bvpk|2v+0H$yHWFU@*5qL2YvHaJ-KJA{&Uv)_fmiS z4_NAt|4T0Qy?^LZS9Oifx=BuMausHeCv4641;u0tToPWVblmi5T%rVAR)ar@e4rS{F~^Cuo=cxk1iC`O}bzu7}o?cP18rQY|OX{mH~J(yMX{7({vcNWX5UH$5(MV_O(AI4*(S5Kbk zcRy}daBa=XRA=LSmUp3<<6oT6(rT)V0gsL6@1;{SuuQW}5gEX9{P(jYaApThmIATG z3O}E20Imrq5>9X_1=5nPk>47B6deYmI zy)q3wZW06;|K>dAhH(dSmR7_Ns^QVW0DCpUgNsr2pi}UGinG`+C&z^<% zM%{e4C3Q2G(m%Q%0_hG`vokQ-lLA|TWaP?Lxi~`xbHv#sfDQXvDBNl*l6jXQ-tXea z8V3MvrU9QWJvr0p6=d{$nPO{4##RXm-enn@oVIw?@o;!Nt)TF|LU&*wF&zS+re7b7 rnmm9ikvwAdM;^E*I3yR9uQIQTjSg)(2srKgv-tl3t_>WHOS}O96&Nf# literal 0 HcmV?d00001 diff --git a/scripts/evaluate_humaneval_x.py b/scripts/evaluate_humaneval_x.py new file mode 100644 index 0000000..eb91b9e --- /dev/null +++ b/scripts/evaluate_humaneval_x.py @@ -0,0 +1,71 @@ +import argparse +import os +from pathlib import Path +from codegeex.benchmark.evaluate_humaneval_x import evaluate_functional_correctness +#GLOBALS +INPUT_FILE: str +LANGUAGE: str +N_WORKERS: int +TIMEOUT: int + + +parser = argparse.ArgumentParser("Debugging evaluate humaneval_x") +# Path to the .jsonl file that contains the generated codes. +parser.add_argument("-s","--samples", type=str) + +# Target programming language, currently support one of ["python", "java", "cpp", "js", "go"] +parser.add_argument("-l","--language", default="python", type=str) + +# Number of parallel workers. +parser.add_argument("-w","--workers", default=64, type=int) + +# Timeout in seconds. +parser.add_argument("-t","--timeout", default=5, type=int) + +args = parser.parse_args() + +INPUT_FILE = args.samples +LANGUAGE = args.language +N_WORKERS = args.workers +TIMEOUT= args.timeout + + + +SCRIPT_PATH: str = Path(os.path.abspath(__file__)) +print(SCRIPT_PATH) +SCRIPT_DIR: str = os.path.dirname(SCRIPT_PATH) +print(SCRIPT_DIR) +MAIN_DIR: str = os.path.dirname(SCRIPT_DIR) +print(MAIN_DIR) + +DATA_DIR=os.path.join(MAIN_DIR,"codegeex/benchmark/humaneval-x/" + LANGUAGE + "/data/humaneval_" + LANGUAGE + ".jsonl.gz") +print(DATA_DIR) + +TMP_DIR=os.path.join(MAIN_DIR, "/codegeex/benchmark/humaneval-x/") + + +#Debugging +INPUT_FILE='/home/rog0d/Escritorio/CodeGeeX/generations/humaneval_rust_generations.jsonl.gz' +LANGUAGE='rust' +DATA_DIR=os.path.join(MAIN_DIR,"codegeex/benchmark/humaneval-x/" + LANGUAGE + "/data/humaneval_" + LANGUAGE + ".jsonl.gz") + +""" +input_file: str = None, + tmp_dir: str = "./", + n_workers: int = 32, + timeout: float = 5.0, + problem_file: str = "../data/humaneval_python.jsonl.gz", + out_dir: str = None, + k: List[int] = [1, 10, 100], + test_groundtruth: bool = False, + example_test: bool = False, + +""" + +evaluate_functional_correctness(input_file=INPUT_FILE, + n_workers=N_WORKERS, + tmp_dir=TMP_DIR, + problem_file=DATA_DIR, + timeout=300.0) + +